decocms 4.253.0 → 4.253.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/client/assets/{AlertCircle-QRvupulp.js → AlertCircle-BYvQDEJ0.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CCk6weX5.js → AreaChart-DMcwZhe6.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-B5MHfAc9.js → ArrowLeft-B-9nUwLX.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-C9quT3vr.js → ArrowUp-B1UtGT45.js} +1 -1
  5. package/dist/client/assets/{Check-D_9UblFe.js → Check-Cu-Awg_S.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-Cy6SdoFE.js → CheckCircle-C4O_1HW1.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-q-BDTE1a.js → ChevronDown-D1GCQiij.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-CuobrFWw.js → ChevronRight-NcrFTq4Q.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-BcFPQB0k.js → ChevronSelectorVertical-DhZiWWo6.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-BacGGupp.js → ChevronUp-CrheBWdX.js} +1 -1
  11. package/dist/client/assets/{Copy01-pzrzel7S.js → Copy01-DwPzyMCP.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-CpM7NKRX.js → CreditCard01-CqBwox93.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-o1GHxv-O.js → DotsVertical-Dnc_qefX.js} +1 -1
  14. package/dist/client/assets/{Download01-BSl0a_Zn.js → Download01-yzTeB8lR.js} +1 -1
  15. package/dist/client/assets/{Eye-Bj5mHV4n.js → Eye-rZWcM_sl.js} +1 -1
  16. package/dist/client/assets/{FilterLines-DIklhgSj.js → FilterLines-BMCdm4O2.js} +1 -1
  17. package/dist/client/assets/{Globe01-DjttPvlo.js → Globe01-CojEB28p.js} +1 -1
  18. package/dist/client/assets/{Globe04-Du02Sz3e.js → Globe04-DohkS1yI.js} +1 -1
  19. package/dist/client/assets/{HardDrive-BqmgISbb.js → HardDrive-WahlW5wX.js} +1 -1
  20. package/dist/client/assets/{Key01-Jr4ZErv5.js → Key01-Bx4K_S3Q.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-D26mL5EB.js → LinkExternal01-CtNOOeZL.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-e3NzZWP7.js → LockUnlocked01-D_Q5BYhU.js} +1 -1
  23. package/dist/client/assets/{LogOut01-C2lMNeV5.js → LogOut01-BZABwyef.js} +1 -1
  24. package/dist/client/assets/{Monitor01-1Nj95W_q.js → Monitor01-7UTn7zVa.js} +1 -1
  25. package/dist/client/assets/{Palette-Dypc2-1c.js → Palette-BoChqeld.js} +1 -1
  26. package/dist/client/assets/{Play-CjHdlkgd.js → Play-DNBU5rzE.js} +1 -1
  27. package/dist/client/assets/{Plus-D3gVZHV3.js → Plus-8T2afHEs.js} +1 -1
  28. package/dist/client/assets/{SearchLg-wR1sB7EA.js → SearchLg-6rfLixx5.js} +1 -1
  29. package/dist/client/assets/{SearchMd-CtZAfK8E.js → SearchMd-0vzqE1Pd.js} +1 -1
  30. package/dist/client/assets/{Settings02-C53ZHmtS.js → Settings02-KfyhGAo3.js} +1 -1
  31. package/dist/client/assets/{Share07-CmibR8O_.js → Share07-BTlsc7Ng.js} +1 -1
  32. package/dist/client/assets/{Shield01-aty-BQPO.js → Shield01-CPg5EmjN.js} +1 -1
  33. package/dist/client/assets/{Stars01-C-HncgpH.js → Stars01-CV6o6WbI.js} +1 -1
  34. package/dist/client/assets/{Stars02-DLN9VN0K.js → Stars02-Do7POkWd.js} +1 -1
  35. package/dist/client/assets/{Sun-oAlH4Et6.js → Sun-knqgcKen.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-2UlAne4E.js → SwitchHorizontal01-dwH3CFZl.js} +1 -1
  37. package/dist/client/assets/{Tool01-CrNXzXQW.js → Tool01-CawhE5Vv.js} +1 -1
  38. package/dist/client/assets/{Tool02-D_KV3wgq.js → Tool02-DUb3PZH0.js} +1 -1
  39. package/dist/client/assets/{Trash01-DjBUHDUL.js → Trash01-CZV6hVoi.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-DXDuqLu0.js → TrendUp01-Cp69MjT_.js} +1 -1
  41. package/dist/client/assets/{Upload01-84XWvjLa.js → Upload01-AWrvzckN.js} +1 -1
  42. package/dist/client/assets/{User01-PXX2g5Cu.js → User01-DLfObf45.js} +1 -1
  43. package/dist/client/assets/{UserSquare-C-beLoyR.js → UserSquare-BjlZKgC9.js} +1 -1
  44. package/dist/client/assets/{Users01-Da4R3QxE.js → Users01-CQ3eFXvg.js} +1 -1
  45. package/dist/client/assets/{Users03-CbPlXAXd.js → Users03-DgZSfmdp.js} +1 -1
  46. package/dist/client/assets/{XCircle-9-Hs99HF.js → XCircle-BpPG80mN.js} +1 -1
  47. package/dist/client/assets/{XClose-DcETJU_8.js → XClose-DW7idjn0.js} +1 -1
  48. package/dist/client/assets/{YAxis-Cz9kXWR-.js → YAxis-Da2rtvB9.js} +1 -1
  49. package/dist/client/assets/{Zap-ZIyGqf5L.js → Zap-Dzj3-lys.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-4nM0D99S.js → ZapSquare-Bs2nDJX-.js} +1 -1
  51. package/dist/client/assets/{access-gate-B3kqph5v.js → access-gate-DZ_-IWJN.js} +1 -1
  52. package/dist/client/assets/{agent-icon-B-qYByRc.js → agent-icon-xLXU6rvd.js} +1 -1
  53. package/dist/client/assets/{agents-list-UaAApF6s.js → agents-list-CE_lUbRY.js} +1 -1
  54. package/dist/client/assets/{ai-providers-BgQGYjrZ.js → ai-providers-B5hVpeDw.js} +1 -1
  55. package/dist/client/assets/{alert-D0Qt4xSz.js → alert-CnmxLYRw.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-CBk8lpg7.js → alert-dialog-CvsZ6guw.js} +1 -1
  57. package/dist/client/assets/{api-keys-B6hPo8ZJ.js → api-keys-D72J-m-j.js} +1 -1
  58. package/dist/client/assets/{app-editor-DA--ZSly.js → app-editor-CClK5ocS.js} +1 -1
  59. package/dist/client/assets/{auth-X1MIUPaZ.js → auth-1R6gk2tO.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-CoDRrO1W.js → auth-catchall-DHLFLTCH.js} +1 -1
  61. package/dist/client/assets/{auth-entry-6ZtbhK-T.js → auth-entry-CUwr4ac9.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-Cwo3URbs.js → auth-split-layout-Cx8b5rv5.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-D_ggvhPQ.js → authenticate-and-persist-oauth-CZZKLfUR.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-B6ybaa8x.js → automation-list-row-DuyceG26.js} +1 -1
  65. package/dist/client/assets/{automation-runs-CtItpnbR.js → automation-runs-DP3JWssQ.js} +1 -1
  66. package/dist/client/assets/{automations-DseZQX2k.js → automations-DbKB4JrO.js} +1 -1
  67. package/dist/client/assets/{avatar-QtF_6_2t.js → avatar-DPXyNBP8.js} +1 -1
  68. package/dist/client/assets/{badge-D4sNhvwo.js → badge-CGCuo_-5.js} +1 -1
  69. package/dist/client/assets/{block-document-BP32WLcN.js → block-document-CMd9Eo96.js} +1 -1
  70. package/dist/client/assets/{buckets-DQ-s2j_l.js → buckets-DljZRfHK.js} +1 -1
  71. package/dist/client/assets/{bulk-category-panel-9VQLE4O-.js → bulk-category-panel-BLk77HCA.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-tIVH3Ul1.js → capability-load-error-DnpJPSNM.js} +1 -1
  73. package/dist/client/assets/{cards-DJvq3P6E.js → cards-C60HDM5G.js} +1 -1
  74. package/dist/client/assets/{category-editor-B05XhJvm.js → category-editor-DCes96yT.js} +1 -1
  75. package/dist/client/assets/{chart-D-Syy_FF.js → chart-BDZIA7_t.js} +1 -1
  76. package/dist/client/assets/{chat-context-B5O3LrXl.js → chat-context-C9nTU_s6.js} +1 -1
  77. package/dist/client/assets/{checkbox-DbnsLTvV.js → checkbox-CYVQb6u5.js} +1 -1
  78. package/dist/client/assets/{choose-editor-a8lRrAOa.js → choose-editor-CHdyY5E4.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-GQaDEUv_.js → cli-auth-success-a3s0cdGF.js} +1 -1
  80. package/dist/client/assets/{collection-detail-Cms5Xwxe.js → collection-detail-COMW8222.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-Cib6YxvS.js → collection-display-button-DjAF7BCj.js} +1 -1
  82. package/dist/client/assets/{collection-search-DU8GH5Z3.js → collection-search-CSSjKy7f.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-D9kfbk5G.js → collection-table-wrapper-DOG_oIXa.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-CYE3kEie.js → collection-tabs-DGI2IEmV.js} +1 -1
  85. package/dist/client/assets/{command-fmbL7i-3.js → command-DUeMCHIE.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-iKjMKzqi.js → commerce-onboarding-DB8uJRe2.js} +1 -1
  87. package/dist/client/assets/{connect-D0iUq3Oz.js → connect-xjult6u-.js} +1 -1
  88. package/dist/client/assets/{connection-D_bhXhuF.js → connection-O58eU8Dr.js} +1 -1
  89. package/dist/client/assets/{connection-card-BxQsLM1f.js → connection-card-Drtf7vdR.js} +1 -1
  90. package/dist/client/assets/{connection-detail-BhIv5zq_.js → connection-detail-O-fmNmpE.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-BWs30DdI.js → connection-form-helpers-rO7EwngE.js} +1 -1
  92. package/dist/client/assets/{connections-65EV_Dku.js → connections-kiyFdETe.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-Cvt6e7r9.js → decopilot-sse-pool-BNBoVXdw.js} +1 -1
  94. package/dist/client/assets/{dialog-BnYOWv1V.js → dialog-06THKDmm.js} +1 -1
  95. package/dist/client/assets/{domain-settings-B8iRiDab.js → domain-settings-DxS7w6w-.js} +1 -1
  96. package/dist/client/assets/{drawer-CYg0htVn.js → drawer-DfM0a7aK.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-BYZO8zGY.js → dropdown-menu-w7n_JiUQ.js} +1 -1
  98. package/dist/client/assets/{empty-state-DgpXFEpT.js → empty-state-DytlgCAm.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-Z1nXcHUN.js → extract-connection-data-42ShpRyJ.js} +1 -1
  100. package/dist/client/assets/{file-explorer-D5B-7g6B.js → file-explorer-D_PGAi5e.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-C4bZM4LI.js → file-type-icon-DIpohPJ6.js} +1 -1
  102. package/dist/client/assets/{form-CvSGLXDv.js → form-D7T5_Dgj.js} +1 -1
  103. package/dist/client/assets/{general-Dm5CVVDP.js → general-DmFqcLLE.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-BuEJt9Wg.js → github-repo-picker-BebzrN3W.js} +1 -1
  105. package/dist/client/assets/{hooks-DZORtnpm.js → hooks-BxLy1Zzz.js} +1 -1
  106. package/dist/client/assets/{index-BfGV4McT.js → index-9OoxX1NR.js} +1 -1
  107. package/dist/client/assets/{index-BKT7N985.js → index-B1P_V3qG.js} +1 -1
  108. package/dist/client/assets/{index-DIGkPnPI.js → index-BB4_ygWi.js} +1 -1
  109. package/dist/client/assets/{index-nslqiNOZ.js → index-BYzmGpA0.js} +1 -1
  110. package/dist/client/assets/{index-Cyqvxp1H.js → index-BdUjMMS5.js} +1 -1
  111. package/dist/client/assets/{index-CuCSQaJ9.js → index-C2wbMIfs.js} +5 -5
  112. package/dist/client/assets/{index-CzcLVdds.js → index-CMALBC-v.js} +3 -3
  113. package/dist/client/assets/{index-Fsf5PLbW.js → index-CvNeVHfy.js} +1 -1
  114. package/dist/client/assets/{index-CZ5dXTGz.js → index-DDTrmVhz.js} +1 -1
  115. package/dist/client/assets/{index-Ds8jmHNA.js → index-DF3uNrPp.js} +1 -1
  116. package/dist/client/assets/{index-redirect-BJrwIK_8.js → index-redirect-Cpg_Q5et.js} +1 -1
  117. package/dist/client/assets/{infra-billing-DEuNXfcS.js → infra-billing-DyTByfZt.js} +1 -1
  118. package/dist/client/assets/{input-CgelyuM7.js → input-CjP4wQRD.js} +1 -1
  119. package/dist/client/assets/{integration-icon-DzMUF0dd.js → integration-icon-_VDJvzJ-.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-CfSqc13I.js → invite-member-dialog-8QQ-DA_M.js} +1 -1
  121. package/dist/client/assets/{label-Dvnf0feU.js → label-BNnDeYWX.js} +1 -1
  122. package/dist/client/assets/{layout-BQLUPszm.js → layout-DGxeKl7-.js} +1 -1
  123. package/dist/client/assets/{login-BP6rwGNR.js → login-BmUk90CP.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-jcyez0an.js → mcp-oauth-R6LWeGel.js} +1 -1
  125. package/dist/client/assets/{members-Dpse4xW3.js → members-Rje746QY.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-CsC4XPkJ.js → monaco-editor-CHdpsAKe.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-CLNzJUKR.js → monitoring-stats-row-nWQLcD7N.js} +1 -1
  128. package/dist/client/assets/{multi-select-C3Oa4f0S.js → multi-select-DvVxCCA2.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-CReSAxvZ.js → oauth-callback-BrZMJ9Z_.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-ai-provider-C_GBa25j.js → oauth-callback-ai-provider-6lB5ioTQ.js} +1 -1
  131. package/dist/client/assets/{onboarding-CzDb95DL.js → onboarding-CFZ_YqBk.js} +1 -1
  132. package/dist/client/assets/{org-layout-DUzJC78P.js → org-layout-CFJ3s3aO.js} +1 -1
  133. package/dist/client/assets/{organization-choice-C7YFivwE.js → organization-choice-4gTGCdVZ.js} +1 -1
  134. package/dist/client/assets/{orgs-CyuH0Dcq.js → orgs-BlhaM_QR.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-mWzJ-btw.js → page-seo-form-8CrhZnSd.js} +1 -1
  136. package/dist/client/assets/{popover-CBGKD0s7.js → popover-BZEJPBaN.js} +1 -1
  137. package/dist/client/assets/{post-editor-Djvncljj.js → post-editor-DXF_bdFs.js} +1 -1
  138. package/dist/client/assets/{primitives-BhoyIjg_.js → primitives-DefLuCWp.js} +1 -1
  139. package/dist/client/assets/{profile-DJsx1goj.js → profile-ixoNCK51.js} +1 -1
  140. package/dist/client/assets/{project-app-view-CvDr-XCU.js → project-app-view-BmDjcK09.js} +1 -1
  141. package/dist/client/assets/record-editor-SauBdytI.js +1 -0
  142. package/dist/client/assets/{redirect-editor-DUYltyw3.js → redirect-editor-DOZ_6ItM.js} +1 -1
  143. package/dist/client/assets/registry-DNELIUVJ.js +2 -0
  144. package/dist/client/assets/{registry-layout-DASkuy8G.js → registry-layout-CZnAV2GE.js} +1 -1
  145. package/dist/client/assets/{reports-CXa28_sb.js → reports-BskvcwLH.js} +1 -1
  146. package/dist/client/assets/{require-capability-CTNMEb_7.js → require-capability-Byjk0WDJ.js} +1 -1
  147. package/dist/client/assets/{required-auth-layout-BM2rQ75_.js → required-auth-layout-BuUCLduS.js} +1 -1
  148. package/dist/client/assets/{reset-password-Bv-BDbeu.js → reset-password-Hn69qiVu.js} +1 -1
  149. package/dist/client/assets/{roles-DDH319xG.js → roles-DPU4GH76.js} +1 -1
  150. package/dist/client/assets/{search-input-BSD38UOX.js → search-input-F06b4Ka7.js} +1 -1
  151. package/dist/client/assets/{secrets-YnJjdwYC.js → secrets-DtooYsRz.js} +1 -1
  152. package/dist/client/assets/{sections-editor-klWoNNna.js → sections-editor-DHi-y1Qr.js} +1 -1
  153. package/dist/client/assets/{select-Czw8e7ON.js → select-fEJ2CWnh.js} +1 -1
  154. package/dist/client/assets/{select-model-s6Q1RhIQ.js → select-model-CSZcccgl.js} +1 -1
  155. package/dist/client/assets/{self-tool-result-BIIdVkKE.js → self-tool-result-BoRiwr9O.js} +1 -1
  156. package/dist/client/assets/{seo-editor-Qd-OCL7p.js → seo-editor-C0yrgVaA.js} +1 -1
  157. package/dist/client/assets/{settings-layout-DL0SzmOv.js → settings-layout-CkCx5djT.js} +1 -1
  158. package/dist/client/assets/{shell-controls-CSm6ytzb.js → shell-controls-CvuXlA7S.js} +1 -1
  159. package/dist/client/assets/{shell-layout-BKnL_FxA.js → shell-layout-D2WGSk9d.js} +1 -1
  160. package/dist/client/assets/{spinner-CzB_jOUK.js → spinner-DRW7bcot.js} +1 -1
  161. package/dist/client/assets/{sso-BCCUP3vV.js → sso-C9S6ArZ5.js} +1 -1
  162. package/dist/client/assets/{store-Cj03_fvj.js → store-DUIqjsmW.js} +1 -1
  163. package/dist/client/assets/store-registry-CCLV9EGA.js +2 -0
  164. package/dist/client/assets/{switch-CFRxsEDs.js → switch-9lR-M49q.js} +1 -1
  165. package/dist/client/assets/{synced-repos-Ct0rUyr3.js → synced-repos-DCY70HWU.js} +1 -1
  166. package/dist/client/assets/{tab-id-y2UEhF46.js → tab-id-DOlOt_oN.js} +1 -1
  167. package/dist/client/assets/{table-BhmhDJ4F.js → table-55wy8ES_.js} +1 -1
  168. package/dist/client/assets/{tabs-BCUMuslr.js → tabs-B_f6B2ih.js} +1 -1
  169. package/dist/client/assets/{task-key-DepFkHpi.js → task-key-DC0DmXL_.js} +1 -1
  170. package/dist/client/assets/{tasks-UFQh5X5R.js → tasks-C1jd4mF0.js} +1 -1
  171. package/dist/client/assets/{textarea-DcfHRbIa.js → textarea-CioreWQ5.js} +1 -1
  172. package/dist/client/assets/{toggle-group-BLeLfUJ1.js → toggle-group-CKR4opVv.js} +1 -1
  173. package/dist/client/assets/{toolbar-Dt2tacki.js → toolbar-DxhudO7Y.js} +1 -1
  174. package/dist/client/assets/{track-Bc8k7xVr.js → track-5IMkFYjp.js} +1 -1
  175. package/dist/client/assets/{types-B6aVwO4P.js → types-LSAqkaao.js} +1 -1
  176. package/dist/client/assets/{use-ai-providers-CTaiOWxl.js → use-ai-providers-C1myPe1T.js} +1 -1
  177. package/dist/client/assets/{use-api-keys-xNOMIJJ8.js → use-api-keys-BLhCxSau.js} +1 -1
  178. package/dist/client/assets/{use-automations-BqdBb32F.js → use-automations-CB10hjhp.js} +1 -1
  179. package/dist/client/assets/{use-autosave-HRUnqOmY.js → use-autosave-BxOegg1k.js} +1 -1
  180. package/dist/client/assets/{use-clock-tick-B09DIw8S.js → use-clock-tick-jMDHnmqb.js} +1 -1
  181. package/dist/client/assets/{use-commerce-diagnostic-CYSLePUq.js → use-commerce-diagnostic-CzYB3N6a.js} +1 -1
  182. package/dist/client/assets/{use-connection-CxlxZXew.js → use-connection-DT2B_DYi.js} +1 -1
  183. package/dist/client/assets/{use-copy-Dmwl1VxR.js → use-copy-D3XerJdc.js} +1 -1
  184. package/dist/client/assets/{use-create-virtual-mcp-D29M4QcP.js → use-create-virtual-mcp-DKZ39HDE.js} +1 -1
  185. package/dist/client/assets/{use-debounced-autosave-BIppXeai.js → use-debounced-autosave-DTkDy42k.js} +1 -1
  186. package/dist/client/assets/{use-debounced-value-IIaOOxZg.js → use-debounced-value-DbRRK9TT.js} +1 -1
  187. package/dist/client/assets/{use-decopilot-events-DsFgyl9p.js → use-decopilot-events-G33cy0ys.js} +1 -1
  188. package/dist/client/assets/{use-delete-connection-k63TvZYv.js → use-delete-connection-B7i8EHY-.js} +1 -1
  189. package/dist/client/assets/{use-deployment-admin-BeIYRauP.js → use-deployment-admin-EilNlemK.js} +1 -1
  190. package/dist/client/assets/{use-file-configs-y4xbFYVM.js → use-file-configs-BPtRUpqF.js} +1 -1
  191. package/dist/client/assets/{use-infinite-scroll-CLh0uciU.js → use-infinite-scroll-QWIMbpAi.js} +1 -1
  192. package/dist/client/assets/{use-join-requests-DS4ZqYOu.js → use-join-requests-d9x5nN9k.js} +1 -1
  193. package/dist/client/assets/{use-mcp-client-Nl7jMP-w.js → use-mcp-client-CluZ1kcE.js} +1 -1
  194. package/dist/client/assets/{use-mcp-tools-CBLV4W5e.js → use-mcp-tools-Bn-w9dls.js} +1 -1
  195. package/dist/client/assets/{use-members-BhvCwErg.js → use-members-Bsc6dQLG.js} +1 -1
  196. package/dist/client/assets/{use-navigate-to-agent-D-SPcarg.js → use-navigate-to-agent-NiTIdPbN.js} +1 -1
  197. package/dist/client/assets/{use-org-auth-client-D5LQtapF.js → use-org-auth-client-Cu0_xvCB.js} +1 -1
  198. package/dist/client/assets/{use-org-repo-syncs-BPPWlF5W.js → use-org-repo-syncs-DNte33T4.js} +1 -1
  199. package/dist/client/assets/{use-org-sso-BZeg8Kd0.js → use-org-sso-Bf2lWMgv.js} +1 -1
  200. package/dist/client/assets/{use-organization-roles-Cv_sEf0N.js → use-organization-roles-BtYEcikp.js} +1 -1
  201. package/dist/client/assets/{use-organization-settings-ALGjoNhu.js → use-organization-settings-h-vNu5dF.js} +1 -1
  202. package/dist/client/assets/{use-registry-connections-X4HwLyVi.js → use-registry-connections-CpTGVE3o.js} +1 -1
  203. package/dist/client/assets/{use-secrets-BRM80mro.js → use-secrets-Djj5tnEX.js} +1 -1
  204. package/dist/client/assets/{use-section-preview-base-BpNpB2pu.js → use-section-preview-base-DwW1Ebe1.js} +1 -1
  205. package/dist/client/assets/{use-status-sounds-CCWNlp1N.js → use-status-sounds-Bfvpj4xw.js} +1 -1
  206. package/dist/client/assets/{use-tags-H3HQshqI.js → use-tags-Bcb85fVL.js} +1 -1
  207. package/dist/client/assets/{use-view-mode-Doil9hB7.js → use-view-mode-CHryhyWZ.js} +1 -1
  208. package/dist/client/assets/{use-virtual-mcp-Qsmk-Li1.js → use-virtual-mcp-DMt0VXr_.js} +1 -1
  209. package/dist/client/assets/useInfiniteQuery-gLOjDPyq.js +1 -0
  210. package/dist/client/assets/useSuspenseInfiniteQuery-EB_E_bJc.js +1 -0
  211. package/dist/client/assets/{users-BxK6kPRW.js → users-BK6ODa0L.js} +1 -1
  212. package/dist/client/assets/{variant-calendar-BLeb8bxN.js → variant-calendar-D8gSD-Zc.js} +1 -1
  213. package/dist/client/assets/{view-mode-toggle-BEGBs_8b.js → view-mode-toggle-k-CL6fP4.js} +1 -1
  214. package/dist/client/index.html +1 -1
  215. package/dist/server/cli.js +452 -444
  216. package/dist/server/migrate.js +134 -126
  217. package/dist/server/server.js +2 -2
  218. package/package.json +1 -1
  219. package/dist/client/assets/record-editor-nxD5Rafv.js +0 -1
  220. package/dist/client/assets/registry-7mX30HD0.js +0 -2
  221. package/dist/client/assets/store-registry-CGHaWw_9.js +0 -2
  222. package/dist/client/assets/useInfiniteQuery-Niu3Iyqd.js +0 -1
  223. package/dist/client/assets/useSuspenseInfiniteQuery-IqOl9p5d.js +0 -1
