decocms 4.231.0 → 4.231.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/dist/client/assets/{AlertCircle-CDo5j2NW.js → AlertCircle-Cri3jLOJ.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CcrFN9k7.js → AreaChart-D4SNZnTQ.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BEQmxCRK.js → ArrowLeft-BlsL8fUg.js} +1 -1
  4. package/dist/client/assets/{ArrowUp--6Ekz1d6.js → ArrowUp-6Hu6AyW0.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-BG4qOGX3.js → ArrowUpRight-B4wqqnQI.js} +1 -1
  6. package/dist/client/assets/{Check-CN5lQ_yK.js → Check-Bw-QHSer.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-Cfat462Z.js → CheckCircle-DVwf6dg8.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-DBEiDm9h.js → ChevronDown-CaFfhaLH.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-DrRosISv.js → ChevronRight-Cki2VLbL.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-CEL6_M9V.js → ChevronUp-BumWdehu.js} +1 -1
  11. package/dist/client/assets/{Copy01-DkwSwDwt.js → Copy01-aJD7rDwR.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-DefrIYSa.js → CpuChip01-CO3TDIth.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-CYW1Bbl1.js → CreditCard01-BV23SLjg.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-QpPdzm3G.js → DotsVertical-BoLu1TLo.js} +1 -1
  15. package/dist/client/assets/{Eye-CMpTUzT8.js → Eye-DC-Af9pW.js} +1 -1
  16. package/dist/client/assets/{FilterLines-td0JntiE.js → FilterLines-COOOchE-.js} +1 -1
  17. package/dist/client/assets/{Globe01-CG3rDzdn.js → Globe01-CKQpJlVS.js} +1 -1
  18. package/dist/client/assets/{Globe04-DUVAaifa.js → Globe04--vmbFgj-.js} +1 -1
  19. package/dist/client/assets/{HardDrive-B6zE1xaj.js → HardDrive-hy70avgZ.js} +1 -1
  20. package/dist/client/assets/{Key01-kOqfjpjX.js → Key01-D7ogWjNU.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-B8nFfzMd.js → LayoutLeft-CT9T3iWG.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-CfHHIM1i.js → LinkExternal01-BvZXldDa.js} +1 -1
  23. package/dist/client/assets/{LogOut01-C5em-pvs.js → LogOut01-2vhajlqp.js} +1 -1
  24. package/dist/client/assets/{Monitor01-6s7X62Pn.js → Monitor01-DBvo7-KL.js} +1 -1
  25. package/dist/client/assets/{Palette-CaC_GR6s.js → Palette-DmJw6Opi.js} +1 -1
  26. package/dist/client/assets/{Play-Cf5Y2W6n.js → Play-CjM0R3Wz.js} +1 -1
  27. package/dist/client/assets/{Plus-DzzwGJmK.js → Plus-CUZB9mcD.js} +1 -1
  28. package/dist/client/assets/{SearchLg-BOqytEiL.js → SearchLg-rEZh7wQt.js} +1 -1
  29. package/dist/client/assets/{SearchMd-BXzSPJ91.js → SearchMd-DfG3W3UI.js} +1 -1
  30. package/dist/client/assets/{Settings02-DALwtk4N.js → Settings02-BQoeF9Jl.js} +1 -1
  31. package/dist/client/assets/{Share07-BSWRoTXC.js → Share07-BpwYuPp2.js} +1 -1
  32. package/dist/client/assets/{Shield01-Ba97qYoB.js → Shield01-QWijB05w.js} +1 -1
  33. package/dist/client/assets/{Star01-2LtGpxEd.js → Star01-DjlkqOVH.js} +1 -1
  34. package/dist/client/assets/{Stars01-CrpTFlIr.js → Stars01-CLg8nn4G.js} +1 -1
  35. package/dist/client/assets/{Stars02-Bha198-A.js → Stars02-C77RzfDy.js} +1 -1
  36. package/dist/client/assets/{Sun-TaLnM5LK.js → Sun-873aI7aF.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-Jegjhv4n.js → SwitchHorizontal01-CmPBxvUY.js} +1 -1
  38. package/dist/client/assets/{Tool01-BuycrV9c.js → Tool01-DwKmX0zN.js} +1 -1
  39. package/dist/client/assets/{Tool02-D7H0aPJj.js → Tool02-G15zSu68.js} +1 -1
  40. package/dist/client/assets/{Trash01-CQAX9TaW.js → Trash01-Cs-LVTAJ.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-DyFHW2GP.js → TrendUp01-Cv4PU1wy.js} +1 -1
  42. package/dist/client/assets/{Upload01-BeVTOUDK.js → Upload01-gjJ2MJV0.js} +1 -1
  43. package/dist/client/assets/{User01-BTqWqYky.js → User01-BR48N1vI.js} +1 -1
  44. package/dist/client/assets/{Users01-CArGt19n.js → Users01-CVd9s1Z7.js} +1 -1
  45. package/dist/client/assets/{Users03-8MeJ_48c.js → Users03-CwfIIMOD.js} +1 -1
  46. package/dist/client/assets/{X-C53dMiOT.js → X-Iz4OZmDk.js} +1 -1
  47. package/dist/client/assets/{XCircle-CdqNoxj5.js → XCircle-CKY2Q7Mi.js} +1 -1
  48. package/dist/client/assets/{XClose-mFLIAUIc.js → XClose-B_85AI8c.js} +1 -1
  49. package/dist/client/assets/{YAxis-BVjpxIga.js → YAxis-CZrviKLH.js} +1 -1
  50. package/dist/client/assets/{Zap-tGvNHJ59.js → Zap-B49Q_nFH.js} +1 -1
  51. package/dist/client/assets/{ZapSquare-CxrX0LdA.js → ZapSquare-DpfAjUL2.js} +1 -1
  52. package/dist/client/assets/{access-gate-NmBYD48o.js → access-gate-Bv10Duyf.js} +1 -1
  53. package/dist/client/assets/{agent-icon-DDwaDnrF.js → agent-icon--eti87x8.js} +1 -1
  54. package/dist/client/assets/{agents-list-BxK3yRMT.js → agents-list-BYOXfW7C.js} +1 -1
  55. package/dist/client/assets/{ai-providers-BIZVZCvv.js → ai-providers-D0Ry31cq.js} +1 -1
  56. package/dist/client/assets/{alert-C2mQCGgY.js → alert-GQ-Tlwa5.js} +1 -1
  57. package/dist/client/assets/{alert-dialog-D9vsRQQl.js → alert-dialog-DBmXYfQr.js} +1 -1
  58. package/dist/client/assets/{api-keys-RalUxgFb.js → api-keys-dxlJYg-M.js} +1 -1
  59. package/dist/client/assets/{app-editor-CqB0p97J.js → app-editor-Nk2yvjXJ.js} +1 -1
  60. package/dist/client/assets/{auth-o9X3g3Nz.js → auth-CFCKcxvX.js} +1 -1
  61. package/dist/client/assets/{auth-catchall-CEDEJSS8.js → auth-catchall-BVYwWnUe.js} +1 -1
  62. package/dist/client/assets/{auth-entry-fZXxdt4z.js → auth-entry-BT80-05p.js} +1 -1
  63. package/dist/client/assets/{auth-split-layout-DEP6JWkc.js → auth-split-layout-B2J8sp6D.js} +1 -1
  64. package/dist/client/assets/{authenticate-and-persist-oauth-B6kEBd4e.js → authenticate-and-persist-oauth-DAXv5z9e.js} +1 -1
  65. package/dist/client/assets/{automation-list-row-CAN34Bz_.js → automation-list-row-DCrj_qm_.js} +1 -1
  66. package/dist/client/assets/{automation-runs-kkbkf_AT.js → automation-runs-ByJ5Ra9r.js} +1 -1
  67. package/dist/client/assets/{automations-D8OvcPhO.js → automations-C3vyagUq.js} +1 -1
  68. package/dist/client/assets/{avatar-DE6bT5RQ.js → avatar-DYpA4mYW.js} +1 -1
  69. package/dist/client/assets/{badge-B8rrO3dx.js → badge-D12cLAhQ.js} +1 -1
  70. package/dist/client/assets/{billing-4cj_Xve9.js → billing-H87Lk9ox.js} +1 -1
  71. package/dist/client/assets/{block-document-BRSOI1aV.js → block-document-GFGJuiCw.js} +1 -1
  72. package/dist/client/assets/{brand-context-DAJkU06K.js → brand-context-Dn37CJEY.js} +1 -1
  73. package/dist/client/assets/{buckets-BQmteITs.js → buckets-7Is7XCDd.js} +1 -1
  74. package/dist/client/assets/{bulk-category-panel-CTXAkFez.js → bulk-category-panel-hposlk1U.js} +1 -1
  75. package/dist/client/assets/{capability-load-error-CpH6_Tj-.js → capability-load-error-Vv2HOnaT.js} +1 -1
  76. package/dist/client/assets/{card-BEnG-PZv.js → card-BuPlL_oq.js} +1 -1
  77. package/dist/client/assets/{cards-kz4en0kj.js → cards-Dav0WMyT.js} +1 -1
  78. package/dist/client/assets/{category-editor-BN9xdKts.js → category-editor-CoCkeiQq.js} +1 -1
  79. package/dist/client/assets/{chart-XhrXCvPH.js → chart-DOFKvxsA.js} +1 -1
  80. package/dist/client/assets/{chat-context-DT0RnHMC.js → chat-context-Dq2JBypA.js} +1 -1
  81. package/dist/client/assets/{checkbox-B_ZRfUEI.js → checkbox-DdrHeOK4.js} +1 -1
  82. package/dist/client/assets/{cli-auth-success-CVH46cDT.js → cli-auth-success-D2zocgCH.js} +1 -1
  83. package/dist/client/assets/{collection-detail-hbfQNEKy.js → collection-detail-1pXvp0Io.js} +1 -1
  84. package/dist/client/assets/{collection-display-button-Bvk2UzvP.js → collection-display-button-DCK3Y6qv.js} +1 -1
  85. package/dist/client/assets/{collection-search-1WgXsLZV.js → collection-search-DZSk8umg.js} +1 -1
  86. package/dist/client/assets/{collection-table-wrapper-BMeV0kto.js → collection-table-wrapper-aM4cFPtq.js} +1 -1
  87. package/dist/client/assets/{collection-tabs-D7jMnaq7.js → collection-tabs-Dy1SnDsU.js} +1 -1
  88. package/dist/client/assets/{command-DdfVlw2c.js → command-Bq0FLKJ6.js} +1 -1
  89. package/dist/client/assets/{commerce-onboarding-CHAZLWDE.js → commerce-onboarding-CY_4i3Xn.js} +1 -1
  90. package/dist/client/assets/{connect-Dlw2zcKt.js → connect-DwY8eMHd.js} +1 -1
  91. package/dist/client/assets/{connection-B7Zov81h.js → connection-B-Dm0U5O.js} +1 -1
  92. package/dist/client/assets/{connection-card-BhNlJyO-.js → connection-card-D8SOQt_p.js} +1 -1
  93. package/dist/client/assets/{connection-detail-B9loy8n1.js → connection-detail-DI4qep99.js} +1 -1
  94. package/dist/client/assets/{connection-form-helpers-Cvrwqzmj.js → connection-form-helpers-B3zMToMD.js} +1 -1
  95. package/dist/client/assets/{connections-DBelKGzh.js → connections-3Xt5xQHs.js} +1 -1
  96. package/dist/client/assets/{decopilot-sse-pool-Cro6DfCu.js → decopilot-sse-pool-BdaWy5L1.js} +1 -1
  97. package/dist/client/assets/{dialog-CKMBT4Ku.js → dialog-CUQy6J37.js} +1 -1
  98. package/dist/client/assets/{domain-settings-CAofvGN7.js → domain-settings-CrxS8tcL.js} +1 -1
  99. package/dist/client/assets/{drawer-C5SLuRyj.js → drawer-Cs3ENVOS.js} +1 -1
  100. package/dist/client/assets/{dropdown-menu-BN18O6KB.js → dropdown-menu-ZHKmwS_-.js} +1 -1
  101. package/dist/client/assets/{empty-state-DsP0e5vG.js → empty-state-DsyyaU96.js} +1 -1
  102. package/dist/client/assets/{extract-connection-data-CNsoq4og.js → extract-connection-data-DojGoIV7.js} +1 -1
  103. package/dist/client/assets/{file-explorer-COPLW-ot.js → file-explorer-BjtWM6NP.js} +1 -1
  104. package/dist/client/assets/{file-type-icon-DD_KZi1X.js → file-type-icon-BoYMpdLh.js} +1 -1
  105. package/dist/client/assets/{form-DONSzM82.js → form-FUUjPHRn.js} +1 -1
  106. package/dist/client/assets/{general-B6TvIztU.js → general-DDgyWUsa.js} +1 -1
  107. package/dist/client/assets/{github-repo-picker-CIYsmBJa.js → github-repo-picker-Be53gX61.js} +1 -1
  108. package/dist/client/assets/{hooks-CJM7m-AW.js → hooks-DneZtt0k.js} +1 -1
  109. package/dist/client/assets/{index-BwQyER5X.js → index-B6ZJwoT0.js} +1 -1
  110. package/dist/client/assets/{index-BtE9xOJO.js → index-C76lQQuj.js} +3 -3
  111. package/dist/client/assets/{index-CBbRNVYo.js → index-CJ6hzfRa.js} +1 -1
  112. package/dist/client/assets/{index-BxLWVBpr.js → index-D2MFq9Db.js} +19 -19
  113. package/dist/client/assets/{index-AHKSNViJ.js → index-DAeIqq28.js} +1 -1
  114. package/dist/client/assets/{index-CHqHegLV.js → index-DEI3aWbv.js} +1 -1
  115. package/dist/client/assets/{index-DtGNe15Y.js → index-DGc5K2jd.js} +1 -1
  116. package/dist/client/assets/{index-_EOTT3i-.js → index-DM-u_Fcg.js} +1 -1
  117. package/dist/client/assets/{index-C0PFdkNr.js → index-DQT1q4yT.js} +1 -1
  118. package/dist/client/assets/{index-DXe3gd19.js → index-DYQNJ5Mc.js} +1 -1
  119. package/dist/client/assets/{index-redirect-AgdSvHfx.js → index-redirect-DBe2qocv.js} +1 -1
  120. package/dist/client/assets/{infra-billing-D8LqLB3t.js → infra-billing-DXE2ylap.js} +1 -1
  121. package/dist/client/assets/{input-OTxGjzdJ.js → input-CFHA8vW0.js} +1 -1
  122. package/dist/client/assets/{integration-icon-C96gN1iP.js → integration-icon-BmTjpI5x.js} +1 -1
  123. package/dist/client/assets/{invite-member-dialog-Db-0RxSw.js → invite-member-dialog-BUcqHX8e.js} +1 -1
  124. package/dist/client/assets/{label-9ox5ChzN.js → label-MVoNgjuK.js} +1 -1
  125. package/dist/client/assets/{layout-B3Gf5vkI.js → layout-PUL0ymBL.js} +1 -1
  126. package/dist/client/assets/{login-DwimHKQO.js → login-DttOrOiz.js} +1 -1
  127. package/dist/client/assets/{mcp-oauth-DZD2Ygio.js → mcp-oauth-BqkfrmX5.js} +1 -1
  128. package/dist/client/assets/{members-Bc4xhNjU.js → members-DXHEvhXR.js} +1 -1
  129. package/dist/client/assets/{monaco-editor-CgJhEMFP.js → monaco-editor-XgcnPz0h.js} +1 -1
  130. package/dist/client/assets/{monitoring-stats-row-dpj8Sebi.js → monitoring-stats-row-D5vykyrr.js} +1 -1
  131. package/dist/client/assets/{multi-select-azeCrsND.js → multi-select-QA5H50uT.js} +1 -1
  132. package/dist/client/assets/{oauth-callback-D1rcX6_d.js → oauth-callback-BaPqd0ND.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-ai-provider-DSu7pLws.js → oauth-callback-ai-provider-DKk21d4u.js} +1 -1
  134. package/dist/client/assets/{onboarding-DADQM5E5.js → onboarding-BM43oZn8.js} +1 -1
  135. package/dist/client/assets/{org-layout-BecEJsAu.js → org-layout-D3UPVb3Q.js} +1 -1
  136. package/dist/client/assets/{organization-choice-taFgpTAK.js → organization-choice-DtexTppD.js} +1 -1
  137. package/dist/client/assets/{orgs-DkWPVlyu.js → orgs-piWZb44s.js} +1 -1
  138. package/dist/client/assets/{page-seo-form-CQfJodbh.js → page-seo-form-DukINh9z.js} +1 -1
  139. package/dist/client/assets/{popover-D0eIqhDV.js → popover-BIQfpwdK.js} +1 -1
  140. package/dist/client/assets/{post-editor-Bz9qYLGF.js → post-editor-Ditxp5eJ.js} +1 -1
  141. package/dist/client/assets/{primitives-hxwNp5yr.js → primitives-BuZO_EEU.js} +1 -1
  142. package/dist/client/assets/{profile-DE5i7ZKv.js → profile-CebCpIoy.js} +1 -1
  143. package/dist/client/assets/{project-app-view-D_zH3kTt.js → project-app-view-Dwvxa-Fp.js} +1 -1
  144. package/dist/client/assets/record-editor-Yj3XIJ__.js +1 -0
  145. package/dist/client/assets/{redirect-editor-COD_CoNf.js → redirect-editor-Cs9SS-SK.js} +1 -1
  146. package/dist/client/assets/registry-ZWQy9weF.js +2 -0
  147. package/dist/client/assets/{registry-layout-BDpIZFpz.js → registry-layout-oAnMSrVA.js} +1 -1
  148. package/dist/client/assets/{reports-zqB3xfbP.js → reports-G-021F9l.js} +1 -1
  149. package/dist/client/assets/{require-capability-CklGr71g.js → require-capability-BeZA52aV.js} +1 -1
  150. package/dist/client/assets/{required-auth-layout-CJcqGPbw.js → required-auth-layout-C8lVprpQ.js} +1 -1
  151. package/dist/client/assets/{reset-password-BW7CyHlM.js → reset-password-DLP17xi5.js} +1 -1
  152. package/dist/client/assets/{roles-BvT1LNW-.js → roles-CKryzspa.js} +1 -1
  153. package/dist/client/assets/{search-input-1J4nLKNo.js → search-input-BLfZl2C_.js} +1 -1
  154. package/dist/client/assets/{secrets-CmkA3H_m.js → secrets-cmVGSLt6.js} +1 -1
  155. package/dist/client/assets/{sections-editor-BI3X127B.js → sections-editor-DCPKTve-.js} +1 -1
  156. package/dist/client/assets/{select-BYD8DP0l.js → select-UCunkGTr.js} +1 -1
  157. package/dist/client/assets/{select-model-DWuOVFpU.js → select-model-D8JHQ7q6.js} +1 -1
  158. package/dist/client/assets/{self-tool-result-gwJCzUb1.js → self-tool-result-CLCgPmW8.js} +1 -1
  159. package/dist/client/assets/{seo-editor-nJXHKGt7.js → seo-editor-C-j-HHv3.js} +1 -1
  160. package/dist/client/assets/{settings-layout-Cg5wDtvC.js → settings-layout-BCxxiW1a.js} +1 -1
  161. package/dist/client/assets/{settings-section-Dr5RvIB2.js → settings-section-CjwEsFcO.js} +1 -1
  162. package/dist/client/assets/{shell-controls-BeBTiqtV.js → shell-controls-D099JUlB.js} +1 -1
  163. package/dist/client/assets/{shell-layout-DKWMlZYq.js → shell-layout-BlIGds5q.js} +1 -1
  164. package/dist/client/assets/{sidebar-CafUqqWq.js → sidebar-DcwPC5jw.js} +1 -1
  165. package/dist/client/assets/{skeleton-CiNNqP_p.js → skeleton-CMgCTd8B.js} +1 -1
  166. package/dist/client/assets/{spinner-CzW3jlpY.js → spinner-Crd3JeII.js} +1 -1
  167. package/dist/client/assets/{sso-BNgOufJH.js → sso-Df1PLxAh.js} +1 -1
  168. package/dist/client/assets/{store-CYvptVj-.js → store-DwT7hN8N.js} +1 -1
  169. package/dist/client/assets/store-registry-DOhP_Y74.js +2 -0
  170. package/dist/client/assets/{studio-tools-YCNXydG5.js → studio-tools-CAxwz1BR.js} +1 -1
  171. package/dist/client/assets/{switch-BzAl3abp.js → switch-BjOrTjje.js} +1 -1
  172. package/dist/client/assets/{synced-repos--RvYb4gV.js → synced-repos-Bw3SNQc6.js} +1 -1
  173. package/dist/client/assets/{tab-id-Cn_cnWoy.js → tab-id-DA9UbJrS.js} +1 -1
  174. package/dist/client/assets/{table-CqPGPqlr.js → table-BilWGrN8.js} +1 -1
  175. package/dist/client/assets/{tabs-D5YGqRll.js → tabs-CBhHhlx2.js} +1 -1
  176. package/dist/client/assets/{textarea-BlRakKBh.js → textarea-DHq2d1ml.js} +1 -1
  177. package/dist/client/assets/{toggle-group-D1hjzcbF.js → toggle-group-CCAfkvVL.js} +1 -1
  178. package/dist/client/assets/{toolbar-CosfoWro.js → toolbar-BApd4But.js} +1 -1
  179. package/dist/client/assets/{tooltip-hkKkM6d5.js → tooltip-gLA0ajwl.js} +1 -1
  180. package/dist/client/assets/{track-Bza9dqNN.js → track-D9ObmLvC.js} +1 -1
  181. package/dist/client/assets/{types-BMjOUgOU.js → types-D1WclrsF.js} +1 -1
  182. package/dist/client/assets/{use-ai-providers-Dj8GPJJV.js → use-ai-providers-ChS7dILr.js} +1 -1
  183. package/dist/client/assets/{use-api-keys-BemhZJhd.js → use-api-keys-CtzZ__Vh.js} +1 -1
  184. package/dist/client/assets/{use-automations-BhXAR7fS.js → use-automations-BfwD0MQL.js} +1 -1
  185. package/dist/client/assets/{use-autosave-Cv_GL0Fp.js → use-autosave-mqsQSvZl.js} +1 -1
  186. package/dist/client/assets/{use-capability-DiWZrbPk.js → use-capability-CHIgDZ6V.js} +1 -1
  187. package/dist/client/assets/{use-clock-tick-BgdpQ_7_.js → use-clock-tick-CWkvxyR5.js} +1 -1
  188. package/dist/client/assets/{use-commerce-diagnostic-BuDi6VdV.js → use-commerce-diagnostic-wz2MJyKA.js} +1 -1
  189. package/dist/client/assets/{use-connection-CjpBiC-L.js → use-connection-Dh7nO88Z.js} +1 -1
  190. package/dist/client/assets/{use-copy-Def0lKy3.js → use-copy-DvRQLvdf.js} +1 -1
  191. package/dist/client/assets/{use-create-virtual-mcp-C3vacQwt.js → use-create-virtual-mcp-BAhv0Q5J.js} +1 -1
  192. package/dist/client/assets/{use-debounced-autosave-Crnv6i6B.js → use-debounced-autosave-CAt4u3LO.js} +1 -1
  193. package/dist/client/assets/{use-debounced-value--rKcfop8.js → use-debounced-value-BFcAbx2O.js} +1 -1
  194. package/dist/client/assets/{use-decopilot-events-BAv8AsoP.js → use-decopilot-events-OL1NoG_X.js} +1 -1
  195. package/dist/client/assets/{use-delete-connection-BUHLwyQ6.js → use-delete-connection-DkAN2vW8.js} +1 -1
  196. package/dist/client/assets/{use-deployment-admin-qfw-w7a6.js → use-deployment-admin-ovfJKogr.js} +1 -1
  197. package/dist/client/assets/{use-file-configs-B1YASq-9.js → use-file-configs-BMHz-yF1.js} +1 -1
  198. package/dist/client/assets/{use-infinite-scroll-CKaoDExD.js → use-infinite-scroll-DNNQHUsq.js} +1 -1
  199. package/dist/client/assets/{use-infra-billing-BGkraqJp.js → use-infra-billing-BiWVrsTY.js} +1 -1
  200. package/dist/client/assets/{use-join-requests-Cda4sATn.js → use-join-requests-BMBzs8zq.js} +1 -1
  201. package/dist/client/assets/{use-mcp-client-2zMoQmIe.js → use-mcp-client-DsvuKsBi.js} +1 -1
  202. package/dist/client/assets/{use-mcp-tools-DPO_rzqT.js → use-mcp-tools-CQLWYWQ2.js} +1 -1
  203. package/dist/client/assets/{use-members-DUZ4aG2f.js → use-members-CaBfrqGg.js} +1 -1
  204. package/dist/client/assets/{use-mobile-DISBqUOM.js → use-mobile-CqFEJ3kS.js} +1 -1
  205. package/dist/client/assets/{use-navigate-to-agent-2Fkh5W8W.js → use-navigate-to-agent-BL2JlHrU.js} +1 -1
  206. package/dist/client/assets/{use-open-billing-url-In2da6_R.js → use-open-billing-url-CmXKt6f-.js} +1 -1
  207. package/dist/client/assets/{use-org-auth-client-LjCgDQWZ.js → use-org-auth-client-CeqmgLem.js} +1 -1
  208. package/dist/client/assets/{use-org-sso-CSlo-ATw.js → use-org-sso-D76nKlfi.js} +1 -1
  209. package/dist/client/assets/{use-organization-roles-k21tf3CM.js → use-organization-roles-DIs-2JAK.js} +1 -1
  210. package/dist/client/assets/{use-organization-settings-DCUf_6Aq.js → use-organization-settings-CmYnzzv7.js} +1 -1
  211. package/dist/client/assets/{use-registry-connections-CmsXd0Qk.js → use-registry-connections-DpQX3Xbs.js} +1 -1
  212. package/dist/client/assets/{use-secrets-B-lCxBgH.js → use-secrets-1fbt-Rje.js} +1 -1
  213. package/dist/client/assets/{use-section-preview-base-Bn7GxUm9.js → use-section-preview-base-DiYiNp8a.js} +1 -1
  214. package/dist/client/assets/{use-status-sounds-Cg_BJ9bF.js → use-status-sounds-CIoB5LD4.js} +1 -1
  215. package/dist/client/assets/{use-tags-BmBTSx_O.js → use-tags-BOrTE3us.js} +1 -1
  216. package/dist/client/assets/{use-view-mode-wzPv2u9-.js → use-view-mode-COFpiyJv.js} +1 -1
  217. package/dist/client/assets/{use-virtual-mcp-TmWPOyQG.js → use-virtual-mcp-BWLf4TN_.js} +1 -1
  218. package/dist/client/assets/useInfiniteQuery-Dz3GoQIk.js +1 -0
  219. package/dist/client/assets/{useRouterState-Cl277yot.js → useRouterState-NVgLRkVz.js} +1 -1
  220. package/dist/client/assets/useSuspenseInfiniteQuery-CnkS7-et.js +1 -0
  221. package/dist/client/assets/{users-IBOGxt4Y.js → users-BuIc8Gyn.js} +1 -1
  222. package/dist/client/assets/{variant-calendar-OsAajxfz.js → variant-calendar-5qD3rmwT.js} +1 -1
  223. package/dist/client/assets/{view-mode-toggle-TyeNByC1.js → view-mode-toggle-BaTwrzLR.js} +1 -1
  224. package/dist/client/index.html +1 -1
  225. package/dist/server/cli.js +1 -1
  226. package/dist/server/server.js +1 -1
  227. package/package.json +1 -1
  228. package/dist/client/assets/record-editor-fEG-8Id2.js +0 -1
  229. package/dist/client/assets/registry-CLvyLWaz.js +0 -2
  230. package/dist/client/assets/store-registry-DoMbuyn9.js +0 -2
  231. package/dist/client/assets/useInfiniteQuery-DLQ1Mz7E.js +0 -1
  232. package/dist/client/assets/useSuspenseInfiniteQuery--WbX5qIr.js +0 -1
