decocms 4.293.1 → 4.293.2

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-DVINDhOU.js → AlertCircle-CD9LrpfS.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DqSaq7NT.js → AreaChart-BnvptEOi.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BQPGjmZ9.js → ArrowLeft-B3G2yicp.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-CJc2dDit.js → ArrowUp-CZYz7bTi.js} +1 -1
  5. package/dist/client/assets/{Check-CngRIlmK.js → Check-Dlrnq12d.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-D8GtCqI2.js → CheckCircle-D_x_TnWr.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-DIb5ltcB.js → ChevronDown-BI5tjO-E.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-kLCTWPyM.js → ChevronRight-D1vELAp3.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-Bbvai3m1.js → ChevronSelectorVertical-BoKT9OF1.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-BTTBpx7U.js → ChevronUp-DXmAB3XT.js} +1 -1
  11. package/dist/client/assets/{Copy01-tH_Jmj5g.js → Copy01-DjgS2HXy.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-DEaFJ7WY.js → CreditCard01-C_BlW4SQ.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-nFmoQs1S.js → DotsVertical-D26hKsV0.js} +1 -1
  14. package/dist/client/assets/{Download01-DjBbMXMp.js → Download01-DFXE5FpC.js} +1 -1
  15. package/dist/client/assets/{Eye-B2x4Uhmc.js → Eye-BL9Cl1_z.js} +1 -1
  16. package/dist/client/assets/{FilterLines-BPAsLmKT.js → FilterLines-BAretQqt.js} +1 -1
  17. package/dist/client/assets/{Globe01-CCV6xUpB.js → Globe01-EaicUoi2.js} +1 -1
  18. package/dist/client/assets/{Globe04-DmgH3jep.js → Globe04-BynYihIs.js} +1 -1
  19. package/dist/client/assets/{HardDrive-DfmHHx7a.js → HardDrive-DI-BD_HJ.js} +1 -1
  20. package/dist/client/assets/{Key01-Be0nbYKF.js → Key01-BW1Rr_0E.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-BpSJ3ea8.js → LinkExternal01-DSikt04U.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-C4UMzrkS.js → LockUnlocked01-18p0T9eT.js} +1 -1
  23. package/dist/client/assets/{LogOut01-iqzQNjrr.js → LogOut01-BKJ67u66.js} +1 -1
  24. package/dist/client/assets/{Monitor01-7JrePHkw.js → Monitor01-BZQ0hY6j.js} +1 -1
  25. package/dist/client/assets/{Palette-jTuR6Xnz.js → Palette-Bno2qVjY.js} +1 -1
  26. package/dist/client/assets/{Play-C9N_PBsM.js → Play-C-YG9yrD.js} +1 -1
  27. package/dist/client/assets/{Plus-_2HJ7AUo.js → Plus-DdaQ4Jl-.js} +1 -1
  28. package/dist/client/assets/{SearchLg-DL0P751N.js → SearchLg-C--NWIKz.js} +1 -1
  29. package/dist/client/assets/{SearchMd-BgVLg9-Y.js → SearchMd-B6MT6Bio.js} +1 -1
  30. package/dist/client/assets/{Settings02-BLcuzcYR.js → Settings02-Bgsm52IE.js} +1 -1
  31. package/dist/client/assets/{Share07-DmspZ_Dd.js → Share07-CWoqeiFa.js} +1 -1
  32. package/dist/client/assets/{Shield01-PyJsRfW0.js → Shield01-HD6_sCSy.js} +1 -1
  33. package/dist/client/assets/{Stars01-BuNXiUpz.js → Stars01-D_TS2si3.js} +1 -1
  34. package/dist/client/assets/{Stars02-CZ0km8FA.js → Stars02-C5DCeEvT.js} +1 -1
  35. package/dist/client/assets/{Sun-Cq9_yGGL.js → Sun-7xLgDnNq.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-DRMfMdty.js → SwitchHorizontal01-7sawt_65.js} +1 -1
  37. package/dist/client/assets/{Tool01-Ccf17IFM.js → Tool01-CholylEI.js} +1 -1
  38. package/dist/client/assets/{Tool02-3tN3hbwK.js → Tool02-CQHN0kwi.js} +1 -1
  39. package/dist/client/assets/{Trash01-BlqiKpgS.js → Trash01-WXazoj42.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-B3sR-xHV.js → TrendUp01-Cs8Uozm3.js} +1 -1
  41. package/dist/client/assets/{Upload01-D0qHlBzs.js → Upload01-B4nQDZ8y.js} +1 -1
  42. package/dist/client/assets/{User01-DuXf-ysk.js → User01-CliEfwvo.js} +1 -1
  43. package/dist/client/assets/{UserSquare-sd5WxBNi.js → UserSquare-5p_taTUv.js} +1 -1
  44. package/dist/client/assets/{Users01-D-Verlj0.js → Users01-Covi6RoT.js} +1 -1
  45. package/dist/client/assets/{Users03-Baivbk4m.js → Users03-CvWTwj5Y.js} +1 -1
  46. package/dist/client/assets/{XCircle-DZSllrxh.js → XCircle-CfI3epA1.js} +1 -1
  47. package/dist/client/assets/{XClose-Bx7QHaD0.js → XClose-CF3G_jQw.js} +1 -1
  48. package/dist/client/assets/{YAxis-CPfziI6j.js → YAxis-DtW1JYrI.js} +1 -1
  49. package/dist/client/assets/{Zap-BugHCi8X.js → Zap-flZFj_ZW.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-ByFAAEfX.js → ZapSquare-DfBJqbmB.js} +1 -1
  51. package/dist/client/assets/{access-gate-CXxXDq7M.js → access-gate-BfOH2ehr.js} +1 -1
  52. package/dist/client/assets/{agent-icon-DOI2tApX.js → agent-icon-CoWSmZeI.js} +1 -1
  53. package/dist/client/assets/{agents-list-CwuGKhyD.js → agents-list-BC_9BnH9.js} +1 -1
  54. package/dist/client/assets/{ai-providers-B8CuFSxO.js → ai-providers-DO3ALaUO.js} +1 -1
  55. package/dist/client/assets/{alert-s0pCZvrN.js → alert-B9M-khBf.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-CJ5ysQw1.js → alert-dialog-xk0i6uOf.js} +1 -1
  57. package/dist/client/assets/{api-keys-CNaEzICq.js → api-keys-DvdSzOBt.js} +1 -1
  58. package/dist/client/assets/{app-editor-vDpgO4Js.js → app-editor-BFyPvDC0.js} +1 -1
  59. package/dist/client/assets/{auth-rs29h056.js → auth-Uy0w4hkL.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-B1QSm-9o.js → auth-catchall-DN3O-XcI.js} +1 -1
  61. package/dist/client/assets/{auth-entry-1XSngtOS.js → auth-entry-BA5zF7Od.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-BfWYWPMt.js → auth-split-layout-CyzyX7hp.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-u3eKfPlD.js → authenticate-and-persist-oauth-DBPTryx5.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-BuTWtJff.js → automation-list-row-C2XzpKdh.js} +1 -1
  65. package/dist/client/assets/{automation-runs-kYD3hfPc.js → automation-runs--DeWLHLZ.js} +1 -1
  66. package/dist/client/assets/{automations-CPOLYHAC.js → automations-C3DtmndL.js} +1 -1
  67. package/dist/client/assets/{avatar-fCufDxbD.js → avatar-_-D5iDIN.js} +1 -1
  68. package/dist/client/assets/{badge-DKpkmW6j.js → badge-CDQQQbvb.js} +1 -1
  69. package/dist/client/assets/{block-document-D7YP8bTE.js → block-document-Culeyoxj.js} +1 -1
  70. package/dist/client/assets/{breadcrumb-DPH9cn5e.js → breadcrumb-NtLjhPhW.js} +1 -1
  71. package/dist/client/assets/{buckets-DYzL_C3A.js → buckets-CvEUyiW2.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-34kqRIPq.js → bulk-category-panel-CfDcaS2D.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-CZTCI2C4.js → capability-load-error-3Jz96HF2.js} +1 -1
  74. package/dist/client/assets/{cards-CvlNJsYy.js → cards-CUbQM3D3.js} +1 -1
  75. package/dist/client/assets/{category-editor-CW6nNL8A.js → category-editor-CC7R-OTf.js} +1 -1
  76. package/dist/client/assets/{chart-DRA2Sbnn.js → chart-EPThyboW.js} +1 -1
  77. package/dist/client/assets/{chat-context-nGz9JpS1.js → chat-context-DjotdD4C.js} +1 -1
  78. package/dist/client/assets/{checkbox-BrqMnt1J.js → checkbox-DVfc9X49.js} +1 -1
  79. package/dist/client/assets/{choose-editor-Bu0bESEk.js → choose-editor-CILwoet7.js} +1 -1
  80. package/dist/client/assets/{cli-auth-success-Cv3L-X-M.js → cli-auth-success-qAmg-U4B.js} +1 -1
  81. package/dist/client/assets/{collection-detail-DM7DQAa7.js → collection-detail-C9F7AoJJ.js} +1 -1
  82. package/dist/client/assets/{collection-display-button-DISoRbNW.js → collection-display-button-ytZhkFQJ.js} +1 -1
  83. package/dist/client/assets/{collection-search-Mr-6uPAb.js → collection-search-vQNkhmmK.js} +1 -1
  84. package/dist/client/assets/{collection-table-wrapper-ByvyVrFC.js → collection-table-wrapper-BR0_6TaP.js} +1 -1
  85. package/dist/client/assets/{collection-tabs-D0wNW4vO.js → collection-tabs-Co_XeSHS.js} +1 -1
  86. package/dist/client/assets/{command-BkdMSk9B.js → command-B8F0uHex.js} +1 -1
  87. package/dist/client/assets/{commerce-onboarding-B8-WuLfx.js → commerce-onboarding-BGQ2Hlgl.js} +1 -1
  88. package/dist/client/assets/{config-B2iHRVUs.js → config-BSqz_GMQ.js} +1 -1
  89. package/dist/client/assets/{connect-7c3qhKQM.js → connect-BZRm8ITd.js} +1 -1
  90. package/dist/client/assets/{connection-BUjz_rww.js → connection-DB_75MPZ.js} +1 -1
  91. package/dist/client/assets/{connection-card-CO_XsIbh.js → connection-card-M6hmLGZq.js} +1 -1
  92. package/dist/client/assets/{connection-detail-RzgKmTG4.js → connection-detail-CEhh3XeN.js} +1 -1
  93. package/dist/client/assets/{connection-form-helpers-BY6k-_16.js → connection-form-helpers-daJ-4E-F.js} +1 -1
  94. package/dist/client/assets/{connections-BoDbGug5.js → connections-BfnIniTG.js} +1 -1
  95. package/dist/client/assets/{decopilot-sse-pool-DoDgdmeJ.js → decopilot-sse-pool-VQZMAg5B.js} +1 -1
  96. package/dist/client/assets/{dialog-C2IKe1zF.js → dialog-BQeVUlNg.js} +1 -1
  97. package/dist/client/assets/{domain-settings-DFyTuehI.js → domain-settings-DntxO5hc.js} +1 -1
  98. package/dist/client/assets/{drawer-UMPTrEjf.js → drawer-Cdb1rsne.js} +1 -1
  99. package/dist/client/assets/{dropdown-menu-FH3inEy4.js → dropdown-menu-C0_Vnzhe.js} +1 -1
  100. package/dist/client/assets/{empty-state-bIJhMrjq.js → empty-state-BJDHE2BS.js} +1 -1
  101. package/dist/client/assets/{extract-connection-data-CeLxRKdE.js → extract-connection-data-DLWzenU1.js} +1 -1
  102. package/dist/client/assets/{file-explorer-Dy30Hj3F.js → file-explorer-qG6ew9Fb.js} +1 -1
  103. package/dist/client/assets/{file-type-icon-C544ccwK.js → file-type-icon-ChXTeBJ-.js} +1 -1
  104. package/dist/client/assets/{form-bNRM5rS2.js → form-DcxePO8A.js} +1 -1
  105. package/dist/client/assets/{general-BCbDpJ9v.js → general-024875TR.js} +1 -1
  106. package/dist/client/assets/{github-repo-picker-BGOqlWax.js → github-repo-picker-m3Jw1ZFD.js} +1 -1
  107. package/dist/client/assets/{hooks-D_fj6_sa.js → hooks-CJ16hHiH.js} +1 -1
  108. package/dist/client/assets/{index-vH9NvJ_o.js → index-BVwOH7wh.js} +56 -56
  109. package/dist/client/assets/{index-C8_V8CtT.js → index-BkWfJqUq.js} +1 -1
  110. package/dist/client/assets/{index-D29Atsz_.js → index-C7sanlxA.js} +1 -1
  111. package/dist/client/assets/{index-DtvPU7ig.js → index-CLdaL--4.js} +1 -1
  112. package/dist/client/assets/{index-D1NTn-VZ.js → index-DFp8sE3x.js} +1 -1
  113. package/dist/client/assets/{index-q-YhQ8uS.js → index-DO_6i8ae.js} +1 -1
  114. package/dist/client/assets/{index-Y2pkX55l.js → index-DQIXNoxg.js} +1 -1
  115. package/dist/client/assets/{index-DfXSMTCc.js → index-RdcCdojW.js} +3 -3
  116. package/dist/client/assets/{index-DzjOxHxJ.js → index-Wqx51PrS.js} +1 -1
  117. package/dist/client/assets/{index-redirect-Dm-MCrFE.js → index-redirect-BWxMOkr5.js} +1 -1
  118. package/dist/client/assets/{infra-billing-CnYckF9w.js → infra-billing-DtobgH9i.js} +1 -1
  119. package/dist/client/assets/{input-L6KTHxbU.js → input-Du_Y4DA2.js} +1 -1
  120. package/dist/client/assets/{integration-icon-Dkvk-jEE.js → integration-icon-BxAzHrAu.js} +1 -1
  121. package/dist/client/assets/{invite-member-dialog-ka_jl4lP.js → invite-member-dialog-CaxcKJI4.js} +1 -1
  122. package/dist/client/assets/{label-BKy1WiQD.js → label-DliIyCSr.js} +1 -1
  123. package/dist/client/assets/{layout-IJ17ikFh.js → layout-DlaNSsr1.js} +1 -1
  124. package/dist/client/assets/{login-Cg1S59-T.js → login-Ckbo-Vz5.js} +1 -1
  125. package/dist/client/assets/{mcp-oauth-pKoOeQym.js → mcp-oauth-WauR-bs4.js} +1 -1
  126. package/dist/client/assets/{members-Dmpq0M6g.js → members-a949EBr4.js} +1 -1
  127. package/dist/client/assets/{monaco-editor-BY7KtbvT.js → monaco-editor-IJ-39JCS.js} +1 -1
  128. package/dist/client/assets/{monitoring-stats-row-DsE0I1nf.js → monitoring-stats-row-DaD2Jrr6.js} +1 -1
  129. package/dist/client/assets/{multi-select-E-12rMrh.js → multi-select-D5UXeLol.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-dpjogY67.js → oauth-callback-DxBWyg42.js} +1 -1
  131. package/dist/client/assets/{oauth-callback-ai-provider-850e1hsj.js → oauth-callback-ai-provider-CZNeWtz4.js} +1 -1
  132. package/dist/client/assets/{onboarding-RWcnP-H8.js → onboarding-DRVSKjPk.js} +1 -1
  133. package/dist/client/assets/{org-layout--y96-2Tr.js → org-layout-ClcynPuV.js} +1 -1
  134. package/dist/client/assets/{organization-choice-BB8V0nF1.js → organization-choice-I-YI4Hfp.js} +1 -1
  135. package/dist/client/assets/{orgs-DXYaYz8-.js → orgs-DInZUyCT.js} +1 -1
  136. package/dist/client/assets/{page-seo-form-CJgCfBGo.js → page-seo-form-D3IStzwj.js} +1 -1
  137. package/dist/client/assets/{popover-BWm4ZuOz.js → popover-DT1H987m.js} +1 -1
  138. package/dist/client/assets/{post-calendar-DruCaFPj.js → post-calendar-JST7iWOD.js} +1 -1
  139. package/dist/client/assets/{post-editor-CUtahy49.js → post-editor-ByBw44q8.js} +1 -1
  140. package/dist/client/assets/{primitives-IChpJZjf.js → primitives-Dnsli8EF.js} +1 -1
  141. package/dist/client/assets/{profile-DvxVfG4s.js → profile-BbFIqW5a.js} +1 -1
  142. package/dist/client/assets/{project-app-view-4eD5MQS5.js → project-app-view-DbtCy7pb.js} +1 -1
  143. package/dist/client/assets/{prompts-DIDkeju5.js → prompts-HkO-Vpz-.js} +1 -1
  144. package/dist/client/assets/record-editor-CWOvxS63.js +1 -0
  145. package/dist/client/assets/{redirect-editor-TRsFyuSI.js → redirect-editor-Ezo9udF_.js} +1 -1
  146. package/dist/client/assets/registry-Dr4KVLHz.js +2 -0
  147. package/dist/client/assets/{registry-layout-Scc8uz5h.js → registry-layout-BfN3Djd5.js} +1 -1
  148. package/dist/client/assets/{reports-C8VJto2t.js → reports-BwEY90Df.js} +1 -1
  149. package/dist/client/assets/{require-capability-CJnVYeze.js → require-capability-UslAqT6u.js} +1 -1
  150. package/dist/client/assets/{required-auth-layout-vdMcmnEm.js → required-auth-layout-BO2dyb3Z.js} +1 -1
  151. package/dist/client/assets/{reset-password-BntoR1Vq.js → reset-password-CZD7IJ_X.js} +1 -1
  152. package/dist/client/assets/{review-settings-BJ-FvzJt.js → review-settings-rIJZr07q.js} +1 -1
  153. package/dist/client/assets/{roles-Cy3a_x3A.js → roles-CEDnNlmJ.js} +1 -1
  154. package/dist/client/assets/{scroll-area-a26KcNVI.js → scroll-area-GoohikBy.js} +1 -1
  155. package/dist/client/assets/{search-input-CuTOYyNU.js → search-input-q7fsDfhe.js} +1 -1
  156. package/dist/client/assets/{secrets-B-gyNovL.js → secrets-C9pq-vmx.js} +1 -1
  157. package/dist/client/assets/{sections-editor-JgzfsHcg.js → sections-editor-B42Y1DLA.js} +1 -1
  158. package/dist/client/assets/{select-BQ3hNixW.js → select-BCD3yHoj.js} +1 -1
  159. package/dist/client/assets/{select-model-BIJ_zVAq.js → select-model-CmeXughu.js} +1 -1
  160. package/dist/client/assets/{self-tool-result-B6X9NbiC.js → self-tool-result-C_vauqtO.js} +1 -1
  161. package/dist/client/assets/{seo-editor-3m3dlRyA.js → seo-editor-DhDGxqLq.js} +1 -1
  162. package/dist/client/assets/{settings-layout-DLRfAQJV.js → settings-layout-D7SbWIHX.js} +1 -1
  163. package/dist/client/assets/{shell-controls-DDxZTktm.js → shell-controls-uInUYrKF.js} +1 -1
  164. package/dist/client/assets/{shell-layout-CnD0ZtlM.js → shell-layout-Bs8Lt777.js} +1 -1
  165. package/dist/client/assets/{spinner-ign6rb1p.js → spinner-B6eC17SF.js} +1 -1
  166. package/dist/client/assets/{sso-CcFHdsfb.js → sso-Bk4PrZ0u.js} +1 -1
  167. package/dist/client/assets/{store-Ch-G6PFT.js → store-CPkZj-0x.js} +1 -1
  168. package/dist/client/assets/store-registry-BckmJcRr.js +2 -0
  169. package/dist/client/assets/{super-agent-icon-DsilOhXN.js → super-agent-icon-JVWXoXUu.js} +1 -1
  170. package/dist/client/assets/{switch-C4CGwbnk.js → switch-C-FkHg7r.js} +1 -1
  171. package/dist/client/assets/{synced-repos-CnbgOlMK.js → synced-repos-DFsmXJPP.js} +1 -1
  172. package/dist/client/assets/{table-sikc3ZBl.js → table-Do7ccGVi.js} +1 -1
  173. package/dist/client/assets/{tabs-3XxjBLC3.js → tabs-poHQpH5O.js} +1 -1
  174. package/dist/client/assets/{task-board-CSpyzJS8.js → task-board-CQBNS0e1.js} +1 -1
  175. package/dist/client/assets/{tasks-DDAk2KR9.js → tasks-Du4jU6Vj.js} +1 -1
  176. package/dist/client/assets/{textarea-BMQj0P1A.js → textarea-DkW_z2IU.js} +1 -1
  177. package/dist/client/assets/{toggle-group-_8dirqwA.js → toggle-group-Dke2CTaB.js} +1 -1
  178. package/dist/client/assets/{toolbar-Dt7fv7f6.js → toolbar-DrpKuEOS.js} +1 -1
  179. package/dist/client/assets/{track-DOWBFfEB.js → track-_bb26qlp.js} +1 -1
  180. package/dist/client/assets/{types-DR51Jm5j.js → types-D55csc5w.js} +1 -1
  181. package/dist/client/assets/{use-ai-providers-59585zk-.js → use-ai-providers-B-OYAKkb.js} +1 -1
  182. package/dist/client/assets/{use-api-keys-CbuQDxex.js → use-api-keys-DgMbMjH3.js} +1 -1
  183. package/dist/client/assets/{use-automations-BnjaNkff.js → use-automations-CHyRAX5J.js} +1 -1
  184. package/dist/client/assets/{use-autosave-DIXFcITo.js → use-autosave-Y8_JQVtM.js} +1 -1
  185. package/dist/client/assets/{use-connection-BHsOvRtj.js → use-connection-CDBAVShn.js} +1 -1
  186. package/dist/client/assets/{use-copy-WdaRa-XC.js → use-copy-A2iDXIiC.js} +1 -1
  187. package/dist/client/assets/{use-create-virtual-mcp-tcsL6JI0.js → use-create-virtual-mcp-RE3GTo0q.js} +1 -1
  188. package/dist/client/assets/{use-debounced-autosave-MXJyY830.js → use-debounced-autosave-BRpxCMxF.js} +1 -1
  189. package/dist/client/assets/{use-debounced-value-Bkh1n3nw.js → use-debounced-value-zLcMcGu_.js} +1 -1
  190. package/dist/client/assets/{use-decopilot-events-BSPhmsjR.js → use-decopilot-events-BWpzWgPA.js} +1 -1
  191. package/dist/client/assets/{use-delete-connection-CIdsdoEV.js → use-delete-connection-EL_dI6O3.js} +1 -1
  192. package/dist/client/assets/{use-deployment-admin-VqDWsx3M.js → use-deployment-admin-B39gtWeS.js} +1 -1
  193. package/dist/client/assets/{use-destination-route-C80IclA_.js → use-destination-route-R7oVWY5R.js} +1 -1
  194. package/dist/client/assets/{use-file-configs-DimrA62T.js → use-file-configs-Qm8xBC7Z.js} +1 -1
  195. package/dist/client/assets/{use-infinite-scroll-CJwUD0oL.js → use-infinite-scroll-GqEVBMeV.js} +1 -1
  196. package/dist/client/assets/{use-join-requests-B_QeTkBC.js → use-join-requests-BVuIrKnA.js} +1 -1
  197. package/dist/client/assets/{use-mcp-auth-status-C1qjF90L.js → use-mcp-auth-status-B-LZ1Wex.js} +1 -1
  198. package/dist/client/assets/{use-mcp-client-B5EafbnC.js → use-mcp-client-Bl7OJFcH.js} +1 -1
  199. package/dist/client/assets/{use-mcp-tools-CwxsuKcQ.js → use-mcp-tools-_tcIXZL0.js} +1 -1
  200. package/dist/client/assets/{use-members-Cy-JeJ5z.js → use-members-_ByrBAvF.js} +1 -1
  201. package/dist/client/assets/{use-navigate-to-agent-Bue0ia8m.js → use-navigate-to-agent-C1od-jNe.js} +1 -1
  202. package/dist/client/assets/{use-org-auth-client-hBGAX_Sf.js → use-org-auth-client-BamEWpk2.js} +1 -1
  203. package/dist/client/assets/{use-org-repo-syncs-BQDQdZDe.js → use-org-repo-syncs-CG_xOEkn.js} +1 -1
  204. package/dist/client/assets/{use-org-sso-D2s1KOAJ.js → use-org-sso-CnP_xN_9.js} +1 -1
  205. package/dist/client/assets/{use-organization-roles-BoUolM8c.js → use-organization-roles-BFHuemUc.js} +1 -1
  206. package/dist/client/assets/{use-organization-settings-C-U7a0JM.js → use-organization-settings-CdhZq3TO.js} +1 -1
  207. package/dist/client/assets/{use-panel-navigate-CaAOAFJh.js → use-panel-navigate-hX9xgEkF.js} +1 -1
  208. package/dist/client/assets/{use-registry-connections-nveC5Mv9.js → use-registry-connections-Debcpo6W.js} +1 -1
  209. package/dist/client/assets/{use-secrets-vTX_InO6.js → use-secrets-Du7VCMTf.js} +1 -1
  210. package/dist/client/assets/{use-section-preview-base-Ctqd1e_Z.js → use-section-preview-base-BoL1Z0zp.js} +1 -1
  211. package/dist/client/assets/{use-status-sounds-DCGItJvf.js → use-status-sounds-DNfv1_kv.js} +1 -1
  212. package/dist/client/assets/{use-tags-tvWbxTV6.js → use-tags-BWfTkjku.js} +1 -1
  213. package/dist/client/assets/{use-view-mode-0GRcDha9.js → use-view-mode-Bv98Xblu.js} +1 -1
  214. package/dist/client/assets/{use-virtual-mcp-y30Jgcp3.js → use-virtual-mcp-BV3GNVOc.js} +1 -1
  215. package/dist/client/assets/useInfiniteQuery-D19sUk6p.js +1 -0
  216. package/dist/client/assets/useSuspenseInfiniteQuery-DdW-dVOd.js +1 -0
  217. package/dist/client/assets/{users-B0kLKZ0v.js → users-CHSght6P.js} +1 -1
  218. package/dist/client/assets/{variant-calendar-C655Em17.js → variant-calendar-DwGEVcFc.js} +1 -1
  219. package/dist/client/assets/{view-mode-toggle-D-6gZb_5.js → view-mode-toggle-YRrKQ7HV.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-D_qeacLH.js +0 -1
  225. package/dist/client/assets/registry-Bzn7yttT.js +0 -2
  226. package/dist/client/assets/store-registry-CYB_UPxU.js +0 -2
  227. package/dist/client/assets/useInfiniteQuery-yONwXBd7.js +0 -1
  228. package/dist/client/assets/useSuspenseInfiniteQuery-D9xBWvO9.js +0 -1
@@ -2920,7 +2920,7 @@ Respond with the structured verdict and a short reason.`,xc$;var gc$=D(()=>{D4()
2920
2920
  ${G.join(`
2921
2921
  `)}`:Y}function GN6($){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 jl$=200,rH6=12,sH6,$N6=300,U71=3;var B71=D(()=>{gD();WT0();sH6={aheadBy:0,behindBy:0,files:[]}});function WN6($){if(!$||$.includes(".."))return!1;return JN6.test($)}function Pl$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!WN6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Al$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var JN6;var Tl$=D(()=>{JN6=/^[\w./@-]+$/});function Hs($,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 Rl$($,Z,X,Q){if(!Q.connectionId)throw new Wv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Wv(G9);await AO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:G9;throw new Wv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await RK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=B5$(H instanceof Error?H.message:String(H));throw N?new Wv(U):H}),K=uu($),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 PO(F,KN6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var KN6=10485760,Wv;var O71=D(()=>{ZJ();rA0();Yn();Ni0();Ay();Wv=class Wv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function HN6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!FN6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Kv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(UN6)])}async function ON6($,Z){let X=$.var.studioContext,Q=eG(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=NC(J?.metadata?.runtime);if(W)return W;let K=lO0(Z.virtualMcpMetadata),F=K==="cms"?await oZ1(X,{claimName:Z.claimName}):"alive",H=K==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&K==="cms");if(N&&J)vn(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 DN6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await $Q($.var.studioContext)}catch{return null}}function Fv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function iu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Hs(Z,X);if(!Y)throw new M4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return aA0(Q,G.id,Y)}function D71($,Z){if(Z instanceof XA0)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 Ml$($,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 kl$($){try{let Z=await iu($),X=await KT0(Z,$.get("vmClaim").branch);return $.json(X,200,P5)}catch(Z){return D71($,Z)}}function Ns($,Z){let Q=(NT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return NT0.set($,Y),Y.finally(()=>{if(NT0.get($)===Y)NT0.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??Fv($);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?LN6(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 LN6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function UT0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function wN6($){return Vl$.includes($)}var FN6,Il$=524288,NN6=65536,UN6=1e4,ql$=2000,BN6,NT0,P5,Vl$,Sl$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",BN6),$.post("/:virtualMcpId/:branch/write",(X)=>tZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Kv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>tZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Kv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>tZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Kv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>tZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Kv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>tZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Kv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>tZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Kv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>tZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Kv(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||!wN6(Q))return X.json({error:`step must be one of: ${Vl$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await oZ1(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await DN6(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=zy(Y.virtualMcpMetadata);try{await Y70({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 cN(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 Sc$(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 kl$(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(ql$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return kl$(X);return tZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(ql$)])})}),$.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 iu(X),J=await FT0(G,Q.branch,Y.base);return X.json(J,200,P5)}catch(Y){return D71(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=Fv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Ns(Y,async()=>{try{await rZ1(W,Q,Y);let K=Hs(G,J);if(K)await Rl$(W,Q,Y,K)}catch(K){if(K instanceof Wv)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 Ns(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 iu(X);return await zl$(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 Ns(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 Ns(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await iu(X),F=W.base??await K.getDefaultBranch();return await HT0(K,Q.branch,F),X.json({ok:!0},200,P5)}catch(W){return D71(X,W)}});let Y=Fv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Ns(G,async()=>{try{await rZ1(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:Il$,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=Fv(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]=eZ1(H)&&U?[H,N]:Y?await Promise.all([UT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),UT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await iu(X);return Promise.all([KT0(w,Q.branch),FT0(w,Q.branch)])})(),L=await bc$(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:Il$,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=Fv(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]=eZ1(H)&&U?[H,N]:Y?await Promise.all([UT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),UT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await iu(X);return Promise.all([KT0(w,Q.branch),FT0(w,Q.branch)])})(),L=await yc$(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=Fv(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 Ml$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",p5({maxSize:NN6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Fv(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=Pl$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Al$(G,W.resolveType);return Ml$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Cl$=D(()=>{U8();DF();hu();tZ1();ep();Mc$();x3();uy();kc$();c3();Vc$();Cc$();Ki0();Xn();X71();gc$();Y71();gD();B71();Tl$();O71();FN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BN6=oA0(async($,Z)=>{let X=$.var.studioContext;try{r(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{HN6(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=ap({orgId:Y.id,virtualMcpId:G,branch:J}),F=await Xi0(X,J),H=Qi0(F,Q),N=qc$({userId:H,projectRef:K}),U=W.metadata??null,B=await ON6($,{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()});NT0=new Map;P5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Vl$=["clone","install","start"]});function _l$($,Z,X){let Q=L71.get($);if(!Q)Q={pending:null,running:!1},L71.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)jN6($,Q);return G}async function jN6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await zN6(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)L71.delete($)}}async function zN6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await mu(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=H71(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=N71(K,O),E=`${JSON.stringify(L,null,2)}
2923
- `,j=await Z.createBlob(E);await Ll$(Z.owner,Z.repo,j,E);let z=w[0]??`${JT0(Q)}/${G71(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 N71(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}=Js(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:PN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof M4&&O.status===422)||Y>=EN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function PN6($){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 rm0(Q,$.deps.coAuthor)}var EN6=3,L71;var vl$=D(()=>{xO0();eA0();W4();gD();WT0();L71=new Map});import{createHmac as fl$,randomBytes as AN6,timingSafeEqual as TN6}from"crypto";function bl$(){if(BT0)return BT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return BT0=$?Buffer.from($):AN6(32),BT0}function w71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+RN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=fl$("sha256",bl$()).update(Q).digest("base64url");return`${Q}.${Y}`}function xl$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(fl$("sha256",bl$()).update(Q).digest("base64url"));if(Y.length!==G.length||!TN6(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 RN6=21600000,BT0=null;var yl$=D(()=>{R$()});import{z as pu}from"zod";function qN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&IN6.test($)}function ll$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Us($){let Z=$.get("decofileScope");return aA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bs($,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 dl$(){let $=new H1;return $.use("/:virtualMcpId/:branch",cl$),$.use("/:virtualMcpId/:branch/*",cl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Us(Z),Y=await wl$(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=w71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ll$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bs(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 Us(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 Bs(Z,Y)}}),$.patch("/:virtualMcpId/:branch",kN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=VN6.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{sA0(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 Us(Z),W=await _l$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:uu(Q)},G),K=w71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:ll$(Z)})}catch(J){return Bs(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Us(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 HT0(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 Bs(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Us(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 Bs(Z,Q)}}),$}var IN6,gl$=500,hl$=1048576,ul$=1024,MN6=8388608,kN6,VN6,cl$;var ml$=D(()=>{eA0();U8();DF();tZ1();rA0();O71();Y71();vl$();yl$();B71();gD();WT0();IN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;kN6=p5({maxSize:MN6,onError:($)=>$.json({error:"Payload too large"},413)}),VN6=pu.object({set:pu.record(pu.string(),pu.unknown()).optional(),delete:pu.array(pu.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)<=gl$,{message:`Patch cannot touch more than ${gl$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=hl$),{message:`Each block must be at most ${hl$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=ul$),{message:`Each block key must be at most ${ul$} characters`}),cl$=oA0(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(!qN6(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||!xl$(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(!cO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Hs(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 il$=($)=>{let Z=new H1;if(Z.use("*",a_),Z.route("/",UA0()),Z.route("/",Wg$()),Z.route("/",Bc$()),Z.route("/",Hc$()),Z.route("/",pA0()),Z.route("/tools",zc$()),Z.route("/",wc$()),Z.route("/",du$({kvStorage:$.kvStorage})),Z.route("/",cu$()),Z.route("/fs",Qc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Sl$()),Z.route("/decofile",dl$()),Z.route("/",Wc$()),Z.route("/deco-sites",OA0()),Z.route("/sso",JA0()),Z.route("/",nA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ey$()),$.mountDevAssets)Z.route("/dev-assets",DA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",jb$()),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",Gc$()),Z.route("/mcp",Lw0()),Z.route("/mcp/self",iA0()),Z.route("/mcp",jw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var pl$=D(()=>{U8();L91();$g$();z91();LA0();_a();O91();lu$();mu$();Yc$();ht();K91();zw0();cZ1();Jc$();Kc$();Nc$();Oc$();Ec$();dZ1();Pc$();mZ1();ww0();Cl$();ml$()});function SN6($){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 CN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},nl$=()=>{let $=new H1;return $.use("*",CN6),$.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:SN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var tl$=D(()=>{U8();R$();HP0()});import{z as M1}from"zod";function zF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function cN6($){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 lN6($,Z,X){try{return JSON.parse($)}catch{throw new al$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function dN6($){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:lN6(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 mN6($){let Z=$.map((X)=>{let Q=X.function.parameters?dY(X.function.parameters):dY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function iN6($){if(!$)return;return{openai:{response_format:$}}}function pN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function ol$($,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 rl$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var _N6=256,vN6,fN6,bN6,xN6,yN6,gN6,hN6,uN6,al$,sl$,el$;var $d$=D(()=>{D4();U8();hu();zN();vN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),fN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),bN6=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(fN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),xN6=M1.object({type:M1.literal("text")}),yN6=M1.object({type:M1.literal("json_object")}),gN6=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()})}),hN6=M1.union([xN6,yN6,gN6]),uN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(bN6),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(vN6).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:hN6.optional(),user:M1.string().optional()});al$=class al$ extends Error{constructor($){super($);this.name="MessageConversionError"}};sl$=new H1;sl$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(zF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(zF("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(zF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=uN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(zF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=cN6(G.model);if(!J)return $.json(zF("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)=>Xw(j.providerId));if(!E)return $.json(zF("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(zF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=dN6(G.messages),U=G.tools?mN6(G.tools):void 0,B=iN6(G.response_format),O=pN6(),L=Math.floor(Date.now()/1000);if(G.stream)return cN($,async(w)=>{let E=ol$(H,N,U,G,B,$.req.raw.signal);try{let j=LO(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>=_N6)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:rl$(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=ol$(H,N,U,G,B,$.req.raw.signal),E=await OO(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:rl$(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(zF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(zF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(zF(Y.message,"server_error"),500)}});el$=sl$});function nN6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Zd$(){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(!tG(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(ps1(N)!==G)continue;if(!nN6(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 Xd$=D(()=>{U8();sB()});var Yd$;var Qd$=D(()=>{Yd$={name:"decocms",version:"4.293.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function rN6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??oN6}}var Gd$,oN6="https://ph.studio.decocms.com",Jd$;var Wd$=D(()=>{U8();y50();_C();$9();R$();e51();Qd$();Gd$=new H1;Gd$.get("/",($)=>{let Z={version:Yd$.version,theme:Li1(),...PH().logo&&{logo:PH().logo},...WN()&&{internalUrl:pC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Fy$(),posthog:rN6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ps()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Jd$=Gd$});function nu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function E71($){return(nu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Fd$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(nu($))}&sz=${Z}`}function Kd$($,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 Hd$($){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()?Kd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Kd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Hv,aN6,sN6,eN6,$U6,Nd$;var Ud$=D(()=>{Hv=l0.enum(["good","bad","neutral"]),aN6=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:Hv.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 $})),sN6=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(aN6)),eN6={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()},$U6=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:Hv.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:Hv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Hv.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:Hv.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(sN6).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:Hv.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:Hv.optional()})).min(1)})]),Nd$=l0.object({...eN6,template:$U6})});function OT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Nd$.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 j71=D(()=>{Ud$()});import{join as Bd$}from"path";async function XU6($){try{let Z=await fetch(`${JK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(ZU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=OT0(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()||E71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function OG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function QU6($,Z){let X=nu($),Q=Z?.brand?.trim()||E71(X),Y=Fd$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Hd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${OG(W)}</title>`,`<meta name="description" content="${OG(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="${OG(W)}" />`,`<meta property="og:description" content="${OG(K)}" />`,`<meta property="og:url" content="${OG(J)}" />`,`<meta property="og:image" content="${OG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${OG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${OG(W)}" />`,`<meta name="twitter:description" content="${OG(K)}" />`,`<meta name="twitter:image" content="${OG(F)}" />`,`<meta name="twitter:image:alt" content="${OG(H)}" />`,`<link rel="canonical" href="${OG(J)}" />`,`<link rel="icon" href="${OG(Y)}" sizes="any" />`].join(`
2923
+ `,j=await Z.createBlob(E);await Ll$(Z.owner,Z.repo,j,E);let z=w[0]??`${JT0(Q)}/${G71(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 N71(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}=Js(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:PN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof M4&&O.status===422)||Y>=EN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function PN6($){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 rm0(Q,$.deps.coAuthor)}var EN6=3,L71;var vl$=D(()=>{xO0();eA0();W4();gD();WT0();L71=new Map});import{createHmac as fl$,randomBytes as AN6,timingSafeEqual as TN6}from"crypto";function bl$(){if(BT0)return BT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return BT0=$?Buffer.from($):AN6(32),BT0}function w71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+RN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=fl$("sha256",bl$()).update(Q).digest("base64url");return`${Q}.${Y}`}function xl$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(fl$("sha256",bl$()).update(Q).digest("base64url"));if(Y.length!==G.length||!TN6(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 RN6=21600000,BT0=null;var yl$=D(()=>{R$()});import{z as pu}from"zod";function qN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&IN6.test($)}function ll$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Us($){let Z=$.get("decofileScope");return aA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bs($,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 dl$(){let $=new H1;return $.use("/:virtualMcpId/:branch",cl$),$.use("/:virtualMcpId/:branch/*",cl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Us(Z),Y=await wl$(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=w71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ll$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bs(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 Us(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 Bs(Z,Y)}}),$.patch("/:virtualMcpId/:branch",kN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=VN6.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{sA0(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 Us(Z),W=await _l$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:uu(Q)},G),K=w71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:ll$(Z)})}catch(J){return Bs(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Us(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 HT0(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 Bs(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Us(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 Bs(Z,Q)}}),$}var IN6,gl$=500,hl$=1048576,ul$=1024,MN6=8388608,kN6,VN6,cl$;var ml$=D(()=>{eA0();U8();DF();tZ1();rA0();O71();Y71();vl$();yl$();B71();gD();WT0();IN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;kN6=p5({maxSize:MN6,onError:($)=>$.json({error:"Payload too large"},413)}),VN6=pu.object({set:pu.record(pu.string(),pu.unknown()).optional(),delete:pu.array(pu.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)<=gl$,{message:`Patch cannot touch more than ${gl$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=hl$),{message:`Each block must be at most ${hl$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=ul$),{message:`Each block key must be at most ${ul$} characters`}),cl$=oA0(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(!qN6(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||!xl$(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(!cO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Hs(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 il$=($)=>{let Z=new H1;if(Z.use("*",a_),Z.route("/",UA0()),Z.route("/",Wg$()),Z.route("/",Bc$()),Z.route("/",Hc$()),Z.route("/",pA0()),Z.route("/tools",zc$()),Z.route("/",wc$()),Z.route("/",du$({kvStorage:$.kvStorage})),Z.route("/",cu$()),Z.route("/fs",Qc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Sl$()),Z.route("/decofile",dl$()),Z.route("/",Wc$()),Z.route("/deco-sites",OA0()),Z.route("/sso",JA0()),Z.route("/",nA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ey$()),$.mountDevAssets)Z.route("/dev-assets",DA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",jb$()),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",Gc$()),Z.route("/mcp",Lw0()),Z.route("/mcp/self",iA0()),Z.route("/mcp",jw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var pl$=D(()=>{U8();L91();$g$();z91();LA0();_a();O91();lu$();mu$();Yc$();ht();K91();zw0();cZ1();Jc$();Kc$();Nc$();Oc$();Ec$();dZ1();Pc$();mZ1();ww0();Cl$();ml$()});function SN6($){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 CN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},nl$=()=>{let $=new H1;return $.use("*",CN6),$.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:SN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var tl$=D(()=>{U8();R$();HP0()});import{z as M1}from"zod";function zF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function cN6($){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 lN6($,Z,X){try{return JSON.parse($)}catch{throw new al$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function dN6($){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:lN6(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 mN6($){let Z=$.map((X)=>{let Q=X.function.parameters?dY(X.function.parameters):dY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function iN6($){if(!$)return;return{openai:{response_format:$}}}function pN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function ol$($,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 rl$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var _N6=256,vN6,fN6,bN6,xN6,yN6,gN6,hN6,uN6,al$,sl$,el$;var $d$=D(()=>{D4();U8();hu();zN();vN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),fN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),bN6=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(fN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),xN6=M1.object({type:M1.literal("text")}),yN6=M1.object({type:M1.literal("json_object")}),gN6=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()})}),hN6=M1.union([xN6,yN6,gN6]),uN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(bN6),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(vN6).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:hN6.optional(),user:M1.string().optional()});al$=class al$ extends Error{constructor($){super($);this.name="MessageConversionError"}};sl$=new H1;sl$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(zF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(zF("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(zF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=uN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(zF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=cN6(G.model);if(!J)return $.json(zF("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)=>Xw(j.providerId));if(!E)return $.json(zF("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(zF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=dN6(G.messages),U=G.tools?mN6(G.tools):void 0,B=iN6(G.response_format),O=pN6(),L=Math.floor(Date.now()/1000);if(G.stream)return cN($,async(w)=>{let E=ol$(H,N,U,G,B,$.req.raw.signal);try{let j=LO(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>=_N6)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:rl$(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=ol$(H,N,U,G,B,$.req.raw.signal),E=await OO(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:rl$(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(zF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(zF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(zF(Y.message,"server_error"),500)}});el$=sl$});function nN6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Zd$(){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(!tG(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(ps1(N)!==G)continue;if(!nN6(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 Xd$=D(()=>{U8();sB()});var Yd$;var Qd$=D(()=>{Yd$={name:"decocms",version:"4.293.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 rN6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??oN6}}var Gd$,oN6="https://ph.studio.decocms.com",Jd$;var Wd$=D(()=>{U8();y50();_C();$9();R$();e51();Qd$();Gd$=new H1;Gd$.get("/",($)=>{let Z={version:Yd$.version,theme:Li1(),...PH().logo&&{logo:PH().logo},...WN()&&{internalUrl:pC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Fy$(),posthog:rN6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ps()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Jd$=Gd$});function nu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function E71($){return(nu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Fd$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(nu($))}&sz=${Z}`}function Kd$($,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 Hd$($){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()?Kd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Kd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Hv,aN6,sN6,eN6,$U6,Nd$;var Ud$=D(()=>{Hv=l0.enum(["good","bad","neutral"]),aN6=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:Hv.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 $})),sN6=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(aN6)),eN6={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()},$U6=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:Hv.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:Hv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Hv.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:Hv.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(sN6).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:Hv.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:Hv.optional()})).min(1)})]),Nd$=l0.object({...eN6,template:$U6})});function OT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Nd$.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 j71=D(()=>{Ud$()});import{join as Bd$}from"path";async function XU6($){try{let Z=await fetch(`${JK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(ZU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=OT0(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()||E71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function OG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function QU6($,Z){let X=nu($),Q=Z?.brand?.trim()||E71(X),Y=Fd$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Hd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${OG(W)}</title>`,`<meta name="description" content="${OG(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="${OG(W)}" />`,`<meta property="og:description" content="${OG(K)}" />`,`<meta property="og:url" content="${OG(J)}" />`,`<meta property="og:image" content="${OG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${OG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${OG(W)}" />`,`<meta name="twitter:description" content="${OG(K)}" />`,`<meta name="twitter:image" content="${OG(F)}" />`,`<meta name="twitter:image:alt" content="${OG(H)}" />`,`<link rel="canonical" href="${OG(J)}" />`,`<link rel="icon" href="${OG(Y)}" sizes="any" />`].join(`
2924
2924
  `)}function YU6($,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 Od$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=nu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Bd$($,"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(`${JK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(GU6)}),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=$?Bd$($,"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 XU6(nu(Q)),K=QU6(Q,W);return X.html(YU6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var ZU6=2500,GU6=1e4;var Dd$=D(()=>{U8();j71();JE();R$()});function Os($,Z){return fetch(`${JK({})}${$}`,Z)}async function JU6($,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 Os(`/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}=OT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var WU6,dN,Ld$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},wd$;var Ed$=D(()=>{U8();hY();JE();j71();WU6=new Set(["complete","errored","terminated","unknown"]),dN=new H1;dN.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});dN.use("/link-token/*",Ld$);dN.use("/suggest",Ld$);dN.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 JU6(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)}});dN.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 Os("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${GE({})}`},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)}});dN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Os(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${GE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:WU6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});dN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Os(`/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)}});dN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Os(`/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:[]})}});wd$=dN});import{createHmac as KU6,timingSafeEqual as FU6}from"crypto";function zd$($,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)>HU6)return!1;let W=KU6("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&&FU6(K,H)})}function Pd$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=bJ(Z),Q=bJ(bJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:PF(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 Ad$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function PF($){return typeof $==="string"?$:void 0}function bJ($){return typeof $==="object"&&$!==null?$:void 0}function DT0($){return typeof $==="number"?new Date($*1000):null}function A71($){return PF($)??PF(bJ($)?.id)}function NU6($){return A71($.subscription)??PF(bJ(bJ($.parent)?.subscription_details)?.subscription)}function UU6($){let Z=DT0($.current_period_end);if(Z)return Z;let X=bJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=bJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function z71($,Z){let X=DT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function P71($,Z){let X=DT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function BU6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=PF(bJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(PF(bJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(PF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=PF(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(bJ(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:bJ(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(PF(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=A71(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(z71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:A71(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:P71(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=PF(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&&z71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Ad$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:UU6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:P71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=NU6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(z71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:DT0(X.period_end),lastStripeEventAt:P71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function OU6($,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:Ad$(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 jd$($,Z){let X=OU6($,Z);if(!X)return;fY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Rn1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Td$($){let Z=new XK(r8().db),X=await BU6(Z,$);if(!(X.handled&&X.topUp))jd$($,X);if(X.handled&&X.topUp)await lE$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),jd$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await de1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof uY&&(Q.status===400||Q.status===404)))throw Q}return X}var HU6=300;var Rd$=D(()=>{lG();_4();L50();DE();f01()});var DU6=1048576,T71;var Id$=D(()=>{U8();DF();R$();Rd$();T71=new H1;T71.post("/webhook",p5({maxSize:DU6,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(!zd$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Pd$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Td$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as LU6}from"crypto";function EU6($,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 LU6(Buffer.from(Y),Buffer.from(Q))}var wU6=5242880,R71;var qd$=D(()=>{U8();DF();c3();R71=new H1;R71.post("/webhook",p5({maxSize:wU6,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(!EU6(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 Sn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Md$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var kd$,jU6,zU6,Vd$;var Sd$=D(()=>{U8();j3();Og();ax();kd$=new H1,jU6=["range","if-none-match","if-modified-since"],zU6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];kd$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(zu($))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 Ht(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&pG()){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 Md$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of jU6){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 zU6){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),Md$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Vd$=kd$});var Ds=_((Nv)=>{var PU6=Nv&&Nv.__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]}),AU6=Nv&&Nv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))PU6(Z,$,X)};Object.defineProperty(Nv,"__esModule",{value:!0});AU6(jY(),Nv)});var vd$=_((Cd$)=>{Object.defineProperty(Cd$,"__esModule",{value:!0});Cd$.version=void 0;Cd$.version="3.4.0"});var xd$=_((AF)=>{var TU6=AF&&AF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(AF,"__esModule",{value:!0});AF.NodeTransport=AF.VERSION=void 0;AF.nodeResolveHost=VU6;var s6=Ds(),RU6=j0("net"),I71=j0("tls"),IU6=j0("path"),fd$=j0("fs"),qU6=TU6(j0("dns")),MU6=vd$();AF.VERSION=MU6.version;var kU6="nats.js";class bd${socket;version;lang;yields=[];signal=(0,s6.deferred)();closedNotification=(0,s6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=kU6,this.version=AF.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,RU6.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,IU6.resolve)($),!(0,fd$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,fd$.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,I71.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,I71.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 I71.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}}AF.NodeTransport=bd$;function VU6($){let Z=(0,s6.deferred)();return qU6.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 cd$=_((ud$)=>{Object.defineProperty(ud$,"__esModule",{value:!0});ud$.connect=SU6;var yd$=xd$(),gd$=Ds(),hd$=Ds();function SU6($={}){if((0,hd$.hasWsProtocol)($))return Promise.reject(hd$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,gd$.setTransportFactory)({factory:()=>{return new yd$.NodeTransport},dnsResolveFn:yd$.nodeResolveHost}),gd$.NatsConnectionImpl.connect($)}});var ld$=_((mN)=>{var _U6=mN&&mN.__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=mN&&mN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))_U6(Z,$,X)};Object.defineProperty(mN,"__esModule",{value:!0});mN.connect=void 0;var fU6=cd$();Object.defineProperty(mN,"connect",{enumerable:!0,get:function(){return fU6.connect}});vU6(Ds(),mN)});function pd$($){let Z=$?.connectFn??gU6,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:yU6,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(xU6,bU6,O-1,2,0.5);await L$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?dd$.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=id$.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 gU6($){return md$.connect($)}var dd$,md$,id$,bU6=100,xU6=3000,yU6=3000;var nd$=D(()=>{W4();dd$=V(Ec(),1),md$=V(ld$(),1),id$=V(FL(),1)});function q71($,Z){return`${$}.${Z}`}class M71{cache;constructor($){this.cache=Zu({ttlMs:$?.ttlMs??hU6,maxSize:$?.maxSize??uU6})}async get($,Z){return this.cache.get(q71($,Z))??null}async set($,Z,X){this.cache.set(q71($,Z),X)}async invalidate($,Z){this.cache.delete(q71($,Z))}teardown(){this.cache.clear()}}var hU6=600000,uU6=5000;var td$=()=>{};function LT0($,Z){return`${$}:${Z}`}function k71($){let Z=Zu({ttlMs:$?.ttlMs??cU6,maxSize:$?.maxSize??lU6}),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(od$,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(LT0(K,F))},set(K,F,H){Z.set(LT0(K,F),H)},invalidate(K,F){Z.delete(LT0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(od$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(LT0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var od$="studio.ai-provider-keys.invalidate",cU6=30000,lU6=5000;var rd$=()=>{};class V71{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 ad$=($)=>{let Z;return()=>Z??=$()},S71,C71;var sd$=D(()=>{I6();S71=ad$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),C71=ad$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function oU6($=Zm$){return{name:lK,subjects:[`${sr0}.>`],storage:LW.StorageType.File,max_age:iU6,max_bytes:nU6,max_msgs_per_subject:tU6,discard:LW.DiscardPolicy.Old,retention:LW.RetentionPolicy.Limits,duplicate_window:pU6,num_replicas:$}}class Xm${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 ed$($){let Z=$m$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function eU6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,mU6().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 $B6($,Z){return $.info?.cluster?Z:1}function ZB6($){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 _71{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=oU6(Y);try{await Q.streams.info(lK),await Q.streams.update(lK,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(lK,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(lK),await Q.streams.add(G);else throw J}},X=await g6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await LW.jetstreamManager($),Y=$B6($,Zm$);try{await Z(Q,Y)}catch(G){if(Y<=1||!ZB6(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:Ig});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=eU6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=vB$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=$a0(F,{runId:Z}),U=performance.now()-H;S71().record(U),C71().add(1,{"org.id":Q??"unknown"}),sU6?.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?ed$(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(),aU6)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:ed$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Ig}),!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=$a0(Z,{runId:$,dedup:X});S71().record(performance.now()-Y),C71().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=_B$({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"?LW.DeliverPolicy.New:LW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=$D($),W;try{W=await g6(async()=>{return(await Q.consumers.get(lK,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Ig})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=rL0({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(pL0()).pipeThrough(nL0()).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(lK,{filter:$D($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var LW,$m$,dU6=($)=>{let Z;return()=>Z??=$()},mU6,iU6=86400000000000,pU6=120000000000,nU6=4294967296,Zm$,tU6=500000,rU6,aU6,sU6;var Qm$=D(()=>{W4();Za0();aL0();tL0();I6();sd$();LW=V(FL(),1),$m$=V(Ec(),1),mU6=dU6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),Zm$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);rU6=process.env.STREAM_ENCODE_TRACE==="1",aU6=process.env.DECOPILOT_STREAM_TRACE==="1";sU6=rU6?new Xm$:null});function wT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,hW(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 Ym$=D(()=>{_8()});class v71{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 Gm$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!kC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=DK(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 Jm$=D(()=>{C6();WX();Ng();E5()});function KB6($){return $ instanceof nX}function FB6($,Z){return Z-$>=JB6}class f71{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??XB6;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??YB6,X=this.options.itemIntervalMs??QB6,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()-Et0),Eo0);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()-WB6));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 Lo0(this.taskBoard,Y,Q),await wo0(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 GN(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),KB6(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()+GB6)).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(!FB6(vH(X),Date.now()))return;await xK($,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 Bg(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 Gm$(J,Q,W))return!0;if(await jO$(J,Q))return!0;if(!Y)return!1;if(!yo0(W))return!1;return await KL0(J,Q,{previewMatchesHead:go0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var XB6=60000,QB6=300000,YB6=50,GB6=60000,JB6=900000,WB6=120000;var Wm$=D(()=>{C6();ko0();QN();Ct();Jm$();E5();rG();jo0();eY();Jt()});import{readdir as HB6,rm as ET0}from"fs/promises";import{join as jT0}from"path";async function zT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-NB6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await Uv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Km$($,Y,Z);else if(!Y.startsWith(".")){let G=jT0($,Y),J=await Uv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Km$(G,K,Z)}if((await Uv(G)).length===0)await ET0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Km$($,Z,X){let Q=0,Y=jT0($,Z),G=await Uv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=jT0(Y,W),F=await Uv(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=jT0(K,N);await ET0(B,{recursive:!0,force:!0}),Q++}}if((await Uv(K)).length===0)await ET0(K,{recursive:!0,force:!0})}if((await Uv(Y)).length===0)await ET0(Y,{recursive:!0,force:!0});return Q}async function Uv($){try{return(await HB6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var NB6=30;var b71=()=>{};import{DBOS as x71,SchedulerMode as UB6}from"@dbos-inc/dbos-sdk";async function OB6(){let $=[yJ(),Bv(),qF()],Z=0;for(let X of $)try{Z+=await zT0(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 DB6($,Z){await x71.runStep(()=>OB6(),{name:"monitoringRetention"})}function Hm$(){if(Fm$)return;Fm$=!0;let $=x71.registerWorkflow(DB6,{name:"monitoringRetentionWorkflow"});x71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:BB6,mode:UB6.ExactlyOncePerIntervalWhenActive})}var BB6="23 4 * * *",Fm$=!1;var Nm$=D(()=>{DY();b71()});function Um$($){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 FJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await Ot($.db,Z,Q.role);return Y.boundAuth=x51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new dw(X,void 0,Y.boundAuth,Q.role,"self"),mO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Bm$=D(()=>{mw();iO()});function LB6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function wB6(){return{services:LB6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function jB6(){for(let $ of EB6)$()}function Om$($){let Z=[...y71.logs,$];y71={...y71,logs:Z.length>500?Z.slice(-500):Z},jB6()}function g71(){return zB6}var y71,EB6,zB6=!1;var h71=D(()=>{y71=wB6(),EB6=new Set});import{EventEmitter as PB6}from"events";var u71;var Dm$=D(()=>{h71();u71=new PB6;u71.on("request",($)=>{Om$($)})});function Lm$(){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=tu(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>tu(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}${tu(U.method)}${J5.reset}`}}catch{}}let W=tu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${J5.mcp}${tu(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=TB6(Q),F=J?"\u25C0":"\u2190";if(!g71())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=AB6(N),B=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!g71())console.log(`${J5.dim}${O}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""} ${U}${N}${J5.reset} ${J5.duration}${B}${J5.reset}`);u71.emit("request",{method:Q,path:tu(Y),status:N,duration:H,timestamp:new Date})}}}var J5,AB6=($)=>{if($>=500)return J5.serverError;if($>=400)return J5.clientError;if($>=300)return J5.redirect;return J5.ok},TB6=($)=>{return J5[$]||J5.reset},tu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var wm$=D(()=>{h71();Dm$();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 Pm$}from"crypto";import{mkdir as RB6,readdir as IB6,rm as Em$,stat as Am$}from"fs/promises";import{join as l71,relative as qB6}from"path";import{z as P$}from"zod";function Rm$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return l71(MB6,Z)}function Im$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function c71($,Z){let X=Rm$($),Q=Im$(Z);return l71(X,Q)}function kB6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Pm$("sha256",Y).update(G).digest("hex")}function zm$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=kB6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Im$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function qm$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Pm$("md5","etag").update(Q).digest("hex")}"`}async function Mm$($,Z,X,Q,Y){try{let G=await IB6($,{withFileTypes:!0});for(let J of G){let W=l71($,J.name),F=qB6(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 Mm$(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 Am$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:qm$(W,H.mtime,H.size)})}catch{}}}}catch{}}function km$($,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=Rm$(Q);await RB6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Mm$(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=c71(Q,G.key),W=await Am$(J);return{contentType:A91(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:qm$(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??jm$;return{url:zm$(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??jm$;return{url:zm$(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=c71(Q,G.key);try{return await Em$(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=c71(Q,K);try{await Em$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function d71($,Z,X){let Q=km$(Z,X),Y=new pW({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),jJ(Y,G,$,"mcp:dev-assets")}async function Vm$($,Z,X,Q){let G=km$(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 MB6="./data/assets",jm$=3600,Tm$,Sm$;var Cm$=D(()=>{R$();Cg();U8();cd();rC();gX();LA0();Tm$=new H1;Tm$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return d71($.req.raw,Z,Q)});Sm$=Tm$});var _m$={};J4(_m$,{mountDevRoutes:()=>VB6});function VB6($,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 d71(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 Vm$(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",Sm$);let X=new H1;X.use("*",OW({mountPath:"/api/dev-assets"})),X.route("/",DA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var vm$=D(()=>{U8();D91();LA0();Cm$()});import{sql as SB6}from"kysely";import{randomUUID as fm$}from"crypto";import{z as CB6}from"zod";async function vB6($){let Z=new Date().toISOString(),X=fm$(),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:fm$(),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 SB6`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.293.1",
3
+ "version": "4.293.2",
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-DfXSMTCc.js";import{I as A}from"./input-L6KTHxbU.js";import{L as F}from"./label-BKy1WiQD.js";import{S as R,a as V,b as z,c as O,d as D}from"./select-BQ3hNixW.js";import{T as G}from"./textarea-BMQj0P1A.js";import{G as J,V as M,K as X,X as $,a5 as q}from"./index-vH9NvJ_o.js";import{s as P}from"./primitives-IChpJZjf.js";import{u as H}from"./use-autosave-DIXFcITo.js";import"./Check-CngRIlmK.js";import"./ChevronDown-DIb5ltcB.js";import"./ChevronUp-BTTBpx7U.js";import"./ArrowUp-CJc2dDit.js";import"./chat-context-nGz9JpS1.js";import"./use-panel-navigate-CaAOAFJh.js";import"./dialog-C2IKe1zF.js";import"./Copy01-tH_Jmj5g.js";import"./Download01-DjBbMXMp.js";import"./use-destination-route-C80IclA_.js";import"./constants-dLUUoWH7.js";import"./session-runtime-wVXsCwcJ.js";import"./hooks-D_fj6_sa.js";import"./use-mcp-client-B5EafbnC.js";import"./auth-rs29h056.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-DoDgdmeJ.js";import"./task-board-CSpyzJS8.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-y30Jgcp3.js";import"./use-ai-providers-59585zk-.js";import"./use-decopilot-events-BSPhmsjR.js";import"./use-organization-settings-C-U7a0JM.js";import"./automation-runs-kYD3hfPc.js";import"./agent-icon-DOI2tApX.js";import"./AlertCircle-DVINDhOU.js";import"./UserSquare-sd5WxBNi.js";import"./Tool01-Ccf17IFM.js";import"./ArrowLeft-BQPGjmZ9.js";import"./Tool02-3tN3hbwK.js";import"./XCircle-DZSllrxh.js";import"./TrendUp01-B3sR-xHV.js";import"./ZapSquare-ByFAAEfX.js";import"./Users03-Baivbk4m.js";import"./CheckCircle-D8GtCqI2.js";import"./ChevronRight-kLCTWPyM.js";import"./ChevronSelectorVertical-Bbvai3m1.js";import"./DotsVertical-nFmoQs1S.js";import"./Stars02-CZ0km8FA.js";import"./CreditCard01-DEaFJ7WY.js";import"./Settings02-BLcuzcYR.js";import"./Eye-B2x4Uhmc.js";import"./FilterLines-BPAsLmKT.js";import"./Share07-DmspZ_Dd.js";import"./Globe01-CCV6xUpB.js";import"./Globe04-DmgH3jep.js";import"./SwitchHorizontal01-DRMfMdty.js";import"./HardDrive-DfmHHx7a.js";import"./Key01-Be0nbYKF.js";import"./LinkExternal01-BpSJ3ea8.js";import"./LockUnlocked01-C4UMzrkS.js";import"./LogOut01-iqzQNjrr.js";import"./Monitor01-7JrePHkw.js";import"./Sun-Cq9_yGGL.js";import"./Palette-jTuR6Xnz.js";import"./Play-C9N_PBsM.js";import"./Plus-_2HJ7AUo.js";import"./SearchLg-DL0P751N.js";import"./SearchMd-BgVLg9-Y.js";import"./Shield01-PyJsRfW0.js";import"./Stars01-BuNXiUpz.js";import"./Trash01-BlqiKpgS.js";import"./Upload01-D0qHlBzs.js";import"./User01-DuXf-ysk.js";import"./Users01-D-Verlj0.js";import"./XClose-Bx7QHaD0.js";import"./Zap-BugHCi8X.js";import"./useInfiniteQuery-yONwXBd7.js";import"./use-infinite-scroll-CJwUD0oL.js";import"./use-connection-BHsOvRtj.js";import"./table-sikc3ZBl.js";import"./empty-state-bIJhMrjq.js";import"./use-members-Cy-JeJ5z.js";import"./use-org-auth-client-hBGAX_Sf.js";import"./use-automations-BnjaNkff.js";import"./useSuspenseInfiniteQuery-D9xBWvO9.js";import"./avatar-fCufDxbD.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-WdaRa-XC.js";import"./monaco-editor-BY7KtbvT.js";import"./spinner-ign6rb1p.js";import"./types-DR51Jm5j.js";import"./shell-layout-CnD0ZtlM.js";import"./required-auth-layout-vdMcmnEm.js";import"./use-org-sso-D2s1KOAJ.js";import"./integration-icon-Dkvk-jEE.js";import"./use-navigate-to-agent-Bue0ia8m.js";import"./chart-DRA2Sbnn.js";import"./index-C8_V8CtT.js";import"./form-bNRM5rS2.js";import"./file-type-icon-C544ccwK.js";import"./drawer-UMPTrEjf.js";import"./collection-search-Mr-6uPAb.js";import"./tabs-3XxjBLC3.js";import"./toggle-group-_8dirqwA.js";import"./super-agent-icon-DsilOhXN.js";import"./self-tool-result-B6X9NbiC.js";import"./alert-dialog-CJ5ysQw1.js";import"./extract-connection-data-CeLxRKdE.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-Bkh1n3nw.js";import"./authenticate-and-persist-oauth-u3eKfPlD.js";import"./mcp-oauth-pKoOeQym.js";import"./track-DOWBFfEB.js";import"./popover-BWm4ZuOz.js";import"./toolbar-Dt7fv7f6.js";import"./github-repo-picker-BGOqlWax.js";import"./use-mcp-tools-CwxsuKcQ.js";import"./agent-capabilities-B52k7xCe.js";import"./connection-card-CO_XsIbh.js";import"./use-registry-connections-nveC5Mv9.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-BY6k-_16.js";import"./collection-tabs-D0wNW4vO.js";import"./badge-DKpkmW6j.js";import"./select-model-BIJ_zVAq.js";import"./checkbox-BrqMnt1J.js";import"./ai-providers-logos-DD3qZ33J.js";import"./cards-CvlNJsYy.js";import"./dropdown-menu-FH3inEy4.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-DCGItJvf.js";import"./use-file-configs-DimrA62T.js";import"./pt-BR-CLy76QW2.js";import"./use-debounced-autosave-MXJyY830.js";import"./scroll-area-a26KcNVI.js";import"./search-input-CuTOYyNU.js";import"./use-mcp-auth-status-C1qjF90L.js";import"./switch-C4CGwbnk.js";import"./use-secrets-vTX_InO6.js";import"./AreaChart-DqSaq7NT.js";import"./config-B2iHRVUs.js";import"./breadcrumb-DPH9cn5e.js";import"./command-BkdMSk9B.js";import"./index-DtvPU7ig.js";import"./get-initials-D-f_fDFw.js";import"./use-tags-tvWbxTV6.js";import"./automation-list-row-BuTWtJff.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-BQDQdZDe.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-Scc8uz5h.js","assets/index-DfXSMTCc.js","assets/index-DJSuP9VA.css","assets/Tool02-3tN3hbwK.js","assets/CheckCircle-D8GtCqI2.js","assets/Settings02-BLcuzcYR.js","assets/use-mcp-client-B5EafbnC.js","assets/constants-dLUUoWH7.js","assets/auth-rs29h056.js","assets/useInfiniteQuery-yONwXBd7.js","assets/use-infinite-scroll-CJwUD0oL.js","assets/badge-DKpkmW6j.js","assets/input-L6KTHxbU.js","assets/dropdown-menu-FH3inEy4.js","assets/Check-CngRIlmK.js","assets/ChevronRight-kLCTWPyM.js","assets/DotsVertical-nFmoQs1S.js","assets/table-sikc3ZBl.js","assets/toggle-group-_8dirqwA.js","assets/use-view-mode-0GRcDha9.js","assets/FilterLines-BPAsLmKT.js","assets/Globe01-CCV6xUpB.js","assets/SearchMd-BgVLg9-Y.js","assets/dialog-C2IKe1zF.js","assets/AlertCircle-DVINDhOU.js","assets/Download01-DjBbMXMp.js","assets/Upload01-D0qHlBzs.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-CJ5ysQw1.js","assets/Trash01-BlqiKpgS.js","assets/label-BKy1WiQD.js","assets/select-BQ3hNixW.js","assets/ChevronDown-DIb5ltcB.js","assets/ChevronUp-BTTBpx7U.js","assets/switch-C4CGwbnk.js","assets/textarea-BMQj0P1A.js","assets/ArrowLeft-BQPGjmZ9.js","assets/XCircle-DZSllrxh.js","assets/checkbox-BrqMnt1J.js","assets/Eye-B2x4Uhmc.js","assets/LinkExternal01-BpSJ3ea8.js","assets/use-copy-WdaRa-XC.js","assets/Copy01-tH_Jmj5g.js","assets/Key01-Be0nbYKF.js","assets/Plus-_2HJ7AUo.js","assets/mcp-oauth-pKoOeQym.js","assets/Play-C9N_PBsM.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-DfXSMTCc.js";import{R as n}from"./require-capability-CJnVYeze.js";import"./access-gate-CXxXDq7M.js";import"./capability-load-error-CZTCI2C4.js";const c=s.lazy(()=>o(()=>import("./registry-layout-Scc8uz5h.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-Scc8uz5h.js","assets/index-DfXSMTCc.js","assets/index-DJSuP9VA.css","assets/Tool02-3tN3hbwK.js","assets/CheckCircle-D8GtCqI2.js","assets/Settings02-BLcuzcYR.js","assets/use-mcp-client-B5EafbnC.js","assets/constants-dLUUoWH7.js","assets/auth-rs29h056.js","assets/useInfiniteQuery-yONwXBd7.js","assets/use-infinite-scroll-CJwUD0oL.js","assets/badge-DKpkmW6j.js","assets/input-L6KTHxbU.js","assets/dropdown-menu-FH3inEy4.js","assets/Check-CngRIlmK.js","assets/ChevronRight-kLCTWPyM.js","assets/DotsVertical-nFmoQs1S.js","assets/table-sikc3ZBl.js","assets/toggle-group-_8dirqwA.js","assets/use-view-mode-0GRcDha9.js","assets/FilterLines-BPAsLmKT.js","assets/Globe01-CCV6xUpB.js","assets/SearchMd-BgVLg9-Y.js","assets/dialog-C2IKe1zF.js","assets/AlertCircle-DVINDhOU.js","assets/Download01-DjBbMXMp.js","assets/Upload01-D0qHlBzs.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-CJ5ysQw1.js","assets/Trash01-BlqiKpgS.js","assets/label-BKy1WiQD.js","assets/select-BQ3hNixW.js","assets/ChevronDown-DIb5ltcB.js","assets/ChevronUp-BTTBpx7U.js","assets/switch-C4CGwbnk.js","assets/textarea-BMQj0P1A.js","assets/ArrowLeft-BQPGjmZ9.js","assets/XCircle-DZSllrxh.js","assets/checkbox-BrqMnt1J.js","assets/Eye-B2x4Uhmc.js","assets/LinkExternal01-BpSJ3ea8.js","assets/use-copy-WdaRa-XC.js","assets/Copy01-tH_Jmj5g.js","assets/Key01-Be0nbYKF.js","assets/Plus-_2HJ7AUo.js","assets/mcp-oauth-pKoOeQym.js","assets/Play-C9N_PBsM.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-DfXSMTCc.js";import{R as u}from"./require-capability-CJnVYeze.js";import"./access-gate-CXxXDq7M.js";import"./capability-load-error-CZTCI2C4.js";const g=l.lazy(()=>p(()=>import("./registry-layout-Scc8uz5h.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-CJwUD0oL.js";import{fi as u}from"./index-DfXSMTCc.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-CJwUD0oL.js";import{fi as u,b$ as n}from"./index-DfXSMTCc.js";function i(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{i as u};