@@ -1518,7 +1518,7 @@ data:
1518
1518
  </head>`+$.slice(F)}return`<head>
1519
1519
  `+Q+`
1520
1520
  </head>
1521
- `+$}function FD0($){if(!$||$.length===0)return[];return $.filter((Z)=>Dj4.test(Z))}function Lj4($){if($.csp)return $.csp;let Z=$.resourceCsp;if(!Z)return OU$;let X=FD0(Z.resourceDomains),Q=FD0(Z.connectDomains),Y=FD0(Z.frameDomains),G=FD0(Z.baseUriDomains),J=X.length>0,W=Q.length>0,K=Y.length>0,H=G.length>0;if(!J&&!W&&!K&&!H)return OU$;let F=X.join(" ");return["default-src 'none'",J?`script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval' ${F}`:"script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'",J?`style-src 'unsafe-inline' ${F}`:"style-src 'unsafe-inline'",J?`img-src * data: blob: ${F}`:"img-src * data: blob:",J?`media-src * data: blob: ${F}`:"media-src * data: blob:",J?`font-src data: ${F}`:"font-src data:",W?`connect-src ${Q.join(" ")}`:"connect-src 'none'",K?`frame-src ${Y.join(" ")}`:"frame-src 'none'","worker-src blob:","form-action 'none'",H?`base-uri ${G.join(" ")}`:"base-uri 'none'"].join("; ")}var OU$,Dj4;var wU$=w(()=>{OU$=["default-src 'none'","script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'","style-src 'unsafe-inline'","img-src * data: blob:","media-src * data: blob:","font-src data:","connect-src 'none'","frame-src 'none'","worker-src blob:","form-action 'none'","base-uri 'none'"].join("; ");Dj4=/^https?:\/\/(\*\.)?[a-zA-Z0-9._-]+(:\d+)?\/?$/});function Ej4($){let Z=$.lastFailureAt-$.firstFailureAt;return $.count>=Cy1&&Z>=_y1}class yr0{options;kv=null;codec=g50();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new LU$.Kvm($).create(jj4,{storage:DU$.StorageType.Memory,ttl:EU$.nanos(vy1)})}async recordFailure($){if(!this.kv)return xr0;let Z=Date.now();for(let X=0;X<zj4;X++)try{let Q=await this.kv.get($);if(!(Q&&Q.operation!=="DEL"&&Q.operation!=="PURGE"&&Q.value?.length)){let W={count:1,firstFailureAt:Z,lastFailureAt:Z};return await this.kv.create($,this.codec.encode(W)),{count:W.count,shouldDisable:!1}}let G=this.codec.decode(Q.value),J={count:G.count+1,firstFailureAt:G.firstFailureAt,lastFailureAt:Z};return await this.kv.update($,this.codec.encode(J),Q.revision),{count:J.count,shouldDisable:Ej4(J)}}catch{}return xr0}async recordSuccess($){if(!this.kv)return;try{await this.kv.delete($)}catch{}}teardown(){this.kv=null}}class tn{async recordFailure(){return xr0}async recordSuccess(){}teardown(){}}function gr0($){jU$=$??new tn}function hr0(){return jU$}var DU$,LU$,EU$,xr0,jj4="DECOCMS_CONN_CIRCUIT",zj4=5,jU$;var ur0=w(()=>{DU$=V(uw(),1),LU$=V(Kc0(),1),EU$=V(_u(),1),xr0={count:0,shouldDisable:!1};jU$=new tn});function zU$($){if(!$)return{decision:"skip"};if($.startsWith("notifications/"))return{decision:"skip"};if(Aj4.has($))return{decision:"skip"};let Z=Pj4[$];if(Z)return{decision:"skip-if-list-cached",listType:Z};return{decision:"probe"}}async function PU$($){if($.method!=="POST")return;let Z=$.headers.get("content-length");if(Z&&Number(Z)>Tj4)return;try{let X=await $.clone().json(),Y=(Array.isArray(X)?X[0]:X)?.method;return typeof Y==="string"?Y:void 0}catch{return}}var Pj4,Aj4,Tj4=64000;var AU$=w(()=>{Pj4={"tools/list":"tools","resources/list":"resources","prompts/list":"prompts"},Aj4=new Set(["ping"])});import{SpanStatusCode as ND0}from"@opentelemetry/api";async function UD0($,Z){let X=$.get("studioContext");try{let Q=X.organization?.id??null,Y=Z?Z:Q?tD(Q):null;if(!Y)return $.json({error:"Agent ID or organization ID is required"},400);if(Z&&!Q)return $.json({error:"Organization context is required"},400);let G=await X.tracer.startActiveSpan("studio.virtual_mcp.lookup",{attributes:{"virtual_mcp.id":Y}},async(U)=>{try{let O=await X.storage.virtualMcps.findById(Y,Q??void 0);return U.setStatus({code:ND0.OK}),O}catch(O){throw U.setStatus({code:ND0.ERROR,message:O.message}),U.recordException(O),O}finally{U.end()}});if(!G)return $.json({error:"Agent not found"},404);if(Q&&G.organization_id!==Q)return $.json({error:"Agent not found"},404);if(G.status!=="active")return $.json({error:`Agent is inactive: ${G.id??"Decopilot"}`},503);if(X.organization?.id&&G.organization_id!==X.organization.id)return $.json({error:"Forbidden: Agent does not belong to your organization"},403);X.connectionId=G.id??void 0;let J=G1(X),W=null;if(G.id&&J&&w5(G.metadata)[J])W=await jC(X,G.id,J,$.req.query("branch")??void 0).catch(()=>null);let K=await X.tracer.startActiveSpan("studio.virtual_mcp.create_client",{attributes:{"virtual_mcp.id":G.id??"decopilot"}},async(U)=>{try{let O=await hF(G,X,!1,{includeSkillsCatalog:!0,additionalConnections:W?[W]:[]});return U.setStatus({code:ND0.OK}),O}catch(O){throw U.setStatus({code:ND0.ERROR,message:O.message}),U.recordException(O),O}finally{U.end()}}),H={name:G.id??"Decopilot",version:"1.0.0",title:G.title??void 0,description:G.description??void 0,icons:G.icon?[{src:G.icon}]:void 0},F=dD(K,H,{capabilities:{tools:{},resources:{},prompts:{}},instructions:K.getInstructions(),toolCallTimeoutMs:Zb}),N=new ZQ({enableJsonResponse:$.req.header("Accept")?.includes("application/json")??!1});return await F.connect(N),await HJ(F,N,$.req.raw,`virtual-mcp:${G.id??"decopilot"}`,{onClose:()=>K.close()})}catch(Q){let Y=Q;return console.error("[virtual-mcp] Error handling virtual MCP request:",Y),$.json({error:"Internal server error",message:Y.message},500)}}var OD0=()=>{let $=new F1;return $.all("/gateway/:virtualMcpId?",async(Z)=>{let X=Z.req.param("virtualMcpId")||Z.req.header("x-virtual-mcp-id");return UD0(Z,X)}),$.all("/virtual-mcp/:virtualMcpId?",async(Z)=>{let X=Z.req.param("virtualMcpId")||Z.req.header("x-virtual-mcp-id");return UD0(Z,X)}),$};var BD0=w(()=>{vX();P8();IC();w8();Ty();Mw0();iX();oy()});import{SpanStatusCode as wD0}from"@opentelemetry/api";var TU$=($,Z)=>{if($ instanceof Wx)return Z.header("Retry-After",String(Math.ceil($.cooldownRemainingMs/1000))),Z.json({error:$.message},503);if($.message.includes("not found"))return Z.json({error:$.message},404);if($.message.includes("does not belong to the active organization"))return Z.json({error:"Connection not found"},404);if($.message.includes("inactive"))return Z.json({error:$.message},503);return Z.json({error:"Internal server error",message:$.message},500)},DD0=()=>{let $=new F1;return $.all("/",async(Z)=>{return UD0(Z,void 0)}),$.get("/:connectionId/ui-resource",async(Z)=>{let X=Z.get("studioContext"),Q=Z.req.param("connectionId"),Y=Z.req.query("uri");if(!Y)return Z.json({error:"uri query param is required"},400);if(!X.organization?.id)return Z.json({error:"Organization context is required"},403);let G=ax0(Q),J;if(G){let O=G1(X);if(!O)return Z.json({error:"Authentication required"},401);if(J=await jC(X,G,O,Z.req.query("branch")??void 0),!J)return Z.json({error:"Dev server not running"},503)}else if(J=await X.storage.connections.findById(Q,X.organization.id),!J||J.organization_id!==X.organization.id)return Z.json({error:"Connection not found"},404);let W=VO(J,X,!1,Z9()??void 0),K,H;try{let B=(await W.readResource({uri:Y})).contents?.[0];K=B?.text,H=B?._meta?.ui?.csp}catch(O){return Z.json({error:O.message},502)}finally{await W.close().catch(()=>{})}if(typeof K!=="string")return Z.json({error:"Resource has no text content"},404);let F=BU$(K,{resourceCsp:H}),N=`"${Bun.hash(F).toString(36)}"`,U="private, no-cache";if(Z.req.header("if-none-match")===N)return new Response(null,{status:304,headers:{ETag:N,"Cache-Control":U}});return new Response(F,{headers:{"Content-Type":"text/html; charset=utf-8",ETag:N,"Cache-Control":U}})}),$.all("/:connectionId",async(Z)=>{let X=Z.req.param("connectionId"),Q=Z.get("studioContext");if(X.endsWith("_self")){let J=X.slice(0,-5);if(!Q.organization||Q.organization.id!==J)return Z.json({error:"Connection not found"},404);let W=await ry(Q),K=new ZQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await W.connect(K),rF.run(Q,()=>HJ(W,K,Z.req.raw,`mcp:self:${X}`))}let Y=ax0(X);if(Y){if(!Q.organization?.id)return Z.json({error:"Organization context is required"},403);let J=G1(Q);if(!J)return Z.json({error:"Authentication required"},401);let W=await jC(Q,Y,J,Z.req.query("branch")??void 0);if(!W)return Z.json({error:"Dev server not running"},503);let K=l50(W,Q,!1),H=new ZQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await K.connect(H),HJ(K,H,Z.req.raw,`mcp:dev:${X}`)}let G=null;try{try{if(!Q.organization?.id)return Z.json({error:"Organization context is required"},403);if(G=await Q.tracer.startActiveSpan("studio.connection.lookup",{attributes:{"connection.id":X}},async(D)=>{KJ(Z,"mcp.find_connection");try{let L=await Q.storage.connections.findById(X,Q.organization.id);return D.setStatus({code:wD0.OK}),L}catch(L){throw D.setStatus({code:wD0.ERROR,message:L.message}),D.recordException(L),L}finally{oY(Z,"mcp.find_connection"),D.end()}}),!G)throw Error("Connection not found");let J=G;if(J.organization_id!==Q.organization.id)throw Error("Connection does not belong to the active organization");let W=!1;if(J.status!=="active"){let D=Date.now()-new Date(J.updated_at).getTime();if(J.status==="error"&&!!J.connection_url&&D>=Zy0)W=!0;else{if(J.status==="error"&&J.connection_url){let E=Zy0-D;Z.header("Retry-After",String(Math.ceil(E/1000)))}throw Error(`Connection inactive: ${J.status}`)}}let K=await PU$(Z.req.raw),{decision:H,listType:F}=zU$(K),N=H==="probe";if(H==="skip-if-list-cached"&&F){let D=Z9();N=D?await D.get(F,X)===null:!0}if(W)N=!0;if(J.connection_url&&N)V60(X),await Q.tracer.startActiveSpan("studio.connection.handshake",{attributes:{"connection.id":X,"connection.url":J.connection_url}},async(D)=>{KJ(Z,"mcp.client_handshake");try{if(await N5(J,Q,!1),S60(X),hr0().recordSuccess(X),W)await Q.storage.connections.update(X,{status:"active"}),console.info("[proxy] auto-recovered connection after successful re-probe",{connectionId:X,org:Q.organization?.slug});D.setStatus({code:wD0.OK})}catch(L){throw D.setStatus({code:wD0.ERROR,message:L.message}),D.recordException(L),L}finally{oY(Z,"mcp.client_handshake"),D.end()}});KJ(Z,"mcp.create_server");let U=l50(J,Q,!1);oY(Z,"mcp.create_server");let O=new ZQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});KJ(Z,"mcp.server_connect"),await U.connect(O),oY(Z,"mcp.server_connect"),KJ(Z,"mcp.handle_request");let B=await HJ(U,O,Z.req.raw,`mcp:${X}`);return oY(Z,"mcp.handle_request"),B}catch(J){if(J instanceof Wx)throw J;if(G??=await Q.storage.connections.findById(X,Q.organization?.id),G?.connection_url){let W=await cr0({error:J,reqUrl:new URL(Z.req.raw.url),connectionId:X,connectionUrl:G.connection_url,headers:{},orgSlug:Q.organization?.slug});if(W)return W;C60(X);let{shouldDisable:K}=await hr0().recordFailure(X);if(K&&G.status==="active")await Q.storage.connections.update(X,{status:"error"}),console.warn("[proxy] auto-disabled connection after sustained failures",{connectionId:X,org:Q.organization?.slug,error:J.message})}throw J}}catch(J){return TU$(J,Z)}}),$.all("/:connectionId/call-tool/:toolName",async(Z)=>{let X=Z.req.param("connectionId"),Q=Z.req.param("toolName"),Y=Z.get("studioContext");if(!Y.organization?.id)return Z.json({error:"Organization context is required"},403);let G=null;try{if(G=await Y.storage.connections.findById(X,Y.organization.id),!G)return Z.json({error:"Connection not found"},404);if(G.status!=="active")throw Error(`Connection inactive: ${G.status}`);let W=await(await N5(G,Y,!1)).callTool({name:Q,arguments:await Z.req.json()});if(W.isError)return new Response(JSON.stringify(W.content),{headers:{"Content-Type":"application/json"},status:500});return new Response(JSON.stringify(W.structuredContent??W.content),{headers:{"Content-Type":"application/json"}})}catch(J){if(G??=await Y.storage.connections.findById(X,Y.organization.id),G?.connection_url){let W=await cr0({error:J,reqUrl:new URL(Z.req.raw.url),connectionId:X,connectionUrl:G.connection_url,headers:{},orgSlug:Y.organization?.slug});if(W)return W}return TU$(J,Z)}}),$};var LD0=w(()=>{NF();IC();w8();br0();_O();oy();on();_Y();zi();wU$();Oh0();ur0();AU$();BD0();Mw0();P8();dr0()});async function bB($,Z,X,Q){if(Z.type!=="event"||!Z.connection_id)return{success:!0};let Y=await $.storage.connections.findById(Z.connection_id);if(!Y)return{success:!0};let G=$.organization?.id,J=$.organization?.slug;try{let W=await N5(Y,$,!0),K=Ec0.forClient(lr0(W)),H,F,N;if(X&&Q&&G){let E=await Q.generateTokenPair();F=E.plaintext,N=E.hash,H=J?`${$.baseUrl}/api/${J}/trigger-callback`:`${$.baseUrl}/api/trigger-callback`}let U=5000,O=!1,B=new Promise((E,j)=>setTimeout(()=>{O=!0,j(Error("TRIGGER_CONFIGURE timeout"))},U)),D;try{D=await Promise.race([K.TRIGGER_CONFIGURE({type:Z.event_type,params:JSON.parse(Z.params??"{}"),enabled:X,callbackUrl:H,callbackToken:F}),B])}catch(E){if(O&&X&&Q&&G&&N)await Q.persistTokenHash(G,Z.connection_id,N);return console.error(`[configureTriggerOnMcp] TRIGGER_CONFIGURE threw on connection=${Z.connection_id} type=${Z.event_type}:`,E),{success:!1,error:String(E)}}let L=D;if(!L||L.success!==!0)return console.error(`[configureTriggerOnMcp] TRIGGER_CONFIGURE did not return success=true on connection=${Z.connection_id} type=${Z.event_type}. Raw payload:`,JSON.stringify(D)),{success:!1,error:`TRIGGER_CONFIGURE did not return success=true (got ${JSON.stringify(D)})`};try{if(X&&Q&&G&&N)await Q.persistTokenHash(G,Z.connection_id,N);if(!X&&Q&&G)await Q.deleteByConnection(Z.connection_id,G)}catch(E){console.error("[configureTriggerOnMcp] Token persistence failed after successful TRIGGER_CONFIGURE:",E)}return{success:!0}}catch(W){return{success:!1,error:String(W)}}}var rn=w(()=>{NF();LD0();jc0()});import{z as n6}from"zod";var mr0;var RU$=w(()=>{RC();S0();gX();rn();mr0=c({name:"AUTOMATION_UPDATE",description:"Update an automation's config. Toggling active state reconfigures event triggers on MCPs.",annotations:{title:"Update Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:n6.object({id:n6.string(),name:n6.string().min(1).max(255).optional(),active:n6.boolean().optional(),messages:n6.union([n6.string(),n6.array(n6.looseObject({id:n6.string().optional(),role:n6.enum(["user","assistant","system"]),parts:n6.array(n6.record(n6.string(),n6.unknown())),metadata:n6.unknown().optional()}))]).optional(),models:n6.object({tier:DO,modelId:n6.string().optional(),credentialId:n6.string().optional()}).loose().optional(),tools:n6.array(n6.string()).nullable().optional(),maxAgentSteps:n6.number().int().min(1).max(100).nullable().optional(),temperature:n6.number().optional()}),outputSchema:n6.object({id:n6.string(),name:n6.string(),active:n6.boolean(),updated_at:n6.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.id,X.id);if(!Q)throw Error("Automation not found");let Y={};if($.name!==void 0)Y.name=$.name;if($.active!==void 0)Y.active=$.active;if($.messages!==void 0){let J=YD0($.messages);Y.messages=JSON.stringify(J)}if($.models!==void 0)Y.models=JSON.stringify($.models);if($.tools!==void 0)Y.tools=$.tools===null?null:JSON.stringify($.tools);if($.temperature!==void 0)Y.temperature=$.temperature;if($.maxAgentSteps!==void 0)Y.max_agent_steps=$.maxAgentSteps;let G=await Z.storage.automations.update($.id,X.id,Y);if($.active!==void 0&&$.active!==Q.active){let J=await Z.storage.automations.listTriggers(G.id),W=J.filter((K)=>K.type==="event");await Promise.allSettled(W.map(async(K)=>{let H=await bB(Z,K,$.active);if(!H.success)console.warn(`Failed to configure trigger ${K.id}: ${H.error}`)})),await GU$(J,$.active)}return{id:G.id,name:G.name,active:G.active,updated_at:G.updated_at}}})});import{z as ED0}from"zod";var ir0;var IU$=w(()=>{RC();V4();S0();rn();ir0=c({name:"AUTOMATION_DELETE",description:"Permanently delete an automation. Disables all event triggers on connected MCPs first.",annotations:{title:"Delete Automation",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:ED0.object({id:ED0.string()}),outputSchema:ED0.object({success:ED0.boolean()}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),!await Z.storage.automations.findById($.id,X.id))throw Error("Automation not found");let Y=await Z.storage.automations.listTriggers($.id),G=Y.filter((K)=>K.type==="event");await Promise.allSettled(G.map(async(K)=>{let H=await bB(Z,K,!1);if(!H.success)console.warn(`Failed to disable trigger ${K.id}: ${H.error}`)}));let{success:J}=await Z.storage.automations.delete($.id,X.id);await JU$(Y);let W=G1(Z);if(W)y1.capture({distinctId:W,event:"automation_deleted",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:$.id,trigger_count:Y.length}});return{success:J}}})});function ay($){return`webhook_${$}`}function jD0($,Z,X){if(!Z)throw Error("Cannot build webhook URL: organization slug missing from request context");return`${$}/api/${Z}/webhooks/${X}`}import{z as w7}from"zod";var qU$=300000,Rj4=10,pr0;var MU$=w(()=>{Rr0();RC();Tr0();S0();rn();pr0=c({name:"AUTOMATION_TRIGGER_ADD",description:"Add a cron, event, or webhook trigger to an automation. For webhook triggers the response includes a one-time URL + secret token.",annotations:{title:"Add Trigger",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:w7.object({automation_id:w7.string(),type:w7.enum(["cron","event","webhook"]),cron_expression:w7.string().optional(),connection_id:w7.string().optional(),event_type:w7.string().optional(),params:w7.record(w7.string(),w7.string()).optional()}),outputSchema:w7.object({id:w7.string(),automation_id:w7.string(),type:w7.enum(["cron","event","webhook"]),created_at:w7.string(),webhook:w7.object({url:w7.string(),token:w7.string()}).nullable().optional()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.automation_id,X.id);if(!Q)throw Error("Automation not found");if($.type==="cron"){if(!$.cron_expression)throw Error("cron_expression is required for cron triggers");let K=new JD0($.cron_expression,{timezone:"UTC"}).nextRuns(Rj4);if(K.length===0)throw Error("Cron expression has no future runs");let H=1/0;for(let F=1;F<K.length;F++){let N=K[F].getTime()-K[F-1].getTime();if(N<H)H=N}if(K.length>=2&&Number.isFinite(H)&&H<qU$){let F=qU$/1000;throw Error(`Cron fires too frequently \u2014 minimum interval is ${F}s between runs (observed ${H/1000}s)`)}}if($.type==="event"){if(!$.connection_id)throw Error("connection_id is required for event triggers");if(!$.event_type)throw Error("event_type is required for event triggers");if(!await Z.storage.connections.findById($.connection_id,X.id))throw Error("Connection not found");let K={id:"",automation_id:$.automation_id,type:"event",cron_expression:null,connection_id:$.connection_id,event_type:$.event_type,params:$.params?JSON.stringify($.params):null,last_run_at:null,next_run_at:null,api_key_id:null,created_at:""},H=await bB(Z,K,!0,Z.storage.triggerCallbackTokens);if(!H.success)throw Error(`Failed to configure trigger on connection: ${H.error}`)}let Y=$.type==="cron"&&$.cron_expression?WD0($.cron_expression,new Date):null,G=await Z.storage.automations.addTrigger({automation_id:$.automation_id,type:$.type,cron_expression:$.type==="cron"?$.cron_expression:null,connection_id:$.type==="event"?$.connection_id:null,event_type:$.type==="event"?$.event_type:null,params:$.params?JSON.stringify($.params):null,next_run_at:Y?.toISOString()??null}),J=null;if($.type==="webhook")try{let W=await Z.boundAuth.apiKey.create({name:`webhook:${Q.name}:${G.id.slice(0,8)}`,permissions:{[ay(G.id)]:["FIRE"]},metadata:{kind:"webhook_trigger",automation_id:Q.id,trigger_id:G.id}});await Z.storage.automations.setTriggerApiKeyId(G.id,W.id),J={url:jD0(Z.baseUrl,X.slug,G.id),token:W.key}}catch(W){await Z.storage.automations.removeTrigger(G.id,G.automation_id);let K=W instanceof Error?W.message:String(W);throw Error(`Failed to mint webhook token: ${K}`)}return await HD0(G,Q),{id:G.id,automation_id:G.automation_id,type:G.type,created_at:G.created_at,webhook:J}}})});import{z as zD0}from"zod";var nr0;var kU$=w(()=>{RC();S0();rn();nr0=c({name:"AUTOMATION_TRIGGER_REMOVE",description:"Remove a trigger from an automation. Disables associated event listeners on MCPs.",annotations:{title:"Remove Trigger",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:zD0.object({trigger_id:zD0.string()}),outputSchema:zD0.object({success:zD0.boolean()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findTriggerById($.trigger_id);if(!Q)throw Error("Trigger not found");if(!await Z.storage.automations.findById(Q.automation_id,X.id))throw Error("Automation not found");if(Q.type==="event"){let J=await bB(Z,Q,!1,Z.storage.triggerCallbackTokens);if(!J.success)console.warn(`Failed to disable trigger ${Q.id}: ${J.error}`)}let{success:G}=await Z.storage.automations.removeTrigger(Q.id,Q.automation_id);if(Q.type==="cron")await _r0(Q.id);if(Q.type==="webhook"&&Q.api_key_id)try{await Z.boundAuth.apiKey.delete(Q.api_key_id)}catch(J){console.warn(`[trigger-remove] failed to delete api key ${Q.api_key_id} for trigger ${Q.id}:`,J instanceof Error?J.message:J)}return{success:G}}})});import{z as sy}from"zod";var tr0;var VU$=w(()=>{S0();tr0=c({name:"AUTOMATION_TRIGGER_ROTATE_TOKEN",description:"Rotate the secret token for a webhook automation trigger. Returns a new token; the old token is revoked.",annotations:{title:"Rotate Webhook Token",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:sy.object({trigger_id:sy.string()}),outputSchema:sy.object({trigger_id:sy.string(),url:sy.string(),token:sy.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findTriggerById($.trigger_id);if(!Q)throw Error("Trigger not found");if(Q.type!=="webhook")throw Error("Trigger is not a webhook trigger");let Y=await Z.storage.automations.findById(Q.automation_id,X.id);if(!Y)throw Error("Automation not found");let G=Q.api_key_id,J=await Z.boundAuth.apiKey.create({name:`webhook:${Y.name}:${Q.id.slice(0,8)}`,permissions:{[ay(Q.id)]:["FIRE"]},metadata:{kind:"webhook_trigger",automation_id:Y.id,trigger_id:Q.id}});if(await Z.storage.automations.setTriggerApiKeyId(Q.id,J.id),G)try{await Z.boundAuth.apiKey.delete(G)}catch(W){console.warn(`[trigger-rotate] failed to delete old key ${G} for trigger ${Q.id}:`,W instanceof Error?W.message:W)}return{trigger_id:Q.id,url:jD0(Z.baseUrl,X.slug,Q.id),token:J.key}}})});import{z as ey}from"zod";var or0;var SU$=w(()=>{V4();S0();or0=c({name:"AUTOMATION_RUN",description:"Manually trigger an automation run. Bypasses configured triggers.",annotations:{title:"Run Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:ey.object({id:ey.string()}),outputSchema:ey.object({threadId:ey.string().optional(),error:ey.string().optional(),skipped:ey.string().optional()}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),!Z.automationRunner)throw Error("Automation runner not available");let Q=G1(Z);if(!Q)throw Error("User ID not available");let Y=await Z.automationRunner($.id,X.id,Q);if(y1.capture({distinctId:Q,event:"automation_run",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:$.id,thread_id:"taskId"in Y?Y.taskId:void 0,status:"skipped"in Y?"skipped":("error"in Y)?"error":"started",skip_reason:"skipped"in Y?Y.skipped:void 0,error_message:"error"in Y?Y.error:void 0}}),"skipped"in Y)return{skipped:Y.skipped};if("error"in Y)return{threadId:Y.taskId,error:Y.error};return{threadId:Y.taskId}}})});import{z as uZ}from"zod";var Ij4=500,rr0;var CU$=w(()=>{R6();S0();rr0=c({name:"AUTOMATION_RUN_STATS",description:"Aggregate run counts (by status) and LLM token/cost totals for a single automation.",annotations:{title:"Automation Run Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uZ.object({automation_id:uZ.string(),startDate:uZ.string().datetime().optional().describe("Filter runs at or after this ISO timestamp"),endDate:uZ.string().datetime().optional().describe("Filter runs at or before this ISO timestamp")}),outputSchema:uZ.object({runs:uZ.object({total:uZ.number(),completed:uZ.number(),failed:uZ.number(),inProgress:uZ.number()}),usage:uZ.object({calls:uZ.number(),inputTokens:uZ.number(),outputTokens:uZ.number(),totalTokens:uZ.number(),costUsd:uZ.number(),sampledRuns:uZ.number(),truncated:uZ.boolean()})}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),await JQ(),!await Z.storage.automations.findById($.automation_id,X.id))throw Error("Automation not found");let Y=await Z.storage.automations.getRunStats($.automation_id,X.id,{startDate:$.startDate,endDate:$.endDate}),G=await Z.storage.automations.listRunThreadIds($.automation_id,X.id,{startDate:$.startDate,endDate:$.endDate,limit:Ij4}),J={calls:0,inputTokens:0,outputTokens:0,totalTokens:0,costUsd:0,sampledRuns:G.length,truncated:Y.total>G.length};if(G.length>0){let W=await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:"decopilot",threadIds:G,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});for(let K of W)J.calls+=K.calls,J.inputTokens+=K.inputTokens,J.outputTokens+=K.outputTokens,J.totalTokens+=K.totalTokens,J.costUsd+=K.costUsd}return{runs:Y,usage:J}}})});var _U$=w(()=>{pN$();nN$();tN$();RU$();IU$();MU$();kU$();VU$();SU$();CU$()});import{z as xB}from"zod";var Mj4,kj4,ar0;var vU$=w(()=>{S0();Mj4=xB.object({id:xB.string().min(1)}),kj4=xB.object({user:xB.object({id:xB.string(),name:xB.string(),email:xB.string(),image:xB.string().nullable()}).nullable()}),ar0=c({name:"USER_GET",description:"Get a user's profile by ID. Only returns users who share an organization with the caller.",annotations:{title:"Get User",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Mj4,outputSchema:kj4,handler:async($,Z)=>{await Z.access.check(),r(Z);let X=G1(Z);if(!X)throw Error("Authentication required");let Q=await Z.storage.users.findById($.id,X);if(!Q)return{user:null};return{user:{id:Q.id,name:Q.name,email:Q.email,image:Q.image??null}}}})});import{z as Vj4}from"zod";var Sj4,sr0;var fU$=w(()=>{S0();gX();Sj4={tiers:{}},sr0=c({name:"USER_MODEL_PREFERENCES_GET",description:"Get the calling user's personal chat tier \u2192 model overrides for the current organization. Absent tiers fall back to the org default.",annotations:{title:"Get User Model Preferences",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Vj4.object({}),outputSchema:Zi,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Z.auth?.user?.id;if(!Q)throw Error("No authenticated user in context");return await Z.storage.userModelPreferences.get(Q,X.id)??Sj4}})});function Cj4($,Z,X){let Q={};for(let Y of DO.options){let G=$[Y];if(!G||m3(X,G.keyId,G.modelId)){Q[Y]=G;continue}let J=Z?.[Y];if(!(J?.keyId===G.keyId&&J?.modelId===G.modelId))throw Error("Model not allowed for your role");Q[Y]=null}return Q}var er0;var bU$=w(()=>{S0();gX();ly();er0=c({name:"USER_MODEL_PREFERENCES_UPDATE",description:"Set the calling user's personal chat tier \u2192 model overrides for the current organization. Only affects this user's chats; the org default and every non-chat path (automations, background tools) are unchanged. Omit a tier (or set it null) to fall back to the org default. Models the caller's role is not allowed to use are rejected.",annotations:{title:"Update User Model Preferences",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Zi,outputSchema:Zi,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Z.auth?.user?.id;if(!Q)throw Error("No authenticated user in context");let[Y,G]=await Promise.all([i3(Z.db,X.id,X.role??Z.auth.user?.role),Z.storage.userModelPreferences.get(Q,X.id)]);return await Z.storage.userModelPreferences.upsert(Q,X.id,{tiers:Cj4($.tiers,G?.tiers,Y)})}})});var xU$=w(()=>{vU$();fU$();bU$()});function o0($,Z,X,Q,Y){if(Q==="m")throw TypeError("Private method is not writable");if(Q==="a"&&!Y)throw TypeError("Private accessor was defined without a setter");if(typeof Z==="function"?$!==Z||!Y:!Z.has($))throw TypeError("Cannot write private member to an object whose class did not declare it");return Q==="a"?Y.call($,X):Y?Y.value=X:Z.set($,X),X}function d($,Z,X,Q){if(X==="a"&&!Q)throw TypeError("Private accessor was defined without a getter");if(typeof Z==="function"?$!==Z||!Q:!Z.has($))throw TypeError("Cannot read private member from an object whose class did not declare it");return X==="m"?Q:X==="a"?Q.call($):Q?Q.value:Z.get($)}var tQ=()=>{};var $g=function(){let{crypto:$}=globalThis;if($?.randomUUID)return $g=$.randomUUID.bind($),$.randomUUID();let Z=new Uint8Array(1),X=$?()=>$.getRandomValues(Z)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(Q)=>(+Q^X()&15>>+Q/4).toString(16))};function FJ($){return typeof $==="object"&&$!==null&&(("name"in $)&&$.name==="AbortError"||("message"in $)&&String($.message).includes("FetchRequestCanceledException"))}var qC=($)=>{if($ instanceof Error)return $;if(typeof $==="object"&&$!==null){try{if(Object.prototype.toString.call($)==="[object Error]"){let Z=Error($.message,$.cause?{cause:$.cause}:{});if($.stack)Z.stack=$.stack;if($.cause&&!Z.cause)Z.cause=$.cause;if($.name)Z.name=$.name;return Z}}catch{}try{return Error(JSON.stringify($))}catch{}}return Error($)};var H1,K9,WX,aF,an,PD0,sn,en,$t,Zt,Xt,Qt,Yt,Gt;var E5=w(()=>{H1=class H1 extends Error{};K9=class K9 extends H1{constructor($,Z,X,Q,Y){super(`${K9.makeMessage($,Z,X)}`);this.status=$,this.headers=Q,this.requestID=Q?.get("request-id"),this.error=Z,this.type=Y??null}static makeMessage($,Z,X){let Q=Z?.message?typeof Z.message==="string"?Z.message:JSON.stringify(Z.message):Z?JSON.stringify(Z):X;if($&&Q)return`${$} ${Q}`;if($)return`${$} status code (no body)`;if(Q)return Q;return"(no status code or body)"}static generate($,Z,X,Q){if(!$||!Q)return new aF({message:X,cause:qC(Z)});let Y=Z,G=Y?.error?.type;if($===400)return new sn($,Y,X,Q,G);if($===401)return new en($,Y,X,Q,G);if($===403)return new $t($,Y,X,Q,G);if($===404)return new Zt($,Y,X,Q,G);if($===409)return new Xt($,Y,X,Q,G);if($===422)return new Qt($,Y,X,Q,G);if($===429)return new Yt($,Y,X,Q,G);if($>=500)return new Gt($,Y,X,Q,G);return new K9($,Y,X,Q,G)}};WX=class WX extends K9{constructor({message:$}={}){super(void 0,void 0,$||"Request was aborted.",void 0)}};aF=class aF extends K9{constructor({message:$,cause:Z}){super(void 0,void 0,$||"Connection error.",void 0);if(Z)this.cause=Z}};an=class an extends aF{constructor({message:$}={}){super({message:$??"Request timed out."})}};PD0=class PD0 extends H1{constructor($,{cause:Z}={}){super($??"Retryable error.");if(Z!==void 0)this.cause=Z}};sn=class sn extends K9{};en=class en extends K9{};$t=class $t extends K9{};Zt=class Zt extends K9{};Xt=class Xt extends K9{};Qt=class Qt extends K9{};Yt=class Yt extends K9{};Gt=class Gt extends K9{}});function AD0($){if(typeof $!=="object")return{};return $??{}}function Za0($){if(!$)return!0;for(let Z in $)return!1;return!0}function gU$($,Z){return Object.prototype.hasOwnProperty.call($,Z)}var fj4,yU$=($)=>{return fj4.test($)},KX=($)=>(KX=Array.isArray,KX($)),$a0,hU$=($,Z)=>{if(typeof Z!=="number"||!Number.isInteger(Z))throw new H1(`${$} must be an integer`);if(Z<0)throw new H1(`${$} must be a positive integer`);return Z},Jt=($)=>{try{return JSON.parse($)}catch(Z){return}};var p3=w(()=>{E5();fj4=/^[a-z][a-z0-9+.-]*:/i,$a0=KX});var n3=($,Z)=>new Promise((X)=>{if(Z?.aborted)return X();let Q=()=>{clearTimeout(Y),X()},Y=setTimeout(()=>{Z?.removeEventListener("abort",Q),X()},$);Z?.addEventListener("abort",Q,{once:!0})});var NJ="0.105.0";function bj4(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}function yj4(){if(typeof navigator>"u"||!navigator)return null;let $=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Z,pattern:X}of $){let Q=X.exec(navigator.userAgent);if(Q){let Y=Q[1]||0,G=Q[2]||0,J=Q[3]||0;return{browser:Z,version:`${Y}.${G}.${J}`}}}return null}var dU$=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},xj4=()=>{let $=bj4();if($==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":cU$(Deno.build.os),"X-Stainless-Arch":uU$(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if($==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":cU$(globalThis.process.platform??"unknown"),"X-Stainless-Arch":uU$(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Z=yj4();if(Z)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Z.browser}`,"X-Stainless-Runtime-Version":Z.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},uU$=($)=>{if($==="x32")return"x32";if($==="x86_64"||$==="x64")return"x64";if($==="arm")return"arm";if($==="aarch64"||$==="arm64")return"arm64";if($)return`other:${$}`;return"unknown"},cU$=($)=>{if($=$.toLowerCase(),$.includes("ios"))return"iOS";if($==="android")return"Android";if($==="darwin")return"MacOS";if($==="win32")return"Windows";if($==="freebsd")return"FreeBSD";if($==="openbsd")return"OpenBSD";if($==="linux")return"Linux";if($)return`Other:${$}`;return"Unknown"},lU$,Wt=()=>{return lU$??(lU$=xj4())};var TD0=()=>{};function mU$(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Xa0(...$){let Z=globalThis.ReadableStream;if(typeof Z>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Z(...$)}function RD0($){let Z=Symbol.asyncIterator in $?$[Symbol.asyncIterator]():$[Symbol.iterator]();return Xa0({start(){},async pull(X){let{done:Q,value:Y}=await Z.next();if(Q)X.close();else X.enqueue(Y)},async cancel(){await Z.return?.()}})}function Kt($){if($[Symbol.asyncIterator])return $;let Z=$.getReader();return{async next(){try{let X=await Z.read();if(X?.done)Z.releaseLock();return X}catch(X){throw Z.releaseLock(),X}},async return(){let X=Z.cancel();return Z.releaseLock(),await X,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function iU$($){if($===null||typeof $!=="object")return;if($[Symbol.asyncIterator]){await $[Symbol.asyncIterator]().return?.();return}let Z=$.getReader(),X=Z.cancel();Z.releaseLock(),await X}var pU$=({headers:$,body:Z})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Z)}};var Qa0="RFC3986",Ya0=($)=>String($),Ga0,nU$="RFC1738";var Ja0=w(()=>{Ga0={RFC1738:($)=>String($).replace(/%20/g,"+"),RFC3986:Ya0}});function oU$($){if(!$||typeof $!=="object")return!1;return!!($.constructor&&$.constructor.isBuffer&&$.constructor.isBuffer($))}function Ka0($,Z){if(KX($)){let X=[];for(let Q=0;Q<$.length;Q+=1)X.push(Z($[Q]));return X}return Z($)}var ID0=($,Z)=>(ID0=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),ID0($,Z)),fK,Wa0=1024,tU$=($,Z,X,Q,Y)=>{if($.length===0)return $;let G=$;if(typeof $==="symbol")G=Symbol.prototype.toString.call($);else if(typeof $!=="string")G=String($);if(X==="iso-8859-1")return escape(G).replace(/%u[0-9a-f]{4}/gi,function(W){return"%26%23"+parseInt(W.slice(2),16)+"%3B"});let J="";for(let W=0;W<G.length;W+=Wa0){let K=G.length>=Wa0?G.slice(W,W+Wa0):G,H=[];for(let F=0;F<K.length;++F){let N=K.charCodeAt(F);if(N===45||N===46||N===95||N===126||N>=48&&N<=57||N>=65&&N<=90||N>=97&&N<=122||Y===nU$&&(N===40||N===41)){H[H.length]=K.charAt(F);continue}if(N<128){H[H.length]=fK[N];continue}if(N<2048){H[H.length]=fK[192|N>>6]+fK[128|N&63];continue}if(N<55296||N>=57344){H[H.length]=fK[224|N>>12]+fK[128|N>>6&63]+fK[128|N&63];continue}F+=1,N=65536+((N&1023)<<10|K.charCodeAt(F)&1023),H[H.length]=fK[240|N>>18]+fK[128|N>>12&63]+fK[128|N>>6&63]+fK[128|N&63]}J+=H.join("")}return J};var rU$=w(()=>{Ja0();p3();fK=(()=>{let $=[];for(let Z=0;Z<256;++Z)$.push("%"+((Z<16?"0":"")+Z.toString(16)).toUpperCase());return $})()});function uj4($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"||typeof $==="symbol"||typeof $==="bigint"}function $O$($,Z,X,Q,Y,G,J,W,K,H,F,N,U,O,B,D,L,E){let j=$,z=E,A=0,P=!1;while((z=z.get(Ha0))!==void 0&&!P){let l=z.get($);if(A+=1,typeof l<"u")if(l===A)throw RangeError("Cyclic object value");else P=!0;if(typeof z.get(Ha0)>"u")A=0}if(typeof H==="function")j=H(Z,j);else if(j instanceof Date)j=U?.(j);else if(X==="comma"&&KX(j))j=Ka0(j,function(l){if(l instanceof Date)return U?.(l);return l});if(j===null){if(G)return K&&!D?K(Z,NZ.encoder,L,"key",O):Z;j=""}if(uj4(j)||oU$(j)){if(K){let l=D?Z:K(Z,NZ.encoder,L,"key",O);return[B?.(l)+"="+B?.(K(j,NZ.encoder,L,"value",O))]}return[B?.(Z)+"="+B?.(String(j))]}let I=[];if(typeof j>"u")return I;let k;if(X==="comma"&&KX(j)){if(D&&K)j=Ka0(j,K);k=[{value:j.length>0?j.join(",")||null:void 0}]}else if(KX(H))k=H;else{let l=Object.keys(j);k=F?l.sort(F):l}let q=W?String(Z).replace(/\./g,"%2E"):String(Z),C=Q&&KX(j)&&j.length===1?q+"[]":q;if(Y&&KX(j)&&j.length===0)return C+"[]";for(let l=0;l<k.length;++l){let f=k[l],x=typeof f==="object"&&typeof f.value<"u"?f.value:j[f];if(J&&x===null)continue;let n=N&&W?f.replace(/\./g,"%2E"):f,u=KX(j)?typeof X==="function"?X(C,n):C:C+(N?"."+n:"["+n+"]");E.set($,A);let a=new WeakMap;a.set(Ha0,E),eU$(I,$O$(x,u,X,Q,Y,G,J,W,X==="comma"&&D&&KX(j)?null:K,H,F,N,U,O,B,D,L,a))}return I}function cj4($=NZ){if(typeof $.allowEmptyArrays<"u"&&typeof $.allowEmptyArrays!=="boolean")throw TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof $.encodeDotInKeys<"u"&&typeof $.encodeDotInKeys!=="boolean")throw TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if($.encoder!==null&&typeof $.encoder<"u"&&typeof $.encoder!=="function")throw TypeError("Encoder has to be a function.");let Z=$.charset||NZ.charset;if(typeof $.charset<"u"&&$.charset!=="utf-8"&&$.charset!=="iso-8859-1")throw TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let X=Qa0;if(typeof $.format<"u"){if(!ID0(Ga0,$.format))throw TypeError("Unknown format option provided.");X=$.format}let Q=Ga0[X],Y=NZ.filter;if(typeof $.filter==="function"||KX($.filter))Y=$.filter;let G;if($.arrayFormat&&$.arrayFormat in sU$)G=$.arrayFormat;else if("indices"in $)G=$.indices?"indices":"repeat";else G=NZ.arrayFormat;if("commaRoundTrip"in $&&typeof $.commaRoundTrip!=="boolean")throw TypeError("`commaRoundTrip` must be a boolean, or absent");let J=typeof $.allowDots>"u"?!!$.encodeDotInKeys===!0?!0:NZ.allowDots:!!$.allowDots;return{addQueryPrefix:typeof $.addQueryPrefix==="boolean"?$.addQueryPrefix:NZ.addQueryPrefix,allowDots:J,allowEmptyArrays:typeof $.allowEmptyArrays==="boolean"?!!$.allowEmptyArrays:NZ.allowEmptyArrays,arrayFormat:G,charset:Z,charsetSentinel:typeof $.charsetSentinel==="boolean"?$.charsetSentinel:NZ.charsetSentinel,commaRoundTrip:!!$.commaRoundTrip,delimiter:typeof $.delimiter>"u"?NZ.delimiter:$.delimiter,encode:typeof $.encode==="boolean"?$.encode:NZ.encode,encodeDotInKeys:typeof $.encodeDotInKeys==="boolean"?$.encodeDotInKeys:NZ.encodeDotInKeys,encoder:typeof $.encoder==="function"?$.encoder:NZ.encoder,encodeValuesOnly:typeof $.encodeValuesOnly==="boolean"?$.encodeValuesOnly:NZ.encodeValuesOnly,filter:Y,format:X,formatter:Q,serializeDate:typeof $.serializeDate==="function"?$.serializeDate:NZ.serializeDate,skipNulls:typeof $.skipNulls==="boolean"?$.skipNulls:NZ.skipNulls,sort:typeof $.sort==="function"?$.sort:null,strictNullHandling:typeof $.strictNullHandling==="boolean"?$.strictNullHandling:NZ.strictNullHandling}}function ZO$($,Z={}){let X=$,Q=cj4(Z),Y,G;if(typeof Q.filter==="function")G=Q.filter,X=G("",X);else if(KX(Q.filter))G=Q.filter,Y=G;let J=[];if(typeof X!=="object"||X===null)return"";let W=sU$[Q.arrayFormat],K=W==="comma"&&Q.commaRoundTrip;if(!Y)Y=Object.keys(X);if(Q.sort)Y.sort(Q.sort);let H=new WeakMap;for(let U=0;U<Y.length;++U){let O=Y[U];if(Q.skipNulls&&X[O]===null)continue;eU$(J,$O$(X[O],O,W,K,Q.allowEmptyArrays,Q.strictNullHandling,Q.skipNulls,Q.encodeDotInKeys,Q.encode?Q.encoder:null,Q.filter,Q.sort,Q.allowDots,Q.serializeDate,Q.format,Q.formatter,Q.encodeValuesOnly,Q.charset,H))}let F=J.join(Q.delimiter),N=Q.addQueryPrefix===!0?"?":"";if(Q.charsetSentinel)if(Q.charset==="iso-8859-1")N+="utf8=%26%2310003%3B&";else N+="utf8=%E2%9C%93&";return F.length>0?N+F:""}var sU$,eU$=function($,Z){Array.prototype.push.apply($,KX(Z)?Z:[Z])},aU$,NZ,Ha0;var XO$=w(()=>{rU$();Ja0();p3();sU$={brackets($){return String($)+"[]"},comma:"comma",indices($,Z){return String($)+"["+Z+"]"},repeat($){return String($)}},NZ={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:tU$,encodeValuesOnly:!1,format:Qa0,formatter:Ya0,indices:!1,serializeDate($){return(aU$??(aU$=Function.prototype.call.bind(Date.prototype.toISOString)))($)},skipNulls:!1,strictNullHandling:!1};Ha0={}});function QO$($){return ZO$($,{arrayFormat:"brackets"})}var Fa0=w(()=>{XO$()});function MD0($){if(!$)return;let Z;try{Z=new URL($)}catch(Q){throw new A6(`Invalid token endpoint base URL "${$}": ${Q}`)}if(Z.protocol==="https:")return;let X=Z.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Z.protocol==="http:"&&(X==="localhost"||X==="127.0.0.1"||X==="::1"))return;throw new A6(`Refusing to send credential over non-https token endpoint "${$}"`)}async function kD0($,Z){let X=await mj4($),Q;try{Q=JSON.parse(X)}catch{throw new A6(`Token endpoint returned non-JSON response (status ${$.status})`,$.status,oQ(X),Z)}if(!Q.access_token)throw new A6(`Token endpoint response missing access_token: ${JSON.stringify(oQ(Q))}`,$.status,oQ(Q),Z);if(Q.token_type&&Q.token_type.toLowerCase()!=="bearer")throw new A6(`Token endpoint response: unsupported token_type "${Q.token_type}" (want Bearer)`,$.status,oQ(Q),Z);return Q}function oQ($){if($==null)return $;if(typeof $==="string"){let Z;try{Z=JSON.parse($)}catch{if($.length<=Na0)return $;return $.slice(0,Na0)+`... <${$.length-Na0} more chars>`}return JSON.stringify(oQ(Z))}if(typeof $==="object"&&!Array.isArray($)){let Z={};for(let[X,Q]of Object.entries($))if(dj4.has(X))Z[X]=Q;return Z}return null}async function VD0($,Z=(X)=>console.warn(`anthropic-sdk: ${X}`)){if(typeof process>"u"||process.platform==="win32")return;let X=await import("fs"),Q=$,Y;try{Q=await X.promises.realpath($),Y=await X.promises.stat(Q)}catch{return}let G=Y.mode&511;if(G&18)throw new A6(`Credentials file at ${Q} is group/world-writable (mode 0o${G.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${Q}\`.`);if(G&36)throw new A6(`Credentials file at ${Q} is group/world-readable (mode 0o${G.toString(8)}); run \`chmod 600 ${Q}\` before retrying.`);if(typeof process.getuid==="function"&&Y.uid!==process.getuid())Z(`credentials file at ${Q} is owned by uid ${Y.uid} (current process uid ${process.getuid()}); verify this is intentional.`)}async function SD0($,Z){let X=await import("fs"),Y=(await import("path")).dirname($);await X.promises.mkdir(Y,{recursive:!0,mode:448});let G=`${$}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;try{let J=await X.promises.open(G,"w",384);try{await J.writeFile(JSON.stringify(Z,null,2)),await J.sync()}finally{await J.close()}await X.promises.rename(G,$)}catch(J){throw await X.promises.unlink(G).catch(()=>{}),J}try{let J=await X.promises.open(Y,"r");try{await J.sync()}finally{await J.close()}}catch{}}async function mj4($){if(!$.body)return"";let Z=$.body.getReader(),X=[],Q=0;for(;;){let{done:G,value:J}=await Z.read();if(G)break;if(Q+J.length>YO$){let W=YO$-Q;if(W>0)X.push(J.subarray(0,W));await Z.cancel();break}X.push(J),Q+=J.length}let Y;if(X.length===1)Y=X[0];else{Y=new Uint8Array(X.reduce((J,W)=>J+W.length,0));let G=0;for(let J of X)Y.set(J,G),G+=J.length}return new TextDecoder("utf-8").decode(Y)}var GO$="urn:ietf:params:oauth:grant-type:jwt-bearer",JO$="refresh_token",qD0="/v1/oauth/token",MC="oauth-2025-04-20",WO$="oidc-federation-2026-04-01",KO$=120,Zg=30,HO$=5,YO$=1048576,Na0=2000,dj4,A6;var Xg=w(()=>{E5();dj4=new Set(["error","error_description","error_uri"]);A6=class A6 extends H1{constructor($,Z=null,X=null,Q=null){super($);this.statusCode=Z,this.body=X,this.requestId=Q}}});function t3(){return Math.floor(Date.now()/1000)}class Ua0{constructor($,Z){this.cached=null,this.pendingRefresh=null,this.nextForce=!1,this.lastAdvisoryError=0,this.provider=$,this.onAdvisoryRefreshError=Z}async getToken(){let $=this.nextForce;this.nextForce=!1;let Z=this.cached;if($||Z==null)return(await this.refresh($)).token;if(Z.expiresAt==null)return Z.token;let X=Z.expiresAt-t3();if(X>KO$)return Z.token;if(X>Zg)return this.backgroundRefresh(),Z.token;return(await this.refresh()).token}invalidate(){this.cached=null,this.nextForce=!0}refresh($=!1){if(this.pendingRefresh&&!$)return this.pendingRefresh;return this.doRefresh($)}backgroundRefresh(){if(this.pendingRefresh)return;if(t3()-this.lastAdvisoryError<HO$)return;this.doRefresh().catch(($)=>{this.lastAdvisoryError=t3(),this.onAdvisoryRefreshError?.($)})}doRefresh($=!1){return this.pendingRefresh=this.provider($?{forceRefresh:!0}:void 0).then((Z)=>{return this.cached=Z,this.pendingRefresh=null,Z},(Z)=>{throw this.pendingRefresh=null,Z}),this.pendingRefresh}}var FO$=w(()=>{Xg()});var a8=($)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[$]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.($)?.trim()||void 0;return};function OO$($){let Z=0;for(let Y of $)Z+=Y.length;let X=new Uint8Array(Z),Q=0;for(let Y of $)X.set(Y,Q),Q+=Y.length;return X}function Qg($){let Z;return(NO$??(Z=new globalThis.TextEncoder,NO$=Z.encode.bind(Z)))($)}function Oa0($){let Z;return(UO$??(Z=new globalThis.TextDecoder,UO$=Z.decode.bind(Z)))($)}var NO$,UO$;var BO$=w(()=>{E5()});function Ht(){}function CD0($,Z,X){if(!Z||_D0[$]>_D0[X])return Ht;else return Z[$].bind(Z)}function wa0($,Z){let X=wO$.get($);if(X&&X[0]===Z)return X[1];let Q={error:CD0("error",$,Z),warn:CD0("warn",$,Z),info:CD0("info",$,Z),debug:CD0("debug",$,Z)};return wO$.set($,[Z,Q]),Q}function x4($){let Z=$.logger,X=$.logLevel??"off";if(!Z)return ij4;return wa0(Z,X)}function LO$(){let $=a8("ANTHROPIC_LOG");if(!Ba0||$!==DO$)DO$=$,Ba0=wa0(console,vD0($,"process.env['ANTHROPIC_LOG']",wa0(console,Ft))??Ft);return Ba0}var Ft="warn",_D0,vD0=($,Z,X)=>{if(!$)return;if(gU$(_D0,$))return $;X.warn(`${Z} was set to ${JSON.stringify($)}, expected one of ${JSON.stringify(Object.keys(_D0))}`);return},ij4,wO$,DO$,Ba0,bK=($)=>{if($.options)$.options={...$.options},delete $.options.headers;if($.headers)$.headers=Object.fromEntries(($.headers instanceof Headers?[...$.headers]:Object.entries($.headers)).map(([Z,X])=>[Z,Z.toLowerCase()==="authorization"||Z.toLowerCase()==="api-key"||Z.toLowerCase()==="x-api-key"||Z.toLowerCase()==="cookie"||Z.toLowerCase()==="set-cookie"?"***":X]));if("retryOfRequestLogID"in $){if($.retryOfRequestLogID)$.retryOf=$.retryOfRequestLogID;delete $.retryOfRequestLogID}return $};var xK=w(()=>{p3();_D0={off:0,error:200,warn:300,info:400,debug:500};ij4={error:Ht,warn:Ht,info:Ht,debug:Ht},wO$=new WeakMap});var Da0=w(()=>{p3();BO$();xK();Fa0()});function EO$($){if(!$)throw Error("profile name is empty");if($==="."||$==="..")throw Error(`profile name "${$}" is not allowed`);if($.includes("/")||$.includes("\\"))throw Error(`profile name "${$}" must not contain path separators`);if(!pj4.test($))throw Error(`profile name "${$}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var fD0="1.0",pj4,jO$=async($)=>{var Z,X;let Q=await La0();if(Q===null)return null;let Y=$??await PO$();if(Y===null)return null;EO$(Y);let G=await import("fs"),W=(await import("path")).join(Q,"configs",`${Y}.json`),K;try{K=await G.promises.readFile(W,"utf-8")}catch(N){if(N?.code!=="ENOENT")throw Error(`failed to read config file ${W}: ${N}`);K=null}if(K===null){let N=a8("ANTHROPIC_ORGANIZATION_ID"),U=a8("ANTHROPIC_IDENTITY_TOKEN_FILE"),O=a8("ANTHROPIC_FEDERATION_RULE_ID");if(O&&N)return{fromFile:!1,config:{organization_id:N,workspace_id:a8("ANTHROPIC_WORKSPACE_ID"),base_url:a8("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:O,service_account_id:a8("ANTHROPIC_SERVICE_ACCOUNT_ID"),identity_token:U?{source:"file",path:U}:void 0,scope:a8("ANTHROPIC_SCOPE")}}};return null}let H;try{H=JSON.parse(K)}catch(N){throw Error(`failed to parse config file ${W}: ${N}`)}if(!H.authentication)throw Error(`config file ${W} is missing "authentication"`);let F=H.authentication.type;if(F!=="oidc_federation"&&F!=="user_oauth")throw Error(`authentication.type "${F}" is not a known authentication type`);if(H.organization_id??(H.organization_id=a8("ANTHROPIC_ORGANIZATION_ID")),H.workspace_id??(H.workspace_id=a8("ANTHROPIC_WORKSPACE_ID")),H.base_url??(H.base_url=a8("ANTHROPIC_BASE_URL")),(Z=H.authentication).scope??(Z.scope=a8("ANTHROPIC_SCOPE")),H.authentication.type==="oidc_federation"){if(!H.authentication.identity_token){let N=a8("ANTHROPIC_IDENTITY_TOKEN_FILE");if(N)H.authentication.identity_token={source:"file",path:N}}if(!H.authentication.federation_rule_id)H.authentication.federation_rule_id=a8("ANTHROPIC_FEDERATION_RULE_ID")??"";(X=H.authentication).service_account_id??(X.service_account_id=a8("ANTHROPIC_SERVICE_ACCOUNT_ID"))}return{config:H,fromFile:!0}},zO$=async($,Z)=>{if($?.authentication.credentials_path)return $.authentication.credentials_path;let X=await La0();if(!X)return null;let Q=Z??await PO$();if(!Q)return null;return EO$(Q),(await import("path")).join(X,"credentials",`${Q}.json`)},La0=async()=>{if(!nj4())return null;let $=await import("path"),Z=a8("ANTHROPIC_CONFIG_DIR");if(Z)return Z;if(Wt()["X-Stainless-OS"]==="Windows"){let G=a8("APPDATA");if(G)return $.join(G,"Anthropic");let J=a8("USERPROFILE");if(J)return $.join(J,"AppData","Roaming","Anthropic");return null}let Q=a8("XDG_CONFIG_HOME");if(Q)return $.join(Q,"anthropic");let Y=a8("HOME");if(Y)return $.join(Y,".config","anthropic");return null},nj4=()=>{let $=Wt()["X-Stainless-Runtime"];return $==="node"||$==="deno"},PO$=async()=>{let $=await La0();if(!$)return null;let Z=a8("ANTHROPIC_PROFILE");if(Z)return Z;let X=await import("fs"),Y=(await import("path")).join($,"active_config");try{return(await X.promises.readFile(Y,"utf-8")).trim()||"default"}catch(G){if(G?.code!=="ENOENT")throw Error(`failed to read ${Y}: ${G}`);return"default"}};var Ea0=w(()=>{TD0();Da0();pj4=/^[A-Za-z0-9_.-]+$/});function ja0($){if(!$)throw new H1("Identity token file path is empty");return async()=>{let Z=await import("fs"),X;try{X=await Z.promises.readFile($,"utf-8")}catch(Y){throw new H1(`Failed to read identity token file at ${$}: ${Y}`)}let Q=X.trim();if(!Q)throw new H1(`Identity token file at ${$} is empty`);return Q}}function AO$($){if(!$)throw new H1("Identity token value is empty");return()=>$}var TO$=w(()=>{E5()});function RO$($){return async()=>{MD0($.baseURL);let Z=await $.identityTokenProvider();if(Z.length>16384)throw new A6(`Identity token is ${Math.ceil(Z.length/1024)} KiB, exceeds the 16 KiB assertion limit`);let X={grant_type:GO$,assertion:Z,federation_rule_id:$.federationRuleId,organization_id:$.organizationId};if($.serviceAccountId)X.service_account_id=$.serviceAccountId;if($.workspaceId)X.workspace_id=$.workspaceId;let Q=`${$.baseURL}${qD0}`,Y;try{Y=await $.fetch(Q,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${MC},${WO$}`,"User-Agent":$.userAgent||`anthropic-sdk-typescript/${NJ} oidcFederationProvider`},body:JSON.stringify(X)})}catch(K){throw new A6(`Failed to reach token endpoint ${Q}: ${K}`)}let G=Y.headers.get("Request-Id");if(!Y.ok){let K=await Y.text().catch(()=>""),H=oQ(K),F="";if(Y.status===401)F=` Ensure your federation rule matches your identity token. ${$.workspaceId?"":"If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "}View your authentication events in the Workload identity page of Claude Console for more details.`;throw new A6(`Token exchange failed with status ${Y.status}${G?` (request-id ${G})`:""}: ${H}${F}`,Y.status,H,G)}let J=await kD0(Y,G),W=Number(J.expires_in);if(!Number.isFinite(W))throw new A6(`Token endpoint response missing required fields: ${JSON.stringify(oQ(J))}`,Y.status,oQ(J),G);return{token:J.access_token,expiresAt:t3()+W}}}var IO$=w(()=>{Xg()});function qO$($){return async(Z)=>{let X=await import("fs");await VD0($.credentialsPath,$.onSafetyWarning);let Q;try{Q=await X.promises.readFile($.credentialsPath,"utf-8")}catch(L){throw new A6(`Credentials file not found at ${$.credentialsPath}: ${L}`)}let Y;try{Y=JSON.parse(Q)}catch(L){throw new A6(`Credentials file at ${$.credentialsPath} is not valid JSON: ${L}`)}let G=Y.access_token;if(!G)throw new A6(`Credentials file at ${$.credentialsPath} must include 'access_token'`);let J=Y.expires_at;if(!Z?.forceRefresh&&(J==null||t3()<J-Zg))return{token:G,expiresAt:J??null};let W=Y.refresh_token;if(!$.clientId||!W)throw new A6(`Access token at ${$.credentialsPath} has expired and no refresh is available (client_id ${$.clientId?"set":"empty"}, refresh_token ${W?"set":"empty"})`);MD0($.baseURL);let K={grant_type:JO$,refresh_token:W,client_id:$.clientId},H=`${$.baseURL}${qD0}`,F;try{F=await $.fetch(H,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":MC,"User-Agent":$.userAgent||`anthropic-sdk-typescript/${NJ} userOAuthProvider`},body:JSON.stringify(K)})}catch(L){throw new A6(`User OAuth refresh failed to reach token endpoint: ${L}`)}let N=F.headers.get("Request-Id");if(!F.ok){let L=await F.text().catch(()=>"");throw new A6(`User OAuth refresh failed (HTTP ${F.status}): ${oQ(L)}`,F.status,oQ(L),N)}let U=await kD0(F,N),O=Number(U.expires_in);if(!Number.isFinite(O))throw new A6(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(oQ(U))}`,F.status,oQ(U),N);let B=t3()+O,D=U.refresh_token||W;return await SD0($.credentialsPath,{...Y,version:fD0,type:"oauth_token",access_token:U.access_token,expires_at:B,refresh_token:D}),{token:U.access_token,expiresAt:B}}}var MO$=w(()=>{Ea0();Xg()});function za0($,Z){let X=$.authentication.credentials_path??null,Q=($.base_url||Z.baseURL).replace(/\/+$/,""),Y=tj4($,X,Q,Z),G={};if($.workspace_id&&$.authentication.type==="user_oauth")G["anthropic-workspace-id"]=$.workspace_id;return{provider:Y,extraHeaders:G,baseURL:$.base_url||void 0}}async function kO$($,Z){let X=await jO$(Z);if(!X)return null;let{config:Q,fromFile:Y}=X,G=Q.authentication.credentials_path||!Y?Q:{...Q,authentication:{...Q.authentication,credentials_path:await zO$(Q,Z)??void 0}};return za0(G,$)}function tj4($,Z,X,Q){switch($.authentication.type){case"oidc_federation":{let Y=$.authentication,G=oj4(Y);if(!G)throw new A6("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)");if(!Y.federation_rule_id)throw new A6("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence).");if(!$.organization_id)throw new A6("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)");let J=RO$({identityTokenProvider:G,federationRuleId:Y.federation_rule_id,organizationId:$.organization_id,serviceAccountId:Y.service_account_id,workspaceId:$.workspace_id,baseURL:X,fetch:Q.fetch,userAgent:Q.userAgent});if(Z)return rj4(J,Z,Q.onCacheWriteError,Q.onSafetyWarning);return J}case"user_oauth":{if(!Z)throw new A6("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to <config_dir>/credentials/<profile>.json)");return qO$({credentialsPath:Z,clientId:$.authentication.client_id,baseURL:X,fetch:Q.fetch,userAgent:Q.userAgent,onSafetyWarning:Q.onSafetyWarning})}default:{let Y=$.authentication.type;throw new A6(`authentication.type "${Y}" is not a known authentication type`)}}}function oj4($){if($.identity_token){let Q=$.identity_token.source;if(Q!=="file")throw new A6(`identity_token.source "${Q}" is not supported by this SDK version (only "file")`);if(!$.identity_token.path)throw new A6('identity_token.source "file" requires a non-empty path');return ja0($.identity_token.path)}let Z=a8("ANTHROPIC_IDENTITY_TOKEN_FILE");if(Z)return ja0(Z);let X=a8("ANTHROPIC_IDENTITY_TOKEN");if(X)return AO$(X);return null}function rj4($,Z,X,Q){return async(Y)=>{let G=await import("fs");await VD0(Z,Q);let J;try{let K=await G.promises.readFile(Z,"utf-8");J=JSON.parse(K);let H=J?.access_token;if(H&&!Y?.forceRefresh){let F=J?.expires_at;if(F==null||t3()<F-Zg)return{token:H,expiresAt:F??null}}}catch(K){if(K?.code!=="ENOENT"&&!(K instanceof SyntaxError))X?.(K)}let W=await $(Y);try{await SD0(Z,{...J??{},version:fD0,type:"oauth_token",access_token:W.token,expires_at:W.expiresAt})}catch(K){X?.(K)}return W}}var VO$=w(()=>{Ea0();Xg();TO$();IO$();MO$()});class yB{constructor(){rY.set(this,void 0),aY.set(this,void 0),o0(this,rY,new Uint8Array,"f"),o0(this,aY,null,"f")}decode($){if($==null)return[];let Z=$ instanceof ArrayBuffer?new Uint8Array($):typeof $==="string"?Qg($):$;o0(this,rY,OO$([d(this,rY,"f"),Z]),"f");let X=[],Q;while((Q=aj4(d(this,rY,"f"),d(this,aY,"f")))!=null){if(Q.carriage&&d(this,aY,"f")==null){o0(this,aY,Q.index,"f");continue}if(d(this,aY,"f")!=null&&(Q.index!==d(this,aY,"f")+1||Q.carriage)){X.push(Oa0(d(this,rY,"f").subarray(0,d(this,aY,"f")-1))),o0(this,rY,d(this,rY,"f").subarray(d(this,aY,"f")),"f"),o0(this,aY,null,"f");continue}let Y=d(this,aY,"f")!==null?Q.preceding-1:Q.preceding,G=Oa0(d(this,rY,"f").subarray(0,Y));X.push(G),o0(this,rY,d(this,rY,"f").subarray(Q.index),"f"),o0(this,aY,null,"f")}return X}flush(){if(!d(this,rY,"f").length)return[];return this.decode(`
1521
+ `+$}function FD0($){if(!$||$.length===0)return[];return $.filter((Z)=>Dj4.test(Z))}function Lj4($){if($.csp)return $.csp;let Z=$.resourceCsp;if(!Z)return OU$;let X=FD0(Z.resourceDomains),Q=FD0(Z.connectDomains),Y=FD0(Z.frameDomains),G=FD0(Z.baseUriDomains),J=X.length>0,W=Q.length>0,K=Y.length>0,H=G.length>0;if(!J&&!W&&!K&&!H)return OU$;let F=X.join(" ");return["default-src 'none'",J?`script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval' ${F}`:"script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'",J?`style-src 'unsafe-inline' ${F}`:"style-src 'unsafe-inline'",J?`img-src * data: blob: ${F}`:"img-src * data: blob:",J?`media-src * data: blob: ${F}`:"media-src * data: blob:",J?`font-src data: ${F}`:"font-src data:",W?`connect-src ${Q.join(" ")}`:"connect-src 'none'",K?`frame-src ${Y.join(" ")}`:"frame-src 'none'","worker-src blob:","form-action 'none'",H?`base-uri ${G.join(" ")}`:"base-uri 'none'"].join("; ")}var OU$,Dj4;var wU$=w(()=>{OU$=["default-src 'none'","script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'","style-src 'unsafe-inline'","img-src * data: blob:","media-src * data: blob:","font-src data:","connect-src 'none'","frame-src 'none'","worker-src blob:","form-action 'none'","base-uri 'none'"].join("; ");Dj4=/^https?:\/\/(\*\.)?[a-zA-Z0-9._-]+(:\d+)?\/?$/});function Ej4($){let Z=$.lastFailureAt-$.firstFailureAt;return $.count>=Cy1&&Z>=_y1}class yr0{options;kv=null;codec=g50();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new LU$.Kvm($).create(jj4,{storage:DU$.StorageType.Memory,ttl:EU$.nanos(vy1)})}async recordFailure($){if(!this.kv)return xr0;let Z=Date.now();for(let X=0;X<zj4;X++)try{let Q=await this.kv.get($);if(!(Q&&Q.operation!=="DEL"&&Q.operation!=="PURGE"&&Q.value?.length)){let W={count:1,firstFailureAt:Z,lastFailureAt:Z};return await this.kv.create($,this.codec.encode(W)),{count:W.count,shouldDisable:!1}}let G=this.codec.decode(Q.value),J={count:G.count+1,firstFailureAt:G.firstFailureAt,lastFailureAt:Z};return await this.kv.update($,this.codec.encode(J),Q.revision),{count:J.count,shouldDisable:Ej4(J)}}catch{}return xr0}async recordSuccess($){if(!this.kv)return;try{await this.kv.delete($)}catch{}}teardown(){this.kv=null}}class tn{async recordFailure(){return xr0}async recordSuccess(){}teardown(){}}function gr0($){jU$=$??new tn}function hr0(){return jU$}var DU$,LU$,EU$,xr0,jj4="DECOCMS_CONN_CIRCUIT",zj4=5,jU$;var ur0=w(()=>{DU$=V(uw(),1),LU$=V(Kc0(),1),EU$=V(_u(),1),xr0={count:0,shouldDisable:!1};jU$=new tn});function zU$($){if(!$)return{decision:"skip"};if($.startsWith("notifications/"))return{decision:"skip"};if(Aj4.has($))return{decision:"skip"};let Z=Pj4[$];if(Z)return{decision:"skip-if-list-cached",listType:Z};return{decision:"probe"}}async function PU$($){if($.method!=="POST")return;let Z=$.headers.get("content-length");if(Z&&Number(Z)>Tj4)return;try{let X=await $.clone().json(),Y=(Array.isArray(X)?X[0]:X)?.method;return typeof Y==="string"?Y:void 0}catch{return}}var Pj4,Aj4,Tj4=64000;var AU$=w(()=>{Pj4={"tools/list":"tools","resources/list":"resources","prompts/list":"prompts"},Aj4=new Set(["ping"])});import{SpanStatusCode as ND0}from"@opentelemetry/api";async function UD0($,Z){let X=$.get("studioContext");try{let Q=X.organization?.id??null,Y=Z?Z:Q?tD(Q):null;if(!Y)return $.json({error:"Agent ID or organization ID is required"},400);if(Z&&!Q)return $.json({error:"Organization context is required"},400);let G=await X.tracer.startActiveSpan("studio.virtual_mcp.lookup",{attributes:{"virtual_mcp.id":Y}},async(U)=>{try{let O=await X.storage.virtualMcps.findById(Y,Q??void 0);return U.setStatus({code:ND0.OK}),O}catch(O){throw U.setStatus({code:ND0.ERROR,message:O.message}),U.recordException(O),O}finally{U.end()}});if(!G)return $.json({error:"Agent not found"},404);if(Q&&G.organization_id!==Q)return $.json({error:"Agent not found"},404);if(G.status!=="active")return $.json({error:`Agent is inactive: ${G.id??"Decopilot"}`},503);if(X.organization?.id&&G.organization_id!==X.organization.id)return $.json({error:"Forbidden: Agent does not belong to your organization"},403);X.connectionId=G.id??void 0;let J=G1(X),W=null;if(G.id&&J&&w5(G.metadata)[J])W=await jC(X,G.id,J,$.req.query("branch")??void 0).catch(()=>null);let K=await X.tracer.startActiveSpan("studio.virtual_mcp.create_client",{attributes:{"virtual_mcp.id":G.id??"decopilot"}},async(U)=>{try{let O=await hF(G,X,!1,{includeSkillsCatalog:!0,additionalConnections:W?[W]:[]});return U.setStatus({code:ND0.OK}),O}catch(O){throw U.setStatus({code:ND0.ERROR,message:O.message}),U.recordException(O),O}finally{U.end()}}),H={name:G.id??"Decopilot",version:"1.0.0",title:G.title??void 0,description:G.description??void 0,icons:G.icon?[{src:G.icon}]:void 0},F=dD(K,H,{capabilities:{tools:{},resources:{},prompts:{}},instructions:K.getInstructions(),toolCallTimeoutMs:Zb}),N=new ZQ({enableJsonResponse:$.req.header("Accept")?.includes("application/json")??!1});return await F.connect(N),await HJ(F,N,$.req.raw,`virtual-mcp:${G.id??"decopilot"}`,{onClose:()=>K.close()})}catch(Q){let Y=Q;return console.error("[virtual-mcp] Error handling virtual MCP request:",Y),$.json({error:"Internal server error",message:Y.message},500)}}var OD0=()=>{let $=new F1;return $.all("/gateway/:virtualMcpId?",async(Z)=>{let X=Z.req.param("virtualMcpId")||Z.req.header("x-virtual-mcp-id");return UD0(Z,X)}),$.all("/virtual-mcp/:virtualMcpId?",async(Z)=>{let X=Z.req.param("virtualMcpId")||Z.req.header("x-virtual-mcp-id");return UD0(Z,X)}),$};var BD0=w(()=>{vX();P8();IC();w8();Ty();Mw0();iX();oy()});import{SpanStatusCode as wD0}from"@opentelemetry/api";var TU$=($,Z)=>{if($ instanceof Wx)return Z.header("Retry-After",String(Math.ceil($.cooldownRemainingMs/1000))),Z.json({error:$.message},503);if($.message.includes("not found"))return Z.json({error:$.message},404);if($.message.includes("does not belong to the active organization"))return Z.json({error:"Connection not found"},404);if($.message.includes("inactive"))return Z.json({error:$.message},503);return Z.json({error:"Internal server error",message:$.message},500)},DD0=()=>{let $=new F1;return $.all("/",async(Z)=>{return UD0(Z,void 0)}),$.get("/:connectionId/ui-resource",async(Z)=>{let X=Z.get("studioContext"),Q=Z.req.param("connectionId"),Y=Z.req.query("uri");if(!Y)return Z.json({error:"uri query param is required"},400);if(!X.organization?.id)return Z.json({error:"Organization context is required"},403);let G=ax0(Q),J;if(G){let O=G1(X);if(!O)return Z.json({error:"Authentication required"},401);if(J=await jC(X,G,O,Z.req.query("branch")??void 0),!J)return Z.json({error:"Dev server not running"},503)}else if(J=await X.storage.connections.findById(Q,X.organization.id),!J||J.organization_id!==X.organization.id)return Z.json({error:"Connection not found"},404);let W=VO(J,X,!1,Z9()??void 0),K,H;try{let B=(await W.readResource({uri:Y})).contents?.[0];K=B?.text,H=B?._meta?.ui?.csp}catch(O){return Z.json({error:O.message},502)}finally{await W.close().catch(()=>{})}if(typeof K!=="string")return Z.json({error:"Resource has no text content"},404);let F=BU$(K,{resourceCsp:H}),N=`"${Bun.hash(F).toString(36)}"`,U="private, no-cache";if(Z.req.header("if-none-match")===N)return new Response(null,{status:304,headers:{ETag:N,"Cache-Control":U}});return new Response(F,{headers:{"Content-Type":"text/html; charset=utf-8",ETag:N,"Cache-Control":U}})}),$.all("/:connectionId",async(Z)=>{let X=Z.req.param("connectionId"),Q=Z.get("studioContext");if(X.endsWith("_self")){let J=X.slice(0,-5);if(!Q.organization||Q.organization.id!==J)return Z.json({error:"Connection not found"},404);let W=await ry(Q),K=new ZQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await W.connect(K),rF.run(Q,()=>HJ(W,K,Z.req.raw,`mcp:self:${X}`))}let Y=ax0(X);if(Y){if(!Q.organization?.id)return Z.json({error:"Organization context is required"},403);let J=G1(Q);if(!J)return Z.json({error:"Authentication required"},401);let W=await jC(Q,Y,J,Z.req.query("branch")??void 0);if(!W)return Z.json({error:"Dev server not running"},503);let K=l50(W,Q,!1),H=new ZQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await K.connect(H),HJ(K,H,Z.req.raw,`mcp:dev:${X}`)}let G=null;try{try{if(!Q.organization?.id)return Z.json({error:"Organization context is required"},403);if(G=await Q.tracer.startActiveSpan("studio.connection.lookup",{attributes:{"connection.id":X}},async(D)=>{KJ(Z,"mcp.find_connection");try{let L=await Q.storage.connections.findById(X,Q.organization.id);return D.setStatus({code:wD0.OK}),L}catch(L){throw D.setStatus({code:wD0.ERROR,message:L.message}),D.recordException(L),L}finally{oY(Z,"mcp.find_connection"),D.end()}}),!G)throw Error("Connection not found");let J=G;if(J.organization_id!==Q.organization.id)throw Error("Connection does not belong to the active organization");let W=!1;if(J.status!=="active"){let D=Date.now()-new Date(J.updated_at).getTime();if(J.status==="error"&&!!J.connection_url&&D>=Zy0)W=!0;else{if(J.status==="error"&&J.connection_url){let E=Zy0-D;Z.header("Retry-After",String(Math.ceil(E/1000)))}throw Error(`Connection inactive: ${J.status}`)}}let K=await PU$(Z.req.raw),{decision:H,listType:F}=zU$(K),N=H==="probe";if(H==="skip-if-list-cached"&&F){let D=Z9();N=D?await D.get(F,X)===null:!0}if(W)N=!0;if(J.connection_url&&N)V60(X),await Q.tracer.startActiveSpan("studio.connection.handshake",{attributes:{"connection.id":X,"connection.url":J.connection_url}},async(D)=>{KJ(Z,"mcp.client_handshake");try{if(await N5(J,Q,!1),S60(X),hr0().recordSuccess(X),W)await Q.storage.connections.update(X,{status:"active"}),console.info("[proxy] auto-recovered connection after successful re-probe",{connectionId:X,org:Q.organization?.slug});D.setStatus({code:wD0.OK})}catch(L){throw D.setStatus({code:wD0.ERROR,message:L.message}),D.recordException(L),L}finally{oY(Z,"mcp.client_handshake"),D.end()}});KJ(Z,"mcp.create_server");let U=l50(J,Q,!1);oY(Z,"mcp.create_server");let O=new ZQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});KJ(Z,"mcp.server_connect"),await U.connect(O),oY(Z,"mcp.server_connect"),KJ(Z,"mcp.handle_request");let B=await HJ(U,O,Z.req.raw,`mcp:${X}`);return oY(Z,"mcp.handle_request"),B}catch(J){if(J instanceof Wx)throw J;if(G??=await Q.storage.connections.findById(X,Q.organization?.id),G?.connection_url){let W=await cr0({error:J,reqUrl:new URL(Z.req.raw.url),connectionId:X,connectionUrl:G.connection_url,headers:{},orgSlug:Q.organization?.slug});if(W)return W;C60(X);let{shouldDisable:K}=await hr0().recordFailure(X);if(K&&G.status==="active")await Q.storage.connections.update(X,{status:"error"}),console.warn("[proxy] auto-disabled connection after sustained failures",{connectionId:X,org:Q.organization?.slug,error:J.message})}throw J}}catch(J){return TU$(J,Z)}}),$.all("/:connectionId/call-tool/:toolName",async(Z)=>{let X=Z.req.param("connectionId"),Q=Z.req.param("toolName"),Y=Z.get("studioContext");if(!Y.organization?.id)return Z.json({error:"Organization context is required"},403);let G=null;try{if(G=await Y.storage.connections.findById(X,Y.organization.id),!G)return Z.json({error:"Connection not found"},404);if(G.organization_id!==Y.organization.id)throw Error("Connection does not belong to the active organization");if(G.status!=="active")throw Error(`Connection inactive: ${G.status}`);let W=await(await N5(G,Y,!1)).callTool({name:Q,arguments:await Z.req.json()});if(W.isError)return new Response(JSON.stringify(W.content),{headers:{"Content-Type":"application/json"},status:500});return new Response(JSON.stringify(W.structuredContent??W.content),{headers:{"Content-Type":"application/json"}})}catch(J){if(G??=await Y.storage.connections.findById(X,Y.organization.id),G?.connection_url){let W=await cr0({error:J,reqUrl:new URL(Z.req.raw.url),connectionId:X,connectionUrl:G.connection_url,headers:{},orgSlug:Y.organization?.slug});if(W)return W}return TU$(J,Z)}}),$};var LD0=w(()=>{NF();IC();w8();br0();_O();oy();on();_Y();zi();wU$();Oh0();ur0();AU$();BD0();Mw0();P8();dr0()});async function bB($,Z,X,Q){if(Z.type!=="event"||!Z.connection_id)return{success:!0};let Y=await $.storage.connections.findById(Z.connection_id);if(!Y)return{success:!0};let G=$.organization?.id,J=$.organization?.slug;try{let W=await N5(Y,$,!0),K=Ec0.forClient(lr0(W)),H,F,N;if(X&&Q&&G){let E=await Q.generateTokenPair();F=E.plaintext,N=E.hash,H=J?`${$.baseUrl}/api/${J}/trigger-callback`:`${$.baseUrl}/api/trigger-callback`}let U=5000,O=!1,B=new Promise((E,j)=>setTimeout(()=>{O=!0,j(Error("TRIGGER_CONFIGURE timeout"))},U)),D;try{D=await Promise.race([K.TRIGGER_CONFIGURE({type:Z.event_type,params:JSON.parse(Z.params??"{}"),enabled:X,callbackUrl:H,callbackToken:F}),B])}catch(E){if(O&&X&&Q&&G&&N)await Q.persistTokenHash(G,Z.connection_id,N);return console.error(`[configureTriggerOnMcp] TRIGGER_CONFIGURE threw on connection=${Z.connection_id} type=${Z.event_type}:`,E),{success:!1,error:String(E)}}let L=D;if(!L||L.success!==!0)return console.error(`[configureTriggerOnMcp] TRIGGER_CONFIGURE did not return success=true on connection=${Z.connection_id} type=${Z.event_type}. Raw payload:`,JSON.stringify(D)),{success:!1,error:`TRIGGER_CONFIGURE did not return success=true (got ${JSON.stringify(D)})`};try{if(X&&Q&&G&&N)await Q.persistTokenHash(G,Z.connection_id,N);if(!X&&Q&&G)await Q.deleteByConnection(Z.connection_id,G)}catch(E){console.error("[configureTriggerOnMcp] Token persistence failed after successful TRIGGER_CONFIGURE:",E)}return{success:!0}}catch(W){return{success:!1,error:String(W)}}}var rn=w(()=>{NF();LD0();jc0()});import{z as n6}from"zod";var mr0;var RU$=w(()=>{RC();S0();gX();rn();mr0=c({name:"AUTOMATION_UPDATE",description:"Update an automation's config. Toggling active state reconfigures event triggers on MCPs.",annotations:{title:"Update Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:n6.object({id:n6.string(),name:n6.string().min(1).max(255).optional(),active:n6.boolean().optional(),messages:n6.union([n6.string(),n6.array(n6.looseObject({id:n6.string().optional(),role:n6.enum(["user","assistant","system"]),parts:n6.array(n6.record(n6.string(),n6.unknown())),metadata:n6.unknown().optional()}))]).optional(),models:n6.object({tier:DO,modelId:n6.string().optional(),credentialId:n6.string().optional()}).loose().optional(),tools:n6.array(n6.string()).nullable().optional(),maxAgentSteps:n6.number().int().min(1).max(100).nullable().optional(),temperature:n6.number().optional()}),outputSchema:n6.object({id:n6.string(),name:n6.string(),active:n6.boolean(),updated_at:n6.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.id,X.id);if(!Q)throw Error("Automation not found");let Y={};if($.name!==void 0)Y.name=$.name;if($.active!==void 0)Y.active=$.active;if($.messages!==void 0){let J=YD0($.messages);Y.messages=JSON.stringify(J)}if($.models!==void 0)Y.models=JSON.stringify($.models);if($.tools!==void 0)Y.tools=$.tools===null?null:JSON.stringify($.tools);if($.temperature!==void 0)Y.temperature=$.temperature;if($.maxAgentSteps!==void 0)Y.max_agent_steps=$.maxAgentSteps;let G=await Z.storage.automations.update($.id,X.id,Y);if($.active!==void 0&&$.active!==Q.active){let J=await Z.storage.automations.listTriggers(G.id),W=J.filter((K)=>K.type==="event");await Promise.allSettled(W.map(async(K)=>{let H=await bB(Z,K,$.active);if(!H.success)console.warn(`Failed to configure trigger ${K.id}: ${H.error}`)})),await GU$(J,$.active)}return{id:G.id,name:G.name,active:G.active,updated_at:G.updated_at}}})});import{z as ED0}from"zod";var ir0;var IU$=w(()=>{RC();V4();S0();rn();ir0=c({name:"AUTOMATION_DELETE",description:"Permanently delete an automation. Disables all event triggers on connected MCPs first.",annotations:{title:"Delete Automation",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:ED0.object({id:ED0.string()}),outputSchema:ED0.object({success:ED0.boolean()}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),!await Z.storage.automations.findById($.id,X.id))throw Error("Automation not found");let Y=await Z.storage.automations.listTriggers($.id),G=Y.filter((K)=>K.type==="event");await Promise.allSettled(G.map(async(K)=>{let H=await bB(Z,K,!1);if(!H.success)console.warn(`Failed to disable trigger ${K.id}: ${H.error}`)}));let{success:J}=await Z.storage.automations.delete($.id,X.id);await JU$(Y);let W=G1(Z);if(W)y1.capture({distinctId:W,event:"automation_deleted",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:$.id,trigger_count:Y.length}});return{success:J}}})});function ay($){return`webhook_${$}`}function jD0($,Z,X){if(!Z)throw Error("Cannot build webhook URL: organization slug missing from request context");return`${$}/api/${Z}/webhooks/${X}`}import{z as w7}from"zod";var qU$=300000,Rj4=10,pr0;var MU$=w(()=>{Rr0();RC();Tr0();S0();rn();pr0=c({name:"AUTOMATION_TRIGGER_ADD",description:"Add a cron, event, or webhook trigger to an automation. For webhook triggers the response includes a one-time URL + secret token.",annotations:{title:"Add Trigger",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:w7.object({automation_id:w7.string(),type:w7.enum(["cron","event","webhook"]),cron_expression:w7.string().optional(),connection_id:w7.string().optional(),event_type:w7.string().optional(),params:w7.record(w7.string(),w7.string()).optional()}),outputSchema:w7.object({id:w7.string(),automation_id:w7.string(),type:w7.enum(["cron","event","webhook"]),created_at:w7.string(),webhook:w7.object({url:w7.string(),token:w7.string()}).nullable().optional()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.automation_id,X.id);if(!Q)throw Error("Automation not found");if($.type==="cron"){if(!$.cron_expression)throw Error("cron_expression is required for cron triggers");let K=new JD0($.cron_expression,{timezone:"UTC"}).nextRuns(Rj4);if(K.length===0)throw Error("Cron expression has no future runs");let H=1/0;for(let F=1;F<K.length;F++){let N=K[F].getTime()-K[F-1].getTime();if(N<H)H=N}if(K.length>=2&&Number.isFinite(H)&&H<qU$){let F=qU$/1000;throw Error(`Cron fires too frequently \u2014 minimum interval is ${F}s between runs (observed ${H/1000}s)`)}}if($.type==="event"){if(!$.connection_id)throw Error("connection_id is required for event triggers");if(!$.event_type)throw Error("event_type is required for event triggers");if(!await Z.storage.connections.findById($.connection_id,X.id))throw Error("Connection not found");let K={id:"",automation_id:$.automation_id,type:"event",cron_expression:null,connection_id:$.connection_id,event_type:$.event_type,params:$.params?JSON.stringify($.params):null,last_run_at:null,next_run_at:null,api_key_id:null,created_at:""},H=await bB(Z,K,!0,Z.storage.triggerCallbackTokens);if(!H.success)throw Error(`Failed to configure trigger on connection: ${H.error}`)}let Y=$.type==="cron"&&$.cron_expression?WD0($.cron_expression,new Date):null,G=await Z.storage.automations.addTrigger({automation_id:$.automation_id,type:$.type,cron_expression:$.type==="cron"?$.cron_expression:null,connection_id:$.type==="event"?$.connection_id:null,event_type:$.type==="event"?$.event_type:null,params:$.params?JSON.stringify($.params):null,next_run_at:Y?.toISOString()??null}),J=null;if($.type==="webhook")try{let W=await Z.boundAuth.apiKey.create({name:`webhook:${Q.name}:${G.id.slice(0,8)}`,permissions:{[ay(G.id)]:["FIRE"]},metadata:{kind:"webhook_trigger",automation_id:Q.id,trigger_id:G.id}});await Z.storage.automations.setTriggerApiKeyId(G.id,W.id),J={url:jD0(Z.baseUrl,X.slug,G.id),token:W.key}}catch(W){await Z.storage.automations.removeTrigger(G.id,G.automation_id);let K=W instanceof Error?W.message:String(W);throw Error(`Failed to mint webhook token: ${K}`)}return await HD0(G,Q),{id:G.id,automation_id:G.automation_id,type:G.type,created_at:G.created_at,webhook:J}}})});import{z as zD0}from"zod";var nr0;var kU$=w(()=>{RC();S0();rn();nr0=c({name:"AUTOMATION_TRIGGER_REMOVE",description:"Remove a trigger from an automation. Disables associated event listeners on MCPs.",annotations:{title:"Remove Trigger",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:zD0.object({trigger_id:zD0.string()}),outputSchema:zD0.object({success:zD0.boolean()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findTriggerById($.trigger_id);if(!Q)throw Error("Trigger not found");if(!await Z.storage.automations.findById(Q.automation_id,X.id))throw Error("Automation not found");if(Q.type==="event"){let J=await bB(Z,Q,!1,Z.storage.triggerCallbackTokens);if(!J.success)console.warn(`Failed to disable trigger ${Q.id}: ${J.error}`)}let{success:G}=await Z.storage.automations.removeTrigger(Q.id,Q.automation_id);if(Q.type==="cron")await _r0(Q.id);if(Q.type==="webhook"&&Q.api_key_id)try{await Z.boundAuth.apiKey.delete(Q.api_key_id)}catch(J){console.warn(`[trigger-remove] failed to delete api key ${Q.api_key_id} for trigger ${Q.id}:`,J instanceof Error?J.message:J)}return{success:G}}})});import{z as sy}from"zod";var tr0;var VU$=w(()=>{S0();tr0=c({name:"AUTOMATION_TRIGGER_ROTATE_TOKEN",description:"Rotate the secret token for a webhook automation trigger. Returns a new token; the old token is revoked.",annotations:{title:"Rotate Webhook Token",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:sy.object({trigger_id:sy.string()}),outputSchema:sy.object({trigger_id:sy.string(),url:sy.string(),token:sy.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findTriggerById($.trigger_id);if(!Q)throw Error("Trigger not found");if(Q.type!=="webhook")throw Error("Trigger is not a webhook trigger");let Y=await Z.storage.automations.findById(Q.automation_id,X.id);if(!Y)throw Error("Automation not found");let G=Q.api_key_id,J=await Z.boundAuth.apiKey.create({name:`webhook:${Y.name}:${Q.id.slice(0,8)}`,permissions:{[ay(Q.id)]:["FIRE"]},metadata:{kind:"webhook_trigger",automation_id:Y.id,trigger_id:Q.id}});if(await Z.storage.automations.setTriggerApiKeyId(Q.id,J.id),G)try{await Z.boundAuth.apiKey.delete(G)}catch(W){console.warn(`[trigger-rotate] failed to delete old key ${G} for trigger ${Q.id}:`,W instanceof Error?W.message:W)}return{trigger_id:Q.id,url:jD0(Z.baseUrl,X.slug,Q.id),token:J.key}}})});import{z as ey}from"zod";var or0;var SU$=w(()=>{V4();S0();or0=c({name:"AUTOMATION_RUN",description:"Manually trigger an automation run. Bypasses configured triggers.",annotations:{title:"Run Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:ey.object({id:ey.string()}),outputSchema:ey.object({threadId:ey.string().optional(),error:ey.string().optional(),skipped:ey.string().optional()}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),!Z.automationRunner)throw Error("Automation runner not available");let Q=G1(Z);if(!Q)throw Error("User ID not available");let Y=await Z.automationRunner($.id,X.id,Q);if(y1.capture({distinctId:Q,event:"automation_run",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:$.id,thread_id:"taskId"in Y?Y.taskId:void 0,status:"skipped"in Y?"skipped":("error"in Y)?"error":"started",skip_reason:"skipped"in Y?Y.skipped:void 0,error_message:"error"in Y?Y.error:void 0}}),"skipped"in Y)return{skipped:Y.skipped};if("error"in Y)return{threadId:Y.taskId,error:Y.error};return{threadId:Y.taskId}}})});import{z as uZ}from"zod";var Ij4=500,rr0;var CU$=w(()=>{R6();S0();rr0=c({name:"AUTOMATION_RUN_STATS",description:"Aggregate run counts (by status) and LLM token/cost totals for a single automation.",annotations:{title:"Automation Run Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uZ.object({automation_id:uZ.string(),startDate:uZ.string().datetime().optional().describe("Filter runs at or after this ISO timestamp"),endDate:uZ.string().datetime().optional().describe("Filter runs at or before this ISO timestamp")}),outputSchema:uZ.object({runs:uZ.object({total:uZ.number(),completed:uZ.number(),failed:uZ.number(),inProgress:uZ.number()}),usage:uZ.object({calls:uZ.number(),inputTokens:uZ.number(),outputTokens:uZ.number(),totalTokens:uZ.number(),costUsd:uZ.number(),sampledRuns:uZ.number(),truncated:uZ.boolean()})}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),await JQ(),!await Z.storage.automations.findById($.automation_id,X.id))throw Error("Automation not found");let Y=await Z.storage.automations.getRunStats($.automation_id,X.id,{startDate:$.startDate,endDate:$.endDate}),G=await Z.storage.automations.listRunThreadIds($.automation_id,X.id,{startDate:$.startDate,endDate:$.endDate,limit:Ij4}),J={calls:0,inputTokens:0,outputTokens:0,totalTokens:0,costUsd:0,sampledRuns:G.length,truncated:Y.total>G.length};if(G.length>0){let W=await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:"decopilot",threadIds:G,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});for(let K of W)J.calls+=K.calls,J.inputTokens+=K.inputTokens,J.outputTokens+=K.outputTokens,J.totalTokens+=K.totalTokens,J.costUsd+=K.costUsd}return{runs:Y,usage:J}}})});var _U$=w(()=>{pN$();nN$();tN$();RU$();IU$();MU$();kU$();VU$();SU$();CU$()});import{z as xB}from"zod";var Mj4,kj4,ar0;var vU$=w(()=>{S0();Mj4=xB.object({id:xB.string().min(1)}),kj4=xB.object({user:xB.object({id:xB.string(),name:xB.string(),email:xB.string(),image:xB.string().nullable()}).nullable()}),ar0=c({name:"USER_GET",description:"Get a user's profile by ID. Only returns users who share an organization with the caller.",annotations:{title:"Get User",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Mj4,outputSchema:kj4,handler:async($,Z)=>{await Z.access.check(),r(Z);let X=G1(Z);if(!X)throw Error("Authentication required");let Q=await Z.storage.users.findById($.id,X);if(!Q)return{user:null};return{user:{id:Q.id,name:Q.name,email:Q.email,image:Q.image??null}}}})});import{z as Vj4}from"zod";var Sj4,sr0;var fU$=w(()=>{S0();gX();Sj4={tiers:{}},sr0=c({name:"USER_MODEL_PREFERENCES_GET",description:"Get the calling user's personal chat tier \u2192 model overrides for the current organization. Absent tiers fall back to the org default.",annotations:{title:"Get User Model Preferences",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Vj4.object({}),outputSchema:Zi,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Z.auth?.user?.id;if(!Q)throw Error("No authenticated user in context");return await Z.storage.userModelPreferences.get(Q,X.id)??Sj4}})});function Cj4($,Z,X){let Q={};for(let Y of DO.options){let G=$[Y];if(!G||m3(X,G.keyId,G.modelId)){Q[Y]=G;continue}let J=Z?.[Y];if(!(J?.keyId===G.keyId&&J?.modelId===G.modelId))throw Error("Model not allowed for your role");Q[Y]=null}return Q}var er0;var bU$=w(()=>{S0();gX();ly();er0=c({name:"USER_MODEL_PREFERENCES_UPDATE",description:"Set the calling user's personal chat tier \u2192 model overrides for the current organization. Only affects this user's chats; the org default and every non-chat path (automations, background tools) are unchanged. Omit a tier (or set it null) to fall back to the org default. Models the caller's role is not allowed to use are rejected.",annotations:{title:"Update User Model Preferences",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Zi,outputSchema:Zi,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Z.auth?.user?.id;if(!Q)throw Error("No authenticated user in context");let[Y,G]=await Promise.all([i3(Z.db,X.id,X.role??Z.auth.user?.role),Z.storage.userModelPreferences.get(Q,X.id)]);return await Z.storage.userModelPreferences.upsert(Q,X.id,{tiers:Cj4($.tiers,G?.tiers,Y)})}})});var xU$=w(()=>{vU$();fU$();bU$()});function o0($,Z,X,Q,Y){if(Q==="m")throw TypeError("Private method is not writable");if(Q==="a"&&!Y)throw TypeError("Private accessor was defined without a setter");if(typeof Z==="function"?$!==Z||!Y:!Z.has($))throw TypeError("Cannot write private member to an object whose class did not declare it");return Q==="a"?Y.call($,X):Y?Y.value=X:Z.set($,X),X}function d($,Z,X,Q){if(X==="a"&&!Q)throw TypeError("Private accessor was defined without a getter");if(typeof Z==="function"?$!==Z||!Q:!Z.has($))throw TypeError("Cannot read private member from an object whose class did not declare it");return X==="m"?Q:X==="a"?Q.call($):Q?Q.value:Z.get($)}var tQ=()=>{};var $g=function(){let{crypto:$}=globalThis;if($?.randomUUID)return $g=$.randomUUID.bind($),$.randomUUID();let Z=new Uint8Array(1),X=$?()=>$.getRandomValues(Z)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(Q)=>(+Q^X()&15>>+Q/4).toString(16))};function FJ($){return typeof $==="object"&&$!==null&&(("name"in $)&&$.name==="AbortError"||("message"in $)&&String($.message).includes("FetchRequestCanceledException"))}var qC=($)=>{if($ instanceof Error)return $;if(typeof $==="object"&&$!==null){try{if(Object.prototype.toString.call($)==="[object Error]"){let Z=Error($.message,$.cause?{cause:$.cause}:{});if($.stack)Z.stack=$.stack;if($.cause&&!Z.cause)Z.cause=$.cause;if($.name)Z.name=$.name;return Z}}catch{}try{return Error(JSON.stringify($))}catch{}}return Error($)};var H1,K9,WX,aF,an,PD0,sn,en,$t,Zt,Xt,Qt,Yt,Gt;var E5=w(()=>{H1=class H1 extends Error{};K9=class K9 extends H1{constructor($,Z,X,Q,Y){super(`${K9.makeMessage($,Z,X)}`);this.status=$,this.headers=Q,this.requestID=Q?.get("request-id"),this.error=Z,this.type=Y??null}static makeMessage($,Z,X){let Q=Z?.message?typeof Z.message==="string"?Z.message:JSON.stringify(Z.message):Z?JSON.stringify(Z):X;if($&&Q)return`${$} ${Q}`;if($)return`${$} status code (no body)`;if(Q)return Q;return"(no status code or body)"}static generate($,Z,X,Q){if(!$||!Q)return new aF({message:X,cause:qC(Z)});let Y=Z,G=Y?.error?.type;if($===400)return new sn($,Y,X,Q,G);if($===401)return new en($,Y,X,Q,G);if($===403)return new $t($,Y,X,Q,G);if($===404)return new Zt($,Y,X,Q,G);if($===409)return new Xt($,Y,X,Q,G);if($===422)return new Qt($,Y,X,Q,G);if($===429)return new Yt($,Y,X,Q,G);if($>=500)return new Gt($,Y,X,Q,G);return new K9($,Y,X,Q,G)}};WX=class WX extends K9{constructor({message:$}={}){super(void 0,void 0,$||"Request was aborted.",void 0)}};aF=class aF extends K9{constructor({message:$,cause:Z}){super(void 0,void 0,$||"Connection error.",void 0);if(Z)this.cause=Z}};an=class an extends aF{constructor({message:$}={}){super({message:$??"Request timed out."})}};PD0=class PD0 extends H1{constructor($,{cause:Z}={}){super($??"Retryable error.");if(Z!==void 0)this.cause=Z}};sn=class sn extends K9{};en=class en extends K9{};$t=class $t extends K9{};Zt=class Zt extends K9{};Xt=class Xt extends K9{};Qt=class Qt extends K9{};Yt=class Yt extends K9{};Gt=class Gt extends K9{}});function AD0($){if(typeof $!=="object")return{};return $??{}}function Za0($){if(!$)return!0;for(let Z in $)return!1;return!0}function gU$($,Z){return Object.prototype.hasOwnProperty.call($,Z)}var fj4,yU$=($)=>{return fj4.test($)},KX=($)=>(KX=Array.isArray,KX($)),$a0,hU$=($,Z)=>{if(typeof Z!=="number"||!Number.isInteger(Z))throw new H1(`${$} must be an integer`);if(Z<0)throw new H1(`${$} must be a positive integer`);return Z},Jt=($)=>{try{return JSON.parse($)}catch(Z){return}};var p3=w(()=>{E5();fj4=/^[a-z][a-z0-9+.-]*:/i,$a0=KX});var n3=($,Z)=>new Promise((X)=>{if(Z?.aborted)return X();let Q=()=>{clearTimeout(Y),X()},Y=setTimeout(()=>{Z?.removeEventListener("abort",Q),X()},$);Z?.addEventListener("abort",Q,{once:!0})});var NJ="0.105.0";function bj4(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}function yj4(){if(typeof navigator>"u"||!navigator)return null;let $=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Z,pattern:X}of $){let Q=X.exec(navigator.userAgent);if(Q){let Y=Q[1]||0,G=Q[2]||0,J=Q[3]||0;return{browser:Z,version:`${Y}.${G}.${J}`}}}return null}var dU$=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},xj4=()=>{let $=bj4();if($==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":cU$(Deno.build.os),"X-Stainless-Arch":uU$(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if($==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":cU$(globalThis.process.platform??"unknown"),"X-Stainless-Arch":uU$(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Z=yj4();if(Z)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Z.browser}`,"X-Stainless-Runtime-Version":Z.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},uU$=($)=>{if($==="x32")return"x32";if($==="x86_64"||$==="x64")return"x64";if($==="arm")return"arm";if($==="aarch64"||$==="arm64")return"arm64";if($)return`other:${$}`;return"unknown"},cU$=($)=>{if($=$.toLowerCase(),$.includes("ios"))return"iOS";if($==="android")return"Android";if($==="darwin")return"MacOS";if($==="win32")return"Windows";if($==="freebsd")return"FreeBSD";if($==="openbsd")return"OpenBSD";if($==="linux")return"Linux";if($)return`Other:${$}`;return"Unknown"},lU$,Wt=()=>{return lU$??(lU$=xj4())};var TD0=()=>{};function mU$(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Xa0(...$){let Z=globalThis.ReadableStream;if(typeof Z>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Z(...$)}function RD0($){let Z=Symbol.asyncIterator in $?$[Symbol.asyncIterator]():$[Symbol.iterator]();return Xa0({start(){},async pull(X){let{done:Q,value:Y}=await Z.next();if(Q)X.close();else X.enqueue(Y)},async cancel(){await Z.return?.()}})}function Kt($){if($[Symbol.asyncIterator])return $;let Z=$.getReader();return{async next(){try{let X=await Z.read();if(X?.done)Z.releaseLock();return X}catch(X){throw Z.releaseLock(),X}},async return(){let X=Z.cancel();return Z.releaseLock(),await X,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function iU$($){if($===null||typeof $!=="object")return;if($[Symbol.asyncIterator]){await $[Symbol.asyncIterator]().return?.();return}let Z=$.getReader(),X=Z.cancel();Z.releaseLock(),await X}var pU$=({headers:$,body:Z})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Z)}};var Qa0="RFC3986",Ya0=($)=>String($),Ga0,nU$="RFC1738";var Ja0=w(()=>{Ga0={RFC1738:($)=>String($).replace(/%20/g,"+"),RFC3986:Ya0}});function oU$($){if(!$||typeof $!=="object")return!1;return!!($.constructor&&$.constructor.isBuffer&&$.constructor.isBuffer($))}function Ka0($,Z){if(KX($)){let X=[];for(let Q=0;Q<$.length;Q+=1)X.push(Z($[Q]));return X}return Z($)}var ID0=($,Z)=>(ID0=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),ID0($,Z)),fK,Wa0=1024,tU$=($,Z,X,Q,Y)=>{if($.length===0)return $;let G=$;if(typeof $==="symbol")G=Symbol.prototype.toString.call($);else if(typeof $!=="string")G=String($);if(X==="iso-8859-1")return escape(G).replace(/%u[0-9a-f]{4}/gi,function(W){return"%26%23"+parseInt(W.slice(2),16)+"%3B"});let J="";for(let W=0;W<G.length;W+=Wa0){let K=G.length>=Wa0?G.slice(W,W+Wa0):G,H=[];for(let F=0;F<K.length;++F){let N=K.charCodeAt(F);if(N===45||N===46||N===95||N===126||N>=48&&N<=57||N>=65&&N<=90||N>=97&&N<=122||Y===nU$&&(N===40||N===41)){H[H.length]=K.charAt(F);continue}if(N<128){H[H.length]=fK[N];continue}if(N<2048){H[H.length]=fK[192|N>>6]+fK[128|N&63];continue}if(N<55296||N>=57344){H[H.length]=fK[224|N>>12]+fK[128|N>>6&63]+fK[128|N&63];continue}F+=1,N=65536+((N&1023)<<10|K.charCodeAt(F)&1023),H[H.length]=fK[240|N>>18]+fK[128|N>>12&63]+fK[128|N>>6&63]+fK[128|N&63]}J+=H.join("")}return J};var rU$=w(()=>{Ja0();p3();fK=(()=>{let $=[];for(let Z=0;Z<256;++Z)$.push("%"+((Z<16?"0":"")+Z.toString(16)).toUpperCase());return $})()});function uj4($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"||typeof $==="symbol"||typeof $==="bigint"}function $O$($,Z,X,Q,Y,G,J,W,K,H,F,N,U,O,B,D,L,E){let j=$,z=E,A=0,P=!1;while((z=z.get(Ha0))!==void 0&&!P){let l=z.get($);if(A+=1,typeof l<"u")if(l===A)throw RangeError("Cyclic object value");else P=!0;if(typeof z.get(Ha0)>"u")A=0}if(typeof H==="function")j=H(Z,j);else if(j instanceof Date)j=U?.(j);else if(X==="comma"&&KX(j))j=Ka0(j,function(l){if(l instanceof Date)return U?.(l);return l});if(j===null){if(G)return K&&!D?K(Z,NZ.encoder,L,"key",O):Z;j=""}if(uj4(j)||oU$(j)){if(K){let l=D?Z:K(Z,NZ.encoder,L,"key",O);return[B?.(l)+"="+B?.(K(j,NZ.encoder,L,"value",O))]}return[B?.(Z)+"="+B?.(String(j))]}let I=[];if(typeof j>"u")return I;let k;if(X==="comma"&&KX(j)){if(D&&K)j=Ka0(j,K);k=[{value:j.length>0?j.join(",")||null:void 0}]}else if(KX(H))k=H;else{let l=Object.keys(j);k=F?l.sort(F):l}let q=W?String(Z).replace(/\./g,"%2E"):String(Z),C=Q&&KX(j)&&j.length===1?q+"[]":q;if(Y&&KX(j)&&j.length===0)return C+"[]";for(let l=0;l<k.length;++l){let f=k[l],x=typeof f==="object"&&typeof f.value<"u"?f.value:j[f];if(J&&x===null)continue;let n=N&&W?f.replace(/\./g,"%2E"):f,u=KX(j)?typeof X==="function"?X(C,n):C:C+(N?"."+n:"["+n+"]");E.set($,A);let a=new WeakMap;a.set(Ha0,E),eU$(I,$O$(x,u,X,Q,Y,G,J,W,X==="comma"&&D&&KX(j)?null:K,H,F,N,U,O,B,D,L,a))}return I}function cj4($=NZ){if(typeof $.allowEmptyArrays<"u"&&typeof $.allowEmptyArrays!=="boolean")throw TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof $.encodeDotInKeys<"u"&&typeof $.encodeDotInKeys!=="boolean")throw TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if($.encoder!==null&&typeof $.encoder<"u"&&typeof $.encoder!=="function")throw TypeError("Encoder has to be a function.");let Z=$.charset||NZ.charset;if(typeof $.charset<"u"&&$.charset!=="utf-8"&&$.charset!=="iso-8859-1")throw TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let X=Qa0;if(typeof $.format<"u"){if(!ID0(Ga0,$.format))throw TypeError("Unknown format option provided.");X=$.format}let Q=Ga0[X],Y=NZ.filter;if(typeof $.filter==="function"||KX($.filter))Y=$.filter;let G;if($.arrayFormat&&$.arrayFormat in sU$)G=$.arrayFormat;else if("indices"in $)G=$.indices?"indices":"repeat";else G=NZ.arrayFormat;if("commaRoundTrip"in $&&typeof $.commaRoundTrip!=="boolean")throw TypeError("`commaRoundTrip` must be a boolean, or absent");let J=typeof $.allowDots>"u"?!!$.encodeDotInKeys===!0?!0:NZ.allowDots:!!$.allowDots;return{addQueryPrefix:typeof $.addQueryPrefix==="boolean"?$.addQueryPrefix:NZ.addQueryPrefix,allowDots:J,allowEmptyArrays:typeof $.allowEmptyArrays==="boolean"?!!$.allowEmptyArrays:NZ.allowEmptyArrays,arrayFormat:G,charset:Z,charsetSentinel:typeof $.charsetSentinel==="boolean"?$.charsetSentinel:NZ.charsetSentinel,commaRoundTrip:!!$.commaRoundTrip,delimiter:typeof $.delimiter>"u"?NZ.delimiter:$.delimiter,encode:typeof $.encode==="boolean"?$.encode:NZ.encode,encodeDotInKeys:typeof $.encodeDotInKeys==="boolean"?$.encodeDotInKeys:NZ.encodeDotInKeys,encoder:typeof $.encoder==="function"?$.encoder:NZ.encoder,encodeValuesOnly:typeof $.encodeValuesOnly==="boolean"?$.encodeValuesOnly:NZ.encodeValuesOnly,filter:Y,format:X,formatter:Q,serializeDate:typeof $.serializeDate==="function"?$.serializeDate:NZ.serializeDate,skipNulls:typeof $.skipNulls==="boolean"?$.skipNulls:NZ.skipNulls,sort:typeof $.sort==="function"?$.sort:null,strictNullHandling:typeof $.strictNullHandling==="boolean"?$.strictNullHandling:NZ.strictNullHandling}}function ZO$($,Z={}){let X=$,Q=cj4(Z),Y,G;if(typeof Q.filter==="function")G=Q.filter,X=G("",X);else if(KX(Q.filter))G=Q.filter,Y=G;let J=[];if(typeof X!=="object"||X===null)return"";let W=sU$[Q.arrayFormat],K=W==="comma"&&Q.commaRoundTrip;if(!Y)Y=Object.keys(X);if(Q.sort)Y.sort(Q.sort);let H=new WeakMap;for(let U=0;U<Y.length;++U){let O=Y[U];if(Q.skipNulls&&X[O]===null)continue;eU$(J,$O$(X[O],O,W,K,Q.allowEmptyArrays,Q.strictNullHandling,Q.skipNulls,Q.encodeDotInKeys,Q.encode?Q.encoder:null,Q.filter,Q.sort,Q.allowDots,Q.serializeDate,Q.format,Q.formatter,Q.encodeValuesOnly,Q.charset,H))}let F=J.join(Q.delimiter),N=Q.addQueryPrefix===!0?"?":"";if(Q.charsetSentinel)if(Q.charset==="iso-8859-1")N+="utf8=%26%2310003%3B&";else N+="utf8=%E2%9C%93&";return F.length>0?N+F:""}var sU$,eU$=function($,Z){Array.prototype.push.apply($,KX(Z)?Z:[Z])},aU$,NZ,Ha0;var XO$=w(()=>{rU$();Ja0();p3();sU$={brackets($){return String($)+"[]"},comma:"comma",indices($,Z){return String($)+"["+Z+"]"},repeat($){return String($)}},NZ={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:tU$,encodeValuesOnly:!1,format:Qa0,formatter:Ya0,indices:!1,serializeDate($){return(aU$??(aU$=Function.prototype.call.bind(Date.prototype.toISOString)))($)},skipNulls:!1,strictNullHandling:!1};Ha0={}});function QO$($){return ZO$($,{arrayFormat:"brackets"})}var Fa0=w(()=>{XO$()});function MD0($){if(!$)return;let Z;try{Z=new URL($)}catch(Q){throw new A6(`Invalid token endpoint base URL "${$}": ${Q}`)}if(Z.protocol==="https:")return;let X=Z.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Z.protocol==="http:"&&(X==="localhost"||X==="127.0.0.1"||X==="::1"))return;throw new A6(`Refusing to send credential over non-https token endpoint "${$}"`)}async function kD0($,Z){let X=await mj4($),Q;try{Q=JSON.parse(X)}catch{throw new A6(`Token endpoint returned non-JSON response (status ${$.status})`,$.status,oQ(X),Z)}if(!Q.access_token)throw new A6(`Token endpoint response missing access_token: ${JSON.stringify(oQ(Q))}`,$.status,oQ(Q),Z);if(Q.token_type&&Q.token_type.toLowerCase()!=="bearer")throw new A6(`Token endpoint response: unsupported token_type "${Q.token_type}" (want Bearer)`,$.status,oQ(Q),Z);return Q}function oQ($){if($==null)return $;if(typeof $==="string"){let Z;try{Z=JSON.parse($)}catch{if($.length<=Na0)return $;return $.slice(0,Na0)+`... <${$.length-Na0} more chars>`}return JSON.stringify(oQ(Z))}if(typeof $==="object"&&!Array.isArray($)){let Z={};for(let[X,Q]of Object.entries($))if(dj4.has(X))Z[X]=Q;return Z}return null}async function VD0($,Z=(X)=>console.warn(`anthropic-sdk: ${X}`)){if(typeof process>"u"||process.platform==="win32")return;let X=await import("fs"),Q=$,Y;try{Q=await X.promises.realpath($),Y=await X.promises.stat(Q)}catch{return}let G=Y.mode&511;if(G&18)throw new A6(`Credentials file at ${Q} is group/world-writable (mode 0o${G.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${Q}\`.`);if(G&36)throw new A6(`Credentials file at ${Q} is group/world-readable (mode 0o${G.toString(8)}); run \`chmod 600 ${Q}\` before retrying.`);if(typeof process.getuid==="function"&&Y.uid!==process.getuid())Z(`credentials file at ${Q} is owned by uid ${Y.uid} (current process uid ${process.getuid()}); verify this is intentional.`)}async function SD0($,Z){let X=await import("fs"),Y=(await import("path")).dirname($);await X.promises.mkdir(Y,{recursive:!0,mode:448});let G=`${$}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;try{let J=await X.promises.open(G,"w",384);try{await J.writeFile(JSON.stringify(Z,null,2)),await J.sync()}finally{await J.close()}await X.promises.rename(G,$)}catch(J){throw await X.promises.unlink(G).catch(()=>{}),J}try{let J=await X.promises.open(Y,"r");try{await J.sync()}finally{await J.close()}}catch{}}async function mj4($){if(!$.body)return"";let Z=$.body.getReader(),X=[],Q=0;for(;;){let{done:G,value:J}=await Z.read();if(G)break;if(Q+J.length>YO$){let W=YO$-Q;if(W>0)X.push(J.subarray(0,W));await Z.cancel();break}X.push(J),Q+=J.length}let Y;if(X.length===1)Y=X[0];else{Y=new Uint8Array(X.reduce((J,W)=>J+W.length,0));let G=0;for(let J of X)Y.set(J,G),G+=J.length}return new TextDecoder("utf-8").decode(Y)}var GO$="urn:ietf:params:oauth:grant-type:jwt-bearer",JO$="refresh_token",qD0="/v1/oauth/token",MC="oauth-2025-04-20",WO$="oidc-federation-2026-04-01",KO$=120,Zg=30,HO$=5,YO$=1048576,Na0=2000,dj4,A6;var Xg=w(()=>{E5();dj4=new Set(["error","error_description","error_uri"]);A6=class A6 extends H1{constructor($,Z=null,X=null,Q=null){super($);this.statusCode=Z,this.body=X,this.requestId=Q}}});function t3(){return Math.floor(Date.now()/1000)}class Ua0{constructor($,Z){this.cached=null,this.pendingRefresh=null,this.nextForce=!1,this.lastAdvisoryError=0,this.provider=$,this.onAdvisoryRefreshError=Z}async getToken(){let $=this.nextForce;this.nextForce=!1;let Z=this.cached;if($||Z==null)return(await this.refresh($)).token;if(Z.expiresAt==null)return Z.token;let X=Z.expiresAt-t3();if(X>KO$)return Z.token;if(X>Zg)return this.backgroundRefresh(),Z.token;return(await this.refresh()).token}invalidate(){this.cached=null,this.nextForce=!0}refresh($=!1){if(this.pendingRefresh&&!$)return this.pendingRefresh;return this.doRefresh($)}backgroundRefresh(){if(this.pendingRefresh)return;if(t3()-this.lastAdvisoryError<HO$)return;this.doRefresh().catch(($)=>{this.lastAdvisoryError=t3(),this.onAdvisoryRefreshError?.($)})}doRefresh($=!1){return this.pendingRefresh=this.provider($?{forceRefresh:!0}:void 0).then((Z)=>{return this.cached=Z,this.pendingRefresh=null,Z},(Z)=>{throw this.pendingRefresh=null,Z}),this.pendingRefresh}}var FO$=w(()=>{Xg()});var a8=($)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[$]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.($)?.trim()||void 0;return};function OO$($){let Z=0;for(let Y of $)Z+=Y.length;let X=new Uint8Array(Z),Q=0;for(let Y of $)X.set(Y,Q),Q+=Y.length;return X}function Qg($){let Z;return(NO$??(Z=new globalThis.TextEncoder,NO$=Z.encode.bind(Z)))($)}function Oa0($){let Z;return(UO$??(Z=new globalThis.TextDecoder,UO$=Z.decode.bind(Z)))($)}var NO$,UO$;var BO$=w(()=>{E5()});function Ht(){}function CD0($,Z,X){if(!Z||_D0[$]>_D0[X])return Ht;else return Z[$].bind(Z)}function wa0($,Z){let X=wO$.get($);if(X&&X[0]===Z)return X[1];let Q={error:CD0("error",$,Z),warn:CD0("warn",$,Z),info:CD0("info",$,Z),debug:CD0("debug",$,Z)};return wO$.set($,[Z,Q]),Q}function x4($){let Z=$.logger,X=$.logLevel??"off";if(!Z)return ij4;return wa0(Z,X)}function LO$(){let $=a8("ANTHROPIC_LOG");if(!Ba0||$!==DO$)DO$=$,Ba0=wa0(console,vD0($,"process.env['ANTHROPIC_LOG']",wa0(console,Ft))??Ft);return Ba0}var Ft="warn",_D0,vD0=($,Z,X)=>{if(!$)return;if(gU$(_D0,$))return $;X.warn(`${Z} was set to ${JSON.stringify($)}, expected one of ${JSON.stringify(Object.keys(_D0))}`);return},ij4,wO$,DO$,Ba0,bK=($)=>{if($.options)$.options={...$.options},delete $.options.headers;if($.headers)$.headers=Object.fromEntries(($.headers instanceof Headers?[...$.headers]:Object.entries($.headers)).map(([Z,X])=>[Z,Z.toLowerCase()==="authorization"||Z.toLowerCase()==="api-key"||Z.toLowerCase()==="x-api-key"||Z.toLowerCase()==="cookie"||Z.toLowerCase()==="set-cookie"?"***":X]));if("retryOfRequestLogID"in $){if($.retryOfRequestLogID)$.retryOf=$.retryOfRequestLogID;delete $.retryOfRequestLogID}return $};var xK=w(()=>{p3();_D0={off:0,error:200,warn:300,info:400,debug:500};ij4={error:Ht,warn:Ht,info:Ht,debug:Ht},wO$=new WeakMap});var Da0=w(()=>{p3();BO$();xK();Fa0()});function EO$($){if(!$)throw Error("profile name is empty");if($==="."||$==="..")throw Error(`profile name "${$}" is not allowed`);if($.includes("/")||$.includes("\\"))throw Error(`profile name "${$}" must not contain path separators`);if(!pj4.test($))throw Error(`profile name "${$}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var fD0="1.0",pj4,jO$=async($)=>{var Z,X;let Q=await La0();if(Q===null)return null;let Y=$??await PO$();if(Y===null)return null;EO$(Y);let G=await import("fs"),W=(await import("path")).join(Q,"configs",`${Y}.json`),K;try{K=await G.promises.readFile(W,"utf-8")}catch(N){if(N?.code!=="ENOENT")throw Error(`failed to read config file ${W}: ${N}`);K=null}if(K===null){let N=a8("ANTHROPIC_ORGANIZATION_ID"),U=a8("ANTHROPIC_IDENTITY_TOKEN_FILE"),O=a8("ANTHROPIC_FEDERATION_RULE_ID");if(O&&N)return{fromFile:!1,config:{organization_id:N,workspace_id:a8("ANTHROPIC_WORKSPACE_ID"),base_url:a8("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:O,service_account_id:a8("ANTHROPIC_SERVICE_ACCOUNT_ID"),identity_token:U?{source:"file",path:U}:void 0,scope:a8("ANTHROPIC_SCOPE")}}};return null}let H;try{H=JSON.parse(K)}catch(N){throw Error(`failed to parse config file ${W}: ${N}`)}if(!H.authentication)throw Error(`config file ${W} is missing "authentication"`);let F=H.authentication.type;if(F!=="oidc_federation"&&F!=="user_oauth")throw Error(`authentication.type "${F}" is not a known authentication type`);if(H.organization_id??(H.organization_id=a8("ANTHROPIC_ORGANIZATION_ID")),H.workspace_id??(H.workspace_id=a8("ANTHROPIC_WORKSPACE_ID")),H.base_url??(H.base_url=a8("ANTHROPIC_BASE_URL")),(Z=H.authentication).scope??(Z.scope=a8("ANTHROPIC_SCOPE")),H.authentication.type==="oidc_federation"){if(!H.authentication.identity_token){let N=a8("ANTHROPIC_IDENTITY_TOKEN_FILE");if(N)H.authentication.identity_token={source:"file",path:N}}if(!H.authentication.federation_rule_id)H.authentication.federation_rule_id=a8("ANTHROPIC_FEDERATION_RULE_ID")??"";(X=H.authentication).service_account_id??(X.service_account_id=a8("ANTHROPIC_SERVICE_ACCOUNT_ID"))}return{config:H,fromFile:!0}},zO$=async($,Z)=>{if($?.authentication.credentials_path)return $.authentication.credentials_path;let X=await La0();if(!X)return null;let Q=Z??await PO$();if(!Q)return null;return EO$(Q),(await import("path")).join(X,"credentials",`${Q}.json`)},La0=async()=>{if(!nj4())return null;let $=await import("path"),Z=a8("ANTHROPIC_CONFIG_DIR");if(Z)return Z;if(Wt()["X-Stainless-OS"]==="Windows"){let G=a8("APPDATA");if(G)return $.join(G,"Anthropic");let J=a8("USERPROFILE");if(J)return $.join(J,"AppData","Roaming","Anthropic");return null}let Q=a8("XDG_CONFIG_HOME");if(Q)return $.join(Q,"anthropic");let Y=a8("HOME");if(Y)return $.join(Y,".config","anthropic");return null},nj4=()=>{let $=Wt()["X-Stainless-Runtime"];return $==="node"||$==="deno"},PO$=async()=>{let $=await La0();if(!$)return null;let Z=a8("ANTHROPIC_PROFILE");if(Z)return Z;let X=await import("fs"),Y=(await import("path")).join($,"active_config");try{return(await X.promises.readFile(Y,"utf-8")).trim()||"default"}catch(G){if(G?.code!=="ENOENT")throw Error(`failed to read ${Y}: ${G}`);return"default"}};var Ea0=w(()=>{TD0();Da0();pj4=/^[A-Za-z0-9_.-]+$/});function ja0($){if(!$)throw new H1("Identity token file path is empty");return async()=>{let Z=await import("fs"),X;try{X=await Z.promises.readFile($,"utf-8")}catch(Y){throw new H1(`Failed to read identity token file at ${$}: ${Y}`)}let Q=X.trim();if(!Q)throw new H1(`Identity token file at ${$} is empty`);return Q}}function AO$($){if(!$)throw new H1("Identity token value is empty");return()=>$}var TO$=w(()=>{E5()});function RO$($){return async()=>{MD0($.baseURL);let Z=await $.identityTokenProvider();if(Z.length>16384)throw new A6(`Identity token is ${Math.ceil(Z.length/1024)} KiB, exceeds the 16 KiB assertion limit`);let X={grant_type:GO$,assertion:Z,federation_rule_id:$.federationRuleId,organization_id:$.organizationId};if($.serviceAccountId)X.service_account_id=$.serviceAccountId;if($.workspaceId)X.workspace_id=$.workspaceId;let Q=`${$.baseURL}${qD0}`,Y;try{Y=await $.fetch(Q,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${MC},${WO$}`,"User-Agent":$.userAgent||`anthropic-sdk-typescript/${NJ} oidcFederationProvider`},body:JSON.stringify(X)})}catch(K){throw new A6(`Failed to reach token endpoint ${Q}: ${K}`)}let G=Y.headers.get("Request-Id");if(!Y.ok){let K=await Y.text().catch(()=>""),H=oQ(K),F="";if(Y.status===401)F=` Ensure your federation rule matches your identity token. ${$.workspaceId?"":"If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "}View your authentication events in the Workload identity page of Claude Console for more details.`;throw new A6(`Token exchange failed with status ${Y.status}${G?` (request-id ${G})`:""}: ${H}${F}`,Y.status,H,G)}let J=await kD0(Y,G),W=Number(J.expires_in);if(!Number.isFinite(W))throw new A6(`Token endpoint response missing required fields: ${JSON.stringify(oQ(J))}`,Y.status,oQ(J),G);return{token:J.access_token,expiresAt:t3()+W}}}var IO$=w(()=>{Xg()});function qO$($){return async(Z)=>{let X=await import("fs");await VD0($.credentialsPath,$.onSafetyWarning);let Q;try{Q=await X.promises.readFile($.credentialsPath,"utf-8")}catch(L){throw new A6(`Credentials file not found at ${$.credentialsPath}: ${L}`)}let Y;try{Y=JSON.parse(Q)}catch(L){throw new A6(`Credentials file at ${$.credentialsPath} is not valid JSON: ${L}`)}let G=Y.access_token;if(!G)throw new A6(`Credentials file at ${$.credentialsPath} must include 'access_token'`);let J=Y.expires_at;if(!Z?.forceRefresh&&(J==null||t3()<J-Zg))return{token:G,expiresAt:J??null};let W=Y.refresh_token;if(!$.clientId||!W)throw new A6(`Access token at ${$.credentialsPath} has expired and no refresh is available (client_id ${$.clientId?"set":"empty"}, refresh_token ${W?"set":"empty"})`);MD0($.baseURL);let K={grant_type:JO$,refresh_token:W,client_id:$.clientId},H=`${$.baseURL}${qD0}`,F;try{F=await $.fetch(H,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":MC,"User-Agent":$.userAgent||`anthropic-sdk-typescript/${NJ} userOAuthProvider`},body:JSON.stringify(K)})}catch(L){throw new A6(`User OAuth refresh failed to reach token endpoint: ${L}`)}let N=F.headers.get("Request-Id");if(!F.ok){let L=await F.text().catch(()=>"");throw new A6(`User OAuth refresh failed (HTTP ${F.status}): ${oQ(L)}`,F.status,oQ(L),N)}let U=await kD0(F,N),O=Number(U.expires_in);if(!Number.isFinite(O))throw new A6(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(oQ(U))}`,F.status,oQ(U),N);let B=t3()+O,D=U.refresh_token||W;return await SD0($.credentialsPath,{...Y,version:fD0,type:"oauth_token",access_token:U.access_token,expires_at:B,refresh_token:D}),{token:U.access_token,expiresAt:B}}}var MO$=w(()=>{Ea0();Xg()});function za0($,Z){let X=$.authentication.credentials_path??null,Q=($.base_url||Z.baseURL).replace(/\/+$/,""),Y=tj4($,X,Q,Z),G={};if($.workspace_id&&$.authentication.type==="user_oauth")G["anthropic-workspace-id"]=$.workspace_id;return{provider:Y,extraHeaders:G,baseURL:$.base_url||void 0}}async function kO$($,Z){let X=await jO$(Z);if(!X)return null;let{config:Q,fromFile:Y}=X,G=Q.authentication.credentials_path||!Y?Q:{...Q,authentication:{...Q.authentication,credentials_path:await zO$(Q,Z)??void 0}};return za0(G,$)}function tj4($,Z,X,Q){switch($.authentication.type){case"oidc_federation":{let Y=$.authentication,G=oj4(Y);if(!G)throw new A6("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)");if(!Y.federation_rule_id)throw new A6("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence).");if(!$.organization_id)throw new A6("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)");let J=RO$({identityTokenProvider:G,federationRuleId:Y.federation_rule_id,organizationId:$.organization_id,serviceAccountId:Y.service_account_id,workspaceId:$.workspace_id,baseURL:X,fetch:Q.fetch,userAgent:Q.userAgent});if(Z)return rj4(J,Z,Q.onCacheWriteError,Q.onSafetyWarning);return J}case"user_oauth":{if(!Z)throw new A6("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to <config_dir>/credentials/<profile>.json)");return qO$({credentialsPath:Z,clientId:$.authentication.client_id,baseURL:X,fetch:Q.fetch,userAgent:Q.userAgent,onSafetyWarning:Q.onSafetyWarning})}default:{let Y=$.authentication.type;throw new A6(`authentication.type "${Y}" is not a known authentication type`)}}}function oj4($){if($.identity_token){let Q=$.identity_token.source;if(Q!=="file")throw new A6(`identity_token.source "${Q}" is not supported by this SDK version (only "file")`);if(!$.identity_token.path)throw new A6('identity_token.source "file" requires a non-empty path');return ja0($.identity_token.path)}let Z=a8("ANTHROPIC_IDENTITY_TOKEN_FILE");if(Z)return ja0(Z);let X=a8("ANTHROPIC_IDENTITY_TOKEN");if(X)return AO$(X);return null}function rj4($,Z,X,Q){return async(Y)=>{let G=await import("fs");await VD0(Z,Q);let J;try{let K=await G.promises.readFile(Z,"utf-8");J=JSON.parse(K);let H=J?.access_token;if(H&&!Y?.forceRefresh){let F=J?.expires_at;if(F==null||t3()<F-Zg)return{token:H,expiresAt:F??null}}}catch(K){if(K?.code!=="ENOENT"&&!(K instanceof SyntaxError))X?.(K)}let W=await $(Y);try{await SD0(Z,{...J??{},version:fD0,type:"oauth_token",access_token:W.token,expires_at:W.expiresAt})}catch(K){X?.(K)}return W}}var VO$=w(()=>{Ea0();Xg();TO$();IO$();MO$()});class yB{constructor(){rY.set(this,void 0),aY.set(this,void 0),o0(this,rY,new Uint8Array,"f"),o0(this,aY,null,"f")}decode($){if($==null)return[];let Z=$ instanceof ArrayBuffer?new Uint8Array($):typeof $==="string"?Qg($):$;o0(this,rY,OO$([d(this,rY,"f"),Z]),"f");let X=[],Q;while((Q=aj4(d(this,rY,"f"),d(this,aY,"f")))!=null){if(Q.carriage&&d(this,aY,"f")==null){o0(this,aY,Q.index,"f");continue}if(d(this,aY,"f")!=null&&(Q.index!==d(this,aY,"f")+1||Q.carriage)){X.push(Oa0(d(this,rY,"f").subarray(0,d(this,aY,"f")-1))),o0(this,rY,d(this,rY,"f").subarray(d(this,aY,"f")),"f"),o0(this,aY,null,"f");continue}let Y=d(this,aY,"f")!==null?Q.preceding-1:Q.preceding,G=Oa0(d(this,rY,"f").subarray(0,Y));X.push(G),o0(this,rY,d(this,rY,"f").subarray(Q.index),"f"),o0(this,aY,null,"f")}return X}flush(){if(!d(this,rY,"f").length)return[];return this.decode(`
1522
1522
  `)}}function aj4($,Z){for(let Y=Z??0;Y<$.length;Y++){if($[Y]===10)return{preceding:Y,index:Y+1,carriage:!1};if($[Y]===13)return{preceding:Y,index:Y+1,carriage:!0}}return null}function SO$($){for(let Q=0;Q<$.length-1;Q++){if($[Q]===10&&$[Q+1]===10)return Q+2;if($[Q]===13&&$[Q+1]===13)return Q+2;if($[Q]===13&&$[Q+1]===10&&Q+3<$.length&&$[Q+2]===13&&$[Q+3]===10)return Q+4}return-1}var rY,aY;var Pa0=w(()=>{tQ();rY=new WeakMap,aY=new WeakMap;yB.NEWLINE_CHARS=new Set([`
1523
1523
  `,"\r"]);yB.NEWLINE_REGEXP=/\r\n|[\n\r]/g});async function*CO$($,Z){if(!$.body){if(Z.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new H1("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new H1("Attempted to iterate over a response with no body")}let X=new _O$,Q=new yB,Y=Kt($.body);for await(let G of sj4(Y))for(let J of Q.decode(G)){let W=X.decode(J);if(W)yield W}for(let G of Q.flush()){let J=X.decode(G);if(J)yield J}}async function*sj4($){let Z=new Uint8Array;for await(let X of $){if(X==null)continue;let Q=X instanceof ArrayBuffer?new Uint8Array(X):typeof X==="string"?Qg(X):X,Y=new Uint8Array(Z.length+Q.length);Y.set(Z),Y.set(Q,Z.length),Z=Y;let G;while((G=SO$(Z))!==-1)yield Z.slice(0,G),Z=Z.slice(G)}if(Z.length>0)yield Z}class _O${constructor(){this.event=null,this.data=[],this.chunks=[]}decode($){if($.endsWith("\r"))$=$.substring(0,$.length-1);if(!$){if(!this.event&&!this.data.length)return null;let Y={event:this.event,data:this.data.join(`
1524
1524
  `),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],Y}if(this.chunks.push($),$.startsWith(":"))return null;let[Z,X,Q]=ej4($,":");if(Q.startsWith(" "))Q=Q.substring(1);if(Z==="event")this.event=Q;else if(Z==="data")this.data.push(Q);return null}}function ej4($,Z){let X=$.indexOf(Z);if(X!==-1)return[$.substring(0,X),Z,$.substring(X+Z.length)];return[$,"",""]}var Nt,HX;var Ut=w(()=>{tQ();E5();Pa0();p3();xK();E5();HX=class HX{constructor($,Z,X){this.iterator=$,Nt.set(this,void 0),this.controller=Z,o0(this,Nt,X,"f")}static rawEvents($,Z=new AbortController){return CO$($,Z)}static fromSSEResponse($,Z,X){let Q=!1,Y=X?x4(X):console;async function*G(){if(Q)throw new H1("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");Q=!0;let J=!1;try{for await(let W of CO$($,Z)){if(W.event==="completion")try{yield JSON.parse(W.data)}catch(K){throw Y.error("Could not parse message into JSON:",W.data),Y.error("From chunk:",W.raw),K}if(W.event==="message_start"||W.event==="message_delta"||W.event==="message_stop"||W.event==="content_block_start"||W.event==="content_block_delta"||W.event==="content_block_stop"||W.event==="message"||W.event==="user.message"||W.event==="user.interrupt"||W.event==="user.tool_confirmation"||W.event==="user.custom_tool_result"||W.event==="user.tool_result"||W.event==="agent.message"||W.event==="agent.thinking"||W.event==="agent.tool_use"||W.event==="agent.tool_result"||W.event==="agent.mcp_tool_use"||W.event==="agent.mcp_tool_result"||W.event==="agent.custom_tool_use"||W.event==="agent.thread_context_compacted"||W.event==="session.status_running"||W.event==="session.status_idle"||W.event==="session.status_rescheduled"||W.event==="session.status_terminated"||W.event==="session.error"||W.event==="session.deleted"||W.event==="session.updated"||W.event==="span.model_request_start"||W.event==="span.model_request_end"||W.event==="span.outcome_evaluation_start"||W.event==="span.outcome_evaluation_ongoing"||W.event==="span.outcome_evaluation_end"||W.event==="user.define_outcome"||W.event==="agent.thread_message_received"||W.event==="agent.thread_message_sent"||W.event==="agent.session_thread_message_received"||W.event==="agent.session_thread_message_sent"||W.event==="session.thread_created"||W.event==="session.thread_status_created"||W.event==="session.thread_status_running"||W.event==="session.thread_status_idle"||W.event==="session.thread_status_rescheduled"||W.event==="session.thread_status_terminated")try{yield JSON.parse(W.data)}catch(K){throw Y.error("Could not parse message into JSON:",W.data),Y.error("From chunk:",W.raw),K}if(W.event==="ping")continue;if(W.event==="error"){let K=Jt(W.data)??W.data,H=K?.error?.type;throw new K9(void 0,K,void 0,$.headers,H)}}J=!0}catch(W){if(FJ(W))return;throw W}finally{if(!J)Z.abort()}}return new HX(G,Z,X)}static fromReadableStream($,Z,X){let Q=!1;async function*Y(){let J=new yB,W=Kt($);for await(let K of W)for(let H of J.decode(K))yield H;for(let K of J.flush())yield K}async function*G(){if(Q)throw new H1("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");Q=!0;let J=!1;try{for await(let W of Y()){if(J)continue;if(W)yield JSON.parse(W)}J=!0}catch(W){if(FJ(W))return;throw W}finally{if(!J)Z.abort()}}return new HX(G,Z,X)}[(Nt=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let $=[],Z=[],X=this.iterator(),Q=(Y)=>{return{next:()=>{if(Y.length===0){let G=X.next();$.push(G),Z.push(G)}return Y.shift()}}};return[new HX(()=>Q($),this.controller,d(this,Nt,"f")),new HX(()=>Q(Z),this.controller,d(this,Nt,"f"))]}toReadableStream(){let $=this,Z;return Xa0({async start(){Z=$[Symbol.asyncIterator]()},async pull(X){try{let{value:Q,done:Y}=await Z.next();if(Y)return X.close();let G=Qg(JSON.stringify(Q)+`
@@ -2850,7 +2850,7 @@ Respond with the structured verdict and a short reason.`,Dg$;var Eg$=w(()=>{P4()
2850
2850
  ${G.join(`
2851
2851
  `)}`:Y}function iJ6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2852
2852
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Xh$=200,xJ6=12,gJ6,uJ6=300,c91=3;var l91=w(()=>{b_();JA0();gJ6={aheadBy:0,behindBy:0,files:[]}});function nJ6($){if(!$||$.includes(".."))return!1;return pJ6.test($)}function Yh$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!nJ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Gh$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var pJ6;var Jh$=w(()=>{pJ6=/^[\w./@-]+$/});function d91($){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 za($,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 Wh$($,Z,X,Q){if(!Q.connectionId)throw new y_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new y_(Q9);await rO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:Q9;throw new y_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await aO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=k4$(F instanceof Error?F.message:String(F));throw N?new y_(U):F}),K=eh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await wB(H,tJ6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var tJ6=10485760,y_;var m91=w(()=>{mG();tP0();rp();Fm0();ox();y_=class y_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function rJ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!oJ6.test(Z))throw Error(`Invalid branch name: ${$}`)}function g_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(sJ6)])}function eJ6($,Z,X){let Q=w5($)[Z]?.[X];return!!Q&&Object.keys(IY(Q)).length>0}function h_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Gu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=za(Z,X);if(!Y)throw new g4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return rP0(Q,G.id,Y)}function i91($,Z){if(Z instanceof oP0)return $.json({error:Z.message},429,{...C5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,C5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,C5)}async function Fh$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Nh$($){try{let Z=await Gu($),X=await WA0(Z,$.get("vmClaim").branch);return $.json(X,200,C5)}catch(Z){return i91($,Z)}}function Pa($,Z){let Q=(FA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return FA0.set($,Y),Y.finally(()=>{if(FA0.get($)===Y)FA0.delete($)}),Q}async function mZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,C5);let Q=h_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...C5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?Z36(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...C5}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function Z36($){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 NA0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function X36($){return Uh$.includes($)}var oJ6,Kh$=524288,aJ6=65536,sJ6=1e4,Hh$=2000,$36,FA0,C5,Uh$,Oh$=()=>{let $=new F1;$.use("/:virtualMcpId/:branch/*",$36),$.post("/:virtualMcpId/:branch/write",(X)=>mZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>mZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>mZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>mZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>mZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>mZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>mZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!X36(Q))return X.json({error:`step must be one of: ${Uh$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Oy(Y.virtualMcpMetadata);try{await tO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return mZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return RN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Fg$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nh$(X);return Z(X)});let Z=(X)=>mZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hh$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nh$(X);return mZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hh$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await Gu(X),J=await KA0(G,Q.branch,Y.base);return X.json(J,200,C5)}catch(Y){return i91(X,Y)}return mZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,C5);let Q=h_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Pa(Y,async()=>{try{await A91(W,Q,Y);let K=za(G,J);if(K)await Wh$(W,Q,Y,K)}catch(K){if(K instanceof y_)return X.json({error:K.message},403,C5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,C5)}return mZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Pa(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,C5);try{let J=await Gu(X);return await Qh$(J,Q.branch,G),X.json({ok:!0},200,C5)}catch(J){let W=J instanceof g4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,C5)}});return Pa(Q.claimName,()=>mZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Pa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Gu(X),H=W.base??await K.getDefaultBranch();return await HA0(K,Q.branch,H),X.json({ok:!0},200,C5)}catch(W){return i91(X,W)}});let Y=h_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Pa(G,async()=>{try{await A91(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,C5)}return mZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Kh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=h_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=I91(F)&&U?[F,N]:Y?await Promise.all([NA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),NA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Gu(X);return Promise.all([WA0(L,Q.branch),KA0(L,Q.branch)])})(),D=await wg$(K,O,B);return X.json(D,200,C5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:F},502,C5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Kh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=h_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=I91(F)&&U?[F,N]:Y?await Promise.all([NA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),NA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Gu(X);return Promise.all([WA0(L,Q.branch),KA0(L,Q.branch)])})(),D=await Lg$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,C5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:F},502,C5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=h_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=d91(`${W}${G}`);return Fh$(X,K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:aJ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=h_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Yh$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Gh$(G,W.resolveType),H=d91(K);return Fh$(X,H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Bh$=w(()=>{w8();wN();sh();P91();RF();Kg$();_3();iX();P8();tB0();NB();Hg$();Ng$();_p0();tp();k91();Eg$();v91();b_();l91();Jh$();m91();oJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$36=nP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{rJ6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Np({orgId:Y.id,virtualMcpId:G,branch:J}),H=await fF(X,J,Q),F=Wg$({userId:H,projectRef:K}),N=W.metadata??null;if(mW$(N).fastPreviewCapability&&!eJ6(N,H,J))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await aX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});FA0=new Map;C5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Uh$=["clone","install","start"]});function wh$($,Z,X){let Q=p91.get($);if(!Q)Q={pending:null,running:!1},p91.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)Y36($,Q);return G}async function Y36($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await G36(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)p91.delete($)}}async function G36($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Yu(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=h91(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=u91(K,B),E=`${JSON.stringify(D,null,2)}
2853
- `,j=await Z.createBlob(E);await eg$(Z.owner,Z.repo,j,E);let z=L[0]??`${GA0(Q)}/${f91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of u91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Da(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:J36($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=Q36-1)throw B;await k$(nZ(2000,200,Y,2,0.5))}}}function J36($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Zm0(Q,$.deps.coAuthor)}var Q36=3,p91;var Dh$=w(()=>{uO0();sP0();u4();b_();JA0();p91=new Map});import{createHmac as Lh$,randomBytes as W36,timingSafeEqual as K36}from"crypto";function Eh$(){if(UA0)return UA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return UA0=$?Buffer.from($):W36(32),UA0}function n91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+H36)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Lh$("sha256",Eh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function jh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Lh$("sha256",Eh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!K36(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var H36=21600000,UA0=null;var zh$=w(()=>{I$()});import{z as Ju}from"zod";function N36($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&F36.test($)}function Ah$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function OA0($){let Z=$.get("decofileScope");return rP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function BA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Th$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Ph$),$.use("/:virtualMcpId/:branch/*",Ph$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await $h$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=n91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ah$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return BA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=U36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{aP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await OA0(Z),W=await wh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:eh(Q)},G),K=n91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ah$(Z)})}catch(J){return BA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await HA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return BA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return BA0(Z,Q)}}),$}var F36,U36,Ph$;var Rh$=w(()=>{sP0();w8();P91();tP0();m91();v91();Dh$();zh$();l91();b_();JA0();F36=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;U36=Ju.object({set:Ju.record(Ju.string(),Ju.unknown()).optional(),delete:Ju.array(Ju.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ph$=nP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!N36(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!jh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!nB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=za(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ih$=($)=>{let Z=new F1;if(Z.use("*",q_),Z.route("/",FP0()),Z.route("/",lf$()),Z.route("/",ty$()),Z.route("/",iy$()),Z.route("/",mP0()),Z.route("/tools",Zg$()),Z.route("/",sy$()),Z.route("/",Ry$({kvStorage:$.kvStorage})),Z.route("/",Ay$()),Z.route("/fs",gy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Oh$()),Z.route("/decofile",Th$()),Z.route("/",ly$()),Z.route("/deco-sites",UP0()),Z.route("/sso",YP0()),Z.route("/",iP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ff$()),$.mountDevAssets)Z.route("/dev-assets",OP0({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("/",w_$()),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",uy$()),Z.route("/mcp",OD0()),Z.route("/mcp/self",dP0()),Z.route("/mcp",DD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qh$=w(()=>{w8();d61();bf$();n61();BP0();lr();c61();Ty$();Iy$();hy$();on();v61();LD0();B91();cy$();dy$();py$();oy$();ey$();D91();Xg$();L91();BD0();Bh$();Rh$()});function O36($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var B36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Mh$=()=>{let $=new F1;return $.use("*",B36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:O36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var kh$=w(()=>{w8();I$();Wz0()});import{z as M1}from"zod";function GH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function R36($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function I36($,Z,X){try{return JSON.parse($)}catch{throw new Ch$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function q36($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:I36(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function M36($){let Z=$.map((X)=>{let Q=X.function.parameters?gY(X.function.parameters):gY({type:"object",properties:{}});return[X.function.name,R$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function k36($){if(!$)return;return{openai:{response_format:$}}}function V36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Vh$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Sh$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var w36=256,D36,L36,E36,j36,z36,P36,A36,T36,Ch$,_h$,vh$;var fh$=w(()=>{P4();w8();sh();QN();D36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),L36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),E36=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(L36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),j36=M1.object({type:M1.literal("text")}),z36=M1.object({type:M1.literal("json_object")}),P36=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),A36=M1.union([j36,z36,P36]),T36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(E36),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(D36).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:A36.optional(),user:M1.string().optional()});Ch$=class Ch$ extends Error{constructor($){super($);this.name="MessageConversionError"}};_h$=new F1;_h$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GH("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(GH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=T36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=R36(G.model);if(!J)return $.json(GH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>fD(j.providerId));if(!E)return $.json(GH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=q36(G.messages),U=G.tools?M36(G.tools):void 0,O=k36(G.response_format),B=V36(),D=Math.floor(Date.now()/1000);if(G.stream)return RN($,async(L)=>{let E=Vh$(F,N,U,G,O,$.req.raw.signal);try{let j=tO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=w36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sh$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Vh$(F,N,U,G,O,$.req.raw.signal),E=await pO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sh$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(GH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GH(Y.message,"server_error"),500)}});vh$=_h$});function S36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function bh$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!uG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||W7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(Da1(N)!==G)continue;if(!S36(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var xh$=w(()=>{w8();fO()});var gh$;var yh$=w(()=>{gh$={name:"decocms",version:"4.253.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function v36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_36}}var hh$,_36="https://ph.studio.decocms.com",uh$;var ch$=w(()=>{w8();_h0();EC();f9();I$();k61();yh$();hh$=new F1;hh$.get("/",($)=>{let Z={version:gh$.version,theme:ld1(),...RL().logo&&{logo:RL().logo},...SK()&&{internalUrl:jS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ev$(),posthog:v36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!SK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});uh$=hh$});function Wu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function t91($){return(Wu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function dh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Wu($))}&sz=${Z}`}function lh$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function mh$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?lh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):lh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var u_,f36,b36,x36,y36,ih$;var ph$=w(()=>{u_=l0.enum(["good","bad","neutral"]),f36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:u_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),b36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(f36)),x36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},y36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:u_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:u_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:u_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:u_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(b36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:u_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:u_.optional()})).min(1)})]),ih$=l0.object({...x36,template:y36})});function wA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ih$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var o91=w(()=>{ph$()});import{join as nh$}from"path";async function h36($){try{let Z=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(g36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=wA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||t91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function JG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function u36($,Z){let X=Wu($),Q=Z?.brand?.trim()||t91(X),Y=dh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=mh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${JG(W)}</title>`,`<meta name="description" content="${JG(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="${JG(W)}" />`,`<meta property="og:description" content="${JG(K)}" />`,`<meta property="og:url" content="${JG(J)}" />`,`<meta property="og:image" content="${JG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${JG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${JG(W)}" />`,`<meta name="twitter:description" content="${JG(K)}" />`,`<meta name="twitter:image" content="${JG(H)}" />`,`<meta name="twitter:image:alt" content="${JG(F)}" />`,`<link rel="canonical" href="${JG(J)}" />`,`<link rel="icon" href="${JG(Y)}" sizes="any" />`].join(`
2853
+ `,j=await Z.createBlob(E);await eg$(Z.owner,Z.repo,j,E);let z=L[0]??`${GA0(Q)}/${f91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of u91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Da(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:J36($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=Q36-1)throw B;await k$(nZ(2000,200,Y,2,0.5))}}}function J36($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Zm0(Q,$.deps.coAuthor)}var Q36=3,p91;var Dh$=w(()=>{uO0();sP0();u4();b_();JA0();p91=new Map});import{createHmac as Lh$,randomBytes as W36,timingSafeEqual as K36}from"crypto";function Eh$(){if(UA0)return UA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return UA0=$?Buffer.from($):W36(32),UA0}function n91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+H36)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Lh$("sha256",Eh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function jh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Lh$("sha256",Eh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!K36(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var H36=21600000,UA0=null;var zh$=w(()=>{I$()});import{z as Ju}from"zod";function N36($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&F36.test($)}function Ah$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function OA0($){let Z=$.get("decofileScope");return rP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function BA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Th$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Ph$),$.use("/:virtualMcpId/:branch/*",Ph$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await $h$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=n91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ah$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return BA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=U36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{aP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await OA0(Z),W=await wh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:eh(Q)},G),K=n91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ah$(Z)})}catch(J){return BA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await HA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return BA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return BA0(Z,Q)}}),$}var F36,U36,Ph$;var Rh$=w(()=>{sP0();w8();P91();tP0();m91();v91();Dh$();zh$();l91();b_();JA0();F36=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;U36=Ju.object({set:Ju.record(Ju.string(),Ju.unknown()).optional(),delete:Ju.array(Ju.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ph$=nP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!N36(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!jh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!nB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=za(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ih$=($)=>{let Z=new F1;if(Z.use("*",q_),Z.route("/",FP0()),Z.route("/",lf$()),Z.route("/",ty$()),Z.route("/",iy$()),Z.route("/",mP0()),Z.route("/tools",Zg$()),Z.route("/",sy$()),Z.route("/",Ry$({kvStorage:$.kvStorage})),Z.route("/",Ay$()),Z.route("/fs",gy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Oh$()),Z.route("/decofile",Th$()),Z.route("/",ly$()),Z.route("/deco-sites",UP0()),Z.route("/sso",YP0()),Z.route("/",iP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ff$()),$.mountDevAssets)Z.route("/dev-assets",OP0({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("/",w_$()),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",uy$()),Z.route("/mcp",OD0()),Z.route("/mcp/self",dP0()),Z.route("/mcp",DD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qh$=w(()=>{w8();d61();bf$();n61();BP0();lr();c61();Ty$();Iy$();hy$();on();v61();LD0();B91();cy$();dy$();py$();oy$();ey$();D91();Xg$();L91();BD0();Bh$();Rh$()});function O36($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var B36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Mh$=()=>{let $=new F1;return $.use("*",B36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:O36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var kh$=w(()=>{w8();I$();Wz0()});import{z as M1}from"zod";function GH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function R36($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function I36($,Z,X){try{return JSON.parse($)}catch{throw new Ch$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function q36($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:I36(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function M36($){let Z=$.map((X)=>{let Q=X.function.parameters?gY(X.function.parameters):gY({type:"object",properties:{}});return[X.function.name,R$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function k36($){if(!$)return;return{openai:{response_format:$}}}function V36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Vh$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Sh$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var w36=256,D36,L36,E36,j36,z36,P36,A36,T36,Ch$,_h$,vh$;var fh$=w(()=>{P4();w8();sh();QN();D36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),L36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),E36=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(L36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),j36=M1.object({type:M1.literal("text")}),z36=M1.object({type:M1.literal("json_object")}),P36=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),A36=M1.union([j36,z36,P36]),T36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(E36),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(D36).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:A36.optional(),user:M1.string().optional()});Ch$=class Ch$ extends Error{constructor($){super($);this.name="MessageConversionError"}};_h$=new F1;_h$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GH("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(GH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=T36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=R36(G.model);if(!J)return $.json(GH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>fD(j.providerId));if(!E)return $.json(GH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=q36(G.messages),U=G.tools?M36(G.tools):void 0,O=k36(G.response_format),B=V36(),D=Math.floor(Date.now()/1000);if(G.stream)return RN($,async(L)=>{let E=Vh$(F,N,U,G,O,$.req.raw.signal);try{let j=tO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=w36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sh$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Vh$(F,N,U,G,O,$.req.raw.signal),E=await pO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sh$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(GH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GH(Y.message,"server_error"),500)}});vh$=_h$});function S36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function bh$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!uG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||W7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(Da1(N)!==G)continue;if(!S36(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var xh$=w(()=>{w8();fO()});var gh$;var yh$=w(()=>{gh$={name:"decocms",version:"4.253.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 v36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_36}}var hh$,_36="https://ph.studio.decocms.com",uh$;var ch$=w(()=>{w8();_h0();EC();f9();I$();k61();yh$();hh$=new F1;hh$.get("/",($)=>{let Z={version:gh$.version,theme:ld1(),...RL().logo&&{logo:RL().logo},...SK()&&{internalUrl:jS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ev$(),posthog:v36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!SK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});uh$=hh$});function Wu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function t91($){return(Wu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function dh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Wu($))}&sz=${Z}`}function lh$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function mh$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?lh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):lh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var u_,f36,b36,x36,y36,ih$;var ph$=w(()=>{u_=l0.enum(["good","bad","neutral"]),f36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:u_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),b36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(f36)),x36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},y36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:u_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:u_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:u_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:u_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(b36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:u_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:u_.optional()})).min(1)})]),ih$=l0.object({...x36,template:y36})});function wA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ih$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var o91=w(()=>{ph$()});import{join as nh$}from"path";async function h36($){try{let Z=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(g36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=wA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||t91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function JG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function u36($,Z){let X=Wu($),Q=Z?.brand?.trim()||t91(X),Y=dh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=mh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${JG(W)}</title>`,`<meta name="description" content="${JG(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="${JG(W)}" />`,`<meta property="og:description" content="${JG(K)}" />`,`<meta property="og:url" content="${JG(J)}" />`,`<meta property="og:image" content="${JG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${JG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${JG(W)}" />`,`<meta name="twitter:description" content="${JG(K)}" />`,`<meta name="twitter:image" content="${JG(H)}" />`,`<meta name="twitter:image:alt" content="${JG(F)}" />`,`<link rel="canonical" href="${JG(J)}" />`,`<link rel="icon" href="${JG(Y)}" sizes="any" />`].join(`
2854
2854
  `)}function c36($,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}
2855
2855
  </head>`)}function th$($){let Z=new F1;return Z.get("/:domain/og.png",async(X)=>{let Q=Wu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(nh$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(l36)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?nh$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await h36(Wu(Q)),K=u36(Q,W);return X.html(c36(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var g36=2500,l36=1e4;var oh$=w(()=>{w8();o91();gL();I$()});function Aa($,Z){return fetch(`${sW({})}${$}`,Z)}async function d36($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Aa(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=wA0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var m36,qN,rh$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},ah$;var sh$=w(()=>{w8();fY();gL();o91();m36=new Set(["complete","errored","terminated","unknown"]),qN=new F1;qN.use("*",async($,Z)=>{let X=await H8.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});qN.use("/link-token/*",rh$);qN.use("/suggest",rh$);qN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await d36(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});qN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Aa("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${yL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});qN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Aa(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${yL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:m36.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});qN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Aa(`/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)}});qN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Aa(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});ah$=qN});import{createHmac as i36,timingSafeEqual as p36}from"crypto";function $u$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>n36)return!1;let W=i36("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&p36(K,F)})}function Zu$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=IJ(Z),Q=IJ(IJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:JH(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function Xu$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function JH($){return typeof $==="string"?$:void 0}function IJ($){return typeof $==="object"&&$!==null?$:void 0}function DA0($){return typeof $==="number"?new Date($*1000):null}function s91($){return JH($)??JH(IJ($)?.id)}function t36($){return s91($.subscription)??JH(IJ(IJ($.parent)?.subscription_details)?.subscription)}function o36($){let Z=DA0($.current_period_end);if(Z)return Z;let X=IJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=IJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function r91($,Z){let X=DA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function a91($,Z){let X=DA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function r36($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=JH(IJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(JH(IJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(JH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=JH(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(IJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:IJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(JH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=s91(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(r91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:s91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:a91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=JH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&r91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Xu$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:o36(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:a91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=t36(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(r91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:DA0(X.period_end),lastStripeEventAt:a91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function a36($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Xu$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function eh$($,Z){let X=a36($,Z);if(!X)return;VY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:ri1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Qu$($){let Z=new tW(u8().db),X=await r36(Z,$);if(!(X.handled&&X.topUp))eh$($,X);if(X.handled&&X.topUp)await yw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),eh$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Us1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof bY&&(Q.status===400||Q.status===404)))throw Q}return X}var n36=300;var Yu$=w(()=>{bG();V4();R60();nL();Fe0()});var s36=1048576,e91;var Gu$=w(()=>{w8();wN();I$();Yu$();e91=new F1;e91.post("/webhook",k9({maxSize:s36,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!$u$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Zu$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Qu$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as e36}from"crypto";function ZW6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return e36(Buffer.from(Y),Buffer.from(Q))}var $W6=5242880,$Z1;var Ju$=w(()=>{w8();wN();ip();$Z1=new F1;$Z1.post("/webhook",k9({maxSize:$W6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!ZW6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await qp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Wu$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Ku$,XW6,QW6,Hu$;var Fu$=w(()=>{w8();N3();xy();qx();Ku$=new F1,XW6=["range","if-none-match","if-modified-since"],QW6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Ku$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(vh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await _n(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&D3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Wu$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of XW6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of QW6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Wu$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Hu$=Ku$});var Ta=_((c_)=>{var YW6=c_&&c_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),GW6=c_&&c_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))YW6(Z,$,X)};Object.defineProperty(c_,"__esModule",{value:!0});GW6(OY(),c_)});var Ou$=_((Nu$)=>{Object.defineProperty(Nu$,"__esModule",{value:!0});Nu$.version=void 0;Nu$.version="3.4.0"});var Du$=_((WH)=>{var JW6=WH&&WH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(WH,"__esModule",{value:!0});WH.NodeTransport=WH.VERSION=void 0;WH.nodeResolveHost=UW6;var r6=Ta(),WW6=z0("net"),ZZ1=z0("tls"),KW6=z0("path"),Bu$=z0("fs"),HW6=JW6(z0("dns")),FW6=Ou$();WH.VERSION=FW6.version;var NW6="nats.js";class wu${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=NW6,this.version=WH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw r6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,WW6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,r6.deferred)();try{if($=(0,KW6.resolve)($),!(0,Bu$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Bu$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,ZZ1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,ZZ1.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.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 ZZ1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.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}}WH.NodeTransport=wu$;function UW6($){let Z=(0,r6.deferred)();return HW6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Pu$=_((zu$)=>{Object.defineProperty(zu$,"__esModule",{value:!0});zu$.connect=OW6;var Lu$=Du$(),Eu$=Ta(),ju$=Ta();function OW6($={}){if((0,ju$.hasWsProtocol)($))return Promise.reject(ju$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Eu$.setTransportFactory)({factory:()=>{return new Lu$.NodeTransport},dnsResolveFn:Lu$.nodeResolveHost}),Eu$.NatsConnectionImpl.connect($)}});var Au$=_((MN)=>{var wW6=MN&&MN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),DW6=MN&&MN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))wW6(Z,$,X)};Object.defineProperty(MN,"__esModule",{value:!0});MN.connect=void 0;var LW6=Pu$();Object.defineProperty(MN,"connect",{enumerable:!0,get:function(){return LW6.connect}});DW6(Ta(),MN)});function qu$($){let Z=$?.connectFn??PW6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:zW6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=nZ(jW6,EW6,B-1,2,0.5);await k$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Tu$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Iu$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function PW6($){return Ru$.connect($)}var Tu$,Ru$,Iu$,EW6=100,jW6=3000,zW6=3000;var Mu$=w(()=>{u4();Tu$=V(_u(),1),Ru$=V(Au$(),1),Iu$=V(uw(),1)});function XZ1($,Z){return`${$}.${Z}`}class QZ1{cache;constructor($){this.cache=jh({ttlMs:$?.ttlMs??AW6,maxSize:$?.maxSize??TW6})}async get($,Z){return this.cache.get(XZ1($,Z))??null}async set($,Z,X){this.cache.set(XZ1($,Z),X)}async invalidate($,Z){this.cache.delete(XZ1($,Z))}teardown(){this.cache.clear()}}var AW6=600000,TW6=5000;var ku$=()=>{};function LA0($,Z){return`${$}:${Z}`}function YZ1($){let Z=jh({ttlMs:$?.ttlMs??RW6,maxSize:$?.maxSize??IW6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(Vu$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(LA0(K,H))},set(K,H,F){Z.set(LA0(K,H),F)},invalidate(K,H){Z.delete(LA0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Vu$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(LA0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Vu$="studio.ai-provider-keys.invalidate",RW6=30000,IW6=5000;var Su$=()=>{};class GZ1{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=Cu$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Cu$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Cu$;var _u$=w(()=>{Cu$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var vu$=($)=>{let Z;return()=>Z??=$()},JZ1,WZ1;var fu$=w(()=>{R6();JZ1=vu$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),WZ1=vu$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function _W6(){return{name:pF,subjects:[`${lw0}.>`],storage:KW.StorageType.File,max_age:kW6,max_bytes:SW6,max_msgs_per_subject:CW6,discard:KW.DiscardPolicy.Old,retention:KW.RetentionPolicy.Limits,duplicate_window:VW6,num_replicas:1}}class yu${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 bu$($){let Z=xu$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function xW6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,MW6().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 yW6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class KZ1{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=_W6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await KW.jetstreamManager($);try{await Q.streams.info(pF),await Q.streams.update(pF,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(pF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:yW6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=xW6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=cF$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=_o0(H,{runId:Z}),U=performance.now()-F;if(JZ1().record(U),WZ1().add(1,{"org.id":Q??"unknown"}),bW6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?bu$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),fW6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=_o0(Z,{runId:$,dedup:X});if(JZ1().record(performance.now()-Y),WZ1().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:bu$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=uF$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?KW.DeliverPolicy.New:KW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=_B($),W;try{W=await(await Q.consumers.get(pF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=nw0({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(dw0()).pipeThrough(mw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(pF,{filter:_B($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var KW,xu$,qW6=($)=>{let Z;return()=>Z??=$()},MW6,kW6=86400000000000,VW6=120000000000,SW6=4294967296,CW6=500000,vW6,fW6,bW6;var gu$=w(()=>{u4();vo0();tw0();iw0();R6();fu$();KW=V(uw(),1),xu$=V(_u(),1),MW6=qW6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));vW6=process.env.STREAM_ENCODE_TRACE==="1",fW6=process.env.DECOPILOT_STREAM_TRACE==="1";bW6=vW6?new yu$:null});function EA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,CW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var hu$=w(()=>{P8()});class HZ1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function uu$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!br(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await v6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),F8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var cu$=w(()=>{$Q();xr();l5()});function mW6($){return $ instanceof n7}function iW6($,Z){return Z-$>=lW6}class FZ1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??gW6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??uW6,X=this.options.itemIntervalMs??hW6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-$t0),St0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-dW6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await kt0(this.taskBoard,Y,Q),await Vt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==t8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await iF(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),mW6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+cW6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),F8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!iW6(EF(X),Date.now()))return;await VK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===t8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await fy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await uu$(J,Q,W.map((K)=>K.merged)))return!0;if(await MN$(J,Q))return!0;if(!Y)return!1;if(!rt0(W))return!1;return await Uw0(J,Q,{previewMatchesHead:at0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var gW6=60000,hW6=300000,uW6=50,cW6=60000,lW6=900000,dW6=120000;var lu$=w(()=>{j9();ct0();lF();dn();cu$();l5();z3();Ct0();l3();kn()});import{readdir as pW6,rm as jA0}from"fs/promises";import{join as zA0}from"path";async function PA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-nW6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await l_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await du$($,Y,Z);else if(!Y.startsWith(".")){let G=zA0($,Y),J=await l_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await du$(G,K,Z)}if((await l_(G)).length===0)await jA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function du$($,Z,X){let Q=0,Y=zA0($,Z),G=await l_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=zA0(Y,W),H=await l_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=zA0(K,N);await jA0(O,{recursive:!0,force:!0}),Q++}}if((await l_(K)).length===0)await jA0(K,{recursive:!0,force:!0})}if((await l_(Y)).length===0)await jA0(Y,{recursive:!0,force:!0});return Q}async function l_($){try{return(await pW6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var nW6=30;var NZ1=()=>{};import{DBOS as UZ1,SchedulerMode as tW6}from"@dbos-inc/dbos-sdk";async function rW6(){let $=[VJ(),d_(),NH()],Z=0;for(let X of $)try{Z+=await PA0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function aW6($,Z){await UZ1.runStep(()=>rW6(),{name:"monitoringRetention"})}function iu$(){if(mu$)return;mu$=!0;let $=UZ1.registerWorkflow(aW6,{name:"monitoringRetentionWorkflow"});UZ1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:oW6,mode:tW6.ExactlyOncePerIntervalWhenActive})}var oW6="23 4 * * *",mu$=!1;var pu$=w(()=>{HY();NZ1()});function nu$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await XJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await N61($.db,Z,Q.role);return Y.boundAuth=F61({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new zL(X,void 0,Y.boundAuth,Q.role,"self"),MB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var tu$=w(()=>{PL();KC()});function sW6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function $K6(){for(let $ of eW6)$()}function ou$($){let Z=[...OZ1.logs,$];OZ1={...OZ1,logs:Z.length>500?Z.slice(-500):Z},$K6()}function BZ1(){return ZK6}var OZ1,eW6,ZK6=!1;var wZ1=w(()=>{OZ1=sW6(),eW6=new Set});import{EventEmitter as XK6}from"events";var DZ1;var ru$=w(()=>{wZ1();DZ1=new XK6;DZ1.on("request",($)=>{ou$($)})});function au$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=Ku(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>Ku(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${G5.tool}${O}${G5.dim}(${L})${G5.reset}`}else if(U.method)G=`${G5.dim}${Ku(U.method)}${G5.reset}`}}catch{}}let W=Ku(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${G5.mcp}${Ku(F.slice(0,12))}\u2026${G5.reset}`}else if(Y==="/mcp")W=`${G5.mcp}/mcp${G5.reset}`;else if(Y==="/mcp/registry")W=`${G5.mcp}/mcp/registry${G5.reset}`;let K=YK6(Q),H=J?"\u25C0":"\u2190";if(!BZ1())console.log(`${G5.dim}${H}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=QK6(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!BZ1())console.log(`${G5.dim}${B}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""} ${U}${N}${G5.reset} ${G5.duration}${O}${G5.reset}`);DZ1.emit("request",{method:Q,path:Ku(Y),status:N,duration:F,timestamp:new Date})}}}var G5,QK6=($)=>{if($>=500)return G5.serverError;if($>=400)return G5.clientError;if($>=300)return G5.redirect;return G5.ok},YK6=($)=>{return G5[$]||G5.reset},Ku=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var su$=w(()=>{wZ1();ru$();G5={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 Xc$}from"crypto";import{mkdir as GK6,readdir as JK6,rm as eu$,stat as Qc$}from"fs/promises";import{join as EZ1,relative as WK6}from"path";import{z as P$}from"zod";function Gc$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return EZ1(KK6,Z)}function Jc$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function LZ1($,Z){let X=Gc$($),Q=Jc$(Z);return EZ1(X,Q)}function HK6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Xc$("sha256",Y).update(G).digest("hex")}function Zc$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=HK6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Jc$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Wc$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Xc$("md5","etag").update(Q).digest("hex")}"`}async function Kc$($,Z,X,Q,Y){try{let G=await JK6($,{withFileTypes:!0});for(let J of G){let W=EZ1($,J.name),H=WK6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Kc$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Qc$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Wc$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Hc$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Gc$(Q);await GK6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Kc$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=LZ1(Q,G.key),W=await Qc$(J);return{contentType:o61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Wc$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??$c$;return{url:Zc$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??$c$;return{url:Zc$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=LZ1(Q,G.key);try{return await eu$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=LZ1(Q,K);try{await eu$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function jZ1($,Z,X){let Q=Hc$(Z,X),Y=new gW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:F5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new ZQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),HJ(Y,G,$,"mcp:dev-assets")}async function Fc$($,Z,X,Q){let G=Hc$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var KK6="./data/assets",$c$=3600,Yc$,Nc$;var Uc$=w(()=>{I$();oy();w8();Zd();IC();vX();BP0();Yc$=new F1;Yc$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return jZ1($.req.raw,Z,Q)});Nc$=Yc$});var Oc$={};G4(Oc$,{mountDevRoutes:()=>FK6});function FK6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return jZ1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Fc$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Nc$);let X=new F1;X.use("*",JW({mountPath:"/api/dev-assets"})),X.route("/",OP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Bc$=w(()=>{w8();l61();BP0();Uc$()});import{sql as NK6}from"kysely";import{randomUUID as wc$}from"crypto";import{z as UK6}from"zod";async function BK6($){let Z=new Date().toISOString(),X=wc$(),Q=m4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:wc$(),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 NK6`SELECT
2856
2856
  pg_notify('studio_events', ${X}),