@@ -2761,7 +2761,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2761
2761
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2762
2762
 
2763
2763
  Respond with the structured verdict and a short reason.`,wx$;var Lx$=w(()=>{C4();XB();S51();QX6=V51.object({requiresReview:V51.boolean().describe("true if the changes should go through pull-request review"),reason:V51.string().describe("One short sentence explaining the decision (max ~120 chars)")});wx$={requiresReview:!1,reason:""}});function Ex$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function jx$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function zx$($){let Z=Mh.get($);if(!Z)return;Mh.delete($),C51-=Z.bytes}function HX6($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(zx$($),Q>KX6)return;Mh.set($,{etag:Z,body:X,bytes:Q}),C51+=Q;while(C51>WX6||Mh.size>JX6){let Y=Mh.keys().next().value;if(Y===void 0)break;zx$(Y)}}function Px$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,F){let N=`${Ex$()}${K}`,U=jx$(W,K)?Mh.get(N):void 0,O=await fetch(N,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&O.status===304)return{status:200,json:U.body};if(!O.ok&&!F?.allow?.includes(O.status)){let D=await O.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new C6(O.status,W,K,L)}let B=O.status===204?void 0:await O.json();if(O.status===200&&jx$(W,K)){let D=O.headers.get("etag");if(D)HX6(N,D,B)}return{status:O.status,json:B}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${K_(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${K_(W)}`,H=await fetch(`${Ex$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let F=await H.text().catch(()=>"");throw new C6(H.status,"GET",K,F.slice(0,300))}if(!H.body)throw new C6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new C6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new C6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:F}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return F.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${K_(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:F,json:N}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return F===204?null:N?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:F}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:F.number,html_url:F.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),F=H[0];return F?{number:F.number,html_url:F.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${K_(W)}...${K_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${K_(W)}...${K_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((F)=>({filename:F.filename,status:F.status,sha:F.sha,...F.previous_filename?{previousFilename:F.previous_filename}:{}}))}}}}function K_($){return $.split("/").map(encodeURIComponent).join("/")}var JX6=512,WX6=8388608,KX6=262144,Mh,C51=0,C6;var H_=w(()=>{Mh=new Map;C6=class C6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function YP0($,Z,X){if(!X.connectionId)throw new C6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new C6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await FX6($,Q);if(!Y)throw new C6(401,"AUTH","connection",_Z);return Px$({owner:X.owner,repo:X.name,accessToken:Y})}async function FX6($,Z){if(T5(Z)?.sourceConnectionId)return Tx($,Z);return(await bY({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new q6($.db,$.vault)})).accessToken}var _51=w(()=>{zQ();_90();P3();kY();H_()});function NX6($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function GP0($){if(NX6($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function vr($){try{return decodeURIComponent($)}catch{return $}}function v51($){return GP0($),encodeURIComponent($)}function fr($){let Z=$.map((J)=>({file:J,name:`${J.stem}.json`})).sort((J,W)=>J.name<W.name?-1:J.name>W.name?1:0),X=[],Q=new Set,Y="{",G=!0;for(let{file:J}of Z){let W=J.content.trim();if(W.length===0)continue;let K=vr(J.stem);if(Q.has(K)){X.push({key:K,stem:J.stem,error:`duplicate block key "${K}" (another file already maps to it)`});continue}try{JSON.parse(W)}catch(H){X.push({key:K,stem:J.stem,error:H instanceof Error?H.message:String(H)});continue}if(Q.add(K),!G)Y+=",";G=!1,Y+=`${JSON.stringify(K)}:${W}`}return{decofile:`${Y}}`,skipped:X}}var Ax$=()=>{};var JP0=w(()=>{Ax$()});function UX6($){return $.startsWith("merged/")?"merged":"blobs"}function f51($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=UX6(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function Tx$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function kh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function Rx$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),F=[],N=new Set;if(Y==="merged")for(let[U,O]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||O.area!=="merged")continue;F.push(U),N.add(U),H-=O.bytes,K-=O.bytes}for(let[U,O]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||N.has(U))continue;F.push(U),N.add(U),K-=O.bytes}for(let U of F)kh($,U);return kh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:F}}function br($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function b51($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as Vx$}from"crypto";import{mkdir as xr,readdir as OX6,readFile as BX6,rename as wX6,rm as Cx$,stat as _x$,statfs as DX6,unlink as LX6,writeFile as EX6}from"fs/promises";import{tmpdir as jX6}from"os";import{dirname as zX6,join as R7}from"path";function Sh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function TX6(){if(WP0)return WP0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?R7(jX6(),"studio-fast-preview-cache"):$;return WP0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Sh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Ix$),maxMergedBytes:Sh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*KP0),maxEntryBytes:{blobs:Sh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",KP0),merged:Sh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*KP0)}},freeFloorBytes:Sh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Ix$),sweepIntervalMs:Sh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},WP0}function RX6(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function IX6(){if(Ww)return;Ww={hits:q$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:q$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:q$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:q$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:q$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},q$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Vh)return;$.observe(Vh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Vh.index.areaBytes.merged,{area:"merged"})}),q$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Vh)return;let Z={blobs:0,merged:0};for(let X of Vh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function qX6($){F_.hits[$]+=1,Ww?.hits.add(1,{area:$})}function qx$($){F_.misses[$]+=1,Ww?.misses.add(1,{area:$})}function x51(){F_.evictions+=1,Ww?.evictions.add(1)}function BN($){F_.errors+=1,Ww?.errors.add(1,{op:$})}function MX6($){F_.invalidKeySkips+=1,Ww?.errors.add(1,{op:`${$}_invalid_key`})}function y51(){return Mx$??=SX6(),Mx$}async function SX6(){let $=TX6();if(!$.enabled)return null;IX6();try{await xr(R7($.root,"blobs"),{recursive:!0}),await xr(R7($.root,"merged"),{recursive:!0}),await xr(R7($.root,"tmp"),{recursive:!0})}catch{return BN("init"),null}let Z=[];try{Z=await vx$($.root)}catch{BN("scan"),Z=[]}let X={root:$.root,index:f51(Z,$.index),cfg:$};return Vh=X,_X6(X),X}async function HP0($){try{return await OX6($)}catch{return[]}}async function vx$($){let Z=[];for(let X of["blobs","merged"]){let Q=R7($,X);for(let Y of await HP0(Q)){let G=R7(Q,Y);for(let J of await HP0(G)){let W=R7(G,J);for(let K of await HP0(W))try{let H=await _x$(R7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function fx$($,Z,X){if(!b51(X))return null;try{return`blobs/${br($)}/${br(Z)}/${X}`}catch{return null}}function bx$($,Z,X){if(!b51(X))return null;try{return`merged/${br($)}/${br(Z)}/${X}.json`}catch{return null}}async function xx$($,Z){try{let X=await y51();if(!X)return null;if(Z===null)return qx$($),null;try{let Q=await BX6(R7(X.root,Z),"utf8");return Tx$(X.index,Z),qX6($),Q}catch{return qx$($),null}}catch{return BN(`get_${$}`),null}}function yx$($,Z,X){return xx$("blobs",fx$($,Z,X))}function gx$($,Z,X){return xx$("merged",bx$($,Z,X))}async function VX6($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await DX6($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function FP0($){try{await LX6($)}catch{}}async function CX6($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;kh($.index,X.value),await FP0(R7($.root,X.value)),x51()}}catch{BN("emergency_evict")}}async function hx$($,Z,X,Q){try{let Y=await y51();if(!Y)return;if(X===null){MX6(Z);return}if(!await VX6(Y)){F_.floorSkips+=1,Ww?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=Rx$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){F_.admissionRefusals+=1;return}for(let K of J.evict)await FP0(R7(Y.root,K)),x51();let W=R7(Y.root,"tmp",`stage-${Vx$()}`);try{await EX6(W,Q,"utf8");let K=R7(Y.root,X);await xr(zX6(K),{recursive:!0}),await wX6(W,K)}catch(K){if(kh(Y.index,X),await FP0(W),BN(Z),K?.code==="ENOSPC")await CX6(Y)}}catch{BN(Z)}}function NP0($,Z,X,Q){return hx$("blobs","put_blob",fx$($,Z,X),Q)}function ux$($,Z,X,Q){return hx$("merged","put_merged",bx$($,Z,X),Q)}async function cx$(){try{let $=await y51();if(!$)return null;let Z=R7($.root,"tmp",Vx$());return await xr(Z,{recursive:!0}),Z}catch{return BN("make_scratch"),null}}async function lx$($){try{await Cx$($,{recursive:!0,force:!0})}catch{BN("remove_scratch")}}function _X6($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;kx$=new AbortController,I$(Math.random()*Z,{signal:kx$.signal}).then(()=>{Sx$($);let X=setInterval(()=>void Sx$($),Z);X.unref?.(),kX6=X}).catch(()=>{})}async function Sx$($){try{let Z=f51(await vx$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;kh(Z,G),await FP0(R7($.root,G)),x51()}$.index=Z;let Q=R7($.root,"tmp"),Y=Date.now();for(let G of await HP0(Q)){let J=R7(Q,G);try{let W=await _x$(J);if(Y-W.mtimeMs>AX6)await Cx$(J,{recursive:!0,force:!0})}catch{}}}catch{BN("sweep")}}var PX6=1024,KP0,Ix$,AX6=3600000,WP0=null,Ww=null,F_,Mx$=null,Vh=null,kX6=null,kx$=null;var dx$=w(()=>{t4();f6();KP0=1024*PX6,Ix$=1024*KP0;F_=RX6()});function mx$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as vX6,stat as fX6}from"fs/promises";import{join as ix$}from"path";function bX6($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function xX6(){return nx$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),nx$}async function px$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new yr(`invalid blocks path prefix: ${X}`);let Y=await xX6(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...bX6(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(N){throw new yr("failed to spawn tar",{cause:N})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let N=(await K).trim().slice(0,500);throw new yr(`tar exited with code ${H}${N?`: ${N}`:""}`)}let F=await yX6(Z,Q);if(F.length===0)throw new yr(`tar extracted no ${G} members into ${Z}`);return F}async function yX6($,Z){let X=ix$($,...Z.split("/")),Q;try{Q=await vX6(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=ix$(X,G);try{if(!(await fX6(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var yr,nx$=null;var tx$=w(()=>{yr=class yr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as gX6}from"crypto";import{readFile as hX6}from"fs/promises";async function gr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof C6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof C6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function cX6(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return rx$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):rx$}function lX6($){ax$??=q$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),ax$.add(1,{path:$})}function dX6($){sx$??=q$.createCounter("decofile_skipped_blocks",{description:"Decofile blocks dropped from a merge for not being valid JSON",unit:"{blocks}"}),sx$.add($)}async function UP0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function OP0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function g51($,Z){let X=`${OP0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function h51($,Z){return $.filter((X)=>vr(X.stem)===Z).map((X)=>X.path).sort()}function ex$($,Z,X,Q){return NP0($,Z,X,Q)}function iX6($,Z){return gX6("sha1").update(`${mX6}:${$}:${Z??""}`).digest("hex")}async function $y$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await gr($,Z):await $.getHeadSha(Z);return nX6.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>pX6($,Y,X))}async function pX6($,Z,X){let{owner:Q,repo:Y}=$,G=iX6(Z,X),J=await gx$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=g51(K,X),F=new Map;if(await UP0(H,ox$,async(D)=>{let L=await yx$(Q,Y,D.sha);if(L!==null)F.set(D.path,L)}),H.length-F.size>uX6){let D=await tX6($,Z,X,H);if(lX6(D!==null?"tarball":"blobs"),D!==null)for(let[L,E]of D)F.set(L,E)}let U=await UP0(H,ox$,async(D)=>{let L=F.get(D.path);if(L!==void 0)return{stem:D.stem,content:L};let E=await $.getBlobText(D.sha);return await NP0(Q,Y,D.sha,E),{stem:D.stem,content:E}}),{decofile:O,skipped:B}=fr(U);if(B.length>0)dX6(B.length),console.warn("decofile read: dropped blocks that were not valid JSON",{repo:`${Q}/${Y}`,sha:Z,packagePath:X,blocks:B.map((D)=>D.key)});return await ux$(Q,Y,G,O),{sha:Z,decofile:O}}async function tX6($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=cX6(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await cx$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await px$(K,W,OP0(X)),F=new Map(Q.map((U)=>[U.path,U.sha])),N=new Map;for(let U of H){let O=F.get(U.path);if(O===void 0)continue;let B=await hX6(U.diskPath,"utf8");await NP0($.owner,$.repo,O,B),N.set(U.path,B)}return N}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await lx$(W)}}var ox$=12,uX6=50,rx$=134217728,ax$=null,sx$=null,mX6="3",nX6;var BP0=w(()=>{JP0();f6();dx$();H_();tx$();nX6=mx$()});async function wP0($,Z){let X=await $.getDefaultBranch(),Q=await gr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function DP0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,oX6),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((F)=>F.type==="blob").map((F)=>[F.path,F.sha])),H=await UP0(G,rX6,async(F)=>{let N=F.previousFilename??F.filename,U=F.status==="added"?void 0:K.get(N),O=U?await $.getBlobText(U):null,B=F.status==="removed"?null:await $.getBlobText(F.sha);return[F.filename,{from:O,to:B}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function Zy$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof C6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new C6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await $Q6($,Z,X)}function eX6($,Z){let X=new Map;for(let Q of $){let Y=Z.get(Q.filename);X.set(Q.filename,{path:Q.filename,mode:"100644",type:"blob",sha:Q.status==="removed"||!Y?null:Y.sha})}for(let Q of $)if(Q.previousFilename&&Q.previousFilename!==Q.filename&&!X.has(Q.previousFilename))X.set(Q.previousFilename,{path:Q.previousFilename,mode:"100644",type:"blob",sha:null});return[...X.values()]}async function $Q6($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=aX6)throw new C6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=eX6(J,K),F=await $.createTree(await $.getCommitTreeSha(G),H),N=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:F,parentShas:[Y,G]});try{await $.updateRef(Z,N);return}catch(U){if(U instanceof C6&&U.status===422&&Q<sX6)continue;throw U}}}var oX6=200,rX6=12,aX6=300,sX6=3;var Xy$=w(()=>{H_();BP0()});function XQ6($){if(!$||$.includes(".."))return!1;return ZQ6.test($)}function Qy$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!XQ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Yy$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var ZQ6;var Gy$=w(()=>{ZQ6=/^[\w./@-]+$/});function u51($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function hr($,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 Jy$($,Z,X,Q){if(!Q.connectionId)throw new N_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new N_(_Z);await xO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:_Z;throw new N_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await yO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=P8$(F instanceof Error?F.message:String(F));throw N?new N_(U):F}),K=qh($),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 $B(H,QQ6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var QQ6=10485760,N_;var c51=w(()=>{P3();QP0();En();wd0();Rx();N_=class N_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function GQ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!YQ6.test(Z))throw Error(`Invalid branch name: ${$}`)}function U_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(WQ6)])}function KQ6($,Z,X){let Q=O5($)[Z]?.[X];return!!Q&&Object.keys(jY(Q)).length>0}function O_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function ur($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=hr(Z,X);if(!Y)throw new C6(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return YP0(Q,G.id,Y)}function l51($,Z){if(Z instanceof C6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,A9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,A9)}async function Hy$($){try{let Z=await ur($),X=await wP0(Z,$.get("vmClaim").branch);return $.json(X,200,A9)}catch(Z){return l51($,Z)}}function EP0($,Z){let Q=(LP0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return LP0.set($,Y),Y.finally(()=>{if(LP0.get($)===Y)LP0.delete($)}),Q}async function cZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,A9);let Q=O_($);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 O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.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",...A9}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?FQ6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...A9}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function FQ6($){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 jP0($,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 NQ6($){return Fy$.includes($)}var YQ6,Wy$=524288,JQ6=65536,WQ6=1e4,Ky$=2000,HQ6,LP0,A9,Fy$,Ny$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",HQ6),$.post("/:virtualMcpId/:branch/write",(X)=>cZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:U_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>cZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:U_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>cZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:U_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>cZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:U_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>cZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:U_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>cZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:U_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>cZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:U_(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 cZ(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 cZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>cZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>cZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!NQ6(Q))return X.json({error:`step must be one of: ${Fy$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=cx(Y.virtualMcpMetadata);try{await FO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return cZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return ON(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 Hx$(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").fastPreview)return Hy$(X);return Z(X)});let Z=(X)=>cZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Ky$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Hy$(X);return cZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Ky$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await ur(X),J=await DP0(G,Q.branch,Y.base);return X.json(J,200,A9)}catch(Y){return l51(X,Y)}return cZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,A9);let Q=O_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return EP0(Y,async()=>{try{await T51(W,Q,Y);let K=hr(G,J);if(K)await Jy$(W,Q,Y,K)}catch(K){if(K instanceof N_)return X.json({error:K.message},403,A9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,A9)}return cZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,A9);return EP0(Q,()=>cZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return EP0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await ur(X),H=W.base??await K.getDefaultBranch();return await Zy$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,A9)}catch(W){return l51(X,W)}});let Y=O_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return EP0(G,async()=>{try{await T51(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,A9)}return cZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",wZ({maxSize:Wy$,onError:(X)=>X.json({error:"Payload too large"},413,A9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=O_(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,[O,B]=q51(F)&&U?[F,N]:Y?await Promise.all([jP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),jP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await ur(X);return Promise.all([wP0(L,Q.branch),DP0(L,Q.branch)])})(),D=await Bx$(K,O,B);return X.json(D,200,A9)}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,A9);return X.json({error:F},502,A9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",wZ({maxSize:Wy$,onError:(X)=>X.json({error:"Payload too large"},413,A9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=O_(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,[O,B]=q51(F)&&U?[F,N]:Y?await Promise.all([jP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),jP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await ur(X);return Promise.all([wP0(L,Q.branch),DP0(L,Q.branch)])})(),D=await Dx$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,A9)}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,A9);return X.json({error:F},502,A9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=O_(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(/\/+$/,""),K=u51(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",wZ({maxSize:JQ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=O_(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=Qy$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Yy$(G,W.resolveType),H=u51(K),F;try{F=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$};var Uy$=w(()=>{C8();Xw();Ih();A51();BF();Wx$();M3();lX();F8();BB0();rO();Kx$();Fx$();bi0();Dn();S51();Lx$();_51();H_();Xy$();Gy$();c51();YQ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;HQ6=XP0(async($,Z)=>{let X=$.var.studioContext;try{e(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(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{GQ6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},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=yi({orgId:Y.id,virtualMcpId:G,branch:J}),H=await RF(X,J,Q),F=Jx$({userId:H,projectRef:K}),N=W.metadata??null;if(g3$(N).fastPreviewCapability&&!KQ6(N,H,J))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await tX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});LP0=new Map;A9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Fy$=["clone","install","start"]});function Oy$($,Z,X){let Q=d51.get($);if(!Q)Q={pending:null,running:!1},d51.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)OQ6($,Q);return G}async function OQ6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await BQ6(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)d51.delete($)}}async function BQ6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await gr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=g51(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=h51(K,B),E=`${JSON.stringify(D,null,2)}
2764
- `,j=await Z.createBlob(E);await ex$(Z.owner,Z.repo,j,E);let z=L[0]??`${OP0(Q)}/${v51(B)}.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 L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of h51(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=fr(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:wQ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof C6&&B.status===422)||Y>=UQ6-1)throw B;await I$(mZ(2000,200,Y,2,0.5))}}}function wQ6($){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 Jd0(Q,$.deps.coAuthor)}var UQ6=3,d51;var By$=w(()=>{XO0();JP0();t4();H_();BP0();d51=new Map});import{createHmac as wy$,randomBytes as DQ6,timingSafeEqual as LQ6}from"crypto";function Dy$(){if(zP0)return zP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return zP0=$?Buffer.from($):DQ6(32),zP0}function m51($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+EQ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=wy$("sha256",Dy$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Ly$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(wy$("sha256",Dy$()).update(Q).digest("base64url"));if(Y.length!==G.length||!LQ6(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 EQ6=21600000,zP0=null;var Ey$=w(()=>{A$()});import{z as Ch}from"zod";function zQ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&jQ6.test($)}function zy$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function PP0($){let Z=$.get("decofileScope");return YP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function AP0($,Z){if(Z instanceof C6){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 Py$(){let $=new U1;return $.use("/:virtualMcpId/:branch",jy$),$.use("/:virtualMcpId/:branch/*",jy$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await PP0(Z),Y=await $y$(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=m51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(zy$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return AP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=PQ6.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{GP0(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);try{let J=await PP0(Z),W=await Oy$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:qh(Q)},G),K=m51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:zy$(Z)})}catch(J){return AP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await PP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof C6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof C6&&G.status===405){let W=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:W.number,url:W.html_url})}throw G}}catch(Q){return AP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await PP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof C6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return AP0(Z,Q)}}),$}var jQ6,PQ6,jy$;var Ay$=w(()=>{JP0();C8();A51();QP0();c51();_51();By$();Ey$();H_();BP0();jQ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;PQ6=Ch.object({set:Ch.record(Ch.string(),Ch.unknown()).optional(),delete:Ch.array(Ch.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),jy$=XP0(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(!zQ6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Ly$(O,{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(!OB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=hr(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 Ty$=($)=>{let Z=new U1;if(Z.use("*",Z_),Z.route("/",jz0()),Z.route("/",p_$()),Z.route("/",pb$()),Z.route("/",mb$()),Z.route("/",ez0()),Z.route("/tools",$x$()),Z.route("/",ab$()),Z.route("/",qb$({kvStorage:$.kvStorage})),Z.route("/",Rb$()),Z.route("/fs",yb$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ny$()),Z.route("/decofile",Py$()),Z.route("/",cb$()),Z.route("/deco-sites",Pz0()),Z.route("/sso",Oz0()),Z.route("/",$P0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",h_$()),$.mountDevAssets)Z.route("/dev-assets",Az0({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("/",TV$()),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",hb$()),Z.route("/mcp",kw0()),Z.route("/mcp/self",sz0()),Z.route("/mcp",Cw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ry$=w(()=>{C8();m41();u_$();t41();Tz0();Jr();l41();Ib$();Mb$();gb$();Dp();f41();_w0();w51();ub$();lb$();ib$();tb$();sb$();L51();Zx$();E51();Sw0();Uy$();Ay$()});function AQ6($){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 TQ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Iy$=()=>{let $=new U1;return $.use("*",TQ6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await uZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:AQ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var qy$=w(()=>{C8();A$();Pj0()});import{z as M1}from"zod";function tK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function vQ6($){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 fQ6($,Z,X){try{return JSON.parse($)}catch{throw new Sy$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function bQ6($){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:fQ6(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 xQ6($){let Z=$.map((X)=>{let Q=X.function.parameters?vY(X.function.parameters):vY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function yQ6($){if(!$)return;return{openai:{response_format:$}}}function gQ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function My$($,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 ky$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var RQ6=256,IQ6,qQ6,MQ6,kQ6,SQ6,VQ6,CQ6,_Q6,Sy$,Vy$,Cy$;var _y$=w(()=>{C4();C8();Ih();pF();IQ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),qQ6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),MQ6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(qQ6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),kQ6=M1.object({type:M1.literal("text")}),SQ6=M1.object({type:M1.literal("json_object")}),VQ6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),CQ6=M1.union([kQ6,SQ6,VQ6]),_Q6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(MQ6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(IQ6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:CQ6.optional(),user:M1.string().optional()});Sy$=class Sy$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Vy$=new U1;Vy$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tK("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(tK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=_Q6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=vQ6(G.model);if(!J)return $.json(tK("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)=>LD(j.providerId));if(!E)return $.json(tK("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(tK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=bQ6(G.messages),U=G.tools?xQ6(G.tools):void 0,O=yQ6(G.response_format),B=gQ6(),D=Math.floor(Date.now()/1000);if(G.stream)return ON($,async(L)=>{let E=My$(F,N,U,G,O,$.req.raw.signal);try{let j=fO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of j.fullStream){if(!z&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=RQ6)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:ky$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=My$(F,N,U,G,O,$.req.raw.signal),E=await _O(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:ky$(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(tK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(tK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(tK(Y.message,"server_error"),500)}});Cy$=Vy$});var fy$;var vy$=w(()=>{fy$={name:"decocms",version:"4.231.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","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function cQ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??uQ6}}var by$,uQ6="https://ph.studio.decocms.com",xy$;var yy$=w(()=>{C8();ug0();mV();r9();A$();S41();vy$();by$=new U1;by$.get("/",($)=>{let Z={version:fy$.version,theme:ul1(),...WL().logo&&{logo:WL().logo},...LK()&&{internalUrl:DS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:X_$(),posthog:cQ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!LK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});xy$=by$});function _h($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function i51($){return(_h($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function hy$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(_h($))}&sz=${Z}`}function gy$($,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 uy$($){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()?gy$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):gy$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var B_,lQ6,dQ6,mQ6,iQ6,cy$;var ly$=w(()=>{B_=l0.enum(["good","bad","neutral"]),lQ6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:B_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),dQ6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(lQ6)),mQ6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},iQ6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:B_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:B_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:B_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:B_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(dQ6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:B_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:B_.optional()})).min(1)})]),cy$=l0.object({...mQ6,template:iQ6})});function TP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=cy$.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 n51=w(()=>{ly$()});import{join as dy$}from"path";async function pQ6($){try{let Z=await fetch(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(nQ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=TP0(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()||i51($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function XG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function tQ6($,Z){let X=_h($),Q=Z?.brand?.trim()||i51(X),Y=hy$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=uy$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${XG(W)}</title>`,`<meta name="description" content="${XG(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="${XG(W)}" />`,`<meta property="og:description" content="${XG(K)}" />`,`<meta property="og:url" content="${XG(J)}" />`,`<meta property="og:image" content="${XG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${XG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${XG(W)}" />`,`<meta name="twitter:description" content="${XG(K)}" />`,`<meta name="twitter:image" content="${XG(H)}" />`,`<meta name="twitter:image:alt" content="${XG(F)}" />`,`<link rel="canonical" href="${XG(J)}" />`,`<link rel="icon" href="${XG(Y)}" sizes="any" />`].join(`
2764
+ `,j=await Z.createBlob(E);await ex$(Z.owner,Z.repo,j,E);let z=L[0]??`${OP0(Q)}/${v51(B)}.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 L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of h51(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=fr(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:wQ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof C6&&B.status===422)||Y>=UQ6-1)throw B;await I$(mZ(2000,200,Y,2,0.5))}}}function wQ6($){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 Jd0(Q,$.deps.coAuthor)}var UQ6=3,d51;var By$=w(()=>{XO0();JP0();t4();H_();BP0();d51=new Map});import{createHmac as wy$,randomBytes as DQ6,timingSafeEqual as LQ6}from"crypto";function Dy$(){if(zP0)return zP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return zP0=$?Buffer.from($):DQ6(32),zP0}function m51($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+EQ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=wy$("sha256",Dy$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Ly$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(wy$("sha256",Dy$()).update(Q).digest("base64url"));if(Y.length!==G.length||!LQ6(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 EQ6=21600000,zP0=null;var Ey$=w(()=>{A$()});import{z as Ch}from"zod";function zQ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&jQ6.test($)}function zy$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function PP0($){let Z=$.get("decofileScope");return YP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function AP0($,Z){if(Z instanceof C6){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 Py$(){let $=new U1;return $.use("/:virtualMcpId/:branch",jy$),$.use("/:virtualMcpId/:branch/*",jy$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await PP0(Z),Y=await $y$(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=m51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(zy$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return AP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=PQ6.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{GP0(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);try{let J=await PP0(Z),W=await Oy$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:qh(Q)},G),K=m51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:zy$(Z)})}catch(J){return AP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await PP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof C6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof C6&&G.status===405){let W=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:W.number,url:W.html_url})}throw G}}catch(Q){return AP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await PP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof C6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return AP0(Z,Q)}}),$}var jQ6,PQ6,jy$;var Ay$=w(()=>{JP0();C8();A51();QP0();c51();_51();By$();Ey$();H_();BP0();jQ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;PQ6=Ch.object({set:Ch.record(Ch.string(),Ch.unknown()).optional(),delete:Ch.array(Ch.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),jy$=XP0(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(!zQ6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Ly$(O,{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(!OB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=hr(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 Ty$=($)=>{let Z=new U1;if(Z.use("*",Z_),Z.route("/",jz0()),Z.route("/",p_$()),Z.route("/",pb$()),Z.route("/",mb$()),Z.route("/",ez0()),Z.route("/tools",$x$()),Z.route("/",ab$()),Z.route("/",qb$({kvStorage:$.kvStorage})),Z.route("/",Rb$()),Z.route("/fs",yb$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ny$()),Z.route("/decofile",Py$()),Z.route("/",cb$()),Z.route("/deco-sites",Pz0()),Z.route("/sso",Oz0()),Z.route("/",$P0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",h_$()),$.mountDevAssets)Z.route("/dev-assets",Az0({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("/",TV$()),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",hb$()),Z.route("/mcp",kw0()),Z.route("/mcp/self",sz0()),Z.route("/mcp",Cw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ry$=w(()=>{C8();m41();u_$();t41();Tz0();Jr();l41();Ib$();Mb$();gb$();Dp();f41();_w0();w51();ub$();lb$();ib$();tb$();sb$();L51();Zx$();E51();Sw0();Uy$();Ay$()});function AQ6($){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 TQ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Iy$=()=>{let $=new U1;return $.use("*",TQ6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await uZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:AQ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var qy$=w(()=>{C8();A$();Pj0()});import{z as M1}from"zod";function tK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function vQ6($){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 fQ6($,Z,X){try{return JSON.parse($)}catch{throw new Sy$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function bQ6($){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:fQ6(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 xQ6($){let Z=$.map((X)=>{let Q=X.function.parameters?vY(X.function.parameters):vY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function yQ6($){if(!$)return;return{openai:{response_format:$}}}function gQ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function My$($,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 ky$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var RQ6=256,IQ6,qQ6,MQ6,kQ6,SQ6,VQ6,CQ6,_Q6,Sy$,Vy$,Cy$;var _y$=w(()=>{C4();C8();Ih();pF();IQ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),qQ6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),MQ6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(qQ6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),kQ6=M1.object({type:M1.literal("text")}),SQ6=M1.object({type:M1.literal("json_object")}),VQ6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),CQ6=M1.union([kQ6,SQ6,VQ6]),_Q6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(MQ6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(IQ6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:CQ6.optional(),user:M1.string().optional()});Sy$=class Sy$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Vy$=new U1;Vy$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tK("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(tK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=_Q6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=vQ6(G.model);if(!J)return $.json(tK("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)=>LD(j.providerId));if(!E)return $.json(tK("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(tK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=bQ6(G.messages),U=G.tools?xQ6(G.tools):void 0,O=yQ6(G.response_format),B=gQ6(),D=Math.floor(Date.now()/1000);if(G.stream)return ON($,async(L)=>{let E=My$(F,N,U,G,O,$.req.raw.signal);try{let j=fO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of j.fullStream){if(!z&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=RQ6)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:ky$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=My$(F,N,U,G,O,$.req.raw.signal),E=await _O(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:ky$(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(tK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(tK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(tK(Y.message,"server_error"),500)}});Cy$=Vy$});var fy$;var vy$=w(()=>{fy$={name:"decocms",version:"4.231.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","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function cQ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??uQ6}}var by$,uQ6="https://ph.studio.decocms.com",xy$;var yy$=w(()=>{C8();ug0();mV();r9();A$();S41();vy$();by$=new U1;by$.get("/",($)=>{let Z={version:fy$.version,theme:ul1(),...WL().logo&&{logo:WL().logo},...LK()&&{internalUrl:DS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:X_$(),posthog:cQ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!LK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});xy$=by$});function _h($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function i51($){return(_h($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function hy$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(_h($))}&sz=${Z}`}function gy$($,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 uy$($){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()?gy$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):gy$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var B_,lQ6,dQ6,mQ6,iQ6,cy$;var ly$=w(()=>{B_=l0.enum(["good","bad","neutral"]),lQ6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:B_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),dQ6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(lQ6)),mQ6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},iQ6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:B_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:B_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:B_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:B_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(dQ6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:B_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:B_.optional()})).min(1)})]),cy$=l0.object({...mQ6,template:iQ6})});function TP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=cy$.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 n51=w(()=>{ly$()});import{join as dy$}from"path";async function pQ6($){try{let Z=await fetch(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(nQ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=TP0(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()||i51($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function XG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function tQ6($,Z){let X=_h($),Q=Z?.brand?.trim()||i51(X),Y=hy$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=uy$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${XG(W)}</title>`,`<meta name="description" content="${XG(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="${XG(W)}" />`,`<meta property="og:description" content="${XG(K)}" />`,`<meta property="og:url" content="${XG(J)}" />`,`<meta property="og:image" content="${XG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${XG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${XG(W)}" />`,`<meta name="twitter:description" content="${XG(K)}" />`,`<meta name="twitter:image" content="${XG(H)}" />`,`<meta name="twitter:image:alt" content="${XG(F)}" />`,`<link rel="canonical" href="${XG(J)}" />`,`<link rel="icon" href="${XG(Y)}" sizes="any" />`].join(`
2765
2765
  `)}function oQ6($,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}
2766
2766
  </head>`)}function my$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=_h(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(dy$($,"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(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(rQ6)}),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=$?dy$($,"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 pQ6(_h(Q)),K=tQ6(Q,W);return X.html(oQ6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var nQ6=2500,rQ6=1e4;var iy$=w(()=>{C8();n51();PL();A$()});function cr($,Z){return fetch(`${lW({})}${$}`,Z)}async function aQ6($,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 cr(`/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}=TP0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var sQ6,wN,ny$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},py$;var ty$=w(()=>{C8();xG();PL();n51();sQ6=new Set(["complete","errored","terminated","unknown"]),wN=new U1;wN.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});wN.use("/link-token/*",ny$);wN.use("/suggest",ny$);wN.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 aQ6(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)}});wN.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 cr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${zL({})}`},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)}});wN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await cr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${zL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:sQ6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});wN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await cr(`/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)}});wN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await cr(`/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:[]})}});py$=wN});import{createHmac as eQ6,timingSafeEqual as $Y6}from"crypto";function ry$($,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)>ZY6)return!1;let W=eQ6("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&&$Y6(K,F)})}function ay$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=LJ(Z),Q=LJ(LJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:oK(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 sy$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function oK($){return typeof $==="string"?$:void 0}function LJ($){return typeof $==="object"&&$!==null?$:void 0}function RP0($){return typeof $==="number"?new Date($*1000):null}function o51($){return oK($)??oK(LJ($)?.id)}function XY6($){return o51($.subscription)??oK(LJ(LJ($.parent)?.subscription_details)?.subscription)}function QY6($){let Z=RP0($.current_period_end);if(Z)return Z;let X=LJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=LJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function p51($,Z){let X=RP0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function t51($,Z){let X=RP0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function YY6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=oK(LJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(oK(LJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(oK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=oK(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(LJ(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:LJ(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(oK(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=o51(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(p51(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:o51(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:t51(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=oK(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&&p51(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":sy$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:QY6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:t51(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=XY6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(p51(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:RP0(X.period_end),lastStripeEventAt:t51(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function GY6($,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:sy$(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 oy$($,Z){let X=GY6($,Z);if(!X)return;RY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:tm1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function ey$($){let Z=new gW(m8().db),X=await YY6(Z,$);if(!(X.handled&&X.topUp))oy$($,X);if(X.handled&&X.topUp)await UB$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),oy$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Wa1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof VY&&(Q.status===400||Q.status===404)))throw Q}return X}var ZY6=300;var $g$=w(()=>{CG();q4();d40();VL();Ks0()});var JY6=1048576,r51;var Zg$=w(()=>{C8();Xw();A$();$g$();r51=new U1;r51.post("/webhook",wZ({maxSize:JY6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ry$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=ay$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await ey$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as WY6}from"crypto";function HY6($,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 WY6(Buffer.from(Y),Buffer.from(Q))}var KY6=5242880,a51;var Xg$=w(()=>{C8();Xw();On();a51=new U1;a51.post("/webhook",wZ({maxSize:KY6,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(!HY6(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 Si0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Qg$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Yg$,FY6,NY6,Gg$;var Jg$=w(()=>{C8();Y3();Qy();Zx();Yg$=new U1,FY6=["range","if-none-match","if-modified-since"],NY6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Yg$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Wh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await mn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&H3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(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 Qg$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of FY6){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 $$(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 $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of NY6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Qg$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Gg$=Yg$});var lr=C((w_)=>{var UY6=w_&&w_.__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]}),OY6=w_&&w_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))UY6(Z,$,X)};Object.defineProperty(w_,"__esModule",{value:!0});OY6(KY(),w_)});var Hg$=C((Wg$)=>{Object.defineProperty(Wg$,"__esModule",{value:!0});Wg$.version=void 0;Wg$.version="3.4.0"});var Ug$=C((rK)=>{var BY6=rK&&rK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(rK,"__esModule",{value:!0});rK.NodeTransport=rK.VERSION=void 0;rK.nodeResolveHost=zY6;var p6=lr(),wY6=z0("net"),s51=z0("tls"),DY6=z0("path"),Fg$=z0("fs"),LY6=BY6(z0("dns")),EY6=Hg$();rK.VERSION=EY6.version;var jY6="nats.js";class Ng${socket;version;lang;yields=[];signal=(0,p6.deferred)();closedNotification=(0,p6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=jY6,this.version=rK.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,p6.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 p6.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 p6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new p6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,p6.deferred)(),X,Q=(0,wY6.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,p6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=p6.DataBuffer.concat(...this.yields),Y=(0,p6.extractProtocolMessage)(Q);if(Y!=="")try{let G=p6.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,p6.deferred)();try{if($=(0,DY6.resolve)($),!(0,Fg$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Fg$.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,p6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new p6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,p6.deferred)();try{let Y=(0,s51.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 p6.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,p6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new p6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,p6.deferred)();try{let Q=(0,s51.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 p6.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,p6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,p6.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 s51.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,p6.render)($)}`);let Z=(0,p6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,p6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,p6.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}}rK.NodeTransport=Ng$;function zY6($){let Z=(0,p6.deferred)();return LY6.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 Lg$=C((Dg$)=>{Object.defineProperty(Dg$,"__esModule",{value:!0});Dg$.connect=PY6;var Og$=Ug$(),Bg$=lr(),wg$=lr();function PY6($={}){if((0,wg$.hasWsProtocol)($))return Promise.reject(wg$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Bg$.setTransportFactory)({factory:()=>{return new Og$.NodeTransport},dnsResolveFn:Og$.nodeResolveHost}),Bg$.NatsConnectionImpl.connect($)}});var Eg$=C((DN)=>{var TY6=DN&&DN.__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]}),RY6=DN&&DN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))TY6(Z,$,X)};Object.defineProperty(DN,"__esModule",{value:!0});DN.connect=void 0;var IY6=Lg$();Object.defineProperty(DN,"connect",{enumerable:!0,get:function(){return IY6.connect}});RY6(lr(),DN)});function Ag$($){let Z=$?.connectFn??SY6,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 O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:kY6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=mZ(MY6,qY6,B-1,2,0.5);await I$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?jg$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Pg$.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 SY6($){return zg$.connect($)}var jg$,zg$,Pg$,qY6=100,MY6=3000,kY6=3000;var Tg$=w(()=>{t4();jg$=S(Qu(),1),zg$=S(Eg$(),1),Pg$=S(Iw(),1)});function e51($,Z){return`${$}.${Z}`}class $91{cache;constructor($){this.cache=tg({ttlMs:$?.ttlMs??VY6,maxSize:$?.maxSize??CY6})}async get($,Z){return this.cache.get(e51($,Z))??null}async set($,Z,X){this.cache.set(e51($,Z),X)}async invalidate($,Z){this.cache.delete(e51($,Z))}teardown(){this.cache.clear()}}var VY6=600000,CY6=5000;var Rg$=()=>{};function IP0($,Z){return`${$}:${Z}`}function Z91($){let Z=tg({ttlMs:$?.ttlMs??_Y6,maxSize:$?.maxSize??vY6}),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(Ig$,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(IP0(K,H))},set(K,H,F){Z.set(IP0(K,H),F)},invalidate(K,H){Z.delete(IP0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Ig$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(IP0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Ig$="studio.ai-provider-keys.invalidate",_Y6=30000,vY6=5000;var qg$=()=>{};class X91{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Mg$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))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,messageId:crypto.randomUUID()}));for(let Q of Mg$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Mg$;var kg$=w(()=>{Mg$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Sg$=($)=>{let Z;return()=>Z??=$()},Q91,Y91;var Vg$=w(()=>{f6();Q91=Sg$(()=>q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),Y91=Sg$(()=>q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function uY6(){return{name:bF,subjects:[`${nB0}.>`],storage:e3.StorageType.File,max_age:xY6,max_bytes:gY6,max_msgs_per_subject:hY6,discard:e3.DiscardPolicy.Old,retention:e3.RetentionPolicy.Limits,duplicate_window:yY6,num_replicas:1}}class vg${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 Cg$($){let Z=_g$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function mY6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,bY6().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 iY6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class G91{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=uY6(),X=await m9(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await e3.jetstreamManager($);try{await Q.streams.info(bF),await Q.streams.update(bF,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(bF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:iY6});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=mY6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=lK$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=Xt0(H,{runId:Z}),U=performance.now()-F;if(Q91().record(U),Y91().add(1,{"org.id":Q??"unknown"}),dY6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?Cg$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),lY6)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 publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Xt0(Z,{runId:$,dedup:X});if(Q91().record(performance.now()-Y),Y91().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:Cg$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=cK$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?e3.DeliverPolicy.New:e3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=BB($),W;try{W=await(await Q.consumers.get(bF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=aB0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(pB0()).pipeThrough(tB0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(bF,{filter:BB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var e3,_g$,fY6=($)=>{let Z;return()=>Z??=$()},bY6,xY6=86400000000000,yY6=120000000000,gY6=4294967296,hY6=500000,cY6,lY6,dY6;var fg$=w(()=>{t4();Qt0();sB0();oB0();f6();Vg$();e3=S(Iw(),1),_g$=S(Qu(),1),bY6=fY6(()=>q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));cY6=process.env.STREAM_ENCODE_TRACE==="1",lY6=process.env.DECOPILOT_STREAM_TRACE==="1";dY6=cY6?new vg$:null});function qP0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,PW(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 bg$=w(()=>{F8()});class J91{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}}function sY6($){return $ instanceof n7}function eY6($,Z){return Z-$>=rY6}class W91{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??nY6;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??tY6,X=this.options.itemIntervalMs??pY6,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()-Yp0),lt0);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()-aY6));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 Rp0(this.taskBoard,Y,Q),await Ip0(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!==E4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await xF(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),sY6(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()+oY6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),p8(Z,Y)}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(!eY6(KF(X),Date.now()))return;await EK($,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;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===E4,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}if(await XF$(J,Q))return!0;if(!Y)return!1;let W=await Promise.all(G.map(async(K)=>({...K,...await Ly(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(!gt0(W))return!1;return await Yw0(J,Q,{previewMatchesHead:ht0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var nY6=60000,pY6=300000,tY6=50,oY6=60000,rY6=900000,aY6=120000;var xg$=w(()=>{v9();Vt0();wB();Np();P9();B3();dt0();zK();Gp()});import{readdir as $G6,rm as MP0}from"fs/promises";import{join as kP0}from"path";async function SP0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-ZG6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await D_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await yg$($,Y,Z);else if(!Y.startsWith(".")){let G=kP0($,Y),J=await D_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await yg$(G,K,Z)}if((await D_(G)).length===0)await MP0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function yg$($,Z,X){let Q=0,Y=kP0($,Z),G=await D_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=kP0(Y,W),H=await D_(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 O=kP0(K,N);await MP0(O,{recursive:!0,force:!0}),Q++}}if((await D_(K)).length===0)await MP0(K,{recursive:!0,force:!0})}if((await D_(Y)).length===0)await MP0(Y,{recursive:!0,force:!0});return Q}async function D_($){try{return(await $G6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var ZG6=30;var K91=()=>{};import{DBOS as H91,SchedulerMode as XG6}from"@dbos-inc/dbos-sdk";async function YG6(){let $=[AJ(),E_(),eK()],Z=0;for(let X of $)try{Z+=await SP0(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 GG6($,Z){await H91.runStep(()=>YG6(),{name:"monitoringRetention"})}function hg$(){if(gg$)return;gg$=!0;let $=H91.registerWorkflow(GG6,{name:"monitoringRetentionWorkflow"});H91.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:QG6,mode:XG6.ExactlyOncePerIntervalWhenActive})}var QG6="23 4 * * *",gg$=!1;var ug$=w(()=>{YY();K91()});function cg$($){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 rG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await N41($.db,Z,Q.role);return Y.boundAuth=F41({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new QL(X,void 0,Y.boundAuth,Q.role,"self"),DB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var lg$=w(()=>{YL();tV()});function JG6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function KG6(){for(let $ of WG6)$()}function dg$($){let Z=[...F91.logs,$];F91={...F91,logs:Z.length>500?Z.slice(-500):Z},KG6()}function N91(){return HG6}var F91,WG6,HG6=!1;var U91=w(()=>{F91=JG6(),WG6=new Set});import{EventEmitter as FG6}from"events";var O91;var mg$=w(()=>{U91();O91=new FG6;O91.on("request",($)=>{dg$($)})});function ig$(){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 O=vh(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>vh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Q5.tool}${O}${Q5.dim}(${L})${Q5.reset}`}else if(U.method)G=`${Q5.dim}${vh(U.method)}${Q5.reset}`}}catch{}}let W=vh(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${Q5.mcp}${vh(F.slice(0,12))}\u2026${Q5.reset}`}else if(Y==="/mcp")W=`${Q5.mcp}/mcp${Q5.reset}`;else if(Y==="/mcp/registry")W=`${Q5.mcp}/mcp/registry${Q5.reset}`;let K=UG6(Q),H=J?"\u25C0":"\u2190";if(!N91())console.log(`${Q5.dim}${H}${Q5.reset} ${K}${Q}${Q5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=NG6(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!N91())console.log(`${Q5.dim}${B}${Q5.reset} ${K}${Q}${Q5.reset} ${W}${G?` ${G}`:""} ${U}${N}${Q5.reset} ${Q5.duration}${O}${Q5.reset}`);O91.emit("request",{method:Q,path:vh(Y),status:N,duration:F,timestamp:new Date})}}}var Q5,NG6=($)=>{if($>=500)return Q5.serverError;if($>=400)return Q5.clientError;if($>=300)return Q5.redirect;return Q5.ok},UG6=($)=>{return Q5[$]||Q5.reset},vh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var ng$=w(()=>{U91();mg$();Q5={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 rg$}from"crypto";import{mkdir as OG6,readdir as BG6,rm as pg$,stat as ag$}from"fs/promises";import{join as w91,relative as wG6}from"path";import{z as j$}from"zod";function eg$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return w91(DG6,Z)}function $h$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function B91($,Z){let X=eg$($),Q=$h$(Z);return w91(X,Q)}function LG6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return rg$("sha256",Y).update(G).digest("hex")}function og$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=LG6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${$h$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Zh$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${rg$("md5","etag").update(Q).digest("hex")}"`}async function Xh$($,Z,X,Q,Y){try{let G=await BG6($,{withFileTypes:!0});for(let J of G){let W=w91($,J.name),H=wG6(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 Xh$(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 ag$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Zh$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Qh$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:j$.object({prefix:j$.string().optional(),maxKeys:j$.number().optional().default(1000),continuationToken:j$.string().optional(),delimiter:j$.string().optional()}),outputSchema:j$.object({objects:j$.array(j$.object({key:j$.string(),size:j$.number(),lastModified:j$.string(),etag:j$.string()})),nextContinuationToken:j$.string().optional(),isTruncated:j$.boolean(),commonPrefixes:j$.array(j$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=eg$(Q);await OG6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Xh$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:j$.object({key:j$.string()}),outputSchema:j$.object({contentType:j$.string().optional(),contentLength:j$.number(),lastModified:j$.string(),etag:j$.string(),metadata:j$.record(j$.string(),j$.string()).optional()}),handler:async(Y)=>{let G=Y,J=B91(Q,G.key),W=await ag$(J);return{contentType:r41(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Zh$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:j$.object({key:j$.string(),expiresIn:j$.number().optional()}),outputSchema:j$.object({url:j$.string(),expiresIn:j$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??tg$;return{url:og$(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:j$.object({key:j$.string(),expiresIn:j$.number().optional(),contentType:j$.string().optional()}),outputSchema:j$.object({url:j$.string(),expiresIn:j$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??tg$;return{url:og$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:j$.object({key:j$.string()}),outputSchema:j$.object({success:j$.boolean(),key:j$.string()}),handler:async(Y)=>{let G=Y,J=B91(Q,G.key);try{return await pg$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:j$.object({keys:j$.array(j$.string()).max(1000)}),outputSchema:j$.object({deleted:j$.array(j$.string()),errors:j$.array(j$.object({key:j$.string(),message:j$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=B91(Q,K);try{await pg$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function D91($,Z,X){let Q=Qh$(Z,X),Y=new kW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:K5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:j$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:j$.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 rX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),XJ(Y,G,$,"mcp:dev-assets")}async function Yh$($,Z,X,Q){let G=Qh$(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 DG6="./data/assets",tg$=3600,sg$,Gh$;var Jh$=w(()=>{A$();Ry();C8();kl();eV();VX();Tz0();sg$=new U1;sg$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return D91($.req.raw,Z,Q)});Gh$=sg$});var Wh$={};N4(Wh$,{mountDevRoutes:()=>EG6});function EG6($,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 D91(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 Yh$(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",Gh$);let X=new U1;X.use("*",a3({mountPath:"/api/dev-assets"})),X.route("/",Az0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Kh$=w(()=>{C8();d41();Tz0();Jh$()});import{sql as jG6}from"kysely";import{randomUUID as Hh$}from"crypto";import{z as zG6}from"zod";async function AG6($){let Z=new Date().toISOString(),X=Hh$(),Q=u4.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:Hh$(),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 jG6`SELECT
2767
2767
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.231.0",
3
+ "version": "4.231.1",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c as L,b as A,j as r}from"./index-BtE9xOJO.js";import{I as R}from"./input-OTxGjzdJ.js";import{L as I}from"./label-9ox5ChzN.js";import{S as V,a as z,b as J,c as O,d as D}from"./select-BYD8DP0l.js";import{T as M}from"./textarea-BlRakKBh.js";import{T as U,U as X,V as $,J as q,X as G,a0 as H}from"./index-BxLWVBpr.js";import{s as F}from"./primitives-hxwNp5yr.js";import{u as Q}from"./use-autosave-Cv_GL0Fp.js";import"./tooltip-hkKkM6d5.js";import"./Check-CN5lQ_yK.js";import"./ChevronDown-DBEiDm9h.js";import"./ChevronUp-CEL6_M9V.js";import"./ArrowUp--6Ekz1d6.js";import"./chat-context-DT0RnHMC.js";import"./tab-id-Cn_cnWoy.js";import"./dialog-CKMBT4Ku.js";import"./X-C53dMiOT.js";import"./Copy01-DkwSwDwt.js";import"./hooks-CJM7m-AW.js";import"./use-mcp-client-2zMoQmIe.js";import"./auth-o9X3g3Nz.js";import"./decopilot-sse-pool-Cro6DfCu.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-TmWPOyQG.js";import"./use-ai-providers-Dj8GPJJV.js";import"./studio-tools-YCNXydG5.js";import"./use-decopilot-events-BAv8AsoP.js";import"./use-organization-settings-DCUf_6Aq.js";import"./automation-runs-kkbkf_AT.js";import"./agent-icon-DDwaDnrF.js";import"./AlertCircle-CDo5j2NW.js";import"./Tool01-BuycrV9c.js";import"./ArrowLeft-BEQmxCRK.js";import"./Tool02-D7H0aPJj.js";import"./XCircle-CdqNoxj5.js";import"./ArrowUpRight-BG4qOGX3.js";import"./TrendUp01-DyFHW2GP.js";import"./ZapSquare-CxrX0LdA.js";import"./Users03-8MeJ_48c.js";import"./CheckCircle-Cfat462Z.js";import"./ChevronRight-DrRosISv.js";import"./DotsVertical-QpPdzm3G.js";import"./Stars02-Bha198-A.js";import"./CpuChip01-DefrIYSa.js";import"./CreditCard01-CYW1Bbl1.js";import"./Globe01-CG3rDzdn.js";import"./Settings02-DALwtk4N.js";import"./Eye-CMpTUzT8.js";import"./FilterLines-td0JntiE.js";import"./Share07-BSWRoTXC.js";import"./Star01-2LtGpxEd.js";import"./Globe04-DUVAaifa.js";import"./SwitchHorizontal01-Jegjhv4n.js";import"./HardDrive-B6zE1xaj.js";import"./Key01-kOqfjpjX.js";import"./LayoutLeft-B8nFfzMd.js";import"./LinkExternal01-CfHHIM1i.js";import"./LogOut01-C5em-pvs.js";import"./Monitor01-6s7X62Pn.js";import"./Sun-TaLnM5LK.js";import"./Palette-CaC_GR6s.js";import"./Play-Cf5Y2W6n.js";import"./Plus-DzzwGJmK.js";import"./SearchLg-BOqytEiL.js";import"./SearchMd-BXzSPJ91.js";import"./Shield01-Ba97qYoB.js";import"./Stars01-CrpTFlIr.js";import"./Trash01-CQAX9TaW.js";import"./Upload01-BeVTOUDK.js";import"./User01-BTqWqYky.js";import"./Users01-CArGt19n.js";import"./XClose-mFLIAUIc.js";import"./Zap-tGvNHJ59.js";import"./useInfiniteQuery-DLQ1Mz7E.js";import"./use-infinite-scroll-CKaoDExD.js";import"./use-connection-CjpBiC-L.js";import"./card-BEnG-PZv.js";import"./sidebar-CafUqqWq.js";import"./use-mobile-DISBqUOM.js";import"./table-CqPGPqlr.js";import"./empty-state-DsP0e5vG.js";import"./use-members-DUZ4aG2f.js";import"./use-org-auth-client-LjCgDQWZ.js";import"./use-clock-tick-BgdpQ_7_.js";import"./use-automations-BhXAR7fS.js";import"./useSuspenseInfiniteQuery--WbX5qIr.js";import"./avatar-DE6bT5RQ.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-Def0lKy3.js";import"./monaco-editor-CgJhEMFP.js";import"./spinner-CzW3jlpY.js";import"./types-BMjOUgOU.js";import"./shell-layout-DKWMlZYq.js";import"./required-auth-layout-CJcqGPbw.js";import"./use-org-sso-CSlo-ATw.js";import"./integration-icon-C96gN1iP.js";import"./use-navigate-to-agent-2Fkh5W8W.js";import"./reusable-new-chat-CouMjkYR.js";import"./chart-XhrXCvPH.js";import"./index-DXe3gd19.js";import"./form-DONSzM82.js";import"./file-type-icon-DD_KZi1X.js";import"./drawer-C5SLuRyj.js";import"./collection-search-1WgXsLZV.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-D5YGqRll.js";import"./toggle-group-D1hjzcbF.js";import"./use-commerce-diagnostic-BuDi6VdV.js";import"./popover-D0eIqhDV.js";import"./self-tool-result-gwJCzUb1.js";import"./alert-dialog-D9vsRQQl.js";import"./extract-connection-data-CNsoq4og.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./use-debounced-value--rKcfop8.js";import"./authenticate-and-persist-oauth-B6kEBd4e.js";import"./mcp-oauth-DZD2Ygio.js";import"./track-Bza9dqNN.js";import"./toolbar-CosfoWro.js";import"./skeleton-CiNNqP_p.js";import"./github-repo-picker-CIYsmBJa.js";import"./use-mcp-tools-DPO_rzqT.js";import"./agent-capabilities-C4tLW0Za.js";import"./connection-card-BhNlJyO-.js";import"./use-registry-connections-CmsXd0Qk.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-Cvrwqzmj.js";import"./collection-tabs-D7jMnaq7.js";import"./badge-B8rrO3dx.js";import"./command-DdfVlw2c.js";import"./index-AHKSNViJ.js";import"./use-open-billing-url-In2da6_R.js";import"./select-model-DWuOVFpU.js";import"./checkbox-B_ZRfUEI.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-Dr5RvIB2.js";import"./cards-kz4en0kj.js";import"./dropdown-menu-BN18O6KB.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-Cg_BJ9bF.js";import"./use-capability-DiWZrbPk.js";import"./pt-BR-CLy76QW2.js";import"./switch-BzAl3abp.js";import"./use-debounced-autosave-Crnv6i6B.js";import"./index-CHqHegLV.js";import"./search-input-1J4nLKNo.js";import"./index-_EOTT3i-.js";import"./use-secrets-B-lCxBgH.js";import"./AreaChart-CcrFN9k7.js";import"./use-tags-BmBTSx_O.js";import"./get-initials-D-f_fDFw.js";import"./use-file-configs-B1YASq-9.js";import"./automation-list-row-CAN34Bz_.js";const W={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},Y={authors:"sandbox.recordEditor.titleAuthor"};function Hr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=A(),P=U(h);let b;t[0]!==w||t[1]!==K||t[2]!==P||t[3]!==h?(b={orgSlug:K,virtualMcpId:h,branch:w,packagePath:P},t[0]=w,t[1]=K,t[2]=P,t[3]=h,t[4]=b):b=t[4];const p=X(b);let k;t[5]!==f||t[6]!==a?(k=$(f,a),t[5]=f,t[6]=a,t[7]=k):k=t[7];const B=k;let v;t[8]!==g||t[9]!==a||t[10]!==p?(v=l=>{p.mutate({blockKey:g,data:G(g,a,l)})},t[8]=g,t[9]=a,t[10]=p,t[11]=v):v=t[11];const[e,S]=Q(B,v);let j;t[12]!==e||t[13]!==S?(j=(l,o)=>S({...e,[l]:o}),t[12]=e,t[13]=S,t[14]=j):j=t[14];const s=j,T=Y[a];let n;t[15]!==i||t[16]!==T?(n=i(T),t[15]=i,t[16]=T,t[17]=n):n=t[17];let c;t[18]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[18]=n,t[19]=c):c=t[19];let d;t[20]!==p.isError||t[21]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[20]=p.isError,t[21]=p.isPending,t[22]=d):d=t[22];let y;t[23]!==c||t[24]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[23]=c,t[24]=d,t[25]=y):y=t[25];const N=W[a];let x;if(t[26]!==e||t[27]!==s||t[28]!==i||t[29]!==N){let l;t[31]!==e||t[32]!==s||t[33]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(V,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(z,{id:o.key,className:"h-10 w-full",children:r.jsx(J,{placeholder:i(o.labelKey)})}),r.jsx(O,{children:(o.options??[]).map(m=>r.jsx(D,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(M,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(R,{id:o.key,value:F(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[31]=e,t[32]=s,t[33]=i,t[34]=l):l=t[34],x=N.map(l),t[26]=e,t[27]=s,t[28]=i,t[29]=N,t[30]=x}else x=t[30];let u;t[35]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[35]=x,t[36]=u):u=t[36];let E;return t[37]!==y||t[38]!==u?(E=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[37]=y,t[38]=u,t[39]=E):E=t[39],E}export{Hr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BDpIZFpz.js","assets/index-BtE9xOJO.js","assets/index-uptMkyg_.css","assets/Tool02-D7H0aPJj.js","assets/CheckCircle-Cfat462Z.js","assets/Settings02-DALwtk4N.js","assets/use-mcp-client-2zMoQmIe.js","assets/auth-o9X3g3Nz.js","assets/useInfiniteQuery-DLQ1Mz7E.js","assets/use-infinite-scroll-CKaoDExD.js","assets/studio-tools-YCNXydG5.js","assets/badge-B8rrO3dx.js","assets/input-OTxGjzdJ.js","assets/dropdown-menu-BN18O6KB.js","assets/Check-CN5lQ_yK.js","assets/ChevronRight-DrRosISv.js","assets/DotsVertical-QpPdzm3G.js","assets/table-CqPGPqlr.js","assets/toggle-group-D1hjzcbF.js","assets/use-view-mode-wzPv2u9-.js","assets/use-mobile-DISBqUOM.js","assets/FilterLines-td0JntiE.js","assets/Globe01-CG3rDzdn.js","assets/SearchMd-BXzSPJ91.js","assets/dialog-CKMBT4Ku.js","assets/X-C53dMiOT.js","assets/AlertCircle-CDo5j2NW.js","assets/Upload01-BeVTOUDK.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-D9vsRQQl.js","assets/card-BEnG-PZv.js","assets/Trash01-CQAX9TaW.js","assets/label-9ox5ChzN.js","assets/select-BYD8DP0l.js","assets/tooltip-hkKkM6d5.js","assets/ChevronDown-DBEiDm9h.js","assets/ChevronUp-CEL6_M9V.js","assets/switch-BzAl3abp.js","assets/textarea-BlRakKBh.js","assets/ArrowLeft-BEQmxCRK.js","assets/XCircle-CdqNoxj5.js","assets/checkbox-B_ZRfUEI.js","assets/Eye-CMpTUzT8.js","assets/LinkExternal01-CfHHIM1i.js","assets/use-copy-Def0lKy3.js","assets/Copy01-DkwSwDwt.js","assets/Key01-kOqfjpjX.js","assets/Plus-DzzwGJmK.js","assets/mcp-oauth-DZD2Ygio.js","assets/Play-Cf5Y2W6n.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,k as a,aF as o}from"./index-BtE9xOJO.js";import{R as m}from"./require-capability-CklGr71g.js";import"./use-capability-DiWZrbPk.js";import"./access-gate-NmBYD48o.js";import"./capability-load-error-CpH6_Tj-.js";const n=s.lazy(()=>o(()=>import("./registry-layout-BDpIZFpz.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BDpIZFpz.js","assets/index-BtE9xOJO.js","assets/index-uptMkyg_.css","assets/Tool02-D7H0aPJj.js","assets/CheckCircle-Cfat462Z.js","assets/Settings02-DALwtk4N.js","assets/use-mcp-client-2zMoQmIe.js","assets/auth-o9X3g3Nz.js","assets/useInfiniteQuery-DLQ1Mz7E.js","assets/use-infinite-scroll-CKaoDExD.js","assets/studio-tools-YCNXydG5.js","assets/badge-B8rrO3dx.js","assets/input-OTxGjzdJ.js","assets/dropdown-menu-BN18O6KB.js","assets/Check-CN5lQ_yK.js","assets/ChevronRight-DrRosISv.js","assets/DotsVertical-QpPdzm3G.js","assets/table-CqPGPqlr.js","assets/toggle-group-D1hjzcbF.js","assets/use-view-mode-wzPv2u9-.js","assets/use-mobile-DISBqUOM.js","assets/FilterLines-td0JntiE.js","assets/Globe01-CG3rDzdn.js","assets/SearchMd-BXzSPJ91.js","assets/dialog-CKMBT4Ku.js","assets/X-C53dMiOT.js","assets/AlertCircle-CDo5j2NW.js","assets/Upload01-BeVTOUDK.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-D9vsRQQl.js","assets/card-BEnG-PZv.js","assets/Trash01-CQAX9TaW.js","assets/label-9ox5ChzN.js","assets/select-BYD8DP0l.js","assets/tooltip-hkKkM6d5.js","assets/ChevronDown-DBEiDm9h.js","assets/ChevronUp-CEL6_M9V.js","assets/switch-BzAl3abp.js","assets/textarea-BlRakKBh.js","assets/ArrowLeft-BEQmxCRK.js","assets/XCircle-CdqNoxj5.js","assets/checkbox-B_ZRfUEI.js","assets/Eye-CMpTUzT8.js","assets/LinkExternal01-CfHHIM1i.js","assets/use-copy-Def0lKy3.js","assets/Copy01-DkwSwDwt.js","assets/Key01-kOqfjpjX.js","assets/Plus-DzzwGJmK.js","assets/mcp-oauth-DZD2Ygio.js","assets/Play-Cf5Y2W6n.js"])))=>i.map(i=>d[i]);
2
- import{c as m,d as n,f as c,j as t,k as f,r as l,aF as p}from"./index-BtE9xOJO.js";import{R as u}from"./require-capability-CklGr71g.js";import"./use-capability-DiWZrbPk.js";import"./access-gate-NmBYD48o.js";import"./capability-load-error-CpH6_Tj-.js";const g=l.lazy(()=>p(()=>import("./registry-layout-BDpIZFpz.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(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{j as default};
@@ -1 +0,0 @@
1
- import{I as u}from"./use-infinite-scroll-CKaoDExD.js";import{e6 as i}from"./index-BtE9xOJO.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-CKaoDExD.js";import{e6 as u,b3 as n}from"./index-BtE9xOJO.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};