decocms 4.204.3 → 4.204.5

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 (225) hide show
  1. package/dist/client/assets/{AlertCircle-Ckh9QyVE.js → AlertCircle-eWqfwqSk.js} +1 -1
  2. package/dist/client/assets/{AreaChart-n2Oo4nQd.js → AreaChart-DbxPjI7V.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-RnD3AF1o.js → ArrowLeft-C4ehrtxf.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-BkvmxV5_.js → ArrowUp-CMnSehpv.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-DzUFDmmj.js → ArrowUpRight-BLLXX4u8.js} +1 -1
  6. package/dist/client/assets/{Check-DOgDdlX1.js → Check-BxlNYdyu.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-CzhYjSwf.js → CheckCircle-cTQ5bq1x.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-DlUR221w.js → ChevronDown-Bl-gbb5D.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-XRl7Q70a.js → ChevronRight-SVoMdBIr.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-C693p5q4.js → ChevronUp-ibUc2L0E.js} +1 -1
  11. package/dist/client/assets/{Copy01-BW92d4Go.js → Copy01-DnKPK-tE.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-CTX9n1ku.js → CpuChip01-DIh6RyIT.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-Be6B4cmP.js → CreditCard01-BKpsuUPO.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-A0PLjeOd.js → DotsVertical-Cyzm9R-X.js} +1 -1
  15. package/dist/client/assets/{Eye-CamAkprO.js → Eye-Ho9X48lD.js} +1 -1
  16. package/dist/client/assets/{FilterLines-BKqF2vuj.js → FilterLines-folN2b8B.js} +1 -1
  17. package/dist/client/assets/{Globe01-DbjnW3Y4.js → Globe01-CXVmwzl9.js} +1 -1
  18. package/dist/client/assets/{Globe04-bck8qerz.js → Globe04-BTeCuOvT.js} +1 -1
  19. package/dist/client/assets/{HardDrive-BHQjbSMm.js → HardDrive-DpOrGlIE.js} +1 -1
  20. package/dist/client/assets/{Key01-Bozm_5V-.js → Key01-0cL5_CU1.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-B407Estb.js → LayoutLeft-CmTzi6AP.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-BG1a_cKJ.js → LinkExternal01-DPREIW4g.js} +1 -1
  23. package/dist/client/assets/{LogOut01-SGUFJP2M.js → LogOut01-CgQIS4Bg.js} +1 -1
  24. package/dist/client/assets/{Monitor01-DJo-oI0s.js → Monitor01-C5ipg7Jj.js} +1 -1
  25. package/dist/client/assets/{Palette-DiFHHa_f.js → Palette-DYt2NwzQ.js} +1 -1
  26. package/dist/client/assets/{Play-BG1XdpM-.js → Play-Kg5Vs-D9.js} +1 -1
  27. package/dist/client/assets/{Plus-dQXUEHA-.js → Plus-DU-HYvFc.js} +1 -1
  28. package/dist/client/assets/{SearchLg-F2js49ME.js → SearchLg-Cx6bc77Z.js} +1 -1
  29. package/dist/client/assets/{SearchMd-tFY89YJL.js → SearchMd-1D5oC9pM.js} +1 -1
  30. package/dist/client/assets/{Settings02-CMApCgJd.js → Settings02-tG_VFNPX.js} +1 -1
  31. package/dist/client/assets/{Share07-DAylEEku.js → Share07-DfnpcKX0.js} +1 -1
  32. package/dist/client/assets/{Shield01-JoTuyS_F.js → Shield01-HgXwoxpt.js} +1 -1
  33. package/dist/client/assets/{Star01-D9CNdQ0B.js → Star01-B7awJcoe.js} +1 -1
  34. package/dist/client/assets/{Stars01-mKzaRqOI.js → Stars01-fbYgNxrc.js} +1 -1
  35. package/dist/client/assets/{Stars02-DXQvK2vE.js → Stars02-6wQzM7__.js} +1 -1
  36. package/dist/client/assets/{Sun-D1tKAbu0.js → Sun-60-McC9m.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-BQgwZk3y.js → SwitchHorizontal01-BiMRxuc1.js} +1 -1
  38. package/dist/client/assets/{Tool01-BcOwjlqW.js → Tool01-2Fnfs3Sg.js} +1 -1
  39. package/dist/client/assets/{Tool02-D28vebAz.js → Tool02-CzwB6nu-.js} +1 -1
  40. package/dist/client/assets/{Trash01-C-nCZCWy.js → Trash01-7WAs2HMG.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-CD9aTzBI.js → TrendUp01-BweYKA9m.js} +1 -1
  42. package/dist/client/assets/{Upload01-CmVJo3In.js → Upload01-C519RPqU.js} +1 -1
  43. package/dist/client/assets/{User01-2UPxi4XX.js → User01-BtEyOyQR.js} +1 -1
  44. package/dist/client/assets/{Users01-FYtPpQpU.js → Users01-DahFJ7T8.js} +1 -1
  45. package/dist/client/assets/{Users03-Dk1C37OV.js → Users03-DEi8t-_U.js} +1 -1
  46. package/dist/client/assets/{X-DhQKIdA0.js → X-BlINW2QK.js} +1 -1
  47. package/dist/client/assets/{XCircle-BqSHcOgo.js → XCircle-FgU8VviO.js} +1 -1
  48. package/dist/client/assets/{XClose-DyQWrGXo.js → XClose-CHDIM91F.js} +1 -1
  49. package/dist/client/assets/{Zap-CIcmozB8.js → Zap-Dz9M1aKj.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-CpwXatgq.js → ZapSquare-Dx83aoUw.js} +1 -1
  51. package/dist/client/assets/{access-gate-BWLtht6A.js → access-gate-DUeHMCJL.js} +1 -1
  52. package/dist/client/assets/{agent-icon-BD9y4ivk.js → agent-icon-BqrlijgG.js} +1 -1
  53. package/dist/client/assets/{agents-list-D6Gje-zu.js → agents-list-Dks1TH83.js} +1 -1
  54. package/dist/client/assets/{ai-providers-BZX9oimY.js → ai-providers-CrYI_ZWx.js} +1 -1
  55. package/dist/client/assets/{alert-BDu80_P1.js → alert-ClFHrFgQ.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-COvTTmIn.js → alert-dialog-JGMCx73v.js} +1 -1
  57. package/dist/client/assets/{app-editor-ZyNGAbQz.js → app-editor-Dw3nodLY.js} +1 -1
  58. package/dist/client/assets/{auth-CC6XnLek.js → auth-H2TVFV6u.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-BfnNbrdc.js → auth-catchall-BrK83AJ6.js} +1 -1
  60. package/dist/client/assets/{auth-entry-CZz5RPYp.js → auth-entry-Dv7Nfcwx.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-CuP6aFPn.js → auth-split-layout-DsfKdm8n.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-LyVPWbSm.js → authenticate-and-persist-oauth-C73iBGq2.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-75slGm4H.js → automation-list-row-CPAOObj5.js} +1 -1
  64. package/dist/client/assets/{automation-runs-BmOVGPQj.js → automation-runs-CJ1z2l5D.js} +1 -1
  65. package/dist/client/assets/{automations-CAt9E5Yb.js → automations-DcsaA-lY.js} +1 -1
  66. package/dist/client/assets/{avatar-Co1ZwTG7.js → avatar-psifjWd8.js} +1 -1
  67. package/dist/client/assets/{badge-Ccp6rm3C.js → badge-CM_sNMle.js} +1 -1
  68. package/dist/client/assets/{billing-D9h9KEsA.js → billing-BSEdyOaG.js} +1 -1
  69. package/dist/client/assets/{block-document-73bKqzWa.js → block-document-BV7exDpK.js} +1 -1
  70. package/dist/client/assets/{brand-context-CnEbC5HP.js → brand-context-DUHkau0A.js} +1 -1
  71. package/dist/client/assets/{buckets-tyzW5O0X.js → buckets-BTCPzQ3t.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-BUn01cdg.js → bulk-category-panel-GfUWKGsh.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-CJutX_IM.js → capability-load-error-BTUKh35C.js} +1 -1
  74. package/dist/client/assets/{card-DaGKUKqL.js → card-kNesOblm.js} +1 -1
  75. package/dist/client/assets/{cards-BYtD6nBf.js → cards-DOUtV4yv.js} +1 -1
  76. package/dist/client/assets/{category-editor-B9IE5wtM.js → category-editor-CHIrOuxz.js} +1 -1
  77. package/dist/client/assets/{chat-context-DEDFQ8TK.js → chat-context-krvM9P8r.js} +1 -1
  78. package/dist/client/assets/{checkbox-X1g6azyE.js → checkbox-DnHhTMb2.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-DsNuSBVJ.js → cli-auth-success-CSLgUW7A.js} +1 -1
  80. package/dist/client/assets/{collection-detail-D2GkSKfR.js → collection-detail-C1F41t0k.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-CprCHPOv.js → collection-display-button-lt-aVeXI.js} +1 -1
  82. package/dist/client/assets/{collection-search-ORFnlq1p.js → collection-search-o7R-SAlX.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-Bldiaj5w.js → collection-table-wrapper-DccHk5q4.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-CZ6scJzy.js → collection-tabs-oj4yRxGz.js} +1 -1
  85. package/dist/client/assets/{command-BsqJ2Hbu.js → command-DiC1jOiB.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-Cbcn35be.js → commerce-onboarding-Dz39HUNF.js} +1 -1
  87. package/dist/client/assets/{connect-DCGawj8F.js → connect-SCerYvnH.js} +1 -1
  88. package/dist/client/assets/{connection-BgBWp-dk.js → connection-BmdBghHx.js} +1 -1
  89. package/dist/client/assets/{connection-card-lEsVqa2r.js → connection-card-DU4NYo9c.js} +1 -1
  90. package/dist/client/assets/{connection-detail-6utZcPHJ.js → connection-detail-Ckxj7gV-.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-ZszlRkQ_.js → connection-form-helpers-fQUg-ek4.js} +1 -1
  92. package/dist/client/assets/{connections-DqJ68jxX.js → connections-CC1rsgPk.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-pjPyrDAF.js → decopilot-sse-pool-CdjLMU5s.js} +1 -1
  94. package/dist/client/assets/{dialog-C4ZAgrVU.js → dialog-LXxfMOJp.js} +1 -1
  95. package/dist/client/assets/{domain-settings-D8B-iYQg.js → domain-settings-V0hYTXrn.js} +1 -1
  96. package/dist/client/assets/{drawer-BRFtAc06.js → drawer-CxBcQJHj.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-DW_E0Rj9.js → dropdown-menu-3wNamp2t.js} +1 -1
  98. package/dist/client/assets/{empty-state-BKSZU9_n.js → empty-state-BmTI25xb.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-DIFLEfQJ.js → extract-connection-data-D--9jTL4.js} +1 -1
  100. package/dist/client/assets/{file-explorer-DdNzhJ8K.js → file-explorer-B8zjZCWP.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-BE1oIqH9.js → file-type-icon-BWnT_spu.js} +1 -1
  102. package/dist/client/assets/{form-C6sISDbk.js → form-DJ-96uuU.js} +1 -1
  103. package/dist/client/assets/{general-B4-7X49v.js → general-Yxd9p7rp.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-CoIjHzEP.js → github-repo-picker-D4THRjhe.js} +1 -1
  105. package/dist/client/assets/{hooks-CyVdI2sU.js → hooks-ZpN0kjJd.js} +1 -1
  106. package/dist/client/assets/{index-CB6Bvwm8.js → index-BeNGkSka.js} +1 -1
  107. package/dist/client/assets/{index-DTj08rZ1.js → index-CCjUfElm.js} +5 -5
  108. package/dist/client/assets/{index-c-pbJYLJ.js → index-CHI-j6d0.js} +1 -1
  109. package/dist/client/assets/{index-DUduLUH6.js → index-CK-kdjWE.js} +1 -1
  110. package/dist/client/assets/{index-DcPTMaiL.js → index-CdBJcGEW.js} +1 -1
  111. package/dist/client/assets/{index-BoikrCDZ.js → index-CkAanTOI.js} +4 -4
  112. package/dist/client/assets/{index-BAb-Xq6l.js → index-CwdrR0b0.js} +1 -1
  113. package/dist/client/assets/{index-CoVVrqEx.js → index-Dnl5KNOU.js} +1 -1
  114. package/dist/client/assets/{index-BU2iYcDA.js → index-T7rSObhh.js} +1 -1
  115. package/dist/client/assets/{index-S0tPgONB.js → index-UVmHnScN.js} +1 -1
  116. package/dist/client/assets/{index-redirect-CW6HUate.js → index-redirect-CgfTsu31.js} +1 -1
  117. package/dist/client/assets/{input-B-e5wz_9.js → input-Knho6nC6.js} +1 -1
  118. package/dist/client/assets/{integration-icon-BRDJeBEu.js → integration-icon-CWz_OYuW.js} +1 -1
  119. package/dist/client/assets/{invite-member-dialog-BikqRGTI.js → invite-member-dialog-C-qL0eNL.js} +1 -1
  120. package/dist/client/assets/{label-kR9d7BEl.js → label-Ct9YQMW0.js} +1 -1
  121. package/dist/client/assets/{layout-DtUdsiql.js → layout-BGoQHfF1.js} +1 -1
  122. package/dist/client/assets/{login-DT9i5-Ou.js → login-BKQxuIA6.js} +1 -1
  123. package/dist/client/assets/{mcp-oauth-B8R66bIy.js → mcp-oauth-Dre3B5tB.js} +1 -1
  124. package/dist/client/assets/{members-B99bY3lL.js → members-C7lgqd3f.js} +1 -1
  125. package/dist/client/assets/{monaco-editor-lMUiW1aE.js → monaco-editor-Con3Mdpi.js} +1 -1
  126. package/dist/client/assets/{monitoring-stats-row-BB82GSbz.js → monitoring-stats-row-CZN4ayFF.js} +1 -1
  127. package/dist/client/assets/{multi-select-mheMH0Tn.js → multi-select-NSzK9XYB.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-DtGp80mH.js → oauth-callback-D_YdXVSz.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-ai-provider-WvGhGHMF.js → oauth-callback-ai-provider-DHc_b0tD.js} +1 -1
  130. package/dist/client/assets/{onboarding-CvbVmU29.js → onboarding-DD8QhgWU.js} +1 -1
  131. package/dist/client/assets/{org-layout-O7MZOEt1.js → org-layout-DlXNrupp.js} +1 -1
  132. package/dist/client/assets/{organization-choice-CzQri-lo.js → organization-choice-BN9hkWyd.js} +1 -1
  133. package/dist/client/assets/{orgs-D6pok3wX.js → orgs-CRiNLoOU.js} +1 -1
  134. package/dist/client/assets/{page-seo-form-Dok1QnOg.js → page-seo-form-D4TPw4KE.js} +1 -1
  135. package/dist/client/assets/{popover-Um_MRLh3.js → popover-DUFDlOLM.js} +1 -1
  136. package/dist/client/assets/{post-editor-CVmrJtU-.js → post-editor-DPbUFljg.js} +1 -1
  137. package/dist/client/assets/{primitives-DSVlUoHx.js → primitives-DyjBak3l.js} +1 -1
  138. package/dist/client/assets/{profile-BCzRCBrR.js → profile-DdocLxcE.js} +1 -1
  139. package/dist/client/assets/{project-app-view-C7cUsGn8.js → project-app-view-CCtPPjzA.js} +1 -1
  140. package/dist/client/assets/record-editor-DYyb0Utb.js +1 -0
  141. package/dist/client/assets/{redirect-editor-Bjx0FErb.js → redirect-editor-CWEpzn95.js} +1 -1
  142. package/dist/client/assets/registry-BkEdLOdr.js +2 -0
  143. package/dist/client/assets/{registry-layout-DXmch4wI.js → registry-layout-Bab-n4vf.js} +1 -1
  144. package/dist/client/assets/{reports-D57dvSt3.js → reports-CHLr1E7G.js} +1 -1
  145. package/dist/client/assets/{require-capability-x6tc6gzV.js → require-capability-BsWNOsPS.js} +1 -1
  146. package/dist/client/assets/{required-auth-layout-Sg6yDFUx.js → required-auth-layout-DaunRt4v.js} +1 -1
  147. package/dist/client/assets/{reset-password-ASRW7kMt.js → reset-password-L1il3BP0.js} +1 -1
  148. package/dist/client/assets/{roles-B9ttM29N.js → roles-1sqYhouG.js} +1 -1
  149. package/dist/client/assets/{search-input-CSqZeGXW.js → search-input-BoXew_-F.js} +1 -1
  150. package/dist/client/assets/{secrets-xE9irqvl.js → secrets-D8yD7wL8.js} +1 -1
  151. package/dist/client/assets/{sections-editor-B3mzmGNh.js → sections-editor-DvTWsIyw.js} +1 -1
  152. package/dist/client/assets/{select-BzuZD9AC.js → select-4FUAFbRi.js} +1 -1
  153. package/dist/client/assets/select-model-ByzNpOxs.js +4 -0
  154. package/dist/client/assets/{self-tool-result-ComV2R5p.js → self-tool-result-Dv0O_B1Y.js} +1 -1
  155. package/dist/client/assets/{seo-editor-D7MeKunT.js → seo-editor-D4hYM5HA.js} +1 -1
  156. package/dist/client/assets/{settings-layout-DZIEa_Dq.js → settings-layout-Bhznsncx.js} +1 -1
  157. package/dist/client/assets/{settings-section-DzGwG5-8.js → settings-section--ky5ERjY.js} +1 -1
  158. package/dist/client/assets/{shell-controls-DaazQ3Xo.js → shell-controls-DpUUTQkW.js} +1 -1
  159. package/dist/client/assets/{shell-layout-B8GUiPwv.js → shell-layout-7tWbugO4.js} +1 -1
  160. package/dist/client/assets/{sidebar-BuHfKAE9.js → sidebar-BWGUWJ80.js} +1 -1
  161. package/dist/client/assets/{skeleton-Biuy1vSp.js → skeleton-C9qwQDE-.js} +1 -1
  162. package/dist/client/assets/{spinner-C4n3MjD7.js → spinner-B4F1U5XF.js} +1 -1
  163. package/dist/client/assets/{sso-BR3uQYW3.js → sso-CXd-di1n.js} +1 -1
  164. package/dist/client/assets/{store-Cq7Tb1uo.js → store-Bw91J78R.js} +1 -1
  165. package/dist/client/assets/store-registry-DJpGDOnk.js +2 -0
  166. package/dist/client/assets/{studio-tools-BZs2ezpK.js → studio-tools-aIwwGsW6.js} +1 -1
  167. package/dist/client/assets/{switch-DWeKyPhK.js → switch-C-MWWpZy.js} +1 -1
  168. package/dist/client/assets/{synced-repos-DaqelAHj.js → synced-repos-DRu5lhrU.js} +1 -1
  169. package/dist/client/assets/{tab-id-CXqMbEty.js → tab-id-BV6JPyUs.js} +1 -1
  170. package/dist/client/assets/{table-CxghGJ2p.js → table-BTrk2-0n.js} +1 -1
  171. package/dist/client/assets/{tabs-BJlYHGtR.js → tabs-CUef0A7n.js} +1 -1
  172. package/dist/client/assets/{textarea-DUZ6Deea.js → textarea-BvS1yIDk.js} +1 -1
  173. package/dist/client/assets/{toggle-group-BdRiuw4z.js → toggle-group-BYAWg6ie.js} +1 -1
  174. package/dist/client/assets/{toolbar-CqPrxMUC.js → toolbar-DQxnMuj2.js} +1 -1
  175. package/dist/client/assets/{tooltip-BusBlnFD.js → tooltip-taPKjPYY.js} +1 -1
  176. package/dist/client/assets/{use-ai-providers-Ci6NrFUd.js → use-ai-providers-CMrLIeXL.js} +1 -1
  177. package/dist/client/assets/{use-automations-CsHhF3du.js → use-automations-CEKE2bbb.js} +1 -1
  178. package/dist/client/assets/{use-autosave-BQC6Ppkp.js → use-autosave-Ba6xwRx4.js} +1 -1
  179. package/dist/client/assets/{use-capability-BKMDZXdW.js → use-capability-D9uadLyL.js} +1 -1
  180. package/dist/client/assets/{use-clock-tick-BdrXlOfT.js → use-clock-tick-Bk8eoLE3.js} +1 -1
  181. package/dist/client/assets/{use-connection-C9GVzzJv.js → use-connection-Ckvj-8eO.js} +1 -1
  182. package/dist/client/assets/{use-copy-CCyOuUbD.js → use-copy-CFwk4HSN.js} +1 -1
  183. package/dist/client/assets/{use-create-virtual-mcp-DWlAESFz.js → use-create-virtual-mcp-C3__NXCz.js} +1 -1
  184. package/dist/client/assets/{use-debounced-autosave-CABF4r6S.js → use-debounced-autosave-BDWLDjfj.js} +1 -1
  185. package/dist/client/assets/{use-debounced-value-DMVx8QeJ.js → use-debounced-value-BJ87L9wM.js} +1 -1
  186. package/dist/client/assets/{use-deco-credits-BPuC9GbE.js → use-deco-credits-B8YDnwMo.js} +1 -1
  187. package/dist/client/assets/{use-decopilot-events-CLtwCBKd.js → use-decopilot-events-DZ5K-2Gd.js} +1 -1
  188. package/dist/client/assets/{use-delete-connection-Cw6Ybe8W.js → use-delete-connection-C21XUfEm.js} +1 -1
  189. package/dist/client/assets/{use-deployment-admin-Dr995W-x.js → use-deployment-admin-CpXEkmrA.js} +1 -1
  190. package/dist/client/assets/{use-file-configs-D9Pw6e5Y.js → use-file-configs-Cohgbawc.js} +1 -1
  191. package/dist/client/assets/{use-infinite-scroll-DVkwV9ek.js → use-infinite-scroll-Cv4MF3yr.js} +1 -1
  192. package/dist/client/assets/{use-join-requests-Bda1HN8w.js → use-join-requests-BJgctLVk.js} +1 -1
  193. package/dist/client/assets/{use-mcp-client-BFct8DK6.js → use-mcp-client-CeYsJLKq.js} +1 -1
  194. package/dist/client/assets/{use-mcp-tools-B23ZLmF_.js → use-mcp-tools-Do3jr0qj.js} +1 -1
  195. package/dist/client/assets/{use-members-Dv9qiDLS.js → use-members-3372wiu0.js} +1 -1
  196. package/dist/client/assets/{use-mobile-D5CjYT-t.js → use-mobile-BE6qfH--.js} +1 -1
  197. package/dist/client/assets/{use-navigate-to-agent-DDcLJbgC.js → use-navigate-to-agent-B-1Xa991.js} +1 -1
  198. package/dist/client/assets/{use-open-billing-url-BLuDDF6_.js → use-open-billing-url-B1Yvyeo0.js} +1 -1
  199. package/dist/client/assets/{use-org-auth-client-B_vZqzl1.js → use-org-auth-client-KbT2rAgu.js} +1 -1
  200. package/dist/client/assets/{use-org-sso-CX-2huFT.js → use-org-sso-C7qn3ZJg.js} +1 -1
  201. package/dist/client/assets/{use-organization-roles-Bz_nbU9S.js → use-organization-roles-DtV5dGeU.js} +1 -1
  202. package/dist/client/assets/{use-organization-settings-C4mLYGfM.js → use-organization-settings-DLQ46sjp.js} +1 -1
  203. package/dist/client/assets/{use-registry-connections-V6LNGgjL.js → use-registry-connections-CjKSSkVu.js} +1 -1
  204. package/dist/client/assets/{use-secrets-CMrUP_Gt.js → use-secrets-6fcs177_.js} +1 -1
  205. package/dist/client/assets/{use-section-preview-base-yc9Udv6x.js → use-section-preview-base-Bb5vStt_.js} +1 -1
  206. package/dist/client/assets/{use-status-sounds-DLjSY1RY.js → use-status-sounds-CjE5C129.js} +1 -1
  207. package/dist/client/assets/{use-tags-CUsdpgK7.js → use-tags-CSjt-0nb.js} +1 -1
  208. package/dist/client/assets/{use-view-mode-BxeTvkA3.js → use-view-mode-CATwAYVt.js} +1 -1
  209. package/dist/client/assets/{use-virtual-mcp-BbZkXMg5.js → use-virtual-mcp-BXK3dl5o.js} +1 -1
  210. package/dist/client/assets/useInfiniteQuery-8r7Q1353.js +1 -0
  211. package/dist/client/assets/{useRouterState-Cdk4SPlF.js → useRouterState-CUNf2eaL.js} +1 -1
  212. package/dist/client/assets/useSuspenseInfiniteQuery-GUKXgUbc.js +1 -0
  213. package/dist/client/assets/{users-DLwEr9dG.js → users-d9Y3QVId.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-DfUZ9dF7.js → variant-calendar-C3Hy7SZn.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-CABtz7D9.js → view-mode-toggle-BQpbOUHD.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +2 -2
  218. package/dist/server/server.js +2 -2
  219. package/package.json +1 -1
  220. package/dist/client/assets/record-editor-DY96Lhhi.js +0 -1
  221. package/dist/client/assets/registry-CTdf9Vtd.js +0 -2
  222. package/dist/client/assets/select-model-B4wAXAbY.js +0 -4
  223. package/dist/client/assets/store-registry-D4JEgFzX.js +0 -2
  224. package/dist/client/assets/useInfiniteQuery-DuorN97l.js +0 -1
  225. package/dist/client/assets/useSuspenseInfiniteQuery-WYoakn1U.js +0 -1
@@ -1462,7 +1462,7 @@ ${"text"in A?A.text:""}`.trim()}});else z=[{type:"text",text:D},...E];return[...
1462
1462
  from task_board_items
1463
1463
  where organization_id = ${$.organizationId}
1464
1464
  and status = ${Q}
1465
- )`,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(G)}async update($,Z,X,Q){let G=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),Y=this.itemFromDbRow(G);return await this.attachRefs([Y],Z),Y}async delete($,Z,X){return this.inTransaction(async(Q)=>{let G=await Q.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!G)return!1;if(DQ({createdBy:G.created_by}))return await Q.updateTable("task_board_items").set({dismissed_at:new Date().toISOString(),updated_by:X}).where("id","=",$).where("organization_id","=",Z).where("dismissed_at","is",null).execute(),!0;return await Q.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute(),!0})}async dismissedFindingKeys($,Z){if(Z.length===0)return new Set;let X=await this.db.selectFrom("task_board_items").select(["external_key"]).where("organization_id","=",$).where("external_key","in",Z).where("dismissed_at","is not",null).execute();return new Set(X.flatMap((Q)=>Q.external_key??[]))}async listDismissedFindings($){return(await this.db.selectFrom("task_board_items").select(["external_key","updated_by","dismissed_at"]).where("organization_id","=",$).where("dismissed_at","is not",null).orderBy("dismissed_at","desc").execute()).flatMap((X)=>X.external_key&&X.dismissed_at?[{externalKey:X.external_key,dismissedBy:X.updated_by,dismissedAt:X.dismissed_at instanceof Date?X.dismissed_at.toISOString():X.dismissed_at}]:[])}async restoreDismissedFindings($,Z){if(Z&&Z.length===0)return 0;let X=this.db.updateTable("task_board_items").set({dismissed_at:null}).where("organization_id","=",$).where("dismissed_at","is not",null);if(Z)X=X.where("external_key","in",Z);let Q=await X.executeTakeFirst();return Number(Q.numUpdatedRows??0n)}async setItemTags($,Z,X){await this.inTransaction(async(Q)=>{if(await Q.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(G)=>G.where("id","not in",Z)).execute(),Z.length>0)await Q.insertInto("task_board_item_tags").values(Z.map((G)=>({task_board_item_id:$,id:G,created_by:X,created_at:new Date().toISOString()}))).onConflict((G)=>G.doNothing()).execute()})}async addItemTags($,Z,X){if(Z.length===0)return;await this.db.insertInto("task_board_item_tags").values(Z.map((Q)=>({task_board_item_id:$,id:Q,created_by:X,created_at:new Date().toISOString()}))).onConflict((Q)=>Q.doNothing()).execute()}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((Q)=>Q.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async listItemsPendingReview($,Z,X){let Q=this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","updated_at"]).where("status","=","in_review").where("assignee_id","=",l4).where("dismissed_at","is",null);if(X)Q=Q.where((Y)=>Y.or([Y("last_swept_at","is",null),Y("last_swept_at","<",X)]));if(Z){let Y=new Date(Z.updatedAt);Q=Q.where((J)=>J.or([J("updated_at",">",Y),J.and([J("updated_at","=",Y),J("id",">",Z.id)])]))}return(await Q.orderBy("updated_at","asc").orderBy("id","asc").limit($).execute()).map((Y)=>({id:Y.id,organizationId:Y.organizationId,updatedAt:Y.updated_at instanceof Date?Y.updated_at.toISOString():String(Y.updated_at)}))}async markSwept($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).execute()}async failedRunInfo($,Z){let X=await this.db.selectFrom("threads as t").leftJoin((Q)=>Q.selectFrom("thread_message_parts as p").select(["p.thread_id","p.payload"]).where("p.kind","=","error").orderBy("p.created_at","desc").limit(1).as("err"),(Q)=>Q.onRef("err.thread_id","=","t.id")).select(["t.status","t.failure_kind as kind","err.payload as payload"]).where("t.id","=",$).where("t.organization_id","=",Z).executeTakeFirst();if(!X||X.status!=="failed")return null;return{kind:X.kind??null,errorText:AY$(X.payload)}}async scheduleRunRetry($,Z,X,Q){return(await this.db.updateTable("task_board_items").set({retry_at:Q,retry_attempts:X}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returning("id").execute()).length>0}async returnToTodoAfterFailure($,Z,X){if((await this.db.updateTable("task_board_items").set({status:"todo",retry_at:null,retry_attempts:0,updated_by:X,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returning("id").execute()).length===0)return null;return await this.getById($,Z)}async failNeverStartedLinkedThreads($,Z,X){let Q=await this.db.selectFrom("threads as t").innerJoin("task_board_item_threads as l","l.thread_id","t.id").select(["t.id as threadId","l.task_board_item_id as itemId","l.organization_id as organizationId"]).where("t.status","=","in_progress").where("t.run_started_at","is",null).where((W)=>W.and([W("t.updated_at","<",Z),W.or([W("t.last_progress_at","is",null),W("t.last_progress_at","<",Z)])])).limit($).execute();if(Q.length===0)return[];let G=Q.map((W)=>W.threadId),Y=await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:"abandoned",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","in",G).where("status","=","in_progress").returning("id").execute(),J=new Set(Y.map((W)=>W.id));return Q.filter((W)=>J.has(W.threadId))}async listItemsStuckAfterFailure($,Z){let X=await this.db.selectFrom("task_board_items as i").innerJoin("task_board_item_threads as l","l.task_board_item_id","i.id").innerJoin("threads as t","t.id","l.thread_id").select(["i.id as id","i.organization_id as organizationId","t.id as threadId"]).where("i.status","=","in_progress").where("i.assignee_id","=",l4).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where("t.updated_at","<",Z).where((G)=>G.not(G.exists(G.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("t.updated_at","desc").limit($).execute(),Q=new Set;return X.filter((G)=>!Q.has(G.id)&&Q.add(G.id))}async listItemsDueForRetry($,Z){return await this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","retry_attempts as attempts"]).where("retry_at","is not",null).where("retry_at","<=",Z).where("status","=","in_progress").orderBy("retry_at","asc").limit($).execute()}async claimDueRetry($,Z,X){return(await this.db.updateTable("task_board_items").set({retry_at:null}).where("id","=",$).where("organization_id","=",Z).where("retry_at","is not",null).where("retry_at","<=",X).returning("id").execute()).length>0}async clearRunRetry($,Z){await this.db.updateTable("task_board_items").set({retry_at:null,retry_attempts:0}).where("id","=",$).where("organization_id","=",Z).execute()}async clearSweepBudget($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((Q)=>Q.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((Q)=>({url:Q.url,number:Q.prNumber,repoOwner:Q.repoOwner,repoName:Q.repoName,connectionId:Q.connectionId??null,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let G=await this.getById(Q,Z);if(!G||!Oi0(G))continue;let Y=await this.advanceToReviewIfInProgress(Q,Z,G.updatedBy);if(!Y)continue;X.push(Y),await this.recordActivity({taskBoardItemId:Q,action:"status_changed",actorId:null,data:{from:G.status,to:"in_review"}}).catch((J)=>console.error("[task-board] in_review activity write failed",J))}return X}async advanceToReviewIfInProgress($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_review",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().executeTakeFirst();if(!Q)return null;let G=this.itemFromDbRow(Q);return await this.attachRefs([G],Z),G}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let G=await this.getById(Q,Z);if(!G||G.status!=="in_review")continue;X.push(await this.update(Q,Z,{status:"in_progress"},G.updatedBy))}return X}claimConflictResolution($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}claimReviewChangesBounce($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}async claimInReviewSuperAgentSlot($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",l4).returningAll().executeTakeFirst();if(!Q)return null;let G=this.itemFromDbRow(Q);return await this.attachRefs([G],Z),G}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let Q=Z.map((J)=>J.id),G=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",Q).orderBy("link.created_at","desc").execute(),Y=new Map;for(let J of G){let W={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:AY$(J.lastMessagePayload),hasPreview:$W4(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},K=Y.get(J.taskId);if(K)K.push(W);else Y.set(J.taskId,[W])}for(let J of Z)J.threads=Y.get(J.id)??[]}async attachTags($,Z){let X=Z.map((Y)=>Y.id),Q=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),G=new Map;for(let Y of Q){let J={id:Y.id,name:Y.name,color:Y.color??null,createdBy:Y.createdBy,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt},W=G.get(Y.taskId);if(W)W.push(J);else G.set(Y.taskId,[J])}for(let Y of Z)Y.tags=G.get(Y.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:l8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let Q=`rtok_${crypto.randomUUID()}`,G=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:Q}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(G)return{claimed:!0,token:G.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??Q}}async releaseReviewerClaim($,Z,X){await this.db.deleteFrom("task_board_review_claims").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).execute()}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:l8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((Q)=>({id:Q.id,taskBoardItemId:Q.task_board_item_id,action:Q.action,actorId:Q.actor_id,data:typeof Q.data==="string"?JSON.parse(Q.data):Q.data??{},occurredAt:Q.occurred_at instanceof Date?Q.occurred_at.toISOString():Q.occurred_at}))}async listComments($,Z){return(await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").selectAll("c").where("item.organization_id","=",Z).where("c.task_board_item_id","=",$).orderBy("c.created_at","asc").execute()).map((Q)=>wi0(Q))}async createComment($){if(!await this.db.selectFrom("task_board_items").select("id").where("id","=",$.taskBoardItemId).where("organization_id","=",$.organizationId).executeTakeFirst())return null;let X=null;if($.parentId){let G=await this.db.selectFrom("task_board_comments").select(["id","parent_id"]).where("id","=",$.parentId).where("task_board_item_id","=",$.taskBoardItemId).executeTakeFirst();if(!G)return null;X=G.parent_id??G.id}let Q=await this.db.insertInto("task_board_comments").values({id:l8("cmt"),task_board_item_id:$.taskBoardItemId,parent_id:X,author_id:$.authorId,body:$.body}).returningAll().executeTakeFirstOrThrow();return wi0(Q)}async updateComment($){let Z=await this.commentInOrg($.id,$.organizationId);if(!Z)return null;if($.body!==void 0&&Z.authorId!==$.callerId)return null;if($.resolved!==void 0&&Z.parentId!==null)return null;let X=await this.db.updateTable("task_board_comments").set({...$.body===void 0?{}:{body:$.body},...$.resolved===void 0?{}:{resolved:$.resolved},updated_at:new Date().toISOString()}).where("id","=",$.id).returningAll().executeTakeFirst();return X?wi0(X):null}async deleteComment($,Z,X){let Q=await this.commentInOrg($,Z);if(!Q)return!1;if(Q.authorId!==X&&Q.authorId!==l4)return!1;return await this.db.deleteFrom("task_board_comments").where("id","=",$).execute(),!0}async commentInOrg($,Z){let X=await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").select(["c.id","c.author_id","c.parent_id"]).where("c.id","=",$).where("item.organization_id","=",Z).executeTakeFirst();return X?{authorId:X.author_id,parentId:X.parent_id}:null}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,retryAttempts:$.retry_attempts??0,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var Yn;var kV=B(()=>{sH();IX();qZ();Yn=new Set(["completed","failed","expired"])});function TY$($){let Z=$[1],X=$[2],Q=Number($[3]);return{owner:Z,repo:X,number:Q,url:`https://github.com/${Z}/${X}/pull/${Q}`}}function pU0($){let Z=$.length>200000?$.slice(0,200000):$,X=ZW4.exec(Z);if(X&&Number(X[3])>0)return TY$(X);let Q=XW4.exec(Z);if(Q&&Number(Q[3])>0)return TY$(Q);return null}function RY$($){if($==null)return null;if(typeof $==="string")return pU0($);let Z;try{Z=JSON.stringify($)}catch{return null}return Z?pU0(Z):null}var ZW4,XW4;var Bi0=B(()=>{ZW4=/https?:\/\/github\.com\/([^/\s"']+)\/([^/\s"']+)\/pull\/(\d+)/,XW4=/https?:\/\/api\.github\.com\/repos\/([^/\s"']+)\/([^/\s"']+)\/pulls\/(\d+)/});function qY$($){if(IY$.has($.kind??""))return 0;return YW4($)?3:1}function YW4($){let Z=$.kind??"";if(IY$.has(Z))return!1;if(QW4.has(Z))return!0;let X=$.errorText??"";if(!X)return!1;return GW4.some((Q)=>Q.test(X))}var QW4,IY$,GW4;var MY$=B(()=>{QW4=new Set(["stall","liveness","projection","abandoned"]),IY$=new Set(["cancelled","superseded"]),GW4=[/sandbox did not become ready/i,/sandbox (?:provisioning|claim) failed/i,/mcp is unusable/i,/harness_crashed: unexpected eof/i,/too many clients already|timeout exceeded when trying to connect/i,/\b(?:429|503)\b|too many requests|service unavailable/i]});class VY${listeners=new Map;totalCount=0;strategy=null;started=!1;async start($){if(this.started){if(!$)return;await this.stop()}this.strategy=$,await this.strategy.start((Z,X)=>this.localEmit(Z,X)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add($){if(this.totalCount>=SY$)return console.warn(`[SSEHub] Total connection limit reached (${SY$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=kY$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${kY$})`),null;return Z.set($.id,$),this.totalCount++,$.id}remove($,Z){let X=this.listeners.get($);if(!X)return;if(X.delete(Z)){if(this.totalCount--,X.size===0)this.listeners.delete($)}}emit($,Z){if(this.strategy)this.strategy.broadcast($,Z);else this.localEmit($,Z)}countForOrg($){return this.listeners.get($)?.size??0}get count(){return this.totalCount}localEmit($,Z){let X=this.listeners.get($);if(!X||X.size===0)return;for(let Q of X.values()){if(Q.typePatterns&&!JW4(Z.type,Q.typePatterns))continue;try{Q.push(Z)}catch{this.remove($,Q.id)}}}}function JW4($,Z){for(let X of Z){if(X===$)return!0;if(X.endsWith(".*")){let Q=X.slice(0,-1);if($.startsWith(Q))return!0}}return!1}var kY$=50,SY$=500,r5;var tU0=B(()=>{Z5();r5=new VY$;K8.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(r5.count))});function Di0($,Z,X,Q){nJ({event:$,organizationId:Z,properties:{task_id:X.id,reports_task:DQ(X),...Q}})}function a4($,Z){r5.emit($,{id:crypto.randomUUID(),type:kt1,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function CY$($,Z){r5.emit($,{id:crypto.randomUUID(),type:St1,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function WW4($,Z){return $?[$]:Z}async function rU0($,Z,X){let Q=$.metadata?.runMetadata?.taskBoardItemId,G=!Q&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return WW4(Q,G)}async function Mx($,Z,X){let Q=$.organization?.id;if(!Q)return;try{for(let G of await rU0($,Q,X)){let Y=await $.storage.taskBoard.getById(G,Q);if(!Y||oU0[Z]<=oU0[Y.status])continue;let J=await $.storage.taskBoard.update(G,Q,{status:Z},$.auth?.user?.id??Y.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:Y.status,to:Z}}).catch((W)=>console.error("[task-board] activity log write failed",W)),a4(Q,J),Z==="in_progress"||Z==="in_review")Di0(Z==="in_progress"?"task_run_started":"task_run_completed",Q,J,{from:Y.status,via:"pr_open"})}}catch(G){console.error("[task-board] run transition failed",G)}}async function aU0($,Z,X,Q){let G=$.organization?.id;if(!G)return;try{let Y=RY$(Z);if(!Y)return;let J=await rU0($,G,Q);for(let W of J)await $.storage.taskBoard.linkPr({taskBoardItemId:W,organizationId:G,url:Y.url,prNumber:Y.number,repoOwner:Y.owner,repoName:Y.repo,connectionId:X??null})}catch(Y){console.error("[task-board] PR capture failed",Y)}}async function kx($,Z,X,Q){try{let G=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let Y of G)a4(X,Y),Di0("task_run_completed",X,Y,{from:"in_progress",via:"thread_finish"});for(let Y of G)await $.clearRunRetry(Y.id,X).catch(()=>{})}catch(G){console.error("[task-board] thread-finish transition failed",G)}await Li0($,Z,X),await NW4($,Q,Z,X)}async function Li0($,Z,X){try{let Q=await $.failedRunInfo(Z,X);if(!Q)return;let G=qY$(Q);for(let Y of await $.linkedTaskIds(Z,X)){let J=await $.getById(Y,X);if(!J||J.status!=="in_progress")continue;if(J.threads.some((H)=>H.hasMessages&&H.status==="in_progress"))continue;let W=J.retryAttempts;if(W<G){let H=HX(HW4,KW4,W,2,0.5);if(!await $.scheduleRunRetry(Y,X,W+1,new Date(Date.now()+H)))continue;await $.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:"in_progress",to:"in_progress",retry:W+1,of:G,reason:Q.errorText??Q.kind}}).catch(()=>{});continue}let K=await $.returnToTodoAfterFailure(Y,X,J.updatedBy);if(!K)continue;await $.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q.errorText??Q.kind,retriesSpent:W}}).catch(()=>{}),a4(X,K),Di0("task_run_failed",X,J,{reason:Q.kind??"error",retries_spent:W})}}catch(Q){console.error("[task-board] failed-run reaction failed",Q)}}async function NW4($,Z,X,Q){try{for(let G of await $.linkedTaskIds(X,Q)){let Y=await $.getById(G,Q);if(!Y)continue;if(oU0[Y.status]>=oU0.in_review)continue;if(Y.threads.some((W)=>W.hasMessages&&(W.status===null||!Yn.has(W.status))))continue;if((await $.listPrs(G,Q)).length>0)continue;await bt1(Z,Q,G)}}catch(G){console.error("[task-board] quota refund pass failed",G)}}async function _Y$($,Z){let X=$.organization?.id;if(!X)return;try{let Q=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let G of Q)a4(X,G)}catch(Q){console.error("[task-board] thread-run reopen failed",Q)}}function vY$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function bY$($){if(FW4.test($))return!0;return UW4.test($)&&wW4.test($)}var oU0,KW4=30000,HW4=120000,FW4,UW4,wW4;var e9=B(()=>{sH();f4();kV();Bi0();MY$();E6();tU0();qZ();oU0={triage:0,todo:1,in_progress:2,in_review:3,done:4};FW4=/\bgh\s+pr\s+create\b/,UW4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,wW4=/(?:-X|--request)\s+POST/});function sU0($,Z){return{resolveArgs:(X)=>PY$(X,$),onToolCalled:(X)=>{if(!X.isError&&vY$(X.toolName))Mx($,"in_review",Z);let Q=$.organization?.id,G=$.auth?.user?.id;if(!Q||!G)return;y1.capture({distinctId:G,event:"tool_called",groups:{organization:Q},properties:{organization_id:Q,tool_source:"mcp",tool_name:X.toolName,tool_safe_name:X.toolSafeName,read_only:X.annotations?.readOnlyHint??null,destructive:X.annotations?.destructiveHint??null,idempotent:X.annotations?.idempotentHint??null,open_world:X.annotations?.openWorldHint??null,latency_ms:Math.round(X.latencyMs),is_error:X.isError}})},onPrOpened:(X)=>{aU0($,X.result,X.connectionId,Z)}}}var Ei0=B(()=>{f4();qx();e9()});function fY$($){if($ instanceof Error)return $.message;if(typeof $==="string")return $;if(typeof $==="object"&&$!==null){let Z=$.message;if(typeof Z==="string")return Z;try{return JSON.stringify($)}catch{return String($)}}return String($)}function xY$($){let Z,X,Q=new Promise((W)=>{X=W}),G=(W)=>{if(Z===void 0)Z=W;X(Z)},J=($.streamText??Aw)({model:$.model,system:$.systemMessages,messages:$.messages,tools:$.tools,providerOptions:xQ$,prepareStep:$.prepareStep,temperature:$.temperature,maxOutputTokens:$.maxOutputTokens,stopWhen:$.stopWhen,abortSignal:$.abortSignal,onStepFinish:$.onStepFinish,onError:async(W)=>{let K=W.error??W,H=fY$(K);$.onError?.(H,K),G(H)},onAbort:async()=>{G(Z??"Run aborted before completion.")}});return Promise.resolve(J.finishReason).then(()=>{if(Z===void 0)X(void 0)}).catch((W)=>{let K=fY$(W);$.onError?.(K,W),G(K)}),{result:J,error:Q}}var yY$=B(()=>{k4();lm0()});import{SpanStatusCode as ji0,trace as OW4}from"@opentelemetry/api";async function Sx($){let Z=$.tracer??OW4.getTracer("decopilot"),X=$.stepLimit??($.kind==="agent"?$Q$:zN),Q=$.planMode??!1,G=$.toolApprovalLevel??"auto",Y=Z.startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":$.virtualMcp.id,"decopilot.agent.kind":$.kind,"decopilot.organization.id":$.organization.id,"decopilot.model.id":$.models.thinking.id}}),J=await sQ$({ctx:$.ctx,organization:$.organization,virtualMcp:$.virtualMcp,kind:$.kind,planMode:Q,isDecopilot:$.isDecopilot,agentInstructions:$.systemAgentInstructions,currentThreadId:$.currentThreadId,user:$.user,userContext:$.userContext,codingWorkspace:$.codingWorkspace,passthroughClient:$.passthroughClient,connectionsData:$.connectionsData}),W=$.additionalSystemMessages&&$.additionalSystemMessages.length>0?[...J,...$.additionalSystemMessages]:J,{resolveArgs:K,onToolCalled:H,onPrOpened:N}=sU0($.ctx,$.currentThreadId),{tools:F}=await WY$({kind:$.kind,ctx:$.ctx,mcpClient:$.mcpClient,writer:$.writer,planMode:Q,toolApprovalLevel:G,subtaskParams:$.subtaskParams,resolveArgs:K,onToolCalled:H,onPrOpened:N,fullBuiltInParams:$.subagentBuiltInParams,toolOutputMap:$.toolOutputMap}),U=$.extraTools?{...F,...$.extraTools}:F,w=$.__streamText?void 0:AU0($.provider,$.models.thinking),O=(L)=>{for(let E of L.toolCalls??[]){let j=E.input?.command;if(E.toolName==="bash"&&j&&bY$(j)){Mx($.ctx,"in_review",$.currentThreadId);let z=(L.toolResults??[]).find((A)=>A.toolCallId===E.toolCallId);aU0($.ctx,z?.output,null,$.currentThreadId);break}}return $.onStepFinish?.(L)},D=xY$({model:w,systemMessages:W,messages:$.messages,tools:U,prepareStep:$.prepareStep,temperature:$.temperature,maxOutputTokens:_Q$($.models.thinking.limits,r7(W)+r7($.messages)+r7(CQ$(U,$.activeToolNames))),stopWhen:jw(X),abortSignal:$.abortSignal,onStepFinish:O,streamText:$.__streamText,onError:(L,E)=>{if(console.error(`[runAgentLoop:${$.kind}:${$.virtualMcp.id}] Error`,L),Y.setStatus({code:ji0.ERROR,message:L}),E instanceof Error)Y.recordException(E)}});return Promise.resolve(D.result.finishReason).then(()=>{Y.setStatus({code:ji0.OK})}).catch((L)=>{let E=L instanceof Error?L.message:typeof L==="string"?L:`${L}`;Y.setStatus({code:ji0.ERROR,message:E})}).finally(()=>Y.end()),{result:D.result,error:D.error,span:Y,assembledSystemMessages:W}}var eU0=B(()=>{k4();Im0();AN();jV();eQ$();KY$();Ei0();e9();yY$()});function $w0($){let Z=Number.isFinite($)?Math.max(1,$):1,X=0,Q=0,G=[];return{async acquire(Y=0){if(X<Z)X++;else await new Promise((W)=>{let K={priority:Y,seq:Q++,wake:W},H=G.length;while(H>0&&G[H-1].priority>Y)H--;G.splice(H,0,K)});let J=!1;return()=>{if(J)return;J=!0;let W=G.shift();if(W)W.wake();else X--}},get active(){return X},get pending(){return G.length}}}var BW4,gY$=()=>BW4.acquire();var zi0=B(()=>{S$();BW4=$w0(c0().decopilotMaxConcurrentSubagents)});import{z as Pi0}from"zod";function Ti0($){return/socket connection was closed|econnreset|epipe|etimedout|fetch failed|terminated|network error|premature close|\b(429|500|502|503|504)\b|overloaded|rate.?limit|timed? ?out/i.test($)}function LW4($,Z,X=!1){if(!$.repo)return X?Z:void 0;return{repo:{owner:$.repo.owner,name:$.repo.name,connectedGithub:Boolean($.repo.connectionId)},branch:Z?.branch,cwd:Z?.cwd,workspaceKind:"github"}}function Ai0($){if($==="{}")return"";return $.length>uY$?$.slice(0,uY$)+"\u2026":$}function EW4($,Z){let X="";try{X=typeof Z==="string"?Z:JSON.stringify(Z??{})}catch{X=""}let Q=Ai0(X);return Q?`${$} ${Q}`:$}function Wi0($,Z,X){let{provider:Q,organization:G,models:Y,needsApproval:J,self:W,onChildUsage:K,vmTools:H,codingWorkspace:N,parentBuiltInParams:F,currentThreadId:U}=Z;return _$({description:DW4,inputSchema:$0(Ji0),needsApproval:J,execute:async function*({prompt:w,agent_id:O},{abortSignal:D,toolCallId:L}){let E=performance.now(),j=!!W&&(!O||O===W.id),z=j?W.id:O,A=W?" Omit agent_id to clone yourself (a fresh subagent with your tools + instructions).":"";if(!z){yield{text:"",error:`agent_id is required here.${A}`,finishReason:"error"};return}if(!j&&W){let b=(await X.storage.virtualMcps.findById(W.id,G.id))?.metadata?.subAgents;if(Array.isArray(b)&&!b.includes(z)){let x=b.length>0?" Or pass an id from <available-agents> or <available-connections>.":"";yield{text:"",error:`Target '${z}' is not in this agent's delegation allowlist (allow=${JSON.stringify(b)}).${A}${x}`,finishReason:"error"};return}}let P;try{P=await kU0(X,G.id,z,{superUser:j})}catch(l){yield{text:"",error:`${l.message} (agent_id="${z}").${A}`,finishReason:"error"};return}let{mcpClient:M,targetRef:k}=P,q=k.id,_=await gY$();D?.addEventListener("abort",()=>_(),{once:!0});try{let l=LW4(k,N,j),b=F?(()=>{let{toolOutputMap:Q0,...B0}=F;return{...B0,passthroughClient:M,agentId:k.id,vmContext:j?B0.vmContext:null,backgroundDispatcher:null,onChildUsage:void 0,pendingImages:[]}})():void 0,x="",p=null,h=0,o=200,w0=()=>{if(!p)return;let Q0=Ai0(p.args),B0=x&&!x.endsWith(`
1465
+ )`,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(G)}async update($,Z,X,Q){let G=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),Y=this.itemFromDbRow(G);return await this.attachRefs([Y],Z),Y}async delete($,Z,X){return this.inTransaction(async(Q)=>{let G=await Q.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!G)return!1;if(DQ({createdBy:G.created_by}))return await Q.updateTable("task_board_items").set({dismissed_at:new Date().toISOString(),updated_by:X}).where("id","=",$).where("organization_id","=",Z).where("dismissed_at","is",null).execute(),!0;return await Q.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute(),!0})}async dismissedFindingKeys($,Z){if(Z.length===0)return new Set;let X=await this.db.selectFrom("task_board_items").select(["external_key"]).where("organization_id","=",$).where("external_key","in",Z).where("dismissed_at","is not",null).execute();return new Set(X.flatMap((Q)=>Q.external_key??[]))}async listDismissedFindings($){return(await this.db.selectFrom("task_board_items").select(["external_key","updated_by","dismissed_at"]).where("organization_id","=",$).where("dismissed_at","is not",null).orderBy("dismissed_at","desc").execute()).flatMap((X)=>X.external_key&&X.dismissed_at?[{externalKey:X.external_key,dismissedBy:X.updated_by,dismissedAt:X.dismissed_at instanceof Date?X.dismissed_at.toISOString():X.dismissed_at}]:[])}async restoreDismissedFindings($,Z){if(Z&&Z.length===0)return 0;let X=this.db.updateTable("task_board_items").set({dismissed_at:null}).where("organization_id","=",$).where("dismissed_at","is not",null);if(Z)X=X.where("external_key","in",Z);let Q=await X.executeTakeFirst();return Number(Q.numUpdatedRows??0n)}async setItemTags($,Z,X){await this.inTransaction(async(Q)=>{if(await Q.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(G)=>G.where("id","not in",Z)).execute(),Z.length>0)await Q.insertInto("task_board_item_tags").values(Z.map((G)=>({task_board_item_id:$,id:G,created_by:X,created_at:new Date().toISOString()}))).onConflict((G)=>G.doNothing()).execute()})}async addItemTags($,Z,X){if(Z.length===0)return;await this.db.insertInto("task_board_item_tags").values(Z.map((Q)=>({task_board_item_id:$,id:Q,created_by:X,created_at:new Date().toISOString()}))).onConflict((Q)=>Q.doNothing()).execute()}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((Q)=>Q.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async listItemsPendingReview($,Z,X){let Q=this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","updated_at"]).where("status","=","in_review").where("assignee_id","=",l4).where("dismissed_at","is",null);if(X)Q=Q.where((Y)=>Y.or([Y("last_swept_at","is",null),Y("last_swept_at","<",X)]));if(Z){let Y=new Date(Z.updatedAt);Q=Q.where((J)=>J.or([J("updated_at",">",Y),J.and([J("updated_at","=",Y),J("id",">",Z.id)])]))}return(await Q.orderBy("updated_at","asc").orderBy("id","asc").limit($).execute()).map((Y)=>({id:Y.id,organizationId:Y.organizationId,updatedAt:Y.updated_at instanceof Date?Y.updated_at.toISOString():String(Y.updated_at)}))}async markSwept($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).execute()}async failedRunInfo($,Z){let X=await this.db.selectFrom("threads as t").leftJoinLateral((Q)=>Q.selectFrom("thread_message_parts as p").select("p.payload").whereRef("p.thread_id","=","t.id").where("p.kind","=","error").orderBy("p.created_at","desc").limit(1).as("err"),(Q)=>Q.onTrue()).select(["t.status","t.failure_kind as kind","err.payload as payload"]).where("t.id","=",$).where("t.organization_id","=",Z).executeTakeFirst();if(!X||X.status!=="failed")return null;return{kind:X.kind??null,errorText:AY$(X.payload)}}async scheduleRunRetry($,Z,X,Q){return(await this.db.updateTable("task_board_items").set({retry_at:Q,retry_attempts:X}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returning("id").execute()).length>0}async returnToTodoAfterFailure($,Z,X){if((await this.db.updateTable("task_board_items").set({status:"todo",retry_at:null,retry_attempts:0,updated_by:X,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returning("id").execute()).length===0)return null;return await this.getById($,Z)}async failNeverStartedLinkedThreads($,Z,X){let Q=await this.db.selectFrom("threads as t").innerJoin("task_board_item_threads as l","l.thread_id","t.id").select(["t.id as threadId","l.task_board_item_id as itemId","l.organization_id as organizationId"]).where("t.status","=","in_progress").where("t.run_started_at","is",null).where((W)=>W.and([W("t.updated_at","<",Z),W.or([W("t.last_progress_at","is",null),W("t.last_progress_at","<",Z)])])).limit($).execute();if(Q.length===0)return[];let G=Q.map((W)=>W.threadId),Y=await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:"abandoned",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","in",G).where("status","=","in_progress").returning("id").execute(),J=new Set(Y.map((W)=>W.id));return Q.filter((W)=>J.has(W.threadId))}async listItemsStuckAfterFailure($,Z){let X=await this.db.selectFrom("task_board_items as i").innerJoin("task_board_item_threads as l","l.task_board_item_id","i.id").innerJoin("threads as t","t.id","l.thread_id").select(["i.id as id","i.organization_id as organizationId","t.id as threadId"]).where("i.status","=","in_progress").where("i.assignee_id","=",l4).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where("t.updated_at","<",Z).where((G)=>G.not(G.exists(G.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("t.updated_at","desc").limit($).execute(),Q=new Set;return X.filter((G)=>!Q.has(G.id)&&Q.add(G.id))}async listItemsDueForRetry($,Z){return await this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","retry_attempts as attempts"]).where("retry_at","is not",null).where("retry_at","<=",Z).where("status","=","in_progress").orderBy("retry_at","asc").limit($).execute()}async claimDueRetry($,Z,X){return(await this.db.updateTable("task_board_items").set({retry_at:null}).where("id","=",$).where("organization_id","=",Z).where("retry_at","is not",null).where("retry_at","<=",X).returning("id").execute()).length>0}async clearRunRetry($,Z){await this.db.updateTable("task_board_items").set({retry_at:null,retry_attempts:0}).where("id","=",$).where("organization_id","=",Z).execute()}async clearSweepBudget($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((Q)=>Q.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((Q)=>({url:Q.url,number:Q.prNumber,repoOwner:Q.repoOwner,repoName:Q.repoName,connectionId:Q.connectionId??null,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let G=await this.getById(Q,Z);if(!G||!Oi0(G))continue;let Y=await this.advanceToReviewIfInProgress(Q,Z,G.updatedBy);if(!Y)continue;X.push(Y),await this.recordActivity({taskBoardItemId:Q,action:"status_changed",actorId:null,data:{from:G.status,to:"in_review"}}).catch((J)=>console.error("[task-board] in_review activity write failed",J))}return X}async advanceToReviewIfInProgress($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_review",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().executeTakeFirst();if(!Q)return null;let G=this.itemFromDbRow(Q);return await this.attachRefs([G],Z),G}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let G=await this.getById(Q,Z);if(!G||G.status!=="in_review")continue;X.push(await this.update(Q,Z,{status:"in_progress"},G.updatedBy))}return X}claimConflictResolution($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}claimReviewChangesBounce($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}async claimInReviewSuperAgentSlot($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",l4).returningAll().executeTakeFirst();if(!Q)return null;let G=this.itemFromDbRow(Q);return await this.attachRefs([G],Z),G}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let Q=Z.map((J)=>J.id),G=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",Q).orderBy("link.created_at","desc").execute(),Y=new Map;for(let J of G){let W={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:AY$(J.lastMessagePayload),hasPreview:$W4(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},K=Y.get(J.taskId);if(K)K.push(W);else Y.set(J.taskId,[W])}for(let J of Z)J.threads=Y.get(J.id)??[]}async attachTags($,Z){let X=Z.map((Y)=>Y.id),Q=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),G=new Map;for(let Y of Q){let J={id:Y.id,name:Y.name,color:Y.color??null,createdBy:Y.createdBy,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt},W=G.get(Y.taskId);if(W)W.push(J);else G.set(Y.taskId,[J])}for(let Y of Z)Y.tags=G.get(Y.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:l8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let Q=`rtok_${crypto.randomUUID()}`,G=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:Q}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(G)return{claimed:!0,token:G.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??Q}}async releaseReviewerClaim($,Z,X){await this.db.deleteFrom("task_board_review_claims").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).execute()}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:l8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((Q)=>({id:Q.id,taskBoardItemId:Q.task_board_item_id,action:Q.action,actorId:Q.actor_id,data:typeof Q.data==="string"?JSON.parse(Q.data):Q.data??{},occurredAt:Q.occurred_at instanceof Date?Q.occurred_at.toISOString():Q.occurred_at}))}async listComments($,Z){return(await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").selectAll("c").where("item.organization_id","=",Z).where("c.task_board_item_id","=",$).orderBy("c.created_at","asc").execute()).map((Q)=>wi0(Q))}async createComment($){if(!await this.db.selectFrom("task_board_items").select("id").where("id","=",$.taskBoardItemId).where("organization_id","=",$.organizationId).executeTakeFirst())return null;let X=null;if($.parentId){let G=await this.db.selectFrom("task_board_comments").select(["id","parent_id"]).where("id","=",$.parentId).where("task_board_item_id","=",$.taskBoardItemId).executeTakeFirst();if(!G)return null;X=G.parent_id??G.id}let Q=await this.db.insertInto("task_board_comments").values({id:l8("cmt"),task_board_item_id:$.taskBoardItemId,parent_id:X,author_id:$.authorId,body:$.body}).returningAll().executeTakeFirstOrThrow();return wi0(Q)}async updateComment($){let Z=await this.commentInOrg($.id,$.organizationId);if(!Z)return null;if($.body!==void 0&&Z.authorId!==$.callerId)return null;if($.resolved!==void 0&&Z.parentId!==null)return null;let X=await this.db.updateTable("task_board_comments").set({...$.body===void 0?{}:{body:$.body},...$.resolved===void 0?{}:{resolved:$.resolved},updated_at:new Date().toISOString()}).where("id","=",$.id).returningAll().executeTakeFirst();return X?wi0(X):null}async deleteComment($,Z,X){let Q=await this.commentInOrg($,Z);if(!Q)return!1;if(Q.authorId!==X&&Q.authorId!==l4)return!1;return await this.db.deleteFrom("task_board_comments").where("id","=",$).execute(),!0}async commentInOrg($,Z){let X=await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").select(["c.id","c.author_id","c.parent_id"]).where("c.id","=",$).where("item.organization_id","=",Z).executeTakeFirst();return X?{authorId:X.author_id,parentId:X.parent_id}:null}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,retryAttempts:$.retry_attempts??0,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var Yn;var kV=B(()=>{sH();IX();qZ();Yn=new Set(["completed","failed","expired"])});function TY$($){let Z=$[1],X=$[2],Q=Number($[3]);return{owner:Z,repo:X,number:Q,url:`https://github.com/${Z}/${X}/pull/${Q}`}}function pU0($){let Z=$.length>200000?$.slice(0,200000):$,X=ZW4.exec(Z);if(X&&Number(X[3])>0)return TY$(X);let Q=XW4.exec(Z);if(Q&&Number(Q[3])>0)return TY$(Q);return null}function RY$($){if($==null)return null;if(typeof $==="string")return pU0($);let Z;try{Z=JSON.stringify($)}catch{return null}return Z?pU0(Z):null}var ZW4,XW4;var Bi0=B(()=>{ZW4=/https?:\/\/github\.com\/([^/\s"']+)\/([^/\s"']+)\/pull\/(\d+)/,XW4=/https?:\/\/api\.github\.com\/repos\/([^/\s"']+)\/([^/\s"']+)\/pulls\/(\d+)/});function qY$($){if(IY$.has($.kind??""))return 0;return YW4($)?3:1}function YW4($){let Z=$.kind??"";if(IY$.has(Z))return!1;if(QW4.has(Z))return!0;let X=$.errorText??"";if(!X)return!1;return GW4.some((Q)=>Q.test(X))}var QW4,IY$,GW4;var MY$=B(()=>{QW4=new Set(["stall","liveness","projection","abandoned"]),IY$=new Set(["cancelled","superseded"]),GW4=[/sandbox did not become ready/i,/sandbox (?:provisioning|claim) failed/i,/mcp is unusable/i,/harness_crashed: unexpected eof/i,/too many clients already|timeout exceeded when trying to connect/i,/\b(?:429|503)\b|too many requests|service unavailable/i]});class VY${listeners=new Map;totalCount=0;strategy=null;started=!1;async start($){if(this.started){if(!$)return;await this.stop()}this.strategy=$,await this.strategy.start((Z,X)=>this.localEmit(Z,X)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add($){if(this.totalCount>=SY$)return console.warn(`[SSEHub] Total connection limit reached (${SY$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=kY$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${kY$})`),null;return Z.set($.id,$),this.totalCount++,$.id}remove($,Z){let X=this.listeners.get($);if(!X)return;if(X.delete(Z)){if(this.totalCount--,X.size===0)this.listeners.delete($)}}emit($,Z){if(this.strategy)this.strategy.broadcast($,Z);else this.localEmit($,Z)}countForOrg($){return this.listeners.get($)?.size??0}get count(){return this.totalCount}localEmit($,Z){let X=this.listeners.get($);if(!X||X.size===0)return;for(let Q of X.values()){if(Q.typePatterns&&!JW4(Z.type,Q.typePatterns))continue;try{Q.push(Z)}catch{this.remove($,Q.id)}}}}function JW4($,Z){for(let X of Z){if(X===$)return!0;if(X.endsWith(".*")){let Q=X.slice(0,-1);if($.startsWith(Q))return!0}}return!1}var kY$=50,SY$=500,r5;var tU0=B(()=>{Z5();r5=new VY$;K8.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(r5.count))});function Di0($,Z,X,Q){nJ({event:$,organizationId:Z,properties:{task_id:X.id,reports_task:DQ(X),...Q}})}function a4($,Z){r5.emit($,{id:crypto.randomUUID(),type:kt1,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function CY$($,Z){r5.emit($,{id:crypto.randomUUID(),type:St1,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function WW4($,Z){return $?[$]:Z}async function rU0($,Z,X){let Q=$.metadata?.runMetadata?.taskBoardItemId,G=!Q&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return WW4(Q,G)}async function Mx($,Z,X){let Q=$.organization?.id;if(!Q)return;try{for(let G of await rU0($,Q,X)){let Y=await $.storage.taskBoard.getById(G,Q);if(!Y||oU0[Z]<=oU0[Y.status])continue;let J=await $.storage.taskBoard.update(G,Q,{status:Z},$.auth?.user?.id??Y.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:Y.status,to:Z}}).catch((W)=>console.error("[task-board] activity log write failed",W)),a4(Q,J),Z==="in_progress"||Z==="in_review")Di0(Z==="in_progress"?"task_run_started":"task_run_completed",Q,J,{from:Y.status,via:"pr_open"})}}catch(G){console.error("[task-board] run transition failed",G)}}async function aU0($,Z,X,Q){let G=$.organization?.id;if(!G)return;try{let Y=RY$(Z);if(!Y)return;let J=await rU0($,G,Q);for(let W of J)await $.storage.taskBoard.linkPr({taskBoardItemId:W,organizationId:G,url:Y.url,prNumber:Y.number,repoOwner:Y.owner,repoName:Y.repo,connectionId:X??null})}catch(Y){console.error("[task-board] PR capture failed",Y)}}async function kx($,Z,X,Q){try{let G=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let Y of G)a4(X,Y),Di0("task_run_completed",X,Y,{from:"in_progress",via:"thread_finish"});for(let Y of G)await $.clearRunRetry(Y.id,X).catch(()=>{})}catch(G){console.error("[task-board] thread-finish transition failed",G)}await Li0($,Z,X),await NW4($,Q,Z,X)}async function Li0($,Z,X){try{let Q=await $.failedRunInfo(Z,X);if(!Q)return;let G=qY$(Q);for(let Y of await $.linkedTaskIds(Z,X)){let J=await $.getById(Y,X);if(!J||J.status!=="in_progress")continue;if(J.threads.some((H)=>H.hasMessages&&H.status==="in_progress"))continue;let W=J.retryAttempts;if(W<G){let H=HX(HW4,KW4,W,2,0.5);if(!await $.scheduleRunRetry(Y,X,W+1,new Date(Date.now()+H)))continue;await $.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:"in_progress",to:"in_progress",retry:W+1,of:G,reason:Q.errorText??Q.kind}}).catch(()=>{});continue}let K=await $.returnToTodoAfterFailure(Y,X,J.updatedBy);if(!K)continue;await $.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q.errorText??Q.kind,retriesSpent:W}}).catch(()=>{}),a4(X,K),Di0("task_run_failed",X,J,{reason:Q.kind??"error",retries_spent:W})}}catch(Q){console.error("[task-board] failed-run reaction failed",Q)}}async function NW4($,Z,X,Q){try{for(let G of await $.linkedTaskIds(X,Q)){let Y=await $.getById(G,Q);if(!Y)continue;if(oU0[Y.status]>=oU0.in_review)continue;if(Y.threads.some((W)=>W.hasMessages&&(W.status===null||!Yn.has(W.status))))continue;if((await $.listPrs(G,Q)).length>0)continue;await bt1(Z,Q,G)}}catch(G){console.error("[task-board] quota refund pass failed",G)}}async function _Y$($,Z){let X=$.organization?.id;if(!X)return;try{let Q=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let G of Q)a4(X,G)}catch(Q){console.error("[task-board] thread-run reopen failed",Q)}}function vY$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function bY$($){if(FW4.test($))return!0;return UW4.test($)&&wW4.test($)}var oU0,KW4=30000,HW4=120000,FW4,UW4,wW4;var e9=B(()=>{sH();f4();kV();Bi0();MY$();E6();tU0();qZ();oU0={triage:0,todo:1,in_progress:2,in_review:3,done:4};FW4=/\bgh\s+pr\s+create\b/,UW4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,wW4=/(?:-X|--request)\s+POST/});function sU0($,Z){return{resolveArgs:(X)=>PY$(X,$),onToolCalled:(X)=>{if(!X.isError&&vY$(X.toolName))Mx($,"in_review",Z);let Q=$.organization?.id,G=$.auth?.user?.id;if(!Q||!G)return;y1.capture({distinctId:G,event:"tool_called",groups:{organization:Q},properties:{organization_id:Q,tool_source:"mcp",tool_name:X.toolName,tool_safe_name:X.toolSafeName,read_only:X.annotations?.readOnlyHint??null,destructive:X.annotations?.destructiveHint??null,idempotent:X.annotations?.idempotentHint??null,open_world:X.annotations?.openWorldHint??null,latency_ms:Math.round(X.latencyMs),is_error:X.isError}})},onPrOpened:(X)=>{aU0($,X.result,X.connectionId,Z)}}}var Ei0=B(()=>{f4();qx();e9()});function fY$($){if($ instanceof Error)return $.message;if(typeof $==="string")return $;if(typeof $==="object"&&$!==null){let Z=$.message;if(typeof Z==="string")return Z;try{return JSON.stringify($)}catch{return String($)}}return String($)}function xY$($){let Z,X,Q=new Promise((W)=>{X=W}),G=(W)=>{if(Z===void 0)Z=W;X(Z)},J=($.streamText??Aw)({model:$.model,system:$.systemMessages,messages:$.messages,tools:$.tools,providerOptions:xQ$,prepareStep:$.prepareStep,temperature:$.temperature,maxOutputTokens:$.maxOutputTokens,stopWhen:$.stopWhen,abortSignal:$.abortSignal,onStepFinish:$.onStepFinish,onError:async(W)=>{let K=W.error??W,H=fY$(K);$.onError?.(H,K),G(H)},onAbort:async()=>{G(Z??"Run aborted before completion.")}});return Promise.resolve(J.finishReason).then(()=>{if(Z===void 0)X(void 0)}).catch((W)=>{let K=fY$(W);$.onError?.(K,W),G(K)}),{result:J,error:Q}}var yY$=B(()=>{k4();lm0()});import{SpanStatusCode as ji0,trace as OW4}from"@opentelemetry/api";async function Sx($){let Z=$.tracer??OW4.getTracer("decopilot"),X=$.stepLimit??($.kind==="agent"?$Q$:zN),Q=$.planMode??!1,G=$.toolApprovalLevel??"auto",Y=Z.startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":$.virtualMcp.id,"decopilot.agent.kind":$.kind,"decopilot.organization.id":$.organization.id,"decopilot.model.id":$.models.thinking.id}}),J=await sQ$({ctx:$.ctx,organization:$.organization,virtualMcp:$.virtualMcp,kind:$.kind,planMode:Q,isDecopilot:$.isDecopilot,agentInstructions:$.systemAgentInstructions,currentThreadId:$.currentThreadId,user:$.user,userContext:$.userContext,codingWorkspace:$.codingWorkspace,passthroughClient:$.passthroughClient,connectionsData:$.connectionsData}),W=$.additionalSystemMessages&&$.additionalSystemMessages.length>0?[...J,...$.additionalSystemMessages]:J,{resolveArgs:K,onToolCalled:H,onPrOpened:N}=sU0($.ctx,$.currentThreadId),{tools:F}=await WY$({kind:$.kind,ctx:$.ctx,mcpClient:$.mcpClient,writer:$.writer,planMode:Q,toolApprovalLevel:G,subtaskParams:$.subtaskParams,resolveArgs:K,onToolCalled:H,onPrOpened:N,fullBuiltInParams:$.subagentBuiltInParams,toolOutputMap:$.toolOutputMap}),U=$.extraTools?{...F,...$.extraTools}:F,w=$.__streamText?void 0:AU0($.provider,$.models.thinking),O=(L)=>{for(let E of L.toolCalls??[]){let j=E.input?.command;if(E.toolName==="bash"&&j&&bY$(j)){Mx($.ctx,"in_review",$.currentThreadId);let z=(L.toolResults??[]).find((A)=>A.toolCallId===E.toolCallId);aU0($.ctx,z?.output,null,$.currentThreadId);break}}return $.onStepFinish?.(L)},D=xY$({model:w,systemMessages:W,messages:$.messages,tools:U,prepareStep:$.prepareStep,temperature:$.temperature,maxOutputTokens:_Q$($.models.thinking.limits,r7(W)+r7($.messages)+r7(CQ$(U,$.activeToolNames))),stopWhen:jw(X),abortSignal:$.abortSignal,onStepFinish:O,streamText:$.__streamText,onError:(L,E)=>{if(console.error(`[runAgentLoop:${$.kind}:${$.virtualMcp.id}] Error`,L),Y.setStatus({code:ji0.ERROR,message:L}),E instanceof Error)Y.recordException(E)}});return Promise.resolve(D.result.finishReason).then(()=>{Y.setStatus({code:ji0.OK})}).catch((L)=>{let E=L instanceof Error?L.message:typeof L==="string"?L:`${L}`;Y.setStatus({code:ji0.ERROR,message:E})}).finally(()=>Y.end()),{result:D.result,error:D.error,span:Y,assembledSystemMessages:W}}var eU0=B(()=>{k4();Im0();AN();jV();eQ$();KY$();Ei0();e9();yY$()});function $w0($){let Z=Number.isFinite($)?Math.max(1,$):1,X=0,Q=0,G=[];return{async acquire(Y=0){if(X<Z)X++;else await new Promise((W)=>{let K={priority:Y,seq:Q++,wake:W},H=G.length;while(H>0&&G[H-1].priority>Y)H--;G.splice(H,0,K)});let J=!1;return()=>{if(J)return;J=!0;let W=G.shift();if(W)W.wake();else X--}},get active(){return X},get pending(){return G.length}}}var BW4,gY$=()=>BW4.acquire();var zi0=B(()=>{S$();BW4=$w0(c0().decopilotMaxConcurrentSubagents)});import{z as Pi0}from"zod";function Ti0($){return/socket connection was closed|econnreset|epipe|etimedout|fetch failed|terminated|network error|premature close|\b(429|500|502|503|504)\b|overloaded|rate.?limit|timed? ?out/i.test($)}function LW4($,Z,X=!1){if(!$.repo)return X?Z:void 0;return{repo:{owner:$.repo.owner,name:$.repo.name,connectedGithub:Boolean($.repo.connectionId)},branch:Z?.branch,cwd:Z?.cwd,workspaceKind:"github"}}function Ai0($){if($==="{}")return"";return $.length>uY$?$.slice(0,uY$)+"\u2026":$}function EW4($,Z){let X="";try{X=typeof Z==="string"?Z:JSON.stringify(Z??{})}catch{X=""}let Q=Ai0(X);return Q?`${$} ${Q}`:$}function Wi0($,Z,X){let{provider:Q,organization:G,models:Y,needsApproval:J,self:W,onChildUsage:K,vmTools:H,codingWorkspace:N,parentBuiltInParams:F,currentThreadId:U}=Z;return _$({description:DW4,inputSchema:$0(Ji0),needsApproval:J,execute:async function*({prompt:w,agent_id:O},{abortSignal:D,toolCallId:L}){let E=performance.now(),j=!!W&&(!O||O===W.id),z=j?W.id:O,A=W?" Omit agent_id to clone yourself (a fresh subagent with your tools + instructions).":"";if(!z){yield{text:"",error:`agent_id is required here.${A}`,finishReason:"error"};return}if(!j&&W){let b=(await X.storage.virtualMcps.findById(W.id,G.id))?.metadata?.subAgents;if(Array.isArray(b)&&!b.includes(z)){let x=b.length>0?" Or pass an id from <available-agents> or <available-connections>.":"";yield{text:"",error:`Target '${z}' is not in this agent's delegation allowlist (allow=${JSON.stringify(b)}).${A}${x}`,finishReason:"error"};return}}let P;try{P=await kU0(X,G.id,z,{superUser:j})}catch(l){yield{text:"",error:`${l.message} (agent_id="${z}").${A}`,finishReason:"error"};return}let{mcpClient:M,targetRef:k}=P,q=k.id,_=await gY$();D?.addEventListener("abort",()=>_(),{once:!0});try{let l=LW4(k,N,j),b=F?(()=>{let{toolOutputMap:Q0,...B0}=F;return{...B0,passthroughClient:M,agentId:k.id,vmContext:j?B0.vmContext:null,backgroundDispatcher:null,onChildUsage:void 0,pendingImages:[]}})():void 0,x="",p=null,h=0,o=200,w0=()=>{if(!p)return;let Q0=Ai0(p.args),B0=x&&!x.endsWith(`
1466
1466
  `)?`
1467
1467
  `:"";x+=`${B0}\u21B3 ${Q0?`${p.name} ${Q0}`:p.name}
1468
1468
  `,p=null},O0=()=>{if(!p)return x;let Q0=Ai0(p.args),B0=x&&!x.endsWith(`
@@ -2726,7 +2726,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2726
2726
 
2727
2727
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2728
2728
 
2729
- Respond with the structured verdict and a short reason.`,p_$;var o_$=B(()=>{k4();mw();$41();v86=Z41.object({requiresReview:Z41.boolean().describe("true if the changes should go through pull-request review"),reason:Z41.string().describe("One short sentence explaining the decision (max ~120 chars)")});p_$={requiresReview:!1,reason:""}});function y86($){if(!$||$.includes(".."))return!1;return x86.test($)}function r_$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!y86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function a_$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var x86;var s_$=B(()=>{x86=/^[\w./@-]+$/});function X41($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function e_$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function $v$($,Z,X,Q){if(!Q.connectionId)throw new ig("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let G=$.organization?.id;if(!G)throw new ig(d7);await Rw({ctx:$,connectionId:Q.connectionId,organizationId:G,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:d7;throw new ig(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:W}=await Iw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Ej0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await lw(H,g86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var g86=10485760,ig;var Zv$=B(()=>{YN();p81();vi();rf();ig=class ig extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function u86($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!h86.test(Z))throw Error(`Invalid branch name: ${$}`)}function lC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(l86)])}function dC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function Q41($,Z){let Q=(jj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),G=Q.catch(()=>{});return jj0.set($,G),G.finally(()=>{if(jj0.get($)===G)jj0.delete($)}),Q}async function fZ($,Z,X){let Q=dC($);if(Q instanceof Response)return Q;let{claimName:G,userId:Y,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(G,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:Y,projectRef:J},G))w=await Q.proxyDaemonRequest(G,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...uG}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?m86(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...uG}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function m86($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function zj0($,Z,X,Q="GET",G){let Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(Y.status===404&&G){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(G,Z))Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok){let W=`Daemon error (${Y.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function i86($){return Gv$.includes($)}var h86,Xv$=524288,c86=65536,l86=1e4,Qv$=2000,d86,jj0,uG,Gv$,Yv$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",d86),$.post("/:virtualMcpId/:branch/write",(Z)=>fZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>fZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>fZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>fZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>fZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>fZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>fZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!i86(X))return Z.json({error:`step must be one of: ${Gv$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let G=r(Z.var.studioContext),Y=pF0(Q.virtualMcpMetadata);try{await oF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:G.id,userId:Q.callerUserId,entries:Y})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return fZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return QF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return c_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Qv$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Qv$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>fZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:G,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return Q41(Q,async()=>{try{await t81(J,X,Q);let W=e_$(G,Y);if(W)await $v$(J,X,Q,W)}catch(W){if(W instanceof ig)return Z.json({error:W.message},403,uG);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,uG)}return fZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return Q41(X,()=>fZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.var.studioContext;return Q41(Q,async()=>{try{await t81(G,X,Q)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,uG)}return fZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",HZ({maxSize:Xv$,onError:(Z)=>Z.json({error:"Payload too large"},413,uG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=a81(K)&&N?[K,H]:await Promise.all([zj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),zj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await n_$(J,F,U);return Z.json(w,200,uG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,uG);return Z.json({error:K},502,uG)}}),$.post("/:virtualMcpId/:branch/git/judge-review",HZ({maxSize:Xv$,onError:(Z)=>Z.json({error:"Payload too large"},413,uG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=a81(K)&&N?[K,H]:await Promise.all([zj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),zj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await t_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,uG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,uG);return Z.json({error:K},502,uG)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),W=X41(`${J}${G}`),K;try{K=await fetch(W?.url??`${J}${G}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",HZ({maxSize:c86,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=r_$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=a_$(G,J.resolveType),K=X41(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Jv$=B(()=>{y8();mO();mg();y_$();GN();h_$();E3();gw();u_$();l_$();Cd0();Ci();$41();o_$();s_$();Zv$();h86=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;d86=x_$(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let G;try{G=r(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{u86(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==G.id)return $.json({error:"Virtual MCP not found"},404);let K=sm({orgId:G.id,virtualMcpId:Y,branch:J}),H=await ON(X,J,Q),N=g_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await uX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:Y,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});jj0=new Map;uG={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Gv$=["clone","install","start"]});var Wv$=($)=>{let Z=new B1;if(Z.use("*",vC),Z.route("/",fE0()),Z.route("/",zS$()),Z.route("/",T_$()),Z.route("/",z_$()),Z.route("/",Bj0()),Z.route("/tools",V_$()),Z.route("/",M_$()),Z.route("/",X_$({kvStorage:$.kvStorage})),Z.route("/",$_$()),Z.route("/fs",w_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Yv$()),Z.route("/",L_$()),Z.route("/deco-sites",yE0()),Z.route("/sso",SE0()),Z.route("/",Dj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",US$()),$.mountDevAssets)Z.route("/dev-assets",gE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",NM$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",B_$()),Z.route("/mcp",sw0()),Z.route("/mcp/self",Oj0()),Z.route("/mcp",ZO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Kv$=B(()=>{y8();O$1();wS$();j$1();hE0();Ko();U$1();Z_$();Q_$();O_$();zn();G$1();XO0();u81();D_$();E_$();P_$();R_$();k_$();l81();C_$();d81();ew0();Jv$()});function p86($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function t86($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(n86)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var n86=1e4,o86=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Hv$=()=>{let $=new B1;return $.use("*",o86),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Q||!G)return Z.json({apps:[]});try{let Y=await t86(Q,G);return Z.json({apps:p86(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var Nv$=B(()=>{y8();S$()});import{z as M1}from"zod";function uK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function Y46($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function J46($,Z,X){try{return JSON.parse($)}catch{throw new wv$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function W46($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((G)=>{if(G.type==="text")return{type:"text",text:G.text};return{type:"image",image:G.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((G)=>({type:"tool-call",toolCallId:G.id,toolName:G.function.name,input:J46(G.function.arguments,G.id,G.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function K46($){let Z=$.map((X)=>{let Q=X.function.parameters?zG(X.function.parameters):zG({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function H46($){if(!$)return;return{openai:{response_format:$}}}function N46(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Fv$($,Z,X,Q,G,Y){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:Y};return G?{...J,providerOptions:G}:J}function Uv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var r86=256,a86,s86,e86,$46,Z46,X46,Q46,G46,wv$,Ov$,Bv$;var Dv$=B(()=>{k4();y8();mg();xN();a86=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),s86=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),e86=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(s86).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),$46=M1.object({type:M1.literal("text")}),Z46=M1.object({type:M1.literal("json_object")}),X46=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),Q46=M1.union([$46,Z46,X46]),G46=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(e86),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(a86).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:Q46.optional(),user:M1.string().optional()});wv$=class wv$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ov$=new B1;Ov$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(uK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(uK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(uK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),G=G46.safeParse(Q);if(!G.success){let L=G.error.issues[0]??{message:"Invalid request",path:[]};return $.json(uK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=G.data,J=Y46(Y.model);if(!J)return $.json(uK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>QD(j.providerId));if(!E)return $.json(uK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(uK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=W46(Y.messages),U=Y.tools?K46(Y.tools):void 0,w=H46(Y.response_format),O=N46(),D=Math.floor(Date.now()/1000);if(Y.stream)return QF($,async(L)=>{let E=Fv$(N,F,U,Y,w,$.req.raw.signal);try{let j=Aw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=r86)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:Uv$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Fv$(N,F,U,Y,w,$.req.raw.signal),E=await zw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:j,finish_reason:Uv$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let G=Q;if(G.name==="AbortError")return $.json(uK("Request aborted","invalid_request_error"),400);if(G.name==="MessageConversionError")return $.json(uK(G.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",G.message,G.stack),$.json(uK(G.message,"server_error"),500)}});Bv$=Ov$});var Ev$;var Lv$=B(()=>{Ev$={name:"decocms",version:"4.204.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",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},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","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"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",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"}}});function w46(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??U46}}var jv$,U46="https://ph.studio.decocms.com",zv$;var Pv$=B(()=>{y8();yx0();MV();jZ();S$();e11();Lv$();jv$=new B1;jv$.get("/",($)=>{let Z={version:Ev$.version,theme:Zu1(),...pD().logo&&{logo:pD().logo},...FK()&&{internalUrl:Vq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:Vk$(),posthog:w46(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!FK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});zv$=jv$});function ng($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function G41($){return(ng($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Tv$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ng($))}&sz=${Z}`}function Av$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),G=Q.lastIndexOf(" ");return`${(G>Z*0.6?Q.slice(0,G):Q).trimEnd()}\u2026`}function Rv$($){let{brand:Z,domain:X,score:Q,verdict:G}=$,Y=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=G?.trim()?Av$(`${G.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Av$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:W}}import{z as l0}from"zod";var mC,O46,B46,D46,L46,Iv$;var qv$=B(()=>{mC=l0.enum(["good","bad","neutral"]),O46=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:mC.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),B46=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(O46)),D46={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},L46=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:mC.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:mC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(B46).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:mC.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:mC.optional()})).min(1)})]),Iv$=l0.object({...D46,template:L46})});function Pj0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=Iv$.safeParse(G.props);if(Y.success)return Y.data;let J=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((G)=>G!==null),Q=X.filter((G)=>G.template.template!=="cover"&&G.template.template!=="cta").map((G)=>({key:G.key,title:G.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var Y41=B(()=>{qv$()});import{join as Mv$}from"path";async function j46($){try{let Z=await fetch(`${fW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(E46)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Pj0(X);if(!Q.slides.length)return null;let G=Q.slides.find((W)=>W.template.template==="cover"),Y=G?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:Q.meta.brand?.trim()||G41($),score:Q.meta.scores?.cover??J?.score?.value,verdict:G?.annotation?.trim()||G?.headline?.trim()||void 0}}catch{return null}}function cG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function z46($,Z){let X=ng($),Q=Z?.brand?.trim()||G41(X),G=Tv$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Rv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${cG(W)}</title>`,`<meta name="description" content="${cG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${cG(W)}" />`,`<meta property="og:description" content="${cG(K)}" />`,`<meta property="og:url" content="${cG(J)}" />`,`<meta property="og:image" content="${cG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${cG(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${cG(W)}" />`,`<meta name="twitter:description" content="${cG(K)}" />`,`<meta name="twitter:image" content="${cG(H)}" />`,`<meta name="twitter:image:alt" content="${cG(N)}" />`,`<link rel="canonical" href="${cG(J)}" />`,`<link rel="icon" href="${cG(G)}" sizes="any" />`].join(`
2729
+ Respond with the structured verdict and a short reason.`,p_$;var o_$=B(()=>{k4();mw();$41();v86=Z41.object({requiresReview:Z41.boolean().describe("true if the changes should go through pull-request review"),reason:Z41.string().describe("One short sentence explaining the decision (max ~120 chars)")});p_$={requiresReview:!1,reason:""}});function y86($){if(!$||$.includes(".."))return!1;return x86.test($)}function r_$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!y86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function a_$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var x86;var s_$=B(()=>{x86=/^[\w./@-]+$/});function X41($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function e_$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function $v$($,Z,X,Q){if(!Q.connectionId)throw new ig("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let G=$.organization?.id;if(!G)throw new ig(d7);await Rw({ctx:$,connectionId:Q.connectionId,organizationId:G,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:d7;throw new ig(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:W}=await Iw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Ej0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await lw(H,g86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var g86=10485760,ig;var Zv$=B(()=>{YN();p81();vi();rf();ig=class ig extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function u86($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!h86.test(Z))throw Error(`Invalid branch name: ${$}`)}function lC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(l86)])}function dC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function Q41($,Z){let Q=(jj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),G=Q.catch(()=>{});return jj0.set($,G),G.finally(()=>{if(jj0.get($)===G)jj0.delete($)}),Q}async function fZ($,Z,X){let Q=dC($);if(Q instanceof Response)return Q;let{claimName:G,userId:Y,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(G,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:Y,projectRef:J},G))w=await Q.proxyDaemonRequest(G,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...uG}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?m86(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...uG}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function m86($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function zj0($,Z,X,Q="GET",G){let Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(Y.status===404&&G){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(G,Z))Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok){let W=`Daemon error (${Y.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function i86($){return Gv$.includes($)}var h86,Xv$=524288,c86=65536,l86=1e4,Qv$=2000,d86,jj0,uG,Gv$,Yv$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",d86),$.post("/:virtualMcpId/:branch/write",(Z)=>fZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>fZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>fZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>fZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>fZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>fZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>fZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!i86(X))return Z.json({error:`step must be one of: ${Gv$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let G=r(Z.var.studioContext),Y=pF0(Q.virtualMcpMetadata);try{await oF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:G.id,userId:Q.callerUserId,entries:Y})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return fZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return QF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return c_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Qv$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Qv$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>fZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:G,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return Q41(Q,async()=>{try{await t81(J,X,Q);let W=e_$(G,Y);if(W)await $v$(J,X,Q,W)}catch(W){if(W instanceof ig)return Z.json({error:W.message},403,uG);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,uG)}return fZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return Q41(X,()=>fZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.var.studioContext;return Q41(Q,async()=>{try{await t81(G,X,Q)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,uG)}return fZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",HZ({maxSize:Xv$,onError:(Z)=>Z.json({error:"Payload too large"},413,uG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=a81(K)&&N?[K,H]:await Promise.all([zj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),zj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await n_$(J,F,U);return Z.json(w,200,uG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,uG);return Z.json({error:K},502,uG)}}),$.post("/:virtualMcpId/:branch/git/judge-review",HZ({maxSize:Xv$,onError:(Z)=>Z.json({error:"Payload too large"},413,uG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=a81(K)&&N?[K,H]:await Promise.all([zj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),zj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await t_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,uG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,uG);return Z.json({error:K},502,uG)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),W=X41(`${J}${G}`),K;try{K=await fetch(W?.url??`${J}${G}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",HZ({maxSize:c86,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=r_$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=a_$(G,J.resolveType),K=X41(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Jv$=B(()=>{y8();mO();mg();y_$();GN();h_$();E3();gw();u_$();l_$();Cd0();Ci();$41();o_$();s_$();Zv$();h86=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;d86=x_$(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let G;try{G=r(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{u86(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==G.id)return $.json({error:"Virtual MCP not found"},404);let K=sm({orgId:G.id,virtualMcpId:Y,branch:J}),H=await ON(X,J,Q),N=g_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await uX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:Y,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});jj0=new Map;uG={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Gv$=["clone","install","start"]});var Wv$=($)=>{let Z=new B1;if(Z.use("*",vC),Z.route("/",fE0()),Z.route("/",zS$()),Z.route("/",T_$()),Z.route("/",z_$()),Z.route("/",Bj0()),Z.route("/tools",V_$()),Z.route("/",M_$()),Z.route("/",X_$({kvStorage:$.kvStorage})),Z.route("/",$_$()),Z.route("/fs",w_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Yv$()),Z.route("/",L_$()),Z.route("/deco-sites",yE0()),Z.route("/sso",SE0()),Z.route("/",Dj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",US$()),$.mountDevAssets)Z.route("/dev-assets",gE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",NM$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",B_$()),Z.route("/mcp",sw0()),Z.route("/mcp/self",Oj0()),Z.route("/mcp",ZO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Kv$=B(()=>{y8();O$1();wS$();j$1();hE0();Ko();U$1();Z_$();Q_$();O_$();zn();G$1();XO0();u81();D_$();E_$();P_$();R_$();k_$();l81();C_$();d81();ew0();Jv$()});function p86($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function t86($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(n86)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var n86=1e4,o86=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Hv$=()=>{let $=new B1;return $.use("*",o86),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Q||!G)return Z.json({apps:[]});try{let Y=await t86(Q,G);return Z.json({apps:p86(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var Nv$=B(()=>{y8();S$()});import{z as M1}from"zod";function uK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function Y46($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function J46($,Z,X){try{return JSON.parse($)}catch{throw new wv$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function W46($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((G)=>{if(G.type==="text")return{type:"text",text:G.text};return{type:"image",image:G.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((G)=>({type:"tool-call",toolCallId:G.id,toolName:G.function.name,input:J46(G.function.arguments,G.id,G.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function K46($){let Z=$.map((X)=>{let Q=X.function.parameters?zG(X.function.parameters):zG({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function H46($){if(!$)return;return{openai:{response_format:$}}}function N46(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Fv$($,Z,X,Q,G,Y){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:Y};return G?{...J,providerOptions:G}:J}function Uv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var r86=256,a86,s86,e86,$46,Z46,X46,Q46,G46,wv$,Ov$,Bv$;var Dv$=B(()=>{k4();y8();mg();xN();a86=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),s86=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),e86=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(s86).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),$46=M1.object({type:M1.literal("text")}),Z46=M1.object({type:M1.literal("json_object")}),X46=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),Q46=M1.union([$46,Z46,X46]),G46=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(e86),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(a86).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:Q46.optional(),user:M1.string().optional()});wv$=class wv$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ov$=new B1;Ov$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(uK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(uK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(uK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),G=G46.safeParse(Q);if(!G.success){let L=G.error.issues[0]??{message:"Invalid request",path:[]};return $.json(uK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=G.data,J=Y46(Y.model);if(!J)return $.json(uK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>QD(j.providerId));if(!E)return $.json(uK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(uK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=W46(Y.messages),U=Y.tools?K46(Y.tools):void 0,w=H46(Y.response_format),O=N46(),D=Math.floor(Date.now()/1000);if(Y.stream)return QF($,async(L)=>{let E=Fv$(N,F,U,Y,w,$.req.raw.signal);try{let j=Aw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=r86)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:Uv$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Fv$(N,F,U,Y,w,$.req.raw.signal),E=await zw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:j,finish_reason:Uv$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let G=Q;if(G.name==="AbortError")return $.json(uK("Request aborted","invalid_request_error"),400);if(G.name==="MessageConversionError")return $.json(uK(G.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",G.message,G.stack),$.json(uK(G.message,"server_error"),500)}});Bv$=Ov$});var Ev$;var Lv$=B(()=>{Ev$={name:"decocms",version:"4.204.5",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",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},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","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"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",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"}}});function w46(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??U46}}var jv$,U46="https://ph.studio.decocms.com",zv$;var Pv$=B(()=>{y8();yx0();MV();jZ();S$();e11();Lv$();jv$=new B1;jv$.get("/",($)=>{let Z={version:Ev$.version,theme:Zu1(),...pD().logo&&{logo:pD().logo},...FK()&&{internalUrl:Vq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:Vk$(),posthog:w46(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!FK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});zv$=jv$});function ng($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function G41($){return(ng($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Tv$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ng($))}&sz=${Z}`}function Av$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),G=Q.lastIndexOf(" ");return`${(G>Z*0.6?Q.slice(0,G):Q).trimEnd()}\u2026`}function Rv$($){let{brand:Z,domain:X,score:Q,verdict:G}=$,Y=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=G?.trim()?Av$(`${G.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Av$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:W}}import{z as l0}from"zod";var mC,O46,B46,D46,L46,Iv$;var qv$=B(()=>{mC=l0.enum(["good","bad","neutral"]),O46=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:mC.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),B46=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(O46)),D46={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},L46=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:mC.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:mC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(B46).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:mC.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:mC.optional()})).min(1)})]),Iv$=l0.object({...D46,template:L46})});function Pj0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=Iv$.safeParse(G.props);if(Y.success)return Y.data;let J=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((G)=>G!==null),Q=X.filter((G)=>G.template.template!=="cover"&&G.template.template!=="cta").map((G)=>({key:G.key,title:G.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var Y41=B(()=>{qv$()});import{join as Mv$}from"path";async function j46($){try{let Z=await fetch(`${fW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(E46)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Pj0(X);if(!Q.slides.length)return null;let G=Q.slides.find((W)=>W.template.template==="cover"),Y=G?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:Q.meta.brand?.trim()||G41($),score:Q.meta.scores?.cover??J?.score?.value,verdict:G?.annotation?.trim()||G?.headline?.trim()||void 0}}catch{return null}}function cG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function z46($,Z){let X=ng($),Q=Z?.brand?.trim()||G41(X),G=Tv$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Rv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${cG(W)}</title>`,`<meta name="description" content="${cG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${cG(W)}" />`,`<meta property="og:description" content="${cG(K)}" />`,`<meta property="og:url" content="${cG(J)}" />`,`<meta property="og:image" content="${cG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${cG(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${cG(W)}" />`,`<meta name="twitter:description" content="${cG(K)}" />`,`<meta name="twitter:image" content="${cG(H)}" />`,`<meta name="twitter:image:alt" content="${cG(N)}" />`,`<link rel="canonical" href="${cG(J)}" />`,`<link rel="icon" href="${cG(G)}" sizes="any" />`].join(`
2730
2730
  `)}function P46($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
2731
2731
  </head>`)}function kv$($){let Z=new B1;return Z.get("/:domain/og.png",async(X)=>{let Q=ng(X.req.param("domain")),G=async()=>{let Y=$?Bun.file(Mv$($,"report-og-fallback.png")):null;if(!Y||!await Y.exists())return X.notFound();return X.body(new Uint8Array(await Y.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Y=await fetch(`${fW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(A46)}),J=Y.headers.get("content-type")??"";if(!Y.ok||!J.startsWith("image/")||!Y.body)return G();return X.body(Y.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return G()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),G=$?Mv$($,"index.html"):null,Y=G?Bun.file(G):null;if(!Y||!await Y.exists())return X.notFound();let J=await Y.text();try{let W=await j46(ng(Q)),K=z46(Q,W);return X.html(P46(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var E46=2500,A46=1e4;var Sv$=B(()=>{y8();Y41();WL();S$()});function fo($,Z){return fetch(`${fW({})}${$}`,Z)}async function T46($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let G=Q.toString()?`?${Q.toString()}`:"",Y=await fo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${G}`,{headers:{Accept:"application/json"}});if(Y.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Y.ok)throw Error(`report read HTTP ${Y.status}`);let J=await Y.json(),{deck:W,drops:K}=Pj0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var R46,m3,Aj0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Vv$;var Cv$=B(()=>{y8();RY();WL();Y41();R46=new Set(["complete","errored","terminated","unknown"]),m3=new B1;m3.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});m3.use("/run",Aj0);m3.use("/status",Aj0);m3.use("/link-token/*",Aj0);m3.use("/suggest",Aj0);m3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,G=$.req.query("lang")?.trim()||void 0;try{let Y=await T46(Z,Q,G);if($.header("Cache-Control","private, no-store"),X||!Y.deck)return $.json(Y);return $.json({...Y,deck:{...Y.deck,slides:Y.deck.slides.slice(0,1)},truncated:Y.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});m3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let G=Z.email,Y=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await fo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${JL({})}`},body:JSON.stringify({url:Q,email:G,distinct_id:Y})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});m3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await fo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${JL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let G=(await X.json()).status??"unknown",Y={done:R46.has(G),status:G};return $.json(Y)}catch{return $.json({error:"status failed"},502)}});m3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await fo(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});m3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await fo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});Vv$=m3});import{createHmac as I46,timingSafeEqual as q46}from"crypto";function vv$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let G,Y=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")G=U;else if(F==="v1")Y.push(U)}if(!G||Y.length===0)return!1;let J=Number(G);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>M46)return!1;let W=I46("sha256",X).update(`${G}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Y.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&q46(K,N)})}function bv$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=QJ(Z),Q=QJ(QJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:cK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function fv$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function cK($){return typeof $==="string"?$:void 0}function QJ($){return typeof $==="object"&&$!==null?$:void 0}function Tj0($){return typeof $==="number"?new Date($*1000):null}function K41($){return cK($)??cK(QJ($)?.id)}function k46($){return K41($.subscription)??cK(QJ(QJ($.parent)?.subscription_details)?.subscription)}function S46($){let Z=Tj0($.current_period_end);if(Z)return Z;let X=QJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let G of X){let Y=QJ(G)?.current_period_end;if(typeof Y==="number"&&Y>Q)Q=Y}return Q>0?new Date(Q*1000):null}function J41($,Z){let X=Tj0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function W41($,Z){let X=Tj0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function V46($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=cK(QJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(cK(QJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(cK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=cK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(QJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:QJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(cK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let G=await $.getBilling(Q);if(!G)return{handled:!1,reason:"unknown org"};let Y=K41(X.subscription);if(G.stripeSubscriptionId&&Y&&G.stripeSubscriptionId!==Y)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Y};if(J41(Z,G))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:K41(X.customer),stripeSubscriptionId:Y,status:"active",lastStripeEventAt:W41(Z,G)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=cK(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let G=await $.getBillingByStripeSubscriptionId(Q);if(!G)return{handled:!1,reason:"unknown subscription"};let Y=Z.type==="customer.subscription.deleted";if(!Y&&J41(Z,G))return{handled:!1,reason:"stale event"};let J=Y?"canceled":fv$(X.status);return await $.updateStripeState(G.organizationId,{status:J,currentPeriodEnd:S46(X),...Y&&{stripeSubscriptionId:null},lastStripeEventAt:W41(Z,G)}),{handled:!0,organizationId:G.organizationId}}case"invoice.paid":{let Q=k46(X);if(!Q)return{handled:!1,reason:"no sub id"};let G=await $.getBillingByStripeSubscriptionId(Q);if(!G)return{handled:!1,reason:"unknown subscription"};if(J41(Z,G))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G.organizationId,{status:"active",currentPeriodEnd:Tj0(X.period_end),lastStripeEventAt:W41(Z,G)}),{handled:!0,organizationId:G.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function C46($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:fv$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function _v$($,Z){let X=C46($,Z);if(!X)return;nJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Hl1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function xv$($){let Z=new CW(m8().db),X=await V46(Z,$);if(!(X.handled&&X.topUp))_v$($,X);if(X.handled&&X.topUp)await BF$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),_v$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Tt1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof X3&&(Q.status===400||Q.status===404)))throw Q}return X}var M46=300;var yv$=B(()=>{DY();f4();km();to0()});var _46=1048576,H41;var gv$=B(()=>{y8();mO();S$();yv$();H41=new B1;H41.post("/webhook",HZ({maxSize:_46,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=c0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!vv$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let G=bv$(X);if(!G)return $.json({error:"invalid payload"},400);let Y=await xv$(G);return console.log("stripe webhook",{eventId:G.id,type:G.type,livemode:G.livemode,...Y}),$.json({received:!0})})});import{timingSafeEqual as v46}from"crypto";function f46($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),G=Z.slice(7);if(G.length!==Q.length)return!1;return v46(Buffer.from(G),Buffer.from(Q))}var b46=5242880,N41;var hv$=B(()=>{y8();mO();ki();N41=new B1;N41.post("/webhook",HZ({maxSize:b46,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!f46(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let G=Q.ref,Y=Q.repository?.full_name;if(!G||!Y)return $.json({ok:!0,ignored:"shape"});let W=(await Id0())?.markTenantPoolsDirty(Y,G)??[];return $.json({ok:!0,pools:W})})});function uv$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var cv$,x46,y46,lv$;var dv$=B(()=>{y8();iJ();qx();Sf();cv$=new B1,x46=["range","if-none-match","if-modified-since"],y46=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];cv$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Ig($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Q$(401,{message:"Authentication required"})}if(!X)throw new Q$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Q$(400,{message:"Missing file key"});let G=await Gn(Q,Z);if(!G)throw new Q$(503,{message:"Object storage not configured"});if(G.startsWith("data:")&&aJ()){let K=G.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Q$(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return uv$(U,H),new Response(F,{status:200,headers:U})}let Y=new Headers;for(let K of x46){let H=$.req.header(K);if(H)Y.set(K,H)}let J=await fetch(G,{headers:Y});if(J.status===403||J.status===404)throw new Q$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Q$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of y46){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),uv$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});lv$=cv$});var xo=C((iC)=>{var g46=iC&&iC.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var G=Object.getOwnPropertyDescriptor(Z,X);if(!G||("get"in G?!Z.__esModule:G.writable||G.configurable))G={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,G)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),h46=iC&&iC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))g46(Z,$,X)};Object.defineProperty(iC,"__esModule",{value:!0});h46(eQ(),iC)});var nv$=C((mv$)=>{Object.defineProperty(mv$,"__esModule",{value:!0});mv$.version=void 0;mv$.version="3.4.0"});var ov$=C((lK)=>{var u46=lK&&lK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(lK,"__esModule",{value:!0});lK.NodeTransport=lK.VERSION=void 0;lK.nodeResolveHost=n46;var d6=xo(),c46=z0("net"),F41=z0("tls"),l46=z0("path"),pv$=z0("fs"),d46=u46(z0("dns")),m46=nv$();lK.VERSION=m46.version;var i46="nats.js";class tv${socket;version;lang;yields=[];signal=(0,d6.deferred)();closedNotification=(0,d6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=i46,this.version=lK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let G=await this.peekInfo();(0,d6.checkOptions)(G,Z);let{tls_required:Y,tls_available:J}=G,W=J===!0&&Z.tls!==null;if(!Q&&(Y||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Y&&this.socket.encrypted!==!0)throw d6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(G){let Y=G;if(!Y)Y=new d6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Y,W=J==="ECONNREFUSED"?new d6.errors.ConnectionError("connection refused",{cause:Y}):Y;throw this.socket?.destroy(),W}}dial($){let Z=(0,d6.deferred)(),X,Q=(0,c46.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(G)=>{X=G}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,d6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=d6.DataBuffer.concat(...this.yields),G=(0,d6.extractProtocolMessage)(Q);if(G!=="")try{let Y=d6.INFO.exec(G);if(!Y)throw Error("unexpected response from server");let J=JSON.parse(Y[1]);$.resolve(J)}catch(Y){$.reject(Y)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,d6.deferred)();try{if($=(0,l46.resolve)($),!(0,pv$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,pv$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:G,keyFile:Y,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Y){let W=await this.loadFile(Y);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(G)$.ca=G;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};X=(0,d6.extend)(X,this.options.tls,G)}catch(G){return Promise.reject(new d6.errors.ConnectionError(G.message,{cause:G}))}let Q=(0,d6.deferred)();try{let G=(0,F41.connect)($.port,$.hostname,X,()=>{G.removeAllListeners(),Q.resolve(G)});G.on("error",(Y)=>{Z=Y}),G.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{Q.reject(Z),G.removeAllListeners()}),G.setNoDelay(!0)}catch(G){Q.reject(new d6.errors.ConnectionError(G.message,{cause:G}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,d6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,d6.deferred)();try{let Q=(0,F41.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(G)=>{$=G}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,d6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof F41.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d6.render)($)}`);let Z=(0,d6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}lK.NodeTransport=tv$;function n46($){let Z=(0,d6.deferred)();return d46.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let G=[];for(let Y of Q)G.push(Y.address);if(G.length===0)G.push($);Z.resolve(G)}),Z}});var $b$=C((ev$)=>{Object.defineProperty(ev$,"__esModule",{value:!0});ev$.connect=p46;var rv$=ov$(),av$=xo(),sv$=xo();function p46($={}){if((0,sv$.hasWsProtocol)($))return Promise.reject(sv$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,av$.setTransportFactory)({factory:()=>{return new rv$.NodeTransport},dnsResolveFn:rv$.nodeResolveHost}),av$.NatsConnectionImpl.connect($)}});var Zb$=C((GF)=>{var o46=GF&&GF.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var G=Object.getOwnPropertyDescriptor(Z,X);if(!G||("get"in G?!Z.__esModule:G.writable||G.configurable))G={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,G)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),r46=GF&&GF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))o46(Z,$,X)};Object.defineProperty(GF,"__esModule",{value:!0});GF.connect=void 0;var a46=$b$();Object.defineProperty(GF,"connect",{enumerable:!0,get:function(){return a46.connect}});r46(xo(),GF)});function Yb$($){let Z=$?.connectFn??Z66,X=null,Q=null,G=!1,Y=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!Y)try{X=await Z({servers:U,timeout:$66,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=HX(e46,s46,O-1,2,0.5);await y$(D)}}return{init(U,w){if(G)return;G=!0,Y=!1;let O=w?.creds?Xb$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Gb$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Y=!0,G=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function Z66($){return Qb$.connect($)}var Xb$,Qb$,Gb$,s46=100,e46=3000,$66=3000;var Jb$=B(()=>{E6();Xb$=S(Eh(),1),Qb$=S(Zb$(),1),Gb$=S(FB(),1)});function U41($,Z){return`${$}.${Z}`}class w41{cache;constructor($){this.cache=Fg({ttlMs:$?.ttlMs??X66,maxSize:$?.maxSize??Q66})}async get($,Z){return this.cache.get(U41($,Z))??null}async set($,Z,X){this.cache.set(U41($,Z),X)}async invalidate($,Z){this.cache.delete(U41($,Z))}teardown(){this.cache.clear()}}var X66=600000,Q66=5000;var Wb$=()=>{};function Rj0($,Z){return`${$}:${Z}`}function O41($){let Z=Fg({ttlMs:$?.ttlMs??G66,maxSize:$?.maxSize??Y66}),X=$?.getConnection,Q=crypto.randomUUID(),G=new TextEncoder,Y=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(Kb$,G.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(Rj0(K,H))},set(K,H,N){Z.set(Rj0(K,H),N)},invalidate(K,H){Z.delete(Rj0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Kb$),(async()=>{for await(let H of J)try{let N=JSON.parse(Y.decode(H.data));if(N.originId===Q)continue;Z.delete(Rj0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Kb$="studio.ai-provider-keys.invalidate",G66=30000,Y66=5000;var Hb$=()=>{};class B41{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Nb$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let G of Q)try{let Y=JSON.parse(X.decode(G.data));if(Y.originId===this.originId)continue;if(Y.messageId&&this.hasSeen(Y.messageId))continue;this.onCancel?.(Y.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Nb$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Nb$;var Fb$=B(()=>{Nb$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Ub$=($)=>{let Z;return()=>Z??=$()},D41,L41;var wb$=B(()=>{Z5();D41=Ub$(()=>K8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),L41=Ub$(()=>K8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function U66(){return{name:IN,subjects:[`${jw0}.>`],storage:i3.StorageType.File,max_age:K66,max_bytes:N66,max_msgs_per_subject:F66,discard:i3.DiscardPolicy.Old,retention:i3.RetentionPolicy.Limits,duplicate_window:H66,num_replicas:1}}class Db${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function Ob$($){let Z=Bb$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function D66($,Z){let X=0;return{publish(Q,G,Y,J){Q.publish(G,Y,J?{headers:J}:void 0).catch((W)=>{if(X++,W66().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function L66($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class E41{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=U66(),X=await gZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await i3.jetstreamManager($);try{await Q.streams.info(IN),await Q.streams.update(IN,Z)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Q.streams.add(Z);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Q.streams.delete(IN),await Q.streams.add(Z);else throw G}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:L66});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let G=this.js;if(!G)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Y=D66(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=$3$(Z);G.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=ni0(H,{runId:Z}),U=performance.now()-N;if(D41().record(U),L41().add(1,{"org.id":Q??"unknown"}),B66?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Y.publish(G,w.subject,w.data,w.headers?Ob$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),O66)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Y.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let G=performance.now(),Y=ni0(Z,{runId:$,dedup:X});if(D41().record(performance.now()-G),L41().add(1),Y.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Y)await Q.publish(J.subject,J.data,{...J.headers?{headers:Ob$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let G=eJ$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(G.subject,G.data,{msgID:G.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let G=X?.deliverPolicy==="new"?i3.DeliverPolicy.New:i3.DeliverPolicy.All,Y=X?.closeOnDone??!1,J=GO($),W;try{W=await(await Q.consumers.get(IN,{filter_subjects:J,deliver_policy:G})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=Rw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(zw0()).pipeThrough(Pw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(Y){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(IN,{filter:GO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var i3,Bb$,J66=($)=>{let Z;return()=>Z??=$()},W66,K66=86400000000000,H66=120000000000,N66=4294967296,F66=500000,w66,O66,B66;var Lb$=B(()=>{E6();pi0();Iw0();Aw0();Z5();wb$();i3=S(FB(),1),Bb$=S(Eh(),1),W66=J66(()=>K8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));w66=process.env.STREAM_ENCODE_TRACE==="1",O66=process.env.DECOPILOT_STREAM_TRACE==="1";B66=w66?new Db$:null});function Ij0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,OW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var Eb$=B(()=>{L8()});class j41{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}class z41{taskBoard;contextFactory;options;timer=null;running=!1;cursor=null;constructor($,Z,X={}){this.taskBoard=$;this.contextFactory=Z;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??E66;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??z66,X=this.options.itemIntervalMs??j66,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),G=Q.at(-1);this.cursor=Q.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:Y,organizationId:J}of Q)try{if(await this.reconcileItem(Y,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${Y} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-aG$),Mn0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-A66));for(let{id:X,organizationId:Q,threadId:G}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await Li0(this.taskBoard,G,Q)}catch(Y){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,Y)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:G,attempts:Y}of X)try{if(!await this.taskBoard.claimDueRetry(Q,G,new Date))continue;let J=await this.taskBoard.getById(Q,G);if(!J||J.status!=="in_progress"||J.assigneeId!==l4)continue;let W=await this.contextFactory(G,J.assignedBy??J.createdBy);if(!W)continue;await qN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${Y})`)}catch(J){console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),await this.taskBoard.scheduleRunRetry(Q,G,Y,new Date(Date.now()+P66)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==l4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z);if(Q.length===0)return!1;let G=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!G)return!1;if(await WW$(G,X))return!0;let Y=await Promise.all(Q.map(async(J)=>({...J,...await Rn0(G,Z,J)})));if(Y.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${Y.length} PR(s)) \u2014 proceeding on unknown`);if(!Tn0(Y))return!1;return await Cw0(G,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var E66=60000,j66=300000,z66=50,P66=60000,A66=120000;var jb$=B(()=>{qZ();Dn0();YO();hw0();e9();kn0();yx()});import{readdir as T66,rm as qj0}from"fs/promises";import{join as Mj0}from"path";async function kj0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-R66),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await nC($);for(let G of Q)if(/^\d{4}$/.test(G))X+=await zb$($,G,Z);else if(!G.startsWith(".")){let Y=Mj0($,G),J=await nC(Y);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await zb$(Y,K,Z)}if((await nC(Y)).length===0)await qj0(Y,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function zb$($,Z,X){let Q=0,G=Mj0($,Z),Y=await nC(G);for(let W of Y){if(!/^\d{2}$/.test(W))continue;let K=Mj0(G,W),H=await nC(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Mj0(K,F);await qj0(w,{recursive:!0,force:!0}),Q++}}if((await nC(K)).length===0)await qj0(K,{recursive:!0,force:!0})}if((await nC(G)).length===0)await qj0(G,{recursive:!0,force:!0});return Q}async function nC($){try{return(await T66($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var R66=30;var P41=()=>{};import{DBOS as A41,SchedulerMode as I66}from"@dbos-inc/dbos-sdk";async function M66(){let $=[KJ(),pC(),mK()],Z=0;for(let X of $)try{Z+=await kj0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function k66($,Z){await A41.runStep(()=>M66(),{name:"monitoringRetention"})}function Ab$(){if(Pb$)return;Pb$=!0;let $=A41.registerWorkflow(k66,{name:"monitoringRetentionWorkflow"});A41.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:q66,mode:I66.ExactlyOncePerIntervalWhenActive})}var q66="23 4 * * *",Pb$=!1;var Tb$=B(()=>{oQ();P41()});function Rb$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let G=await fK.create();G.auth.user={id:X,role:Q.role},G.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let Y=await u11($.db,Z,Q.role);return G.boundAuth=h11({auth:G.authInstance,headers:new Headers,role:Q.role,permissions:Y,userId:X}),G.access=new dD(X,void 0,G.boundAuth,Q.role,"self"),Tg(G,{id:Q.orgId,slug:Q.orgSlug}),G}}var Ib$=B(()=>{mD();Dg()});function S66(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function C66(){for(let $ of V66)$()}function qb$($){let Z=[...T41.logs,$];T41={...T41,logs:Z.length>500?Z.slice(-500):Z},C66()}function R41(){return _66}var T41,V66,_66=!1;var I41=B(()=>{T41=S66(),V66=new Set});import{EventEmitter as v66}from"events";var q41;var Mb$=B(()=>{I41();q41=new v66;q41.on("request",($)=>{qb$($)})});function kb$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,G=$.req.path;if(G==="/api/auth/get-session"||G.includes("favicon")){await Z();return}let Y="",J=!1;if(G.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=pg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>pg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Y=`${e6.tool}${w}${e6.dim}(${L})${e6.reset}`}else if(U.method)Y=`${e6.dim}${pg(U.method)}${e6.reset}`}}catch{}}let W=pg(G);if(G.startsWith("/mcp/conn_")){let N=G.split("/")[2]??"";W=`/mcp/${e6.mcp}${pg(N.slice(0,12))}\u2026${e6.reset}`}else if(G==="/mcp")W=`${e6.mcp}/mcp${e6.reset}`;else if(G==="/mcp/registry")W=`${e6.mcp}/mcp/registry${e6.reset}`;let K=f66(Q),H=J?"\u25C0":"\u2190";if(!R41())console.log(`${e6.dim}${H}${e6.reset} ${K}${Q}${e6.reset} ${W}${Y?` ${Y}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=b66(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!R41())console.log(`${e6.dim}${O}${e6.reset} ${K}${Q}${e6.reset} ${W}${Y?` ${Y}`:""} ${U}${F}${e6.reset} ${e6.duration}${w}${e6.reset}`);q41.emit("request",{method:Q,path:pg(G),status:F,duration:N,timestamp:new Date})}}}var e6,b66=($)=>{if($>=500)return e6.serverError;if($>=400)return e6.clientError;if($>=300)return e6.redirect;return e6.ok},f66=($)=>{return e6[$]||e6.reset},pg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Sb$=B(()=>{I41();Mb$();e6={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as vb$}from"crypto";import{mkdir as x66,readdir as y66,rm as Vb$,stat as bb$}from"fs/promises";import{join as k41,relative as g66}from"path";import{z as E$}from"zod";function xb$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return k41(h66,Z)}function yb$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function M41($,Z){let X=xb$($),Q=yb$(Z);return k41(X,Q)}function u66($,Z,X,Q){let G=c0().encryptionKey||"dev-secret",Y=`${$}:${Z}:${X}:${Q}`;return vb$("sha256",G).update(Y).digest("hex")}function _b$($,Z,X,Q,G){let Y=Math.floor(Date.now()/1000)+Q,J=u66(Z,X,Y,G),W=new URL(`/api/dev-assets/${Z}/${yb$(X)}`,$);return W.searchParams.set("expires",Y.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",G),W.toString()}function gb$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${vb$("md5","etag").update(Q).digest("hex")}"`}async function hb$($,Z,X,Q,G){try{let Y=await y66($,{withFileTypes:!0});for(let J of Y){let W=k41($,J.name),H=g66(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))G.commonPrefixes.add(N)}}else await hb$(W,Z,X,Q,G);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);G.commonPrefixes.add(U);continue}}try{let N=await bb$(W);G.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:gb$(W,N.mtime,N.size)})}catch{}}}}catch{}}function ub$($,Z){let Q=r($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(G)=>{let Y=G,J=Y.prefix||"",W=Y.maxKeys??1000,K=Y.delimiter,H=Y.continuationToken,N=xb$(Q);await x66(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await hb$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(G)=>{let Y=G,J=M41(Q,Y.key),W=await bb$(J);return{contentType:P$1(Y.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:gb$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(G)=>{let Y=G,J=Y.expiresIn??Cb$;return{url:_b$(Z,Q,Y.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(G)=>{let Y=G,J=Y.expiresIn??Cb$;return{url:_b$(Z,Q,Y.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(G)=>{let Y=G,J=M41(Q,Y.key);try{return await Vb$(J),{success:!0,key:Y.key}}catch{return{success:!1,key:Y.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(G)=>{let Y=G,J=[],W=[];return await Promise.all(Y.keys.map(async(K)=>{let H=M41(Q,K);try{await Vb$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function S41($,Z,X){let Q=ub$(Z,X),G=new PW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:Y5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;G.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let Y=new lX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Y),lY(G,Y,$,"mcp:dev-assets")}async function cb$($,Z,X,Q){let Y=ub$(X,Q).find((J)=>J.name===$);if(!Y)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Y.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var h66="./data/assets",Cb$=3600,fb$,lb$;var db$=B(()=>{S$();lx();y8();dc();bV();RX();hE0();fb$=new B1;fb$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return S41($.req.raw,Z,Q)});lb$=fb$});var mb$={};N4(mb$,{mountDevRoutes:()=>c66});function c66($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let G=Q.get("studioContext"),Y=new URL(Q.req.url),J=`${Y.protocol}//${Y.host}`;return S41(Q.req.raw,G,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let G=Q.get("studioContext"),Y=new URL(Q.req.url),J=`${Y.protocol}//${Y.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await cb$(W,K,G,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",lb$);let X=new B1;X.use("*",l3({mountPath:"/api/dev-assets"})),X.route("/",gE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var ib$=B(()=>{y8();w$1();hE0();db$()});import{sql as l66}from"kysely";import{randomUUID as nb$}from"crypto";import{z as d66}from"zod";async function i66($){let Z=new Date().toISOString(),X=nb$(),Q=g4.SELF($.organizationId),G="registry.publish_request.created",Y={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Y),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:nb$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await l66`SELECT
2732
2732
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.204.3",
3
+ "version": "4.204.5",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c as L,b as R,j as r}from"./index-BoikrCDZ.js";import{I as A}from"./input-B-e5wz_9.js";import{L as I}from"./label-kR9d7BEl.js";import{S as z,a as J,b as O,c as V,d as $}from"./select-BzuZD9AC.js";import{T as D}from"./textarea-DUZ6Deea.js";import{R as M,T as U,U as W,J as q,W as G,$ as H}from"./index-DTj08rZ1.js";import{s as F}from"./primitives-DSVlUoHx.js";import{u as Q}from"./use-autosave-BQC6Ppkp.js";import"./tooltip-BusBlnFD.js";import"./Check-DOgDdlX1.js";import"./ChevronDown-DlUR221w.js";import"./ChevronUp-C693p5q4.js";import"./ArrowUp-BkvmxV5_.js";import"./chat-context-DEDFQ8TK.js";import"./tab-id-CXqMbEty.js";import"./dialog-C4ZAgrVU.js";import"./X-DhQKIdA0.js";import"./Copy01-BW92d4Go.js";import"./hooks-CyVdI2sU.js";import"./use-mcp-client-BFct8DK6.js";import"./auth-CC6XnLek.js";import"./decopilot-sse-pool-pjPyrDAF.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-BbZkXMg5.js";import"./use-ai-providers-Ci6NrFUd.js";import"./studio-tools-BZs2ezpK.js";import"./use-decopilot-events-CLtwCBKd.js";import"./use-organization-settings-C4mLYGfM.js";import"./automation-runs-BmOVGPQj.js";import"./agent-icon-BD9y4ivk.js";import"./AlertCircle-Ckh9QyVE.js";import"./Tool01-BcOwjlqW.js";import"./ArrowLeft-RnD3AF1o.js";import"./Tool02-D28vebAz.js";import"./XCircle-BqSHcOgo.js";import"./ArrowUpRight-DzUFDmmj.js";import"./TrendUp01-CD9aTzBI.js";import"./ZapSquare-CpwXatgq.js";import"./Users03-Dk1C37OV.js";import"./CheckCircle-CzhYjSwf.js";import"./ChevronRight-XRl7Q70a.js";import"./DotsVertical-A0PLjeOd.js";import"./Stars02-DXQvK2vE.js";import"./CpuChip01-CTX9n1ku.js";import"./CreditCard01-Be6B4cmP.js";import"./Globe01-DbjnW3Y4.js";import"./Settings02-CMApCgJd.js";import"./Eye-CamAkprO.js";import"./FilterLines-BKqF2vuj.js";import"./Share07-DAylEEku.js";import"./Star01-D9CNdQ0B.js";import"./Globe04-bck8qerz.js";import"./SwitchHorizontal01-BQgwZk3y.js";import"./HardDrive-BHQjbSMm.js";import"./Key01-Bozm_5V-.js";import"./LayoutLeft-B407Estb.js";import"./LinkExternal01-BG1a_cKJ.js";import"./LogOut01-SGUFJP2M.js";import"./Monitor01-DJo-oI0s.js";import"./Sun-D1tKAbu0.js";import"./Palette-DiFHHa_f.js";import"./Play-BG1XdpM-.js";import"./Plus-dQXUEHA-.js";import"./SearchLg-F2js49ME.js";import"./SearchMd-tFY89YJL.js";import"./Shield01-JoTuyS_F.js";import"./Stars01-mKzaRqOI.js";import"./Trash01-C-nCZCWy.js";import"./Upload01-CmVJo3In.js";import"./User01-2UPxi4XX.js";import"./Users01-FYtPpQpU.js";import"./XClose-DyQWrGXo.js";import"./Zap-CIcmozB8.js";import"./useInfiniteQuery-DuorN97l.js";import"./use-infinite-scroll-DVkwV9ek.js";import"./use-connection-C9GVzzJv.js";import"./card-DaGKUKqL.js";import"./sidebar-BuHfKAE9.js";import"./use-mobile-D5CjYT-t.js";import"./table-CxghGJ2p.js";import"./empty-state-BKSZU9_n.js";import"./use-members-Dv9qiDLS.js";import"./use-org-auth-client-B_vZqzl1.js";import"./use-clock-tick-BdrXlOfT.js";import"./use-automations-CsHhF3du.js";import"./useSuspenseInfiniteQuery-WYoakn1U.js";import"./avatar-Co1ZwTG7.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-CCyOuUbD.js";import"./monaco-editor-lMUiW1aE.js";import"./spinner-C4n3MjD7.js";import"./index-c-pbJYLJ.js";import"./shell-layout-B8GUiPwv.js";import"./required-auth-layout-Sg6yDFUx.js";import"./use-org-sso-CX-2huFT.js";import"./integration-icon-BRDJeBEu.js";import"./use-navigate-to-agent-DDcLJbgC.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-n2Oo4nQd.js";import"./form-C6sISDbk.js";import"./file-type-icon-BE1oIqH9.js";import"./drawer-BRFtAc06.js";import"./collection-search-ORFnlq1p.js";import"./tabs-BJlYHGtR.js";import"./toggle-group-BdRiuw4z.js";import"./use-deco-credits-BPuC9GbE.js";import"./popover-Um_MRLh3.js";import"./alert-dialog-COvTTmIn.js";import"./toolbar-CqPrxMUC.js";import"./skeleton-Biuy1vSp.js";import"./github-repo-picker-CoIjHzEP.js";import"./use-debounced-value-DMVx8QeJ.js";import"./authenticate-and-persist-oauth-LyVPWbSm.js";import"./mcp-oauth-B8R66bIy.js";import"./use-mcp-tools-B23ZLmF_.js";import"./extract-connection-data-DIFLEfQJ.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-ufuvpGD9.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-lEsVqa2r.js";import"./use-registry-connections-V6LNGgjL.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-ZszlRkQ_.js";import"./collection-tabs-CZ6scJzy.js";import"./badge-Ccp6rm3C.js";import"./use-open-billing-url-BLuDDF6_.js";import"./select-model-B4wAXAbY.js";import"./checkbox-X1g6azyE.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-DzGwG5-8.js";import"./cards-BYtD6nBf.js";import"./dropdown-menu-DW_E0Rj9.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-DLjSY1RY.js";import"./deco-site-production-url-CaKZ7xBn.js";import"./use-capability-BKMDZXdW.js";import"./pt-BR-CLy76QW2.js";import"./switch-DWeKyPhK.js";import"./use-debounced-autosave-CABF4r6S.js";import"./index-BAb-Xq6l.js";import"./search-input-CSqZeGXW.js";import"./index-S0tPgONB.js";import"./use-secrets-CMrUP_Gt.js";import"./self-tool-result-ComV2R5p.js";import"./use-tags-CUsdpgK7.js";import"./get-initials-D-f_fDFw.js";import"./command-BsqJ2Hbu.js";import"./index-DcPTMaiL.js";import"./use-file-configs-D9Pw6e5Y.js";import"./automation-list-row-75slGm4H.js";const X={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},Y={authors:"sandbox.recordEditor.titleAuthor"};function Wr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=R(),P=M(h);let b;t[0]!==w||t[1]!==K||t[2]!==P||t[3]!==h?(b={orgSlug:K,virtualMcpId:h,branch:w,packagePath:P},t[0]=w,t[1]=K,t[2]=P,t[3]=h,t[4]=b):b=t[4];const p=U(b);let k;t[5]!==f||t[6]!==a?(k=W(f,a),t[5]=f,t[6]=a,t[7]=k):k=t[7];const B=k;let v;t[8]!==g||t[9]!==a||t[10]!==p?(v=l=>{p.mutate({blockKey:g,data:G(g,a,l)})},t[8]=g,t[9]=a,t[10]=p,t[11]=v):v=t[11];const[e,S]=Q(B,v);let j;t[12]!==e||t[13]!==S?(j=(l,o)=>S({...e,[l]:o}),t[12]=e,t[13]=S,t[14]=j):j=t[14];const s=j,T=Y[a];let n;t[15]!==i||t[16]!==T?(n=i(T),t[15]=i,t[16]=T,t[17]=n):n=t[17];let c;t[18]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[18]=n,t[19]=c):c=t[19];let d;t[20]!==p.isError||t[21]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[20]=p.isError,t[21]=p.isPending,t[22]=d):d=t[22];let y;t[23]!==c||t[24]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[23]=c,t[24]=d,t[25]=y):y=t[25];const N=X[a];let x;if(t[26]!==e||t[27]!==s||t[28]!==i||t[29]!==N){let l;t[31]!==e||t[32]!==s||t[33]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(z,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(J,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx($,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:F(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[31]=e,t[32]=s,t[33]=i,t[34]=l):l=t[34],x=N.map(l),t[26]=e,t[27]=s,t[28]=i,t[29]=N,t[30]=x}else x=t[30];let u;t[35]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[35]=x,t[36]=u):u=t[36];let E;return t[37]!==y||t[38]!==u?(E=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[37]=y,t[38]=u,t[39]=E):E=t[39],E}export{Wr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-DXmch4wI.js","assets/index-BoikrCDZ.js","assets/index-BEdBSIIA.css","assets/Tool02-D28vebAz.js","assets/CheckCircle-CzhYjSwf.js","assets/Settings02-CMApCgJd.js","assets/use-mcp-client-BFct8DK6.js","assets/auth-CC6XnLek.js","assets/useInfiniteQuery-DuorN97l.js","assets/use-infinite-scroll-DVkwV9ek.js","assets/studio-tools-BZs2ezpK.js","assets/badge-Ccp6rm3C.js","assets/input-B-e5wz_9.js","assets/dropdown-menu-DW_E0Rj9.js","assets/Check-DOgDdlX1.js","assets/ChevronRight-XRl7Q70a.js","assets/DotsVertical-A0PLjeOd.js","assets/table-CxghGJ2p.js","assets/toggle-group-BdRiuw4z.js","assets/use-view-mode-BxeTvkA3.js","assets/use-mobile-D5CjYT-t.js","assets/FilterLines-BKqF2vuj.js","assets/Globe01-DbjnW3Y4.js","assets/SearchMd-tFY89YJL.js","assets/dialog-C4ZAgrVU.js","assets/X-DhQKIdA0.js","assets/AlertCircle-Ckh9QyVE.js","assets/Upload01-CmVJo3In.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-COvTTmIn.js","assets/card-DaGKUKqL.js","assets/Trash01-C-nCZCWy.js","assets/label-kR9d7BEl.js","assets/select-BzuZD9AC.js","assets/tooltip-BusBlnFD.js","assets/ChevronDown-DlUR221w.js","assets/ChevronUp-C693p5q4.js","assets/switch-DWeKyPhK.js","assets/textarea-DUZ6Deea.js","assets/ArrowLeft-RnD3AF1o.js","assets/XCircle-BqSHcOgo.js","assets/checkbox-X1g6azyE.js","assets/Eye-CamAkprO.js","assets/LinkExternal01-BG1a_cKJ.js","assets/use-copy-CCyOuUbD.js","assets/Copy01-BW92d4Go.js","assets/Key01-Bozm_5V-.js","assets/Plus-dQXUEHA-.js","assets/mcp-oauth-B8R66bIy.js","assets/Play-BG1XdpM-.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,k as a,aG as o}from"./index-BoikrCDZ.js";import{R as m}from"./require-capability-x6tc6gzV.js";import"./use-capability-BKMDZXdW.js";import"./access-gate-BWLtht6A.js";import"./capability-load-error-CJutX_IM.js";const n=s.lazy(()=>o(()=>import("./registry-layout-DXmch4wI.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{f as default};