decocms 4.181.3 → 4.182.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/client/assets/{AlertCircle-BTxQkLh_.js → AlertCircle-DPRp9Xgg.js} +1 -1
  2. package/dist/client/assets/{AreaChart-54GTf9Wv.js → AreaChart-ChWSxLxI.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-CiT0cU4D.js → ArrowUp-C4AEGU_a.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-KmOQGUGd.js → ArrowUpRight-BcoQJUX9.js} +1 -1
  5. package/dist/client/assets/{Check-Dw-gymvq.js → Check-Dzm3Zs3M.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-CJSSqHjK.js → CheckCircle-DruA5cHd.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-DJaWgVC0.js → ChevronDown-B5OG_1Nh.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-DLaD7kHP.js → ChevronRight-NujKeKVO.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-C4i-02np.js → ChevronUp-CaHbnD4U.js} +1 -1
  10. package/dist/client/assets/{Copy01-Cmo8Ag8o.js → Copy01-rFr5V6XR.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-K-xlLMGB.js → CpuChip01-iiM02IAE.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-CmetOEMF.js → CreditCard01-CYwcdkD2.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-BH53E0xj.js → DotsVertical-BROzC6kl.js} +1 -1
  14. package/dist/client/assets/{Eye-B6gNJQkZ.js → Eye-cscwiEH8.js} +1 -1
  15. package/dist/client/assets/{FilterLines-Cpf5z5Iu.js → FilterLines-CsCU5fBN.js} +1 -1
  16. package/dist/client/assets/{HardDrive-Dv_gzUWs.js → HardDrive-D1545Ujq.js} +1 -1
  17. package/dist/client/assets/{Key01-ai3raIR8.js → Key01-Bn2TZuKg.js} +1 -1
  18. package/dist/client/assets/{LayoutLeft-BUkBSDrI.js → LayoutLeft-Cq7uhuoe.js} +1 -1
  19. package/dist/client/assets/{LinkExternal01-C_HyHuei.js → LinkExternal01-DZB7sFtv.js} +1 -1
  20. package/dist/client/assets/{LogOut01-CcD6g7YP.js → LogOut01-DW9a5dqb.js} +1 -1
  21. package/dist/client/assets/{Monitor01-DH8zVvcw.js → Monitor01-B5Ziwu4c.js} +1 -1
  22. package/dist/client/assets/{Palette-BVF7aPzx.js → Palette-DD-zh4Dk.js} +1 -1
  23. package/dist/client/assets/{Play-DktqrYeq.js → Play-DpaC756w.js} +1 -1
  24. package/dist/client/assets/{Plus-D3gVN1IJ.js → Plus-B1OAO3YI.js} +1 -1
  25. package/dist/client/assets/{SearchLg-X8pCQ7Bs.js → SearchLg-BD3x947u.js} +1 -1
  26. package/dist/client/assets/{SearchMd-BGw6nenO.js → SearchMd-DuUpwlrS.js} +1 -1
  27. package/dist/client/assets/{Settings02-DLn641-3.js → Settings02-4UoyPhbR.js} +1 -1
  28. package/dist/client/assets/{Shield01-MX0RzfQ2.js → Shield01-CAsRZhrR.js} +1 -1
  29. package/dist/client/assets/{Star01-jcE2iXLN.js → Star01-D79WW-LQ.js} +1 -1
  30. package/dist/client/assets/{Stars01-B33s_mIG.js → Stars01-DleC4SZi.js} +1 -1
  31. package/dist/client/assets/{Stars02-CUMfm05b.js → Stars02-B-GTR4r0.js} +1 -1
  32. package/dist/client/assets/{Sun-DL3Et2O2.js → Sun-xTIDj6LD.js} +1 -1
  33. package/dist/client/assets/{SwitchHorizontal01-Ca1irFIT.js → SwitchHorizontal01--ae8Y6HT.js} +1 -1
  34. package/dist/client/assets/{Tool01-CoHxo05I.js → Tool01-D2y4FITf.js} +1 -1
  35. package/dist/client/assets/{Tool02-q7KgS36M.js → Tool02-BqXyB9Tp.js} +1 -1
  36. package/dist/client/assets/{Trash01-C_iTJrzM.js → Trash01-BmJZTDNy.js} +1 -1
  37. package/dist/client/assets/{TrendUp01-C64GToZR.js → TrendUp01-CIS6jjwG.js} +1 -1
  38. package/dist/client/assets/{Upload01-C_wNHEuX.js → Upload01-m_GU3eeL.js} +1 -1
  39. package/dist/client/assets/{User01-DbfhZ4ti.js → User01-BEmYT7Qf.js} +1 -1
  40. package/dist/client/assets/{Users01-DVMG5rdr.js → Users01-BsvLaZs7.js} +1 -1
  41. package/dist/client/assets/{Users03-CJSf0I5d.js → Users03-BNAXj4Yf.js} +1 -1
  42. package/dist/client/assets/{X-BGd3Yd9R.js → X-Cg5m-aua.js} +1 -1
  43. package/dist/client/assets/{XCircle-BzhEmj9C.js → XCircle-Cv6PIhba.js} +1 -1
  44. package/dist/client/assets/{XClose-yx7RXMlE.js → XClose-Cjm3G-lJ.js} +1 -1
  45. package/dist/client/assets/{Zap-Cc1RYTno.js → Zap-BwwwdUMi.js} +1 -1
  46. package/dist/client/assets/{ZapSquare--_Wuc2N_.js → ZapSquare-Bsm1KKoY.js} +1 -1
  47. package/dist/client/assets/{access-gate-BSUWjwCs.js → access-gate-wlsBPXER.js} +1 -1
  48. package/dist/client/assets/{add-section-modal-CB73EjN8.js → add-section-modal-jwLbiSqY.js} +1 -1
  49. package/dist/client/assets/{agent-icon-LwtXnQ8r.js → agent-icon-C93MMlE0.js} +1 -1
  50. package/dist/client/assets/{agents-list-CrnSFHfy.js → agents-list-CO7YXjMJ.js} +1 -1
  51. package/dist/client/assets/{ai-providers-oJ038Zl_.js → ai-providers-CA9lZ2Y1.js} +1 -1
  52. package/dist/client/assets/{alert-BGnJ_noO.js → alert-Hvkh9ppY.js} +1 -1
  53. package/dist/client/assets/{alert-dialog-qDSW0Crq.js → alert-dialog-BLwU3_nS.js} +1 -1
  54. package/dist/client/assets/{app-editor-DILiTJoW.js → app-editor-Cjh1_JT0.js} +1 -1
  55. package/dist/client/assets/{auth-DIPKpaIr.js → auth-CDZsCNye.js} +1 -1
  56. package/dist/client/assets/{auth-catchall-CYL9uxik.js → auth-catchall-BhuGXGvG.js} +1 -1
  57. package/dist/client/assets/{auth-entry-DImJpw9E.js → auth-entry-DUUv8RJt.js} +1 -1
  58. package/dist/client/assets/{auth-split-layout-s6sRFVyK.js → auth-split-layout-DjulTLm2.js} +1 -1
  59. package/dist/client/assets/{authenticate-and-persist-oauth-CaPu7RQh.js → authenticate-and-persist-oauth-B6I2Yh4h.js} +1 -1
  60. package/dist/client/assets/{automation-list-row-3pYfyU0O.js → automation-list-row-BUr0PyW2.js} +1 -1
  61. package/dist/client/assets/{automation-runs-D2d3Wb2r.js → automation-runs-2TAKFg9z.js} +1 -1
  62. package/dist/client/assets/{automations-DclhicEU.js → automations-B2MNOW7s.js} +1 -1
  63. package/dist/client/assets/{avatar-CEbbtaiZ.js → avatar-BYdPZSw-.js} +1 -1
  64. package/dist/client/assets/{badge-C1OyErpa.js → badge-DD-zecFq.js} +1 -1
  65. package/dist/client/assets/{billing-DRZX3EmX.js → billing-CvISqpke.js} +1 -1
  66. package/dist/client/assets/{block-document-C3rhxAfS.js → block-document-BexaqjK8.js} +1 -1
  67. package/dist/client/assets/{brand-context-aUlyRlh0.js → brand-context-nP12QyKk.js} +1 -1
  68. package/dist/client/assets/{buckets-DELnzTrg.js → buckets-CiQ-NSfT.js} +1 -1
  69. package/dist/client/assets/{bulk-category-panel-MPj9Giz3.js → bulk-category-panel-ChSPMq2C.js} +1 -1
  70. package/dist/client/assets/{calendar-Cgmlwp6s.js → calendar-C3gMj9si.js} +1 -1
  71. package/dist/client/assets/{capability-load-error-CO2UqFKW.js → capability-load-error-D1FnfdAv.js} +1 -1
  72. package/dist/client/assets/{card-D0L8m2Fk.js → card-CibovPLz.js} +1 -1
  73. package/dist/client/assets/{category-editor-B-verZ0D.js → category-editor-D8CCgJzd.js} +1 -1
  74. package/dist/client/assets/{chat-context-D6CbggZW.js → chat-context-lHtNe1gH.js} +6 -6
  75. package/dist/client/assets/{checkbox-DtFnclfC.js → checkbox-FHd8kA0F.js} +1 -1
  76. package/dist/client/assets/{cli-auth-success-Bicb4f4q.js → cli-auth-success-DR7K4kr8.js} +1 -1
  77. package/dist/client/assets/{collection-detail-CAcg5xcf.js → collection-detail-atu59I54.js} +1 -1
  78. package/dist/client/assets/{collection-display-button-BCy_2J75.js → collection-display-button-ufL_1Mdg.js} +1 -1
  79. package/dist/client/assets/{collection-search-2xNmmwyF.js → collection-search-C-_TIk5b.js} +1 -1
  80. package/dist/client/assets/{collection-table-wrapper-CTDA0KGg.js → collection-table-wrapper-B6loESfH.js} +1 -1
  81. package/dist/client/assets/{collection-tabs-CTBrfSnI.js → collection-tabs-HciSg6SY.js} +1 -1
  82. package/dist/client/assets/{command-CC22u5HT.js → command-B4JFVf6e.js} +1 -1
  83. package/dist/client/assets/{commerce-onboarding-DPhOKMuI.js → commerce-onboarding-A4zWE_HK.js} +1 -1
  84. package/dist/client/assets/{companions-core-DhobrWwt.js → companions-core-PDg0DVNF.js} +1 -1
  85. package/dist/client/assets/{connect-BpuNc0ED.js → connect-DD2rHa1y.js} +1 -1
  86. package/dist/client/assets/{connection-D7v6o0sJ.js → connection-DXxze6UI.js} +1 -1
  87. package/dist/client/assets/{connection-card-Go0wl4dH.js → connection-card-D2TW-Kfd.js} +1 -1
  88. package/dist/client/assets/{connection-detail-DHeSqYBk.js → connection-detail-I1scs_0S.js} +1 -1
  89. package/dist/client/assets/{connection-form-helpers-C8vqp-PX.js → connection-form-helpers-DWmY08h8.js} +1 -1
  90. package/dist/client/assets/{connections-B0ZbAgCH.js → connections-BlT4Uroh.js} +1 -1
  91. package/dist/client/assets/{decopilot-sse-pool-BSRr7Awl.js → decopilot-sse-pool-D4ZER6Xz.js} +1 -1
  92. package/dist/client/assets/{dialog-nd9Y9UDf.js → dialog-DsjptpWm.js} +1 -1
  93. package/dist/client/assets/{domain-settings-BwjA2jso.js → domain-settings-DmFjAd94.js} +1 -1
  94. package/dist/client/assets/{drawer-Y02E8bZP.js → drawer-CGUMROb4.js} +1 -1
  95. package/dist/client/assets/{dropdown-menu-DYJ4Ot9-.js → dropdown-menu-BVKmreO2.js} +1 -1
  96. package/dist/client/assets/{empty-state-CCnFw3SI.js → empty-state-CKflVuvl.js} +1 -1
  97. package/dist/client/assets/{extract-connection-data-B6jF9vIP.js → extract-connection-data-DNzD7wvs.js} +1 -1
  98. package/dist/client/assets/{file-explorer-DpEAqpKl.js → file-explorer-CZk1et4Z.js} +1 -1
  99. package/dist/client/assets/{form-DZe1OoXa.js → form-BfZ_FEF4.js} +1 -1
  100. package/dist/client/assets/{general-BcbT-g-z.js → general-BYCZuYWJ.js} +1 -1
  101. package/dist/client/assets/{github-repo-picker-R7F1yX2B.js → github-repo-picker-CWLPp--Z.js} +1 -1
  102. package/dist/client/assets/{hooks-BcHj3Ob3.js → hooks-DYSsmvGA.js} +1 -1
  103. package/dist/client/assets/{index-DjdZgCR6.js → index-BGlNrWAd.js} +1 -1
  104. package/dist/client/assets/index-BkN_d_QE.js +77 -0
  105. package/dist/client/assets/{index-Ci-xAbr8.js → index-BlwUlDR8.js} +1 -1
  106. package/dist/client/assets/{index-Cattr6nA.js → index-CO5LqAk6.js} +5 -5
  107. package/dist/client/assets/{index-DSL_ub0T.js → index-CTEso5cO.js} +3 -3
  108. package/dist/client/assets/{index-Bd-WG2FD.js → index-C_bBaRD3.js} +1 -1
  109. package/dist/client/assets/{index-Bk-CGEfI.js → index-DOlHrj4C.js} +1 -1
  110. package/dist/client/assets/{index-BC57PyF6.js → index-DQvajTOC.js} +1 -1
  111. package/dist/client/assets/{index-D01T8L5t.js → index-Dbx3mhGD.js} +1 -1
  112. package/dist/client/assets/{index-FXSmmHSb.js → index-DhHPfpKp.js} +1 -1
  113. package/dist/client/assets/{index-Dllcdz9M.js → index-DrzZsZ7W.js} +1 -1
  114. package/dist/client/assets/{index-Cd-mxy8I.js → index-MABQIHiL.js} +1 -1
  115. package/dist/client/assets/{index-redirect-CmpV-Jj_.js → index-redirect-B-TFREw-.js} +1 -1
  116. package/dist/client/assets/{input-D-iDTYtd.js → input-CeknehyU.js} +1 -1
  117. package/dist/client/assets/{integration-icon-BdwbQSLL.js → integration-icon-CHe6HOkn.js} +1 -1
  118. package/dist/client/assets/{invite-member-dialog-BzkSk1Ge.js → invite-member-dialog-s34o-SfE.js} +1 -1
  119. package/dist/client/assets/{label-CxOnDTfr.js → label-C2wAao27.js} +1 -1
  120. package/dist/client/assets/{layout-GbjkVmGk.js → layout-D1mhk8l5.js} +1 -1
  121. package/dist/client/assets/{login-BPeVUOhv.js → login-QR-2ZenW.js} +1 -1
  122. package/dist/client/assets/{mcp-oauth-DPdfbG_o.js → mcp-oauth-DXFHG-Re.js} +1 -1
  123. package/dist/client/assets/{members-Dm_2MGcL.js → members-BKlM4Zf8.js} +1 -1
  124. package/dist/client/assets/{monaco-editor-C86Ru8dd.js → monaco-editor-Cu3UNwIh.js} +1 -1
  125. package/dist/client/assets/{monitoring-stats-row-BwPJ9hvQ.js → monitoring-stats-row-Dxvkmkhg.js} +1 -1
  126. package/dist/client/assets/{multi-select-CmcBjW31.js → multi-select-R523RU06.js} +1 -1
  127. package/dist/client/assets/{oauth-callback-CW40581a.js → oauth-callback-Bf7nEWex.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-ai-provider-BxEnbW0f.js → oauth-callback-ai-provider-CSD0CBep.js} +1 -1
  129. package/dist/client/assets/{onboarding-DkoxJYt2.js → onboarding-BVDdL1jk.js} +1 -1
  130. package/dist/client/assets/{org-layout-4xil_83z.js → org-layout-JkUgzANw.js} +1 -1
  131. package/dist/client/assets/{organization-choice-DXN-yJMk.js → organization-choice-CoxEUqAA.js} +1 -1
  132. package/dist/client/assets/{orgs-pac80290.js → orgs-C6F5CXxP.js} +1 -1
  133. package/dist/client/assets/{page-seo-form-Bk_lJRhg.js → page-seo-form-CeTeLsB3.js} +1 -1
  134. package/dist/client/assets/{popover-BzY6SGD5.js → popover-DH0IeLNR.js} +1 -1
  135. package/dist/client/assets/{post-editor-Caeo9yZ0.js → post-editor-CjTaHHKu.js} +1 -1
  136. package/dist/client/assets/{primitives-D59xgpfo.js → primitives-BZKaiwAI.js} +1 -1
  137. package/dist/client/assets/{profile-CWK3fjie.js → profile-DQXWWVlR.js} +1 -1
  138. package/dist/client/assets/project-app-view-H276bc63.js +1 -0
  139. package/dist/client/assets/record-editor-Cg412rRE.js +1 -0
  140. package/dist/client/assets/{redirect-editor-CV9xq4Ct.js → redirect-editor-Boe47xrH.js} +1 -1
  141. package/dist/client/assets/registry-UhWw2BaP.js +2 -0
  142. package/dist/client/assets/{registry-layout-BtBW4sei.js → registry-layout-C_A-ozjg.js} +1 -1
  143. package/dist/client/assets/{reports-zFMLtR1A.js → reports-DhQZGDz_.js} +1 -1
  144. package/dist/client/assets/{require-capability-Br1pAJen.js → require-capability-DMpTovRE.js} +1 -1
  145. package/dist/client/assets/{required-auth-layout-D-kXHcFc.js → required-auth-layout-BOKqzEew.js} +1 -1
  146. package/dist/client/assets/{reset-password-DxnpIDQZ.js → reset-password-CwukspUP.js} +1 -1
  147. package/dist/client/assets/{roles-BkhveSy6.js → roles-DnUHxfLu.js} +1 -1
  148. package/dist/client/assets/{search-input-C115Kksl.js → search-input-KJVUrZEw.js} +1 -1
  149. package/dist/client/assets/{secrets-BBfooOeU.js → secrets-COmC62Xg.js} +1 -1
  150. package/dist/client/assets/{sections-editor-DK40H8jT.js → sections-editor-CwxUtvpy.js} +1 -1
  151. package/dist/client/assets/{select-DoSBsXS-.js → select-D6cbeEF5.js} +1 -1
  152. package/dist/client/assets/{select-model-BoNfnd6b.js → select-model-Dwu4mDYb.js} +1 -1
  153. package/dist/client/assets/{self-tool-result-DtUlgJUE.js → self-tool-result-FoAVPpym.js} +1 -1
  154. package/dist/client/assets/{seo-editor-BIY7X9oK.js → seo-editor-kJTAvoyY.js} +1 -1
  155. package/dist/client/assets/{settings-layout-BJ2Ef5pZ.js → settings-layout-CsZsKAbt.js} +1 -1
  156. package/dist/client/assets/{settings-section-CDsu-DGw.js → settings-section-JZIjiQYg.js} +1 -1
  157. package/dist/client/assets/{shell-controls-Dr9vMfYa.js → shell-controls-DtF1iUDI.js} +1 -1
  158. package/dist/client/assets/{shell-layout-DBQkutH7.js → shell-layout-CxLeym8u.js} +1 -1
  159. package/dist/client/assets/{sidebar-B2MwaU8I.js → sidebar-5x-p9sNO.js} +1 -1
  160. package/dist/client/assets/{skeleton-Byy9MKOd.js → skeleton-Booor1bA.js} +1 -1
  161. package/dist/client/assets/{spinner-DkNs3_AG.js → spinner-h-1XDBRU.js} +1 -1
  162. package/dist/client/assets/{sso-DBWJAZWr.js → sso-B7C-mmQ8.js} +1 -1
  163. package/dist/client/assets/{store-CEwQ2QQ2.js → store-V7-p_1ik.js} +1 -1
  164. package/dist/client/assets/store-registry-DUbtq06U.js +2 -0
  165. package/dist/client/assets/{studio-tools-CCpiCxVq.js → studio-tools-DzsOoBM4.js} +1 -1
  166. package/dist/client/assets/{switch-Ckyz60oQ.js → switch-B-UatRHj.js} +1 -1
  167. package/dist/client/assets/{tab-id-DamQoqFe.js → tab-id-Bq0hY2cc.js} +1 -1
  168. package/dist/client/assets/{table-g2dB7kHC.js → table-U9DQXAJa.js} +1 -1
  169. package/dist/client/assets/{tabs-DhhmWcXn.js → tabs-5Dw8NDEf.js} +1 -1
  170. package/dist/client/assets/{textarea-ml1xcq4m.js → textarea-CpiXTcDr.js} +1 -1
  171. package/dist/client/assets/{toggle-group-DaJb5ecI.js → toggle-group-B_c2rQDU.js} +1 -1
  172. package/dist/client/assets/{toolbar-Dehgj7Nj.js → toolbar-CRH-kJLM.js} +1 -1
  173. package/dist/client/assets/{tooltip-fNNHHvCP.js → tooltip-BZWOYDeF.js} +1 -1
  174. package/dist/client/assets/{use-ai-providers-CwtqZyAl.js → use-ai-providers-DeQstxdL.js} +1 -1
  175. package/dist/client/assets/{use-automations-v0SaJAdt.js → use-automations-7pIm9KvZ.js} +1 -1
  176. package/dist/client/assets/{use-autosave-CNHqftWQ.js → use-autosave-Dk1y7GJf.js} +1 -1
  177. package/dist/client/assets/{use-capability-6s_CDaCx.js → use-capability-C9fxKMpB.js} +1 -1
  178. package/dist/client/assets/{use-clock-tick-Cw81SvwW.js → use-clock-tick-BKBJmSVp.js} +1 -1
  179. package/dist/client/assets/{use-connection-CzkVTaht.js → use-connection-DCbm_Bg1.js} +1 -1
  180. package/dist/client/assets/{use-copy-BYYLTgJg.js → use-copy-BUYGsq3B.js} +1 -1
  181. package/dist/client/assets/{use-create-virtual-mcp-jDvPk26o.js → use-create-virtual-mcp-ybp5HpCw.js} +1 -1
  182. package/dist/client/assets/{use-debounced-autosave-CWSN1_X_.js → use-debounced-autosave-DIKtydd5.js} +1 -1
  183. package/dist/client/assets/{use-debounced-value-D4-eJghO.js → use-debounced-value-CAoyiDiu.js} +1 -1
  184. package/dist/client/assets/{use-deco-credits-Dwwqo-VH.js → use-deco-credits-Bd9Wyt13.js} +1 -1
  185. package/dist/client/assets/{use-decopilot-events-CMeACuxN.js → use-decopilot-events-CFNEyxMB.js} +1 -1
  186. package/dist/client/assets/{use-delete-connection-DV_zsO6y.js → use-delete-connection-DtxxMwzK.js} +1 -1
  187. package/dist/client/assets/{use-deployment-admin-By7yhBUI.js → use-deployment-admin-CehAJ3F_.js} +1 -1
  188. package/dist/client/assets/{use-file-configs-Z-5fKuaj.js → use-file-configs-fqa2XTWY.js} +1 -1
  189. package/dist/client/assets/{use-infinite-scroll-fXFRW5gQ.js → use-infinite-scroll-Bg_MXINf.js} +1 -1
  190. package/dist/client/assets/{use-join-requests-BoAzPTLj.js → use-join-requests-JUnMV9Hv.js} +1 -1
  191. package/dist/client/assets/{use-mcp-client-DqHVlRT-.js → use-mcp-client-DqX7xoAe.js} +1 -1
  192. package/dist/client/assets/{use-mcp-tools-DBw2JL-y.js → use-mcp-tools-D87hiZlN.js} +1 -1
  193. package/dist/client/assets/{use-members-DsNs-XXd.js → use-members-BDuMtXOv.js} +1 -1
  194. package/dist/client/assets/{use-mobile-DTQQN7CZ.js → use-mobile-DJkohwud.js} +1 -1
  195. package/dist/client/assets/{use-navigate-to-agent-DGSYNDms.js → use-navigate-to-agent-CjH70sz8.js} +1 -1
  196. package/dist/client/assets/{use-open-billing-url-BiA8ypry.js → use-open-billing-url-BZbKclIO.js} +1 -1
  197. package/dist/client/assets/{use-org-auth-client-BoO3p-ZD.js → use-org-auth-client-8c1aoXUa.js} +1 -1
  198. package/dist/client/assets/{use-org-sso-pjSvX-hU.js → use-org-sso-CUkcNgQa.js} +1 -1
  199. package/dist/client/assets/{use-organization-roles-CDb_-Y7M.js → use-organization-roles-BMiVYHhY.js} +1 -1
  200. package/dist/client/assets/{use-organization-settings-DDGI0ux_.js → use-organization-settings-BCR_keIG.js} +1 -1
  201. package/dist/client/assets/{use-registry-connections-9HNFG4EX.js → use-registry-connections-kCxCOVcr.js} +1 -1
  202. package/dist/client/assets/{use-secrets-DuY_szss.js → use-secrets-BJAwrxXA.js} +1 -1
  203. package/dist/client/assets/{use-status-sounds-DrHItgaG.js → use-status-sounds-CakpO8DG.js} +1 -1
  204. package/dist/client/assets/{use-tags-D9BTOCB6.js → use-tags-B1AbZhMd.js} +1 -1
  205. package/dist/client/assets/{use-view-mode-BBNpqulX.js → use-view-mode-BiwjWJ-p.js} +1 -1
  206. package/dist/client/assets/{use-virtual-mcp-CTQtyJk0.js → use-virtual-mcp-CC-VXGgY.js} +1 -1
  207. package/dist/client/assets/useInfiniteQuery-BLbhIG5N.js +1 -0
  208. package/dist/client/assets/{useQueries-YKDnkiqD.js → useQueries-uW-8UPjx.js} +1 -1
  209. package/dist/client/assets/{useRouterState-D-3vvriX.js → useRouterState-CRkEAJd6.js} +1 -1
  210. package/dist/client/assets/useSuspenseInfiniteQuery-Bd9xGMeX.js +1 -0
  211. package/dist/client/assets/{users-DFm1KNAU.js → users-QP76AlkA.js} +1 -1
  212. package/dist/client/assets/{variant-calendar-lUVRsxSt.js → variant-calendar-TmZnhYi8.js} +1 -1
  213. package/dist/client/assets/{view-mode-toggle-BjkWD1Pd.js → view-mode-toggle-D_behxu9.js} +1 -1
  214. package/dist/client/index.html +1 -1
  215. package/dist/server/cli.js +2 -2
  216. package/dist/server/server.js +2 -2
  217. package/package.json +1 -1
  218. package/dist/client/assets/index-CdeKbNns.js +0 -77
  219. package/dist/client/assets/project-app-view-DOxMbUNa.js +0 -1
  220. package/dist/client/assets/record-editor-_niGq24j.js +0 -1
  221. package/dist/client/assets/registry-DNAqKX9b.js +0 -2
  222. package/dist/client/assets/store-registry-D7sYPe7R.js +0 -2
  223. package/dist/client/assets/useInfiniteQuery-CAndPTbu.js +0 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-CR3WF7F3.js +0 -1
