decocms 4.294.2 → 4.294.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/dist/client/assets/{AlertCircle-qZDg2e-H.js → AlertCircle-DLj-rBLn.js} +1 -1
  2. package/dist/client/assets/{AreaChart-D1rWRcUm.js → AreaChart-9FGrcqfj.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-CatEVOI7.js → ArrowLeft-Bz-VyTFg.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-DMDdMhAA.js → ArrowUp-C9wijSHC.js} +1 -1
  5. package/dist/client/assets/{Check-C5RWnyNL.js → Check-CTKt7DPp.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-V0GvWvtd.js → CheckCircle-DOOBCpT9.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-CeGZsBnS.js → ChevronDown-DCBuHd0m.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-Dh8_6pj1.js → ChevronRight-CO9K42kJ.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-Im3Lz_4E.js → ChevronSelectorVertical-Iu37Jtvz.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-DCx43qHY.js → ChevronUp-D6fZUTvM.js} +1 -1
  11. package/dist/client/assets/{Copy01-DhfruII6.js → Copy01-C-9zesbF.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-Cy0s6gAf.js → CreditCard01-CKM-Jz3x.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-B39kxqbi.js → DotsVertical-CSkWlHZt.js} +1 -1
  14. package/dist/client/assets/{Download01-C1FmC7JV.js → Download01-DYsmBrAR.js} +1 -1
  15. package/dist/client/assets/{Eye-m8QZKf2Y.js → Eye-Bf1344cz.js} +1 -1
  16. package/dist/client/assets/{FilterLines-BBF-m2ZJ.js → FilterLines-D4VZo9JH.js} +1 -1
  17. package/dist/client/assets/{Globe01-C2F_PPuX.js → Globe01-Mlkbzavy.js} +1 -1
  18. package/dist/client/assets/{Globe04-CMCnFTSr.js → Globe04-CcZwBZDM.js} +1 -1
  19. package/dist/client/assets/{HardDrive-DmqNZKD8.js → HardDrive-rv6yXW9l.js} +1 -1
  20. package/dist/client/assets/{Key01-DbCU9LZF.js → Key01-C71Bncy8.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-kQnRXU4w.js → LinkExternal01-Bd5qXJx-.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-D5OpQeQe.js → LockUnlocked01-xUxyOLI6.js} +1 -1
  23. package/dist/client/assets/{LogOut01-BePTyd5L.js → LogOut01-CFPuWi87.js} +1 -1
  24. package/dist/client/assets/{Monitor01-DPqlemzQ.js → Monitor01-Db3wK3MU.js} +1 -1
  25. package/dist/client/assets/{Palette-DzT0S9Gl.js → Palette-Wf7ieWzf.js} +1 -1
  26. package/dist/client/assets/{Play-Btu3v5FX.js → Play-CTzOPD4i.js} +1 -1
  27. package/dist/client/assets/{Plus-B7vTVmKH.js → Plus-C20besyI.js} +1 -1
  28. package/dist/client/assets/{SearchLg-CAAIuTYj.js → SearchLg-BoAF9n4o.js} +1 -1
  29. package/dist/client/assets/{SearchMd-COQJLRw-.js → SearchMd-DbgBw9S_.js} +1 -1
  30. package/dist/client/assets/{Settings02-xEBQxvJD.js → Settings02-DVdySYD4.js} +1 -1
  31. package/dist/client/assets/{Share07-CLkT7SlV.js → Share07-TLJEQyW1.js} +1 -1
  32. package/dist/client/assets/{Shield01-C2USnj9G.js → Shield01-CVEumGx3.js} +1 -1
  33. package/dist/client/assets/{Stars01-DkoqcM4j.js → Stars01-BLlf5jfX.js} +1 -1
  34. package/dist/client/assets/{Stars02-4GZ9SjIq.js → Stars02-DSl09LS3.js} +1 -1
  35. package/dist/client/assets/{Sun-D0KW7MLF.js → Sun-D8Cz2KrR.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-DwxljZOI.js → SwitchHorizontal01-DxrMcxk-.js} +1 -1
  37. package/dist/client/assets/{Tool01-tn2PFBHQ.js → Tool01-C-r-Zf-I.js} +1 -1
  38. package/dist/client/assets/{Tool02-BalBR7uK.js → Tool02-CQfhYBA-.js} +1 -1
  39. package/dist/client/assets/{Trash01-CwqV1gzD.js → Trash01-BaF7-rQA.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-6TR_k_0Y.js → TrendUp01-DrIbuukS.js} +1 -1
  41. package/dist/client/assets/{Upload01-mqAHBbZV.js → Upload01-Eo8Y8gwt.js} +1 -1
  42. package/dist/client/assets/{User01-DWaPmCwS.js → User01-BmKTu46m.js} +1 -1
  43. package/dist/client/assets/{UserSquare-ClSByuB-.js → UserSquare-D5oHibl1.js} +1 -1
  44. package/dist/client/assets/{Users01-CFDNbxgJ.js → Users01-DdYj89q4.js} +1 -1
  45. package/dist/client/assets/{Users03-BT3gPqQL.js → Users03-BvmFpFso.js} +1 -1
  46. package/dist/client/assets/{XCircle-BOrCVYLf.js → XCircle-BLGxEUt7.js} +1 -1
  47. package/dist/client/assets/{XClose-DMSeuF30.js → XClose-KYQfxNAH.js} +1 -1
  48. package/dist/client/assets/{YAxis-CjueDU_j.js → YAxis-BzTUlY5S.js} +1 -1
  49. package/dist/client/assets/{Zap-CwYGo5D6.js → Zap-DSuzhrFd.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-DkKtoQ7W.js → ZapSquare-B03SIXBG.js} +1 -1
  51. package/dist/client/assets/{access-gate-DXIgG9H-.js → access-gate-DXpndi2J.js} +1 -1
  52. package/dist/client/assets/{agent-icon-C9_7Msf7.js → agent-icon-LbhnjHwi.js} +1 -1
  53. package/dist/client/assets/{agents-list-CrYr2LdT.js → agents-list-BWtnoYa9.js} +1 -1
  54. package/dist/client/assets/{ai-providers-9B822Ytz.js → ai-providers-C9TvV_lY.js} +1 -1
  55. package/dist/client/assets/{alert-DeOSO_Ec.js → alert-Brn68O_I.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-BWONJIzw.js → alert-dialog-CDXDBEVz.js} +1 -1
  57. package/dist/client/assets/{api-keys-BHGQjiZT.js → api-keys-C0YiI_0_.js} +1 -1
  58. package/dist/client/assets/{app-editor-GCmyfLNC.js → app-editor-ByjOzHF0.js} +1 -1
  59. package/dist/client/assets/{auth-BqxUQw-v.js → auth-CMC5pcXA.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-q5v2tPZU.js → auth-catchall-C1obS0DM.js} +1 -1
  61. package/dist/client/assets/{auth-entry-Dx-_gZ2g.js → auth-entry-L4MYHhmA.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-YdeWuYN1.js → auth-split-layout-p8RpZGj-.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-DRVU48ic.js → authenticate-and-persist-oauth-B1awg6G_.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-BMiRTeOK.js → automation-list-row-DSW4dqyo.js} +1 -1
  65. package/dist/client/assets/{automation-runs-CzcGADVN.js → automation-runs-DwCd_zFP.js} +1 -1
  66. package/dist/client/assets/{automations-DDnrk0LJ.js → automations-C4N4GC8F.js} +1 -1
  67. package/dist/client/assets/{avatar-1XE5IjoT.js → avatar-DKKheiwZ.js} +1 -1
  68. package/dist/client/assets/{badge-CXIV4O-0.js → badge-BCfyeFAT.js} +1 -1
  69. package/dist/client/assets/{block-document-BufBxpL6.js → block-document-D9NoKYRN.js} +1 -1
  70. package/dist/client/assets/{breadcrumb-FUX_wv57.js → breadcrumb-DwyVLr-T.js} +1 -1
  71. package/dist/client/assets/{buckets-DQPGFSM3.js → buckets-NENIH_rY.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-CNgfZPUK.js → bulk-category-panel-CWOO5lMW.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-BKGEHfpt.js → capability-load-error-Bu5AJKz_.js} +1 -1
  74. package/dist/client/assets/{cards-DJSm_nho.js → cards-AP5XpAV6.js} +1 -1
  75. package/dist/client/assets/{category-editor-ByRsnfkE.js → category-editor-CAPnyo_p.js} +1 -1
  76. package/dist/client/assets/{chart-Bgue_7DQ.js → chart-D1jgldPO.js} +1 -1
  77. package/dist/client/assets/{chat-context-C-BdNZCf.js → chat-context-DQqAI1Uh.js} +1 -1
  78. package/dist/client/assets/{checkbox-DvC3nAT5.js → checkbox-BdDEdRtX.js} +1 -1
  79. package/dist/client/assets/{choose-editor-CFBXNqp3.js → choose-editor-d1jVshXq.js} +1 -1
  80. package/dist/client/assets/{cli-auth-success-CUav6RQy.js → cli-auth-success-DZNcV7RU.js} +1 -1
  81. package/dist/client/assets/{collection-detail-LByozjyF.js → collection-detail-DCdfqXH6.js} +1 -1
  82. package/dist/client/assets/{collection-display-button-D4ItaSc8.js → collection-display-button-BkVeJ-Ht.js} +1 -1
  83. package/dist/client/assets/{collection-search-DBnGb4Zg.js → collection-search-swq3mYpH.js} +1 -1
  84. package/dist/client/assets/{collection-table-wrapper-DCUZlFkx.js → collection-table-wrapper-BFeQBjk_.js} +1 -1
  85. package/dist/client/assets/{collection-tabs-CAUEdmSI.js → collection-tabs-B31Xr--3.js} +1 -1
  86. package/dist/client/assets/{command-Ct_4mokr.js → command-CtzJnf3P.js} +1 -1
  87. package/dist/client/assets/{commerce-onboarding-C2UgJ-TR.js → commerce-onboarding-B6IdGbvD.js} +1 -1
  88. package/dist/client/assets/{config-DG69PD1X.js → config-CbfHHHdK.js} +1 -1
  89. package/dist/client/assets/{connect-DLRRtQi0.js → connect-28y6QTSQ.js} +1 -1
  90. package/dist/client/assets/{connection-Dg1mnPcO.js → connection-BuSysa2G.js} +1 -1
  91. package/dist/client/assets/{connection-card-CgUgSGsh.js → connection-card-BllYSe_U.js} +1 -1
  92. package/dist/client/assets/{connection-detail-CAhXUEiD.js → connection-detail-_XYLLvoB.js} +1 -1
  93. package/dist/client/assets/{connection-form-helpers-gU6TF210.js → connection-form-helpers-C6PcVFY-.js} +1 -1
  94. package/dist/client/assets/{connections-tQk1fh_m.js → connections-Cu1bTJAX.js} +1 -1
  95. package/dist/client/assets/{decopilot-sse-pool-DDszDk42.js → decopilot-sse-pool-CvmARxhG.js} +1 -1
  96. package/dist/client/assets/{dialog-DYg0AoO0.js → dialog-D4htx8Dz.js} +1 -1
  97. package/dist/client/assets/{domain-settings-xR7ZmjBb.js → domain-settings-DEIyOLUp.js} +1 -1
  98. package/dist/client/assets/{drawer-DrqU_8fl.js → drawer-CuMUVmYp.js} +1 -1
  99. package/dist/client/assets/{dropdown-menu-BGreHXNg.js → dropdown-menu-BE_ym3Aq.js} +1 -1
  100. package/dist/client/assets/{empty-state-DNKOHljA.js → empty-state-DANnu2Dm.js} +1 -1
  101. package/dist/client/assets/{extract-connection-data-BI_gbc3h.js → extract-connection-data-BIGQQYkp.js} +1 -1
  102. package/dist/client/assets/{file-explorer-D9_-DWtI.js → file-explorer-DyEzRtBa.js} +1 -1
  103. package/dist/client/assets/{file-type-icon-Cr_jiDFe.js → file-type-icon-BenR9kqm.js} +1 -1
  104. package/dist/client/assets/{form-DUYaeuN1.js → form-DxT0qd-2.js} +1 -1
  105. package/dist/client/assets/{general-CVMzbMNL.js → general-BgW26EXn.js} +1 -1
  106. package/dist/client/assets/{github-repo-picker-BjTlfZRh.js → github-repo-picker-DuwsdpzE.js} +1 -1
  107. package/dist/client/assets/{hooks-DvV-YCly.js → hooks-rNJx2Yiz.js} +1 -1
  108. package/dist/client/assets/{index-Bk7mmffp.js → index-BNizG_r4.js} +1 -1
  109. package/dist/client/assets/{index-DHLutK6v.js → index-BWXyDl1J.js} +3 -3
  110. package/dist/client/assets/{index-pYJ2-T-r.js → index-BXn0NwIo.js} +1 -1
  111. package/dist/client/assets/{index-RXRS2M8q.js → index-CdvEA4gL.js} +1 -1
  112. package/dist/client/assets/{index-CXtbLiKC.js → index-ChcGUNSF.js} +1 -1
  113. package/dist/client/assets/{index-CxsfTXSQ.js → index-DeW3li9q.js} +1 -1
  114. package/dist/client/assets/{index-BOALwCeh.js → index-Dstu6oca.js} +1 -1
  115. package/dist/client/assets/{index-BWVLjCpL.js → index-eyTxS6Bz.js} +6 -6
  116. package/dist/client/assets/{index-CgA3qf5E.js → index-ke_XwP2X.js} +1 -1
  117. package/dist/client/assets/{index-redirect-CUFx5Ci3.js → index-redirect-BJVKALX7.js} +1 -1
  118. package/dist/client/assets/{infra-billing-C7HR_T7J.js → infra-billing-CcvA504_.js} +1 -1
  119. package/dist/client/assets/{input-zNG5Uz1T.js → input-BmuxVBRq.js} +1 -1
  120. package/dist/client/assets/{integration-icon-CVsQlE88.js → integration-icon-BIrESC5L.js} +1 -1
  121. package/dist/client/assets/{invite-member-dialog-BocroOxJ.js → invite-member-dialog-DIItbiti.js} +1 -1
  122. package/dist/client/assets/{label-CEq9oqa2.js → label-CpzYUQhx.js} +1 -1
  123. package/dist/client/assets/{layout-DFoH_xu7.js → layout-DUzsu4c4.js} +1 -1
  124. package/dist/client/assets/{login-DQ-omlrv.js → login-RKrGsWpi.js} +1 -1
  125. package/dist/client/assets/{mcp-oauth-DGSZYZtZ.js → mcp-oauth-fsNn1czb.js} +1 -1
  126. package/dist/client/assets/{members-1vFWUjqy.js → members-BrDpNquF.js} +1 -1
  127. package/dist/client/assets/{monaco-editor-BIUU4YtT.js → monaco-editor-CMqzV6OC.js} +1 -1
  128. package/dist/client/assets/{monitoring-stats-row-Drb7zrQ3.js → monitoring-stats-row-B-2cTzBQ.js} +1 -1
  129. package/dist/client/assets/{multi-select-CeA0LiDA.js → multi-select-BQDrB1yk.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-BLBnsV0m.js → oauth-callback-Ba4XCWyw.js} +1 -1
  131. package/dist/client/assets/{oauth-callback-ai-provider-_ZIgbe1k.js → oauth-callback-ai-provider-JZoeFXxW.js} +1 -1
  132. package/dist/client/assets/{onboarding-DHEpPKxX.js → onboarding-Bk8dPUg3.js} +1 -1
  133. package/dist/client/assets/{org-layout-CZwey9tp.js → org-layout-Di5sK1cd.js} +1 -1
  134. package/dist/client/assets/{organization-choice-CinweDu8.js → organization-choice-CHzFbea4.js} +1 -1
  135. package/dist/client/assets/{orgs-Cewt5f_m.js → orgs-CKI_JjMZ.js} +1 -1
  136. package/dist/client/assets/{page-seo-form-DCXZwoTq.js → page-seo-form-DC6yxtgW.js} +1 -1
  137. package/dist/client/assets/{popover-CPDUuAsK.js → popover-3-nXGxsG.js} +1 -1
  138. package/dist/client/assets/{post-calendar-B2MLz9zN.js → post-calendar-_RxbEjvs.js} +1 -1
  139. package/dist/client/assets/{post-editor-xPbcpUyS.js → post-editor-htgRFHsC.js} +1 -1
  140. package/dist/client/assets/{primitives-bdzFl9KQ.js → primitives-By-oabkM.js} +1 -1
  141. package/dist/client/assets/{profile-DRVuFWo1.js → profile-itQSWHS0.js} +1 -1
  142. package/dist/client/assets/{project-app-view-C0-tH6m6.js → project-app-view-BtD2dHc2.js} +1 -1
  143. package/dist/client/assets/{prompts-DHayAFpv.js → prompts-B4jycXmo.js} +1 -1
  144. package/dist/client/assets/record-editor-DmWjrMIo.js +1 -0
  145. package/dist/client/assets/{redirect-editor-OElGvzsY.js → redirect-editor-CyQNXT5k.js} +1 -1
  146. package/dist/client/assets/registry-BokCitrd.js +2 -0
  147. package/dist/client/assets/{registry-layout-BTzECwAf.js → registry-layout-BjtKfm0C.js} +1 -1
  148. package/dist/client/assets/{reports-BlhyDDdZ.js → reports-D2AnuGQl.js} +1 -1
  149. package/dist/client/assets/{require-capability-BJjD7GXa.js → require-capability-DYqEh_0t.js} +1 -1
  150. package/dist/client/assets/{required-auth-layout-Bi3hMcfQ.js → required-auth-layout-DPe5oune.js} +1 -1
  151. package/dist/client/assets/{reset-password-BLXOXnD3.js → reset-password-BcbVGV-U.js} +1 -1
  152. package/dist/client/assets/{review-settings-0bpnzbvB.js → review-settings-DET5Awcp.js} +1 -1
  153. package/dist/client/assets/{roles-C9DLuLWB.js → roles-Cm1qg0ow.js} +1 -1
  154. package/dist/client/assets/{scroll-area-Dw0578rC.js → scroll-area-BsxuvxbS.js} +1 -1
  155. package/dist/client/assets/{search-input-lOvS7ZZY.js → search-input-i6XUS8wH.js} +1 -1
  156. package/dist/client/assets/{secrets-DEtSas2W.js → secrets-DmB_3wh4.js} +1 -1
  157. package/dist/client/assets/{sections-editor-DDSHgrQf.js → sections-editor-CQaXh0aN.js} +1 -1
  158. package/dist/client/assets/{select-W8jorDji.js → select-OkaoLf52.js} +1 -1
  159. package/dist/client/assets/{select-model-CVJuTB71.js → select-model-DQ1JGbZ1.js} +1 -1
  160. package/dist/client/assets/{self-tool-result-DYCZ2dxI.js → self-tool-result-_Gq4fS8Q.js} +1 -1
  161. package/dist/client/assets/{seo-editor-CqSjFrJe.js → seo-editor-D3_wyic8.js} +1 -1
  162. package/dist/client/assets/{settings-layout-Cj60dDE0.js → settings-layout-ClrVUhfB.js} +1 -1
  163. package/dist/client/assets/{shell-controls-CcajpdEy.js → shell-controls-DkHGCWDm.js} +1 -1
  164. package/dist/client/assets/{shell-layout-BbKgiGKQ.js → shell-layout-H_tjyvHd.js} +1 -1
  165. package/dist/client/assets/{spinner-DEaGcbnH.js → spinner-BNsOVOLB.js} +1 -1
  166. package/dist/client/assets/{sso-DFyPw3S-.js → sso-CVRSygMq.js} +1 -1
  167. package/dist/client/assets/{store-B-DY1jsG.js → store-EFK86dJx.js} +1 -1
  168. package/dist/client/assets/store-registry-CAgXmIVJ.js +2 -0
  169. package/dist/client/assets/{super-agent-icon-DxowWKwv.js → super-agent-icon-uUxotzmO.js} +1 -1
  170. package/dist/client/assets/{switch-BsAR0Ue8.js → switch-jAw5NRFm.js} +1 -1
  171. package/dist/client/assets/{synced-repos-BxJ8BZWX.js → synced-repos-DHWcDJ5i.js} +1 -1
  172. package/dist/client/assets/{table-RKi74_kY.js → table-DSRHVWxU.js} +1 -1
  173. package/dist/client/assets/{tabs-DFRRVuh7.js → tabs-CkF_fW0Q.js} +1 -1
  174. package/dist/client/assets/{task-board-D9PHUZff.js → task-board-DmX2VpFs.js} +1 -1
  175. package/dist/client/assets/{tasks-CiijDgSs.js → tasks-C6LaWTXG.js} +1 -1
  176. package/dist/client/assets/{textarea-XbuS70jj.js → textarea-DzCWtryj.js} +1 -1
  177. package/dist/client/assets/{toggle-group-WZyFFujP.js → toggle-group-hvwloSYQ.js} +1 -1
  178. package/dist/client/assets/{toolbar-CmaLqa3-.js → toolbar-D9gkmlH9.js} +1 -1
  179. package/dist/client/assets/{track-BFh4WctH.js → track-CwWn2JFQ.js} +1 -1
  180. package/dist/client/assets/{types-CrdXjhQP.js → types-D8IG_8eU.js} +1 -1
  181. package/dist/client/assets/{use-ai-providers-WmO5B1wa.js → use-ai-providers-DZwpIJ4W.js} +1 -1
  182. package/dist/client/assets/{use-api-keys-CHuWewKt.js → use-api-keys-D39Ow3Yy.js} +1 -1
  183. package/dist/client/assets/{use-automations-g--nS4Go.js → use-automations-D--Rxx-_.js} +1 -1
  184. package/dist/client/assets/{use-autosave-BsqWx81g.js → use-autosave-BDzRVdw8.js} +1 -1
  185. package/dist/client/assets/{use-connection-D8j2CnOC.js → use-connection-tOCjDBfx.js} +1 -1
  186. package/dist/client/assets/{use-copy-lK-vhEre.js → use-copy-ICpw0Yw-.js} +1 -1
  187. package/dist/client/assets/{use-create-virtual-mcp-Bdpos1w0.js → use-create-virtual-mcp-DKiTnBa-.js} +1 -1
  188. package/dist/client/assets/{use-debounced-autosave-DsCulVkO.js → use-debounced-autosave-C706dtM7.js} +1 -1
  189. package/dist/client/assets/{use-debounced-value-D5wCJf5h.js → use-debounced-value-DBMZQqKo.js} +1 -1
  190. package/dist/client/assets/{use-decopilot-events-CEhAvB_E.js → use-decopilot-events-DFaxDB0Z.js} +1 -1
  191. package/dist/client/assets/{use-delete-connection-BAty9GWK.js → use-delete-connection-DY1dO96h.js} +1 -1
  192. package/dist/client/assets/{use-deployment-admin-CD-qM4Qw.js → use-deployment-admin-CwPi-zHy.js} +1 -1
  193. package/dist/client/assets/{use-destination-route-BMJNYrmL.js → use-destination-route-C8wZaTLq.js} +1 -1
  194. package/dist/client/assets/{use-file-configs-CEny8PB8.js → use-file-configs-rXyGhpyn.js} +1 -1
  195. package/dist/client/assets/{use-infinite-scroll-DzHJHyr0.js → use-infinite-scroll-BUgjJwY5.js} +1 -1
  196. package/dist/client/assets/{use-join-requests-z_I5qiFl.js → use-join-requests-CbCMIasb.js} +1 -1
  197. package/dist/client/assets/{use-mcp-auth-status-dyqIaOq0.js → use-mcp-auth-status-CyITsP1y.js} +1 -1
  198. package/dist/client/assets/{use-mcp-client-Bac4vccq.js → use-mcp-client-DHZ5WVmn.js} +1 -1
  199. package/dist/client/assets/{use-mcp-tools-FenH0JaE.js → use-mcp-tools-C69l20dV.js} +1 -1
  200. package/dist/client/assets/{use-members-_2HCzEHc.js → use-members-CAd4YLUd.js} +1 -1
  201. package/dist/client/assets/{use-navigate-to-agent-yAkGdje4.js → use-navigate-to-agent-BWgdcI3Z.js} +1 -1
  202. package/dist/client/assets/{use-org-auth-client-Cb5lYh1t.js → use-org-auth-client-DPBNI0km.js} +1 -1
  203. package/dist/client/assets/{use-org-repo-syncs-DbzFw6wJ.js → use-org-repo-syncs-Df_iQEGc.js} +1 -1
  204. package/dist/client/assets/{use-org-sso-cefqXe6X.js → use-org-sso-Y-cX0M9u.js} +1 -1
  205. package/dist/client/assets/{use-organization-roles-DA6OSxjH.js → use-organization-roles-Cazh8-rd.js} +1 -1
  206. package/dist/client/assets/{use-organization-settings-BsgcrCz-.js → use-organization-settings-CGbImq1L.js} +1 -1
  207. package/dist/client/assets/{use-panel-navigate-C8-xot4V.js → use-panel-navigate-CzBWJmh4.js} +1 -1
  208. package/dist/client/assets/{use-registry-connections-BoC6e9Ko.js → use-registry-connections--wEDOuCo.js} +1 -1
  209. package/dist/client/assets/{use-secrets-CNOFekf-.js → use-secrets-BUOK8Q3X.js} +1 -1
  210. package/dist/client/assets/{use-section-preview-base-CFAiIdAN.js → use-section-preview-base-CQ_HgNgO.js} +1 -1
  211. package/dist/client/assets/{use-status-sounds-CdtGOM4G.js → use-status-sounds-BcDDyChz.js} +1 -1
  212. package/dist/client/assets/{use-tags-CnmdA4eJ.js → use-tags-DQhkcWVg.js} +1 -1
  213. package/dist/client/assets/{use-view-mode-DHrNQrCI.js → use-view-mode-DyvonuSr.js} +1 -1
  214. package/dist/client/assets/{use-virtual-mcp-X7MaI4-V.js → use-virtual-mcp-zkag_-cI.js} +1 -1
  215. package/dist/client/assets/useInfiniteQuery-CHJpyz-t.js +1 -0
  216. package/dist/client/assets/useSuspenseInfiniteQuery-uqFTRGN7.js +1 -0
  217. package/dist/client/assets/{users-CNOqKONO.js → users-DBLID0_X.js} +1 -1
  218. package/dist/client/assets/{variant-calendar-DzbjSxwP.js → variant-calendar-pfbXNZPy.js} +1 -1
  219. package/dist/client/assets/{view-mode-toggle-C_beZllv.js → view-mode-toggle-ChPfg34r.js} +1 -1
  220. package/dist/client/index.html +1 -1
  221. package/dist/server/cli.js +1 -1
  222. package/dist/server/server.js +1 -1
  223. package/package.json +1 -1
  224. package/dist/client/assets/record-editor-BabiokFj.js +0 -1
  225. package/dist/client/assets/registry-Bpp0Gik6.js +0 -2
  226. package/dist/client/assets/store-registry-CW8CS7Je.js +0 -2
  227. package/dist/client/assets/useInfiniteQuery-CP11XfQS.js +0 -1
  228. package/dist/client/assets/useSuspenseInfiniteQuery-vPet_vok.js +0 -1
