decocms 4.313.1 → 4.314.0

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 (246) hide show
  1. package/dist/client/assets/{AlertCircle-D3RIK2hn.js → AlertCircle-B_zhUYyq.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DxnO8fq_.js → AreaChart-D6S3HquY.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-CHX8vGpx.js → ArrowLeft-CM4x9OX8.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-Cd0yvDyw.js → ArrowUp-hkYLwn3c.js} +1 -1
  5. package/dist/client/assets/{Check-Bbk7jxV4.js → Check-DfANxPsi.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-Clgi1W4Y.js → CheckCircle-DeFsUP6_.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-Cr-w8TC2.js → ChevronDown-C8WgWA_q.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-BLdZNZ-o.js → ChevronRight-CxCOnhJy.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-hU-VYP8q.js → ChevronSelectorVertical-DfdhWzYb.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-B-7lsR9o.js → ChevronUp-BDCggT_p.js} +1 -1
  11. package/dist/client/assets/{Copy01-B5_ATplU.js → Copy01-C0ahWDlj.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-bNOWYMPy.js → CreditCard01-b7Febo-s.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-C_s2p-Gs.js → DotsVertical-7tofuXzy.js} +1 -1
  14. package/dist/client/assets/{Download01-Dz0ahGcG.js → Download01-Chj5OjyA.js} +1 -1
  15. package/dist/client/assets/{ErrorBarContext-oKwIiN18.js → ErrorBarContext-B1MdQwid.js} +1 -1
  16. package/dist/client/assets/{Eye-DZg9K2oA.js → Eye-P8sJfz_l.js} +1 -1
  17. package/dist/client/assets/{FilterLines-9zScAHDA.js → FilterLines-lStXwX9Q.js} +1 -1
  18. package/dist/client/assets/{GitBranch01-CazorRAE.js → GitBranch01-DsTkUF3p.js} +1 -1
  19. package/dist/client/assets/{Globe01-C9e01hU6.js → Globe01-DOOabwFY.js} +1 -1
  20. package/dist/client/assets/{Globe04-DYreHp6S.js → Globe04-qNPgJSm4.js} +1 -1
  21. package/dist/client/assets/{HardDrive-CCu4irUZ.js → HardDrive-O9ky3EbA.js} +1 -1
  22. package/dist/client/assets/{Image01-CkzF9_sg.js → Image01-Cl9_3wfi.js} +1 -1
  23. package/dist/client/assets/{Key01-8qufyEGI.js → Key01-hNLYo16Y.js} +1 -1
  24. package/dist/client/assets/{LinkExternal01-BtMZmuTg.js → LinkExternal01-Dco_nm3R.js} +1 -1
  25. package/dist/client/assets/{LockUnlocked01-BHgRnQNp.js → LockUnlocked01-BF_EnNnO.js} +1 -1
  26. package/dist/client/assets/{LogOut01-BYba1Z3S.js → LogOut01-uFcOy68y.js} +1 -1
  27. package/dist/client/assets/{Monitor01-DiqZa5J9.js → Monitor01-DLsQOA1D.js} +1 -1
  28. package/dist/client/assets/{Package-k99ySgIA.js → Package-CsvRQzHD.js} +1 -1
  29. package/dist/client/assets/{Palette-CAzZOPFB.js → Palette-Bb4yrUEF.js} +1 -1
  30. package/dist/client/assets/{Play-20YRocvR.js → Play-BXxlZ7ya.js} +1 -1
  31. package/dist/client/assets/{Plus-BLw4OvJk.js → Plus-BFBO_f5Q.js} +1 -1
  32. package/dist/client/assets/{SearchLg-vv8MdFMw.js → SearchLg-Bpq8Ieg6.js} +1 -1
  33. package/dist/client/assets/{SearchMd-afyAsGWZ.js → SearchMd-CcAfMSrL.js} +1 -1
  34. package/dist/client/assets/{Sector-BQWkDpdC.js → Sector-xcTxI_Op.js} +1 -1
  35. package/dist/client/assets/{Settings02-7Ak48PGP.js → Settings02-IZWP7hyP.js} +1 -1
  36. package/dist/client/assets/{Share07-o2BH1cxl.js → Share07-bCa2Xz5C.js} +1 -1
  37. package/dist/client/assets/{Shield01-Bd8pnxCz.js → Shield01-BOQpagSb.js} +1 -1
  38. package/dist/client/assets/{Stars01-AblXSS9k.js → Stars01-BXq3CL-K.js} +1 -1
  39. package/dist/client/assets/{Stars02-BUZ56vmx.js → Stars02-CM28isuk.js} +1 -1
  40. package/dist/client/assets/{Sun-CZCwqrVR.js → Sun-BaTk12Zm.js} +1 -1
  41. package/dist/client/assets/{SwitchHorizontal01-DIkGjqsK.js → SwitchHorizontal01-A8_VzjnQ.js} +1 -1
  42. package/dist/client/assets/{Tool01-D35Ubrdv.js → Tool01-pCXQCXvZ.js} +1 -1
  43. package/dist/client/assets/{Tool02-D_gBilpP.js → Tool02-CdBANYiT.js} +1 -1
  44. package/dist/client/assets/{Trash01-B-o3bbRx.js → Trash01-42KJ_5Ka.js} +1 -1
  45. package/dist/client/assets/{TrendUp01-CP6CTKN7.js → TrendUp01-BxJZlxaO.js} +1 -1
  46. package/dist/client/assets/{Upload01-QXuSfUk7.js → Upload01-CPOpP0OJ.js} +1 -1
  47. package/dist/client/assets/{User01-Df5q-VJm.js → User01-DC3VIyDl.js} +1 -1
  48. package/dist/client/assets/{UserSquare-CBDjGCqD.js → UserSquare-BhtWWlnA.js} +1 -1
  49. package/dist/client/assets/{Users01-IV-DmfwG.js → Users01-B2URMLXR.js} +1 -1
  50. package/dist/client/assets/{Users03-nHX85N9d.js → Users03-DEwGRBbG.js} +1 -1
  51. package/dist/client/assets/{XCircle-BXP7xpfS.js → XCircle-DK_zY2b7.js} +1 -1
  52. package/dist/client/assets/{XClose-CXZQuKYq.js → XClose-QublhX0Q.js} +1 -1
  53. package/dist/client/assets/{YAxis-Dz2yHuLo.js → YAxis-CkWUZZL3.js} +1 -1
  54. package/dist/client/assets/{Zap-crDkhkV6.js → Zap-BI98g4mC.js} +1 -1
  55. package/dist/client/assets/{ZapSquare-ODvhHonb.js → ZapSquare-CZW8i7EX.js} +1 -1
  56. package/dist/client/assets/{ZoomOut-DrVtrRav.js → ZoomOut-DC4s1itK.js} +1 -1
  57. package/dist/client/assets/{access-gate-jqvaSJ2l.js → access-gate-DnibBHM_.js} +1 -1
  58. package/dist/client/assets/{agent-icon-CevooW0v.js → agent-icon-Bp9_Zfqf.js} +1 -1
  59. package/dist/client/assets/{agents-list-DRSQUEQ-.js → agents-list-ClACXa6G.js} +1 -1
  60. package/dist/client/assets/{ai-providers-Ctne1AEW.js → ai-providers-C4yqYhEB.js} +1 -1
  61. package/dist/client/assets/{alert-DMwiZYb4.js → alert-BLEP94ye.js} +1 -1
  62. package/dist/client/assets/{alert-dialog-adbo3RVn.js → alert-dialog-BJmwY-8J.js} +1 -1
  63. package/dist/client/assets/{analytics-tab-BOGHGnMj.js → analytics-tab-CaWJC8-4.js} +1 -1
  64. package/dist/client/assets/{api-keys-BIbC9xgV.js → api-keys-m1s2lsCe.js} +1 -1
  65. package/dist/client/assets/{app-editor-BuWnYq4W.js → app-editor-CLZ6eK1V.js} +1 -1
  66. package/dist/client/assets/{auth-CTnZez4T.js → auth-BWmKq8Vz.js} +1 -1
  67. package/dist/client/assets/{auth-catchall-CHSxyI2I.js → auth-catchall-Bi47sgfG.js} +1 -1
  68. package/dist/client/assets/{auth-entry-BHdga9mK.js → auth-entry-BxBBe4_1.js} +1 -1
  69. package/dist/client/assets/{auth-split-layout-DQTvzMrj.js → auth-split-layout-DUAV5hyN.js} +1 -1
  70. package/dist/client/assets/{authenticate-and-persist-oauth-ECQgmIaS.js → authenticate-and-persist-oauth-DqUreklT.js} +1 -1
  71. package/dist/client/assets/{automation-list-row-4OkqZmVa.js → automation-list-row-BvOx6X4E.js} +1 -1
  72. package/dist/client/assets/{automation-runs-D7BtHxNh.js → automation-runs-DS0ngJjG.js} +1 -1
  73. package/dist/client/assets/{automations-Bts7ohIo.js → automations--5pB2ZhR.js} +1 -1
  74. package/dist/client/assets/{avatar-BJ4wouW2.js → avatar-BHWwB364.js} +1 -1
  75. package/dist/client/assets/{badge-BbA6vutU.js → badge-B1w8mO8m.js} +1 -1
  76. package/dist/client/assets/{block-document-C-2VMztn.js → block-document-hf4eaWO2.js} +1 -1
  77. package/dist/client/assets/{breadcrumb-Dl9kZBkM.js → breadcrumb-C-3hTdyK.js} +1 -1
  78. package/dist/client/assets/{buckets-kYs7IB7G.js → buckets-CtCo1_J2.js} +1 -1
  79. package/dist/client/assets/{bulk-category-panel-_Zh-ZP0A.js → bulk-category-panel-OkUUg0SG.js} +1 -1
  80. package/dist/client/assets/{capability-load-error-B13KZPG8.js → capability-load-error-COq_IPWZ.js} +1 -1
  81. package/dist/client/assets/{cards-zlO104Qf.js → cards-CbPtJ54Q.js} +1 -1
  82. package/dist/client/assets/{category-editor-SGX93d0Z.js → category-editor-CWeH91C3.js} +1 -1
  83. package/dist/client/assets/{cdn-tab-GwkMaTrc.js → cdn-tab-CX5AYl5G.js} +1 -1
  84. package/dist/client/assets/{chart-Ch9e2ojX.js → chart-DlU3cUAq.js} +1 -1
  85. package/dist/client/assets/{chat-context-DK6ny6PW.js → chat-context-Btzvye7m.js} +1 -1
  86. package/dist/client/assets/{checkbox-BkpAedRP.js → checkbox-CoINKEj9.js} +1 -1
  87. package/dist/client/assets/{choose-editor-BXk7jW5s.js → choose-editor-Ds3fgf8X.js} +1 -1
  88. package/dist/client/assets/{cli-auth-success-JMOeWERl.js → cli-auth-success-DMdE8h_-.js} +1 -1
  89. package/dist/client/assets/{collection-detail-BmUrT6-u.js → collection-detail-Chv8OYqG.js} +1 -1
  90. package/dist/client/assets/{collection-display-button-CCeqDIAH.js → collection-display-button-DPCdNLIY.js} +1 -1
  91. package/dist/client/assets/{collection-search-Bxg-unih.js → collection-search-DM8BRwDV.js} +1 -1
  92. package/dist/client/assets/{collection-table-wrapper-7CleRTT-.js → collection-table-wrapper-Col9GI9w.js} +1 -1
  93. package/dist/client/assets/{collection-tabs-CqBzIlXt.js → collection-tabs-Dzhd5G34.js} +1 -1
  94. package/dist/client/assets/{command-DofJOsv1.js → command-e4i62yLH.js} +1 -1
  95. package/dist/client/assets/{commerce-onboarding-GHzC3JzC.js → commerce-onboarding-lFHjqnOg.js} +1 -1
  96. package/dist/client/assets/{config-BbHzkOKI.js → config-CKezZW4H.js} +1 -1
  97. package/dist/client/assets/{connect-COkZAHd0.js → connect-D_54bJzL.js} +1 -1
  98. package/dist/client/assets/{connection-card-CTODige-.js → connection-card-DFrMrZBI.js} +1 -1
  99. package/dist/client/assets/{connection-detail-BwnGWe1e.js → connection-detail-CaQdPMIt.js} +1 -1
  100. package/dist/client/assets/{connection-form-helpers-BtpTdUn9.js → connection-form-helpers-kw1MUnF_.js} +1 -1
  101. package/dist/client/assets/{connection-Dm7WEKZM.js → connection-xW25B2rX.js} +1 -1
  102. package/dist/client/assets/{connections-BiRpBfaX.js → connections-BwUIydtZ.js} +1 -1
  103. package/dist/client/assets/{decopilot-sse-pool-ZxGP5hs1.js → decopilot-sse-pool-C5RqgX_J.js} +1 -1
  104. package/dist/client/assets/{dialog-Cq7ie8s0.js → dialog-iI1NA-0R.js} +1 -1
  105. package/dist/client/assets/{domain-settings-B_Fh6eRX.js → domain-settings-BGEAgKLg.js} +1 -1
  106. package/dist/client/assets/{drawer-BZmqHj0J.js → drawer-CzEzFsuz.js} +1 -1
  107. package/dist/client/assets/{dropdown-menu-BlHMaz8D.js → dropdown-menu-COGGeNq4.js} +1 -1
  108. package/dist/client/assets/{e2e-tab-4M_qCa0H.js → e2e-tab--yHErLRb.js} +1 -1
  109. package/dist/client/assets/{editor-mCyEhUkb.js → editor-ChIx1WDC.js} +1 -1
  110. package/dist/client/assets/{empty-state-B2fl61Ut.js → empty-state-1rU2hUr_.js} +1 -1
  111. package/dist/client/assets/{empty-state-D-kH9fR-.js → empty-state-C7A7JRWQ.js} +1 -1
  112. package/dist/client/assets/{extract-connection-data-BeVxWwV4.js → extract-connection-data-CtVOpSsE.js} +1 -1
  113. package/dist/client/assets/{file-explorer-CnESi0b-.js → file-explorer-grS4f-9M.js} +1 -1
  114. package/dist/client/assets/{file-type-icon-CrKPypGX.js → file-type-icon-BhfFTIiP.js} +1 -1
  115. package/dist/client/assets/{folder-icon-CDZBJFOG.js → folder-icon-BzHlKbth.js} +1 -1
  116. package/dist/client/assets/{form-BMOo8SJ1.js → form-CxXgtklT.js} +1 -1
  117. package/dist/client/assets/{general-DSgHsO7J.js → general-LMwBMjTn.js} +1 -1
  118. package/dist/client/assets/{github-repo-picker-BlnOD4OJ.js → github-repo-picker-NKhtGpHe.js} +1 -1
  119. package/dist/client/assets/{hooks-EQvMsruE.js → hooks-Czp0Vm7T.js} +1 -1
  120. package/dist/client/assets/{hosting-tab-BSRmWteO.js → hosting-tab-C-uQkHFM.js} +1 -1
  121. package/dist/client/assets/{index-BB0fbkIC.js → index-B8Wva1gI.js} +1 -1
  122. package/dist/client/assets/{index-Cf_NSx-d.js → index-BDJ_mHYI.js} +1 -1
  123. package/dist/client/assets/{index-CfNf1j9v.js → index-BHLWSEQW.js} +1 -1
  124. package/dist/client/assets/{index-fWgB-p4z.js → index-C1xEZcpc.js} +1 -1
  125. package/dist/client/assets/{index-CkS7vj8V.js → index-C5JfMRK0.js} +1 -1
  126. package/dist/client/assets/{index-CJyo09Wf.js → index-CL6WU6jf.js} +1 -1
  127. package/dist/client/assets/{index-Ddsfwzp8.js → index-CYwFrjXK.js} +6 -6
  128. package/dist/client/assets/{index-y9i5snzl.js → index-CeHNUX3D.js} +3 -3
  129. package/dist/client/assets/{index-DQng3b9j.js → index-Cs-tZMPY.js} +1 -1
  130. package/dist/client/assets/{index-redirect-BdtoU9kZ.js → index-redirect-CcGSV4oj.js} +1 -1
  131. package/dist/client/assets/{infra-billing-DBJ2L8qN.js → infra-billing-GHsR9WRV.js} +1 -1
  132. package/dist/client/assets/{input-CI6MitNe.js → input-CigjPo7L.js} +1 -1
  133. package/dist/client/assets/{integration-icon-CcBMTBpK.js → integration-icon-DGh_tLOa.js} +1 -1
  134. package/dist/client/assets/{invite-member-dialog-CN9_vOiG.js → invite-member-dialog-CGEB_2-r.js} +1 -1
  135. package/dist/client/assets/{label-qfV3IsYG.js → label-DX7R7EXN.js} +1 -1
  136. package/dist/client/assets/{layout-I6B-L4hZ.js → layout-CtoDdZnz.js} +1 -1
  137. package/dist/client/assets/{login-GjI9ACOO.js → login-DO_-9DiL.js} +1 -1
  138. package/dist/client/assets/{markdown-BlzRsVvE.js → markdown-BQRh4G0_.js} +1 -1
  139. package/dist/client/assets/{mcp-oauth-DUdpc0vs.js → mcp-oauth-DcGjP0QG.js} +1 -1
  140. package/dist/client/assets/{members-iLKh7Oil.js → members-rD3kJ-hL.js} +1 -1
  141. package/dist/client/assets/{monaco-editor-BxqHpz_Q.js → monaco-editor-BKuX3MQ-.js} +1 -1
  142. package/dist/client/assets/{monitoring-stats-row-Cg4w4UXg.js → monitoring-stats-row-ACnFRmyV.js} +1 -1
  143. package/dist/client/assets/{multi-select-f40Jkgkf.js → multi-select-CKyy7O-D.js} +1 -1
  144. package/dist/client/assets/{oauth-callback-BAIbVrvk.js → oauth-callback-DHuOeFgV.js} +1 -1
  145. package/dist/client/assets/{oauth-callback-ai-provider-CAxjjas8.js → oauth-callback-ai-provider-JRedAvI-.js} +1 -1
  146. package/dist/client/assets/{onboarding-Cu0Shp4S.js → onboarding-Dxu8CJSZ.js} +1 -1
  147. package/dist/client/assets/{org-layout-DzxMJqg1.js → org-layout-Cx7JU_XZ.js} +1 -1
  148. package/dist/client/assets/{organization-choice-DBmW83Wv.js → organization-choice-ayeeaXuB.js} +1 -1
  149. package/dist/client/assets/{orgs-BwnFBNvr.js → orgs-DL-74n9B.js} +1 -1
  150. package/dist/client/assets/{page-seo-form-D8tYVTeF.js → page-seo-form-DJ_6RJqs.js} +1 -1
  151. package/dist/client/assets/{popover-D3Q0Qph5.js → popover-EhUVawyH.js} +1 -1
  152. package/dist/client/assets/{post-calendar-B36wrfSp.js → post-calendar-tqWo5R9q.js} +1 -1
  153. package/dist/client/assets/{post-editor-wByD5M2R.js → post-editor-Co0rm-lg.js} +1 -1
  154. package/dist/client/assets/{primitives-Tk6l0Uuf.js → primitives-ve6_POzM.js} +1 -1
  155. package/dist/client/assets/{profile-Cafp35y3.js → profile-CoGycxHB.js} +1 -1
  156. package/dist/client/assets/{project-app-view-CSt7vQ3i.js → project-app-view-BKeLzhHm.js} +1 -1
  157. package/dist/client/assets/{prompts-BzqOhoAJ.js → prompts-B-bKIb7H.js} +1 -1
  158. package/dist/client/assets/record-editor-D5UhVyBZ.js +1 -0
  159. package/dist/client/assets/{redirect-editor-C1mD70ru.js → redirect-editor-C4fl2BMG.js} +1 -1
  160. package/dist/client/assets/registry-CSeW7y1x.js +2 -0
  161. package/dist/client/assets/{registry-layout-BSi5WWZp.js → registry-layout-DjjMmE2S.js} +1 -1
  162. package/dist/client/assets/{reports-BUyJXgir.js → reports-BCYHvwz-.js} +1 -1
  163. package/dist/client/assets/{require-capability-Cy7aIj43.js → require-capability-BdvS6ILr.js} +1 -1
  164. package/dist/client/assets/{required-auth-layout-BZkPcJY_.js → required-auth-layout-DsrVdRoj.js} +1 -1
  165. package/dist/client/assets/{reset-password-BHIHswDl.js → reset-password-9l3lOZ4l.js} +1 -1
  166. package/dist/client/assets/{review-settings-DUdS3RUN.js → review-settings-CZI4lPm_.js} +1 -1
  167. package/dist/client/assets/{roles-DBm04DiP.js → roles-Cs-_qQlk.js} +1 -1
  168. package/dist/client/assets/{scroll-area-lzUF2OIj.js → scroll-area-CK5jATDV.js} +1 -1
  169. package/dist/client/assets/{search-input-CIp9H8IA.js → search-input-BlBi58b1.js} +1 -1
  170. package/dist/client/assets/{secrets-bZnvMqM4.js → secrets-GmxDNR9r.js} +1 -1
  171. package/dist/client/assets/{sections-editor-CB7KbKjy.js → sections-editor-DGIiOraw.js} +1 -1
  172. package/dist/client/assets/{select-BUC0a0vt.js → select-DWx_jEh9.js} +1 -1
  173. package/dist/client/assets/{select-model-ftoMMlqt.js → select-model-CGxZVjfO.js} +1 -1
  174. package/dist/client/assets/{self-tool-result-By3oM2v-.js → self-tool-result-D3zM-sJ1.js} +1 -1
  175. package/dist/client/assets/{seo-editor-DgfzZMdc.js → seo-editor-CriC5a0-.js} +1 -1
  176. package/dist/client/assets/{settings-layout-zTo8pKMy.js → settings-layout-DDbOqiOm.js} +1 -1
  177. package/dist/client/assets/{shell-controls-T0zgt1qn.js → shell-controls-DkkwcdQM.js} +1 -1
  178. package/dist/client/assets/{shell-layout-DZVAhk9X.js → shell-layout-C_B7ct0v.js} +1 -1
  179. package/dist/client/assets/{skill-preview-CrbPHZgI.js → skill-preview-BrUABoZd.js} +1 -1
  180. package/dist/client/assets/skills-Cf355J13.js +1 -0
  181. package/dist/client/assets/{spinner-CU56k1A_.js → spinner-DJz7ctHM.js} +1 -1
  182. package/dist/client/assets/{sso-C50KaieM.js → sso-CB7hPSbc.js} +1 -1
  183. package/dist/client/assets/{store-CLb7fca6.js → store-BHJ_OqZ9.js} +1 -1
  184. package/dist/client/assets/store-registry-6SxtDMSY.js +2 -0
  185. package/dist/client/assets/{super-agent-icon-uXtj09T3.js → super-agent-icon-D1XTtr3Z.js} +1 -1
  186. package/dist/client/assets/{switch-D7BjdrCd.js → switch-B47sm5yE.js} +1 -1
  187. package/dist/client/assets/{synced-repos-C8a0-zYK.js → synced-repos-DgNTvl9D.js} +1 -1
  188. package/dist/client/assets/{table-Siq76s2x.js → table-T7KqQ9p1.js} +1 -1
  189. package/dist/client/assets/{tabs-BrW6NxCk.js → tabs-ZS9uSk9G.js} +1 -1
  190. package/dist/client/assets/{task-board-_dgI8d00.js → task-board-ILSLZAbu.js} +1 -1
  191. package/dist/client/assets/{tasks-C8F88xkX.js → tasks-9yLQPr15.js} +1 -1
  192. package/dist/client/assets/{textarea-wSo5YRWq.js → textarea-CmfwOI27.js} +1 -1
  193. package/dist/client/assets/{thread-route-CRRBMoag.js → thread-route-CVvLaAcH.js} +1 -1
  194. package/dist/client/assets/{toggle-group-AU3SP1GH.js → toggle-group-B2iFvxxB.js} +1 -1
  195. package/dist/client/assets/{toolbar-DRjigN-V.js → toolbar-nbnS8rkc.js} +1 -1
  196. package/dist/client/assets/{track--akTHrJW.js → track-Dr_oTUfM.js} +1 -1
  197. package/dist/client/assets/{types-1QcleqE_.js → types-BJPe82oV.js} +1 -1
  198. package/dist/client/assets/{use-ai-providers-BkMbV3OZ.js → use-ai-providers-DPdqZ6aO.js} +1 -1
  199. package/dist/client/assets/{use-api-keys-Qc5IGnvE.js → use-api-keys-CMCmTSsP.js} +1 -1
  200. package/dist/client/assets/{use-automations-CX_FYGxb.js → use-automations-BhgpJM6C.js} +1 -1
  201. package/dist/client/assets/{use-autosave-DFMp35s0.js → use-autosave-nqccBX72.js} +1 -1
  202. package/dist/client/assets/{use-connection-CxZpHLLl.js → use-connection-Bsd4GWcK.js} +1 -1
  203. package/dist/client/assets/{use-copy-CTSBwmsG.js → use-copy-DnmAbszb.js} +1 -1
  204. package/dist/client/assets/{use-create-virtual-mcp-BUZZt-a8.js → use-create-virtual-mcp-W0akXWO0.js} +1 -1
  205. package/dist/client/assets/{use-debounced-autosave-DtGYVW_S.js → use-debounced-autosave-6BqwhhYh.js} +1 -1
  206. package/dist/client/assets/{use-debounced-value-l-3H7szz.js → use-debounced-value-CnmNAi-V.js} +1 -1
  207. package/dist/client/assets/{use-decopilot-events-BNOTnySJ.js → use-decopilot-events-DmWdiI1m.js} +1 -1
  208. package/dist/client/assets/{use-delete-connection-BGjOyEVm.js → use-delete-connection-DGtvm0s_.js} +1 -1
  209. package/dist/client/assets/{use-deployment-admin-_OaBu6yr.js → use-deployment-admin-BrmkANed.js} +1 -1
  210. package/dist/client/assets/{use-destination-route-Co9ZfN1_.js → use-destination-route-BZ4K8M8-.js} +1 -1
  211. package/dist/client/assets/{use-file-configs-uFWfwrQx.js → use-file-configs-KErCAfF9.js} +1 -1
  212. package/dist/client/assets/{use-infinite-scroll-zdIWMeDL.js → use-infinite-scroll-snysN5e7.js} +1 -1
  213. package/dist/client/assets/{use-join-requests-BLWFg52z.js → use-join-requests-BfDYm18f.js} +1 -1
  214. package/dist/client/assets/{use-mcp-auth-status-Dq6bWHkf.js → use-mcp-auth-status-C62D_Avt.js} +1 -1
  215. package/dist/client/assets/{use-mcp-client-C7ep1V3S.js → use-mcp-client-C_7F4g_g.js} +1 -1
  216. package/dist/client/assets/{use-mcp-tools-Bk5zpMSR.js → use-mcp-tools-BlcjuAkD.js} +1 -1
  217. package/dist/client/assets/{use-members-BmJI1xt6.js → use-members-XbDTpP2v.js} +1 -1
  218. package/dist/client/assets/{use-navigate-to-agent-Bh5CBkgV.js → use-navigate-to-agent-D4eh024G.js} +1 -1
  219. package/dist/client/assets/{use-org-auth-client-BbTbKKFy.js → use-org-auth-client-Bgs06HCF.js} +1 -1
  220. package/dist/client/assets/{use-org-repo-syncs-DaTTKddy.js → use-org-repo-syncs-2S_q6Udf.js} +1 -1
  221. package/dist/client/assets/{use-org-sso-4UlroElP.js → use-org-sso-BAztyTbU.js} +1 -1
  222. package/dist/client/assets/{use-organization-roles-BWvgFg-y.js → use-organization-roles-Djau9YMJ.js} +1 -1
  223. package/dist/client/assets/{use-organization-settings-DYosbMqS.js → use-organization-settings-C1Kg0LI1.js} +1 -1
  224. package/dist/client/assets/{use-panel-navigate-sqxmH0mY.js → use-panel-navigate-DDzFCBdR.js} +1 -1
  225. package/dist/client/assets/{use-registry-connections-XnT-ZT0A.js → use-registry-connections-CQquBTq-.js} +1 -1
  226. package/dist/client/assets/{use-secrets-CKDMV07O.js → use-secrets-DUEdVQlQ.js} +1 -1
  227. package/dist/client/assets/{use-section-preview-base-G_BxZugC.js → use-section-preview-base-BubZ68gW.js} +1 -1
  228. package/dist/client/assets/{use-status-sounds-C-z4N8qe.js → use-status-sounds-Fh12TOm6.js} +1 -1
  229. package/dist/client/assets/{use-tags-DYn1pKIf.js → use-tags-fKAQDwH1.js} +1 -1
  230. package/dist/client/assets/{use-view-mode-0U4Cd5xW.js → use-view-mode-XH8-Zknq.js} +1 -1
  231. package/dist/client/assets/{use-virtual-mcp-BUEH2bk9.js → use-virtual-mcp-DLKwjXAE.js} +1 -1
  232. package/dist/client/assets/useInfiniteQuery-RBxVlUFh.js +1 -0
  233. package/dist/client/assets/useSuspenseInfiniteQuery-G2lFHPB7.js +1 -0
  234. package/dist/client/assets/{users-BLyTbTqA.js → users-CEFQy4Aj.js} +1 -1
  235. package/dist/client/assets/{variant-calendar-CffIk4J6.js → variant-calendar-bXdtXNa1.js} +1 -1
  236. package/dist/client/assets/{view-mode-toggle-DJqz276E.js → view-mode-toggle-C3D9zqbU.js} +1 -1
  237. package/dist/client/index.html +1 -1
  238. package/dist/server/cli.js +1 -1
  239. package/dist/server/server.js +1 -1
  240. package/package.json +1 -1
  241. package/dist/client/assets/record-editor-V5PK_0Ap.js +0 -1
  242. package/dist/client/assets/registry-Dldafmvt.js +0 -2
  243. package/dist/client/assets/skills-CoWqJSxw.js +0 -1
  244. package/dist/client/assets/store-registry-BOsdQ1sF.js +0 -2
  245. package/dist/client/assets/useInfiniteQuery-BTMJ4YO-.js +0 -1
  246. package/dist/client/assets/useSuspenseInfiniteQuery-CxfAJyMW.js +0 -1