@@ -689,7 +689,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
689
689
  b. MONITORING_LOGS_LIST with isError true (plus connectionId/toolName/virtualMcpId filters) \u2192 failing calls.
690
690
  c. MONITORING_LOG_GET on specific log ids for full input/output when the error message isn't enough.
691
691
  d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
692
- </workflows>`,eg1={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:kS8,getId:R7.USAGE_MANAGER}});function Ff0($){return jD.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function SS8($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function G80({virtualMcp:$,agentId:Z=$.id,organizationId:X,ctx:G}){let Y=Ff0(Z);if(!Y)return $;let Q=await SS8(Y,{orgId:X,ctx:G}),J=Q.selectedTools?[...Q.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:Q.instructions},connections:$.connections.map((W)=>({...W,selected_tools:J}))}}async function Y80($,Z){if(!("checklist"in $))return[];return Promise.all($.checklist.map(async(X)=>({label:X.label,activeForm:X.activeForm,action:X.action,completed:await X.isCompleted(Z),alwaysSuggest:X.alwaysSuggest})))}async function Zh1($,Z,X){let G={self:x4.SELF($),registry:x4.REGISTRY($),"community-registry":x4.COMMUNITY_REGISTRY($)};await Promise.all(jD.map(async(Y)=>{let Q=Y.getId($),J=await X.findById(Q,$),K=(Y.selectedConnections??["self"]).map((N)=>G[N]);if(J){await X.update(Q,Z,{metadata:{...J.metadata??{},instructions:Y.instructions},connections:K.map((N)=>{let H=J.connections.find((F)=>F.connection_id===N);return{connection_id:N,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:H?.selected_resources??null,selected_prompts:H?.selected_prompts??null}})});return}await X.create($,Z,{title:Y.title,description:Y.description,icon:Y.icon,status:"active",pinned:!1,metadata:{instructions:Y.instructions},connections:K.map((N)=>({connection_id:N,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:null,selected_prompts:Y.selectedPrompts?[...Y.selectedPrompts]:null}))},{id:Q})}))}var jD;var Fb=B(()=>{O8();yg1();hg1();cg1();ng1();tg1();rg1();sg1();$h1();jD=[ig1,xg1,ug1,pg1,gg1,og1,ag1,eg1]});import{DBOS as Q80}from"@dbos-inc/dbos-sdk";async function VS8($){let Z=c8(),X=new Hb(Z.db);await Zh1($.orgId,$.createdBy,X)}async function CS8($){let Z=c8(),X=new Hb(Z.db);for(let G of jD){let Y=G.getId($.orgId),Q=await X.findById(Y,$.orgId);if(!Q)continue;let J=G.selectedPrompts?[...G.selectedPrompts]:null;if(Q.connections.every((K)=>{let N=K.selected_prompts;if(J===null)return N===null;if(N===null)return!1;if(N.length!==J.length)return!1;return N.every((H,F)=>H===J[F])}))continue;await X.update(Y,$.createdBy,{connections:Q.connections.map((K)=>({connection_id:K.connection_id,selected_tools:K.selected_tools,selected_resources:K.selected_resources,selected_prompts:J}))})}}async function _S8($){await Q80.runStep(()=>VS8($),{name:"installStudioPack"}),await Q80.runStep(()=>CS8($),{name:"backfillSelectedPrompts"})}async function Uf0($){await Q80.startWorkflow(vS8,{workflowID:`install-studio-pack:${bS8}:${$.orgId}`})($)}async function Xh1(){let Z=await c8().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),X=new Map;for(let G of Z)if(!X.has(G.organizationId))X.set(G.organizationId,G.userId);await Promise.all(Array.from(X).map(async([G,Y])=>{try{await Uf0({orgId:G,createdBy:Y})}catch(Q){console.error("[studio-pack-backfill] enqueue failed",{orgId:G},Q)}}))}var vS8,bS8="v5";var J80=B(()=>{YQ();Hf0();Fb();vS8=Q80.registerWorkflow(_S8,{name:"installStudioPackWorkflow"})});import{jwtVerify as fS8,SignJWT as Gh1}from"jose";import{randomBytes as xS8}from"crypto";function Yh1(){if(Bl)return Bl;let $=d0(),Z=$.studioJwtSecret??$.betterAuthSecret;if(Z)Bl=new TextEncoder().encode(Z);else console.warn("STUDIO_JWT_SECRET not set - generating random secret (not persistent)"),Bl=new Uint8Array(xS8(32));return Bl}async function Qh1($,Z="5m"){let X=Yh1();return await new Gh1($).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Z).sign(X)}async function wf0($){try{let Z=Yh1(),{payload:X}=await fS8($,Z);return X}catch{return}}async function NW($,Z,X=3600){let G=d0(),Y=G.studioJwtSecret??G.betterAuthSecret;if(!Y)throw Error("A deterministic JWT secret is required to mint gateway JWTs \u2014 set STUDIO_JWT_SECRET or BETTER_AUTH_SECRET");let Q=new TextEncoder().encode(Y);return await new Gh1({iss:"mesh",sub:$,...Z&&{email:Z}}).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Math.floor(Date.now()/1000)+X).sign(Q)}var Bl=null;var HU=B(()=>{V$()});class Dl{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new Dl,Z=new Dl;return $._otherTransport=Z,Z._otherTransport=$,[$,Z]}async start(){while(this._messageQueue.length>0){let $=this._messageQueue.shift();this.onmessage?.($.message,$.extra)}}async close(){let $=this._otherTransport;this._otherTransport=void 0,await $?.close(),this.onclose?.()}async send($,Z){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage($,{authInfo:Z?.authInfo});else this._otherTransport._messageQueue.push({message:$,extra:{authInfo:Z?.authInfo}})}}import{z as o8}from"zod";var W80,Jh1,Wh1,Kh1,Nh1,Hh1,Fh1,Uh1,wh1,Oh1;var Ub=B(()=>{W80=o8.record(o8.string(),o8.array(o8.string())),Jh1=o8.object({id:o8.string().describe("Unique identifier for the API key"),name:o8.string().describe("Human-readable name for the API key"),userId:o8.string().describe("ID of the user who owns this API key"),permissions:W80.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:o8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:o8.string().datetime().describe("When the API key was created (ISO 8601)")}),Wh1=o8.object({name:o8.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:W80.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:o8.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:o8.record(o8.string(),o8.unknown()).optional().describe("Additional metadata to store with the API key")}),Kh1=o8.object({id:o8.string().describe("Unique identifier for the API key"),name:o8.string().describe("Human-readable name for the API key"),key:o8.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:W80.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:o8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:o8.string().datetime().describe("When the API key was created (ISO 8601)")}),Nh1=o8.object({}),Hh1=o8.object({items:o8.array(Jh1).describe("List of API keys (without key values)")}),Fh1=o8.object({keyId:o8.string().describe("ID of the API key to update"),name:o8.string().min(1).max(64).optional().describe("New name for the API key"),permissions:W80.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:o8.record(o8.string(),o8.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),Uh1=o8.object({item:Jh1.describe("The updated API key (without key value)")}),wh1=o8.object({keyId:o8.string().describe("ID of the API key to delete")}),Oh1=o8.object({success:o8.boolean().describe("Whether the deletion was successful"),keyId:o8.string().describe("ID of the deleted API key")})});var Of0;var Bh1=B(()=>{D6();b0();Ub();Of0=d({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Wh1,outputSchema:Kh1,handler:async($,Z)=>{G0(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.create({name:$.name,permissions:$.permissions,expiresIn:$.expiresIn,metadata:{...$.metadata,organization:Z.organization}}),G=X.expiresAt?X.expiresAt instanceof Date?X.expiresAt.toISOString():X.expiresAt:null,Y=X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,Q=N1(Z);if(Q)x1.capture({distinctId:Q,event:"api_key_created",...Z.organization?.id?{groups:{organization:Z.organization.id}}:{},properties:{key_id:X.id,key_name:X.name??$.name,organization_id:Z.organization?.id,has_expiry:!!G}});return{id:X.id,name:X.name??$.name,key:X.key,permissions:X.permissions??{},expiresAt:G,createdAt:Y}}})});var Bf0;var Dh1=B(()=>{D6();b0();Ub();Bf0=d({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:wh1,outputSchema:Oh1,handler:async($,Z)=>{G0(Z),await Z.access.check();let X=N1(Z);if(!X)throw Error("User ID required to delete API key");let Y=(await Z.boundAuth.apiKey.list())?.find((K)=>K.id===$.keyId);if(!Y)throw Error("API key not found");let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),W)x1.capture({distinctId:X,event:"api_key_deleted",groups:{organization:W},properties:{key_id:$.keyId,organization_id:W}});return{success:!0,keyId:$.keyId}}})});var Df0;var Lh1=B(()=>{b0();Ub();Df0=d({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Nh1,outputSchema:Hh1,handler:async($,Z)=>{G0(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.list(),G=Z.organization?.id;return{items:(X??[]).filter((Q)=>{return Q.metadata?.organization?.id===G}).map((Q)=>({id:Q.id,name:Q.name??"Unnamed Key",userId:Q.userId,permissions:Q.permissions??{},expiresAt:Q.expiresAt?Q.expiresAt instanceof Date?Q.expiresAt.toISOString():Q.expiresAt:null,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}}})});var Lf0;var Eh1=B(()=>{b0();Ub();Lf0=d({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Fh1,outputSchema:Uh1,handler:async($,Z)=>{if(G0(Z),await Z.access.check(),!N1(Z))throw Error("User ID required to update API key");let Y=(await Z.boundAuth.apiKey.list())?.find((N)=>N.id===$.keyId);if(!Y)throw Error(`API key not found: ${$.keyId}`);let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot update API key from another organization");let K=await Z.boundAuth.apiKey.update({keyId:$.keyId,name:$.name,permissions:$.permissions,metadata:{...$.metadata,organization:Z.organization}});if(!K)throw Error(`Failed to update API key: ${$.keyId}`);return{item:{id:K.id,name:K.name??$.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var zh1=B(()=>{Bh1();Dh1();Lh1();Eh1();Ub()});function FU($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let X=gS8.test(Z),G=hS8.test(Z),Y=uS8.test(Z);if(X&&!G&&!Y)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let Q=G?Z:`https://${Z}`,J;try{J=new URL(Q)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(J.protocol!=="http:"&&J.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let W=J.hostname.split(".");if(W.length<2||W.some((K)=>!K||!cS8.test(K)))return{ok:!1,error:"Enter a valid website URL."};return J.protocol="https:",{ok:!0,value:J.origin}}var gS8,hS8,uS8,cS8;var Ll=B(()=>{gS8=/^[a-zA-Z][a-zA-Z\d+.-]*:/,hS8=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,uS8=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,cS8=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as AX}from"zod";function HW($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??d0()).reportsInternalApiUrl??lS8).replace(/\/+$/,"")}function Ph1($={}){return`${HW($)}/api/v2/mcp`}function PD($){let Z=$.apiKey??($.settings??d0()).reportsInternalApiKey;if(!Z)throw Error("REPORTS_INTERNAL_API_KEY (or the legacy COMMERCE_DISCOVERY_INTERNAL_API_KEY) is required to set up reports.");return Z}function K80($){return new URL($).hostname}function mS8($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function iS8($,Z={}){switch($){case"ownership_unverified":{let X=Z.email?`O e-mail ${Z.email}`:"Este e-mail",G=Z.domain?` ${Z.domain}`:" este site";return`${X} n\xE3o tem permiss\xE3o para reivindicar${G}. Use um e-mail do dom\xEDnio do site ou pe\xE7a ao suporte para autorizar seu dom\xEDnio.`}case"already_claimed_by_other_org":return"Este site j\xE1 pertence a outra organiza\xE7\xE3o. Fale com o suporte para transferir o acesso.";case"unknown":return"N\xE3o foi poss\xEDvel configurar o Commerce Discovery. Tente novamente ou fale com o suporte.";default:return $}}async function nS8($){let Z=await $.text().catch(()=>"");if(!Z)return"unknown";try{let X=JSON.parse(Z);return mS8(X.error)?X.error:"unknown"}catch{return"unknown"}}async function Ef0($){let Z=`Commerce Discovery auth failed with status ${$.status}.`,X=await $.text().catch(()=>"");if(!X)return Z;try{let G=JSON.parse(X),Y=typeof G.error==="string"?G.error:typeof G.message==="string"?G.message:null;return Y?`Commerce Discovery auth failed: ${Y}.`:Z}catch{return Z}}async function Th1($,Z={}){let X=HW(Z),G=PD(Z),Y=Z.fetchImpl??fetch,Q=K80($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(Q)}/upgrade`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${G}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.orgName?{name:$.orgName}:{},...$.email?{email:$.email}:{},...$.reportUrl?{report_url:$.reportUrl}:{}})});if(!W.ok){let N=await nS8(W);throw new Ah1(N,{email:$.email,domain:Q})}let K=dS8.safeParse(await W.json());if(!K.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:K.data.token}}async function Rh1($,Z={}){let X=HW(Z),G=PD(Z),Y=Z.fetchImpl??fetch,Q=K80($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(Q)}/bindings`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${G}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,provider:$.provider,resource_id:$.resourceId})});if(W.status===409)return{ok:!1,reason:"resource_already_bound",detail:"Este recurso j\xE1 est\xE1 vinculado a outra loja. Se ele \xE9 seu, fale com o suporte para revis\xE3o manual."};if(W.status===422){let N=jh1.safeParse(await W.json());return{ok:!1,reason:N.success?N.data.reason??"verification_failed":"verification_failed",detail:(N.success?N.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!W.ok)throw Error(await Ef0(W));let K=jh1.safeParse(await W.json());if(!K.success||!K.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:K.data.binding.resource_id,evidence:K.data.binding.evidence}}async function Ih1($,Z={}){let X=HW(Z),G=PD(Z),Y=Z.fetchImpl??fetch,Q=K80($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(Q)}/run`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${G}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.githubRepo?{github_repo:$.githubRepo}:{}})});if(W.status===409)return{triggered:!1,reason:"not_upgraded"};if(!W.ok)throw Error(await Ef0(W));return{triggered:!0}}async function qh1($,Z={}){let X=HW(Z),G=PD(Z),Y=Z.fetchImpl??fetch,Q=K80($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(Q)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,W=await Y(J,{method:"GET",headers:{Authorization:`Bearer ${G}`}});if(W.status===404||W.status===409)return{};if(!W.ok)throw Error(await Ef0(W));let K=pS8.safeParse(await W.json());return K.success?K.data.providers:{}}var lS8,dS8,jh1,Ah1,pS8;var AD=B(()=>{O8();V$();lS8=new URL(n21).origin,dS8=AX.object({token:AX.string().min(1)}),jh1=AX.object({binding:AX.object({resource_id:AX.string(),evidence:AX.string()}).optional(),reason:AX.string().optional(),detail:AX.string().optional()});Ah1=class Ah1 extends Error{code;constructor($,Z={}){super(iS8($,Z));this.name="CommerceDiscoveryClaimError",this.code=$}};pS8=AX.object({providers:AX.record(AX.string(),AX.object({connected:AX.boolean(),via:AX.enum(["oauth","sa"]).nullable(),resource:AX.string().nullable()}))})});import{z as KY}from"zod";var tS8,oS8,zf0;var Mh1=B(()=>{Ll();b0();AD();tS8=KY.object({siteUrl:KY.string().min(1).describe("Website URL of the store being bound."),provider:KY.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:KY.string().min(1).describe("The resource id the client typed: GA4 numeric property id, or GSC site (sc-domain:example.com or https://example.com/).")}),oS8=KY.discriminatedUnion("ok",[KY.object({ok:KY.literal(!0),resourceId:KY.string(),evidence:KY.string()}),KY.object({ok:KY.literal(!1),reason:KY.string(),detail:KY.string()})]),zf0=d({name:"COMMERCE_DISCOVERY_BIND",description:"Bind a GA4 property or GSC site to the org's store via the shared service account (consent-free lane). The client grants deco-reader@\u2026 access to the resource and provides its id; Commerce Discovery verifies the resource belongs to this domain before persisting. Returns ok:false with an actionable pt-BR detail when verification fails or the resource is already bound elsewhere.",annotations:{title:"Bind Commerce Discovery Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:tS8,outputSchema:oS8,handler:async($,Z)=>{G0(Z);let X=s(Z);await Z.access.check();let G=FU($.siteUrl);if(!G.ok)throw Error(G.error);return Rh1({siteUrl:G.value,orgId:X.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as kN}from"zod";var rS8,aS8,jf0;var kh1=B(()=>{Ll();b0();AD();rS8=kN.object({siteUrl:kN.string().min(1).describe("Website URL of the store to inspect.")}),aS8=kN.object({providers:kN.record(kN.string(),kN.object({connected:kN.boolean(),via:kN.enum(["oauth","sa"]).nullable(),resource:kN.string().nullable()}))}),jf0=d({name:"COMMERCE_DISCOVERY_CONNECTION_STATUS",description:"Read per-provider connection status (ga4/gsc/vtex) for the org's store \u2014 { connected, via: oauth|sa, resource }. The single source of truth for whether a data source is connected, unifying the OAuth (Studio vault) and shared-SA binding lanes. Read-only.",annotations:{title:"Commerce Discovery Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:rS8,outputSchema:aS8,handler:async($,Z)=>{G0(Z);let X=s(Z);await Z.access.check();let G=FU($.siteUrl);if(!G.ok)throw Error(G.error);return{providers:await qh1({siteUrl:G.value,orgId:X.id})}}})});import{z as El}from"zod";var sS8,eS8,Pf0;var Sh1=B(()=>{O8();Ll();b0();AD();sS8=El.object({siteUrl:El.string().min(1).describe("Website URL to run the diagnostic for.")}),eS8=El.object({triggered:El.boolean(),reason:El.string().optional()}),Pf0=d({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:sS8,outputSchema:eS8,handler:async($,Z)=>{G0(Z);let X=s(Z);await Z.access.check();let G=FU($.siteUrl);if(!G.ok)throw Error(G.error);let Y=x4.COMMERCE_DISCOVERY(X.id),J=(await Z.storage.connections.findById(Y,X.id))?.configuration_state,W=J&&typeof J==="object"&&typeof J.github_repo==="string"&&J.github_repo.length>0?J.github_repo:void 0;return Ih1({siteUrl:G.value,orgId:X.id,githubRepo:W})}})});var UU=B(()=>{S00()});import{z as FW}from"zod";async function GV8($,Z,X,G){let Y=await $.storage.connections.findById(Z,X);if(Y)return Y;throw G}async function YV8($,Z,X,G){let Y=await $.storage.virtualMcps.findById(Z,X);if(Y)return Y;throw G}var Af0,$V8=3600000,ZV8,XV8,Tf0;var Vh1=B(()=>{O8();Ll();b0();ZW();UU();AD();Af0=V00,ZV8=FW.object({siteUrl:FW.string().min(1).describe("Website URL to configure.")}),XV8=FW.object({connection:P7,virtualMcp:A7,reportApp:FW.object({connectionId:FW.string(),virtualMcpId:FW.string(),toolName:FW.literal(Af0)}),created:FW.object({connection:FW.boolean(),virtualMcp:FW.boolean()})});Tf0=d({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZV8,outputSchema:XV8,handler:async($,Z)=>{G0(Z);let X=s(Z);await Z.access.check("COLLECTION_CONNECTIONS_CREATE");let G=N1(Z);if(!G)throw Error("User ID required to set up Commerce Discovery");let Y=FU($.siteUrl);if(!Y.ok)throw Error(Y.error);let Q=x4.COMMERCE_DISCOVERY(X.id),J=_00(X.id),W=new URLSearchParams({virtualmcpid:J,main:`app:${Q}:${Af0}`}),K={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}/${encodeURIComponent(X.slug??X.id)}/${crypto.randomUUID()}?${W.toString()}`},N=await Z.storage.connections.findById(Q,X.id),H={connection:!1,virtualMcp:!1},F=await Th1({siteUrl:Y.value,orgId:X.id,orgName:X.name,...K}),U=Ph1();if(N)console.log("[commerce-discovery] syncing connection to claimed site",{orgId:X.id,siteUrl:Y.value,connectionId:Q}),N=await Z.storage.connections.update(N.id,{connection_url:U,connection_token:F.authorizationToken,metadata:{...N.metadata??{},siteUrl:Y.value}});else{console.log("[commerce-discovery] creating connection",{orgId:X.id,siteUrl:Y.value,connectionId:Q});try{let L=Qq1(X.id,F.authorizationToken,U);N=await Z.storage.connections.create({...L,metadata:{...L.metadata??{},siteUrl:Y.value},organization_id:X.id,created_by:G}),H.connection=!0}catch(L){N=await GV8(Z,Q,X.id,L)}}let w=await Z.storage.virtualMcps.findById(J,X.id);if(!w){console.log("[commerce-discovery] creating virtual MCP",{orgId:X.id,siteUrl:Y.value,connectionId:N.id,virtualMcpId:J});try{w=await Z.storage.virtualMcps.create(X.id,G,Jq1(X.id,N.id),{id:J}),H.virtualMcp=!0}catch(L){w=await YV8(Z,J,X.id,L)}}if(!w.pinned)w=await Z.storage.virtualMcps.update(w.id,G,{pinned:!0});let O=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",X.id).executeTakeFirst();if((O?Date.now()-new Date(O.createdAt).getTime():Number.POSITIVE_INFINITY)<$V8){if((await Z.storage.organizationSettings.get(X.id))?.flags?.reports_only==null)await Z.storage.organizationSettings.upsert(X.id,{flags:{reports_only:!0}})}return{connection:N,virtualMcp:w,reportApp:{connectionId:N.id,virtualMcpId:w.id,toolName:Af0},created:H}}})});var Ch1=B(()=>{Mh1();kh1();Sh1();Vh1()});var Rf0=_((_h1)=>{Object.defineProperty(_h1,"__esModule",{value:!0});_h1.kvPrefix=_h1.KvWatchInclude=void 0;_h1.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};_h1.kvPrefix="KV_"});var mh1=_((lh1)=>{Object.defineProperty(lh1,"__esModule",{value:!0});lh1.KvStatusImpl=lh1.Bucket=lh1.Kvm=lh1.kvOperationHdr=void 0;lh1.Base64KeyCodec=WV8;lh1.NoopKvCodecs=If0;lh1.defaultBucketOpts=fh1;lh1.validateKey=xh1;lh1.validateSearchKey=yh1;lh1.hasWildcards=gh1;lh1.validateBucket=N80;var T5=pG(),l6=jr(),A5=Rf0();function WV8(){let $=(Z,X)=>{let G=[];for(let Y of Z.split("."))switch(Y){case">":case"*":G.push(Y);break;default:G.push(X(Y));break}return G.join(".")};return{encode(Z){return $(Z,btoa)},decode(Z){return $(Z,atob)}}}function If0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function fh1(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:If0(),storage:l6.StorageType.File}}lh1.kvOperationHdr="KV-Operation";var bh1="$KV",KV8=/^[-/=.\w]+$/,NV8=/^[-/=.>*\w]+$/,HV8=/^[-\w]+$/;function xh1($){if($.startsWith(".")||$.endsWith(".")||!KV8.test($))throw Error(`invalid key: ${$}`)}function yh1($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!NV8.test($))throw Error(`invalid key: ${$}`)}function gh1($){if($.startsWith(".")||$.endsWith("."))throw Error(`invalid key: ${$}`);let Z=$.split("."),X=!1;for(let G=0;G<Z.length;G++)switch(Z[G]){case"*":X=!0;break;case">":if(G!==Z.length-1)throw Error(`invalid key: ${$}`);X=!0;break;default:}return X}function N80($){if(!HV8.test($))throw Error(`invalid bucket name: ${$}`)}class hh1{js;constructor($){this.js=(0,l6.toJetStreamClient)($)}create($,Z={}){return this.#$($,Z)}open($,Z={}){return Z.bindOnly=!0,this.#$($,Z)}#$($,Z={}){let{ok:X,min:G}=this.js.nc.features.get(T5.Feature.JS_KV);if(!X)return Promise.reject(Error(`kv is only supported on servers ${G} or better`));if(Z.bindOnly)return wb.bind(this.js,$,Z);return wb.create(this.js,$,Z)}list(){let $=(X)=>{let Y=X.streams.filter((J)=>{return J.config.name.startsWith(A5.kvPrefix)});Y.forEach((J)=>{J.config.sealed=J.config.sealed||!1,J.config.deny_delete=J.config.deny_delete||!1,J.config.deny_purge=J.config.deny_purge||!1,J.config.allow_rollup_hdrs=J.config.allow_rollup_hdrs||!1});let Q="";if(Y.length)Q=this.js.nc.info?.cluster??"";return Y.map((J)=>{return new H80(J,Q)})},Z=`${this.js.prefix}.STREAM.LIST`;return new l6.ListerImpl(Z,$,this.js)}}lh1.Kvm=hh1;class wb{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,X){N80($),this.js=Z,this.jsm=X,this.bucket=$,this.prefix=bh1,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,X={}){N80(Z);let G=await $.jetstreamManager(),Y=new wb(Z,$,G);return await Y.init(X),Y}static async bind($,Z,X={}){let G=$.getOptions()?.checkAPI||X.bindOnly===!1,Y=await $.jetstreamManager(G),Q={config:{allow_direct:X.allow_direct}};N80(Z);let J=new wb(Z,$,Y);return Q.config.name=X.streamName??J.bucketName(),Object.assign(J,Q),J.stream=Q.config.name,J.codec=X.codec||If0(),J.direct=Q.config.allow_direct??!1,J.initializePrefixes(Q),J}async init($={}){let Z=Object.assign(fh1(),$);this.codec=Z.codec;let X={};if(this.stream=X.name=$.streamName??this.bucketName(),X.retention=l6.RetentionPolicy.Limits,X.max_msgs_per_subject=Z.history,Z.max_bytes)X.max_bytes=Z.max_bytes;if(X.max_msg_size=Z.maxValueSize,X.storage=Z.storage,$.placement)X.placement=$.placement;if($.republish)X.republish=$.republish;if($.description)X.description=$.description;if($.markerTTL)X.allow_msg_ttl=!0,X.subject_delete_marker_ttl=(0,T5.nanos)(Z.markerTTL);if($.mirror){let N=Object.assign({},$.mirror);if(!N.name.startsWith(A5.kvPrefix))N.name=`${A5.kvPrefix}${N.name}`;X.mirror=N,X.mirror_direct=!0}else if($.sources){let N=$.sources.map((H)=>{let F=Object.assign({},H),U=F.name.startsWith(A5.kvPrefix)?F.name.substring(A5.kvPrefix.length):F.name;if(!F.name.startsWith(A5.kvPrefix))F.name=`${A5.kvPrefix}${F.name}`;if(!H.external&&U!==this.bucket)F.subject_transforms=[{src:`$KV.${U}.>`,dest:`$KV.${this.bucket}.>`}];return F});X.sources=N,X.subjects=[this.subjectForBucket()]}else X.subjects=[this.subjectForBucket()];if($.metadata)X.metadata=$.metadata;if(typeof $.compression==="boolean")X.compression=$.compression?l6.StoreCompression.S2:l6.StoreCompression.None;let G=this.js.nc,Y=G.getServerVersion(),Q=Y?(0,T5.compare)(Y,(0,T5.parseSemVer)("2.7.2"))>=0:!1;X.discard=Q?l6.DiscardPolicy.New:l6.DiscardPolicy.Old;let{ok:J,min:W}=G.features.get(T5.Feature.JS_ALLOW_DIRECT);if(!J&&$.allow_direct===!0){let N=Y?`${Y.major}.${Y.minor}.${Y.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${N} - requires ${W}`))}if($.allow_direct=typeof $.allow_direct==="boolean"?$.allow_direct:J,X.allow_direct=$.allow_direct,this.direct=X.allow_direct,X.num_replicas=Z.replicas,Z.ttl)X.max_age=(0,T5.nanos)(Z.ttl);X.allow_rollup_hdrs=!0;let K;try{if(K=await this.jsm.streams.info(X.name),!K.config.allow_direct&&this.direct===!0)this.direct=!1}catch(N){if(N.message==="stream not found")K=await this.jsm.streams.add(X);else throw N}this.initializePrefixes(K)}initializePrefixes($){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:Z}=$.config;if(Z){let X=Z.name;if(X.startsWith(A5.kvPrefix))X=X.substring(A5.kvPrefix.length);if(Z.external&&Z.external.api!==""){let G=Z.name.substring(A5.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${G}`,this.editPrefix=`${Z.external.api}.$KV.${X}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${A5.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey($,Z=!1){let X=[];if(Z){if(this.useJsPrefix)X.push(this.js.apiPrefix);if(this.editPrefix!=="")X.push(this.editPrefix);else X.push(this.prefix)}else if(this.prefix)X.push(this.prefix);return X.push($),X.join(".")}fullKeyName($){if(this.prefix!=="")return`${this.prefix}.${$}`;return`${bh1}.${this.bucket}.${$}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.encode(X));break}return Z.join(".")}decodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.decode(X));break}return Z.join(".")}validateKey=xh1;validateSearchKey=yh1;hasWildcards=gh1;close(){return Promise.resolve()}dataLen($,Z){let X=Z?Z.get(l6.JsHeaders.MessageSizeHdr)||"":"";if(X!=="")return parseInt(X,10);return $.length}smToEntry($){return new uh1(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new ch1(this.bucket,this.prefixLen,$,Z,this.codec)}async create($,Z,X){let G;try{let Q={previousSeq:0},J=await this._put($,Z,Q,X);return Promise.resolve(J)}catch(Q){if(G=Q,Q instanceof l6.JetStreamApiError){let J=Q;if(J.code!==l6.JetStreamApiCodes.StreamWrongLastSequence&&J.code!==l6.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(Q)}}let Y=0;try{let Q=await this.get($);if(Q?.operation==="DEL"||Q?.operation==="PURGE")return Y=Q!==null?Q.revision:0,this._put($,Z,{previousSeq:Y},X);else return Promise.reject(G)}catch(Q){return Promise.reject(Q)}}update($,Z,X,G){if(X<=0)throw Error("version must be greater than 0");return this.put($,Z,{previousSeq:X,timeout:G})}async _put($,Z,X={},G){let Y=this.encodeKey($);this.validateKey(Y),Z=this.codec.value.encode(Z);let Q={timeout:X?.timeout};if(X.previousSeq!==void 0){let J=(0,T5.headers)();Q.headers=J,J.set(l6.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`)}if(G)(Q.headers||(0,T5.headers)()).set(l6.PubHeaders.MessageTTL,G);try{return(await this.js.publish(this.subjectForKey(Y,!0),Z,Q)).seq}catch(J){return Promise.reject(J)}}put($,Z,X={}){return this._put($,Z,X)}async get($,Z){let X=this.encodeKey($);this.validateKey(X);let G={last_by_subj:this.subjectForKey(X)};if(Z&&Z.revision>0)G={seq:Z.revision};let Y=null;try{if(this.direct)Y=await this.jsm.direct.getMessage(this.bucketName(),G);else Y=await this.jsm.streams.getMessage(this.bucketName(),G);if(Y===null)return null;let Q=this.smToEntry(Y);if(Q.rawKey!==X)return null;return Q}catch(Q){throw Q}}purge($,Z){return this._deleteOrPurge($,"PURGE",Z)}delete($,Z){return this._deleteOrPurge($,"DEL",Z)}async purgeDeletes($=1800000){let Z=[],X=await this.history({key:">"});await(async()=>{for await(let J of X)if(J.operation==="DEL"||J.operation==="PURGE")Z.push(J)})().then(),X.stop();let G=Date.now()-$,Y=Z.map((J)=>{let W=this.subjectForKey(J.key);if(J.created.getTime()>=G)return this.jsm.streams.purge(this.stream,{filter:W,keep:1});else return this.jsm.streams.purge(this.stream,{filter:W,keep:0})}),Q=await Promise.all(Y);return Q.unshift({success:!0,purged:0}),Q.reduce((J,W)=>{return J.purged+=W.purged,J})}async _deleteOrPurge($,Z,X){if(!this.hasWildcards($))return this._doDeleteOrPurge($,Z,X);let G=await this.keys($),Y=[];for await(let Q of G)if(Y.push(this._doDeleteOrPurge(Q,Z)),Y.length===100)await Promise.all(Y),Y.length=0;if(Y.length>0)await Promise.all(Y)}async _doDeleteOrPurge($,Z,X){let G=this.encodeKey($);this.validateKey(G);let Y=(0,T5.headers)();if(Y.set(lh1.kvOperationHdr,Z),Z==="PURGE"){let Q=X;if(Y.set(l6.JsHeaders.RollupHdr,l6.JsHeaders.RollupValueSubject),typeof Q?.ttl==="string"&&Q.ttl!=="")Y.set(l6.PubHeaders.MessageTTL,`${Q.ttl}`)}if(X?.previousSeq)Y.set(l6.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`);await this.js.publish(this.subjectForKey(G,!0),T5.Empty,{headers:Y})}_buildCC($,Z,X={}){let Y=(!Array.isArray($)?[$]:$).map((W)=>{let K=this.encodeKey(W);return this.validateSearchKey(W),this.fullKeyName(K)}),Q=l6.DeliverPolicy.LastPerSubject;if(Z===A5.KvWatchInclude.AllHistory)Q=l6.DeliverPolicy.All;if(Z===A5.KvWatchInclude.UpdatesOnly)Q=l6.DeliverPolicy.New;let J=void 0;if(Y.length===1)J=Y[0],Y=void 0;return Object.assign({deliver_policy:Q,ack_policy:l6.AckPolicy.None,filter_subjects:Y,filter_subject:J,flow_control:!0,idle_heartbeat:(0,T5.nanos)(5000)},X)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",X={};X.headers_only=$.headers_only||!1;let G=new T5.QueuedIteratorImpl,Y=()=>{G.stop()},Q=this._buildCC(Z,A5.KvWatchInclude.AllHistory,X),J=await this.js.consumers.getPushConsumer(this.stream,Q);if(G._data=J,(await J.info(!0)).num_pending===0)return G.push(Y),G;let K=await J.consume({callback:(N)=>{let H=this.jmToWatchEntry(N,!1);if(G.push(H),G.received++,N.info.pending===0)G.push(Y)}});return K.closed().then(()=>{G.push(Y)}),(async()=>{for await(let N of K.status())switch(N.type){case"heartbeat":G.push(()=>{G.stop()});break}})().then(),G.iterClosed.then(()=>{K.stop()}),G}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(T5.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",X=new T5.QueuedIteratorImpl,G={};G.headers_only=$.headers_only||!1;let Y=A5.KvWatchInclude.LastValue;if($.include===A5.KvWatchInclude.AllHistory)Y=A5.KvWatchInclude.AllHistory;else if($.include===A5.KvWatchInclude.UpdatesOnly)Y=A5.KvWatchInclude.UpdatesOnly;let Q=$.ignoreDeletes===!0,J=this._buildCC(Z,Y,G);if(J.name=`KV_WATCHER_${T5.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)J.deliver_policy=l6.DeliverPolicy.StartSequence,J.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,J),N=(await W.info(!0)).num_pending,H=Y===A5.KvWatchInclude.UpdatesOnly||N===0;X._data=W;let F=0,U=await W.consume({callback:(w)=>{if(!H)F++,H=F>=N;let O=this.jmToWatchEntry(w,H);if(Q&&O.operation==="DEL")return;X.push(O),X.received++}});return X.iterClosed.then(()=>{U.stop()}),U.closed().then(()=>{X.push(()=>{X.stop()})}),X}async keys($=">"){let Z=new T5.QueuedIteratorImpl,X=this._buildCC($,A5.KvWatchInclude.LastValue,{headers_only:!0}),G=await this.js.consumers.getPushConsumer(this.stream,X);if((await G.info()).num_pending===0)return Z.stop(),Z;Z._data=G;let Q=await G.consume({callback:(J)=>{let W=J.headers?.get(lh1.kvOperationHdr);if(W!=="DEL"&&W!=="PURGE"){let K=this.decodeKey(J.subject.substring(this.prefixLen));Z.push(K)}if(J.info.pending===0)Q.stop()}});return(async()=>{for await(let J of Q.status())switch(J.type){case"heartbeat":Z.push(()=>{Z.stop()});break}})().then(),Q.closed().then(()=>{Z.push(()=>{Z.stop()})}),Z.iterClosed.then(()=>{Q.stop()}),Z}purgeBucket($){return this.jsm.streams.purge(this.bucketName(),$)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let Z=this.js.nc.info?.cluster??"",X=this.bucketName(),G=await this.jsm.streams.info(X);return new H80(G,Z)}}lh1.Bucket=wb;class H80{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(A5.kvPrefix)?this.si.config.name.substring(A5.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,T5.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,T5.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==l6.StoreCompression.None;return!1}}lh1.KvStatusImpl=H80;class uh1{bucket;sm;prefixLen;codec;constructor($,Z,X,G){this.bucket=$,this.prefixLen=Z,this.sm=X,this.codec=G}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(lh1.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(l6.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(T5.TD.decode(this.value),$)}string(){return T5.TD.decode(this.value)}}class ch1{bucket;sm;prefixLen;update;codec;constructor($,Z,X,G,Y){this.bucket=$,this.prefixLen=Z,this.sm=X,this.update=G,this.codec=Y}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,T5.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(lh1.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(l6.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(T5.TD.decode(this.value),$)}string(){return T5.TD.decode(this.value)}}});var qf0=_((vJ)=>{Object.defineProperty(vJ,"__esModule",{value:!0});vJ.validateKey=vJ.validateBucket=vJ.NoopKvCodecs=vJ.Kvm=vJ.defaultBucketOpts=vJ.Bucket=vJ.Base64KeyCodec=vJ.KvWatchInclude=vJ.kvPrefix=void 0;var ih1=Rf0();Object.defineProperty(vJ,"kvPrefix",{enumerable:!0,get:function(){return ih1.kvPrefix}});Object.defineProperty(vJ,"KvWatchInclude",{enumerable:!0,get:function(){return ih1.KvWatchInclude}});var TD=mh1();Object.defineProperty(vJ,"Base64KeyCodec",{enumerable:!0,get:function(){return TD.Base64KeyCodec}});Object.defineProperty(vJ,"Bucket",{enumerable:!0,get:function(){return TD.Bucket}});Object.defineProperty(vJ,"defaultBucketOpts",{enumerable:!0,get:function(){return TD.defaultBucketOpts}});Object.defineProperty(vJ,"Kvm",{enumerable:!0,get:function(){return TD.Kvm}});Object.defineProperty(vJ,"NoopKvCodecs",{enumerable:!0,get:function(){return TD.NoopKvCodecs}});Object.defineProperty(vJ,"validateBucket",{enumerable:!0,get:function(){return TD.validateBucket}});Object.defineProperty(vJ,"validateKey",{enumerable:!0,get:function(){return TD.validateKey}})});var Mf0=_((wU)=>{Object.defineProperty(wU,"__esModule",{value:!0});wU.NoopKvCodecs=wU.Kvm=wU.defaultBucketOpts=wU.Bucket=wU.Base64KeyCodec=wU.KvWatchInclude=void 0;var PV8=qf0();Object.defineProperty(wU,"KvWatchInclude",{enumerable:!0,get:function(){return PV8.KvWatchInclude}});var jl=qf0();Object.defineProperty(wU,"Base64KeyCodec",{enumerable:!0,get:function(){return jl.Base64KeyCodec}});Object.defineProperty(wU,"Bucket",{enumerable:!0,get:function(){return jl.Bucket}});Object.defineProperty(wU,"defaultBucketOpts",{enumerable:!0,get:function(){return jl.defaultBucketOpts}});Object.defineProperty(wU,"Kvm",{enumerable:!0,get:function(){return jl.Kvm}});Object.defineProperty(wU,"NoopKvCodecs",{enumerable:!0,get:function(){return jl.NoopKvCodecs}})});function F80(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(X)=>$.encode(JSON.stringify(X)),decode:(X)=>JSON.parse(Z.decode(X))}}class Sf0{options;kv=null;codec=F80();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new ph1.Kvm($).create(TV8,{storage:nh1.StorageType.Memory})}async get($,Z){if(!this.kv)return null;try{let X=await this.kv.get(`${$}.${Z}`);if(!X?.value?.length)return null;if(X.operation==="DEL"||X.operation==="PURGE")return null;return this.codec.decode(X.value)}catch{return null}}async set($,Z,X){if(!this.kv)return;try{await this.kv.put(`${$}.${Z}`,this.codec.encode(X))}catch{}}async invalidate($){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(X)=>{try{await this.kv.delete(`${X}.${$}`)}catch{}}))}teardown(){this.kv=null}}function RV8($,Z,X){if(X<=0)return!0;if($===void 0)return!0;return Z-$>=X}function U80($){return $ instanceof B1&&$.code===R1.MethodNotFound}function IV8($){return $ instanceof B1&&$.code===-32000&&/connection closed/i.test($.message)}async function BU($,Z,X,G,Y,Q=0){if(!G)try{return await X()}catch(N){if(U80(N))return[];return Pl.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let J=`${$}:${Z}`,W=await G.get($,Z);if(W===null)try{let N=await X();return G.set($,Z,N).catch(()=>{}),kf0.set(J,Date.now()),Pl.add(1,{type:$,outcome:"miss",stage:"miss"}),N}catch(N){if(U80(N))return G.set($,Z,[]).catch(()=>{}),[];return Pl.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(Pl.add(1,{type:$,outcome:"hit",stage:"hit"}),RV8(kf0.get(J),Date.now(),Q)&&!w80.has(J)){w80.add(J),kf0.set(J,Date.now());let N=X().then((H)=>G.set($,Z,H)).catch((H)=>{if(U80(H)||IV8(H)){if(U80(H))G.set($,Z,[]).catch(()=>{});return}Pl.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>w80.delete(J));Y?.(N)}return W}function Vf0($){th1=$}function l5(){return th1}var nh1,ph1,Pl,TV8="DECOCMS_MCP_LISTS",w80,kf0,OU=30000,th1=null;var NY=B(()=>{c5();K5();nh1=k(sO(),1),ph1=k(Mf0(),1),Pl=J8.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});w80=new Set;J8.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(w80.size));kf0=new Map});var Al=($,Z)=>{if(Z===null||Z===void 0)return;let X=$.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),G=Z;for(let Y of X){if(G===null||G===void 0||typeof G!=="object")return;G=G[Y]}return G};function O80($){let Z=$.split("::");if(Z.length!==2||!Z[0]||!Z[1])throw Error(`Invalid scope format: ${$}. Expected format: "KEY::SCOPE"`);return Z}function qV8($){try{return O80($)}catch{return null}}function MV8($){if(typeof $==="object"&&$!==null&&"value"in $){let Z=$.value;if(typeof Z==="string")return Z}return null}function Cf0($,Z){let X={};if(!$||!Z)return X;for(let G of Z){if(G==="*"){X["*"]=["*"];continue}let Y=qV8(G);if(!Y)continue;let[Q,J]=Y,W=Al(Q,$),K=MV8(W);if(K){if(!X[K])X[K]=[];X[K].push(J)}}return X}function oh1($,Z){let X=Cf0($,Z);return new Set(Object.keys(X).filter((G)=>G!=="*"))}var _f0=()=>{};async function rh1($){if(!$.refreshToken)return{success:!1,permanent:!1,error:"No refresh token available"};if(!$.tokenEndpoint)return{success:!1,permanent:!1,error:"No token endpoint available"};if(!$.clientId)return{success:!1,permanent:!1,error:"No client ID available"};try{let Z=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refreshToken,client_id:$.clientId});if($.clientSecret)Z.set("client_secret",$.clientSecret);if($.scope)Z.set("scope",$.scope);let X=await fetch($.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Z.toString()});if(!X.ok){let Y=await X.text(),Q,J;try{let K=JSON.parse(Y);Q=K.error,J=K.error_description}catch{}let W=X.status===400&&!!Q&&kV8.has(Q);return(W?console.error:console.warn)("[TokenRefresh] refresh failed",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,status:X.status,errorCode:Q,errorDescription:J,permanent:W}),{success:!1,permanent:W,status:X.status,errorCode:Q,error:J||Q||`Token refresh failed: ${X.status}`}}let G=await X.json();return{success:!0,accessToken:G.access_token,refreshToken:G.refresh_token||$.refreshToken,expiresIn:G.expires_in,scope:G.scope}}catch(Z){return console.warn("[TokenRefresh] network/parse error",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,message:Z instanceof Error?Z.message:String(Z)}),{success:!1,permanent:!1,error:Z instanceof Error?Z.message:"Token refresh failed"}}}var kV8;var ah1=B(()=>{kV8=new Set(["invalid_grant","bad_refresh_token"])});import{createHash as SV8,randomBytes as VV8,timingSafeEqual as og6}from"crypto";function _V8($){return $.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function bf0($){return SV8("sha256").update($).digest("hex")}function $u1($){let Z=vf0.length+1,X=Z+eh1;if(!$.startsWith(`${vf0}_`)||$.length<=X+1||$[X]!=="_")return null;let G=$.slice(Z,X),Y=$.slice(X+1);if(!sh1.test(G)||!sh1.test(Y))return null;return G}function Zu1(){let $=_V8(VV8(CV8)),Z=$.slice(0,eh1),X=`${vf0}_${Z}_${$}`;return{plaintext:X,prefix:Z,hash:bf0(X)}}var vf0="stv",CV8=32,eh1=12,sh1;var Xu1=B(()=>{sh1=/^[A-Za-z0-9_-]+$/});function Gu1($){return{id:$.id,organizationId:$.organization_id,subjectConnectionId:$.subject_connection_id,tokenHash:$.token_hash,tokenPrefix:$.token_prefix,name:$.name,revokedAt:$.revoked_at,lastUsedAt:$.last_used_at,createdAt:$.created_at,updatedAt:$.updated_at}}class ff0{db;constructor($){this.db=$}async createOrRotateWorkloadToken($){let Z=$.name??"default";return await this.db.transaction().execute(async(G)=>{if(!await G.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let Q=Zu1(),J=new Date().toISOString();await G.updateTable("connection_workload_tokens").set({revoked_at:J,updated_at:J}).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",Z).where("revoked_at","is",null).execute();let W=await G.insertInto("connection_workload_tokens").values({id:l8("cwt"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,token_hash:Q.hash,token_prefix:Q.prefix,name:Z,revoked_at:null,last_used_at:null,created_at:J,updated_at:J}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:Q.plaintext,record:Gu1(W)}})}async findActiveWorkloadToken($){let Z=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",$.name??"default").where("revoked_at","is",null).executeTakeFirst();return Z?Gu1(Z):null}async revokeWorkloadToken($){let Z=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:Z,updated_at:Z}).where("id","=",$.tokenId).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken($){let Z=$u1($);if(!Z)return null;let X=bf0($),G=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",Z).where("token_hash","=",X).where("revoked_at","is",null).executeTakeFirst();if(!G)return null;let Y=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:Y,updated_at:Y}).where("id","=",G.id).execute(),{tokenId:G.id,tokenPrefix:G.token_prefix,organizationId:G.organization_id,subjectConnectionId:G.subject_connection_id}}async replaceGrantsForSubject($){await this.db.transaction().execute(async(Z)=>{if(!await Z.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let G=[...new Set($.grants.map((J)=>J.targetConnectionId))];if(G.length>0){if((await Z.selectFrom("connections").select("id").where("organization_id","=",$.organizationId).where("id","in",G).execute()).length!==G.length)throw Error("Referenced connection not found in organization")}if(await Z.deleteFrom("connection_credential_grants").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).execute(),$.grants.length===0)return;let Y=new Date().toISOString(),Q=$.grants.map((J)=>({id:l8("ccg"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,target_connection_id:J.targetConnectionId,scope:J.scope,created_by:$.createdBy,created_at:Y,updated_at:Y}));await Z.insertInto("connection_credential_grants").values(Q).execute()})}async hasGrant($){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("target_connection_id","=",$.targetConnectionId).where("scope","=",$.scope).executeTakeFirst()}}var B80="credential:access-token:read",D80="credential:configuration:read";var L80=B(()=>{DX();Xu1()});function RD($){let Z=String($??"");if(Z&&!Z.includes("T"))return Z.replace(" ","T")+"Z";return Z}function P$($){return $.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function v8($){let Z=Number($??0);return Number.isFinite(Z)?Z:0}function bV8($){if(!vV8.has($))throw Error(`Invalid groupByColumn: ${$}`);return $}function xf0($){if(!fV8.test($))throw Error(`Invalid JSONPath: ${$}`);if($.startsWith("$."))return $;if($.startsWith("."))return`$${$}`;return`$.${$}`}function uf0($){return $.replace(/^\$\./,"").split(".").map((X)=>`'${P$(X)}'`).join(", ")}function gV8($){let Z=xV8.exec($);if(!Z||!Z[1]||!Z[2])throw Error(`Invalid interval: ${$}`);let X=parseInt(Z[1],10),G=Z[2],Y=yV8[G];if(X<1||X>Y)throw Error(`Invalid interval amount: ${X}${G} (max ${Y}${G})`);return{amount:X,unit:G}}function DU($,Z,X="timestamp"){let{amount:G,unit:Y}=gV8($),J={m:"MINUTE",h:"HOUR",d:"DAY"}[Y];if(Z==="duckdb")return`time_bucket(INTERVAL '${G} ${J}', CAST(${X} AS TIMESTAMP))`;return`toStartOfInterval(${X}, INTERVAL ${G} ${J})`}function Tl($,Z,X){if(X==="duckdb")return`json_extract_string(${$}, '${Z}')`;let G=uf0(Z);return`JSONExtractString(${$}, ${G})`}function hV8($,Z,X){if(X==="duckdb")return`CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let G=uf0(Z);return`JSONExtractFloat(${$}, ${G})`}function Yu1($,Z,X){if(X==="duckdb")return`TRY_CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let G=uf0(Z);return`toFloat64OrZero(JSONExtractString(${$}, ${G}))`}function yf0($){if($===null||$===void 0)return{};if(typeof $==="object")return $;let Z=String($);try{return JSON.parse(Z)}catch{return{_decocms_truncated:Z}}}function gf0($){return{id:String($.id??""),organizationId:String($.organization_id??""),connectionId:String($.connection_id??""),toolName:String($.tool_name??""),input:yf0($.input),output:yf0($.output),isError:$.is_error===1||$.is_error===!0||$.is_error==="1"||typeof $.is_error==="bigint"&&$.is_error===1n,errorMessage:$.error_message!=null?String($.error_message):null,durationMs:Number($.duration_ms??0),timestamp:(()=>{if($.timestamp instanceof Date)return $.timestamp.toISOString();let Z=String($.timestamp??""),X=new Date(Z.includes("T")?Z:Z.replace(" ","T")+"Z");return Number.isNaN(X.getTime())?Z:X.toISOString()})(),userId:$.user_id!=null?String($.user_id):null,requestId:String($.request_id??""),userAgent:$.user_agent!=null?String($.user_agent):null,virtualMcpId:$.virtual_mcp_id!=null?String($.virtual_mcp_id):null,properties:$.properties?yf0($.properties):null}}function Ku1($,Z){let X=[];if($.properties)for(let[G,Y]of Object.entries($.properties)){let Q=P$(G),J=P$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Q}') = '${J}'`);else X.push(`JSONExtractString(properties, '${Q}') = '${J}'`)}if($.propertyKeys)for(let G of $.propertyKeys){let Y=P$(G);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Y}') IS NOT NULL AND json_extract_string(properties, '$.${Y}') != ''`);else X.push(`JSONExtractString(properties, '${Y}') IS NOT NULL AND JSONExtractString(properties, '${Y}') != ''`)}if($.propertyPatterns)for(let[G,Y]of Object.entries($.propertyPatterns)){let Q=P$(G),J=P$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Q}') ILIKE '${J}'`);else X.push(`JSONExtractString(properties, '${Q}') ILIKE '${J}'`)}if($.propertyInValues)for(let[G,Y]of Object.entries($.propertyInValues)){let Q=P$(G),J=P$(Y);if(Z==="duckdb")X.push(`list_contains(string_split(json_extract_string(properties, '$.${Q}'), ','), '${J}')`);else X.push(`has(splitByChar(',', JSONExtractString(properties, '${Q}')), '${J}')`)}return X}function Ju1($,Z){let X=[];if(fJ(X,Z?.startDate,$),!Z)return X;if(Z.connectionIds?.length){let G=Z.connectionIds.map((Y)=>`'${P$(Y)}'`).join(",");X.push(`connection_id IN (${G})`)}if(Z.toolNames?.length){let G=Z.toolNames.map((Y)=>`'${P$(Y)}'`).join(",");X.push(`tool_name IN (${G})`)}if(Z.virtualMcpIds?.length){let G=Z.virtualMcpIds.map((Y)=>`'${P$(Y)}'`).join(",");X.push(`virtual_mcp_id IN (${G})`)}if(Z.endDate)X.push(bJ(Z.endDate,$));if(Z.propertyFilters)X.push(...Ku1(Z.propertyFilters,$));return X}function Wu1($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) >= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} >= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} >= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function bJ($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) <= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} <= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} <= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function fJ($,Z,X,G="timestamp"){if(Z)$.push(Wu1(Z,X,G));else if(X==="clickhouse")$.push(Wu1(new Date(Date.now()-uV8),X,G))}class cf0{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor($,Z,X,G,Y="clickhouse",Q=!1){this.engine=$;this.sourceFactory=Z;this.metricEngine=X;this.metricSourceFactory=G;this.dialect=Y;this.metricsFromLogs=Q}async query($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${P$($.organizationId)}'`];if($.connectionId)X.push(`connection_id = '${P$($.connectionId)}'`);if($.excludeConnectionIds?.length){let U=$.excludeConnectionIds.map((w)=>`'${P$(w)}'`).join(",");X.push(`connection_id NOT IN (${U})`)}if($.virtualMcpId)X.push(`virtual_mcp_id = '${P$($.virtualMcpId)}'`);if($.toolName)X.push(`tool_name = '${P$($.toolName)}'`);if($.isError!==void 0)X.push(`is_error = ${$.isError?1:0}`);if(fJ(X,$.startDate,this.dialect),$.endDate)X.push(bJ($.endDate,this.dialect));if($.propertyFilters)X.push(...Ku1($.propertyFilters,this.dialect));let G=1000,Y=Math.min(Math.max(1,Math.floor($.limit??50)),G),Q=Math.max(0,Math.floor($.offset??0)),J=X.join(" AND ");if(this.dialect==="duckdb"){let U=`SELECT ${Qu1}, count(*) OVER () AS _total FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${Q}`,w=await this.engine.query(U);if(w.length===0)return{logs:[],total:0};let O=Number(w[0]._total??0);return{logs:w.map(gf0),total:O}}let W=`SELECT count(*) AS total FROM ${Z} WHERE ${J}`,K=`SELECT ${Qu1} FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${Q}`,[N,H]=await Promise.all([this.engine.query(W),this.engine.query(K)]),F=Number(N[0]?.total??0);return{logs:H.map(gf0),total:F}}async getById($,Z){if(!$||!Z)return null;let G=`SELECT * FROM ${this.sourceFactory($)} WHERE organization_id = '${P$($)}' AND id = '${P$(Z)}' LIMIT 1`,Y=await this.engine.query(G);if(Y.length===0)return null;return gf0(Y[0])}async getStats($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${P$($.organizationId)}'`];if(fJ(X,$.startDate,this.dialect),$.endDate)X.push(bJ($.endDate,this.dialect));let G=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${Z} WHERE ${X.join(" AND ")}`,Q=(await this.engine.query(G))[0]??{};return{totalCalls:Number(Q.total_calls??0),errorRate:Number(Q.error_rate??0),avgDurationMs:Number(Q.avg_duration_ms??0)}}async queryLlmUsageStats($){let Z={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!$.organizationId||!$.connectionId)return Z;let X=this.dialect,G=X==="clickhouse",Y=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),Q=DU($.interval,X,"timestamp"),J=(E)=>`coalesce(${Yu1("properties",`$.${E}`,X)}, 0)`,W=G?"count()":"count(*)",K=G?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",N=(E)=>G?`quantile(${E})(duration_ms)`:`quantile_cont(duration_ms, ${E})`,H=[`organization_id = '${P$($.organizationId)}'`,`connection_id = '${P$($.connectionId)}'`];if(fJ(H,$.startDate,X),$.endDate)H.push(bJ($.endDate,X));if($.userIds?.length){let E=$.userIds.slice(0,100).map((z)=>`'${P$(z)}'`).join(",");H.push(`user_id IN (${E})`)}let F=H.join(" AND "),U=Math.min(Math.max(1,Math.floor($.topN??5)),20),w=`${W} AS calls,
692
+ </workflows>`,eg1={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:kS8,getId:R7.USAGE_MANAGER}});function Ff0($){return jD.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function SS8($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function G80({virtualMcp:$,agentId:Z=$.id,organizationId:X,ctx:G}){let Y=Ff0(Z);if(!Y)return $;let Q=await SS8(Y,{orgId:X,ctx:G}),J=Q.selectedTools?[...Q.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:Q.instructions},connections:$.connections.map((W)=>({...W,selected_tools:J}))}}async function Y80($,Z){if(!("checklist"in $))return[];return Promise.all($.checklist.map(async(X)=>({label:X.label,activeForm:X.activeForm,action:X.action,completed:await X.isCompleted(Z),alwaysSuggest:X.alwaysSuggest})))}async function Zh1($,Z,X){let G={self:x4.SELF($),registry:x4.REGISTRY($),"community-registry":x4.COMMUNITY_REGISTRY($)};await Promise.all(jD.map(async(Y)=>{let Q=Y.getId($),J=await X.findById(Q,$),K=(Y.selectedConnections??["self"]).map((N)=>G[N]);if(J){await X.update(Q,Z,{metadata:{...J.metadata??{},instructions:Y.instructions},connections:K.map((N)=>{let H=J.connections.find((F)=>F.connection_id===N);return{connection_id:N,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:H?.selected_resources??null,selected_prompts:H?.selected_prompts??null}})});return}await X.create($,Z,{title:Y.title,description:Y.description,icon:Y.icon,status:"active",pinned:!1,metadata:{instructions:Y.instructions},connections:K.map((N)=>({connection_id:N,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:null,selected_prompts:Y.selectedPrompts?[...Y.selectedPrompts]:null}))},{id:Q})}))}var jD;var Fb=B(()=>{O8();yg1();hg1();cg1();ng1();tg1();rg1();sg1();$h1();jD=[ig1,xg1,ug1,pg1,gg1,og1,ag1,eg1]});import{DBOS as Q80}from"@dbos-inc/dbos-sdk";async function VS8($){let Z=c8(),X=new Hb(Z.db);await Zh1($.orgId,$.createdBy,X)}async function CS8($){let Z=c8(),X=new Hb(Z.db);for(let G of jD){let Y=G.getId($.orgId),Q=await X.findById(Y,$.orgId);if(!Q)continue;let J=G.selectedPrompts?[...G.selectedPrompts]:null;if(Q.connections.every((K)=>{let N=K.selected_prompts;if(J===null)return N===null;if(N===null)return!1;if(N.length!==J.length)return!1;return N.every((H,F)=>H===J[F])}))continue;await X.update(Y,$.createdBy,{connections:Q.connections.map((K)=>({connection_id:K.connection_id,selected_tools:K.selected_tools,selected_resources:K.selected_resources,selected_prompts:J}))})}}async function _S8($){await Q80.runStep(()=>VS8($),{name:"installStudioPack"}),await Q80.runStep(()=>CS8($),{name:"backfillSelectedPrompts"})}async function Uf0($){await Q80.startWorkflow(vS8,{workflowID:`install-studio-pack:${bS8}:${$.orgId}`})($)}async function Xh1(){let Z=await c8().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),X=new Map;for(let G of Z)if(!X.has(G.organizationId))X.set(G.organizationId,G.userId);await Promise.all(Array.from(X).map(async([G,Y])=>{try{await Uf0({orgId:G,createdBy:Y})}catch(Q){console.error("[studio-pack-backfill] enqueue failed",{orgId:G},Q)}}))}var vS8,bS8="v5";var J80=B(()=>{YQ();Hf0();Fb();vS8=Q80.registerWorkflow(_S8,{name:"installStudioPackWorkflow"})});import{jwtVerify as fS8,SignJWT as Gh1}from"jose";import{randomBytes as xS8}from"crypto";function Yh1(){if(Bl)return Bl;let $=d0(),Z=$.studioJwtSecret??$.betterAuthSecret;if(Z)Bl=new TextEncoder().encode(Z);else console.warn("STUDIO_JWT_SECRET not set - generating random secret (not persistent)"),Bl=new Uint8Array(xS8(32));return Bl}async function Qh1($,Z="5m"){let X=Yh1();return await new Gh1($).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Z).sign(X)}async function wf0($){try{let Z=Yh1(),{payload:X}=await fS8($,Z);return X}catch{return}}async function NW($,Z,X=3600){let G=d0(),Y=G.studioJwtSecret??G.betterAuthSecret;if(!Y)throw Error("A deterministic JWT secret is required to mint gateway JWTs \u2014 set STUDIO_JWT_SECRET or BETTER_AUTH_SECRET");let Q=new TextEncoder().encode(Y);return await new Gh1({iss:"mesh",sub:$,...Z&&{email:Z}}).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Math.floor(Date.now()/1000)+X).sign(Q)}var Bl=null;var HU=B(()=>{V$()});class Dl{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new Dl,Z=new Dl;return $._otherTransport=Z,Z._otherTransport=$,[$,Z]}async start(){while(this._messageQueue.length>0){let $=this._messageQueue.shift();this.onmessage?.($.message,$.extra)}}async close(){let $=this._otherTransport;this._otherTransport=void 0,await $?.close(),this.onclose?.()}async send($,Z){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage($,{authInfo:Z?.authInfo});else this._otherTransport._messageQueue.push({message:$,extra:{authInfo:Z?.authInfo}})}}import{z as o8}from"zod";var W80,Jh1,Wh1,Kh1,Nh1,Hh1,Fh1,Uh1,wh1,Oh1;var Ub=B(()=>{W80=o8.record(o8.string(),o8.array(o8.string())),Jh1=o8.object({id:o8.string().describe("Unique identifier for the API key"),name:o8.string().describe("Human-readable name for the API key"),userId:o8.string().describe("ID of the user who owns this API key"),permissions:W80.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:o8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:o8.string().datetime().describe("When the API key was created (ISO 8601)")}),Wh1=o8.object({name:o8.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:W80.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:o8.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:o8.record(o8.string(),o8.unknown()).optional().describe("Additional metadata to store with the API key")}),Kh1=o8.object({id:o8.string().describe("Unique identifier for the API key"),name:o8.string().describe("Human-readable name for the API key"),key:o8.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:W80.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:o8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:o8.string().datetime().describe("When the API key was created (ISO 8601)")}),Nh1=o8.object({}),Hh1=o8.object({items:o8.array(Jh1).describe("List of API keys (without key values)")}),Fh1=o8.object({keyId:o8.string().describe("ID of the API key to update"),name:o8.string().min(1).max(64).optional().describe("New name for the API key"),permissions:W80.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:o8.record(o8.string(),o8.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),Uh1=o8.object({item:Jh1.describe("The updated API key (without key value)")}),wh1=o8.object({keyId:o8.string().describe("ID of the API key to delete")}),Oh1=o8.object({success:o8.boolean().describe("Whether the deletion was successful"),keyId:o8.string().describe("ID of the deleted API key")})});var Of0;var Bh1=B(()=>{D6();b0();Ub();Of0=d({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Wh1,outputSchema:Kh1,handler:async($,Z)=>{G0(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.create({name:$.name,permissions:$.permissions,expiresIn:$.expiresIn,metadata:{...$.metadata,organization:Z.organization}}),G=X.expiresAt?X.expiresAt instanceof Date?X.expiresAt.toISOString():X.expiresAt:null,Y=X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,Q=N1(Z);if(Q)x1.capture({distinctId:Q,event:"api_key_created",...Z.organization?.id?{groups:{organization:Z.organization.id}}:{},properties:{key_id:X.id,key_name:X.name??$.name,organization_id:Z.organization?.id,has_expiry:!!G}});return{id:X.id,name:X.name??$.name,key:X.key,permissions:X.permissions??{},expiresAt:G,createdAt:Y}}})});var Bf0;var Dh1=B(()=>{D6();b0();Ub();Bf0=d({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:wh1,outputSchema:Oh1,handler:async($,Z)=>{G0(Z),await Z.access.check();let X=N1(Z);if(!X)throw Error("User ID required to delete API key");let Y=(await Z.boundAuth.apiKey.list())?.find((K)=>K.id===$.keyId);if(!Y)throw Error("API key not found");let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),W)x1.capture({distinctId:X,event:"api_key_deleted",groups:{organization:W},properties:{key_id:$.keyId,organization_id:W}});return{success:!0,keyId:$.keyId}}})});var Df0;var Lh1=B(()=>{b0();Ub();Df0=d({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Nh1,outputSchema:Hh1,handler:async($,Z)=>{G0(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.list(),G=Z.organization?.id;return{items:(X??[]).filter((Q)=>{return Q.metadata?.organization?.id===G}).map((Q)=>({id:Q.id,name:Q.name??"Unnamed Key",userId:Q.userId,permissions:Q.permissions??{},expiresAt:Q.expiresAt?Q.expiresAt instanceof Date?Q.expiresAt.toISOString():Q.expiresAt:null,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}}})});var Lf0;var Eh1=B(()=>{b0();Ub();Lf0=d({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Fh1,outputSchema:Uh1,handler:async($,Z)=>{if(G0(Z),await Z.access.check(),!N1(Z))throw Error("User ID required to update API key");let Y=(await Z.boundAuth.apiKey.list())?.find((N)=>N.id===$.keyId);if(!Y)throw Error(`API key not found: ${$.keyId}`);let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot update API key from another organization");let K=await Z.boundAuth.apiKey.update({keyId:$.keyId,name:$.name,permissions:$.permissions,metadata:{...$.metadata,organization:Z.organization}});if(!K)throw Error(`Failed to update API key: ${$.keyId}`);return{item:{id:K.id,name:K.name??$.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var zh1=B(()=>{Bh1();Dh1();Lh1();Eh1();Ub()});function FU($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let X=gS8.test(Z),G=hS8.test(Z),Y=uS8.test(Z);if(X&&!G&&!Y)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let Q=G?Z:`https://${Z}`,J;try{J=new URL(Q)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(J.protocol!=="http:"&&J.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let W=J.hostname.split(".");if(W.length<2||W.some((K)=>!K||!cS8.test(K)))return{ok:!1,error:"Enter a valid website URL."};return J.protocol="https:",{ok:!0,value:J.origin}}var gS8,hS8,uS8,cS8;var Ll=B(()=>{gS8=/^[a-zA-Z][a-zA-Z\d+.-]*:/,hS8=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,uS8=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,cS8=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as AX}from"zod";function HW($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??d0()).reportsInternalApiUrl??lS8).replace(/\/+$/,"")}function Ph1($={}){return`${HW($)}/api/v2/mcp`}function PD($){let Z=$.apiKey??($.settings??d0()).reportsInternalApiKey;if(!Z)throw Error("REPORTS_INTERNAL_API_KEY (or the legacy COMMERCE_DISCOVERY_INTERNAL_API_KEY) is required to set up reports.");return Z}function K80($){return new URL($).hostname}function mS8($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function iS8($,Z={}){switch($){case"ownership_unverified":{let X=Z.email?`O e-mail ${Z.email}`:"Este e-mail",G=Z.domain?` ${Z.domain}`:" este site";return`${X} n\xE3o tem permiss\xE3o para reivindicar${G}. Use um e-mail do dom\xEDnio do site ou pe\xE7a ao suporte para autorizar seu dom\xEDnio.`}case"already_claimed_by_other_org":return"Este site j\xE1 pertence a outra organiza\xE7\xE3o. Fale com o suporte para transferir o acesso.";case"unknown":return"N\xE3o foi poss\xEDvel configurar o Commerce Discovery. Tente novamente ou fale com o suporte.";default:return $}}async function nS8($){let Z=await $.text().catch(()=>"");if(!Z)return"unknown";try{let X=JSON.parse(Z);return mS8(X.error)?X.error:"unknown"}catch{return"unknown"}}async function Ef0($){let Z=`Commerce Discovery auth failed with status ${$.status}.`,X=await $.text().catch(()=>"");if(!X)return Z;try{let G=JSON.parse(X),Y=typeof G.error==="string"?G.error:typeof G.message==="string"?G.message:null;return Y?`Commerce Discovery auth failed: ${Y}.`:Z}catch{return Z}}async function Th1($,Z={}){let X=HW(Z),G=PD(Z),Y=Z.fetchImpl??fetch,Q=K80($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(Q)}/upgrade`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${G}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.orgName?{name:$.orgName}:{},...$.email?{email:$.email}:{},...$.reportUrl?{report_url:$.reportUrl}:{}})});if(!W.ok){let N=await nS8(W);throw new Ah1(N,{email:$.email,domain:Q})}let K=dS8.safeParse(await W.json());if(!K.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:K.data.token}}async function Rh1($,Z={}){let X=HW(Z),G=PD(Z),Y=Z.fetchImpl??fetch,Q=K80($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(Q)}/bindings`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${G}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,provider:$.provider,resource_id:$.resourceId})});if(W.status===409)return{ok:!1,reason:"resource_already_bound",detail:"Este recurso j\xE1 est\xE1 vinculado a outra loja. Se ele \xE9 seu, fale com o suporte para revis\xE3o manual."};if(W.status===422){let N=jh1.safeParse(await W.json());return{ok:!1,reason:N.success?N.data.reason??"verification_failed":"verification_failed",detail:(N.success?N.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!W.ok)throw Error(await Ef0(W));let K=jh1.safeParse(await W.json());if(!K.success||!K.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:K.data.binding.resource_id,evidence:K.data.binding.evidence}}async function Ih1($,Z={}){let X=HW(Z),G=PD(Z),Y=Z.fetchImpl??fetch,Q=K80($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(Q)}/run`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${G}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.githubRepo?{github_repo:$.githubRepo}:{}})});if(W.status===409)return{triggered:!1,reason:"not_upgraded"};if(!W.ok)throw Error(await Ef0(W));return{triggered:!0}}async function qh1($,Z={}){let X=HW(Z),G=PD(Z),Y=Z.fetchImpl??fetch,Q=K80($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(Q)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,W=await Y(J,{method:"GET",headers:{Authorization:`Bearer ${G}`}});if(W.status===404||W.status===409)return{};if(!W.ok)throw Error(await Ef0(W));let K=pS8.safeParse(await W.json());return K.success?K.data.providers:{}}var lS8,dS8,jh1,Ah1,pS8;var AD=B(()=>{O8();V$();lS8=new URL(n21).origin,dS8=AX.object({token:AX.string().min(1)}),jh1=AX.object({binding:AX.object({resource_id:AX.string(),evidence:AX.string()}).optional(),reason:AX.string().optional(),detail:AX.string().optional()});Ah1=class Ah1 extends Error{code;constructor($,Z={}){super(iS8($,Z));this.name="CommerceDiscoveryClaimError",this.code=$}};pS8=AX.object({providers:AX.record(AX.string(),AX.object({connected:AX.boolean(),via:AX.enum(["oauth","sa"]).nullable(),resource:AX.string().nullable()}))})});import{z as KY}from"zod";var tS8,oS8,zf0;var Mh1=B(()=>{Ll();b0();AD();tS8=KY.object({siteUrl:KY.string().min(1).describe("Website URL of the store being bound."),provider:KY.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:KY.string().min(1).describe("The resource id the client typed: GA4 numeric property id, or GSC site (sc-domain:example.com or https://example.com/).")}),oS8=KY.discriminatedUnion("ok",[KY.object({ok:KY.literal(!0),resourceId:KY.string(),evidence:KY.string()}),KY.object({ok:KY.literal(!1),reason:KY.string(),detail:KY.string()})]),zf0=d({name:"COMMERCE_DISCOVERY_BIND",description:"Bind a GA4 property or GSC site to the org's store via the shared service account (consent-free lane). The client grants deco-reader@\u2026 access to the resource and provides its id; Commerce Discovery verifies the resource belongs to this domain before persisting. Returns ok:false with an actionable pt-BR detail when verification fails or the resource is already bound elsewhere.",annotations:{title:"Bind Commerce Discovery Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:tS8,outputSchema:oS8,handler:async($,Z)=>{G0(Z);let X=s(Z);await Z.access.check();let G=FU($.siteUrl);if(!G.ok)throw Error(G.error);return Rh1({siteUrl:G.value,orgId:X.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as kN}from"zod";var rS8,aS8,jf0;var kh1=B(()=>{Ll();b0();AD();rS8=kN.object({siteUrl:kN.string().min(1).describe("Website URL of the store to inspect.")}),aS8=kN.object({providers:kN.record(kN.string(),kN.object({connected:kN.boolean(),via:kN.enum(["oauth","sa"]).nullable(),resource:kN.string().nullable()}))}),jf0=d({name:"COMMERCE_DISCOVERY_CONNECTION_STATUS",description:"Read per-provider connection status (ga4/gsc/vtex) for the org's store \u2014 { connected, via: oauth|sa, resource }. The single source of truth for whether a data source is connected, unifying the OAuth (Studio vault) and shared-SA binding lanes. Read-only.",annotations:{title:"Commerce Discovery Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:rS8,outputSchema:aS8,handler:async($,Z)=>{G0(Z);let X=s(Z);await Z.access.check();let G=FU($.siteUrl);if(!G.ok)throw Error(G.error);return{providers:await qh1({siteUrl:G.value,orgId:X.id})}}})});import{z as El}from"zod";var sS8,eS8,Pf0;var Sh1=B(()=>{O8();Ll();b0();AD();sS8=El.object({siteUrl:El.string().min(1).describe("Website URL to run the diagnostic for.")}),eS8=El.object({triggered:El.boolean(),reason:El.string().optional()}),Pf0=d({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:sS8,outputSchema:eS8,handler:async($,Z)=>{G0(Z);let X=s(Z);await Z.access.check();let G=FU($.siteUrl);if(!G.ok)throw Error(G.error);let Y=x4.COMMERCE_DISCOVERY(X.id),J=(await Z.storage.connections.findById(Y,X.id))?.configuration_state,W=J&&typeof J==="object"&&typeof J.github_repo==="string"&&J.github_repo.length>0?J.github_repo:void 0;return Ih1({siteUrl:G.value,orgId:X.id,githubRepo:W})}})});var UU=B(()=>{S00()});import{z as FW}from"zod";async function GV8($,Z,X,G){let Y=await $.storage.connections.findById(Z,X);if(Y)return Y;throw G}async function YV8($,Z,X,G){let Y=await $.storage.virtualMcps.findById(Z,X);if(Y)return Y;throw G}var Af0,$V8=3600000,ZV8,XV8,Tf0;var Vh1=B(()=>{O8();Ll();b0();ZW();UU();AD();Af0=V00,ZV8=FW.object({siteUrl:FW.string().min(1).describe("Website URL to configure.")}),XV8=FW.object({connection:P7,virtualMcp:A7,reportApp:FW.object({connectionId:FW.string(),virtualMcpId:FW.string(),toolName:FW.literal(Af0)}),created:FW.object({connection:FW.boolean(),virtualMcp:FW.boolean()})});Tf0=d({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZV8,outputSchema:XV8,handler:async($,Z)=>{G0(Z);let X=s(Z);await Z.access.check("COLLECTION_CONNECTIONS_CREATE");let G=N1(Z);if(!G)throw Error("User ID required to set up Commerce Discovery");let Y=FU($.siteUrl);if(!Y.ok)throw Error(Y.error);let Q=x4.COMMERCE_DISCOVERY(X.id),J=_00(X.id),W=new URLSearchParams({virtualmcpid:J,main:`app:${Q}:${Af0}`}),K={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}/${encodeURIComponent(X.slug??X.id)}/${crypto.randomUUID()}?${W.toString()}`},N=await Z.storage.connections.findById(Q,X.id),H={connection:!1,virtualMcp:!1},F=await Th1({siteUrl:Y.value,orgId:X.id,orgName:X.name,...K}),U=Ph1();if(N)console.log("[commerce-discovery] syncing connection to claimed site",{orgId:X.id,siteUrl:Y.value,connectionId:Q}),N=await Z.storage.connections.update(N.id,{connection_url:U,connection_token:F.authorizationToken,metadata:{...N.metadata??{},siteUrl:Y.value}});else{console.log("[commerce-discovery] creating connection",{orgId:X.id,siteUrl:Y.value,connectionId:Q});try{let L=Qq1(X.id,F.authorizationToken,U);N=await Z.storage.connections.create({...L,metadata:{...L.metadata??{},siteUrl:Y.value},organization_id:X.id,created_by:G}),H.connection=!0}catch(L){N=await GV8(Z,Q,X.id,L)}}let w=await Z.storage.virtualMcps.findById(J,X.id);if(!w){console.log("[commerce-discovery] creating virtual MCP",{orgId:X.id,siteUrl:Y.value,connectionId:N.id,virtualMcpId:J});try{w=await Z.storage.virtualMcps.create(X.id,G,Jq1(X.id,N.id),{id:J}),H.virtualMcp=!0}catch(L){w=await YV8(Z,J,X.id,L)}}if(!w.pinned)w=await Z.storage.virtualMcps.update(w.id,G,{pinned:!0});let O=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",X.id).executeTakeFirst();if((O?Date.now()-new Date(O.createdAt).getTime():Number.POSITIVE_INFINITY)<$V8){let E=(await Z.storage.organizationSettings.get(X.id))?.flags,z={};if(E?.reports_only==null){if(z.reports_only=!0,E?.qa_agent_enabled==null)z.qa_agent_enabled=!0;if(E?.code_reviewer_enabled==null)z.code_reviewer_enabled=!0}if(Object.keys(z).length>0)await Z.storage.organizationSettings.upsert(X.id,{flags:z})}return{connection:N,virtualMcp:w,reportApp:{connectionId:N.id,virtualMcpId:w.id,toolName:Af0},created:H}}})});var Ch1=B(()=>{Mh1();kh1();Sh1();Vh1()});var Rf0=_((_h1)=>{Object.defineProperty(_h1,"__esModule",{value:!0});_h1.kvPrefix=_h1.KvWatchInclude=void 0;_h1.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};_h1.kvPrefix="KV_"});var mh1=_((lh1)=>{Object.defineProperty(lh1,"__esModule",{value:!0});lh1.KvStatusImpl=lh1.Bucket=lh1.Kvm=lh1.kvOperationHdr=void 0;lh1.Base64KeyCodec=WV8;lh1.NoopKvCodecs=If0;lh1.defaultBucketOpts=fh1;lh1.validateKey=xh1;lh1.validateSearchKey=yh1;lh1.hasWildcards=gh1;lh1.validateBucket=N80;var T5=pG(),l6=jr(),A5=Rf0();function WV8(){let $=(Z,X)=>{let G=[];for(let Y of Z.split("."))switch(Y){case">":case"*":G.push(Y);break;default:G.push(X(Y));break}return G.join(".")};return{encode(Z){return $(Z,btoa)},decode(Z){return $(Z,atob)}}}function If0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function fh1(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:If0(),storage:l6.StorageType.File}}lh1.kvOperationHdr="KV-Operation";var bh1="$KV",KV8=/^[-/=.\w]+$/,NV8=/^[-/=.>*\w]+$/,HV8=/^[-\w]+$/;function xh1($){if($.startsWith(".")||$.endsWith(".")||!KV8.test($))throw Error(`invalid key: ${$}`)}function yh1($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!NV8.test($))throw Error(`invalid key: ${$}`)}function gh1($){if($.startsWith(".")||$.endsWith("."))throw Error(`invalid key: ${$}`);let Z=$.split("."),X=!1;for(let G=0;G<Z.length;G++)switch(Z[G]){case"*":X=!0;break;case">":if(G!==Z.length-1)throw Error(`invalid key: ${$}`);X=!0;break;default:}return X}function N80($){if(!HV8.test($))throw Error(`invalid bucket name: ${$}`)}class hh1{js;constructor($){this.js=(0,l6.toJetStreamClient)($)}create($,Z={}){return this.#$($,Z)}open($,Z={}){return Z.bindOnly=!0,this.#$($,Z)}#$($,Z={}){let{ok:X,min:G}=this.js.nc.features.get(T5.Feature.JS_KV);if(!X)return Promise.reject(Error(`kv is only supported on servers ${G} or better`));if(Z.bindOnly)return wb.bind(this.js,$,Z);return wb.create(this.js,$,Z)}list(){let $=(X)=>{let Y=X.streams.filter((J)=>{return J.config.name.startsWith(A5.kvPrefix)});Y.forEach((J)=>{J.config.sealed=J.config.sealed||!1,J.config.deny_delete=J.config.deny_delete||!1,J.config.deny_purge=J.config.deny_purge||!1,J.config.allow_rollup_hdrs=J.config.allow_rollup_hdrs||!1});let Q="";if(Y.length)Q=this.js.nc.info?.cluster??"";return Y.map((J)=>{return new H80(J,Q)})},Z=`${this.js.prefix}.STREAM.LIST`;return new l6.ListerImpl(Z,$,this.js)}}lh1.Kvm=hh1;class wb{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,X){N80($),this.js=Z,this.jsm=X,this.bucket=$,this.prefix=bh1,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,X={}){N80(Z);let G=await $.jetstreamManager(),Y=new wb(Z,$,G);return await Y.init(X),Y}static async bind($,Z,X={}){let G=$.getOptions()?.checkAPI||X.bindOnly===!1,Y=await $.jetstreamManager(G),Q={config:{allow_direct:X.allow_direct}};N80(Z);let J=new wb(Z,$,Y);return Q.config.name=X.streamName??J.bucketName(),Object.assign(J,Q),J.stream=Q.config.name,J.codec=X.codec||If0(),J.direct=Q.config.allow_direct??!1,J.initializePrefixes(Q),J}async init($={}){let Z=Object.assign(fh1(),$);this.codec=Z.codec;let X={};if(this.stream=X.name=$.streamName??this.bucketName(),X.retention=l6.RetentionPolicy.Limits,X.max_msgs_per_subject=Z.history,Z.max_bytes)X.max_bytes=Z.max_bytes;if(X.max_msg_size=Z.maxValueSize,X.storage=Z.storage,$.placement)X.placement=$.placement;if($.republish)X.republish=$.republish;if($.description)X.description=$.description;if($.markerTTL)X.allow_msg_ttl=!0,X.subject_delete_marker_ttl=(0,T5.nanos)(Z.markerTTL);if($.mirror){let N=Object.assign({},$.mirror);if(!N.name.startsWith(A5.kvPrefix))N.name=`${A5.kvPrefix}${N.name}`;X.mirror=N,X.mirror_direct=!0}else if($.sources){let N=$.sources.map((H)=>{let F=Object.assign({},H),U=F.name.startsWith(A5.kvPrefix)?F.name.substring(A5.kvPrefix.length):F.name;if(!F.name.startsWith(A5.kvPrefix))F.name=`${A5.kvPrefix}${F.name}`;if(!H.external&&U!==this.bucket)F.subject_transforms=[{src:`$KV.${U}.>`,dest:`$KV.${this.bucket}.>`}];return F});X.sources=N,X.subjects=[this.subjectForBucket()]}else X.subjects=[this.subjectForBucket()];if($.metadata)X.metadata=$.metadata;if(typeof $.compression==="boolean")X.compression=$.compression?l6.StoreCompression.S2:l6.StoreCompression.None;let G=this.js.nc,Y=G.getServerVersion(),Q=Y?(0,T5.compare)(Y,(0,T5.parseSemVer)("2.7.2"))>=0:!1;X.discard=Q?l6.DiscardPolicy.New:l6.DiscardPolicy.Old;let{ok:J,min:W}=G.features.get(T5.Feature.JS_ALLOW_DIRECT);if(!J&&$.allow_direct===!0){let N=Y?`${Y.major}.${Y.minor}.${Y.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${N} - requires ${W}`))}if($.allow_direct=typeof $.allow_direct==="boolean"?$.allow_direct:J,X.allow_direct=$.allow_direct,this.direct=X.allow_direct,X.num_replicas=Z.replicas,Z.ttl)X.max_age=(0,T5.nanos)(Z.ttl);X.allow_rollup_hdrs=!0;let K;try{if(K=await this.jsm.streams.info(X.name),!K.config.allow_direct&&this.direct===!0)this.direct=!1}catch(N){if(N.message==="stream not found")K=await this.jsm.streams.add(X);else throw N}this.initializePrefixes(K)}initializePrefixes($){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:Z}=$.config;if(Z){let X=Z.name;if(X.startsWith(A5.kvPrefix))X=X.substring(A5.kvPrefix.length);if(Z.external&&Z.external.api!==""){let G=Z.name.substring(A5.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${G}`,this.editPrefix=`${Z.external.api}.$KV.${X}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${A5.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey($,Z=!1){let X=[];if(Z){if(this.useJsPrefix)X.push(this.js.apiPrefix);if(this.editPrefix!=="")X.push(this.editPrefix);else X.push(this.prefix)}else if(this.prefix)X.push(this.prefix);return X.push($),X.join(".")}fullKeyName($){if(this.prefix!=="")return`${this.prefix}.${$}`;return`${bh1}.${this.bucket}.${$}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.encode(X));break}return Z.join(".")}decodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.decode(X));break}return Z.join(".")}validateKey=xh1;validateSearchKey=yh1;hasWildcards=gh1;close(){return Promise.resolve()}dataLen($,Z){let X=Z?Z.get(l6.JsHeaders.MessageSizeHdr)||"":"";if(X!=="")return parseInt(X,10);return $.length}smToEntry($){return new uh1(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new ch1(this.bucket,this.prefixLen,$,Z,this.codec)}async create($,Z,X){let G;try{let Q={previousSeq:0},J=await this._put($,Z,Q,X);return Promise.resolve(J)}catch(Q){if(G=Q,Q instanceof l6.JetStreamApiError){let J=Q;if(J.code!==l6.JetStreamApiCodes.StreamWrongLastSequence&&J.code!==l6.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(Q)}}let Y=0;try{let Q=await this.get($);if(Q?.operation==="DEL"||Q?.operation==="PURGE")return Y=Q!==null?Q.revision:0,this._put($,Z,{previousSeq:Y},X);else return Promise.reject(G)}catch(Q){return Promise.reject(Q)}}update($,Z,X,G){if(X<=0)throw Error("version must be greater than 0");return this.put($,Z,{previousSeq:X,timeout:G})}async _put($,Z,X={},G){let Y=this.encodeKey($);this.validateKey(Y),Z=this.codec.value.encode(Z);let Q={timeout:X?.timeout};if(X.previousSeq!==void 0){let J=(0,T5.headers)();Q.headers=J,J.set(l6.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`)}if(G)(Q.headers||(0,T5.headers)()).set(l6.PubHeaders.MessageTTL,G);try{return(await this.js.publish(this.subjectForKey(Y,!0),Z,Q)).seq}catch(J){return Promise.reject(J)}}put($,Z,X={}){return this._put($,Z,X)}async get($,Z){let X=this.encodeKey($);this.validateKey(X);let G={last_by_subj:this.subjectForKey(X)};if(Z&&Z.revision>0)G={seq:Z.revision};let Y=null;try{if(this.direct)Y=await this.jsm.direct.getMessage(this.bucketName(),G);else Y=await this.jsm.streams.getMessage(this.bucketName(),G);if(Y===null)return null;let Q=this.smToEntry(Y);if(Q.rawKey!==X)return null;return Q}catch(Q){throw Q}}purge($,Z){return this._deleteOrPurge($,"PURGE",Z)}delete($,Z){return this._deleteOrPurge($,"DEL",Z)}async purgeDeletes($=1800000){let Z=[],X=await this.history({key:">"});await(async()=>{for await(let J of X)if(J.operation==="DEL"||J.operation==="PURGE")Z.push(J)})().then(),X.stop();let G=Date.now()-$,Y=Z.map((J)=>{let W=this.subjectForKey(J.key);if(J.created.getTime()>=G)return this.jsm.streams.purge(this.stream,{filter:W,keep:1});else return this.jsm.streams.purge(this.stream,{filter:W,keep:0})}),Q=await Promise.all(Y);return Q.unshift({success:!0,purged:0}),Q.reduce((J,W)=>{return J.purged+=W.purged,J})}async _deleteOrPurge($,Z,X){if(!this.hasWildcards($))return this._doDeleteOrPurge($,Z,X);let G=await this.keys($),Y=[];for await(let Q of G)if(Y.push(this._doDeleteOrPurge(Q,Z)),Y.length===100)await Promise.all(Y),Y.length=0;if(Y.length>0)await Promise.all(Y)}async _doDeleteOrPurge($,Z,X){let G=this.encodeKey($);this.validateKey(G);let Y=(0,T5.headers)();if(Y.set(lh1.kvOperationHdr,Z),Z==="PURGE"){let Q=X;if(Y.set(l6.JsHeaders.RollupHdr,l6.JsHeaders.RollupValueSubject),typeof Q?.ttl==="string"&&Q.ttl!=="")Y.set(l6.PubHeaders.MessageTTL,`${Q.ttl}`)}if(X?.previousSeq)Y.set(l6.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`);await this.js.publish(this.subjectForKey(G,!0),T5.Empty,{headers:Y})}_buildCC($,Z,X={}){let Y=(!Array.isArray($)?[$]:$).map((W)=>{let K=this.encodeKey(W);return this.validateSearchKey(W),this.fullKeyName(K)}),Q=l6.DeliverPolicy.LastPerSubject;if(Z===A5.KvWatchInclude.AllHistory)Q=l6.DeliverPolicy.All;if(Z===A5.KvWatchInclude.UpdatesOnly)Q=l6.DeliverPolicy.New;let J=void 0;if(Y.length===1)J=Y[0],Y=void 0;return Object.assign({deliver_policy:Q,ack_policy:l6.AckPolicy.None,filter_subjects:Y,filter_subject:J,flow_control:!0,idle_heartbeat:(0,T5.nanos)(5000)},X)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",X={};X.headers_only=$.headers_only||!1;let G=new T5.QueuedIteratorImpl,Y=()=>{G.stop()},Q=this._buildCC(Z,A5.KvWatchInclude.AllHistory,X),J=await this.js.consumers.getPushConsumer(this.stream,Q);if(G._data=J,(await J.info(!0)).num_pending===0)return G.push(Y),G;let K=await J.consume({callback:(N)=>{let H=this.jmToWatchEntry(N,!1);if(G.push(H),G.received++,N.info.pending===0)G.push(Y)}});return K.closed().then(()=>{G.push(Y)}),(async()=>{for await(let N of K.status())switch(N.type){case"heartbeat":G.push(()=>{G.stop()});break}})().then(),G.iterClosed.then(()=>{K.stop()}),G}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(T5.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",X=new T5.QueuedIteratorImpl,G={};G.headers_only=$.headers_only||!1;let Y=A5.KvWatchInclude.LastValue;if($.include===A5.KvWatchInclude.AllHistory)Y=A5.KvWatchInclude.AllHistory;else if($.include===A5.KvWatchInclude.UpdatesOnly)Y=A5.KvWatchInclude.UpdatesOnly;let Q=$.ignoreDeletes===!0,J=this._buildCC(Z,Y,G);if(J.name=`KV_WATCHER_${T5.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)J.deliver_policy=l6.DeliverPolicy.StartSequence,J.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,J),N=(await W.info(!0)).num_pending,H=Y===A5.KvWatchInclude.UpdatesOnly||N===0;X._data=W;let F=0,U=await W.consume({callback:(w)=>{if(!H)F++,H=F>=N;let O=this.jmToWatchEntry(w,H);if(Q&&O.operation==="DEL")return;X.push(O),X.received++}});return X.iterClosed.then(()=>{U.stop()}),U.closed().then(()=>{X.push(()=>{X.stop()})}),X}async keys($=">"){let Z=new T5.QueuedIteratorImpl,X=this._buildCC($,A5.KvWatchInclude.LastValue,{headers_only:!0}),G=await this.js.consumers.getPushConsumer(this.stream,X);if((await G.info()).num_pending===0)return Z.stop(),Z;Z._data=G;let Q=await G.consume({callback:(J)=>{let W=J.headers?.get(lh1.kvOperationHdr);if(W!=="DEL"&&W!=="PURGE"){let K=this.decodeKey(J.subject.substring(this.prefixLen));Z.push(K)}if(J.info.pending===0)Q.stop()}});return(async()=>{for await(let J of Q.status())switch(J.type){case"heartbeat":Z.push(()=>{Z.stop()});break}})().then(),Q.closed().then(()=>{Z.push(()=>{Z.stop()})}),Z.iterClosed.then(()=>{Q.stop()}),Z}purgeBucket($){return this.jsm.streams.purge(this.bucketName(),$)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let Z=this.js.nc.info?.cluster??"",X=this.bucketName(),G=await this.jsm.streams.info(X);return new H80(G,Z)}}lh1.Bucket=wb;class H80{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(A5.kvPrefix)?this.si.config.name.substring(A5.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,T5.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,T5.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==l6.StoreCompression.None;return!1}}lh1.KvStatusImpl=H80;class uh1{bucket;sm;prefixLen;codec;constructor($,Z,X,G){this.bucket=$,this.prefixLen=Z,this.sm=X,this.codec=G}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(lh1.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(l6.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(T5.TD.decode(this.value),$)}string(){return T5.TD.decode(this.value)}}class ch1{bucket;sm;prefixLen;update;codec;constructor($,Z,X,G,Y){this.bucket=$,this.prefixLen=Z,this.sm=X,this.update=G,this.codec=Y}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,T5.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(lh1.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(l6.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(T5.TD.decode(this.value),$)}string(){return T5.TD.decode(this.value)}}});var qf0=_((vJ)=>{Object.defineProperty(vJ,"__esModule",{value:!0});vJ.validateKey=vJ.validateBucket=vJ.NoopKvCodecs=vJ.Kvm=vJ.defaultBucketOpts=vJ.Bucket=vJ.Base64KeyCodec=vJ.KvWatchInclude=vJ.kvPrefix=void 0;var ih1=Rf0();Object.defineProperty(vJ,"kvPrefix",{enumerable:!0,get:function(){return ih1.kvPrefix}});Object.defineProperty(vJ,"KvWatchInclude",{enumerable:!0,get:function(){return ih1.KvWatchInclude}});var TD=mh1();Object.defineProperty(vJ,"Base64KeyCodec",{enumerable:!0,get:function(){return TD.Base64KeyCodec}});Object.defineProperty(vJ,"Bucket",{enumerable:!0,get:function(){return TD.Bucket}});Object.defineProperty(vJ,"defaultBucketOpts",{enumerable:!0,get:function(){return TD.defaultBucketOpts}});Object.defineProperty(vJ,"Kvm",{enumerable:!0,get:function(){return TD.Kvm}});Object.defineProperty(vJ,"NoopKvCodecs",{enumerable:!0,get:function(){return TD.NoopKvCodecs}});Object.defineProperty(vJ,"validateBucket",{enumerable:!0,get:function(){return TD.validateBucket}});Object.defineProperty(vJ,"validateKey",{enumerable:!0,get:function(){return TD.validateKey}})});var Mf0=_((wU)=>{Object.defineProperty(wU,"__esModule",{value:!0});wU.NoopKvCodecs=wU.Kvm=wU.defaultBucketOpts=wU.Bucket=wU.Base64KeyCodec=wU.KvWatchInclude=void 0;var PV8=qf0();Object.defineProperty(wU,"KvWatchInclude",{enumerable:!0,get:function(){return PV8.KvWatchInclude}});var jl=qf0();Object.defineProperty(wU,"Base64KeyCodec",{enumerable:!0,get:function(){return jl.Base64KeyCodec}});Object.defineProperty(wU,"Bucket",{enumerable:!0,get:function(){return jl.Bucket}});Object.defineProperty(wU,"defaultBucketOpts",{enumerable:!0,get:function(){return jl.defaultBucketOpts}});Object.defineProperty(wU,"Kvm",{enumerable:!0,get:function(){return jl.Kvm}});Object.defineProperty(wU,"NoopKvCodecs",{enumerable:!0,get:function(){return jl.NoopKvCodecs}})});function F80(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(X)=>$.encode(JSON.stringify(X)),decode:(X)=>JSON.parse(Z.decode(X))}}class Sf0{options;kv=null;codec=F80();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new ph1.Kvm($).create(TV8,{storage:nh1.StorageType.Memory})}async get($,Z){if(!this.kv)return null;try{let X=await this.kv.get(`${$}.${Z}`);if(!X?.value?.length)return null;if(X.operation==="DEL"||X.operation==="PURGE")return null;return this.codec.decode(X.value)}catch{return null}}async set($,Z,X){if(!this.kv)return;try{await this.kv.put(`${$}.${Z}`,this.codec.encode(X))}catch{}}async invalidate($){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(X)=>{try{await this.kv.delete(`${X}.${$}`)}catch{}}))}teardown(){this.kv=null}}function RV8($,Z,X){if(X<=0)return!0;if($===void 0)return!0;return Z-$>=X}function U80($){return $ instanceof B1&&$.code===R1.MethodNotFound}function IV8($){return $ instanceof B1&&$.code===-32000&&/connection closed/i.test($.message)}async function BU($,Z,X,G,Y,Q=0){if(!G)try{return await X()}catch(N){if(U80(N))return[];return Pl.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let J=`${$}:${Z}`,W=await G.get($,Z);if(W===null)try{let N=await X();return G.set($,Z,N).catch(()=>{}),kf0.set(J,Date.now()),Pl.add(1,{type:$,outcome:"miss",stage:"miss"}),N}catch(N){if(U80(N))return G.set($,Z,[]).catch(()=>{}),[];return Pl.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(Pl.add(1,{type:$,outcome:"hit",stage:"hit"}),RV8(kf0.get(J),Date.now(),Q)&&!w80.has(J)){w80.add(J),kf0.set(J,Date.now());let N=X().then((H)=>G.set($,Z,H)).catch((H)=>{if(U80(H)||IV8(H)){if(U80(H))G.set($,Z,[]).catch(()=>{});return}Pl.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>w80.delete(J));Y?.(N)}return W}function Vf0($){th1=$}function l5(){return th1}var nh1,ph1,Pl,TV8="DECOCMS_MCP_LISTS",w80,kf0,OU=30000,th1=null;var NY=B(()=>{c5();K5();nh1=k(sO(),1),ph1=k(Mf0(),1),Pl=J8.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});w80=new Set;J8.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(w80.size));kf0=new Map});var Al=($,Z)=>{if(Z===null||Z===void 0)return;let X=$.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),G=Z;for(let Y of X){if(G===null||G===void 0||typeof G!=="object")return;G=G[Y]}return G};function O80($){let Z=$.split("::");if(Z.length!==2||!Z[0]||!Z[1])throw Error(`Invalid scope format: ${$}. Expected format: "KEY::SCOPE"`);return Z}function qV8($){try{return O80($)}catch{return null}}function MV8($){if(typeof $==="object"&&$!==null&&"value"in $){let Z=$.value;if(typeof Z==="string")return Z}return null}function Cf0($,Z){let X={};if(!$||!Z)return X;for(let G of Z){if(G==="*"){X["*"]=["*"];continue}let Y=qV8(G);if(!Y)continue;let[Q,J]=Y,W=Al(Q,$),K=MV8(W);if(K){if(!X[K])X[K]=[];X[K].push(J)}}return X}function oh1($,Z){let X=Cf0($,Z);return new Set(Object.keys(X).filter((G)=>G!=="*"))}var _f0=()=>{};async function rh1($){if(!$.refreshToken)return{success:!1,permanent:!1,error:"No refresh token available"};if(!$.tokenEndpoint)return{success:!1,permanent:!1,error:"No token endpoint available"};if(!$.clientId)return{success:!1,permanent:!1,error:"No client ID available"};try{let Z=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refreshToken,client_id:$.clientId});if($.clientSecret)Z.set("client_secret",$.clientSecret);if($.scope)Z.set("scope",$.scope);let X=await fetch($.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Z.toString()});if(!X.ok){let Y=await X.text(),Q,J;try{let K=JSON.parse(Y);Q=K.error,J=K.error_description}catch{}let W=X.status===400&&!!Q&&kV8.has(Q);return(W?console.error:console.warn)("[TokenRefresh] refresh failed",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,status:X.status,errorCode:Q,errorDescription:J,permanent:W}),{success:!1,permanent:W,status:X.status,errorCode:Q,error:J||Q||`Token refresh failed: ${X.status}`}}let G=await X.json();return{success:!0,accessToken:G.access_token,refreshToken:G.refresh_token||$.refreshToken,expiresIn:G.expires_in,scope:G.scope}}catch(Z){return console.warn("[TokenRefresh] network/parse error",{connectionId:$.connectionId,tokenEndpoint:$.tokenEndpoint,message:Z instanceof Error?Z.message:String(Z)}),{success:!1,permanent:!1,error:Z instanceof Error?Z.message:"Token refresh failed"}}}var kV8;var ah1=B(()=>{kV8=new Set(["invalid_grant","bad_refresh_token"])});import{createHash as SV8,randomBytes as VV8,timingSafeEqual as og6}from"crypto";function _V8($){return $.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function bf0($){return SV8("sha256").update($).digest("hex")}function $u1($){let Z=vf0.length+1,X=Z+eh1;if(!$.startsWith(`${vf0}_`)||$.length<=X+1||$[X]!=="_")return null;let G=$.slice(Z,X),Y=$.slice(X+1);if(!sh1.test(G)||!sh1.test(Y))return null;return G}function Zu1(){let $=_V8(VV8(CV8)),Z=$.slice(0,eh1),X=`${vf0}_${Z}_${$}`;return{plaintext:X,prefix:Z,hash:bf0(X)}}var vf0="stv",CV8=32,eh1=12,sh1;var Xu1=B(()=>{sh1=/^[A-Za-z0-9_-]+$/});function Gu1($){return{id:$.id,organizationId:$.organization_id,subjectConnectionId:$.subject_connection_id,tokenHash:$.token_hash,tokenPrefix:$.token_prefix,name:$.name,revokedAt:$.revoked_at,lastUsedAt:$.last_used_at,createdAt:$.created_at,updatedAt:$.updated_at}}class ff0{db;constructor($){this.db=$}async createOrRotateWorkloadToken($){let Z=$.name??"default";return await this.db.transaction().execute(async(G)=>{if(!await G.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let Q=Zu1(),J=new Date().toISOString();await G.updateTable("connection_workload_tokens").set({revoked_at:J,updated_at:J}).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",Z).where("revoked_at","is",null).execute();let W=await G.insertInto("connection_workload_tokens").values({id:l8("cwt"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,token_hash:Q.hash,token_prefix:Q.prefix,name:Z,revoked_at:null,last_used_at:null,created_at:J,updated_at:J}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:Q.plaintext,record:Gu1(W)}})}async findActiveWorkloadToken($){let Z=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",$.name??"default").where("revoked_at","is",null).executeTakeFirst();return Z?Gu1(Z):null}async revokeWorkloadToken($){let Z=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:Z,updated_at:Z}).where("id","=",$.tokenId).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken($){let Z=$u1($);if(!Z)return null;let X=bf0($),G=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",Z).where("token_hash","=",X).where("revoked_at","is",null).executeTakeFirst();if(!G)return null;let Y=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:Y,updated_at:Y}).where("id","=",G.id).execute(),{tokenId:G.id,tokenPrefix:G.token_prefix,organizationId:G.organization_id,subjectConnectionId:G.subject_connection_id}}async replaceGrantsForSubject($){await this.db.transaction().execute(async(Z)=>{if(!await Z.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let G=[...new Set($.grants.map((J)=>J.targetConnectionId))];if(G.length>0){if((await Z.selectFrom("connections").select("id").where("organization_id","=",$.organizationId).where("id","in",G).execute()).length!==G.length)throw Error("Referenced connection not found in organization")}if(await Z.deleteFrom("connection_credential_grants").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).execute(),$.grants.length===0)return;let Y=new Date().toISOString(),Q=$.grants.map((J)=>({id:l8("ccg"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,target_connection_id:J.targetConnectionId,scope:J.scope,created_by:$.createdBy,created_at:Y,updated_at:Y}));await Z.insertInto("connection_credential_grants").values(Q).execute()})}async hasGrant($){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("target_connection_id","=",$.targetConnectionId).where("scope","=",$.scope).executeTakeFirst()}}var B80="credential:access-token:read",D80="credential:configuration:read";var L80=B(()=>{DX();Xu1()});function RD($){let Z=String($??"");if(Z&&!Z.includes("T"))return Z.replace(" ","T")+"Z";return Z}function P$($){return $.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function v8($){let Z=Number($??0);return Number.isFinite(Z)?Z:0}function bV8($){if(!vV8.has($))throw Error(`Invalid groupByColumn: ${$}`);return $}function xf0($){if(!fV8.test($))throw Error(`Invalid JSONPath: ${$}`);if($.startsWith("$."))return $;if($.startsWith("."))return`$${$}`;return`$.${$}`}function uf0($){return $.replace(/^\$\./,"").split(".").map((X)=>`'${P$(X)}'`).join(", ")}function gV8($){let Z=xV8.exec($);if(!Z||!Z[1]||!Z[2])throw Error(`Invalid interval: ${$}`);let X=parseInt(Z[1],10),G=Z[2],Y=yV8[G];if(X<1||X>Y)throw Error(`Invalid interval amount: ${X}${G} (max ${Y}${G})`);return{amount:X,unit:G}}function DU($,Z,X="timestamp"){let{amount:G,unit:Y}=gV8($),J={m:"MINUTE",h:"HOUR",d:"DAY"}[Y];if(Z==="duckdb")return`time_bucket(INTERVAL '${G} ${J}', CAST(${X} AS TIMESTAMP))`;return`toStartOfInterval(${X}, INTERVAL ${G} ${J})`}function Tl($,Z,X){if(X==="duckdb")return`json_extract_string(${$}, '${Z}')`;let G=uf0(Z);return`JSONExtractString(${$}, ${G})`}function hV8($,Z,X){if(X==="duckdb")return`CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let G=uf0(Z);return`JSONExtractFloat(${$}, ${G})`}function Yu1($,Z,X){if(X==="duckdb")return`TRY_CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let G=uf0(Z);return`toFloat64OrZero(JSONExtractString(${$}, ${G}))`}function yf0($){if($===null||$===void 0)return{};if(typeof $==="object")return $;let Z=String($);try{return JSON.parse(Z)}catch{return{_decocms_truncated:Z}}}function gf0($){return{id:String($.id??""),organizationId:String($.organization_id??""),connectionId:String($.connection_id??""),toolName:String($.tool_name??""),input:yf0($.input),output:yf0($.output),isError:$.is_error===1||$.is_error===!0||$.is_error==="1"||typeof $.is_error==="bigint"&&$.is_error===1n,errorMessage:$.error_message!=null?String($.error_message):null,durationMs:Number($.duration_ms??0),timestamp:(()=>{if($.timestamp instanceof Date)return $.timestamp.toISOString();let Z=String($.timestamp??""),X=new Date(Z.includes("T")?Z:Z.replace(" ","T")+"Z");return Number.isNaN(X.getTime())?Z:X.toISOString()})(),userId:$.user_id!=null?String($.user_id):null,requestId:String($.request_id??""),userAgent:$.user_agent!=null?String($.user_agent):null,virtualMcpId:$.virtual_mcp_id!=null?String($.virtual_mcp_id):null,properties:$.properties?yf0($.properties):null}}function Ku1($,Z){let X=[];if($.properties)for(let[G,Y]of Object.entries($.properties)){let Q=P$(G),J=P$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Q}') = '${J}'`);else X.push(`JSONExtractString(properties, '${Q}') = '${J}'`)}if($.propertyKeys)for(let G of $.propertyKeys){let Y=P$(G);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Y}') IS NOT NULL AND json_extract_string(properties, '$.${Y}') != ''`);else X.push(`JSONExtractString(properties, '${Y}') IS NOT NULL AND JSONExtractString(properties, '${Y}') != ''`)}if($.propertyPatterns)for(let[G,Y]of Object.entries($.propertyPatterns)){let Q=P$(G),J=P$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Q}') ILIKE '${J}'`);else X.push(`JSONExtractString(properties, '${Q}') ILIKE '${J}'`)}if($.propertyInValues)for(let[G,Y]of Object.entries($.propertyInValues)){let Q=P$(G),J=P$(Y);if(Z==="duckdb")X.push(`list_contains(string_split(json_extract_string(properties, '$.${Q}'), ','), '${J}')`);else X.push(`has(splitByChar(',', JSONExtractString(properties, '${Q}')), '${J}')`)}return X}function Ju1($,Z){let X=[];if(fJ(X,Z?.startDate,$),!Z)return X;if(Z.connectionIds?.length){let G=Z.connectionIds.map((Y)=>`'${P$(Y)}'`).join(",");X.push(`connection_id IN (${G})`)}if(Z.toolNames?.length){let G=Z.toolNames.map((Y)=>`'${P$(Y)}'`).join(",");X.push(`tool_name IN (${G})`)}if(Z.virtualMcpIds?.length){let G=Z.virtualMcpIds.map((Y)=>`'${P$(Y)}'`).join(",");X.push(`virtual_mcp_id IN (${G})`)}if(Z.endDate)X.push(bJ(Z.endDate,$));if(Z.propertyFilters)X.push(...Ku1(Z.propertyFilters,$));return X}function Wu1($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) >= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} >= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} >= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function bJ($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) <= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} <= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} <= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function fJ($,Z,X,G="timestamp"){if(Z)$.push(Wu1(Z,X,G));else if(X==="clickhouse")$.push(Wu1(new Date(Date.now()-uV8),X,G))}class cf0{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor($,Z,X,G,Y="clickhouse",Q=!1){this.engine=$;this.sourceFactory=Z;this.metricEngine=X;this.metricSourceFactory=G;this.dialect=Y;this.metricsFromLogs=Q}async query($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${P$($.organizationId)}'`];if($.connectionId)X.push(`connection_id = '${P$($.connectionId)}'`);if($.excludeConnectionIds?.length){let U=$.excludeConnectionIds.map((w)=>`'${P$(w)}'`).join(",");X.push(`connection_id NOT IN (${U})`)}if($.virtualMcpId)X.push(`virtual_mcp_id = '${P$($.virtualMcpId)}'`);if($.toolName)X.push(`tool_name = '${P$($.toolName)}'`);if($.isError!==void 0)X.push(`is_error = ${$.isError?1:0}`);if(fJ(X,$.startDate,this.dialect),$.endDate)X.push(bJ($.endDate,this.dialect));if($.propertyFilters)X.push(...Ku1($.propertyFilters,this.dialect));let G=1000,Y=Math.min(Math.max(1,Math.floor($.limit??50)),G),Q=Math.max(0,Math.floor($.offset??0)),J=X.join(" AND ");if(this.dialect==="duckdb"){let U=`SELECT ${Qu1}, count(*) OVER () AS _total FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${Q}`,w=await this.engine.query(U);if(w.length===0)return{logs:[],total:0};let O=Number(w[0]._total??0);return{logs:w.map(gf0),total:O}}let W=`SELECT count(*) AS total FROM ${Z} WHERE ${J}`,K=`SELECT ${Qu1} FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${Q}`,[N,H]=await Promise.all([this.engine.query(W),this.engine.query(K)]),F=Number(N[0]?.total??0);return{logs:H.map(gf0),total:F}}async getById($,Z){if(!$||!Z)return null;let G=`SELECT * FROM ${this.sourceFactory($)} WHERE organization_id = '${P$($)}' AND id = '${P$(Z)}' LIMIT 1`,Y=await this.engine.query(G);if(Y.length===0)return null;return gf0(Y[0])}async getStats($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${P$($.organizationId)}'`];if(fJ(X,$.startDate,this.dialect),$.endDate)X.push(bJ($.endDate,this.dialect));let G=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${Z} WHERE ${X.join(" AND ")}`,Q=(await this.engine.query(G))[0]??{};return{totalCalls:Number(Q.total_calls??0),errorRate:Number(Q.error_rate??0),avgDurationMs:Number(Q.avg_duration_ms??0)}}async queryLlmUsageStats($){let Z={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!$.organizationId||!$.connectionId)return Z;let X=this.dialect,G=X==="clickhouse",Y=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),Q=DU($.interval,X,"timestamp"),J=(E)=>`coalesce(${Yu1("properties",`$.${E}`,X)}, 0)`,W=G?"count()":"count(*)",K=G?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",N=(E)=>G?`quantile(${E})(duration_ms)`:`quantile_cont(duration_ms, ${E})`,H=[`organization_id = '${P$($.organizationId)}'`,`connection_id = '${P$($.connectionId)}'`];if(fJ(H,$.startDate,X),$.endDate)H.push(bJ($.endDate,X));if($.userIds?.length){let E=$.userIds.slice(0,100).map((z)=>`'${P$(z)}'`).join(",");H.push(`user_id IN (${E})`)}let F=H.join(" AND "),U=Math.min(Math.max(1,Math.floor($.topN??5)),20),w=`${W} AS calls,
693
693
  ${K} AS errors,