@@ -2920,7 +2920,7 @@ Respond with the structured verdict and a short reason.`,dc$;var ic$=D(()=>{D4()
2920
2920
  ${G.join(`
2921
2921
  `)}`:Y}function UN6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2922
2922
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var ql$=200,QN6=12,GN6,WN6=300,w71=3;var E71=D(()=>{hD();FT0();GN6={aheadBy:0,behindBy:0,files:[]}});function ON6($){if(!$||$.includes(".."))return!1;return BN6.test($)}function kl$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!ON6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Vl$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var BN6;var Sl$=D(()=>{BN6=/^[\w./@-]+$/});function Us($,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 Cl$($,Z,X,Q){if(!Q.connectionId)throw new Kv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Kv(G9);await TO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:G9;throw new Kv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await IK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=E5$(H instanceof Error?H.message:String(H));throw N?new Kv(U):H}),K=lu($),F=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(!F.ok){let H=await AO(F,DN6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var DN6=10485760,Kv;var j71=D(()=>{XJ();sA0();Jn();Bi0();Ty();Kv=class Kv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function wN6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!LN6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Fv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(jN6)])}async function PN6($,Z){let X=$.var.studioContext,Q=$J(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=UC(J?.metadata?.runtime);if(W)return W;let K=mO0(Z.virtualMcpMetadata),F=K==="cms"?await $71(X,{claimName:Z.claimName}):"alive",H=K==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&K==="cms");if(N&&J)bn(X,J.id,H);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:N});return H}async function AN6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await $Q($.var.studioContext)}catch{return null}}function Hv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function nu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Us(Z,X);if(!Y)throw new M4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return eA0(Q,G.id,Y)}function z71($,Z){if(Z instanceof YA0)return $.json({error:Z.message},429,{...P5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof M4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,P5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,P5)}async function fl$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function bl$($){try{let Z=await nu($),X=await HT0(Z,$.get("vmClaim").branch);return $.json(X,200,P5)}catch(Z){return z71($,Z)}}function Bs($,Z){let Q=(BT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return BT0.set($,Y),Y.finally(()=>{if(BT0.get($)===Y)BT0.delete($)}),Q}async function tZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,P5);let Q=X?.runner??Hv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...P5}})}}let O=await B.text(),L=X?.redactRepoDir?TN6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...P5}})};try{if(H){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(H.aborted)return w(H.reason);H.addEventListener("abort",()=>w(H.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function TN6($){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 OT0($,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 RN6($){return xl$.includes($)}var LN6,_l$=524288,EN6=65536,jN6=1e4,vl$=2000,zN6,BT0,P5,xl$,yl$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",zN6),$.post("/:virtualMcpId/:branch/write",(X)=>tZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>tZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>tZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>tZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>tZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>tZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>tZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Fv(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 tZ(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 tZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>tZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>tZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!RN6(Q))return X.json({error:`step must be one of: ${xl$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await $71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await AN6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,P5);if(Q==="start"){let J=t(X.var.studioContext),W=Py(Y.virtualMcpMetadata);try{await J70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let F=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return tZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return lN(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 yc$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return bl$(X);return Z(X)});let Z=(X)=>tZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(vl$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return bl$(X);return tZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(vl$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await nu(X),J=await NT0(G,Q.branch,Y.base);return X.json(J,200,P5)}catch(Y){return z71(X,Y)}return tZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,P5);let Q=Hv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Bs(Y,async()=>{try{await Z71(W,Q,Y);let K=Us(G,J);if(K)await Cl$(W,Q,Y,K)}catch(K){if(K instanceof Kv)return X.json({error:K.message},403,P5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,P5)}return tZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Bs(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,P5);try{let J=await nu(X);return await Ml$(J,Q.branch,G),X.json({ok:!0},200,P5)}catch(J){let W=J instanceof M4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,P5)}});return Bs(Q.claimName,()=>tZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Bs(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await nu(X),F=W.base??await K.getDefaultBranch();return await UT0(K,Q.branch,F),X.json({ok:!0},200,P5)}catch(W){return z71(X,W)}});let Y=Hv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Bs(G,async()=>{try{await Z71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,P5)}return tZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",p5({maxSize:_l$,onError:(X)=>X.json({error:"Payload too large"},413,P5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Hv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=Y71(H)&&U?[H,N]:Y?await Promise.all([OT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),OT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await nu(X);return Promise.all([HT0(w,Q.branch),NT0(w,Q.branch)])})(),L=await lc$(K,B,O);return X.json(L,200,P5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,P5);return X.json({error:H},502,P5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",p5({maxSize:_l$,onError:(X)=>X.json({error:"Payload too large"},413,P5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Hv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=Y71(H)&&U?[H,N]:Y?await Promise.all([OT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),OT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await nu(X);return Promise.all([HT0(w,Q.branch),NT0(w,Q.branch)])})(),L=await mc$(K,B,O,typeof F.language==="string"?F.language:void 0);return X.json(L,200,P5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,P5);return X.json({error:H},502,P5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Hv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return fl$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",p5({maxSize:EN6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Hv(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=kl$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Vl$(G,W.resolveType);return fl$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var gl$=D(()=>{U8();LF();cu();eZ1();Zn();fc$();y3();cy();bc$();l3();xc$();gc$();Hi0();Yn();W71();ic$();F71();hD();E71();Sl$();j71();LN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;zN6=aA0(async($,Z)=>{let X=$.var.studioContext;try{o(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(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{wN6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=ep({orgId:Y.id,virtualMcpId:G,branch:J}),F=await Yi0(X,J),H=Gi0(F,Q),N=vc$({userId:H,projectRef:K}),U=W.metadata??null,B=await PN6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:U,branchThread:F});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await $Q(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});BT0=new Map;P5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};xl$=["clone","install","start"]});function hl$($,Z,X){let Q=P71.get($);if(!Q)Q={pending:null,running:!1},P71.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)qN6($,Q);return G}async function qN6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await MN6(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)P71.delete($)}}async function MN6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await pu(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=D71(W,Q),F=[],H=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=L71(K,O),E=`${JSON.stringify(L,null,2)}
2923
- `,j=await Z.createBlob(E);await Tl$(Z.owner,Z.repo,j,E);let z=w[0]??`${KT0(Q)}/${H71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of L71(K,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:kN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof M4&&O.status===422)||Y>=IN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function kN6($){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 sm0(Q,$.deps.coAuthor)}var IN6=3,P71;var ul$=D(()=>{gO0();ZT0();W4();hD();FT0();P71=new Map});import{createHmac as cl$,randomBytes as VN6,timingSafeEqual as SN6}from"crypto";function ll$(){if(DT0)return DT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return DT0=$?Buffer.from($):VN6(32),DT0}function A71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=cl$("sha256",ll$()).update(Q).digest("base64url");return`${Q}.${Y}`}function dl$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(cl$("sha256",ll$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SN6(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 CN6=21600000,DT0=null;var ml$=D(()=>{R$()});import{z as tu}from"zod";function vN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_N6.test($)}function ol$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return eA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof M4){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 rl$(){let $=new H1;return $.use("/:virtualMcpId/:branch",tl$),$.use("/:virtualMcpId/:branch/*",tl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Rl$(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=A71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ol$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Os(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xN6.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{$T0(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 Os(Z),W=await hl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:lu(Q)},G),K=A71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:ol$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof M4&&W.status===409))throw W;await UT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof M4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof M4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof M4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var _N6,il$=500,pl$=1048576,nl$=1024,fN6=8388608,bN6,xN6,tl$;var al$=D(()=>{ZT0();U8();LF();eZ1();sA0();j71();F71();ul$();ml$();E71();hD();FT0();_N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bN6=p5({maxSize:fN6,onError:($)=>$.json({error:"Payload too large"},413)}),xN6=tu.object({set:tu.record(tu.string(),tu.unknown()).optional(),delete:tu.array(tu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=il$,{message:`Patch cannot touch more than ${il$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=pl$),{message:`Each block must be at most ${pl$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=nl$),{message:`Each block key must be at most ${nl$} characters`}),tl$=aA0(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(!vN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!dl$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);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 sl$=($)=>{let Z=new H1;if(Z.use("*",s_),Z.route("/",OA0()),Z.route("/",Og$()),Z.route("/",zc$()),Z.route("/",wc$()),Z.route("/",tA0()),Z.route("/tools",Mc$()),Z.route("/",Rc$()),Z.route("/",ru$({kvStorage:$.kvStorage})),Z.route("/",tu$()),Z.route("/fs",Hc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",yl$()),Z.route("/decofile",rl$()),Z.route("/",Oc$()),Z.route("/deco-sites",LA0()),Z.route("/sso",KA0()),Z.route("/",oA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Jg$()),$.mountDevAssets)Z.route("/dev-assets",wA0({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("/",qb$()),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",Uc$()),Z.route("/mcp",Ew0()),Z.route("/mcp/self",nA0()),Z.route("/mcp",Pw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var el$=D(()=>{U8();P91();Wg$();I91();EA0();fa();j91();ou$();au$();Nc$();ct();B91();Aw0();pZ1();Bc$();Dc$();Ec$();Pc$();Ic$();tZ1();kc$();oZ1();jw0();gl$();al$()});function yN6($){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 gN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},$d$=()=>{let $=new H1;return $.use("*",gN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await nZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Zd$=D(()=>{U8();R$();UP0()});import{z as M1}from"zod";function PF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tN6($){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 oN6($,Z,X){try{return JSON.parse($)}catch{throw new Yd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rN6($){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:oN6(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 aN6($){let Z=$.map((X)=>{let Q=X.function.parameters?mY(X.function.parameters):mY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function sN6($){if(!$)return;return{openai:{response_format:$}}}function eN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Xd$($,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 Qd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hN6=256,uN6,cN6,lN6,dN6,mN6,iN6,pN6,nN6,Yd$,Gd$,Jd$;var Wd$=D(()=>{D4();U8();cu();PN();uN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lN6=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(cN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dN6=M1.object({type:M1.literal("text")}),mN6=M1.object({type:M1.literal("json_object")}),iN6=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()})}),pN6=M1.union([dN6,mN6,iN6]),nN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lN6),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(uN6).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:pN6.optional(),user:M1.string().optional()});Yd$=class Yd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Gd$=new H1;Gd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(PF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(PF("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(PF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(PF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tN6(G.model);if(!J)return $.json(PF("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)=>Qw(j.providerId));if(!E)return $.json(PF("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 F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(PF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=rN6(G.messages),U=G.tools?aN6(G.tools):void 0,B=sN6(G.response_format),O=eN6(),L=Math.floor(Date.now()/1000);if(G.stream)return lN($,async(w)=>{let E=Xd$(H,N,U,G,B,$.req.raw.signal);try{let j=wO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=hN6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Qd$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Xd$(H,N,U,G,B,$.req.raw.signal),E=await DO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Qd$(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(PF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(PF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(PF(Y.message,"server_error"),500)}});Jd$=Gd$});function $U6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Kd$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||_Z(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(as1(N)!==G)continue;if(!$U6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Fd$=D(()=>{U8();eB()});var Nd$;var Hd$=D(()=>{Nd$={name:"decocms",version:"4.294.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function QU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XU6}}var Ud$,XU6="https://ph.studio.decocms.com",Bd$;var Od$=D(()=>{U8();h50();vC();$9();R$();Y91();Hd$();Ud$=new H1;Ud$.get("/",($)=>{let Z={version:Nd$.version,theme:Pi1(),...AH().logo&&{logo:AH().logo},...KN()&&{internalUrl:aC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Ly$(),posthog:QU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Bd$=Ud$});function ou($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function T71($){return(ou($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Ld$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ou($))}&sz=${Z}`}function Dd$($,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 wd$($){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()?Dd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Dd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Nv,YU6,GU6,JU6,WU6,Ed$;var jd$=D(()=>{Nv=l0.enum(["good","bad","neutral"]),YU6=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:Nv.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 $})),GU6=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(YU6)),JU6={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()},WU6=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:Nv.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:Nv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Nv.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:Nv.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(GU6).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:Nv.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:Nv.optional()})).min(1)})]),Ed$=l0.object({...JU6,template:WU6})});function LT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ed$.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 R71=D(()=>{jd$()});import{join as zd$}from"path";async function FU6($){try{let Z=await fetch(`${WK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=LT0(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()||T71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function DG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function HU6($,Z){let X=ou($),Q=Z?.brand?.trim()||T71(X),Y=Ld$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=wd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${DG(W)}</title>`,`<meta name="description" content="${DG(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="${DG(W)}" />`,`<meta property="og:description" content="${DG(K)}" />`,`<meta property="og:url" content="${DG(J)}" />`,`<meta property="og:image" content="${DG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${DG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${DG(W)}" />`,`<meta name="twitter:description" content="${DG(K)}" />`,`<meta name="twitter:image" content="${DG(F)}" />`,`<meta name="twitter:image:alt" content="${DG(H)}" />`,`<link rel="canonical" href="${DG(J)}" />`,`<link rel="icon" href="${DG(Y)}" sizes="any" />`].join(`
2923
+ `,j=await Z.createBlob(E);await Tl$(Z.owner,Z.repo,j,E);let z=w[0]??`${KT0(Q)}/${H71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of L71(K,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:kN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof M4&&O.status===422)||Y>=IN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function kN6($){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 sm0(Q,$.deps.coAuthor)}var IN6=3,P71;var ul$=D(()=>{gO0();ZT0();W4();hD();FT0();P71=new Map});import{createHmac as cl$,randomBytes as VN6,timingSafeEqual as SN6}from"crypto";function ll$(){if(DT0)return DT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return DT0=$?Buffer.from($):VN6(32),DT0}function A71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=cl$("sha256",ll$()).update(Q).digest("base64url");return`${Q}.${Y}`}function dl$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(cl$("sha256",ll$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SN6(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 CN6=21600000,DT0=null;var ml$=D(()=>{R$()});import{z as tu}from"zod";function vN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_N6.test($)}function ol$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return eA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof M4){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 rl$(){let $=new H1;return $.use("/:virtualMcpId/:branch",tl$),$.use("/:virtualMcpId/:branch/*",tl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Rl$(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=A71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ol$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Os(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xN6.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{$T0(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 Os(Z),W=await hl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:lu(Q)},G),K=A71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:ol$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof M4&&W.status===409))throw W;await UT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof M4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof M4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof M4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var _N6,il$=500,pl$=1048576,nl$=1024,fN6=8388608,bN6,xN6,tl$;var al$=D(()=>{ZT0();U8();LF();eZ1();sA0();j71();F71();ul$();ml$();E71();hD();FT0();_N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bN6=p5({maxSize:fN6,onError:($)=>$.json({error:"Payload too large"},413)}),xN6=tu.object({set:tu.record(tu.string(),tu.unknown()).optional(),delete:tu.array(tu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=il$,{message:`Patch cannot touch more than ${il$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=pl$),{message:`Each block must be at most ${pl$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=nl$),{message:`Each block key must be at most ${nl$} characters`}),tl$=aA0(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(!vN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!dl$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);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 sl$=($)=>{let Z=new H1;if(Z.use("*",s_),Z.route("/",OA0()),Z.route("/",Og$()),Z.route("/",zc$()),Z.route("/",wc$()),Z.route("/",tA0()),Z.route("/tools",Mc$()),Z.route("/",Rc$()),Z.route("/",ru$({kvStorage:$.kvStorage})),Z.route("/",tu$()),Z.route("/fs",Hc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",yl$()),Z.route("/decofile",rl$()),Z.route("/",Oc$()),Z.route("/deco-sites",LA0()),Z.route("/sso",KA0()),Z.route("/",oA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Jg$()),$.mountDevAssets)Z.route("/dev-assets",wA0({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("/",qb$()),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",Uc$()),Z.route("/mcp",Ew0()),Z.route("/mcp/self",nA0()),Z.route("/mcp",Pw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var el$=D(()=>{U8();P91();Wg$();I91();EA0();fa();j91();ou$();au$();Nc$();ct();B91();Aw0();pZ1();Bc$();Dc$();Ec$();Pc$();Ic$();tZ1();kc$();oZ1();jw0();gl$();al$()});function yN6($){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 gN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},$d$=()=>{let $=new H1;return $.use("*",gN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await nZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Zd$=D(()=>{U8();R$();UP0()});import{z as M1}from"zod";function PF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tN6($){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 oN6($,Z,X){try{return JSON.parse($)}catch{throw new Yd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rN6($){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:oN6(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 aN6($){let Z=$.map((X)=>{let Q=X.function.parameters?mY(X.function.parameters):mY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function sN6($){if(!$)return;return{openai:{response_format:$}}}function eN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Xd$($,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 Qd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hN6=256,uN6,cN6,lN6,dN6,mN6,iN6,pN6,nN6,Yd$,Gd$,Jd$;var Wd$=D(()=>{D4();U8();cu();PN();uN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lN6=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(cN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dN6=M1.object({type:M1.literal("text")}),mN6=M1.object({type:M1.literal("json_object")}),iN6=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()})}),pN6=M1.union([dN6,mN6,iN6]),nN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lN6),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(uN6).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:pN6.optional(),user:M1.string().optional()});Yd$=class Yd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Gd$=new H1;Gd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(PF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(PF("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(PF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(PF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tN6(G.model);if(!J)return $.json(PF("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)=>Qw(j.providerId));if(!E)return $.json(PF("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 F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(PF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=rN6(G.messages),U=G.tools?aN6(G.tools):void 0,B=sN6(G.response_format),O=eN6(),L=Math.floor(Date.now()/1000);if(G.stream)return lN($,async(w)=>{let E=Xd$(H,N,U,G,B,$.req.raw.signal);try{let j=wO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=hN6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Qd$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Xd$(H,N,U,G,B,$.req.raw.signal),E=await DO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Qd$(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(PF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(PF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(PF(Y.message,"server_error"),500)}});Jd$=Gd$});function $U6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Kd$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||_Z(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(as1(N)!==G)continue;if(!$U6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Fd$=D(()=>{U8();eB()});var Nd$;var Hd$=D(()=>{Nd$={name:"decocms",version:"4.294.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function QU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XU6}}var Ud$,XU6="https://ph.studio.decocms.com",Bd$;var Od$=D(()=>{U8();h50();vC();$9();R$();Y91();Hd$();Ud$=new H1;Ud$.get("/",($)=>{let Z={version:Nd$.version,theme:Pi1(),...AH().logo&&{logo:AH().logo},...KN()&&{internalUrl:aC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Ly$(),posthog:QU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Bd$=Ud$});function ou($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function T71($){return(ou($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Ld$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ou($))}&sz=${Z}`}function Dd$($,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 wd$($){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()?Dd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Dd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Nv,YU6,GU6,JU6,WU6,Ed$;var jd$=D(()=>{Nv=l0.enum(["good","bad","neutral"]),YU6=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:Nv.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 $})),GU6=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(YU6)),JU6={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()},WU6=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:Nv.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:Nv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Nv.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:Nv.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(GU6).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:Nv.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:Nv.optional()})).min(1)})]),Ed$=l0.object({...JU6,template:WU6})});function LT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ed$.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 R71=D(()=>{jd$()});import{join as zd$}from"path";async function FU6($){try{let Z=await fetch(`${WK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=LT0(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()||T71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function DG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function HU6($,Z){let X=ou($),Q=Z?.brand?.trim()||T71(X),Y=Ld$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=wd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${DG(W)}</title>`,`<meta name="description" content="${DG(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="${DG(W)}" />`,`<meta property="og:description" content="${DG(K)}" />`,`<meta property="og:url" content="${DG(J)}" />`,`<meta property="og:image" content="${DG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${DG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${DG(W)}" />`,`<meta name="twitter:description" content="${DG(K)}" />`,`<meta name="twitter:image" content="${DG(F)}" />`,`<meta name="twitter:image:alt" content="${DG(H)}" />`,`<link rel="canonical" href="${DG(J)}" />`,`<link rel="icon" href="${DG(Y)}" sizes="any" />`].join(`
2924
2924
  `)}function NU6($,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}
2925
2925
  </head>`)}function Pd$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=ou(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(zd$($,"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(`${WK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(UU6)}),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=$?zd$($,"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 FU6(ou(Q)),K=HU6(Q,W);return X.html(NU6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var KU6=2500,UU6=1e4;var Ad$=D(()=>{U8();R71();WE();R$()});function Ls($,Z){return fetch(`${WK({})}${$}`,Z)}async function BU6($,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 Ls(`/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}=LT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var OU6,mN,Td$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Rd$;var Id$=D(()=>{U8();uY();WE();R71();OU6=new Set(["complete","errored","terminated","unknown"]),mN=new H1;mN.use("*",async($,Z)=>{let X=await X8.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});mN.use("/link-token/*",Td$);mN.use("/suggest",Td$);mN.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 BU6(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)}});mN.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 Ls("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${JE({})}`},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)}});mN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ls(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${JE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:OU6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});mN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ls(`/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)}});mN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ls(`/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:[]})}});Rd$=mN});import{createHmac as DU6,timingSafeEqual as LU6}from"crypto";function Md$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+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)>wU6)return!1;let W=DU6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&LU6(K,H)})}function kd$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=xJ(Z),Q=xJ(xJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:AF(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 Vd$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function AF($){return typeof $==="string"?$:void 0}function xJ($){return typeof $==="object"&&$!==null?$:void 0}function wT0($){return typeof $==="number"?new Date($*1000):null}function M71($){return AF($)??AF(xJ($)?.id)}function EU6($){return M71($.subscription)??AF(xJ(xJ($.parent)?.subscription_details)?.subscription)}function jU6($){let Z=wT0($.current_period_end);if(Z)return Z;let X=xJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=xJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function I71($,Z){let X=wT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function q71($,Z){let X=wT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function zU6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=AF(xJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(AF(xJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(AF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=AF(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(xJ(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:xJ(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(AF(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=M71(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(I71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:M71(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:q71(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=AF(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&&I71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Vd$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:jU6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:q71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=EU6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(I71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:wT0(X.period_end),lastStripeEventAt:q71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function PU6($,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:Vd$(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 qd$($,Z){let X=PU6($,Z);if(!X)return;bY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Vn1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Sd$($){let Z=new QK(r8().db),X=await zU6(Z,$);if(!(X.handled&&X.topUp))qd$($,X);if(X.handled&&X.topUp)await oE$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),qd$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await te1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof cY&&(Q.status===400||Q.status===404)))throw Q}return X}var wU6=300;var Cd$=D(()=>{dG();_4();E50();LE();g01()});var AU6=1048576,k71;var _d$=D(()=>{U8();LF();R$();Cd$();k71=new H1;k71.post("/webhook",p5({maxSize:AU6,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(!Md$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=kd$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Sd$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as TU6}from"crypto";function IU6($,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 TU6(Buffer.from(Y),Buffer.from(Q))}var RU6=5242880,V71;var vd$=D(()=>{U8();LF();l3();V71=new H1;V71.post("/webhook",p5({maxSize:RU6,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(!IU6(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 _n0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function fd$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var bd$,qU6,MU6,xd$;var yd$=D(()=>{U8();z3();Lg();sx();bd$=new H1,qU6=["range","if-none-match","if-modified-since"],MU6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];bd$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Au($))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 Ut(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&nG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return fd$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of qU6){let F=$.req.header(K);if(F)G.set(K,F)}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 MU6){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),fd$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});xd$=bd$});var ws=_((Uv)=>{var kU6=Uv&&Uv.__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]}),VU6=Uv&&Uv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))kU6(Z,$,X)};Object.defineProperty(Uv,"__esModule",{value:!0});VU6(zY(),Uv)});var ud$=_((gd$)=>{Object.defineProperty(gd$,"__esModule",{value:!0});gd$.version=void 0;gd$.version="3.4.0"});var dd$=_((TF)=>{var SU6=TF&&TF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(TF,"__esModule",{value:!0});TF.NodeTransport=TF.VERSION=void 0;TF.nodeResolveHost=xU6;var s6=ws(),CU6=j0("net"),S71=j0("tls"),_U6=j0("path"),cd$=j0("fs"),vU6=SU6(j0("dns")),fU6=ud$();TF.VERSION=fU6.version;var bU6="nats.js";class ld${socket;version;lang;yields=[];signal=(0,s6.deferred)();closedNotification=(0,s6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=bU6,this.version=TF.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,s6.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 s6.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 s6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new s6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,s6.deferred)(),X,Q=(0,CU6.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,s6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=s6.DataBuffer.concat(...this.yields),Y=(0,s6.extractProtocolMessage)(Q);if(Y!=="")try{let G=s6.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,s6.deferred)();try{if($=(0,_U6.resolve)($),!(0,cd$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,cd$.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,s6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new s6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s6.deferred)();try{let Y=(0,S71.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 s6.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,s6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new s6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,s6.deferred)();try{let Q=(0,S71.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 s6.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,s6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s6.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 S71.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s6.render)($)}`);let Z=(0,s6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,s6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,s6.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}}TF.NodeTransport=ld$;function xU6($){let Z=(0,s6.deferred)();return vU6.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 td$=_((nd$)=>{Object.defineProperty(nd$,"__esModule",{value:!0});nd$.connect=yU6;var md$=dd$(),id$=ws(),pd$=ws();function yU6($={}){if((0,pd$.hasWsProtocol)($))return Promise.reject(pd$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,id$.setTransportFactory)({factory:()=>{return new md$.NodeTransport},dnsResolveFn:md$.nodeResolveHost}),id$.NatsConnectionImpl.connect($)}});var od$=_((iN)=>{var hU6=iN&&iN.__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]}),uU6=iN&&iN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))hU6(Z,$,X)};Object.defineProperty(iN,"__esModule",{value:!0});iN.connect=void 0;var cU6=td$();Object.defineProperty(iN,"connect",{enumerable:!0,get:function(){return cU6.connect}});uU6(ws(),iN)});function ed$($){let Z=$?.connectFn??iU6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:mU6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{O++;let L=aZ(dU6,lU6,O-1,2,0.5);await L$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?rd$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=sd$.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 iU6($){return ad$.connect($)}var rd$,ad$,sd$,lU6=100,dU6=3000,mU6=3000;var $m$=D(()=>{W4();rd$=V(zc(),1),ad$=V(od$(),1),sd$=V(HL(),1)});function C71($,Z){return`${$}.${Z}`}class _71{cache;constructor($){this.cache=Qu({ttlMs:$?.ttlMs??pU6,maxSize:$?.maxSize??nU6})}async get($,Z){return this.cache.get(C71($,Z))??null}async set($,Z,X){this.cache.set(C71($,Z),X)}async invalidate($,Z){this.cache.delete(C71($,Z))}teardown(){this.cache.clear()}}var pU6=600000,nU6=5000;var Zm$=()=>{};function ET0($,Z){return`${$}:${Z}`}function v71($){let Z=Qu({ttlMs:$?.ttlMs??tU6,maxSize:$?.maxSize??oU6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Xm$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(ET0(K,F))},set(K,F,H){Z.set(ET0(K,F),H)},invalidate(K,F){Z.delete(ET0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Xm$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(ET0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Xm$="studio.ai-provider-keys.invalidate",tU6=30000,oU6=5000;var Qm$=()=>{};class f71{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var Ym$=($)=>{let Z;return()=>Z??=$()},b71,x71;var Gm$=D(()=>{I6();b71=Ym$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),x71=Ym$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function XB6($=Km$){return{name:dK,subjects:[`${er0}.>`],storage:wW.StorageType.File,max_age:sU6,max_bytes:$B6,max_msgs_per_subject:ZB6,discard:wW.DiscardPolicy.Old,retention:wW.RetentionPolicy.Limits,duplicate_window:eU6,num_replicas:$}}class Fm${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 Jm$($){let Z=Wm$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function JB6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,aU6().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 WB6($,Z){return $.info?.cluster?Z:1}function KB6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class y71{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Q,Y)=>{let G=XB6(Y);try{await Q.streams.info(dK),await Q.streams.update(dK,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(dK,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(dK),await Q.streams.add(G);else throw J}},X=await g6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await wW.jetstreamManager($),Y=WB6($,Km$);try{await Z(Q,Y)}catch(G){if(Y<=1||!KB6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Mg});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=JB6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=gB$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=Za0(F,{runId:Z}),U=performance.now()-H;b71().record(U),x71().add(1,{"org.id":Q??"unknown"}),GB6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Jm$(B.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:B,value:O}=await F.read();if(B)break;if(K(O),N++,++H>=64)H=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(F.releaseLock(),W(),YB6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishSerialized($,Z){try{return await g6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Jm$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Mg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Za0(Z,{runId:$,dedup:X});b71().record(performance.now()-Y),x71().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=yB$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?wW.DeliverPolicy.New:wW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=ZD($),W;try{W=await g6(async()=>{return(await Q.consumers.get(dK,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Mg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=sL0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(tL0()).pipeThrough(oL0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await H.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(dK,{filter:ZD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var wW,Wm$,rU6=($)=>{let Z;return()=>Z??=$()},aU6,sU6=86400000000000,eU6=120000000000,$B6=4294967296,Km$,ZB6=500000,QB6,YB6,GB6;var Hm$=D(()=>{W4();Xa0();eL0();rL0();I6();Gm$();wW=V(HL(),1),Wm$=V(zc(),1),aU6=rU6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),Km$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);QB6=process.env.STREAM_ENCODE_TRACE==="1",YB6=process.env.DECOPILOT_STREAM_TRACE==="1";GB6=QB6?new Fm$:null});function jT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,uW(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 Nm$=D(()=>{_8()});class g71{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function Um$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!VC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=LK(Y?.flags),J=await $.storage.taskBoard.update(Z.id,Q,{status:G},Z.updatedBy);return await z6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),u$(Q,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var Bm$=D(()=>{C6();WX();Bg();E5()});function DB6($){return $ instanceof nX}function LB6($,Z){return Z-$>=BB6}class h71{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??FB6;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??NB6,X=this.options.itemIntervalMs??HB6,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()-zt0),jo0);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()-OB6));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 wo0(this.taskBoard,Y,Q),await Eo0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==Y8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await JN(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),DB6(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()+UB6)).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(()=>{}),u$(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(!LB6(fH(X),Date.now()))return;await yK($,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===Y8,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}let W=await Promise.all(G.map(async(K)=>({...K,...await Dg(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(await Um$(J,Q,W))return!0;if(await qO$(J,Q))return!0;if(!Y)return!1;if(!go0(W))return!1;return await HL0(J,Q,{previewMatchesHead:ho0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var FB6=60000,HB6=300000,NB6=50,UB6=60000,BB6=900000,OB6=120000;var Om$=D(()=>{C6();Vo0();YN();vt();Bm$();E5();aG();zo0();$G();Kt()});import{readdir as wB6,rm as zT0}from"fs/promises";import{join as PT0}from"path";async function AT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-EB6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await Bv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Dm$($,Y,Z);else if(!Y.startsWith(".")){let G=PT0($,Y),J=await Bv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Dm$(G,K,Z)}if((await Bv(G)).length===0)await zT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Dm$($,Z,X){let Q=0,Y=PT0($,Z),G=await Bv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=PT0(Y,W),F=await Bv(K);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=PT0(K,N);await zT0(B,{recursive:!0,force:!0}),Q++}}if((await Bv(K)).length===0)await zT0(K,{recursive:!0,force:!0})}if((await Bv(Y)).length===0)await zT0(Y,{recursive:!0,force:!0});return Q}async function Bv($){try{return(await wB6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var EB6=30;var u71=()=>{};import{DBOS as c71,SchedulerMode as jB6}from"@dbos-inc/dbos-sdk";async function PB6(){let $=[gJ(),Ov(),MF()],Z=0;for(let X of $)try{Z+=await AT0(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 AB6($,Z){await c71.runStep(()=>PB6(),{name:"monitoringRetention"})}function wm$(){if(Lm$)return;Lm$=!0;let $=c71.registerWorkflow(AB6,{name:"monitoringRetentionWorkflow"});c71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:zB6,mode:jB6.ExactlyOncePerIntervalWhenActive})}var zB6="23 4 * * *",Lm$=!1;var Em$=D(()=>{LY();u71()});function jm$($){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 HJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await Lt($.db,Z,Q.role);return Y.boundAuth=c51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new mw(X,void 0,Y.boundAuth,Q.role,"self"),iO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var zm$=D(()=>{iw();pO()});function TB6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function RB6(){return{services:TB6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function qB6(){for(let $ of IB6)$()}function Pm$($){let Z=[...l71.logs,$];l71={...l71,logs:Z.length>500?Z.slice(-500):Z},qB6()}function d71(){return MB6}var l71,IB6,MB6=!1;var m71=D(()=>{l71=RB6(),IB6=new Set});import{EventEmitter as kB6}from"events";var i71;var Am$=D(()=>{m71();i71=new kB6;i71.on("request",($)=>{Pm$($)})});function Tm$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let B=ru(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>ru(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${J5.tool}${B}${J5.dim}(${w})${J5.reset}`}else if(U.method)G=`${J5.dim}${ru(U.method)}${J5.reset}`}}catch{}}let W=ru(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${J5.mcp}${ru(H.slice(0,12))}\u2026${J5.reset}`}else if(Y==="/mcp")W=`${J5.mcp}/mcp${J5.reset}`;else if(Y==="/mcp/registry")W=`${J5.mcp}/mcp/registry${J5.reset}`;let K=SB6(Q),F=J?"\u25C0":"\u2190";if(!d71())console.log(`${J5.dim}${F}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=VB6(N),B=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!d71())console.log(`${J5.dim}${O}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""} ${U}${N}${J5.reset} ${J5.duration}${B}${J5.reset}`);i71.emit("request",{method:Q,path:ru(Y),status:N,duration:H,timestamp:new Date})}}}var J5,VB6=($)=>{if($>=500)return J5.serverError;if($>=400)return J5.clientError;if($>=300)return J5.redirect;return J5.ok},SB6=($)=>{return J5[$]||J5.reset},ru=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Rm$=D(()=>{m71();Am$();J5={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 km$}from"crypto";import{mkdir as CB6,readdir as _B6,rm as Im$,stat as Vm$}from"fs/promises";import{join as n71,relative as vB6}from"path";import{z as P$}from"zod";function Cm$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return n71(fB6,Z)}function _m$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function p71($,Z){let X=Cm$($),Q=_m$(Z);return n71(X,Q)}function bB6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return km$("sha256",Y).update(G).digest("hex")}function Mm$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=bB6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${_m$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function vm$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${km$("md5","etag").update(Q).digest("hex")}"`}async function fm$($,Z,X,Q,Y){try{let G=await _B6($,{withFileTypes:!0});for(let J of G){let W=n71($,J.name),F=vB6(Z,W).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await fm$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await Vm$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:vm$(W,H.mtime,H.size)})}catch{}}}}catch{}}function bm$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=Cm$(Q);await CB6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await fm$(H,H,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((w)=>w.key>F),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=p71(Q,G.key),W=await Vm$(J);return{contentType:M91(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:vm$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??qm$;return{url:Mm$(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:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??qm$;return{url:Mm$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=p71(Q,G.key);try{return await Im$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=p71(Q,K);try{await Im$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function t71($,Z,X){let Q=bm$(Z,X),Y=new nW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:N5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new YQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),zJ(Y,G,$,"mcp:dev-assets")}async function xm$($,Z,X,Q){let G=bm$(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 fB6="./data/assets",qm$=3600,Sm$,ym$;var gm$=D(()=>{R$();vg();U8();dd();aC();gX();EA0();Sm$=new H1;Sm$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return t71($.req.raw,Z,Q)});ym$=Sm$});var hm$={};J4(hm$,{mountDevRoutes:()=>xB6});function xB6($,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 t71(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(),F=await xm$(W,K,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ym$);let X=new H1;X.use("*",DW({mountPath:"/api/dev-assets"})),X.route("/",wA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var um$=D(()=>{U8();z91();EA0();gm$()});import{sql as yB6}from"kysely";import{randomUUID as cm$}from"crypto";import{z as gB6}from"zod";async function uB6($){let Z=new Date().toISOString(),X=cm$(),Q=C8.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:cm$(),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 yB6`SELECT
2926
2926
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.294.2",
3
+ "version": "4.294.3",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c as B,b as L,j as r}from"./index-DHLutK6v.js";import{I as A}from"./input-zNG5Uz1T.js";import{L as F}from"./label-CEq9oqa2.js";import{S as R,a as V,b as z,c as O,d as D}from"./select-W8jorDji.js";import{T as G}from"./textarea-XbuS70jj.js";import{G as J,V as M,K as X,X as $,a5 as q}from"./index-BWVLjCpL.js";import{s as P}from"./primitives-bdzFl9KQ.js";import{u as H}from"./use-autosave-BsqWx81g.js";import"./Check-C5RWnyNL.js";import"./ChevronDown-CeGZsBnS.js";import"./ChevronUp-DCx43qHY.js";import"./ArrowUp-DMDdMhAA.js";import"./chat-context-C-BdNZCf.js";import"./use-panel-navigate-C8-xot4V.js";import"./dialog-DYg0AoO0.js";import"./Copy01-DhfruII6.js";import"./Download01-C1FmC7JV.js";import"./use-destination-route-BMJNYrmL.js";import"./constants-dLUUoWH7.js";import"./session-runtime-wVXsCwcJ.js";import"./hooks-DvV-YCly.js";import"./use-mcp-client-Bac4vccq.js";import"./auth-BqxUQw-v.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-DDszDk42.js";import"./task-board-D9PHUZff.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-X7MaI4-V.js";import"./use-ai-providers-WmO5B1wa.js";import"./use-decopilot-events-CEhAvB_E.js";import"./use-organization-settings-BsgcrCz-.js";import"./automation-runs-CzcGADVN.js";import"./agent-icon-C9_7Msf7.js";import"./AlertCircle-qZDg2e-H.js";import"./UserSquare-ClSByuB-.js";import"./Tool01-tn2PFBHQ.js";import"./ArrowLeft-CatEVOI7.js";import"./Tool02-BalBR7uK.js";import"./XCircle-BOrCVYLf.js";import"./TrendUp01-6TR_k_0Y.js";import"./ZapSquare-DkKtoQ7W.js";import"./Users03-BT3gPqQL.js";import"./CheckCircle-V0GvWvtd.js";import"./ChevronRight-Dh8_6pj1.js";import"./ChevronSelectorVertical-Im3Lz_4E.js";import"./DotsVertical-B39kxqbi.js";import"./Stars02-4GZ9SjIq.js";import"./CreditCard01-Cy0s6gAf.js";import"./Settings02-xEBQxvJD.js";import"./Eye-m8QZKf2Y.js";import"./FilterLines-BBF-m2ZJ.js";import"./Share07-CLkT7SlV.js";import"./Globe01-C2F_PPuX.js";import"./Globe04-CMCnFTSr.js";import"./SwitchHorizontal01-DwxljZOI.js";import"./HardDrive-DmqNZKD8.js";import"./Key01-DbCU9LZF.js";import"./LinkExternal01-kQnRXU4w.js";import"./LockUnlocked01-D5OpQeQe.js";import"./LogOut01-BePTyd5L.js";import"./Monitor01-DPqlemzQ.js";import"./Sun-D0KW7MLF.js";import"./Palette-DzT0S9Gl.js";import"./Play-Btu3v5FX.js";import"./Plus-B7vTVmKH.js";import"./SearchLg-CAAIuTYj.js";import"./SearchMd-COQJLRw-.js";import"./Shield01-C2USnj9G.js";import"./Stars01-DkoqcM4j.js";import"./Trash01-CwqV1gzD.js";import"./Upload01-mqAHBbZV.js";import"./User01-DWaPmCwS.js";import"./Users01-CFDNbxgJ.js";import"./XClose-DMSeuF30.js";import"./Zap-CwYGo5D6.js";import"./useInfiniteQuery-CP11XfQS.js";import"./use-infinite-scroll-DzHJHyr0.js";import"./use-connection-D8j2CnOC.js";import"./table-RKi74_kY.js";import"./empty-state-DNKOHljA.js";import"./use-members-_2HCzEHc.js";import"./use-org-auth-client-Cb5lYh1t.js";import"./use-automations-g--nS4Go.js";import"./useSuspenseInfiniteQuery-vPet_vok.js";import"./avatar-1XE5IjoT.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-lK-vhEre.js";import"./monaco-editor-BIUU4YtT.js";import"./spinner-DEaGcbnH.js";import"./types-CrdXjhQP.js";import"./shell-layout-BbKgiGKQ.js";import"./required-auth-layout-Bi3hMcfQ.js";import"./use-org-sso-cefqXe6X.js";import"./integration-icon-CVsQlE88.js";import"./use-navigate-to-agent-yAkGdje4.js";import"./chart-Bgue_7DQ.js";import"./index-pYJ2-T-r.js";import"./form-DUYaeuN1.js";import"./file-type-icon-Cr_jiDFe.js";import"./drawer-DrqU_8fl.js";import"./collection-search-DBnGb4Zg.js";import"./tabs-DFRRVuh7.js";import"./toggle-group-WZyFFujP.js";import"./super-agent-icon-DxowWKwv.js";import"./self-tool-result-DYCZ2dxI.js";import"./alert-dialog-BWONJIzw.js";import"./extract-connection-data-BI_gbc3h.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-D5wCJf5h.js";import"./authenticate-and-persist-oauth-DRVU48ic.js";import"./mcp-oauth-DGSZYZtZ.js";import"./track-BFh4WctH.js";import"./popover-CPDUuAsK.js";import"./toolbar-CmaLqa3-.js";import"./github-repo-picker-BjTlfZRh.js";import"./use-mcp-tools-FenH0JaE.js";import"./agent-capabilities-B52k7xCe.js";import"./connection-card-CgUgSGsh.js";import"./use-registry-connections-BoC6e9Ko.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-gU6TF210.js";import"./collection-tabs-CAUEdmSI.js";import"./badge-CXIV4O-0.js";import"./select-model-CVJuTB71.js";import"./checkbox-DvC3nAT5.js";import"./ai-providers-logos-DD3qZ33J.js";import"./cards-DJSm_nho.js";import"./dropdown-menu-BGreHXNg.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-CdtGOM4G.js";import"./use-file-configs-CEny8PB8.js";import"./pt-BR-CLy76QW2.js";import"./use-debounced-autosave-DsCulVkO.js";import"./scroll-area-Dw0578rC.js";import"./search-input-lOvS7ZZY.js";import"./use-mcp-auth-status-dyqIaOq0.js";import"./switch-BsAR0Ue8.js";import"./use-secrets-CNOFekf-.js";import"./AreaChart-D1rWRcUm.js";import"./config-DG69PD1X.js";import"./breadcrumb-FUX_wv57.js";import"./command-Ct_4mokr.js";import"./index-RXRS2M8q.js";import"./get-initials-D-f_fDFw.js";import"./use-tags-CnmdA4eJ.js";import"./automation-list-row-BMiRTeOK.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-DbzFw6wJ.js";const Q={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"}]},U={authors:"sandbox.recordEditor.titleAuthor"};function Gr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=J(h);let g;t[4]!==f||t[5]!==a?(g=M(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:$(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=H(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=U[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(X,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=Q[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(q,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(R,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(V,{id:o.key,className:"h-10 w-full",children:r.jsx(z,{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(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(G,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:P(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Gr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BTzECwAf.js","assets/index-DHLutK6v.js","assets/index-DJSuP9VA.css","assets/Tool02-BalBR7uK.js","assets/CheckCircle-V0GvWvtd.js","assets/Settings02-xEBQxvJD.js","assets/use-mcp-client-Bac4vccq.js","assets/constants-dLUUoWH7.js","assets/auth-BqxUQw-v.js","assets/useInfiniteQuery-CP11XfQS.js","assets/use-infinite-scroll-DzHJHyr0.js","assets/badge-CXIV4O-0.js","assets/input-zNG5Uz1T.js","assets/dropdown-menu-BGreHXNg.js","assets/Check-C5RWnyNL.js","assets/ChevronRight-Dh8_6pj1.js","assets/DotsVertical-B39kxqbi.js","assets/table-RKi74_kY.js","assets/toggle-group-WZyFFujP.js","assets/use-view-mode-DHrNQrCI.js","assets/FilterLines-BBF-m2ZJ.js","assets/Globe01-C2F_PPuX.js","assets/SearchMd-COQJLRw-.js","assets/dialog-DYg0AoO0.js","assets/AlertCircle-qZDg2e-H.js","assets/Download01-C1FmC7JV.js","assets/Upload01-mqAHBbZV.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-BWONJIzw.js","assets/Trash01-CwqV1gzD.js","assets/label-CEq9oqa2.js","assets/select-W8jorDji.js","assets/ChevronDown-CeGZsBnS.js","assets/ChevronUp-DCx43qHY.js","assets/switch-BsAR0Ue8.js","assets/textarea-XbuS70jj.js","assets/ArrowLeft-CatEVOI7.js","assets/XCircle-BOrCVYLf.js","assets/checkbox-DvC3nAT5.js","assets/Eye-m8QZKf2Y.js","assets/LinkExternal01-kQnRXU4w.js","assets/use-copy-lK-vhEre.js","assets/Copy01-DhfruII6.js","assets/Key01-DbCU9LZF.js","assets/Plus-B7vTVmKH.js","assets/mcp-oauth-DGSZYZtZ.js","assets/Play-Btu3v5FX.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,k as a,bp as o}from"./index-DHLutK6v.js";import{R as n}from"./require-capability-BJjD7GXa.js";import"./access-gate-DXIgG9H-.js";import"./capability-load-error-BKGEHfpt.js";const c=s.lazy(()=>o(()=>import("./registry-layout-BTzECwAf.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(n,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(c,{})})}),r[0]=t):t=r[0],t}export{u as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BTzECwAf.js","assets/index-DHLutK6v.js","assets/index-DJSuP9VA.css","assets/Tool02-BalBR7uK.js","assets/CheckCircle-V0GvWvtd.js","assets/Settings02-xEBQxvJD.js","assets/use-mcp-client-Bac4vccq.js","assets/constants-dLUUoWH7.js","assets/auth-BqxUQw-v.js","assets/useInfiniteQuery-CP11XfQS.js","assets/use-infinite-scroll-DzHJHyr0.js","assets/badge-CXIV4O-0.js","assets/input-zNG5Uz1T.js","assets/dropdown-menu-BGreHXNg.js","assets/Check-C5RWnyNL.js","assets/ChevronRight-Dh8_6pj1.js","assets/DotsVertical-B39kxqbi.js","assets/table-RKi74_kY.js","assets/toggle-group-WZyFFujP.js","assets/use-view-mode-DHrNQrCI.js","assets/FilterLines-BBF-m2ZJ.js","assets/Globe01-C2F_PPuX.js","assets/SearchMd-COQJLRw-.js","assets/dialog-DYg0AoO0.js","assets/AlertCircle-qZDg2e-H.js","assets/Download01-C1FmC7JV.js","assets/Upload01-mqAHBbZV.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-BWONJIzw.js","assets/Trash01-CwqV1gzD.js","assets/label-CEq9oqa2.js","assets/select-W8jorDji.js","assets/ChevronDown-CeGZsBnS.js","assets/ChevronUp-DCx43qHY.js","assets/switch-BsAR0Ue8.js","assets/textarea-XbuS70jj.js","assets/ArrowLeft-CatEVOI7.js","assets/XCircle-BOrCVYLf.js","assets/checkbox-DvC3nAT5.js","assets/Eye-m8QZKf2Y.js","assets/LinkExternal01-kQnRXU4w.js","assets/use-copy-lK-vhEre.js","assets/Copy01-DhfruII6.js","assets/Key01-DbCU9LZF.js","assets/Plus-B7vTVmKH.js","assets/mcp-oauth-DGSZYZtZ.js","assets/Play-Btu3v5FX.js"])))=>i.map(i=>d[i]);
2
- import{c as n,d as c,f as m,j as t,k as f,r as l,bp as p}from"./index-DHLutK6v.js";import{R as u}from"./require-capability-BJjD7GXa.js";import"./access-gate-DXIgG9H-.js";import"./capability-load-error-BKGEHfpt.js";const g=l.lazy(()=>p(()=>import("./registry-layout-BTzECwAf.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function h(){const e=n.c(5),i=c();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=m(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{h as default};
@@ -1 +0,0 @@
1
- import{I as i}from"./use-infinite-scroll-DzHJHyr0.js";import{fi as u}from"./index-DHLutK6v.js";function t(e,r){return u(e,i,r)}export{t as u};
@@ -1 +0,0 @@
1
- import{I as s}from"./use-infinite-scroll-DzHJHyr0.js";import{fi as u,b$ as n}from"./index-DHLutK6v.js";function i(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{i as u};