@@ -2980,7 +2980,7 @@ Respond with the structured verdict and a short reason.`,Yd$;var Jd$=D(()=>{c4()
2980
2980
  ${G.join(`
2981
2981
  `)}`:Y}function DB6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2982
2982
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var ld$=200,GB6=12,WB6,HB6=300,YX1=3;var GX1=D(()=>{QL();bT0();WB6={aheadBy:0,behindBy:0,files:[]}});function wB6($){if(!$||$.includes(".."))return!1;return LB6.test($)}function dd$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!wB6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function md$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var LB6;var id$=D(()=>{LB6=/^[\w./@-]+$/});function _a($,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 pd$($,Z,X,Q){if(!Q.connectionId)throw new kv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new kv(K9);await lO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:K9;throw new kv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await fK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=D9$(F instanceof Error?F.message:String(F));throw N?new kv(U):F}),K=Yl($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await uO(H,EB6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var EB6=10485760,kv;var JX1=D(()=>{HJ();RT0();Pn();ci0();dy();kv=class kv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function zB6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!jB6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Vv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(AB6)])}async function RB6($,Z){let X=$.var.studioContext,Q=WJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=kC(J?.metadata?.runtime);if(W)return W;let K=UD0(Z.virtualMcpMetadata),H=K==="cms"?await u71(X,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",N=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(N&&J)sn(X,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:N});return F}async function IB6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await WQ($.var.studioContext)}catch{return null}}function Sv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Hl($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=_a(Z,X);if(!Y)throw new h4(404,"AUTH","repo","Project has no GitHub repository");let G=n(Q);return IT0(Q,G.id,Y)}function WX1($,Z){if(Z instanceof kA0)return $.json({error:Z.message},429,{...T5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,T5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,T5)}async function od$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function rd$($){try{let Z=await Hl($),X=await xT0(Z,$.get("vmClaim").branch);return $.json(X,200,T5)}catch(Z){return WX1($,Z)}}function va($,Z){let Q=(hT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return hT0.set($,Y),Y.finally(()=>{if(hT0.get($)===Y)hT0.delete($)}),Q}async function X7($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,T5);let Q=X?.runner??Sv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,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 F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.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",...T5}})}}let O=await B.text(),L=X?.redactRepoDir?qB6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...T5}})};try{if(F){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function qB6($){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 uT0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function MB6($){return sd$.includes($)}var jB6,nd$=524288,PB6=65536,AB6=1e4,td$=2000,TB6,hT0,T5,sd$,ad$=()=>{let $=new K1;$.use("/:virtualMcpId/:branch/*",TB6),$.post("/:virtualMcpId/:branch/write",(X)=>X7(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>X7(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>X7(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>X7(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>X7(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>X7(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>X7(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return X7(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return X7(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>X7(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>X7(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!MB6(Q))return X.json({error:`step must be one of: ${sd$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await u71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await IB6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,T5);if(Q==="start"){let J=n(X.var.studioContext),W=ly(Y.virtualMcpMetadata);try{await k70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${H}`},502)}}return X7(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return $U(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ac$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return rd$(X);return Z(X)});let Z=(X)=>X7(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(td$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return rd$(X);return X7(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(td$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await Hl(X),J=await yT0(G,Q.branch,Y.base);return X.json(J,200,T5)}catch(Y){return WX1(X,Y)}return X7(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,T5);let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return va(Y,async()=>{try{await l71(W,Q,Y);let K=_a(G,J);if(K)await pd$(W,Q,Y,K)}catch(K){if(K instanceof kv)return X.json({error:K.message},403,T5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,T5)}return X7(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return va(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,T5);try{let J=await Hl(X);return await cd$(J,Q.branch,G),X.json({ok:!0},200,T5)}catch(J){let W=J instanceof h4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,T5)}});return va(Q.claimName,()=>X7(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return va(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Hl(X),H=W.base??await K.getDefaultBranch();return await gT0(K,Q.branch,H),X.json({ok:!0},200,T5)}catch(W){return WX1(X,W)}});let Y=Sv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return va(G,async()=>{try{await l71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,T5)}return X7(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",o5({maxSize:nd$,onError:(X)=>X.json({error:"Payload too large"},413,T5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Sv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=m71(F)&&U?[F,N]:Y?await Promise.all([uT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),uT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Hl(X);return Promise.all([xT0(w,Q.branch),yT0(w,Q.branch)])})(),L=await Qd$(K,B,O);return X.json(L,200,T5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,T5);return X.json({error:F},502,T5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",o5({maxSize:nd$,onError:(X)=>X.json({error:"Payload too large"},413,T5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Sv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=m71(F)&&U?[F,N]:Y?await Promise.all([uT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),uT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Hl(X);return Promise.all([xT0(w,Q.branch),yT0(w,Q.branch)])})(),L=await Gd$(K,B,O,typeof H.language==="string"?H.language:void 0);return X.json(L,200,T5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,T5);return X.json({error:F},502,T5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return od$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",o5({maxSize:PB6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=dd$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=md$(G,W.resolveType);return od$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var ed$=D(()=>{Q8();MH();Ql();h71();Ln();oc$();n3();Jg();rc$();a3();sc$();ec$();hi0();jn();n71();Jd$();o71();QL();GX1();id$();JX1();jB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;TB6=TT0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=n(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{zB6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=On({orgId:Y.id,virtualMcpId:G,branch:J}),H=await vi0(X,J),F=fi0(H,Q),N=tc$({userId:F,projectRef:K}),U=W.metadata??null,B=await RB6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:U,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await WQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});hT0=new Map;T5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};sd$=["clone","install","start"]});function $m$($,Z,X){let Q=KX1.get($);if(!Q)Q={pending:null,running:!1},KX1.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)VB6($,Q);return G}async function VB6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await SB6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)KX1.delete($)}}async function SB6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Kl(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=XX1(W,Q),H=[],F=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=QX1(K,O),E=`${JSON.stringify(L,null,2)}
2983
- `,j=await Z.createBlob(E);await gd$(Z.owner,Z.repo,j,E);let z=w[0]??`${fT0(Q)}/${s71(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of QX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=ka(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:CB6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=kB6-1)throw O;await w$(G7(2000,200,Y,2,0.5))}}}function CB6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Mi0(Q,$.deps.coAuthor)}var kB6=3,KX1;var Zm$=D(()=>{JD0();MT0();W4();QL();bT0();KX1=new Map});import{createHmac as Xm$,randomBytes as _B6,timingSafeEqual as vB6}from"crypto";function Qm$(){if(lT0)return lT0;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return lT0=$?Buffer.from($):_B6(32),lT0}function HX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+fB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Xm$("sha256",Qm$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Ym$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Xm$("sha256",Qm$()).update(Q).digest("base64url"));if(Y.length!==G.length||!vB6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var fB6=21600000,lT0=null;var Gm$=D(()=>{E$()});import{z as Fl}from"zod";function xB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&bB6.test($)}function Fm$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function fa($){let Z=$.get("decofileScope");return IT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ba($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Nm$(){let $=new K1;return $.use("/:virtualMcpId/:branch",Hm$),$.use("/:virtualMcpId/:branch/*",Hm$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await hd$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=HX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Fm$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ba(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await fa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ba(Z,Y)}}),$.patch("/:virtualMcpId/:branch",gB6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=hB6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{qT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(r71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await fa(Z),W=await $m$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Yl(Q)},G),K=HX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Fm$(Z)})}catch(J){return ba(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await gT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return ba(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ba(Z,Q)}}),$}var bB6,Jm$=500,Wm$=1048576,Km$=1024,yB6=8388608,gB6,hB6,Hm$;var Um$=D(()=>{Ht0();MT0();Q8();MH();h71();RT0();JX1();o71();Zm$();Gm$();GX1();QL();bT0();bB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;gB6=o5({maxSize:yB6,onError:($)=>$.json({error:"Payload too large"},413)}),hB6=Fl.object({set:Fl.record(Fl.string(),Fl.unknown()).optional(),delete:Fl.array(Fl.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Jm$,{message:`Patch cannot touch more than ${Jm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Wm$),{message:`Each block must be at most ${Wm$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Km$),{message:`Each block key must be at most ${Km$} characters`}),Hm$=TT0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!xB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Ym$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!ND0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=_a(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Bm$=($)=>{let Z=new K1;if(Z.use("*",Ev),Z.route("/",gA0()),Z.route("/",Vh$()),Z.route("/",bc$()),Z.route("/",_c$()),Z.route("/",zT0()),Z.route("/tools",cc$()),Z.route("/",hc$()),Z.route("/",Nc$({kvStorage:$.kvStorage})),Z.route("/",Hc$()),Z.route("/fs",Ic$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ad$()),Z.route("/decofile",Nm$()),Z.route("/",Vc$()),Z.route("/deco-sites",uA0()),Z.route("/hosting",Eh$()),Z.route("/monitor",Ih$()),Z.route("/sso",_A0()),Z.route("/",PT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Nh$()),$.mountDevAssets)Z.route("/dev-assets",dA0({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("/",_x$()),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",Mc$()),Z.route("/mcp",cw0()),Z.route("/mcp/self",jT0()),Z.route("/mcp",iw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Om$=D(()=>{Q8();GZ1();Uh$();HZ1();jh$();qh$();mA0();$a();QZ1();Fc$();Uc$();qc$();Wo();s91();pw0();_71();kc$();Sc$();vc$();xc$();uc$();f71();dc$();b71();dw0();ed$();Um$()});function uB6($){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}}))}var lB6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Dm$=()=>{let $=new K1;return $.use("*",lB6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await Z7(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:uB6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Lm$=D(()=>{Q8();E$();xP0()});import{z as k1}from"zod";function vH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function sB6($){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 aB6($,Z,X){try{return JSON.parse($)}catch{throw new jm$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function eB6($){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((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:aB6(Y.function.arguments,Y.id,Y.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 $O6($){let Z=$.map((X)=>{let Q=X.function.parameters?sY(X.function.parameters):sY({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function ZO6($){if(!$)return;return{openai:{response_format:$}}}function XO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function wm$($,Z,X,Q,Y,G){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:G};return Y?{...J,providerOptions:Y}:J}function Em$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var cB6=256,dB6,mB6,iB6,pB6,nB6,tB6,oB6,rB6,jm$,zm$,Pm$;var Am$=D(()=>{c4();Q8();Ql();vN();dB6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),mB6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),iB6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(mB6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),pB6=k1.object({type:k1.literal("text")}),nB6=k1.object({type:k1.literal("json_object")}),tB6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),oB6=k1.union([pB6,nB6,tB6]),rB6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(iB6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(dB6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:oB6.optional(),user:k1.string().optional()});jm$=class jm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zm$=new K1;zm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(vH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(vH("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(vH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=rB6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(vH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=sB6(G.model);if(!J)return $.json(vH("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)=>jw(j.providerId));if(!E)return $.json(vH("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(vH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=eB6(G.messages),U=G.tools?$O6(G.tools):void 0,B=ZO6(G.response_format),O=XO6(),L=Math.floor(Date.now()/1000);if(G.stream)return $U($,async(w)=>{let E=wm$(F,N,U,G,B,$.req.raw.signal);try{let j=bO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=cB6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Em$(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 I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=wm$(F,N,U,G,B,$.req.raw.signal),E=await vO(w),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:L,model:G.model,choices:[{index:0,message:j,finish_reason:Em$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(vH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(vH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(vH(Y.message,"server_error"),500)}});Pm$=zm$});function QO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Tm$(){let $=new K1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!XJ(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||hZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(pe1(N)!==G)continue;if(!QO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Rm$=D(()=>{Q8();DO()});var qm$;var Im$=D(()=>{qm$={name:"decocms",version:"4.313.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.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","@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 JO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??GO6}}var Mm$,GO6="https://ph.studio.decocms.com",km$;var Vm$=D(()=>{Q8();J90();aC();Q9();E$();c91();Im$();Mm$=new K1;Mm$.get("/",($)=>{let Z={version:qm$.version,theme:Kp1(),..._F().logo&&{logo:_F().logo},...zN()&&{internalUrl:g_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:Pg$(),posthog:JO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:da()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});km$=Mm$});function Nl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function FX1($){return(Nl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Cm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Nl($))}&sz=${Z}`}function Sm$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function _m$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=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=Y?.trim()?Sm$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Sm$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var Cv,WO6,KO6,HO6,FO6,vm$;var fm$=D(()=>{Cv=c0.enum(["good","bad","neutral"]),WO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:Cv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),KO6=c0.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},c0.array(WO6)),HO6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},FO6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:Cv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:Cv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(KO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:Cv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),vm$=c0.object({...HO6,template:FO6})});function cT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=vm$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var NX1=D(()=>{fm$()});import{join as bm$}from"path";async function UO6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(NO6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=cT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||FX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function PG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function BO6($,Z){let X=Nl($),Q=Z?.brand?.trim()||FX1(X),Y=Cm$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=_m$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${PG(W)}</title>`,`<meta name="description" content="${PG(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="${PG(W)}" />`,`<meta property="og:description" content="${PG(K)}" />`,`<meta property="og:url" content="${PG(J)}" />`,`<meta property="og:image" content="${PG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${PG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${PG(W)}" />`,`<meta name="twitter:description" content="${PG(K)}" />`,`<meta name="twitter:image" content="${PG(H)}" />`,`<meta name="twitter:image:alt" content="${PG(F)}" />`,`<link rel="canonical" href="${PG(J)}" />`,`<link rel="icon" href="${PG(Y)}" sizes="any" />`].join(`
2983
+ `,j=await Z.createBlob(E);await gd$(Z.owner,Z.repo,j,E);let z=w[0]??`${fT0(Q)}/${s71(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of QX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=ka(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:CB6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=kB6-1)throw O;await w$(G7(2000,200,Y,2,0.5))}}}function CB6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Mi0(Q,$.deps.coAuthor)}var kB6=3,KX1;var Zm$=D(()=>{JD0();MT0();W4();QL();bT0();KX1=new Map});import{createHmac as Xm$,randomBytes as _B6,timingSafeEqual as vB6}from"crypto";function Qm$(){if(lT0)return lT0;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return lT0=$?Buffer.from($):_B6(32),lT0}function HX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+fB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Xm$("sha256",Qm$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Ym$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Xm$("sha256",Qm$()).update(Q).digest("base64url"));if(Y.length!==G.length||!vB6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var fB6=21600000,lT0=null;var Gm$=D(()=>{E$()});import{z as Fl}from"zod";function xB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&bB6.test($)}function Fm$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function fa($){let Z=$.get("decofileScope");return IT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ba($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Nm$(){let $=new K1;return $.use("/:virtualMcpId/:branch",Hm$),$.use("/:virtualMcpId/:branch/*",Hm$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await hd$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=HX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Fm$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ba(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await fa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ba(Z,Y)}}),$.patch("/:virtualMcpId/:branch",gB6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=hB6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{qT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(r71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await fa(Z),W=await $m$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Yl(Q)},G),K=HX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Fm$(Z)})}catch(J){return ba(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await gT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return ba(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ba(Z,Q)}}),$}var bB6,Jm$=500,Wm$=1048576,Km$=1024,yB6=8388608,gB6,hB6,Hm$;var Um$=D(()=>{Ht0();MT0();Q8();MH();h71();RT0();JX1();o71();Zm$();Gm$();GX1();QL();bT0();bB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;gB6=o5({maxSize:yB6,onError:($)=>$.json({error:"Payload too large"},413)}),hB6=Fl.object({set:Fl.record(Fl.string(),Fl.unknown()).optional(),delete:Fl.array(Fl.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Jm$,{message:`Patch cannot touch more than ${Jm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Wm$),{message:`Each block must be at most ${Wm$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Km$),{message:`Each block key must be at most ${Km$} characters`}),Hm$=TT0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!xB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Ym$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!ND0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=_a(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Bm$=($)=>{let Z=new K1;if(Z.use("*",Ev),Z.route("/",gA0()),Z.route("/",Vh$()),Z.route("/",bc$()),Z.route("/",_c$()),Z.route("/",zT0()),Z.route("/tools",cc$()),Z.route("/",hc$()),Z.route("/",Nc$({kvStorage:$.kvStorage})),Z.route("/",Hc$()),Z.route("/fs",Ic$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ad$()),Z.route("/decofile",Nm$()),Z.route("/",Vc$()),Z.route("/deco-sites",uA0()),Z.route("/hosting",Eh$()),Z.route("/monitor",Ih$()),Z.route("/sso",_A0()),Z.route("/",PT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Nh$()),$.mountDevAssets)Z.route("/dev-assets",dA0({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("/",_x$()),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",Mc$()),Z.route("/mcp",cw0()),Z.route("/mcp/self",jT0()),Z.route("/mcp",iw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Om$=D(()=>{Q8();GZ1();Uh$();HZ1();jh$();qh$();mA0();$a();QZ1();Fc$();Uc$();qc$();Wo();s91();pw0();_71();kc$();Sc$();vc$();xc$();uc$();f71();dc$();b71();dw0();ed$();Um$()});function uB6($){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}}))}var lB6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Dm$=()=>{let $=new K1;return $.use("*",lB6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await Z7(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:uB6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Lm$=D(()=>{Q8();E$();xP0()});import{z as k1}from"zod";function vH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function sB6($){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 aB6($,Z,X){try{return JSON.parse($)}catch{throw new jm$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function eB6($){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((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:aB6(Y.function.arguments,Y.id,Y.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 $O6($){let Z=$.map((X)=>{let Q=X.function.parameters?sY(X.function.parameters):sY({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function ZO6($){if(!$)return;return{openai:{response_format:$}}}function XO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function wm$($,Z,X,Q,Y,G){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:G};return Y?{...J,providerOptions:Y}:J}function Em$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var cB6=256,dB6,mB6,iB6,pB6,nB6,tB6,oB6,rB6,jm$,zm$,Pm$;var Am$=D(()=>{c4();Q8();Ql();vN();dB6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),mB6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),iB6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(mB6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),pB6=k1.object({type:k1.literal("text")}),nB6=k1.object({type:k1.literal("json_object")}),tB6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),oB6=k1.union([pB6,nB6,tB6]),rB6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(iB6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(dB6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:oB6.optional(),user:k1.string().optional()});jm$=class jm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zm$=new K1;zm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(vH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(vH("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(vH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=rB6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(vH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=sB6(G.model);if(!J)return $.json(vH("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)=>jw(j.providerId));if(!E)return $.json(vH("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(vH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=eB6(G.messages),U=G.tools?$O6(G.tools):void 0,B=ZO6(G.response_format),O=XO6(),L=Math.floor(Date.now()/1000);if(G.stream)return $U($,async(w)=>{let E=wm$(F,N,U,G,B,$.req.raw.signal);try{let j=bO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=cB6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Em$(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 I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=wm$(F,N,U,G,B,$.req.raw.signal),E=await vO(w),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:L,model:G.model,choices:[{index:0,message:j,finish_reason:Em$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(vH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(vH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(vH(Y.message,"server_error"),500)}});Pm$=zm$});function QO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Tm$(){let $=new K1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!XJ(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||hZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(pe1(N)!==G)continue;if(!QO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Rm$=D(()=>{Q8();DO()});var qm$;var Im$=D(()=>{qm$={name:"decocms",version:"4.314.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.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","@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 JO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??GO6}}var Mm$,GO6="https://ph.studio.decocms.com",km$;var Vm$=D(()=>{Q8();J90();aC();Q9();E$();c91();Im$();Mm$=new K1;Mm$.get("/",($)=>{let Z={version:qm$.version,theme:Kp1(),..._F().logo&&{logo:_F().logo},...zN()&&{internalUrl:g_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:Pg$(),posthog:JO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:da()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});km$=Mm$});function Nl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function FX1($){return(Nl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Cm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Nl($))}&sz=${Z}`}function Sm$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function _m$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=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=Y?.trim()?Sm$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Sm$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var Cv,WO6,KO6,HO6,FO6,vm$;var fm$=D(()=>{Cv=c0.enum(["good","bad","neutral"]),WO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:Cv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),KO6=c0.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},c0.array(WO6)),HO6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},FO6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:Cv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:Cv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(KO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:Cv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),vm$=c0.object({...HO6,template:FO6})});function cT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=vm$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var NX1=D(()=>{fm$()});import{join as bm$}from"path";async function UO6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(NO6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=cT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||FX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function PG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function BO6($,Z){let X=Nl($),Q=Z?.brand?.trim()||FX1(X),Y=Cm$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=_m$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${PG(W)}</title>`,`<meta name="description" content="${PG(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="${PG(W)}" />`,`<meta property="og:description" content="${PG(K)}" />`,`<meta property="og:url" content="${PG(J)}" />`,`<meta property="og:image" content="${PG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${PG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${PG(W)}" />`,`<meta name="twitter:description" content="${PG(K)}" />`,`<meta name="twitter:image" content="${PG(H)}" />`,`<meta name="twitter:image:alt" content="${PG(F)}" />`,`<link rel="canonical" href="${PG(J)}" />`,`<link rel="icon" href="${PG(Y)}" sizes="any" />`].join(`
2984
2984
  `)}function OO6($,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}
2985
2985
  </head>`)}function xm$($){let Z=new K1;return Z.get("/:domain/og.png",async(X)=>{let Q=Nl(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(bm$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(DO6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?bm$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await UO6(Nl(Q)),K=BO6(Q,W);return X.html(OO6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var NO6=2500,DO6=1e4;var ym$=D(()=>{Q8();NX1();AE();E$()});function xa($,Z){return fetch(`${DK({})}${$}`,Z)}async function LO6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await xa(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=cT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var wO6,XU,gm$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},hm$;var um$=D(()=>{Q8();nY();AE();NX1();wO6=new Set(["complete","errored","terminated","unknown"]),XU=new K1;XU.use("*",async($,Z)=>{let X=await e$.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});XU.use("/link-token/*",gm$);XU.use("/suggest",gm$);XU.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,Y=$.req.query("lang")?.trim()||void 0;try{let G=await LO6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});XU.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 Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await xa("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${PE({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});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)}});XU.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await xa(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${PE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:wO6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});XU.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await xa(`/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)}});XU.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await xa(`/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:[]})}});hm$=XU});import{createHmac as EO6,timingSafeEqual as jO6}from"crypto";function cm$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>zO6)return!1;let W=EO6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&jO6(K,F)})}function dm$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=mJ(Z),Q=mJ(mJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:fH(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 mm$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function fH($){return typeof $==="string"?$:void 0}function mJ($){return typeof $==="object"&&$!==null?$:void 0}function dT0($){return typeof $==="number"?new Date($*1000):null}function OX1($){return fH($)??fH(mJ($)?.id)}function PO6($){return OX1($.subscription)??fH(mJ(mJ($.parent)?.subscription_details)?.subscription)}function AO6($){let Z=dT0($.current_period_end);if(Z)return Z;let X=mJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=mJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function UX1($,Z){let X=dT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function BX1($,Z){let X=dT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function TO6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=fH(mJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(fH(mJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(fH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=fH(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(mJ(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:mJ(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(fH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=OX1(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(UX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:OX1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:BX1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=fH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&UX1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":mm$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:AO6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:BX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=PO6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(UX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:dT0(X.period_end),lastStripeEventAt:BX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function RO6($,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:mm$(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 lm$($,Z){let X=RO6($,Z);if(!X)return;dY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Lt1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function im$($){let Z=new NK(r8().db),X=await TO6(Z,$);if(!(X.handled&&X.topUp))lm$($,X);if(X.handled&&X.topUp)await Xz$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),lm$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await m0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof tY&&(Q.status===400||Q.status===404)))throw Q}return X}var zO6=300;var pm$=D(()=>{oG();S4();h50();_E();A11()});var IO6=1048576,DX1;var nm$=D(()=>{Q8();MH();E$();pm$();DX1=new K1;DX1.post("/webhook",o5({maxSize:IO6,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(!cm$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=dm$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await im$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as qO6}from"crypto";function kO6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return qO6(Buffer.from(Y),Buffer.from(Q))}var MO6=5242880,LX1;var tm$=D(()=>{Q8();MH();a3();LX1=new K1;LX1.post("/webhook",o5({maxSize:MO6,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(!kO6(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 Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Wt0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function om$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var rm$,VO6,SO6,sm$;var am$=D(()=>{Q8();S3();Sg();zy();rm$=new K1,VO6=["range","if-none-match","if-modified-since"],SO6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];rm$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(yu($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await _t(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&eG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return om$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of VO6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(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 Z$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of SO6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),om$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});sm$=rm$});var ya=_((_v)=>{var CO6=_v&&_v.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),_O6=_v&&_v.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))CO6(Z,$,X)};Object.defineProperty(_v,"__esModule",{value:!0});_O6(kY(),_v)});var Zi$=_((em$)=>{Object.defineProperty(em$,"__esModule",{value:!0});em$.version=void 0;em$.version="3.4.0"});var Yi$=_((bH)=>{var vO6=bH&&bH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(bH,"__esModule",{value:!0});bH.NodeTransport=bH.VERSION=void 0;bH.nodeResolveHost=hO6;var e6=ya(),fO6=A0("net"),wX1=A0("tls"),bO6=A0("path"),Xi$=A0("fs"),xO6=vO6(A0("dns")),yO6=Zi$();bH.VERSION=yO6.version;var gO6="nats.js";class Qi${socket;version;lang;yields=[];signal=(0,e6.deferred)();closedNotification=(0,e6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=gO6,this.version=bH.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 Y=await this.peekInfo();(0,e6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw e6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new e6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new e6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,e6.deferred)(),X,Q=(0,fO6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),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,e6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=e6.DataBuffer.concat(...this.yields),Y=(0,e6.extractProtocolMessage)(Q);if(Y!=="")try{let G=e6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}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,e6.deferred)();try{if($=(0,bO6.resolve)($),!(0,Xi$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Xi$.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:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;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 Y=await this.loadClientCerts()||{};X=(0,e6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new e6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,e6.deferred)();try{let Y=(0,wX1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new e6.errors.ConnectionError(Y.message,{cause:Y}))}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,e6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new e6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,e6.deferred)();try{let Q=(0,wX1.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),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 e6.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,e6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,e6.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 wX1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,e6.render)($)}`);let Z=(0,e6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,e6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,e6.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}}bH.NodeTransport=Qi$;function hO6($){let Z=(0,e6.deferred)();return xO6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Hi$=_((Ki$)=>{Object.defineProperty(Ki$,"__esModule",{value:!0});Ki$.connect=uO6;var Gi$=Yi$(),Ji$=ya(),Wi$=ya();function uO6($={}){if((0,Wi$.hasWsProtocol)($))return Promise.reject(Wi$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Ji$.setTransportFactory)({factory:()=>{return new Gi$.NodeTransport},dnsResolveFn:Gi$.nodeResolveHost}),Ji$.NatsConnectionImpl.connect($)}});var Fi$=_((QU)=>{var cO6=QU&&QU.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),dO6=QU&&QU.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))cO6(Z,$,X)};Object.defineProperty(QU,"__esModule",{value:!0});QU.connect=void 0;var mO6=Hi$();Object.defineProperty(QU,"connect",{enumerable:!0,get:function(){return mO6.connect}});dO6(ya(),QU)});function Oi$($){let Z=$?.connectFn??tO6,X=null,Q=null,Y=!1,G=!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 F(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:nO6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{O++;let L=G7(pO6,iO6,O-1,2,0.5);await w$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?Ni$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Bi$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function tO6($){return Ui$.connect($)}var Ni$,Ui$,Bi$,iO6=100,pO6=3000,nO6=3000;var Di$=D(()=>{W4();Ni$=V(xl(),1),Ui$=V(Fi$(),1),Bi$=V(DU(),1)});function EX1($,Z){return`${$}.${Z}`}class jX1{cache;constructor($){this.cache=Eu({ttlMs:$?.ttlMs??oO6,maxSize:$?.maxSize??rO6})}async get($,Z){return this.cache.get(EX1($,Z))??null}async set($,Z,X){this.cache.set(EX1($,Z),X)}async invalidate($,Z){this.cache.delete(EX1($,Z))}teardown(){this.cache.clear()}}var oO6=600000,rO6=5000;var Li$=()=>{};function mT0($,Z){return`${$}:${Z}`}function zX1($){let Z=Eu({ttlMs:$?.ttlMs??sO6,maxSize:$?.maxSize??aO6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(wi$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(mT0(K,H))},set(K,H,F){Z.set(mT0(K,H),F)},invalidate(K,H){Z.delete(mT0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(wi$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(mT0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var wi$="studio.ai-provider-keys.invalidate",sO6=30000,aO6=5000;var Ei$=()=>{};class PX1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;this.onCancel?.(G.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}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var ji$=($)=>{let Z;return()=>Z??=$()},AX1,TX1;var zi$=D(()=>{G6();AX1=ji$(()=>J$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),TX1=ji$(()=>J$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function GD6($=Ti$){return{name:$H,subjects:[`${_s0}.>`],storage:RW.StorageType.File,max_age:ZD6,max_bytes:QD6,max_msgs_per_subject:YD6,discard:RW.DiscardPolicy.Old,retention:RW.RetentionPolicy.Limits,duplicate_window:XD6,num_replicas:$}}class Ri${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 Pi$($){let Z=Ai$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function HD6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,$D6().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 FD6($,Z){return $.info?.cluster?Z:1}function ND6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class RX1{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=async(Q,Y)=>{let G=GD6(Y);try{await Q.streams.info($H),await Q.streams.update($H,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update($H,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete($H),await Q.streams.add(G);else throw J}},X=await h6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await RW.jetstreamManager($),Y=FD6($,Ti$);try{await Z(Q,Y)}catch(G){if(Y<=1||!ND6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:lg});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=HD6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=cO$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=fs0(H,{runId:Z}),U=performance.now()-F;AX1().record(U),TX1().add(1,{"org.id":Q??"unknown"}),KD6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Pi$(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),N++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),WD6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishSerialized($,Z){try{return await h6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Pi$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:lg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=fs0(Z,{runId:$,dedup:X});AX1().record(performance.now()-Y),TX1().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=lO$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}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 Y=X?.deliverPolicy==="new"?RW.DeliverPolicy.New:RW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=jD($),W;try{W=await h6(async()=>{return(await Q.consumers.get($H,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:lg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=Aw0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Ew0()).pipeThrough(jw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await F.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge($H,{filter:jD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var RW,Ai$,eO6=($)=>{let Z;return()=>Z??=$()},$D6,ZD6=86400000000000,XD6=120000000000,QD6=4294967296,Ti$,YD6=500000,JD6,WD6,KD6;var Ii$=D(()=>{W4();bs0();Tw0();zw0();G6();zi$();RW=V(DU(),1),Ai$=V(xl(),1),$D6=eO6(()=>J$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),Ti$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);JD6=process.env.STREAM_ENCODE_TRACE==="1",WD6=process.env.DECOPILOT_STREAM_TRACE==="1";KD6=JD6?new Ri$:null});function iT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,nW(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 qi$=D(()=>{_8()});class IX1{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}}async function Mi$($,Z,X){let Q=Z.organizationId;if(!ZY(Z,(await N9($,Q)).review))return!1;if(!tC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=IK(Y?.flags),J=await j5($,Q),W=await $.storage.taskBoard.update(Z.id,Q,BJ(J,G),Z.updatedBy);return await A6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),x$(Q,W),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var ki$=D(()=>{j6();BX();Mg();v5();iK();z5()});function ED6($){return $ instanceof $Q}function jD6($,Z){return Z-$>=LD6}class qX1{taskBoard;contextFactory;billing;db;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.db=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??UD6;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??OD6,X=this.options.itemIntervalMs??BD6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}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()-at0),ao0);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()-wD6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await oo0(this.taskBoard,Y,Q,await WN(this.db,Q)),await ro0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==Y8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await EN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),ED6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+DD6),(await WN(this.db,Y)).progress).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await WN(this.db,Z),Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!=="in_progress")return;let G=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy,Q);if(!G)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),x$(Z,G)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!jD6(dF(X,Z.reviewCycleStartedAt),Date.now()))return;await tK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;let Y=await WN(this.db,Z);if(!ZY(Q,Y.review))return!1;let G=Q.assigneeId===Y8,J=await this.taskBoard.listPrs($,Z),W=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!W)return!1;if(J.length===0){if(G)await this.handOffReviewWithoutPr(W,Q);return!1}let K=await Promise.all(J.map(async(H)=>({...H,...await Vg(Z,H)})));if(K.every((H)=>H.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await Mi$(W,Q,K))return!0;if(await vD$(W,Q))return!0;if(await this.resolveConflictFromSweep(W,Q,K))return!0;if(!G)return!1;if(!wr0(K))return!1;return await vL0(W,Q,{previewMatchesHead:Er0(K)}),!0}async resolveConflictFromSweep($,Z,X){let Q=X.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!Q)return!1;return await UD($,Z.organizationId,Z,{pr:{number:Q.number,url:Q.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var UD6=60000,BD6=300000,OD6=50,DD6=60000,LD6=900000,wD6=120000;var Vi$=D(()=>{v5();j6();Hr0();wN();et();iK();ki$();z5();YJ();eo0();JG();kt();kg()});import{readdir as zD6,rm as pT0}from"fs/promises";import{join as nT0}from"path";async function tT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-PD6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await vv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Si$($,Y,Z);else if(!Y.startsWith(".")){let G=nT0($,Y),J=await vv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Si$(G,K,Z)}if((await vv(G)).length===0)await pT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Si$($,Z,X){let Q=0,Y=nT0($,Z),G=await vv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=nT0(Y,W),H=await vv(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=nT0(K,N);await pT0(B,{recursive:!0,force:!0}),Q++}}if((await vv(K)).length===0)await pT0(K,{recursive:!0,force:!0})}if((await vv(Y)).length===0)await pT0(Y,{recursive:!0,force:!0});return Q}async function vv($){try{return(await zD6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var PD6=30;var MX1=()=>{};import{DBOS as kX1,SchedulerMode as AD6}from"@dbos-inc/dbos-sdk";async function RD6(){let $=[nJ(),fv(),gH()],Z=0;for(let X of $)try{Z+=await tT0(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 ID6($,Z){await kX1.runStep(()=>RD6(),{name:"monitoringRetention"})}function _i$(){if(Ci$)return;Ci$=!0;let $=kX1.registerWorkflow(ID6,{name:"monitoringRetentionWorkflow"});kX1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:TD6,mode:AD6.ExactlyOncePerIntervalWhenActive})}var TD6="23 4 * * *",Ci$=!1;var vi$=D(()=>{RY();MX1()});function fi$($){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 Y=await wJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await xt($.db,Z,Q.role);return Y.boundAuth=I91({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new JE(X,void 0,Y.boundAuth,Q.role,"self"),KD(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var bi$=D(()=>{pB();HD()});function qD6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function MD6(){return{services:qD6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function VD6(){for(let $ of kD6)$()}function xi$($){let Z=[...VX1.logs,$];VX1={...VX1,logs:Z.length>500?Z.slice(-500):Z},VD6()}function SX1(){return SD6}var VX1,kD6,SD6=!1;var CX1=D(()=>{VX1=MD6(),kD6=new Set});import{EventEmitter as CD6}from"events";var _X1;var yi$=D(()=>{CX1();_X1=new CD6;_X1.on("request",($)=>{xi$($)})});function gi$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.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 B=Ul(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>Ul(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${W5.tool}${B}${W5.dim}(${w})${W5.reset}`}else if(U.method)G=`${W5.dim}${Ul(U.method)}${W5.reset}`}}catch{}}let W=Ul(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${W5.mcp}${Ul(F.slice(0,12))}\u2026${W5.reset}`}else if(Y==="/mcp")W=`${W5.mcp}/mcp${W5.reset}`;else if(Y==="/mcp/registry")W=`${W5.mcp}/mcp/registry${W5.reset}`;let K=vD6(Q),H=J?"\u25C0":"\u2190";if(!SX1())console.log(`${W5.dim}${H}${W5.reset} ${K}${Q}${W5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=_D6(N),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!SX1())console.log(`${W5.dim}${O}${W5.reset} ${K}${Q}${W5.reset} ${W}${G?` ${G}`:""} ${U}${N}${W5.reset} ${W5.duration}${B}${W5.reset}`);_X1.emit("request",{method:Q,path:Ul(Y),status:N,duration:F,timestamp:new Date})}}}var W5,_D6=($)=>{if($>=500)return W5.serverError;if($>=400)return W5.clientError;if($>=300)return W5.redirect;return W5.ok},vD6=($)=>{return W5[$]||W5.reset},Ul=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var hi$=D(()=>{CX1();yi$();W5={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 di$}from"crypto";import{mkdir as fD6,readdir as bD6,rm as ui$,stat as mi$}from"fs/promises";import{join as fX1,relative as xD6}from"path";import{z as T$}from"zod";function pi$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return fX1(yD6,Z)}function ni$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function vX1($,Z){let X=pi$($),Q=ni$(Z);return fX1(X,Q)}function gD6($,Z,X,Q){let Y=C0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return di$("sha256",Y).update(G).digest("hex")}function ci$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=gD6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${ni$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function ti$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${di$("md5","etag").update(Q).digest("hex")}"`}async function oi$($,Z,X,Q,Y){try{let G=await bD6($,{withFileTypes:!0});for(let J of G){let W=fX1($,J.name),H=xD6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await oi$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await mi$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:ti$(W,F.mtime,F.size)})}catch{}}}}catch{}}function ri$($,Z){let Q=n($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:T$.object({prefix:T$.string().optional(),maxKeys:T$.number().optional().default(1000),continuationToken:T$.string().optional(),delimiter:T$.string().optional()}),outputSchema:T$.object({objects:T$.array(T$.object({key:T$.string(),size:T$.number(),lastModified:T$.string(),etag:T$.string()})),nextContinuationToken:T$.string().optional(),isTruncated:T$.boolean(),commonPrefixes:T$.array(T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=pi$(Q);await fD6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await oi$(F,F,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((w)=>w.key>H),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({contentType:T$.string().optional(),contentLength:T$.number(),lastModified:T$.string(),etag:T$.string(),metadata:T$.record(T$.string(),T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=vX1(Q,G.key),W=await mi$(J);return{contentType:BZ1(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:ti$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:T$.object({key:T$.string(),expiresIn:T$.number().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??li$;return{url:ci$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:T$.object({key:T$.string(),expiresIn:T$.number().optional(),contentType:T$.string().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??li$;return{url:ci$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({success:T$.boolean(),key:T$.string()}),handler:async(Y)=>{let G=Y,J=vX1(Q,G.key);try{return await ui$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:T$.object({keys:T$.array(T$.string()).max(1000)}),outputSchema:T$.object({deleted:T$.array(T$.string()),errors:T$.array(T$.object({key:T$.string(),message:T$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=vX1(Q,K);try{await ui$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function bX1($,Z,X){let Q=ri$(Z,X),Y=new ZK({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:U5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:T$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:T$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new HQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),MJ(Y,G,$,"mcp:dev-assets")}async function si$($,Z,X,Q){let G=ri$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.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 yD6="./data/assets",li$=3600,ii$,ai$;var ei$=D(()=>{E$();tg();Q8();Gm();L_();mX();mA0();ii$=new K1;ii$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return bX1($.req.raw,Z,Q)});ai$=ii$});var $p$={};J4($p$,{mountDevRoutes:()=>hD6});function hD6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return bX1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await si$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ai$);let X=new K1;X.use("*",AW({mountPath:"/api/dev-assets"})),X.route("/",dA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Zp$=D(()=>{Q8();YZ1();mA0();ei$()});import{sql as uD6}from"kysely";import{randomUUID as Xp$}from"crypto";import{z as lD6}from"zod";async function dD6($){let Z=new Date().toISOString(),X=Xp$(),Q=C8.SELF($.organizationId),Y="registry.publish_request.created",G={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(G),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:Xp$(),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 uD6`SELECT
2986
2986
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.313.1",
3
+ "version": "4.314.0",
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 B,b as L,j as r}from"./index-y9i5snzl.js";import{I as z}from"./input-CI6MitNe.js";import{L as F}from"./label-qfV3IsYG.js";import{S as A,a as R,b as O,c as V,d as D}from"./select-BUC0a0vt.js";import{T as J}from"./textarea-wSo5YRWq.js";import{g as M,x as $,k as q,z as G,K as H}from"./index-Ddsfwzp8.js";import{s as P}from"./primitives-Tk6l0Uuf.js";import{u as Q}from"./use-autosave-DFMp35s0.js";import"./Check-Bbk7jxV4.js";import"./ChevronDown-Cr-w8TC2.js";import"./ChevronUp-B-7lsR9o.js";import"./ArrowUp-Cd0yvDyw.js";import"./chat-context-DK6ny6PW.js";import"./use-panel-navigate-sqxmH0mY.js";import"./use-destination-route-Co9ZfN1_.js";import"./thread-route-CRRBMoag.js";import"./dialog-Cq7ie8s0.js";import"./Copy01-B5_ATplU.js";import"./Download01-Dz0ahGcG.js";import"./constants-dLUUoWH7.js";import"./session-runtime-C-KTDVeQ.js";import"./slugify-CEUa2lfQ.js";import"./hooks-EQvMsruE.js";import"./use-mcp-client-C7ep1V3S.js";import"./auth-CTnZez4T.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-ZxGP5hs1.js";import"./task-board-_dgI8d00.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-BUEH2bk9.js";import"./use-ai-providers-BkMbV3OZ.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-BNOTnySJ.js";import"./use-organization-settings-DYosbMqS.js";import"./automation-runs-D7BtHxNh.js";import"./agent-icon-CevooW0v.js";import"./AlertCircle-D3RIK2hn.js";import"./UserSquare-CBDjGCqD.js";import"./Tool01-D35Ubrdv.js";import"./ArrowLeft-CHX8vGpx.js";import"./Tool02-D_gBilpP.js";import"./XCircle-BXP7xpfS.js";import"./TrendUp01-CP6CTKN7.js";import"./ZapSquare-ODvhHonb.js";import"./ZoomOut-DrVtrRav.js";import"./Users03-nHX85N9d.js";import"./CheckCircle-Clgi1W4Y.js";import"./ChevronRight-BLdZNZ-o.js";import"./ChevronSelectorVertical-hU-VYP8q.js";import"./DotsVertical-C_s2p-Gs.js";import"./Stars02-BUZ56vmx.js";import"./CreditCard01-bNOWYMPy.js";import"./Settings02-7Ak48PGP.js";import"./Eye-DZg9K2oA.js";import"./FilterLines-9zScAHDA.js";import"./Share07-o2BH1cxl.js";import"./GitBranch01-CazorRAE.js";import"./Globe01-C9e01hU6.js";import"./Globe04-DYreHp6S.js";import"./SwitchHorizontal01-DIkGjqsK.js";import"./HardDrive-CCu4irUZ.js";import"./Image01-CkzF9_sg.js";import"./Key01-8qufyEGI.js";import"./LinkExternal01-BtMZmuTg.js";import"./LockUnlocked01-BHgRnQNp.js";import"./LogOut01-BYba1Z3S.js";import"./Monitor01-DiqZa5J9.js";import"./Sun-CZCwqrVR.js";import"./Package-k99ySgIA.js";import"./Palette-CAzZOPFB.js";import"./Play-20YRocvR.js";import"./Plus-BLw4OvJk.js";import"./SearchLg-vv8MdFMw.js";import"./SearchMd-afyAsGWZ.js";import"./Shield01-Bd8pnxCz.js";import"./Stars01-AblXSS9k.js";import"./Trash01-B-o3bbRx.js";import"./Upload01-QXuSfUk7.js";import"./User01-Df5q-VJm.js";import"./Users01-IV-DmfwG.js";import"./XClose-CXZQuKYq.js";import"./Zap-crDkhkV6.js";import"./useInfiniteQuery-BTMJ4YO-.js";import"./use-infinite-scroll-zdIWMeDL.js";import"./use-connection-CxZpHLLl.js";import"./table-Siq76s2x.js";import"./empty-state-D-kH9fR-.js";import"./use-members-BmJI1xt6.js";import"./use-org-auth-client-BbTbKKFy.js";import"./use-automations-CX_FYGxb.js";import"./useSuspenseInfiniteQuery-CxfAJyMW.js";import"./avatar-BJ4wouW2.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-CTSBwmsG.js";import"./markdown-BlzRsVvE.js";import"./monaco-editor-BxqHpz_Q.js";import"./spinner-CU56k1A_.js";import"./editor-mCyEhUkb.js";import"./types-1QcleqE_.js";import"./shell-layout-DZVAhk9X.js";import"./required-auth-layout-BZkPcJY_.js";import"./use-org-sso-4UlroElP.js";import"./integration-icon-CcBMTBpK.js";import"./use-navigate-to-agent-Bh5CBkgV.js";import"./chart-Ch9e2ojX.js";import"./index-CkS7vj8V.js";import"./AreaChart-DxnO8fq_.js";import"./form-BMOo8SJ1.js";import"./file-type-icon-CrKPypGX.js";import"./drawer-BZmqHj0J.js";import"./collection-search-Bxg-unih.js";import"./tabs-BrW6NxCk.js";import"./toggle-group-AU3SP1GH.js";import"./super-agent-icon-uXtj09T3.js";import"./self-tool-result-By3oM2v-.js";import"./alert-dialog-adbo3RVn.js";import"./extract-connection-data-BeVxWwV4.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-l-3H7szz.js";import"./authenticate-and-persist-oauth-ECQgmIaS.js";import"./mcp-oauth-DUdpc0vs.js";import"./track--akTHrJW.js";import"./popover-D3Q0Qph5.js";import"./toolbar-DRjigN-V.js";import"./github-repo-picker-BlnOD4OJ.js";import"./use-mcp-tools-Bk5zpMSR.js";import"./agent-capabilities-B52k7xCe.js";import"./connection-card-CTODige-.js";import"./use-registry-connections-XnT-ZT0A.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./connection-form-helpers-BtpTdUn9.js";import"./collection-tabs-CqBzIlXt.js";import"./badge-BbA6vutU.js";import"./select-model-ftoMMlqt.js";import"./checkbox-BkpAedRP.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-CDZBJFOG.js";import"./dropdown-menu-BlHMaz8D.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-C-z4N8qe.js";import"./skill-preview-CrbPHZgI.js";import"./use-file-configs-uFWfwrQx.js";import"./pt-BR-CLy76QW2.js";import"./use-debounced-autosave-DtGYVW_S.js";import"./scroll-area-lzUF2OIj.js";import"./search-input-CIp9H8IA.js";import"./use-mcp-auth-status-Dq6bWHkf.js";import"./switch-D7BjdrCd.js";import"./use-secrets-CKDMV07O.js";import"./config-BbHzkOKI.js";import"./command-DofJOsv1.js";import"./index-DQng3b9j.js";import"./get-initials-D-f_fDFw.js";import"./breadcrumb-Dl9kZBkM.js";import"./use-tags-DYn1pKIf.js";import"./automation-list-row-4OkqZmVa.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-DaTTKddy.js";import"./cards-zlO104Qf.js";const U={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"}]},W={authors:"sandbox.recordEditor.titleAuthor"};function Zr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=M(h);let g;t[4]!==f||t[5]!==a?(g=$(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:G(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=Q(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=W[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=U[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==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(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(A,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(R,{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(D,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(J,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(z,{id:o.key,value:P(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[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==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[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Zr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BSi5WWZp.js","assets/index-y9i5snzl.js","assets/index-DZ3ZDC5F.css","assets/Tool02-D_gBilpP.js","assets/CheckCircle-Clgi1W4Y.js","assets/Settings02-7Ak48PGP.js","assets/use-mcp-client-C7ep1V3S.js","assets/constants-dLUUoWH7.js","assets/auth-CTnZez4T.js","assets/useInfiniteQuery-BTMJ4YO-.js","assets/use-infinite-scroll-zdIWMeDL.js","assets/badge-BbA6vutU.js","assets/input-CI6MitNe.js","assets/dropdown-menu-BlHMaz8D.js","assets/Check-Bbk7jxV4.js","assets/ChevronRight-BLdZNZ-o.js","assets/DotsVertical-C_s2p-Gs.js","assets/table-Siq76s2x.js","assets/toggle-group-AU3SP1GH.js","assets/use-view-mode-0U4Cd5xW.js","assets/FilterLines-9zScAHDA.js","assets/Globe01-C9e01hU6.js","assets/SearchMd-afyAsGWZ.js","assets/dialog-Cq7ie8s0.js","assets/AlertCircle-D3RIK2hn.js","assets/Download01-Dz0ahGcG.js","assets/Upload01-QXuSfUk7.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-adbo3RVn.js","assets/Trash01-B-o3bbRx.js","assets/label-qfV3IsYG.js","assets/select-BUC0a0vt.js","assets/ChevronDown-Cr-w8TC2.js","assets/ChevronUp-B-7lsR9o.js","assets/switch-D7BjdrCd.js","assets/textarea-wSo5YRWq.js","assets/ArrowLeft-CHX8vGpx.js","assets/XCircle-BXP7xpfS.js","assets/checkbox-BkpAedRP.js","assets/Eye-DZg9K2oA.js","assets/LinkExternal01-BtMZmuTg.js","assets/use-copy-CTSBwmsG.js","assets/Copy01-B5_ATplU.js","assets/Key01-8qufyEGI.js","assets/Plus-BLw4OvJk.js","assets/mcp-oauth-DUdpc0vs.js","assets/Play-20YRocvR.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,k as a,bq as o}from"./index-y9i5snzl.js";import{R as n}from"./require-capability-Cy7aIj43.js";import"./access-gate-jqvaSJ2l.js";import"./capability-load-error-B13KZPG8.js";const c=s.lazy(()=>o(()=>import("./registry-layout-BSi5WWZp.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])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(n,{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(c,{})})}),r[0]=t):t=r[0],t}export{u as default};
@@ -1 +0,0 @@
1
- import{b as Y,H as U,p as se,r as A,j as s,B as L,P as F,Y as te,D as ie,t as S,c as X,K as Q,b8 as le}from"./index-y9i5snzl.js";import{i as re}from"./DotsVertical-C_s2p-Gs.js";import{i as ne}from"./GitBranch01-CazorRAE.js";import{a as oe}from"./Package-k99ySgIA.js";import{s as ae}from"./Trash01-B-o3bbRx.js";import{i as ce}from"./Upload01-QXuSfUk7.js";import{i as J}from"./Zap-crDkhkV6.js";import{S as me}from"./search-input-CIp9H8IA.js";import{c as de,D as ue,b as pe,a as ge}from"./dropdown-menu-BlHMaz8D.js";import{A as fe,a as he,b as xe,c as je,d as ke,e as ve,f as ye,g as Se}from"./alert-dialog-adbo3RVn.js";import{E as G}from"./empty-state-D-kH9fR-.js";import{C as be}from"./collection-tabs-CqBzIlXt.js";import{q as we,u as De,r as Ce,F as Ne}from"./folder-icon-CDZBJFOG.js";import{d as Pe}from"./location-oTTXFrSF.js";import{S as Ae}from"./skill-preview-CrbPHZgI.js";import"./SearchMd-afyAsGWZ.js";import"./Check-Bbk7jxV4.js";import"./ChevronRight-BLdZNZ-o.js";import"./badge-BbA6vutU.js";import"./Eye-DZg9K2oA.js";import"./dialog-Cq7ie8s0.js";import"./markdown-BlzRsVvE.js";import"./Copy01-B5_ATplU.js";import"./Download01-Dz0ahGcG.js";import"./ZoomOut-DrVtrRav.js";import"./use-panel-navigate-sqxmH0mY.js";import"./use-destination-route-Co9ZfN1_.js";import"./Image01-CkzF9_sg.js";import"./editor-mCyEhUkb.js";import"./file-type-icon-CrKPypGX.js";const H=200,Ee=new Set(["node_modules","__pycache__"]);function B(t){const[,...e]=t.webkitRelativePath.split("/");return e.length>0?e.join("/"):t.name}function Te(t){return B(t).split("/").every(e=>!e.startsWith(".")&&!Ee.has(e))}function ze(t){return t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"skill"}function Me(t,e){const l=new Map;for(const r of t){const o=B(r).split("/");o.pop();const n=["skills",e,...o].join("/");l.set(n,[...l.get(n)??[],r])}return l}async function Fe(t,e){const r=(await Promise.allSettled([...t].map(([o,n])=>e({dir:o,files:n})))).find(o=>o.status==="rejected");if(r)throw r.reason}const I="*";function O(t){return t.volume==="home"}function V(t,e){const l=t.indexOf(":");return l===-1?{label:e,glyph:J}:{label:t.slice(l+1),glyph:t.startsWith("repo:")?ne:oe}}function Ie(t){const e=X.c(39),{entry:l,onOpen:r,onDelete:o}=t,n=Y(),{org:v}=U();let a;e[0]!==l.source||e[1]!==v.name?(a=V(l.source,v.name),e[0]=l.source,e[1]=v.name,e[2]=a):a=e[2];const{label:D,glyph:C}=a;let N;e[3]!==l?(N=O(l),e[3]=l,e[4]=N):N=e[4];const E=N;let h;e[5]!==l.name||e[6]!==r?(h=s.jsx("button",{type:"button",onClick:r,className:"absolute inset-0 z-0","aria-label":l.name}),e[5]=l.name,e[6]=r,e[7]=h):h=e[7];const b=E?"default":"system",P=!E;let c;e[8]!==C||e[9]!==b||e[10]!==P?(c=s.jsx(Ne,{glyph:C,tone:b,readOnly:P,className:"size-8 shrink-0"}),e[8]=C,e[9]=b,e[10]=P,e[11]=c):c=e[11];let u;e[12]!==o||e[13]!==n?(u=o&&s.jsx("div",{className:"relative z-10 pointer-events-auto transition-opacity sm:opacity-0 sm:group-hover:opacity-100",children:s.jsxs(de,{children:[s.jsx(ue,{asChild:!0,children:s.jsx(L,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",children:s.jsx(re,{size:16})})}),s.jsx(pe,{align:"end",children:s.jsxs(ge,{variant:"destructive",onClick:R=>{R.stopPropagation(),o()},children:[s.jsx(ae,{size:16}),n("settings.skills.deleteButton")]})})]})}),e[12]=o,e[13]=n,e[14]=u):u=e[14];let p;e[15]!==c||e[16]!==u?(p=s.jsxs("div",{className:"flex items-start justify-between",children:[c,u]}),e[15]=c,e[16]=u,e[17]=p):p=e[17];let y;e[18]!==l.name?(y=s.jsx("h3",{className:"text-sm font-medium text-foreground truncate",children:l.name}),e[18]=l.name,e[19]=y):y=e[19];let x;e[20]!==l.description||e[21]!==n?(x=l.description||n("settings.skills.noDescription"),e[20]=l.description,e[21]=n,e[22]=x):x=e[22];let m;e[23]!==x?(m=s.jsx("p",{className:"text-sm text-muted-foreground line-clamp-2",children:x}),e[23]=x,e[24]=m):m=e[24];let j;e[25]!==m||e[26]!==y?(j=s.jsxs("div",{className:"flex flex-col gap-1",children:[y,m]}),e[25]=m,e[26]=y,e[27]=j):j=e[27];let g;e[28]!==j||e[29]!==p?(g=s.jsxs("div",{className:"flex flex-col gap-3 p-4.5",children:[p,j]}),e[28]=j,e[29]=p,e[30]=g):g=e[30];let k;e[31]!==D?(k=s.jsx("div",{className:"border-t border-border mt-auto",children:s.jsx("div",{className:"h-10 flex items-center px-4.5",children:s.jsx("p",{className:"text-xs text-muted-foreground truncate",children:D})})}),e[31]=D,e[32]=k):k=e[32];let f;e[33]!==g||e[34]!==k?(f=s.jsxs("div",{className:"flex flex-col flex-1 pointer-events-none",children:[g,k]}),e[33]=g,e[34]=k,e[35]=f):f=e[35];let w;return e[36]!==f||e[37]!==h?(w=s.jsxs(le,{className:"relative transition-colors group overflow-hidden flex flex-col h-full hover:bg-muted/50",children:[h,f]}),e[36]=f,e[37]=h,e[38]=w):w=e[38],w}function W(t){const e=X.c(2),{children:l}=t;let r;return e[0]!==l?(r=s.jsx("div",{className:"grid grid-cols-1 @lg:grid-cols-2 @4xl:grid-cols-3 @6xl:grid-cols-4 gap-4",children:l}),e[0]=l,e[1]=r):r=e[1],r}function us(){const t=Y(),{org:e}=U(),l=we(),{remove:r,upload:o}=De("home"),n=se(),v=A.useRef(null),[a,D]=A.useState(""),[C,N]=A.useState(I),[E,h]=A.useState(!1),[b,P]=A.useState(null),[c,u]=A.useState(null),p=()=>{n.invalidateQueries({queryKey:Q.slashSkills(e.id)}),n.invalidateQueries({queryKey:Q.orgFsSkills(e.id)})};async function y(i){const d=[...i??[]];if(v.current&&(v.current.value=""),d.length===0)return;const $=d[0]?.webkitRelativePath??"";if(!$){S.error(t("settings.skills.importNeedsFolder"));return}const ee=$.split("/")[0]??"",T=d.filter(Te);if(!T.some(M=>B(M)==="SKILL.md")){S.error(t("settings.skills.importMissingSkillMd"));return}if(T.length>H){S.error(t("settings.skills.importTooManyFiles",{count:String(T.length),max:String(H)}));return}const z=ze(ee),K=`skills/${z}`;let q=!1;h(!0);try{if(await Ce(e.slug,"home",K)){S.error(t("settings.skills.importSlugTaken",{slug:z}));return}q=!0,await Fe(Me(T,z),o.mutateAsync),p(),S.success(t("settings.skills.importSuccess",{name:z}))}catch(M){q&&await r.mutateAsync(K).catch(()=>{}),p(),S.error(M instanceof Error?M.message:t("settings.skills.importError"))}finally{h(!1)}}const x=a.toLowerCase(),m=(l.data??[]).filter(i=>i.name.toLowerCase().includes(x)||(i.description??"").toLowerCase().includes(x)).sort((i,d)=>Number(O(d))-Number(O(i))||i.name.localeCompare(d.name)),j=new Set((l.data??[]).map(i=>i.source)),g=new Map;for(const i of m)g.set(i.source,(g.get(i.source)??0)+1);const k=[{id:I,label:t("settings.skills.filterAll"),count:m.length},...[...j].map(i=>({id:i,label:V(i,e.name).label,count:g.get(i)??0}))],f=j.has(C)?C:I,w=f===I?m:m.filter(i=>i.source===f),R=i=>P(Pe(i.volume,i.path)),Z=async()=>{if(!c)return;const{path:i}=c;u(null);try{await r.mutateAsync(i),p(),S.success(t("settings.skills.deleteSuccess"))}catch(d){S.error(d instanceof Error?d.message:t("settings.skills.deleteError"))}},_=s.jsxs(L,{size:"sm",disabled:E,onClick:()=>v.current?.click(),children:[s.jsx(ce,{size:14}),t(E?"settings.skills.importing":"settings.skills.importButton")]});return s.jsxs(F,{children:[s.jsx(F.Content,{children:s.jsx(F.Body,{children:s.jsxs("div",{className:"flex flex-col gap-6",children:[s.jsx(F.Title,{children:t("settings.skills.pageTitle")}),s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsx(me,{value:a,onChange:D,placeholder:t("settings.skills.searchPlaceholder"),className:"w-full md:w-[375px]",onKeyDown:i=>{i.key==="Escape"&&(D(""),i.target.blur())}}),_,s.jsx("input",{ref:v,type:"file",multiple:!0,webkitdirectory:"",className:"hidden",onChange:i=>{y(i.target.files)}})]}),k.length>2&&s.jsx(be,{tabs:k,activeTab:f,onTabChange:N}),l.isPending?s.jsx("div",{className:"@container",children:s.jsx(W,{children:Array.from({length:8},(i,d)=>s.jsx(te,{className:"h-[168px] rounded-xl"},d))})}):l.isError?s.jsx("div",{className:"flex items-center justify-center py-20",children:s.jsx(G,{image:s.jsx(ie,{size:48,className:"text-muted-foreground"}),title:t("settings.skills.errorTitle"),description:l.error instanceof Error?l.error.message:t("settings.skills.errorDescription"),actions:s.jsx(L,{size:"sm",variant:"outline",onClick:()=>{l.refetch()},children:t("settings.skills.retry")})})}):w.length===0?s.jsx("div",{className:"flex items-center justify-center py-20",children:s.jsx(G,{image:s.jsx(J,{size:48,className:"text-muted-foreground"}),title:t(a?"settings.skills.noResultsTitle":"settings.skills.emptyTitle"),description:a?t("settings.skills.noResultsDescription",{search:a}):t("settings.skills.emptyDescription"),actions:!a&&_})}):s.jsx("div",{className:"@container",children:s.jsx(W,{children:w.map(i=>s.jsx(Ie,{entry:i,onOpen:()=>R(i),onDelete:O(i)?()=>u(i):void 0},i.id))})})]})})}),b&&s.jsx(Ae,{skillPath:b,onClose:()=>P(null)},b),s.jsx(fe,{open:c!==null,onOpenChange:i=>!i&&u(null),children:s.jsxs(he,{children:[s.jsxs(xe,{children:[s.jsx(je,{children:t("settings.skills.deleteDialogTitle")}),s.jsx(ke,{children:t("settings.skills.deleteDialogDescription",{name:c?.name??""})})]}),s.jsxs(ve,{children:[s.jsx(ye,{children:t("settings.skills.cancel")}),s.jsx(Se,{onClick:Z,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:t("settings.skills.deleteButton")})]})]})})]})}export{us as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BSi5WWZp.js","assets/index-y9i5snzl.js","assets/index-DZ3ZDC5F.css","assets/Tool02-D_gBilpP.js","assets/CheckCircle-Clgi1W4Y.js","assets/Settings02-7Ak48PGP.js","assets/use-mcp-client-C7ep1V3S.js","assets/constants-dLUUoWH7.js","assets/auth-CTnZez4T.js","assets/useInfiniteQuery-BTMJ4YO-.js","assets/use-infinite-scroll-zdIWMeDL.js","assets/badge-BbA6vutU.js","assets/input-CI6MitNe.js","assets/dropdown-menu-BlHMaz8D.js","assets/Check-Bbk7jxV4.js","assets/ChevronRight-BLdZNZ-o.js","assets/DotsVertical-C_s2p-Gs.js","assets/table-Siq76s2x.js","assets/toggle-group-AU3SP1GH.js","assets/use-view-mode-0U4Cd5xW.js","assets/FilterLines-9zScAHDA.js","assets/Globe01-C9e01hU6.js","assets/SearchMd-afyAsGWZ.js","assets/dialog-Cq7ie8s0.js","assets/AlertCircle-D3RIK2hn.js","assets/Download01-Dz0ahGcG.js","assets/Upload01-QXuSfUk7.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-adbo3RVn.js","assets/Trash01-B-o3bbRx.js","assets/label-qfV3IsYG.js","assets/select-BUC0a0vt.js","assets/ChevronDown-Cr-w8TC2.js","assets/ChevronUp-B-7lsR9o.js","assets/switch-D7BjdrCd.js","assets/textarea-wSo5YRWq.js","assets/ArrowLeft-CHX8vGpx.js","assets/XCircle-BXP7xpfS.js","assets/checkbox-BkpAedRP.js","assets/Eye-DZg9K2oA.js","assets/LinkExternal01-BtMZmuTg.js","assets/use-copy-CTSBwmsG.js","assets/Copy01-B5_ATplU.js","assets/Key01-8qufyEGI.js","assets/Plus-BLw4OvJk.js","assets/mcp-oauth-DUdpc0vs.js","assets/Play-20YRocvR.js"])))=>i.map(i=>d[i]);
2
- import{c as n,d as c,f as m,j as t,k as f,r as l,bq as p}from"./index-y9i5snzl.js";import{R as u}from"./require-capability-Cy7aIj43.js";import"./access-gate-jqvaSJ2l.js";import"./capability-load-error-B13KZPG8.js";const g=l.lazy(()=>p(()=>import("./registry-layout-BSi5WWZp.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])));function h(){const e=n.c(5),i=c();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=m(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{h as default};
@@ -1 +0,0 @@
1
- import{I as u}from"./use-infinite-scroll-zdIWMeDL.js";import{fg as i}from"./index-y9i5snzl.js";function t(e,r){return i(e,u,r)}export{t as u};
@@ -1 +0,0 @@
1
- import{I as s}from"./use-infinite-scroll-zdIWMeDL.js";import{fg as u,b$ as n}from"./index-y9i5snzl.js";function a(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{a as u};