694
694
  avg(duration_ms) AS avg,
695
695
  sum(${J("input_tokens")}) AS in_tok,
@@ -2723,7 +2723,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2723
2723
 
2724
2724
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2725
2725
 
2726
- Respond with the structured verdict and a short reason.`,oV$;var aV$=B(()=>{S4();rw();n$1();x06=p$1.object({requiresReview:p$1.boolean().describe("true if the changes should go through pull-request review"),reason:p$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});oV$={requiresReview:!1,reason:""}});function u06($){if(!$||$.includes(".."))return!1;return h06.test($)}function sV$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!u06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function eV$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var h06;var $C$=B(()=>{h06=/^[\w./@-]+$/});function t$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function ZC$($,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 XC$($,Z,X,G){if(!G.connectionId)throw new Vg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Vg(u7);await Rx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new Vg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await _w(G.connectionId,G.owner,G.name,$.db,$.vault),K=gE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await ow(N,c06).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var c06=10485760,Vg;var GC$=B(()=>{Bw();h$1();on();jn();Vg=class Vg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function d06($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!l06.test(Z))throw Error(`Invalid branch name: ${$}`)}function kC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(i06)])}function SC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function o$1($,Z){let G=(hE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return hE0.set($,Y),Y.finally(()=>{if(hE0.get($)===Y)hE0.delete($)}),G}async function SZ($,Z,X){let G=SC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...fY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?p06(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...fY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function p06($){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 uE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function t06($){return JC$.includes($)}var l06,YC$=524288,m06=65536,i06=1e4,QC$=2000,n06,hE0,fY,JC$,WC$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",n06),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!t06(X))return Z.json({error:`step must be one of: ${JC$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=s(Z.var.studioContext),Q=oU0(G.virtualMcpMetadata);try{await rU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return mH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return dV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(QC$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(QC$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return o$1(G,async()=>{try{await u$1(J,X,G);let W=ZC$(Y,Q);if(W)await XC$(J,X,G,W)}catch(W){if(W instanceof Vg)return Z.json({error:W.message},403,fY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,fY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return o$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return o$1(G,async()=>{try{await u$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,fY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:YC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=d$1(K)&&H?[K,N]:await Promise.all([uE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),uE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await tV$(J,F,U);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:YC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=d$1(K)&&H?[K,N]:await Promise.all([uE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),uE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await rV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=t$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:m06,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=sV$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=eV$(Y,J.resolveType),K=t$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var KC$=B(()=>{u8();zC();Sg();hV$();YH();cV$();w3();nw();lV$();mV$();Dn0();tn();n$1();aV$();$C$();GC$();l06=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;n06=gV$(async($,Z)=>{let X=$.var.studioContext;try{G0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=N1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=s(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{d06(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Bn({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await UH(X,J,G),H=uV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});hE0=new Map;fY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};JC$=["clone","install","start"]});var NC$=($)=>{let Z=new D1;if(Z.use("*",EC),Z.route("/",ZE0()),Z.route("/",TM$()),Z.route("/",IV$()),Z.route("/",TV$()),Z.route("/",fE0()),Z.route("/tools",_V$()),Z.route("/",SV$()),Z.route("/",QV$({kvStorage:$.kvStorage})),Z.route("/",GV$()),Z.route("/fs",DV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",WC$()),Z.route("/",jV$()),Z.route("/deco-sites",GE0()),Z.route("/sso",tL0()),Z.route("/",xE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",BM$()),$.mountDevAssets)Z.route("/dev-assets",YE0({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("/",Qs1()),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",EV$()),Z.route("/mcp",SO0()),Z.route("/mcp/self",bE0()),Z.route("/mcp",_O0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var HC$=B(()=>{u8();J11();DM$();F11();QE0();lt();Y11();YV$();JV$();LV$();Ri();o01();vO0();_$1();zV$();PV$();RV$();qV$();VV$();b$1();vV$();f$1();VO0();KC$()});function r06($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function a06($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(o06)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var o06=1e4,s06=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},FC$=()=>{let $=new D1;return $.use("*",s06),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await a06(G,Y);return Z.json({apps:r06(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var UC$=B(()=>{u8();V$()});import{z as I1}from"zod";function RK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function K16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function N16($,Z,X){try{return JSON.parse($)}catch{throw new BC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function H16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.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:N16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function F16($){let Z=$.map((X)=>{let G=X.function.parameters?BY(X.function.parameters):BY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function U16($){if(!$)return;return{openai:{response_format:$}}}function w16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function wC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function OC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var e06=256,$16,Z16,X16,G16,Y16,Q16,J16,W16,BC$,DC$,LC$;var EC$=B(()=>{S4();u8();Sg();TH();$16=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),Z16=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),X16=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(Z16).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),G16=I1.object({type:I1.literal("text")}),Y16=I1.object({type:I1.literal("json_object")}),Q16=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),J16=I1.union([G16,Y16,Q16]),W16=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(X16),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array($16).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:J16.optional(),user:I1.string().optional()});BC$=class BC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};DC$=new D1;DC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(RK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(RK("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(RK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=W16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(RK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=K16(Q.model);if(!J)return $.json(RK("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((z)=>mB(z.providerId));if(!E)return $.json(RK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(RK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=H16(Q.messages),U=Q.tools?F16(Q.tools):void 0,w=U16(Q.response_format),O=w16(),D=Math.floor(Date.now()/1000);if(Q.stream)return mH($,async(L)=>{let E=wC$(H,F,U,Q,w,$.req.raw.signal);try{let z=Vw(E),j=!1,A=0,P="",M=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=e06)await M()}else if(S.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:OC$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=wC$(H,F,U,Q,w,$.req.raw.signal),E=await kw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:OC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(RK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(RK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(RK(Y.message,"server_error"),500)}});LC$=DC$});var jC$;var zC$=B(()=>{jC$={name:"decocms",version:"4.181.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function D16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??B16}}var PC$,B16="https://ph.studio.decocms.com",AC$;var TC$=B(()=>{u8();TC0();IV();OZ();V$();m01();zC$();PC$=new D1;PC$.get("/",($)=>{let Z={version:jC$.version,theme:FM1(),...oB().logo&&{logo:oB().logo},...$K()&&{internalUrl:w21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:Vq$(),posthog:D16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!$K()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});AC$=PC$});function Cg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function r$1($){return(Cg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function IC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Cg($))}&sz=${Z}`}function RC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function qC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/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()?RC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):RC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var VC,L16,E16,z16,j16,MC$;var kC$=B(()=>{VC=h0.enum(["good","bad","neutral"]),L16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:VC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.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 $})),E16=h0.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},h0.array(L16)),z16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},j16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:VC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:VC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:VC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:VC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(E16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:VC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:VC.optional()})).min(1)})]),MC$=h0.object({...z16,template:j16})});function cE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=MC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var a$1=B(()=>{kC$()});import{join as SC$}from"path";async function A16($){try{let Z=await fetch(`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(P16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=cE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||r$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function T16($,Z){let X=Cg($),G=Z?.brand?.trim()||r$1(X),Y=IC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=qC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${xY(W)}</title>`,`<meta name="description" content="${xY(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="${xY(W)}" />`,`<meta property="og:description" content="${xY(K)}" />`,`<meta property="og:url" content="${xY(J)}" />`,`<meta property="og:image" content="${xY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xY(W)}" />`,`<meta name="twitter:description" content="${xY(K)}" />`,`<meta name="twitter:image" content="${xY(N)}" />`,`<meta name="twitter:image:alt" content="${xY(H)}" />`,`<link rel="canonical" href="${xY(J)}" />`,`<link rel="icon" href="${xY(Y)}" sizes="any" />`].join(`
2726
+ Respond with the structured verdict and a short reason.`,oV$;var aV$=B(()=>{S4();rw();n$1();x06=p$1.object({requiresReview:p$1.boolean().describe("true if the changes should go through pull-request review"),reason:p$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});oV$={requiresReview:!1,reason:""}});function u06($){if(!$||$.includes(".."))return!1;return h06.test($)}function sV$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!u06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function eV$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var h06;var $C$=B(()=>{h06=/^[\w./@-]+$/});function t$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function ZC$($,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 XC$($,Z,X,G){if(!G.connectionId)throw new Vg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Vg(u7);await Rx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new Vg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await _w(G.connectionId,G.owner,G.name,$.db,$.vault),K=gE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await ow(N,c06).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var c06=10485760,Vg;var GC$=B(()=>{Bw();h$1();on();jn();Vg=class Vg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function d06($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!l06.test(Z))throw Error(`Invalid branch name: ${$}`)}function kC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(i06)])}function SC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function o$1($,Z){let G=(hE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return hE0.set($,Y),Y.finally(()=>{if(hE0.get($)===Y)hE0.delete($)}),G}async function SZ($,Z,X){let G=SC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...fY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?p06(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...fY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function p06($){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 uE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function t06($){return JC$.includes($)}var l06,YC$=524288,m06=65536,i06=1e4,QC$=2000,n06,hE0,fY,JC$,WC$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",n06),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:kC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!t06(X))return Z.json({error:`step must be one of: ${JC$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=s(Z.var.studioContext),Q=oU0(G.virtualMcpMetadata);try{await rU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return mH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return dV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(QC$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(QC$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return o$1(G,async()=>{try{await u$1(J,X,G);let W=ZC$(Y,Q);if(W)await XC$(J,X,G,W)}catch(W){if(W instanceof Vg)return Z.json({error:W.message},403,fY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,fY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return o$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return o$1(G,async()=>{try{await u$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,fY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:YC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=d$1(K)&&H?[K,N]:await Promise.all([uE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),uE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await tV$(J,F,U);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:YC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=d$1(K)&&H?[K,N]:await Promise.all([uE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),uE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await rV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=t$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:m06,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=SC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=sV$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=eV$(Y,J.resolveType),K=t$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var KC$=B(()=>{u8();zC();Sg();hV$();YH();cV$();w3();nw();lV$();mV$();Dn0();tn();n$1();aV$();$C$();GC$();l06=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;n06=gV$(async($,Z)=>{let X=$.var.studioContext;try{G0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=N1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=s(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{d06(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Bn({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await UH(X,J,G),H=uV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});hE0=new Map;fY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};JC$=["clone","install","start"]});var NC$=($)=>{let Z=new D1;if(Z.use("*",EC),Z.route("/",ZE0()),Z.route("/",TM$()),Z.route("/",IV$()),Z.route("/",TV$()),Z.route("/",fE0()),Z.route("/tools",_V$()),Z.route("/",SV$()),Z.route("/",QV$({kvStorage:$.kvStorage})),Z.route("/",GV$()),Z.route("/fs",DV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",WC$()),Z.route("/",jV$()),Z.route("/deco-sites",GE0()),Z.route("/sso",tL0()),Z.route("/",xE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",BM$()),$.mountDevAssets)Z.route("/dev-assets",YE0({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("/",Qs1()),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",EV$()),Z.route("/mcp",SO0()),Z.route("/mcp/self",bE0()),Z.route("/mcp",_O0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var HC$=B(()=>{u8();J11();DM$();F11();QE0();lt();Y11();YV$();JV$();LV$();Ri();o01();vO0();_$1();zV$();PV$();RV$();qV$();VV$();b$1();vV$();f$1();VO0();KC$()});function r06($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function a06($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(o06)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var o06=1e4,s06=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},FC$=()=>{let $=new D1;return $.use("*",s06),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await a06(G,Y);return Z.json({apps:r06(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var UC$=B(()=>{u8();V$()});import{z as I1}from"zod";function RK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function K16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function N16($,Z,X){try{return JSON.parse($)}catch{throw new BC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function H16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.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:N16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function F16($){let Z=$.map((X)=>{let G=X.function.parameters?BY(X.function.parameters):BY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function U16($){if(!$)return;return{openai:{response_format:$}}}function w16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function wC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function OC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var e06=256,$16,Z16,X16,G16,Y16,Q16,J16,W16,BC$,DC$,LC$;var EC$=B(()=>{S4();u8();Sg();TH();$16=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),Z16=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),X16=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(Z16).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),G16=I1.object({type:I1.literal("text")}),Y16=I1.object({type:I1.literal("json_object")}),Q16=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),J16=I1.union([G16,Y16,Q16]),W16=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(X16),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array($16).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:J16.optional(),user:I1.string().optional()});BC$=class BC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};DC$=new D1;DC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(RK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(RK("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(RK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=W16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(RK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=K16(Q.model);if(!J)return $.json(RK("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((z)=>mB(z.providerId));if(!E)return $.json(RK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(RK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=H16(Q.messages),U=Q.tools?F16(Q.tools):void 0,w=U16(Q.response_format),O=w16(),D=Math.floor(Date.now()/1000);if(Q.stream)return mH($,async(L)=>{let E=wC$(H,F,U,Q,w,$.req.raw.signal);try{let z=Vw(E),j=!1,A=0,P="",M=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=e06)await M()}else if(S.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:OC$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=wC$(H,F,U,Q,w,$.req.raw.signal),E=await kw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:OC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(RK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(RK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(RK(Y.message,"server_error"),500)}});LC$=DC$});var jC$;var zC$=B(()=>{jC$={name:"decocms",version:"4.182.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function D16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??B16}}var PC$,B16="https://ph.studio.decocms.com",AC$;var TC$=B(()=>{u8();TC0();IV();OZ();V$();m01();zC$();PC$=new D1;PC$.get("/",($)=>{let Z={version:jC$.version,theme:FM1(),...oB().logo&&{logo:oB().logo},...$K()&&{internalUrl:w21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:Vq$(),posthog:D16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!$K()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});AC$=PC$});function Cg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function r$1($){return(Cg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function IC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Cg($))}&sz=${Z}`}function RC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function qC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/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()?RC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):RC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var VC,L16,E16,z16,j16,MC$;var kC$=B(()=>{VC=h0.enum(["good","bad","neutral"]),L16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:VC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.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 $})),E16=h0.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},h0.array(L16)),z16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},j16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:VC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:VC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:VC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:VC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(E16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:VC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:VC.optional()})).min(1)})]),MC$=h0.object({...z16,template:j16})});function cE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=MC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var a$1=B(()=>{kC$()});import{join as SC$}from"path";async function A16($){try{let Z=await fetch(`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(P16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=cE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||r$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function T16($,Z){let X=Cg($),G=Z?.brand?.trim()||r$1(X),Y=IC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=qC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${xY(W)}</title>`,`<meta name="description" content="${xY(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="${xY(W)}" />`,`<meta property="og:description" content="${xY(K)}" />`,`<meta property="og:url" content="${xY(J)}" />`,`<meta property="og:image" content="${xY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xY(W)}" />`,`<meta name="twitter:description" content="${xY(K)}" />`,`<meta name="twitter:image" content="${xY(N)}" />`,`<meta name="twitter:image:alt" content="${xY(H)}" />`,`<link rel="canonical" href="${xY(J)}" />`,`<link rel="icon" href="${xY(Y)}" sizes="any" />`].join(`
2727
2727
  `)}function R16($,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}
2728
2728
  </head>`)}function VC$($){let Z=new D1;return Z.get("/:domain/og.png",async(X)=>{let G=Cg(X.req.param("domain")),Y=async()=>{let Q=$?Bun.file(SC$($,"report-og-fallback.png")):null;if(!Q||!await Q.exists())return X.notFound();return X.body(new Uint8Array(await Q.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Q=await fetch(`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(I16)}),J=Q.headers.get("content-type")??"";if(!Q.ok||!J.startsWith("image/")||!Q.body)return Y();return X.body(Q.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Y=$?SC$($,"index.html"):null,Q=Y?Bun.file(Y):null;if(!Q||!await Q.exists())return X.notFound();let J=await Q.text();try{let W=await A16(Cg(G)),K=T16(G,W);return X.html(R16(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var P16=2500,I16=1e4;var CC$=B(()=>{u8();a$1();AD();V$()});function Bo($,Z){return fetch(`${HW({})}${$}`,Z)}async function q16($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Y=G.toString()?`?${G.toString()}`:"",Q=await Bo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(Q.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Q.ok)throw Error(`report read HTTP ${Q.status}`);let J=await Q.json(),{deck:W,drops:K}=cE0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var M16,V3,lE0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},_C$;var vC$=B(()=>{u8();IQ();AD();a$1();M16=new Set(["complete","errored","terminated","unknown"]),V3=new D1;V3.use("*",async($,Z)=>{let X=await L8.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});V3.use("/run",lE0);V3.use("/status",lE0);V3.use("/link-token/*",lE0);V3.use("/suggest",lE0);V3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),G=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let Q=await q16(Z,G,Y);if($.header("Cache-Control","private, no-store"),X||!Q.deck)return $.json(Q);return $.json({...Q,deck:{...Q.deck,slides:Q.deck.slides.slice(0,1)},truncated:Q.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});V3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return $.json({error:"domain is required"},400);let Y=Z.email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Bo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${PD({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});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)}});V3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Bo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${PD({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",Q={done:M16.has(Y),status:Y};return $.json(Q)}catch{return $.json({error:"status failed"},502)}});V3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Bo(`/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)}});V3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Bo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});_C$=V3});import{createHmac as k16,timingSafeEqual as S16}from"crypto";function bC$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Y,Q=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Y=U;else if(F==="v1")Q.push(U)}if(!Y||Q.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(G/1000-J)>V16)return!1;let W=k16("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Q.some((N)=>{let H=Buffer.from(N,"hex");return K.length===H.length&&S16(K,H)})}function fC$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=tQ(Z),G=tQ(tQ(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:IK(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:G}}}function C16($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function IK($){return typeof $==="string"?$:void 0}function tQ($){return typeof $==="object"&&$!==null?$:void 0}function dE0($){return typeof $==="number"?new Date($*1000):null}function $81($){return IK($)??IK(tQ($)?.id)}function _16($){return $81($.subscription)??IK(tQ(tQ($.parent)?.subscription_details)?.subscription)}function v16($){let Z=dE0($.current_period_end);if(Z)return Z;let X=tQ($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Y of X){let Q=tQ(Y)?.current_period_end;if(typeof Q==="number"&&Q>G)G=Q}return G>0?new Date(G*1000):null}function s$1($,Z){let X=dE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function e$1($,Z){let X=dE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function b16($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=IK(tQ(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(IK(tQ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(IK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=IK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(tQ(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:G,creditCents:tQ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(IK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(G);if(!Y)return{handled:!1,reason:"unknown org"};let Q=$81(X.subscription);if(Y.stripeSubscriptionId&&Q&&Y.stripeSubscriptionId!==Q)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Q};if(s$1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:$81(X.customer),stripeSubscriptionId:Q,status:"active",lastStripeEventAt:e$1(Z,Y)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=IK(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};let Q=Z.type==="customer.subscription.deleted";if(!Q&&s$1(Z,Y))return{handled:!1,reason:"stale event"};let J=Q?"canceled":C16(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:v16(X),...Q&&{stripeSubscriptionId:null},lastStripeEventAt:e$1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let G=_16(X);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};if(s$1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:dE0(X.period_end),lastStripeEventAt:e$1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function xC$($){let Z=new _N(c8().db),X=await b16(Z,$);if(X.handled&&X.topUp)await uH$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await n0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof Y3&&(G.status===400||G.status===404)))throw G}return X}var V16=300;var yC$=B(()=>{YQ();ri();Vo0()});var f16=1048576,Z81;var gC$=B(()=>{u8();zC();V$();yC$();Z81=new D1;Z81.post("/webhook",F7({maxSize:f16,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=d0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!bC$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=fC$(X);if(!Y)return $.json({error:"invalid payload"},400);let Q=await xC$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...Q}),$.json({received:!0})})});function hC$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var uC$,x16,y16,cC$;var lC$=B(()=>{u8();PJ();rx();Bv();uC$=new D1,x16=["range","if-none-match","if-modified-since"],y16=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];uC$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Hg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Y=await Yp(G,Z);if(!Y)throw new G$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&jJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=K,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return hC$(U,N),new Response(F,{status:200,headers:U})}let Q=new Headers;for(let K of x16){let N=$.req.header(K);if(N)Q.set(K,N)}let J=await fetch(Y,{headers:Q});if(J.status===403||J.status===404)throw new G$(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:`,G),new G$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of y16){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),hC$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});cC$=uC$});var Do=_((CC)=>{var g16=CC&&CC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),h16=CC&&CC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))g16(Z,$,X)};Object.defineProperty(CC,"__esModule",{value:!0});h16(pG(),CC)});var iC$=_((dC$)=>{Object.defineProperty(dC$,"__esModule",{value:!0});dC$.version=void 0;dC$.version="3.4.0"});var tC$=_((qK)=>{var u16=qK&&qK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(qK,"__esModule",{value:!0});qK.NodeTransport=qK.VERSION=void 0;qK.nodeResolveHost=n16;var g6=Do(),c16=j0("net"),X81=j0("tls"),l16=j0("path"),nC$=j0("fs"),d16=u16(j0("dns")),m16=iC$();qK.VERSION=m16.version;var i16="nats.js";class pC${socket;version;lang;yields=[];signal=(0,g6.deferred)();closedNotification=(0,g6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=i16,this.version=qK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,g6.checkOptions)(Y,Z);let{tls_required:Q,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!G&&(Q||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Q&&this.socket.encrypted!==!0)throw g6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let Q=Y;if(!Q)Q=new g6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Q,W=J==="ECONNREFUSED"?new g6.errors.ConnectionError("connection refused",{cause:Q}):Q;throw this.socket?.destroy(),W}}dial($){let Z=(0,g6.deferred)(),X,G=(0,c16.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Y)=>{X=Y}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,g6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=g6.DataBuffer.concat(...this.yields),Y=(0,g6.extractProtocolMessage)(G);if(Y!=="")try{let Q=g6.INFO.exec(Y);if(!Q)throw Error("unexpected response from server");let J=JSON.parse(Q[1]);$.resolve(J)}catch(Q){$.reject(Q)}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,g6.deferred)();try{if($=(0,l16.resolve)($),!(0,nC$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,nC$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Y,keyFile:Q,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Q){let W=await this.loadFile(Q);if(W)$.key=W}else if(J)$.key=J;if(G){let W=await this.loadFile(G);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,g6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,g6.deferred)();try{let Y=(0,X81.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){G.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,g6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,g6.deferred)();try{let G=(0,X81.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Y)=>{$=Y}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}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,g6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,g6.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 X81.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,g6.render)($)}`);let Z=(0,g6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,g6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,g6.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}}qK.NodeTransport=pC$;function n16($){let Z=(0,g6.deferred)();return d16.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Y=[];for(let Q of G)Y.push(Q.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var eC$=_((sC$)=>{Object.defineProperty(sC$,"__esModule",{value:!0});sC$.connect=p16;var oC$=tC$(),rC$=Do(),aC$=Do();function p16($={}){if((0,aC$.hasWsProtocol)($))return Promise.reject(aC$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,rC$.setTransportFactory)({factory:()=>{return new oC$.NodeTransport},dnsResolveFn:oC$.nodeResolveHost}),rC$.NatsConnectionImpl.connect($)}});var $_$=_((iH)=>{var o16=iH&&iH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),r16=iH&&iH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))o16(Z,$,X)};Object.defineProperty(iH,"__esModule",{value:!0});iH.connect=void 0;var a16=eC$();Object.defineProperty(iH,"connect",{enumerable:!0,get:function(){return a16.connect}});r16(Do(),iH)});function Y_$($){let Z=$?.connectFn??Z$6,X=null,G=null,Y=!1,Q=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Q)try{X=await Z({servers:U,timeout:$$6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=cG(e16,s16,O-1,2,0.5);await a$(D)}}return{init(U,w){if(Y)return;Y=!0,Q=!1;let O=w?.creds?Z_$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!G)G=G_$.jetstream(X);return G},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Q=!0,Y=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function Z$6($){return X_$.connect($)}var Z_$,X_$,G_$,s16=100,e16=3000,$$6=3000;var Q_$=B(()=>{W5();Z_$=k(Yh(),1),X_$=k($_$(),1),G_$=k(sO(),1)});function G81($,Z){return`${$}.${Z}`}class Y81{cache;constructor($){this.cache=Jg({ttlMs:$?.ttlMs??X$6,maxSize:$?.maxSize??G$6})}async get($,Z){return this.cache.get(G81($,Z))??null}async set($,Z,X){this.cache.set(G81($,Z),X)}async invalidate($,Z){this.cache.delete(G81($,Z))}teardown(){this.cache.clear()}}var X$6=600000,G$6=5000;var J_$=()=>{};function mE0($,Z){return`${$}:${Z}`}function Q81($){let Z=Jg({ttlMs:$?.ttlMs??Y$6,maxSize:$?.maxSize??Q$6}),X=$?.getConnection,G=crypto.randomUUID(),Y=new TextEncoder,Q=new TextDecoder,J=null;function W(K,N){let H=X?.();if(!H)return;try{H.publish(W_$,Y.encode(JSON.stringify({organizationId:K,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,N){return Z.get(mE0(K,N))},set(K,N,H){Z.set(mE0(K,N),H)},invalidate(K,N){Z.delete(mE0(K,N)),W(K,N)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(W_$),(async()=>{for await(let N of J)try{let H=JSON.parse(Q.decode(N.data));if(H.originId===G)continue;Z.delete(mE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var W_$="studio.ai-provider-keys.invalidate",Y$6=30000,Q$6=5000;var K_$=()=>{};class J81{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=N_$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Y of G)try{let Q=JSON.parse(X.decode(Y.data));if(Q.originId===this.originId)continue;if(Q.messageId&&this.hasSeen(Q.messageId))continue;this.onCancel?.(Q.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of N_$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var N_$;var H_$=B(()=>{N_$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var F_$=($)=>{let Z;return()=>Z??=$()},W81,K81;var U_$=B(()=>{K5();W81=F_$(()=>J8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),K81=F_$(()=>J8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function U$6(){return{name:LH,subjects:[`${$O0}.>`],storage:C3.StorageType.File,max_age:K$6,max_bytes:H$6,max_msgs_per_subject:F$6,discard:C3.DiscardPolicy.Old,retention:C3.RetentionPolicy.Limits,duplicate_window:N$6,num_replicas:1}}class B_${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 w_$($){let Z=O_$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function D$6($,Z){let X=0;return{publish(G,Y,Q,J){G.publish(Y,Q,J?{headers:J}:void 0).catch((W)=>{if(X++,W$6().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 L$6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class N81{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=U$6(),X=await lG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await C3.jetstreamManager($);try{await G.streams.info(LH),await G.streams.update(LH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await G.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await G.streams.delete(LH),await G.streams.add(Z);else throw Y}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:L$6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){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 Q=D$6(Z,G),J=!1,W=()=>{if(J)return;J=!0;let N=PK$(Z);Y.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(N)=>{let H=performance.now(),F=lp0(N,{runId:Z}),U=performance.now()-H;if(W81().record(U),K81().add(1,{"org.id":G??"unknown"}),B$6?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Q.publish(Y,w.subject,w.data,w.headers?w_$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),W(),O$6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Q.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Y=performance.now(),Q=lp0(Z,{runId:$,dedup:X});if(W81().record(performance.now()-Y),K81().add(1),Q.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Q)await G.publish(J.subject,J.data,{...J.headers?{headers:w_$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Y=jK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?C3.DeliverPolicy.New:C3.DeliverPolicy.All,Q=X?.closeOnDone??!1,J=YO($),W;try{W=await(await G.consumers.get(LH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=QO0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(ZO0()).pipeThrough(XO0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Q){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(LH,{filter:YO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var C3,O_$,J$6=($)=>{let Z;return()=>Z??=$()},W$6,K$6=86400000000000,N$6=120000000000,H$6=4294967296,F$6=500000,w$6,O$6,B$6;var D_$=B(()=>{W5();dp0();JO0();GO0();K5();U_$();C3=k(sO(),1),O_$=k(Yh(),1),W$6=J$6(()=>J8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));w$6=process.env.STREAM_ENCODE_TRACE==="1",O$6=process.env.DECOPILOT_STREAM_TRACE==="1";B$6=w$6?new B_$:null});function iE0($,Z,X,G){if(!G)return!1;return $.emit(Z,a3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,harnessId:G.harness_id??void 0,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var L_$=B(()=>{O8()});class H81{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}}import{readdir as E$6,rm as nE0}from"fs/promises";import{join as pE0}from"path";async function tE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-z$6),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await _C($);for(let Y of G)if(/^\d{4}$/.test(Y))X+=await E_$($,Y,Z);else if(!Y.startsWith(".")){let Q=pE0($,Y),J=await _C(Q);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await E_$(Q,K,Z)}if((await _C(Q)).length===0)await nE0(Q,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function E_$($,Z,X){let G=0,Y=pE0($,Z),Q=await _C(Y);for(let W of Q){if(!/^\d{2}$/.test(W))continue;let K=pE0(Y,W),N=await _C(K);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=pE0(K,F);await nE0(w,{recursive:!0,force:!0}),G++}}if((await _C(K)).length===0)await nE0(K,{recursive:!0,force:!0})}if((await _C(Y)).length===0)await nE0(Y,{recursive:!0,force:!0});return G}async function _C($){try{return(await E$6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var z$6=30;var F81=()=>{};import{DBOS as U81,SchedulerMode as j$6}from"@dbos-inc/dbos-sdk";async function A$6(){let $=[aQ(),vC(),VK()],Z=0;for(let X of $)try{Z+=await tE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function T$6($,Z){await U81.runStep(()=>A$6(),{name:"monitoringRetention"})}function j_$(){if(z_$)return;z_$=!0;let $=U81.registerWorkflow(T$6,{name:"monitoringRetentionWorkflow"});U81.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:P$6,mode:j$6.ExactlyOncePerIntervalWhenActive})}var P$6="23 4 * * *",z_$=!1;var P_$=B(()=>{dG();F81()});function A_$($){return async(Z,X)=>{let G=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(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await Ow.create();Y.auth.user={id:X,role:G.role},Y.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Q=await Oc0($.db,Z,G.role);return Y.boundAuth=wc0({auth:Y.authInstance,headers:new Headers,role:G.role,permissions:Q,userId:X}),Y.access=new tD(X,void 0,Y.boundAuth,G.role,"self"),J50(Y,{id:G.orgId,slug:G.orgSlug}),Y}}var T_$=B(()=>{oD();Pi()});function R$6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function q$6(){for(let $ of I$6)$()}function R_$($){let Z=[...w81.logs,$];w81={...w81,logs:Z.length>500?Z.slice(-500):Z},q$6()}function O81(){return M$6}var w81,I$6,M$6=!1;var B81=B(()=>{w81=R$6(),I$6=new Set});import{EventEmitter as k$6}from"events";var D81;var I_$=B(()=>{B81();D81=new k$6;D81.on("request",($)=>{R_$($)})});function q_$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let Q="",J=!1;if(Y.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=_g(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>_g(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Q=`${t6.tool}${w}${t6.dim}(${L})${t6.reset}`}else if(U.method)Q=`${t6.dim}${_g(U.method)}${t6.reset}`}}catch{}}let W=_g(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${t6.mcp}${_g(H.slice(0,12))}\u2026${t6.reset}`}else if(Y==="/mcp")W=`${t6.mcp}/mcp${t6.reset}`;else if(Y==="/mcp/registry")W=`${t6.mcp}/mcp/registry${t6.reset}`;let K=V$6(G),N=J?"\u25C0":"\u2190";if(!O81())console.log(`${t6.dim}${N}${t6.reset} ${K}${G}${t6.reset} ${W}${Q?` ${Q}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=S$6(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!O81())console.log(`${t6.dim}${O}${t6.reset} ${K}${G}${t6.reset} ${W}${Q?` ${Q}`:""} ${U}${F}${t6.reset} ${t6.duration}${w}${t6.reset}`);D81.emit("request",{method:G,path:_g(Y),status:F,duration:H,timestamp:new Date})}}}var t6,S$6=($)=>{if($>=500)return t6.serverError;if($>=400)return t6.clientError;if($>=300)return t6.redirect;return t6.ok},V$6=($)=>{return t6[$]||t6.reset},_g=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var M_$=B(()=>{B81();I_$();t6={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 C_$}from"crypto";import{mkdir as C$6,readdir as _$6,rm as k_$,stat as __$}from"fs/promises";import{join as E81,relative as v$6}from"path";import{z as L$}from"zod";function b_$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return E81(b$6,Z)}function f_$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function L81($,Z){let X=b_$($),G=f_$(Z);return E81(X,G)}function f$6($,Z,X,G){let Y=d0().encryptionKey||"dev-secret",Q=`${$}:${Z}:${X}:${G}`;return C_$("sha256",Y).update(Q).digest("hex")}function V_$($,Z,X,G,Y){let Q=Math.floor(Date.now()/1000)+G,J=f$6(Z,X,Q,Y),W=new URL(`/api/dev-assets/${Z}/${f_$(X)}`,$);return W.searchParams.set("expires",Q.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function x_$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${C_$("md5","etag").update(G).digest("hex")}"`}async function y_$($,Z,X,G,Y){try{let Q=await _$6($,{withFileTypes:!0});for(let J of Q){let W=E81($,J.name),N=v$6(Z,W).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Y.commonPrefixes.add(H)}}else await y_$(W,Z,X,G,Y);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let H=await __$(W);Y.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:x_$(W,H.mtime,H.size)})}catch{}}}}catch{}}function g_$($,Z){let G=s($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=Q.prefix||"",W=Q.maxKeys??1000,K=Q.delimiter,N=Q.continuationToken,H=b_$(G);await C$6(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await y_$(H,H,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=L81(G,Q.key),W=await __$(J);return{contentType:w11(Q.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:x_$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??S_$;return{url:V_$(Z,G,Q.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??S_$;return{url:V_$(Z,G,Q.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let Q=Y,J=L81(G,Q.key);try{return await k_$(J),{success:!0,key:Q.key}}catch{return{success:!1,key:Q.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let Q=Y,J=[],W=[];return await Promise.all(Q.keys.map(async(K)=>{let N=L81(G,K);try{await k_$(N),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function z81($,Z,X){let G=g_$(Z,X),Y=new WW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:e6});for(let J of G){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Q=new yX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(Q),hQ(Y,Q,$,"mcp:dev-assets")}async function h_$($,Z,X,G){let Q=g_$(X,G).find((J)=>J.name===$);if(!Q)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Q.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 b$6="./data/assets",S_$=3600,v_$,u_$;var c_$=B(()=>{V$();Fy();u8();Gl();yV();PX();QE0();v_$=new D1;v_$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return z81($.req.raw,Z,G)});u_$=v_$});var l_$={};N4(l_$,{mountDevRoutes:()=>x$6});function x$6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`;return z81(G.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`,W=G.req.param("toolName");if(!W)return G.json({error:"Missing tool name"},400);let K=await G.req.json(),N=await h_$(W,K,Y,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",u_$);let X=new D1;X.use("*",k3({mountPath:"/api/dev-assets"})),X.route("/",YE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var d_$=B(()=>{u8();Q11();QE0();c_$()});import{sql as y$6}from"kysely";import{randomUUID as m_$}from"crypto";import{z as g$6}from"zod";async function u$6($){let Z=new Date().toISOString(),X=m_$(),G=x4.SELF($.organizationId),Y="registry.publish_request.created",Q={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:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Q),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","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:m_$(),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 y$6`SELECT
2729
2729
  pg_notify('studio_events', ${X}),