decocms 4.372.3 → 4.373.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/dist/client/assets/{AlertCircle-CMjsP_Tk.js → AlertCircle-2L7lI8NL.js} +1 -1
  2. package/dist/client/assets/{AreaChart-Bh_grNQZ.js → AreaChart-BSJ08P7a.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-CjYy5Nhj.js → ArrowLeft-8rouBEwC.js} +1 -1
  4. package/dist/client/assets/{ArrowRight-CLncCNat.js → ArrowRight-DCA5zjxW.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-Cii1LHW7.js → ArrowUp-BtksDHBQ.js} +1 -1
  6. package/dist/client/assets/{CartesianChart-CD-5y_pX.js → CartesianChart-BbOaLmfq.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-DHXQFnpK.js → CheckCircle-BmVuh1xp.js} +1 -1
  8. package/dist/client/assets/{ChevronUp-DiYhGG4T.js → ChevronUp-fg9sod-H.js} +1 -1
  9. package/dist/client/assets/{Copy01-nMxlBfeT.js → Copy01-BgwuTJFm.js} +1 -1
  10. package/dist/client/assets/{CreditCard01-CWXVH3ZM.js → CreditCard01-CIt471eG.js} +1 -1
  11. package/dist/client/assets/DotsVertical-CE2o6L6N.js +1 -0
  12. package/dist/client/assets/{Download01-BRrSA3Yx.js → Download01-DNhEQzg0.js} +1 -1
  13. package/dist/client/assets/{ErrorBarContext-fXvhmekg.js → ErrorBarContext-DxNax47N.js} +1 -1
  14. package/dist/client/assets/{Eye-Dyg2WPG4.js → Eye-Dq6Vw6FI.js} +1 -1
  15. package/dist/client/assets/{Globe01-D6FaaFR2.js → Globe01-g_y8gAs1.js} +1 -1
  16. package/dist/client/assets/{Users03-Y0Jco4zL.js → Globe04-GFiRExL0.js} +1 -1
  17. package/dist/client/assets/{Image01-CxnjAzbb.js → Image01-QB6twEDu.js} +1 -1
  18. package/dist/client/assets/{Key01-CIXwHMRo.js → Key01-CO_i2QPb.js} +1 -1
  19. package/dist/client/assets/LayoutLeft-BfySK4h8.js +1 -0
  20. package/dist/client/assets/{Line-YO4Ozgbt.js → Line-Cr57fOtp.js} +1 -1
  21. package/dist/client/assets/{Link01-C0FvgZZB.js → Link01-BIFMl_M0.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-AWlhN5o7.js → LinkExternal01-DQD59o7F.js} +1 -1
  23. package/dist/client/assets/{Monitor01-Ccs1gh2Z.js → Monitor01-Ddm2yOG6.js} +1 -1
  24. package/dist/client/assets/{Package-nTbucmaQ.js → Package-CvzEol5_.js} +1 -1
  25. package/dist/client/assets/{Palette-DSdn1Xis.js → Palette-DT856bn6.js} +1 -1
  26. package/dist/client/assets/{Play-lMuWOObF.js → Play-wYDcJhBq.js} +1 -1
  27. package/dist/client/assets/{Plus-CVauOqLT.js → Plus-BSp00qOC.js} +1 -1
  28. package/dist/client/assets/{SearchLg-BrrPVuXr.js → SearchLg-DFD1t2UL.js} +1 -1
  29. package/dist/client/assets/{SearchMd-C45D2PMI.js → SearchMd-Bb5gjLcX.js} +1 -1
  30. package/dist/client/assets/{Sector-9mXbxJ9i.js → Sector-wViCnB96.js} +5 -5
  31. package/dist/client/assets/{Settings02-Cyf85ea0.js → Settings02-D9Qv7BDm.js} +1 -1
  32. package/dist/client/assets/{Share07-wC47qn2E.js → Share07-CZ7JzYs9.js} +1 -1
  33. package/dist/client/assets/{Stars01-oAh9h5b5.js → Stars01-D-wYuyik.js} +1 -1
  34. package/dist/client/assets/{Sun-0Ied-kyZ.js → Sun-DLRcOzSd.js} +1 -1
  35. package/dist/client/assets/Tool01-Dwy1nlT9.js +1 -0
  36. package/dist/client/assets/{Tool02-CATStXCy.js → Tool02-CvlAGFBM.js} +1 -1
  37. package/dist/client/assets/{Trash01-nl-t4IoV.js → Trash01-DtE0n00a.js} +1 -1
  38. package/dist/client/assets/{TrendUp01-BFAEMx9E.js → TrendUp01-BCriuXJd.js} +1 -1
  39. package/dist/client/assets/{Upload01-B4Fqdkae.js → Upload01-Ba-RLxE1.js} +1 -1
  40. package/dist/client/assets/{User01-ClMaVCaJ.js → User01-DHd46PZp.js} +1 -1
  41. package/dist/client/assets/{UserSquare-B2lKdt4w.js → UserSquare-CcF49LHs.js} +1 -1
  42. package/dist/client/assets/{Users01-BFhxJVhO.js → Users01-B8gdz27Y.js} +1 -1
  43. package/dist/client/assets/{X-CFCE4a-Q.js → X-BtMi8Qau.js} +1 -1
  44. package/dist/client/assets/{XCircle-CleKT0Id.js → XCircle-BLCHBIhx.js} +1 -1
  45. package/dist/client/assets/{SwitchHorizontal01-DpXsFGyJ.js → XClose-CvcHLHe2.js} +1 -1
  46. package/dist/client/assets/{Zap-B6zkqKWB.js → Zap-DZAIluO6.js} +1 -1
  47. package/dist/client/assets/ZoomOut-DUFJq3-K.js +1 -0
  48. package/dist/client/assets/{access-gate-Ds4n25mC.js → access-gate-C9Dl5e5c.js} +1 -1
  49. package/dist/client/assets/add-connection-dialog-DA05asFs.js +1 -0
  50. package/dist/client/assets/agent-analytics-CDo5Hugr.js +2 -0
  51. package/dist/client/assets/agent-app-lfl4wDqj.js +1 -0
  52. package/dist/client/assets/agent-assets-6UK-ev9d.js +1 -0
  53. package/dist/client/assets/agent-automation-BC-cMvrG.js +20 -0
  54. package/dist/client/assets/agent-automations-CnHTcvU7.js +1 -0
  55. package/dist/client/assets/agent-connect-sources-CJ8artss.js +1 -0
  56. package/dist/client/assets/agent-deck-BCZ0G4O2.js +1 -0
  57. package/dist/client/assets/agent-e2e-Cj1Q_JS0.js +1 -0
  58. package/dist/client/assets/agent-experiments-DJ13yAp9.js +1 -0
  59. package/dist/client/assets/agent-file-DbKP1r-4.js +1 -0
  60. package/dist/client/assets/{agent-git-D4IYczGa.js → agent-git-B8LMQ2zl.js} +2 -2
  61. package/dist/client/assets/agent-hosting-Bm-WxahY.js +1 -0
  62. package/dist/client/assets/agent-icon-CTsmTxHg.js +1 -0
  63. package/dist/client/assets/agent-library-file-DvybgEEZ.js +1 -0
  64. package/dist/client/assets/agent-monitor-DgVt0zbx.js +1 -0
  65. package/dist/client/assets/agent-overview-pOglhwpN.js +1 -0
  66. package/dist/client/assets/agent-settings-Bx-Ya3hQ.js +1 -0
  67. package/dist/client/assets/{agent-site-editor-DJSdtoNU.js → agent-site-editor-DVT-M9T0.js} +13 -13
  68. package/dist/client/assets/agent-site-editor-code-DpPWdLwT.js +2 -0
  69. package/dist/client/assets/agent-site-editor-content-eM0WchN0.js +2 -0
  70. package/dist/client/assets/agent-site-editor-preview-3VO_kTqr.js +518 -0
  71. package/dist/client/assets/{agent-view-guard-DHJpzCVR.js → agent-view-guard-BNYKK-x9.js} +1 -1
  72. package/dist/client/assets/agent-view-v-h5B6vN.js +1 -0
  73. package/dist/client/assets/agents-list-BXPjUzIN.js +1 -0
  74. package/dist/client/assets/{ai-providers-jxGd6MbV.js → ai-providers-BAmCFPvS.js} +2 -2
  75. package/dist/client/assets/{alert-U2IStW1f.js → alert-C8o4-kn8.js} +1 -1
  76. package/dist/client/assets/{alert-dialog-BI-B_8hq.js → alert-dialog-9n2p5SCQ.js} +2 -2
  77. package/dist/client/assets/api-keys-Cu1KdEtK.js +1 -0
  78. package/dist/client/assets/api-keys-DCurVLgh.js +1 -0
  79. package/dist/client/assets/app-editor-C3QSidsO.js +1 -0
  80. package/dist/client/assets/asset-utils-CK3Em4fb.js +1 -0
  81. package/dist/client/assets/{auth-DhzAq_9m.js → auth-BBW3DF0r.js} +1 -1
  82. package/dist/client/assets/{auth-catchall-Dar7OygY.js → auth-catchall-Bva2z4Gj.js} +1 -1
  83. package/dist/client/assets/auth-entry-BuHqwUIr.js +1 -0
  84. package/dist/client/assets/{auth-split-layout-DLFqjvPt.js → auth-split-layout-DMgxvbll.js} +1 -1
  85. package/dist/client/assets/{authenticate-and-persist-oauth-DkJ4g-X5.js → authenticate-and-persist-oauth-Pk9b2m8R.js} +1 -1
  86. package/dist/client/assets/automation-list-row-D-zBLXA-.js +1 -0
  87. package/dist/client/assets/automation-runs-C8Wbje-n.js +1 -0
  88. package/dist/client/assets/automations-D69ikqKh.js +1 -0
  89. package/dist/client/assets/{autosend-BberXmli.js → autosend-CVNOmzPu.js} +1 -1
  90. package/dist/client/assets/{avatar-C9HiP4eS.js → avatar-BzRNaDEk.js} +1 -1
  91. package/dist/client/assets/badge-C5M6nZd4.js +1 -0
  92. package/dist/client/assets/block-document-UPtnFOJG.js +3 -0
  93. package/dist/client/assets/{blocks-preview-workspace-context-Bwmvvd4S.js → blocks-preview-workspace-context-DAFMxzU6.js} +1 -1
  94. package/dist/client/assets/breadcrumb-0yy48vm9.js +1 -0
  95. package/dist/client/assets/{buckets-BndbOAGO.js → buckets-CktpbsrB.js} +1 -1
  96. package/dist/client/assets/build-improve-prompt-doc-C-SX02eL.js +2 -0
  97. package/dist/client/assets/bulk-category-panel-MrIv4eD2.js +1 -0
  98. package/dist/client/assets/calendar-QcX36iLy.js +1 -0
  99. package/dist/client/assets/capability-load-error-BVb3VEU2.js +1 -0
  100. package/dist/client/assets/category-editor-DZThBJlF.js +1 -0
  101. package/dist/client/assets/{chart-8nXuVw9P.js → chart-BVjaATZw.js} +5 -5
  102. package/dist/client/assets/{chat-context-tZCX_cqt.js → chat-context-ELO8A2Ar.js} +6 -6
  103. package/dist/client/assets/{chat-draft-BCeqPSxA.js → chat-draft-tDfZTlxU.js} +1 -1
  104. package/dist/client/assets/checkbox-iGlb02v9.js +1 -0
  105. package/dist/client/assets/choose-editor-CWLAiGtz.js +1 -0
  106. package/dist/client/assets/{cli-auth-success-D39z_FO3.js → cli-auth-success-DyNW_Pmq.js} +1 -1
  107. package/dist/client/assets/{client-icons-DpcP1bht.js → client-icons-BuRYGGKe.js} +1 -1
  108. package/dist/client/assets/collapsible-PyJ2NOzW.js +1 -0
  109. package/dist/client/assets/collection-detail-DXmBNKMr.js +1 -0
  110. package/dist/client/assets/collection-display-button-Cz5AkuIg.js +1 -0
  111. package/dist/client/assets/{collection-search-J9Bt25gS.js → collection-search-DM8MkJfo.js} +1 -1
  112. package/dist/client/assets/{collection-table-wrapper-DBeauaNS.js → collection-table-wrapper-cBr_X4Jo.js} +1 -1
  113. package/dist/client/assets/collection-tabs-aKKPIP9M.js +1 -0
  114. package/dist/client/assets/combobox-CQBdlQef.js +1 -0
  115. package/dist/client/assets/command-CZcxzTcw.js +1 -0
  116. package/dist/client/assets/{companion-mcps-section-xmRpNJBK.js → companion-mcps-section-B7qgbnOZ.js} +1 -1
  117. package/dist/client/assets/connect-D6Wz7x6C.js +8 -0
  118. package/dist/client/assets/connect-layout-DzSDvFP2.js +1 -0
  119. package/dist/client/assets/{connection-DD0omVHZ.js → connection-DStV2sLP.js} +1 -1
  120. package/dist/client/assets/connection-card-CpIJKLp3.js +1 -0
  121. package/dist/client/assets/connection-detail-junbbrHX.js +1 -0
  122. package/dist/client/assets/{connection-form-helpers-CHlcdgAK.js → connection-form-helpers-DM_wSOEJ.js} +1 -1
  123. package/dist/client/assets/connections-DvjnCZJT.js +1 -0
  124. package/dist/client/assets/{create-organization-dialog-1mI4Ad1B.js → create-organization-dialog-CvXOAbwA.js} +1 -1
  125. package/dist/client/assets/{decofile-api-BNWbEMR6.js → decofile-api-zRlIvvNL.js} +1 -1
  126. package/dist/client/assets/{decopilot-BvepxP_-.js → decopilot-BI8eOOPY.js} +2 -2
  127. package/dist/client/assets/dialog-AoC07APJ.js +1 -0
  128. package/dist/client/assets/discover-zo2iAYFW.js +1 -0
  129. package/dist/client/assets/domain-settings-C6kSznIr.js +1 -0
  130. package/dist/client/assets/download-app-dialog-CsiIuf7j.js +1 -0
  131. package/dist/client/assets/{drawer-BIjkXMV3.js → drawer-DGzquxJ8.js} +1 -1
  132. package/dist/client/assets/{editor-D4Ls62vg.js → editor-oL1B7LVJ.js} +1 -1
  133. package/dist/client/assets/{empty-state-BdiOfgle.js → empty-state-DxJQDjCw.js} +1 -1
  134. package/dist/client/assets/{empty-state-CyICQznD.js → empty-state-Y08kvU5o.js} +1 -1
  135. package/dist/client/assets/{extract-connection-data-Dbm_cKaX.js → extract-connection-data-C7Wh9xkI.js} +1 -1
  136. package/dist/client/assets/{feature-gate-Bp7Cydio.js → feature-gate-C1d068b1.js} +1 -1
  137. package/dist/client/assets/feature-paywall-BoABVlUQ.js +1 -0
  138. package/dist/client/assets/file-explorer-DG5Gvb-w.js +2 -0
  139. package/dist/client/assets/{file-preview-CARebwHJ.js → file-preview-iaqpqUYi.js} +1 -1
  140. package/dist/client/assets/file-share-button-D0lT5ixf.js +3 -0
  141. package/dist/client/assets/{file-type-icon-C9Qn36v4.js → file-type-icon-lZW2ows7.js} +1 -1
  142. package/dist/client/assets/{folder-icon-BLBZBD_a.js → folder-icon-DVG7PK8X.js} +1 -1
  143. package/dist/client/assets/{form-CSXgIHLz.js → form-CYsJTpNM.js} +1 -1
  144. package/dist/client/assets/{gateway-client-BuiOykcN.js → gateway-client-CnYYocwu.js} +1 -1
  145. package/dist/client/assets/general-BiYLEv2o.js +1 -0
  146. package/dist/client/assets/{github-icon-huXDOAgf.js → github-icon-swNUSpAU.js} +1 -1
  147. package/dist/client/assets/home-BbjS-573.js +1 -0
  148. package/dist/client/assets/{hooks-BoX5BC-f.js → hooks-BlE0QZwR.js} +2 -2
  149. package/dist/client/assets/{hooks-DZOMRp7D.js → hooks-D0dDgrIf.js} +1 -1
  150. package/dist/client/assets/icon-button-7c--Wy5B.js +1 -0
  151. package/dist/client/assets/{index-BWpNlf6e.js → index-0-s9o3tr.js} +1 -1
  152. package/dist/client/assets/index-BDYXeKzz.js +1 -0
  153. package/dist/client/assets/index-BOHOyAF8.css +1 -0
  154. package/dist/client/assets/{index-tj4CWdxr.js → index-BUfoj27y.js} +1 -1
  155. package/dist/client/assets/index-BchRuDAc.js +26 -0
  156. package/dist/client/assets/{index-BD213WLU.js → index-C97O3ClY.js} +1 -1
  157. package/dist/client/assets/index-CutV0Ygc.js +1 -0
  158. package/dist/client/assets/{index-DqT4mG5l.js → index-DGY2nhhI.js} +1 -1
  159. package/dist/client/assets/index-DItj2r3e.js +5 -0
  160. package/dist/client/assets/index-DKXWNSdB.js +1 -0
  161. package/dist/client/assets/{index-Bb-Re5q8.js → index-DllcfiZL.js} +1 -1
  162. package/dist/client/assets/{index-DiULBiX9.js → index-DyCAAYSx.js} +1 -1
  163. package/dist/client/assets/index-EcuFIS2a.js +235 -0
  164. package/dist/client/assets/{index-DWw5wi2G.js → index-Exw_Yjch.js} +1 -1
  165. package/dist/client/assets/{index-2gtoysbs.js → index-fN6RkMSD.js} +1 -1
  166. package/dist/client/assets/{index-redirect-BQTLrDGT.js → index-redirect-Bm4zqVUy.js} +1 -1
  167. package/dist/client/assets/{infiniteQueryObserver-CjWlcBHD.js → infiniteQueryObserver-3RxH1tr-.js} +1 -1
  168. package/dist/client/assets/infra-billing-CmY2herT.js +1 -0
  169. package/dist/client/assets/input-BrPa4I3Z.js +8 -0
  170. package/dist/client/assets/input-Buz_7xoG.js +1 -0
  171. package/dist/client/assets/input-C5klQNJJ.js +1 -0
  172. package/dist/client/assets/{integration-icon-BeEdjsn9.js → integration-icon-D3FHJbYu.js} +1 -1
  173. package/dist/client/assets/{label-BMxIRiEr.js → label-BX1BwzZ4.js} +1 -1
  174. package/dist/client/assets/{last-preview-page-B_H0ubHa.js → last-preview-page-BSVfE6AT.js} +1 -1
  175. package/dist/client/assets/layout-030aDjqi.js +1 -0
  176. package/dist/client/assets/legacy-agents-deep-BblX_qPq.js +1 -0
  177. package/dist/client/assets/legacy-main-redirect-BDaODIKZ.js +1 -0
  178. package/dist/client/assets/library-CmkU9fCT.js +161 -0
  179. package/dist/client/assets/{login-C4Dx9xMO.js → login-BpUdj6Fq.js} +1 -1
  180. package/dist/client/assets/{markdown-DGWjAeXL.js → markdown-VKlC4_bJ.js} +3 -3
  181. package/dist/client/assets/{mcp-app-renderer-BTjC7Gse.js → mcp-app-renderer-wS7imsel.js} +2 -2
  182. package/dist/client/assets/{mcp-oauth-C4khbNJJ.js → mcp-oauth-B7YJNr4N.js} +1 -1
  183. package/dist/client/assets/members-2ZkimP3H.js +1 -0
  184. package/dist/client/assets/message-templates-DyGM313y.js +1 -0
  185. package/dist/client/assets/{mini-report-page-Ci4cxCz8.js → mini-report-page-CYdef8vQ.js} +1 -1
  186. package/dist/client/assets/mock-board-Dk2mRFCa.js +90 -0
  187. package/dist/client/assets/{monaco-editor-CMRYkmyb.js → monaco-editor-ChRh_qus.js} +2 -2
  188. package/dist/client/assets/{monitoring-stats-row-PncjnNwy.js → monitoring-stats-row-DirMMFq2.js} +1 -1
  189. package/dist/client/assets/multi-select-CYKeAXVo.js +1 -0
  190. package/dist/client/assets/{mustache-CPZS2ebG.js → mustache-BpzqsH6c.js} +1 -1
  191. package/dist/client/assets/{oauth-callback-CETK2WZB.js → oauth-callback-CLQttSb2.js} +1 -1
  192. package/dist/client/assets/{oauth-callback-ai-provider-DqbbngEF.js → oauth-callback-ai-provider-C5AqSldx.js} +1 -1
  193. package/dist/client/assets/{onboarding-B5zAGi2B.js → onboarding-BYeSkDcE.js} +1 -1
  194. package/dist/client/assets/optimistic-project-sidebar-views-hB0JGrCs.js +1 -0
  195. package/dist/client/assets/{org-file-open-context-BCUpiY_R.js → org-file-open-context-D26BTBiX.js} +1 -1
  196. package/dist/client/assets/{organization-choice-BNulT5zU.js → organization-choice-sm9k2ko4.js} +1 -1
  197. package/dist/client/assets/orgs-BT6gh3Sc.js +1 -0
  198. package/dist/client/assets/{page-seo-form-BrHgBXF1.js → page-seo-form-Bhk-2qvu.js} +1 -1
  199. package/dist/client/assets/{pair-B46EBBjF.js → pair-Bh73YYpe.js} +8 -8
  200. package/dist/client/assets/plan-ladder-B-hb17ya.js +1 -0
  201. package/dist/client/assets/{popover-yk_ePqAA.js → popover-Bff85VlI.js} +1 -1
  202. package/dist/client/assets/post-calendar-BUJnl75O.js +1 -0
  203. package/dist/client/assets/post-editor-B8ClYTJb.js +1 -0
  204. package/dist/client/assets/{preview-content-CfbsbElk.js → preview-content-C4FuOpTi.js} +1 -1
  205. package/dist/client/assets/{preview-dialog-CA2C3DS4.js → preview-dialog-DY1kQ4y_.js} +1 -1
  206. package/dist/client/assets/primitives-BCCkMTJb.js +1 -0
  207. package/dist/client/assets/profile-T7ySaz_t.js +1 -0
  208. package/dist/client/assets/project-app-view-D4HCSkue.js +1 -0
  209. package/dist/client/assets/project-feed-CRHprIgj.js +1 -0
  210. package/dist/client/assets/{project-icon-MWmzrrm8.js → project-icon-D_oHwik9.js} +1 -1
  211. package/dist/client/assets/project-reports-CzVFjEoR.js +1 -0
  212. package/dist/client/assets/project-tasks-c_cBe8VF.js +1 -0
  213. package/dist/client/assets/{prompts-4lILOzK9.js → prompts-BuPAnA4R.js} +1 -1
  214. package/dist/client/assets/record-editor-CHfqyrFA.js +1 -0
  215. package/dist/client/assets/redirect-editor-BrEMZWAU.js +1 -0
  216. package/dist/client/assets/registry-4kJYrulU.js +2 -0
  217. package/dist/client/assets/registry-layout-o90YrVKa.js +27 -0
  218. package/dist/client/assets/reports-COffkxyo.js +1 -0
  219. package/dist/client/assets/{reports-BpxYdv2_.js → reports-DEVutxJq.js} +2 -2
  220. package/dist/client/assets/reports-onboarding-Dt5mvf07.js +1 -0
  221. package/dist/client/assets/reports-tab-C6PZg0b6.js +2 -0
  222. package/dist/client/assets/repositories-DBFrDUwl.js +1 -0
  223. package/dist/client/assets/repository-import-picker-ftg0FRzY.js +1 -0
  224. package/dist/client/assets/repository-picker-BKj90hIS.js +1 -0
  225. package/dist/client/assets/{require-capability-CmtOZnXt.js → require-capability-gpVnF6U4.js} +1 -1
  226. package/dist/client/assets/{required-auth-layout-RoMNnMPO.js → required-auth-layout-BhdxJMdb.js} +1 -1
  227. package/dist/client/assets/{reset-password-BeUL8IgX.js → reset-password-DD2ixVIR.js} +1 -1
  228. package/dist/client/assets/resizable-wU1MiASn.js +1 -0
  229. package/dist/client/assets/review-settings-3uLiRV1J.js +1 -0
  230. package/dist/client/assets/{rich-text-link-control-CHsxXHIo.js → rich-text-link-control-Bn-QsIS6.js} +2 -2
  231. package/dist/client/assets/roles-DX_ap2B0.js +1 -0
  232. package/dist/client/assets/route-Bdqr734y.js +1 -0
  233. package/dist/client/assets/route-Cg6AOuOY.js +1 -0
  234. package/dist/client/assets/route-DGhKwFXa.js +1 -0
  235. package/dist/client/assets/route-page-header-DKm5kHtX.js +1 -0
  236. package/dist/client/assets/runnable-block-editor-9i5DpxOA.js +16 -0
  237. package/dist/client/assets/{sandbox-lifecycle-context-C7VKOJoV.js → sandbox-lifecycle-context-BHn9YFEW.js} +2 -2
  238. package/dist/client/assets/{schema-1zAO-l7e.js → schema-FDf70VFI.js} +1 -1
  239. package/dist/client/assets/{scroll-area-C-wtbVS1.js → scroll-area-DMmJ7JtI.js} +1 -1
  240. package/dist/client/assets/search-input-BHVk6m6A.js +1 -0
  241. package/dist/client/assets/search-toggle-CCC7TvwN.js +1 -0
  242. package/dist/client/assets/secrets-BNtrMaDs.js +1 -0
  243. package/dist/client/assets/sections-editor-HtflyYMM.js +2 -0
  244. package/dist/client/assets/select-DBfOOW9i.js +1 -0
  245. package/dist/client/assets/select-model-2C5Fdpra.js +1 -0
  246. package/dist/client/assets/seo-editor-CFULobkJ.js +1 -0
  247. package/dist/client/assets/separator-8fswVHAH.js +1 -0
  248. package/dist/client/assets/settings-tab-s3d5MtS-.js +5 -0
  249. package/dist/client/assets/{sheet-i72Qx7sL.js → sheet-DWSThpSZ.js} +1 -1
  250. package/dist/client/assets/shell-layout-BQnbNNla.js +1 -0
  251. package/dist/client/assets/{shell-layout-CuFt8bor.css → shell-layout-CE2Eihra.css} +1 -1
  252. package/dist/client/assets/sidebar-CoC2_Nad.js +1 -0
  253. package/dist/client/assets/{skill-preview-gfYVdSdM.js → skill-preview-QgrtYNqp.js} +1 -1
  254. package/dist/client/assets/skills-BVINvlqv.js +1 -0
  255. package/dist/client/assets/sso-CSqM_F3b.js +1 -0
  256. package/dist/client/assets/store-DBNpNTVQ.js +1 -0
  257. package/dist/client/assets/store-registry-DLmFNBij.js +2 -0
  258. package/dist/client/assets/{switch-BQFtt3BH.js → switch-BIfmgDHS.js} +1 -1
  259. package/dist/client/assets/synced-repos-CG_pm_Ch.js +1 -0
  260. package/dist/client/assets/{table-6I6YKvFY.js → table-CEVOOGGz.js} +1 -1
  261. package/dist/client/assets/{tabs-CLziM0Ww.js → tabs-Dd0IWElc.js} +1 -1
  262. package/dist/client/assets/{task-board-DrUf5p-Z.js → task-board-Dip4Wu9j.js} +1 -1
  263. package/dist/client/assets/task-route-SKFoAFiU.js +1 -0
  264. package/dist/client/assets/task-status-k7EGfTLN.js +1 -0
  265. package/dist/client/assets/taskboard-analytics-C3lk9wb7.js +1 -0
  266. package/dist/client/assets/tasks-Sl_c9zFF.js +1 -0
  267. package/dist/client/assets/{tasks-Drgd6az8.js → tasks-ebQIYdwz.js} +4 -4
  268. package/dist/client/assets/textarea-D5v3ol7T.js +1 -0
  269. package/dist/client/assets/thread-button-C3YUAV-G.js +1 -0
  270. package/dist/client/assets/{thread-intent-F-sZEflj.js → thread-intent-CTSjhfEo.js} +1 -1
  271. package/dist/client/assets/thread-route-B57JfaL5.js +1 -0
  272. package/dist/client/assets/thread-route-CHwqHPf_.js +1 -0
  273. package/dist/client/assets/thread-sheet-body-Hqh1hVbj.js +1 -0
  274. package/dist/client/assets/toggle-group-CwAn2mKr.js +1 -0
  275. package/dist/client/assets/toolbar-icon-button-ChZE-2zp.js +1 -0
  276. package/dist/client/assets/{tooltip-DV2xHesQ.js → tooltip-nr5oS_bm.js} +1 -1
  277. package/dist/client/assets/{track-ZuOMvhd2.js → track-BDYWN4z3.js} +1 -1
  278. package/dist/client/assets/{types-27TVsPN_.js → types-7UQ7SDxU.js} +3 -3
  279. package/dist/client/assets/usage-stats-YafP0g9G.js +1 -0
  280. package/dist/client/assets/use-ai-providers-D-abiIwe.js +1 -0
  281. package/dist/client/assets/use-automations-D_y1YNke.js +1 -0
  282. package/dist/client/assets/{use-autosave-DOzyZumC.js → use-autosave-z8cIzzdm.js} +1 -1
  283. package/dist/client/assets/use-connect-companion-jQzCS0Na.js +1 -0
  284. package/dist/client/assets/use-connection-BKZRi94S.js +1 -0
  285. package/dist/client/assets/{use-copy-C_ctOeuP.js → use-copy-Cp_DyXH6.js} +1 -1
  286. package/dist/client/assets/{use-create-virtual-mcp-D1w9d4ex.js → use-create-virtual-mcp-nvoTomrD.js} +1 -1
  287. package/dist/client/assets/{use-date-fns-locale-onM9TTf8.js → use-date-fns-locale-CNoKSvxx.js} +1 -1
  288. package/dist/client/assets/{use-debounced-autosave-DqyNKPJM.js → use-debounced-autosave-B0HBbqeX.js} +1 -1
  289. package/dist/client/assets/{use-debounced-value-B9nG3bW5.js → use-debounced-value-BgYHDTDk.js} +1 -1
  290. package/dist/client/assets/use-deco-credits-CqbkXgA9.js +1 -0
  291. package/dist/client/assets/{use-decopilot-events-BpuQrfKN.js → use-decopilot-events-qaEKsixC.js} +1 -1
  292. package/dist/client/assets/use-delete-connection-CqvqqWgS.js +1 -0
  293. package/dist/client/assets/{use-deployment-admin-BVfgEagI.js → use-deployment-admin-DzkF6L4b.js} +1 -1
  294. package/dist/client/assets/{use-entitlements-Dl7pAsQ5.js → use-entitlements-kPr6KRf9.js} +1 -1
  295. package/dist/client/assets/{use-fast-preview-draft-url-mcfOeAAq.js → use-fast-preview-draft-url-BBBDyhsD.js} +1 -1
  296. package/dist/client/assets/use-file-configs-6ygOocDG.js +1 -0
  297. package/dist/client/assets/use-in-settings-BCDqA2EC.js +1 -0
  298. package/dist/client/assets/{use-infinite-scroll-PhBGPm8H.js → use-infinite-scroll-D0T36z_V.js} +1 -1
  299. package/dist/client/assets/use-join-requests-BBovhUnp.js +1 -0
  300. package/dist/client/assets/use-main-panel-tabs-BghanH6r.js +1 -0
  301. package/dist/client/assets/use-mcp-auth-status-h4sAecTI.js +1 -0
  302. package/dist/client/assets/{use-mcp-client-e_hCatGm.js → use-mcp-client-B_gcvvCy.js} +6 -6
  303. package/dist/client/assets/{use-mcp-prompts-DJRXjL4_.js → use-mcp-prompts-DfSKL4Gu.js} +1 -1
  304. package/dist/client/assets/{use-mcp-tools-g86k4oib.js → use-mcp-tools-DC47roTz.js} +1 -1
  305. package/dist/client/assets/use-members-C6brpkJ1.js +1 -0
  306. package/dist/client/assets/{use-mobile-hIijCK0k.js → use-mobile-BZ15DgEB.js} +1 -1
  307. package/dist/client/assets/use-navigate-to-agent-B8SXI0oO.js +1 -0
  308. package/dist/client/assets/use-open-billing-url-BAg3ZeFq.js +1 -0
  309. package/dist/client/assets/use-org-auth-client-8fDIgHEZ.js +1 -0
  310. package/dist/client/assets/use-org-fs-Bf6n51Xm.js +1 -0
  311. package/dist/client/assets/use-org-repo-syncs-CnBqiATM.js +8 -0
  312. package/dist/client/assets/{use-org-sso-BvfIL0yq.js → use-org-sso-QeqdMaIa.js} +1 -1
  313. package/dist/client/assets/use-organization-roles-tuKknI1K.js +1 -0
  314. package/dist/client/assets/use-organization-settings-DvtBymY3.js +1 -0
  315. package/dist/client/assets/{use-panel-navigate-WrD0KEYx.js → use-panel-navigate-IItrbgmN.js} +1 -1
  316. package/dist/client/assets/use-project-native-view-presence-WwnxvZuP.js +1 -0
  317. package/dist/client/assets/use-project-scope-CCxyXvEU.js +1 -0
  318. package/dist/client/assets/use-registry-connections-Bd4wJHbx.js +1 -0
  319. package/dist/client/assets/use-releases-DZvNer89.js +1 -0
  320. package/dist/client/assets/use-reports-diagnostic-BeTEI2FZ.js +1 -0
  321. package/dist/client/assets/{use-route-default-main-Djaj_cL9.js → use-route-default-main-BhbKsXCz.js} +1 -1
  322. package/dist/client/assets/use-secrets-Bq9yyXHE.js +1 -0
  323. package/dist/client/assets/{use-section-preview-base-BOFovHh4.js → use-section-preview-base--XbKHK2U.js} +1 -1
  324. package/dist/client/assets/{use-session-runtime-BR1aW1y5.js → use-session-runtime-B5wMaHtP.js} +1 -1
  325. package/dist/client/assets/use-tags-Do2tDPSO.js +1 -0
  326. package/dist/client/assets/use-task-board-analytics-MK_Z2cUq.js +1 -0
  327. package/dist/client/assets/use-task-metadata-CQjLXps1.js +1 -0
  328. package/dist/client/assets/use-thread-outputs-DYukUH5N.js +1 -0
  329. package/dist/client/assets/{use-view-mode-B0LeaJg7.js → use-view-mode-BEPkb8x0.js} +1 -1
  330. package/dist/client/assets/use-virtual-mcp-Ji9vcgUj.js +1 -0
  331. package/dist/client/assets/useInfiniteQuery-CzQJkRT9.js +1 -0
  332. package/dist/client/assets/{useQueries-C-SV8tD7.js → useQueries-D0xhxw7a.js} +1 -1
  333. package/dist/client/assets/useSuspenseInfiniteQuery-D9iG0Y5m.js +1 -0
  334. package/dist/client/assets/{users-BiOPZ43X.js → users-DzwkCv2F.js} +1 -1
  335. package/dist/client/assets/utils-y2q6u6PK.js +4 -0
  336. package/dist/client/assets/variant-calendar-D1R9xk7D.js +1 -0
  337. package/dist/client/assets/{variant-matcher-override-BFQoXu82.js → variant-matcher-override-qHzE4baz.js} +1 -1
  338. package/dist/client/assets/view-mode-toggle-Ca0bFull.js +1 -0
  339. package/dist/client/assets/{virtual-mcp-ldxphi5G.js → virtual-mcp-Dji-1ojO.js} +1 -1
  340. package/dist/client/index.html +2 -2
  341. package/dist/server/cli.js +3 -3
  342. package/dist/server/server.js +3 -3
  343. package/package.json +1 -1
  344. package/dist/client/assets/Check-B3RSsr_D.js +0 -1
  345. package/dist/client/assets/ChevronRight-USKkhEpL.js +0 -1
  346. package/dist/client/assets/ChevronSelectorVertical-DpRb2z1l.js +0 -1
  347. package/dist/client/assets/Database01-C0YJpjc3.js +0 -1
  348. package/dist/client/assets/DotsVertical-CsjwfYzf.js +0 -1
  349. package/dist/client/assets/File02-BvR-HYxK.js +0 -1
  350. package/dist/client/assets/GitBranch01-rWb2SJK9.js +0 -1
  351. package/dist/client/assets/HardDrive-DNTPLPT4.js +0 -1
  352. package/dist/client/assets/MessageCircle01-DBcg2aiD.js +0 -1
  353. package/dist/client/assets/Printer-CvyxF9Jo.js +0 -1
  354. package/dist/client/assets/Shield01-CqB4I7qm.js +0 -1
  355. package/dist/client/assets/Tool01-DouqPjim.js +0 -1
  356. package/dist/client/assets/XClose-BgzK-Dwz.js +0 -1
  357. package/dist/client/assets/ZoomOut-BPxprY2s.js +0 -1
  358. package/dist/client/assets/add-connection-dialog-DZjTm9W3.js +0 -1
  359. package/dist/client/assets/agent-analytics-DmvdLg8B.js +0 -2
  360. package/dist/client/assets/agent-app-BvmFdS4C.js +0 -1
  361. package/dist/client/assets/agent-assets-czUGY90q.js +0 -1
  362. package/dist/client/assets/agent-automation-C5Kr5Oj3.js +0 -20
  363. package/dist/client/assets/agent-automations-D-3-Opoc.js +0 -1
  364. package/dist/client/assets/agent-connect-sources-CjhmYssY.js +0 -1
  365. package/dist/client/assets/agent-deck-BC5MWVm-.js +0 -1
  366. package/dist/client/assets/agent-e2e-DkL4Ltr6.js +0 -1
  367. package/dist/client/assets/agent-experiments--rXT-2aB.js +0 -1
  368. package/dist/client/assets/agent-file-C3XkHLMm.js +0 -1
  369. package/dist/client/assets/agent-hosting-DaIfm8Hu.js +0 -1
  370. package/dist/client/assets/agent-icon-CczrFEe7.js +0 -1
  371. package/dist/client/assets/agent-library-file-Dji653pU.js +0 -1
  372. package/dist/client/assets/agent-monitor-C-HIyaF_.js +0 -1
  373. package/dist/client/assets/agent-overview-cm15sxNU.js +0 -1
  374. package/dist/client/assets/agent-settings-XmhY1FOi.js +0 -1
  375. package/dist/client/assets/agent-site-editor-code-_Tz57RqE.js +0 -2
  376. package/dist/client/assets/agent-site-editor-content-DOAcxz0t.js +0 -2
  377. package/dist/client/assets/agent-site-editor-preview-mg5Q6hoW.js +0 -518
  378. package/dist/client/assets/agent-view-ClMILC98.js +0 -1
  379. package/dist/client/assets/agents-list-rKFF5b3o.js +0 -1
  380. package/dist/client/assets/anchors-yqDzZN4K.js +0 -1
  381. package/dist/client/assets/api-keys-AIfL76r6.js +0 -1
  382. package/dist/client/assets/api-keys-B6ry5Bc6.js +0 -1
  383. package/dist/client/assets/app-editor-BZKFeBmU.js +0 -1
  384. package/dist/client/assets/asset-utils-DhbLEVKo.js +0 -1
  385. package/dist/client/assets/auth-entry-CwWjlqGu.js +0 -1
  386. package/dist/client/assets/automation-list-row-Btr-Kty6.js +0 -1
  387. package/dist/client/assets/automation-runs-CnOOOwZJ.js +0 -1
  388. package/dist/client/assets/automations-CtLmB1Eo.js +0 -1
  389. package/dist/client/assets/badge-Bu51Hlti.js +0 -1
  390. package/dist/client/assets/block-document-BLCekKXO.js +0 -3
  391. package/dist/client/assets/breadcrumb-Dhdru7Jh.js +0 -1
  392. package/dist/client/assets/build-improve-prompt-doc-Cedp3vV1.js +0 -2
  393. package/dist/client/assets/bulk-category-panel-D3c_qJDk.js +0 -1
  394. package/dist/client/assets/calendar-DIQx67oO.js +0 -1
  395. package/dist/client/assets/capability-load-error-CJMvYDf4.js +0 -1
  396. package/dist/client/assets/cards-BVw8sRdW.js +0 -8
  397. package/dist/client/assets/category-editor-C7sRrVfl.js +0 -1
  398. package/dist/client/assets/checkbox-jLf7fBuW.js +0 -1
  399. package/dist/client/assets/choose-editor-Cbu3-nVC.js +0 -1
  400. package/dist/client/assets/collapsible-CTgXdVQa.js +0 -1
  401. package/dist/client/assets/collection-detail-BF7WM7Gn.js +0 -1
  402. package/dist/client/assets/collection-display-button-C-4xB6xx.js +0 -1
  403. package/dist/client/assets/collection-tabs-CrXIJeNf.js +0 -1
  404. package/dist/client/assets/combobox-BHrqHmge.js +0 -1
  405. package/dist/client/assets/command-B-XD29Nx.js +0 -1
  406. package/dist/client/assets/command-palette-store-DK-56E2K.js +0 -1
  407. package/dist/client/assets/connect-D4qCE3TM.js +0 -8
  408. package/dist/client/assets/connect-layout-DGO84ImO.js +0 -1
  409. package/dist/client/assets/connection-card-fcMCwbTh.js +0 -1
  410. package/dist/client/assets/connection-detail-DS015J4e.js +0 -1
  411. package/dist/client/assets/connections-C98FMYyY.js +0 -1
  412. package/dist/client/assets/dialog-llvhXw2o.js +0 -1
  413. package/dist/client/assets/discover-DNPHmIfF.js +0 -1
  414. package/dist/client/assets/domain-settings-CXxEmIjB.js +0 -1
  415. package/dist/client/assets/download-app-dialog-D_4eQbbs.js +0 -1
  416. package/dist/client/assets/dropdown-menu-C5iafa8S.js +0 -1
  417. package/dist/client/assets/feature-paywall-DEy2mpV2.js +0 -1
  418. package/dist/client/assets/file-explorer-Bs7B2-rr.js +0 -2
  419. package/dist/client/assets/file-share-button-Dk1ugrdV.js +0 -3
  420. package/dist/client/assets/general-BYFfG0fF.js +0 -1
  421. package/dist/client/assets/home-DTaaCW3K.js +0 -1
  422. package/dist/client/assets/index-2eKztu7k.js +0 -5
  423. package/dist/client/assets/index-BH7uCYoT.js +0 -1
  424. package/dist/client/assets/index-CSd_k8Np.js +0 -1
  425. package/dist/client/assets/index-CiMUXLco.js +0 -26
  426. package/dist/client/assets/index-CpNTsElB.css +0 -1
  427. package/dist/client/assets/index-D4RUT3q0.js +0 -1
  428. package/dist/client/assets/index-D_X-LIyA.js +0 -1
  429. package/dist/client/assets/index-Dc7hzqoi.js +0 -235
  430. package/dist/client/assets/infra-billing-D6jrbNxA.js +0 -1
  431. package/dist/client/assets/input-DXlaTX4w.js +0 -1
  432. package/dist/client/assets/input-D_FfvHr0.js +0 -8
  433. package/dist/client/assets/input-uIV5S_EX.js +0 -1
  434. package/dist/client/assets/layout-Dli4i2a0.js +0 -1
  435. package/dist/client/assets/legacy-agents-deep-CoiLV3QJ.js +0 -1
  436. package/dist/client/assets/legacy-main-redirect-BZ4nzqkQ.js +0 -1
  437. package/dist/client/assets/library-Dste3SFA.js +0 -161
  438. package/dist/client/assets/members-CRtKrUle.js +0 -1
  439. package/dist/client/assets/message-templates-B8kOo0Kk.js +0 -1
  440. package/dist/client/assets/mock-board-DRa60E6i.js +0 -90
  441. package/dist/client/assets/multi-select-DzAZ8Rb8.js +0 -1
  442. package/dist/client/assets/optimistic-project-sidebar-views-CrZ9OeIk.js +0 -1
  443. package/dist/client/assets/orgs-B1TBklWZ.js +0 -1
  444. package/dist/client/assets/plan-ladder-B2pv9Y73.js +0 -1
  445. package/dist/client/assets/post-calendar-Bx8YiCbs.js +0 -1
  446. package/dist/client/assets/post-editor-B1fD7o8C.js +0 -1
  447. package/dist/client/assets/primitives-JiGRyPkw.js +0 -1
  448. package/dist/client/assets/profile-CDR0JVtv.js +0 -1
  449. package/dist/client/assets/project-app-view-8VWdrWMf.js +0 -1
  450. package/dist/client/assets/project-feed-ChJRKxhk.js +0 -1
  451. package/dist/client/assets/project-reports-D31utlHg.js +0 -1
  452. package/dist/client/assets/project-tasks-D2AAgqxo.js +0 -1
  453. package/dist/client/assets/record-editor-DPAL8Tq5.js +0 -1
  454. package/dist/client/assets/redirect-editor-EPs_GX-_.js +0 -1
  455. package/dist/client/assets/registry-Dw8UrRRZ.js +0 -2
  456. package/dist/client/assets/registry-layout-CC2lewiS.js +0 -27
  457. package/dist/client/assets/reports-Ch9UvBcS.js +0 -1
  458. package/dist/client/assets/reports-onboarding-Dhm8IBuD.js +0 -1
  459. package/dist/client/assets/reports-tab-BJWrZp37.js +0 -2
  460. package/dist/client/assets/repositories-CMIGVJwC.js +0 -1
  461. package/dist/client/assets/repository-import-picker-DhVniDI2.js +0 -1
  462. package/dist/client/assets/repository-picker-BkoSI-jm.js +0 -1
  463. package/dist/client/assets/resizable-Bt7dvMCc.js +0 -1
  464. package/dist/client/assets/review-settings-Cx_Yzx40.js +0 -1
  465. package/dist/client/assets/roles-BNleKwt9.js +0 -1
  466. package/dist/client/assets/route-CHqG9ihd.js +0 -1
  467. package/dist/client/assets/route-DqJoK5dW.js +0 -1
  468. package/dist/client/assets/route-x8jgkj5T.js +0 -1
  469. package/dist/client/assets/runnable-block-editor-xmOnaiFL.js +0 -16
  470. package/dist/client/assets/search-input-Pobww52G.js +0 -1
  471. package/dist/client/assets/secrets-BF5nuoR4.js +0 -1
  472. package/dist/client/assets/sections-editor-B1LpXw4X.js +0 -2
  473. package/dist/client/assets/select-BkKPcZFe.js +0 -1
  474. package/dist/client/assets/select-model-DPv-zVVj.js +0 -1
  475. package/dist/client/assets/seo-editor-9G7mQFJ5.js +0 -1
  476. package/dist/client/assets/settings-tab-D1V5Uszb.js +0 -5
  477. package/dist/client/assets/shell-layout-Ce0aCJuX.js +0 -1
  478. package/dist/client/assets/sidebar-C5KRz1Pj.js +0 -1
  479. package/dist/client/assets/skills-CgTiBPyO.js +0 -1
  480. package/dist/client/assets/sso-BK-aRT5P.js +0 -1
  481. package/dist/client/assets/store-Nm6KtwbD.js +0 -1
  482. package/dist/client/assets/store-registry-Cs6bPPkP.js +0 -2
  483. package/dist/client/assets/synced-repos-B1z4DDCt.js +0 -1
  484. package/dist/client/assets/task-route-BCTCy27Q.js +0 -1
  485. package/dist/client/assets/task-status-DhCT2ly_.js +0 -1
  486. package/dist/client/assets/taskboard-analytics-Cf1r1f7I.js +0 -1
  487. package/dist/client/assets/tasks-BNvHI7hJ.js +0 -1
  488. package/dist/client/assets/textarea-BU6xemAP.js +0 -1
  489. package/dist/client/assets/thread-route-BBf64Mwk.js +0 -1
  490. package/dist/client/assets/thread-route-BSYRqZDg.js +0 -1
  491. package/dist/client/assets/thread-sheet-body-B4OUWlMn.js +0 -1
  492. package/dist/client/assets/toggle-group-BiU_UDOq.js +0 -1
  493. package/dist/client/assets/toolbar-icon-button-PuQFE8Y9.js +0 -1
  494. package/dist/client/assets/usage-stats-vMRDbAUM.js +0 -1
  495. package/dist/client/assets/use-ai-providers-BnF5Rw_n.js +0 -1
  496. package/dist/client/assets/use-automations-Bo0S3g8m.js +0 -1
  497. package/dist/client/assets/use-connect-companion-CClQCUMS.js +0 -1
  498. package/dist/client/assets/use-connection-Ba04fHwa.js +0 -1
  499. package/dist/client/assets/use-deco-credits-BGBshlLi.js +0 -1
  500. package/dist/client/assets/use-delete-connection-Cns6x8UC.js +0 -1
  501. package/dist/client/assets/use-file-configs-DYGSdjth.js +0 -1
  502. package/dist/client/assets/use-join-requests-DjeVFQr9.js +0 -1
  503. package/dist/client/assets/use-main-panel-tabs-sSRGo66A.js +0 -1
  504. package/dist/client/assets/use-mcp-auth-status-I377R0Kg.js +0 -1
  505. package/dist/client/assets/use-members-DPYHJDe2.js +0 -1
  506. package/dist/client/assets/use-navigate-to-agent-C8pu0B4z.js +0 -1
  507. package/dist/client/assets/use-open-billing-url-Df7K1DCF.js +0 -1
  508. package/dist/client/assets/use-org-auth-client-DbPU3bA-.js +0 -1
  509. package/dist/client/assets/use-org-fs-Du-ErRPs.js +0 -1
  510. package/dist/client/assets/use-org-notice-CyiiFkRG.js +0 -1
  511. package/dist/client/assets/use-organization-roles-FAEtbpE5.js +0 -1
  512. package/dist/client/assets/use-organization-settings-CKbX2SdA.js +0 -1
  513. package/dist/client/assets/use-project-native-view-presence-DWzPH-Sc.js +0 -1
  514. package/dist/client/assets/use-project-scope-DU0-JxYr.js +0 -1
  515. package/dist/client/assets/use-registry-connections-SLFMHpqj.js +0 -1
  516. package/dist/client/assets/use-releases-CFNTwgY3.js +0 -1
  517. package/dist/client/assets/use-reports-diagnostic-8BvW2in8.js +0 -1
  518. package/dist/client/assets/use-secrets-DVry--sz.js +0 -1
  519. package/dist/client/assets/use-tags-CZXCbbwL.js +0 -1
  520. package/dist/client/assets/use-task-board-analytics-Ci1AhxvH.js +0 -1
  521. package/dist/client/assets/use-task-metadata-Dt9l5S_a.js +0 -1
  522. package/dist/client/assets/use-thread-outputs-Dq-RN0P_.js +0 -1
  523. package/dist/client/assets/use-virtual-mcp-DkK7ErtB.js +0 -1
  524. package/dist/client/assets/useInfiniteQuery-CspLjV7h.js +0 -1
  525. package/dist/client/assets/useSuspenseInfiniteQuery-BiQYAhJn.js +0 -1
  526. package/dist/client/assets/utils-DsvmRe8M.js +0 -4
  527. package/dist/client/assets/variant-calendar-DImnsJnP.js +0 -1
  528. package/dist/client/assets/view-mode-toggle-DvGhnpsV.js +0 -1
@@ -1573,7 +1573,7 @@ Studio renders those as real images in the comment.`,`- End the run by calling \
1573
1573
  If the preview will not render (303s, hangs, blank) or you otherwise cannot exercise the change, do NOT approve: request changes stating what is blocking and what is needed to unblock. An unverified preview is not a pass.
1574
1574
  `+"4. RECORD the whole pass as a task comment BEFORE the decision \u2014 a "+"durable record, separate from the short decision summary, and REQUIRED: a verdict with no comment is an incomplete run and you will be asked for one. Structure it: what you read and the concrete issues with file/line references, WHICH of them you fixed (with the commits), the acceptance criteria / scenarios you exercised with a pass/fail on each, a "+"before\u2192after pointer to the screenshots, the exact URL(s) and viewport, "+`and anything you did not review or could not verify and why.
1575
1575
  That comment must ALWAYS carry the visual change: embed the before/after screenshots in it whenever the change has any visual surface. If it has none, write the exact words \`${Us}\` in the comment and `+"name why (backend-only, config, test-only) \u2014 that literal is what a "+"machine check looks for, so no paraphrase of it counts, and silence about screenshots is not an acceptable answer either way.\n5. DECIDE. Approve once the pull request is in the state you would approve. Only `request_changes` for something you genuinely cannot settle here (a product decision, a missing credential, an approach that needs "+"rethinking) \u2014 that hands the card to a human, it does not start another "+"agent round. NEVER end your run without having called `TASK_BOARD_REVIEW_DECISION`: a run that stops to wait on a background task, or that runs low on room, must decide on what it knows first. An unrecorded verdict strands the card and is the one failure this run cannot leave behind."}});function vb4($,Z){return $.status===T$.review&&$.assigneeId===o$&&Z===!0}function J41($){return $.filter((Q)=>Q.action==="merge_conflict_resolution").length>=wA$}async function Jw($,Z,Q,Y){if(!vb4(Q,Y.conflict))return!1;let J=(await $.storage.organizationSettings.get(Z))?.flags??{};if(!iX$(J))return!1;let G=DN(J),W=await $.storage.taskBoard.listActivity(Q.id,Z);if(!WL(W,G,{cycleStartedAt:Q.reviewCycleStartedAt,verifiedOnly:!0}))return!1;if(J41(W))return console.warn(`[task-board] conflict auto-resolve cap (${wA$}) reached on task ${Q.id} \u2014 leaving the PR for a human`),!1;let K=Y.pr,H=await $.storage.taskBoard.claimConflictResolution(Q.id,Z,Q.updatedBy);if(!H)return!1;r$(Z,H);try{await LK($,H,{pr:{number:K.number,url:K.url},resolveConflict:!0})}catch(F){throw await jA$($,H,F).catch(()=>!1),await $.storage.taskBoard.update(H.id,Z,{status:T$.review},"system").then((U)=>r$(Z,U)).catch((U)=>console.error("[task-board] conflict-resolution status revert failed",U)),F}return await y6($,{taskBoardItemId:Q.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:K.number}}),!0}var wA$=3;var il=O(()=>{A4();t9();$Y();$9();jF()});import{DBOS as K41}from"@dbos-inc/dbos-sdk";function zA$($){G41=$}async function yb4($,Z){if(!G41)throw Error("[task-board-github-read] runtime not initialized \u2014 setTaskBoardGithubReadRuntime() must run before the workflow fires");let Q=await kG(G41.db,$);if(!Q)return W41;return await AA$(Q,$,Z)}async function gb4($,Z){return await K41.runStep(()=>yb4($,Z),{name:"readPrState"})}function PA$(){if(cP0)return;cP0=K41.registerWorkflow(gb4,{name:"taskBoardGithubReadWorkflow"})}async function pl($,Z){if(!cP0)return W41;try{return await(await K41.startWorkflow(cP0,{queueName:pw,timeoutMS:xb4})($,Z)).getResult()}catch(Q){return console.error("[task-board-github-read] throttled PR read failed",Q),W41}}var fb4=20,bb4=4,xb4=60000,EA$,G41=null,W41,cP0=null;var Ne=O(()=>{Vf();rZ();EA$={concurrency:bb4,rateLimit:{limitPerPeriod:fb4,periodSec:60}};W41={state:null,merged:null,checksStatus:null,conflict:null}});import{createHash as hb4}from"crypto";class Cf{config;options;now;kv=null;codec=dO();revalidating=new Set;fallback;placeholderFallback=new Map;static MAX_PLACEHOLDER_FALLBACK_ENTRIES=1000;constructor($,Z,Q=()=>Date.now()){this.config=$;this.options=Z;this.now=Q;let Y={revalidateAfterMs:$.revalidateAfterMs,maxStaleMs:$.maxStaleMs,maxValueBytes:TA$};this.fallback=new DJ0({"tools/call":Y,"resources/read":Y,"prompts/get":Y})}async init($){if($){this.kv=$;return}let Z=this.options.getJetStream();if(!Z)return;this.kv=await new qA$.Kvm(Z).create(this.config.bucket,{storage:RA$.StorageType.Memory,ttl:this.config.maxStaleMs,maxValueSize:TA$})}storageKey($,Z){let Q=hb4("sha256").update(Z).digest("hex").slice(0,32);return`${$}.${Q}`}async fetch($){let{namespace:Z,key:Q,fetchLive:Y,onRevalidation:X}=$,{cache:J,maxStaleMs:G,revalidateAfterMs:W}=this.config;if(!this.kv)return this.fallback.fetch({type:"tools/call",connectionId:Z,scope:{kind:"org"},params:{key:Q},fetchLive:Y,onRevalidation:X});let K=this.storageKey(Z,Q),H=$.fresh?null:await this.read(K),F=H?this.now()-H.storedAt:Number.POSITIVE_INFINITY;if(!H||F>G){mN.add(1,{cache:J,outcome:"miss"});let U=await Y();return await this.write(K,U,J),U}if(F>W&&!this.revalidating.has(K))mN.add(1,{cache:J,outcome:"stale"}),this.revalidating.add(K),X(Y().then((U)=>this.write(K,U,J)).catch(()=>{mN.add(1,{cache:J,outcome:"error"})}).finally(()=>this.revalidating.delete(K)));else mN.add(1,{cache:J,outcome:"hit"});return H.value}async fetchOrPlaceholder($){let{namespace:Z,key:Q,fetchLive:Y,placeholder:X}=$,{cache:J,maxStaleMs:G}=this.config,W=this.storageKey(Z,Q),K=await this.read(W),H=K?this.now()-K.storedAt:Number.POSITIVE_INFINITY,F=K!=null&&H<=G,U=K&&$.revalidateAfterMs?$.revalidateAfterMs(K.value):this.config.revalidateAfterMs;if(F&&H<=U)return mN.add(1,{cache:J,outcome:"hit"}),{value:K.value,live:!0};if(mN.add(1,{cache:J,outcome:F?"stale":"placeholder"}),!this.revalidating.has(W))this.revalidating.add(W),Y().then((N)=>this.write(W,N,J)).catch(()=>{mN.add(1,{cache:J,outcome:"error"})}).finally(()=>this.revalidating.delete(W));return F?{value:K.value,live:!0}:{value:X,live:!1}}async refresh($){let Z=await $.fetchLive();return await this.write(this.storageKey($.namespace,$.key),Z,this.config.cache),mN.add(1,{cache:this.config.cache,outcome:"refresh"}),Z}async read($){if(!this.kv)return this.placeholderFallback.get($)??null;try{let Z=await this.kv?.get($);if(!Z?.value?.length)return null;if(Z.operation==="DEL"||Z.operation==="PURGE")return null;return this.codec.decode(Z.value)}catch{return null}}async write($,Z,Q){if(!this.kv){if(this.placeholderFallback.size>=Cf.MAX_PLACEHOLDER_FALLBACK_ENTRIES){let Y=this.placeholderFallback.keys().next().value;if(Y!==void 0)this.placeholderFallback.delete(Y)}this.placeholderFallback.set($,{storedAt:this.now(),value:Z});return}try{await this.kv?.put($,this.codec.encode({storedAt:this.now(),value:Z}))}catch{mN.add(1,{cache:Q,outcome:"store_rejected"})}}async invalidate($){if(this.fallback.invalidate($),!this.kv)return;try{let Z=await this.kv.keys(`${$}.*`);for await(let Q of Z)await this.kv.delete(Q).catch(()=>{})}catch{}}teardown(){this.kv=null}}function F41($){MA$=$?.reads??null,IA$=$?.cards??null}function U41(){return MA$??ub4}function dP0(){return IA$??lb4}var RA$,qA$,mN,TA$=524288,H41,Be,MA$=null,IA$=null,ub4,lb4;var N41=O(()=>{rr();W6();RA$=V(YU(),1),qA$=V(fr(),1),mN=Y$.createCounter("pr_read_cache.fetches",{description:"Task board PR cache outcomes (hit, stale, miss, placeholder, refresh, error, store_rejected)",unit:"{fetches}"}),H41={bucket:"DECOCMS_PR_READS",revalidateAfterMs:55000,maxStaleMs:1800000,cache:"reads"},Be={bucket:"DECOCMS_PR_CARDS",revalidateAfterMs:30000,maxStaleMs:86400000,cache:"cards"};ub4=new Cf(H41,{getJetStream:()=>null}),lb4=new Cf(Be,{getJetStream:()=>null})});import{z as mP0}from"zod";function cb4($){if($ instanceof f0&&$.isRateLimited)return!0;let Q=($ instanceof Error?$.message:String($)).replace(/https?:\/\/\S+/gi," ");return/too many requests|rate limit|\b429\b/i.test(Q)}function VA$($){return U41().invalidate($)}function SG($){return dP0().invalidate($)}async function De($,Z,Q,Y,X=!1){try{return await U41().fetch({namespace:$,key:Z,fresh:X,fetchLive:()=>N8(Y,{maxAttempts:3,minTimeout:300,maxTimeout:3000,jitter:1,isRetriable:(G)=>!cb4(G)}),onRevalidation:()=>{}})??null}catch(J){let G=J instanceof l6?J.cause:J;return console.error(`[task-board] ${Z} failed for ${Q}:`,G),null}}function B41($,Z,Q){return K30($,Z,We(Q)).catch((Y)=>{return console.error(`[task-board] no client for ${nl(Q)}:`,Y),null})}function _f($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")||Z.endsWith(".vercel.app")||Z.endsWith(".vtex.app")}function ib4($){for(let Q of $){let Y=/^Workers Builds:\s*([a-z0-9][a-z0-9-]*)\s*$/i.exec(Q.name)?.[1],X=Q.summary?/Version ID:\s*([0-9a-f]{8})/i.exec(Q.summary)?.[1]:null;if(!Y||!X)continue;let J=`https://${X}-${Y}.${mb4}.workers.dev`;if(_f(J))return J}let Z=(Q)=>Q.conclusion==="success";for(let Q of[...$.filter(Z),...$.filter((Y)=>!Z(Y))]){let Y=(Q.url&&_f(Q.url)?Q.url:null)??kA$(Q.summary);if(Y)return Y}return null}function kA$($){if(typeof $!=="string")return null;return($.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find(_f)??null}function pb4($){let Z=(Y)=>Date.parse(Y.updatedAt??"")||Date.parse(Y.createdAt??""),Q=$.map((Y,X)=>({c:Y,index:X})).sort((Y,X)=>{let J=Z(Y.c),G=Z(X.c);if(Number.isNaN(J)||Number.isNaN(G))return Y.index-X.index;return G-J}).map(({c:Y})=>Y);for(let Y of Q){let X=Y.body;if(!X)continue;let J=X.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(J?.[1]&&_f(J[1]))return J[1];let G=kA$(X);if(G)return G}return null}function nb4($){return typeof $==="string"&&/^[0-9a-fA-F]{7,40}$/.test($)?$:null}function D41($){if($==="merged")return{state:"closed",merged:!0};return{state:$,merged:!1}}async function tb4($,Z,Q,Y){let X=(J)=>J.state==="completed"&&J.conclusion!==null&&J.conclusion!=="success"&&J.conclusion!=="skipped"&&J.conclusion!=="neutral";return await Promise.all(Y.map(async(J)=>({name:J.name,status:J.state,conclusion:J.conclusion,detailsUrl:J.url,summary:J.summary??(X(J)&&J.id!==null?await De(Z,`check-log:${J.id}`,`${nl(Q)} check ${J.id}`,()=>$.readCheckLog(J.id)):null)})))}async function ob4($,Z,Q,Y=!1){let X=await B41($,Z,Q);if(!X)return iP0;let J=Oe(Q),G=await De(J,`detail:${Q.number}`,nl(Q),()=>X.readDetailed({number:Q.number}),Y);if(!G)return iP0;let{state:W,merged:K}=D41(G.state);if(W!=="open")return{...iP0,title:G.title,body:G.body,updatedAt:G.updatedAt,state:W,draft:G.draft,merged:K};let F=ib4(G.checkRuns)??pb4(G.comments);if(!F){let U=nb4(G.headSha),N=U?await De(J,`deployed:${U}`,`${nl(Q)} (deployment preview)`,()=>X.readDeployedUrl(U)):null;F=N&&_f(N)?N:null}return{title:G.title,body:G.body,updatedAt:G.updatedAt,state:W,draft:G.draft,merged:K,mergeable:G.conflicting===null?null:!G.conflicting,checksStatus:G.checks,checks:await tb4(X,J,Q,G.checkRuns),previewUrl:F}}async function pP0($,Z,Q,Y){let X=await B41($,Z,Q);if(!X)return null;return De(Oe(Q),`read:${Q.number}`,`${nl(Q)} (${Y})`,()=>X.read(Q.number))}async function SA$($,Z,Q){let Y=await B41($,Z,Q);if(!Y)return null;return(await De(Oe(Q),`detail:${Q.number}`,nl(Q),()=>Y.readDetailed({number:Q.number})))?.checks??null}async function nP0($,Z,Q){return(await pP0($,Z,Q,"conflict"))?.conflicting??null}async function fP0($,Z,Q){let Y=await pP0($,Z,Q,"landing");if(!Y)return{state:null,merged:null};return D41(Y.state)}async function AA$($,Z,Q){let Y=await pP0($,Z,Q,"candidate");if(!Y)return{state:null,merged:null,checksStatus:null,conflict:null};return{...D41(Y.state),checksStatus:Y.checks,conflict:Y.conflicting}}async function CA$($,Z,Q){let Y=await pP0($,Z,Q,"head ref");if(!Y||Y.state!=="open")return null;return Y.head.length>0?Y.head:null}function L41($){return _A$($).every((Z)=>Z.checksStatus!=="failing"&&Z.checksStatus!=="pending")}function rb4($){let Z=$.findIndex((Q)=>Q!=="closed");return Z===-1?0:Z}async function vf($,Z,Q){if(Q.length<=1)return Q[0];let Y=[];for(let X of Q){let{state:J}=await pl(Z,X);if(Y.push(J),J!=="closed")break}return Q[rb4(Y)]}function vA$($,Z,Q,Y=!1){return Promise.all(Q.map(async(X)=>{let J=await ob4($,Z,X,Y);return{url:X.url,number:X.number,repoOwner:X.repoOwner,repoName:X.repoName,createdAt:X.createdAt,...J}}))}async function fA$($,Z,Q){try{let Y=await $.storage.taskBoard.listPrs(Q,Z);if(Y.length===0)return null;let X=await dP0().refresh({namespace:Z,key:Q,fetchLive:()=>vA$($,Z,Y,!0)});return bA$(Z,Q,X),X}catch(Y){return console.error(`[task-board] pr card refresh failed for ${Q}:`,Y),null}}var nl=($)=>`${$.repoOwner}/${$.repoName}#${$.number}`,Oe=($)=>nW(We($).repo),db4=0,mb4="deco-cx",iP0,O41=($)=>_A$($).length>0,_A$=($)=>$.filter((Z)=>Z.state!=="closed"&&Z.merged!==!0),sb4,ff;var rZ=O(()=>{P0();pZ();A4();X6();u$();J3();ml();$Y();Mf();OK();$9();Y41();il();Ne();N41();CP0();iP0={title:null,body:null,updatedAt:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};sb4=x({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the change requests (GitHub and Bitbucket pull requests, GitLab merge requests) linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from its provider.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:mP0.object({taskBoardItemId:mP0.string()}),outputSchema:mP0.object({prs:mP0.array($D$)}),handler:async({taskBoardItemId:$},Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=await Z.storage.taskBoard.getById($,Q),X=await Z.storage.taskBoard.listPrs($,Q),J=()=>vA$(Z,Q,X),{value:G,live:W}=await dP0().fetchOrPlaceholder({namespace:Q,key:$,fetchLive:J,revalidateAfterMs:(F)=>F.some((U)=>vJ$(U))?db4:Be.revalidateAfterMs,placeholder:X.map((F)=>({url:F.url,number:F.number,repoOwner:F.repoOwner,repoName:F.repoName,createdAt:F.createdAt,...iP0}))});if(!W)return{prs:G};let K=T$.review,H=G.find((F)=>F.state==="open"&&!F.merged);if(Y&&rX(Y)&&Y.assigneeId===o$&&O41(G))await lP0(Z,Y,{previewMatchesHead:L41(G)}).catch((F)=>{console.error("[task-board] reviewer auto-handoff failed",F)});if(Y&&Y.status===K&&Y.assigneeId===o$&&H&&H.mergeable===!1)await Jw(Z,Q,Y,{pr:{number:H.number,url:H.url},conflict:!0}).catch((F)=>{console.error("[task-board] conflict auto-resolve failed",F)});if(kf(G))try{let F=await Z.storage.organizationSettings.get(Q),U=tH(F?.flags);if(Y&&FA$(Y.status,U)&&!await Z.storage.taskBoard.hasHumanRejectedDone($,Q)){let N=await Z.storage.taskBoard.update($,Q,{status:U},Y.updatedBy);await y6(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Y.status,to:U}}),r$(Q,N)}}catch(F){console.error("[task-board] merged-PR reconcile failed",F)}return{prs:G}}}),ff=dl(sb4)});function yA$($){if(xA$.has($.kind??""))return 0;return Qx4($)?$x4:Zx4}function Qx4($){let Z=$.kind??"";if(xA$.has(Z))return!1;if(ab4.has(Z))return!0;let Q=$.errorText??"";if(!Q)return!1;if(Q.includes(Fz0))return!0;let Y=Q.replace(/https?:\/\/\S+/gi," ");return eb4.some((X)=>X.test(Y))}var ab4,xA$,eb4,$x4=3,Zx4=1;var gA$=O(()=>{FP0();ab4=new Set(["stall","liveness","projection","abandoned"]),xA$=new Set(["cancelled",...ea]),eb4=[/sandbox did not become ready/i,/sandbox (?:provisioning|claim) failed/i,/mcp is unusable/i,/harness_crashed: unexpected eof/i,/too many clients already|timeout exceeded when trying to connect/i,/\b(?:429|503)\b|too many requests|service unavailable/i]});function tP0($,Z,Q,Y){VX({event:$,organizationId:Z,properties:{task_id:Q.id,reports_task:xX(Q),...Y}})}function r$($,Z){u5.emit($,{id:crypto.randomUUID(),type:kJ$,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function bA$($,Z,Q){u5.emit($,{id:crypto.randomUUID(),type:CJ$,source:"task-board",subject:Z,data:{id:Z,prs:Q},time:new Date().toISOString()})}function hA$($,Z){u5.emit($,{id:crypto.randomUUID(),type:SJ$,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function Yx4($,Z){return $?[$]:Z}async function w41($,Z,Q){let Y=$.metadata?.runMetadata?.taskBoardItemId,X=!Y&&Q?await $.storage.taskBoard.linkedTaskIds(Q,Z):[];return Yx4(Y,X)}async function j41($,Z,Q){return $.storage.taskBoard.boardManagedIds(await w41($,Z,Q),Z)}async function uA$($,Z,Q){let Y=$.organization?.id;if(!Y)return;try{let X=T$[Z];for(let J of await j41($,Y,Q)){let G=await $.storage.taskBoard.getById(J,Y);if(!G)continue;if(G.status===X||!xP0(G.status,X))continue;let W=await $.storage.taskBoard.update(J,Y,{status:X},$.auth?.user?.id??G.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:J,action:"status_changed",actorId:null,data:{from:G.status,to:X}}).catch((K)=>console.error("[task-board] activity log write failed",K)),r$(Y,W),Z==="progress")tP0("task_run_started",Y,W,{from:G.status})}}catch(X){console.error("[task-board] run transition failed",X)}}async function oP0($,Z){let Q=$.organization?.id;if(!Q)return;try{for(let Y of await j41($,Q,Z)){let X=await $.storage.taskBoard.openReviewCycleIfInProgress(Y,Q);if(!X)continue;r$(Q,X),tP0("task_run_completed",Q,X,{from:"in_progress",via:"pr_open"})}}catch(Y){console.error("[task-board] review-cycle open failed",Y)}}async function rP0($,Z,Q,Y){let X=$.organization?.id;if(!X)return;try{let J=Yw(Z);if(!J)return;let G=await j41($,X,Y);for(let W of G)await $.storage.taskBoard.linkPr({taskBoardItemId:W,organizationId:X,url:J.url,prNumber:J.number,repo:J.repo,connectionId:Q??null});if(G.length>0)await SG(X)}catch(J){console.error("[task-board] PR capture failed",J)}}async function tl($,Z,Q,Y){try{let X=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,Q);for(let J of X)r$(Q,J),tP0("task_run_completed",Q,J,{from:"in_progress",via:"thread_finish"});for(let J of X)await $.clearRunRetry(J.id,Q).catch(()=>{})}catch(X){console.error("[task-board] thread-finish transition failed",X)}await E41($,Z,Q),await z41($,Y,Z,Q)}function lA$($){return(Sf($.status)??-1)>=bP0.in_review||Boolean($.reviewCycleStartedAt)}async function E41($,Z,Q){try{let Y=await $.failedRunInfo(Z,Q);if(!Y)return;let X=yA$(Y);for(let J of await $.linkedTaskIds(Z,Q)){let G=await $.getById(J,Q);if(!G)continue;if(G.source)continue;if(lA$(G))await $.relabelDeliveredFailure(Z,Q,Gx4).catch(()=>{});if(G.status!==T$.progress)continue;if(G.reviewCycleStartedAt)continue;if(G.threads.some((H)=>H.hasMessages&&H.status==="in_progress"))continue;let W=G.retryAttempts;if(W<X){let H=C7(Jx4,Xx4,W,2,0.5);if(!await $.scheduleRunRetry(J,Q,W+1,new Date(Date.now()+H)))continue;await $.recordActivity({taskBoardItemId:J,action:"status_changed",actorId:null,data:{from:T$.progress,to:T$.progress,retry:W+1,of:X,reason:Y.errorText??Y.kind}}).catch(()=>{});continue}let K=await $.returnToTodoAfterFailure(J,Q,G.updatedBy);if(!K)continue;await $.recordActivity({taskBoardItemId:J,action:"status_changed",actorId:null,data:{from:T$.progress,to:T$.queue,reason:Y.errorText??Y.kind,retriesSpent:W}}).catch(()=>{}),r$(Q,K),tP0("task_run_failed",Q,G,{reason:Y.kind??"error",retries_spent:W})}}catch(Y){console.error("[task-board] failed-run reaction failed",Y)}}async function z41($,Z,Q,Y){try{for(let X of await $.linkedTaskIds(Q,Y)){let J=await $.getById(X,Y);if(!J)continue;if(J.source)continue;if(lA$(J))continue;if(J.threads.some((W)=>W.hasMessages&&(W.status===null||!Ge.has(W.status))))continue;if((await $.listPrs(X,Y)).length>0)continue;await yJ$(Z,Y,X)}}catch(X){console.error("[task-board] quota refund pass failed",X)}}async function P41($,Z){if(Z.status!==T$.progress||!rX(Z))return;try{let Q=await $.storage.taskBoard.update(Z.id,Z.organizationId,{status:T$.review},Z.updatedBy);await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:T$.review}}).catch(()=>{}),r$(Z.organizationId,Q),await XA$($,Q)}catch(Q){console.error(`[task-board] parking ${Z.id} for review failed`,Q)}}async function wF($,Z,Q){let Y=Z.organizationId;if(Z.assigneeId!==o$)return!1;try{await P41($,Z).catch((J)=>console.warn(`[task-board] parking ${Z.id} before hand-off failed`,J));let X=await $.storage.taskBoard.unassignSuperAgent(Z.id,Y,Z.updatedBy);if(!X)return!1;return await y6($,{taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:Z.assigneeId,to:null,reason:Q}}),console.warn(`[task-board] ${Z.id} handed to a human: ${Q}`),r$(Y,X),!0}catch(X){return console.error(`[task-board] handing ${Z.id} to a human failed`,X),!1}}async function jA$($,Z,Q){if(!(Q instanceof yY))return!1;if(Q.reason!=="runs_exhausted")return!1;return await wF($,Z,"per-task run limit reached \u2014 the Super Agent can no longer re-dispatch "+"itself on this task. Re-run it manually to continue."),!0}async function cA$($,Z){let Q=$.organization?.id;if(!Q)return;try{let Y=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,Q);for(let X of Y)r$(Q,X)}catch(Y){console.error("[task-board] thread-run reopen failed",Y)}}function dA$($){return $.includes("create_pull_request")||$.includes("createPullRequest")||$.includes("create_merge_request")||$.includes("createMergeRequest")}function mA$($){if(Wx4.test($))return!0;return Kx4.test($)&&Hx4.test($)}var Xx4=30000,Jx4=120000,Gx4="Run ended after it had already delivered \u2014 the task moved on without it",Wx4,Kx4,Hx4;var $9=O(()=>{jG();f4();dN();Mf();JA$();rZ();gA$();u$();Xe();A4();$Y();OK();Wx4=/\b(?:gh\s+pr|glab\s+mr)\s+create\b/,Kx4=/\/(?:repos\/[^\s"']+\/pulls|projects\/[^\s"']+\/merge_requests|repositories\/[^\s"']+\/pullrequests)\b/,Hx4=/(?:-X|--request)\s+POST/});function Fx4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&($.harnessId==="decopilot"||$.harnessId==="claude-code"))return"nudge";return"none"}function Ux4($){return["This task is still In Progress on the board and your last run ended without finishing it.","","Look at what you already did (`git log`, `git status`, and the messages above), then either:","- finish the remaining work (and open the PR, if it needed code changes),","- or, if it's actually done, say so in one line \u2014 the board moves the card for you,",$==="decopilot"?"- or, if you're blocked on something only a human knows, call the `user_ask` tool.":"- or, if you're blocked on something only a human knows, say what you need and stop.","","Don't start over and don't redo work you already committed or pushed. You are on the same branch as before \u2014 push to it and update your existing pull request rather than opening a second one."].join(`
1576
- `)}async function Nx4($,Z,Q){await hl($,Z,Q,{messageId:`stall-nudge-${Z.id}-${Q.id}`,prompt:Ux4(Q.harness_id),workflowID:`stall-nudge:${Z.id}:${Q.id}`})}async function Bx4($,Z){let Q=await $.storage.threads.get(Z);if(!Q)return{action:"none",thread:null};return{action:Fx4({status:Q.status,messageStorageVersion:Q.message_storage_version,harnessId:Q.harness_id}),thread:Q}}function Dx4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return aa($,Z)}async function Ox4($,Z){let Q=[];for(let Y of Z.threads){if(Y.status!=="in_progress")continue;let X=await $.storage.threads.get(Y.threadId);if(!X||!Dx4(X))continue;if(await $.storage.threads.markRunFailed(Y.threadId,A41,"abandoned"))Q.push(Y.threadId),console.warn(`[task-board] failed never-started thread ${Y.threadId} on ${Z.id}`)}return Q}async function iA$($,Z){let Q=$.organization?.id;if(!Q)return;for(let Y of Z){if(Y.status==="in_progress")try{if((await Ox4($,Y)).length>0)continue}catch(G){console.error(`[task-board] reaping threads for ${Y.id} failed`,G)}let X;try{X=Y.repo!=null&&(await $.storage.taskBoard.listPrs(Y.id,Q)).length>0}catch(G){console.error(`[task-board] listPrs for ${Y.id} failed`,G);continue}if(!n81(Y,X))continue;let J=Y.threads.find((G)=>G.hasMessages);if(!J)continue;try{let{action:G,thread:W}=await Bx4($,J.threadId);if(G==="none"||!W)continue;if(G==="advance")await tl($.storage.taskBoard,J.threadId,Q,$.storage.organizationBilling);else await Nx4($,Y,W)}catch(G){console.error(`[task-board] stall recovery failed for ${Y.id}`,G)}}}var A41="Run never started \u2014 no pod picked it up before the idle window elapsed";var T41=O(()=>{TP0();dN();$9()});import{z as EF}from"zod";var Lx4,wx4,bf;var R41=O(()=>{A4();P0();vX();J3();T41();CP0();Lx4=EF.object({key:EF.string(),title:EF.string(),position:EF.number()}),wx4=x({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization, plus the `owner/name` repos this organization has imported (the valid values for a task's `repo` field).",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:EF.object({}),outputSchema:EF.object({items:EF.array(El),repos:EF.array(EF.string()),columns:EF.array(Lx4)}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let[Y,{items:X},J]=await Promise.all([Z.storage.taskBoard.list(Q),Z.storage.connections.list(Q,{slug:"mcp-github"}),Z.storage.repositories.listByOrg(Q)]),G=[...new Set([...J.map((W)=>W.path),...IX$(X)])];return iA$(Z,Y),{items:Y,repos:G,columns:MJ$}}}),bf=dl(wx4)});async function pA$($,Z,Q){if(Z.assigneeId)return Z;let Y=Z.organizationId,X=await $.storage.columnAutomations.get(Y,Z.status);if(!X)return Z;let J=await $.storage.taskBoard.claimUnassignedForSuperAgent(Z.id,Y,Q.assignedBy,Q.actor,Z.status);if(!J)return Z;await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:null,to:o$}});try{await Gw($,J,{instruction:X.prompt??void 0})}catch(G){return console.warn(`[task-board] column rule on ${Z.status} rejected for ${Z.id}, un-delegating:`,G instanceof Error?G.message:G),await $.storage.taskBoard.unassignSuperAgent(Z.id,Y,Q.actor)??await $.storage.taskBoard.getById(Z.id,Y)??J}return J}var nA$=O(()=>{A4();jF()});function tA$($){if($===void 0)return;let Z=[];for(let Q of $){let Y=Q.trim().replace(/[\t\r\n]/g,"").replace(/\\/g,"/");if(!Y.startsWith("/")||Y.startsWith("//"))continue;if(!Z.includes(Y))Z.push(Y);if(Z.length===20)break}return Z}import{z as pY}from"zod";function zx4($){return Ex4.some((Z)=>$[Z]!==void 0)}function Px4($,Z){let Q=[];for(let{field:J,action:G}of jx4){if(Z[J]===$[J])continue;Q.push({action:G,data:{from:$[J],to:Z[J]}})}if(Z.description!==$.description)Q.push({action:"description_changed"});let Y=new Set($.tags.map((J)=>J.id));if(Z.tags.length!==$.tags.length||Z.tags.some((J)=>!Y.has(J.id)))Q.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return Q}function Ax4($,Z){if($!==o$)return!1;if(!Z)return!1;return Z.assigneeId!==o$?!0:Z.status===T$.queue}function Rx4($,Z,Q){let Y=$!==void 0&&Tx4.has($),X=Z!==void 0&&rX(Z);return Q&&Y&&X}function q41($,Z){return $!==void 0&&r81($)&&!Z}var jx4,Ex4,Tx4,xf;var sP0=O(()=>{A4();P0();t9();J3();OK();M11();jF();$Y();vN();$9();nA$();Mf();rZ();jG();jx4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"type",action:"type_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}],Ex4=["title","description","status","priority","type","assigneeId","repo","dueDate","sortOrder","previewRoutes","tagIds"];Tx4=new Set(["approved","merged","post_deploy_validation","done","archived"]);xf=x({name:"TASK_BOARD_ITEM_UPDATE",description:"Update a task board item's fields (title, description, status, priority, assignee), and/or link a chat thread to it.",annotations:{title:"Update Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pY.object({id:pY.string(),title:pY.string().min(1).max(Qz0).optional(),description:pY.string().max(Zz0).nullable().optional(),status:fN.optional(),priority:$f.optional(),type:Ba.optional(),assigneeId:pY.string().nullable().optional(),repo:pY.string().max(Yz0).nullable().optional(),dueDate:pY.string().datetime().nullable().optional(),sortOrder:pY.number().optional(),previewRoutes:pY.array(pY.string().max(500)).max(20).optional().describe("Paths this task's work created or edited, e.g. "+'["/cliente-vip", "/cliente-vip/faq"]. Paths only \u2014 no host: the '+"card joins each onto the pull request's deploy-preview origin so a reviewer can open the pages directly. Replaces the previous set; pass [] to clear."),tagIds:pY.array(pY.string()).max(1000).optional(),linkThreadId:pY.string().optional(),prUrl:pY.string().nullable().optional().describe("GitHub pull request URL to link to this task, e.g. https://github.com/owner/repo/pull/123. Pass it after opening a PR for an existing card; linking one is what starts its review.")}),outputSchema:pY.object({item:El}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=$.prUrl?Yw($.prUrl):null;if($.prUrl&&!Y)throw Error(`Not a change request URL: ${$.prUrl} (expected https://github.com/<owner>/<repo>/pull/<number>, https://gitlab.com/<namespace>/<project>/-/merge_requests/<iid> or https://bitbucket.org/<workspace>/<repo>/pull-requests/<id>)`);if($.assigneeId)await Xz0(Z,Q,$.assigneeId);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,Q))throw Error(`Task board item not found: ${$.id}`);if(!await Z.storage.threads.get($.linkThreadId))throw Error(`Thread not found: ${$.linkThreadId}`);await Z.storage.taskBoard.linkThread($.id,$.linkThreadId,Q)}let X=zx4($),J=X?await Z.storage.taskBoard.getById($.id,Q):null;if(X&&!J)throw Error(`Task board item not found: ${$.id}`);if($.status!==void 0&&r81($.status)){let N=await Z.storage.organizationSettings.get(Q);if(q41($.status,ZQ(N?.flags,"delivery_lanes_enabled")))throw Error("Delivery lanes are not enabled for this organization \u2014 enable "+"them in Settings before moving a task to Approved, Merged, or Post-deploy Validation.")}let G=Y3.getStore()!==void 0;if(Rx4($.status,J??void 0,G))throw Error("This task is under review \u2014 a run can't move it to Done or Archived. "+"Leave it for the reviewer; only a person, or TASK_BOARD_REVIEW_DECISION on a reviewer's own run, closes out a task under review.");let W=$.assigneeId!==void 0&&$.assigneeId!==(J?.assigneeId??null),K=Ax4($.assigneeId,J),F=(K?T$.queue:void 0)??$.status;if(J&&xX(J)){if($.title!==void 0||$.description!==void 0||$.priority!==void 0)throw Error("This task was generated from your report and can't be edited \u2014 create your own task instead.");if(K)await hu(Z,J,FL())}if($.tagIds!==void 0){let N=await Z.storage.tags.listOrgTags(Q),B=new Set(N.map((D)=>D.id));for(let D of $.tagIds)if(!B.has(D))throw Error(`Tag not found: ${D}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,c0(Z))}let U;if(X)U=await Z.storage.taskBoard.update($.id,Q,{title:$.title,description:$.description,status:F,priority:$.priority,type:$.type,assigneeId:$.assigneeId,assignedBy:W?$.assigneeId?c0(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder,previewRoutes:tA$($.previewRoutes)},c0(Z));else{let N=await Z.storage.taskBoard.getById($.id,Q);if(!N)throw Error(`Task board item not found: ${$.id}`);U=N}if(Y)await Z.storage.taskBoard.linkPr({taskBoardItemId:U.id,organizationId:Q,url:Y.url,prNumber:Y.number,repo:Y.repo,connectionId:null}),await SG(Q).catch((N)=>{console.error("[task-board] PR card cache invalidation failed",N)});if(J){let N=c0(Z),B=Px4(J,U);if(B.length>0)await WA$(Z,B.map((D)=>({taskBoardItemId:U.id,actorId:N,...D,alsoSubscribe:D.action==="assignee_changed"&&U.assigneeId!==o$?[U.assigneeId]:void 0})))}if(J&&U.description!==J.description)await Z.storage.notifications.notifyMentions({taskBoardItemId:U.id,organizationId:Q,actorId:c0(Z),body:U.description??"",previousBody:J.description});if(X||$.linkThreadId||Y)r$(Q,U);if(K)return await Gw(Z,U,{userInitiated:!0}),{item:U};if($.status!==void 0&&J!==null&&J.status!==U.status)U=await pA$(Z,U,{assignedBy:c0(Z),actor:c0(Z)});return{item:U}}})});import{z as aP0}from"zod";var yf;var M41=O(()=>{P0();$9();yf=x({name:"TASK_BOARD_ITEM_DELETE",description:"Delete a task board item. A reports-pushed task also dismisses its finding, so the next diagnostic import won't re-create the card.",annotations:{title:"Delete Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:aP0.object({id:aP0.string()}),outputSchema:aP0.object({success:aP0.boolean()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.taskBoard.delete($.id,Q,c0(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return hA$(Q,$.id),{success:!0}}})});import{z as c$}from"zod";async function _x4($,Z,Q){let Y=i(Z),X={query:{orgIds:[Y.id]},org:Y.slug??Y.id},J=$.to??new Date().toISOString(),W={from:$.from??new Date(Date.parse(J)-qx4).toISOString(),to:J},K=$.org;if(!K||K===Y.slug||K===Y.id)return{query:{...W,...X.query},org:X.org};let H=await He(Z);if(K==="all"){if(!H)return{query:{...W,...X.query},org:X.org};return If({action:"analytics_read",actorUserId:Z.auth?.user?.id,actorOrgId:Y.id,targetOrgId:"all",tool:Q}),{query:{...W,orgIds:null},org:"all"}}if(!H)throw Error("Not allowed to read another organization's task board analytics");let F=await Z.storage.taskBoardAnalytics.resolveOrgRef(K);if(!F)throw Error(`Organization not found: ${K}`);return If({action:"analytics_read",actorUserId:Z.auth?.user?.id,actorOrgId:Y.id,targetOrgId:F.id,tool:Q}),{query:{...W,orgIds:[F.id]},org:F.slug}}function vx4($){let Z=$.sections.filter((Y)=>Y.kind==="stat").flatMap((Y)=>Y.values).map((Y)=>`${Y.label}: ${Y.value??"\u2014"}${Y.unit?` ${Y.unit}`:""}`).join(", "),Q=$.sections.filter((Y)=>Y.kind==="table").map((Y)=>`${Y.title} (${Y.rows.length} rows)`).join(", ");return[`${$.org}, ${$.range.from}..${$.range.to}`,Z,Q].filter(Boolean).join(" \u2014 ")}function ol($,Z,Q,Y){return x({name:$,description:Q,annotations:{title:Z,readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Mx4,outputSchema:Cx4,modelSummary:vx4,handler:async(X,J)=>{p(J),await J.access.check();let{query:G,org:W}=await _x4(X,J,$);return{range:{from:G.from,to:G.to},org:W,sections:await Y(J,G)}}})}var qx4=2592000000,Mx4,Ix4,Vx4,kx4,Sx4,Cx4,gf,hf,uf,lf,cf,df,mf;var I41=O(()=>{P0();SP0();Mx4=c$.object({org:c$.string().optional().describe('Org slug or id to report on. Omit for the current org. "all" is the cross-tenant aggregate (admin orgs only).'),from:c$.string().optional().describe("ISO start of the range. Defaults to 30 days ago."),to:c$.string().optional().describe("ISO end of the range. Defaults to now.")}),Ix4=c$.object({kind:c$.literal("stat"),title:c$.string(),values:c$.array(c$.object({label:c$.string(),value:c$.number().nullable(),unit:c$.string().optional()}))}),Vx4=c$.object({kind:c$.literal("series"),title:c$.string(),unit:c$.string().optional(),points:c$.array(c$.record(c$.string(),c$.union([c$.number(),c$.string(),c$.null()])))}),kx4=c$.object({kind:c$.literal("table"),title:c$.string(),columns:c$.array(c$.string()),rows:c$.array(c$.array(c$.union([c$.string(),c$.number(),c$.null()])))}),Sx4=c$.discriminatedUnion("kind",[Ix4,Vx4,kx4]),Cx4=c$.object({range:c$.object({from:c$.string(),to:c$.string()}),org:c$.string(),sections:c$.array(Sx4)});gf=ol("TASK_BOARD_DELIVERY","Task Board Delivery","Task board throughput and flow: tasks completed, how many shipped a PR, lead vs cycle time, completions per day by board, time in review, and dwell by lane.",($,Z)=>$.storage.taskBoardAnalytics.delivery(Z)),hf=ol("TASK_BOARD_STUCK","Task Board Stuck Work","What is stuck on the task board right now: open lane visits oldest first, and work in progress bucketed by age. Deliberately not time-filtered.",($,Z)=>$.storage.taskBoardAnalytics.stuck(Z)),uf=ol("TASK_BOARD_COST","Task Board Cost","Task board spend: total USD, cost per completed task and per shipped PR, spend burned on abandoned work, spend per day, cost by tenant, and the coverage % that says how much of it was actually priced.",($,Z)=>$.storage.taskBoardAnalytics.cost(Z)),lf=ol("TASK_BOARD_QUALITY","Task Board Quality","Task board quality: first-pass yield, rework rate, autonomy (finished without a human), abandonment, rework over time, and retry burn.",($,Z)=>$.storage.taskBoardAnalytics.quality(Z)),cf=ol("TASK_BOARD_ERRORS","Task Board Errors","Task board run failures: failed runs, quota-blocked runs, failures per day, failure kinds, a live error feed, error signatures, and superseded runs.",($,Z)=>$.storage.taskBoardAnalytics.errors(Z)),df=ol("TASK_BOARD_TENANTS","Task Board Tenants",'Per-tenant task board scorecard and queue wait. Pass org: "all" for the cross-tenant view (admin orgs only).',($,Z)=>$.storage.taskBoardAnalytics.tenants(Z)),mf=x({name:"TASK_BOARD_ADMIN_ORG_LIST",description:"Whether the caller may read every org's task board, and if so the orgs that have board items. Non-admins get an empty list.",annotations:{title:"List Task Board Admin Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:c$.object({}),outputSchema:c$.object({isTaskBoardAdmin:c$.boolean(),orgs:c$.array(c$.object({id:c$.string(),slug:c$.string(),name:c$.string()}))}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z);if(!GA$(Q.id)||!await He(Z))return{isTaskBoardAdmin:!1,orgs:[]};return{isTaskBoardAdmin:!0,orgs:await Z.storage.taskBoardAnalytics.orgsWithBoardItems()}}})});function oA$($,Z){let Q=({output:Y,toolCallId:X})=>mz0(Y,X,Z)??{type:"json",value:Y};return{TASK_BOARD_ITEM_LIST:h1({description:bf.description,inputSchema:a(bf.inputSchema),execute:(Y)=>bf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ITEM_CREATE:h1({description:pf.description,inputSchema:a(pf.inputSchema),execute:(Y)=>pf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ITEM_UPDATE:h1({description:xf.description,inputSchema:a(xf.inputSchema),execute:(Y)=>xf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ITEM_DELETE:h1({description:yf.description,inputSchema:a(yf.inputSchema),execute:(Y)=>yf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ITEM_PRS_GET:h1({description:ff.description,inputSchema:a(ff.inputSchema),execute:(Y)=>ff.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ADMIN_ORG_LIST:h1({description:mf.description,inputSchema:a(mf.inputSchema),execute:(Y)=>mf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_DELIVERY:h1({description:gf.description,inputSchema:a(gf.inputSchema),execute:(Y)=>gf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_STUCK:h1({description:hf.description,inputSchema:a(hf.inputSchema),execute:(Y)=>hf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_COST:h1({description:uf.description,inputSchema:a(uf.inputSchema),execute:(Y)=>uf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_QUALITY:h1({description:lf.description,inputSchema:a(lf.inputSchema),execute:(Y)=>lf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ERRORS:h1({description:cf.description,inputSchema:a(cf.inputSchema),execute:(Y)=>cf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_TENANTS:h1({description:df.description,inputSchema:a(df.inputSchema),execute:(Y)=>df.execute(Y,$),toModelOutput:Q})}}var rA$=O(()=>{b4();BF();V41();R41();sP0();M41();rZ();I41()});function sA$($){return{COLLECTION_VIRTUAL_MCP_CREATE:h1({description:ez.description,inputSchema:a(ez.inputSchema),execute:(Z)=>ez.execute(Z,$)}),COLLECTION_VIRTUAL_MCP_LIST:h1({description:ZP.description,inputSchema:a(ZP.inputSchema),execute:(Z)=>ZP.execute(Z,$)}),COLLECTION_VIRTUAL_MCP_GET:h1({description:QP.description,inputSchema:a(QP.inputSchema),execute:(Z)=>QP.execute(Z,$)}),COLLECTION_VIRTUAL_MCP_UPDATE:h1({description:YP.description,inputSchema:a(YP.inputSchema),execute:(Z)=>YP.execute(Z,$)}),COLLECTION_VIRTUAL_MCP_DELETE:h1({description:XP.description,inputSchema:a(XP.inputSchema),execute:(Z)=>XP.execute(Z,$)}),VIRTUAL_MCP_PLUGIN_CONFIG_GET:h1({description:JP.description,inputSchema:a(JP.inputSchema),execute:(Z)=>JP.execute(Z,$)}),VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE:h1({description:GP.description,inputSchema:a(GP.inputSchema),execute:(Z)=>GP.execute(Z,$)}),VIRTUAL_MCP_PINNED_VIEWS_UPDATE:h1({description:WP.description,inputSchema:a(WP.inputSchema),execute:(Z)=>WP.execute(Z,$)}),COLLECTION_CONNECTIONS_LIST:h1({description:rz.description,inputSchema:a(rz.inputSchema),execute:(Z)=>rz.execute(Z,$)}),COLLECTION_CONNECTIONS_GET:h1({description:sz.description,inputSchema:a(sz.inputSchema),execute:(Z)=>sz.execute(Z,$)})}}var aA$=O(()=>{b4();vr0();_r0();or0();Ws0();$s0();ar0();Ys0();Fs0();Ks0();Hs0()});async function bx4($,Z,Q){let{provider:Y,imageProvider:X,webSearchProvider:J,deepResearchProvider:G,organization:W,models:K,toolApprovalLevel:H="auto",isPlanMode:F=!1,toolOutputMap:U,pendingImages:N,passthroughClient:B,vmContext:D,htmlArtifactBuffer:L,taskId:w,agentId:j,onChildUsage:E,backgroundDispatcher:z}=Z,P={isPlanMode:F},A=Q.auth?.user?.id,q=cz$({writer:$,toolOutputMap:U,passthroughClient:B,toolApprovalLevel:H,isPlanMode:F,objectStorage:Q.objectStorage});if(A)q.update_interests=Iz$({write:async(S)=>{await Q.storage.interests.setForAgent(S.orgId,S.agentId,S.userId,{interests:S.interests})},orgId:W.id,agentId:j,userId:A});if(Object.assign(q,oz$(Q)),Object.assign(q,await yx4(Q,w)?lP$(Q,w):oA$(Q,U)),uQ(j))Object.assign(q,sA$(Q));let k=ma(H,!1,P)!==!1,M;if(D){let S=await bl(Q,{virtualMcpId:D.virtualMcpId,branch:D.branch,userId:D.userId,syncTools:D.syncTools,threadId:D.threadId}),d=Pz$(S);M=Ez$({fs:d.fs,htmlArtifactBuffer:L,toolOutputMap:U,needsApproval:k,pendingImages:N}),Object.assign(q,M);let f=await Rz$({ctx:Q,orgId:W.id,virtualMcpId:D.virtualMcpId,userId:D.userId,threadId:D.threadId,writer:$,rebindFs:async(b)=>{d.swap(await bl(Q,{virtualMcpId:D.virtualMcpId,branch:b,userId:D.userId,syncTools:D.syncTools,threadId:D.threadId}))}});if(f)q.load_repo=f}if(Y)q.subtask=ra("subtask",S41,C41($,{provider:Y,organization:W,models:K,self:{id:j},currentThreadId:w,needsApproval:ma(H,!1,P)!==!1,onChildUsage:E,vmTools:M,parentBuiltInParams:Z},Q),z,(S)=>xz$(w,S));if(X&&K.image&&Q.objectStorage)q.generate_image=ra("generate_image",ta,vz$($,{provider:X,imageModelInfo:K.image,objectStorage:Q.objectStorage,allowHttpExternalUrls:O0().localMode}),z);if(J&&K.webSearch){let S=K81({provider:J,modelInfo:K.webSearch,ctx:Q,mode:"quick",toolName:"web_search"});q.web_search=G81($,{researchJob:S,toolOutputMap:U,taskId:w})}if(G&&K.deepResearch){let S=K81({provider:G,modelInfo:K.deepResearch,ctx:Q,mode:"deep",toolName:"deep_research"});q.deep_research=G81($,{researchJob:S,toolOutputMap:U,taskId:w,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}return q}function xx4($,Z,Q){let Y=Z.organization.id,X=Q.auth?.user?.id,J={};for(let[G,W]of Object.entries($)){let K=W,H=K.execute;if(typeof H!=="function"){J[G]=W;continue}let F=fx4[G],U=H.constructor?.name==="AsyncGeneratorFunction",N=(D,L)=>{if(!Y||!X)return;M1.capture({distinctId:X,event:"tool_called",groups:{organization:Y},properties:{organization_id:Y,tool_source:"builtin",tool_name:G,tool_safe_name:G,read_only:F?.readOnly??null,destructive:F?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(D),is_error:L}})},B=U?async function*(D,L){let w=performance.now(),j=!1;try{yield*H.call(K,D,L)}catch(E){throw j=!0,E}finally{N(performance.now()-w,j)}}:async(D,L)=>{let w=performance.now(),j=!1;try{return await H.call(K,D,L)}catch(E){throw j=!0,E}finally{N(performance.now()-w,j)}};J[G]={...K,execute:B}}return J}async function eP0($,Z,Q){let Y=await bx4($,Z,Q),X=xx4(Y,Z,Q);if(!Z.isPlanMode){let{propose_plan:J,...G}=X;return G}return X}function eA$($){let{ctx:Z,writer:Q,toolOutputMap:Y,subtaskParams:X,planMode:J}=$,G={user_ask:QP0,todo_write:YP0,read_tool_output:dz0({toolOutputMap:Y})};if(J)G.propose_plan=JP0;if(X.provider)G.subtask=C41(Q,X,Z);return G}async function yx4($,Z){try{return(await $.storage.threads.get(Z))?.metadata?.source==="jira"}catch{return!1}}var fx4;var k41=O(()=>{f4();ia();BF();zz$();$P0();qz$();_41();a$1();e$1();Vz$();$81();fz$();Y81();J81();oa();gz$();lz$();dz$();rz$();cP$();rA$();q8();aA$();o1();fx4={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1},TASK_BOARD_ITEM_LIST:{readOnly:!0,destructive:!1},TASK_BOARD_ITEM_CREATE:{readOnly:!1,destructive:!1},TASK_BOARD_ITEM_UPDATE:{readOnly:!1,destructive:!1},TASK_BOARD_ITEM_DELETE:{readOnly:!1,destructive:!0},TASK_BOARD_ITEM_PRS_GET:{readOnly:!0,destructive:!1},TASK_BOARD_ADMIN_ORG_LIST:{readOnly:!0,destructive:!1},TASK_BOARD_DELIVERY:{readOnly:!0,destructive:!1},TASK_BOARD_STUCK:{readOnly:!0,destructive:!1},TASK_BOARD_COST:{readOnly:!0,destructive:!1},TASK_BOARD_QUALITY:{readOnly:!0,destructive:!1},TASK_BOARD_ERRORS:{readOnly:!0,destructive:!1},TASK_BOARD_TENANTS:{readOnly:!0,destructive:!1}}});async function $2$($){let Z=$.toolOutputMap??cz0(),{tools:Q,nameMap:Y}=await ZP0($.mcpClient,Z,$.writer,$.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:$.planMode,timeoutMs:lz0,resolveArgs:$.resolveArgs,onToolCalled:$.onToolCalled,onPrOpened:$.onPrOpened}),X=$.fullBuiltInParams?await eP0($.writer,{...$.fullBuiltInParams,toolOutputMap:Z},$.ctx):eA$({ctx:$.ctx,writer:$.writer,toolOutputMap:Z,subtaskParams:$.subtaskParams,planMode:$.planMode}),J=$.kind==="subagent"?Object.fromEntries(Object.entries(X).filter(([W])=>!gx4.includes(W))):X;return{tools:{...Q,...J},toolOutputMap:Z,nameMap:Y}}var gx4;var Z2$=O(()=>{ia();BF();k41();gx4=["subtask","user_ask","propose_plan"]});var ZA0={};q4(ZA0,{waitForSeed:()=>tx4,seedLocalMode:()=>ix4,pruneUndecryptableJwks:()=>X2$,markSeedComplete:()=>nx4,isLocalMode:()=>iN,healLocalJwks:()=>cx4,getLocalAdminUser:()=>v41,getLocalAdminPassword:()=>$A0});import{symmetricDecrypt as hx4}from"better-auth/crypto";import{sql as Q2$}from"kysely";import{userInfo as ux4}from"os";async function cx4(){let $=O0();if(!$.localMode)return 0;if(!$.betterAuthSecret)return 0;return X2$(G8().db,$.betterAuthSecret)}async function X2$($,Z){let Q;try{Q=(await Q2$`
1576
+ `)}async function Nx4($,Z,Q){await hl($,Z,Q,{messageId:`stall-nudge-${Z.id}-${Q.id}`,prompt:Ux4(Q.harness_id),workflowID:`stall-nudge:${Z.id}:${Q.id}`})}async function Bx4($,Z){let Q=await $.storage.threads.get(Z);if(!Q)return{action:"none",thread:null};return{action:Fx4({status:Q.status,messageStorageVersion:Q.message_storage_version,harnessId:Q.harness_id}),thread:Q}}function Dx4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return aa($,Z)}async function Ox4($,Z){let Q=[];for(let Y of Z.threads){if(Y.status!=="in_progress")continue;let X=await $.storage.threads.get(Y.threadId);if(!X||!Dx4(X))continue;if(await $.storage.threads.markRunFailed(Y.threadId,A41,"abandoned"))Q.push(Y.threadId),console.warn(`[task-board] failed never-started thread ${Y.threadId} on ${Z.id}`)}return Q}async function iA$($,Z){let Q=$.organization?.id;if(!Q)return;for(let Y of Z){if(Y.status==="in_progress")try{if((await Ox4($,Y)).length>0)continue}catch(G){console.error(`[task-board] reaping threads for ${Y.id} failed`,G)}let X;try{X=Y.repo!=null&&(await $.storage.taskBoard.listPrs(Y.id,Q)).length>0}catch(G){console.error(`[task-board] listPrs for ${Y.id} failed`,G);continue}if(!n81(Y,X))continue;let J=Y.threads.find((G)=>G.hasMessages);if(!J)continue;try{let{action:G,thread:W}=await Bx4($,J.threadId);if(G==="none"||!W)continue;if(G==="advance")await tl($.storage.taskBoard,J.threadId,Q,$.storage.organizationBilling);else await Nx4($,Y,W)}catch(G){console.error(`[task-board] stall recovery failed for ${Y.id}`,G)}}}var A41="Run never started \u2014 no pod picked it up before the idle window elapsed";var T41=O(()=>{TP0();dN();$9()});import{z as EF}from"zod";var Lx4,wx4,bf;var R41=O(()=>{A4();P0();vX();J3();T41();CP0();Lx4=EF.object({key:EF.string(),title:EF.string(),position:EF.number()}),wx4=x({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization, plus the `owner/name` repos this organization has imported (the valid values for a task's `repo` field).",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:EF.object({}),outputSchema:EF.object({items:EF.array(El),repos:EF.array(EF.string()),columns:EF.array(Lx4)}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let[Y,{items:X},J]=await Promise.all([Z.storage.taskBoard.list(Q),Z.storage.connections.list(Q,{slug:"mcp-github"}),Z.storage.repositories.listByOrg(Q)]),G=[...new Set([...J.map((W)=>W.path),...IX$(X)])];return iA$(Z,Y),{items:Y,repos:G,columns:MJ$}}}),bf=dl(wx4)});async function pA$($,Z,Q){if(Z.assigneeId)return Z;let Y=Z.organizationId,X=await $.storage.columnAutomations.get(Y,Z.status);if(!X)return Z;let J=await $.storage.taskBoard.claimUnassignedForSuperAgent(Z.id,Y,Q.assignedBy,Q.actor,Z.status);if(!J)return Z;await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:null,to:o$}});try{await Gw($,J,{instruction:X.prompt??void 0})}catch(G){return console.warn(`[task-board] column rule on ${Z.status} rejected for ${Z.id}, un-delegating:`,G instanceof Error?G.message:G),await $.storage.taskBoard.unassignSuperAgent(Z.id,Y,Q.actor)??await $.storage.taskBoard.getById(Z.id,Y)??J}return J}var nA$=O(()=>{A4();jF()});function tA$($){if($===void 0)return;let Z=[];for(let Q of $){let Y=Q.trim().replace(/[\t\r\n]/g,"").replace(/\\/g,"/");if(!Y.startsWith("/")||Y.startsWith("//"))continue;if(!Z.includes(Y))Z.push(Y);if(Z.length===20)break}return Z}import{z as pY}from"zod";function zx4($){return Ex4.some((Z)=>$[Z]!==void 0)}function Px4($,Z){let Q=[];for(let{field:J,action:G}of jx4){if(Z[J]===$[J])continue;Q.push({action:G,data:{from:$[J],to:Z[J]}})}if(Z.description!==$.description)Q.push({action:"description_changed"});let Y=new Set($.tags.map((J)=>J.id));if(Z.tags.length!==$.tags.length||Z.tags.some((J)=>!Y.has(J.id)))Q.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return Q}function Ax4($,Z){if($!==o$)return!1;if(!Z)return!1;return Z.assigneeId!==o$?!0:Z.status===T$.queue}function Rx4($,Z,Q){let Y=$!==void 0&&Tx4.has($),X=Z!==void 0&&rX(Z);return Q&&Y&&X}function q41($,Z){return $!==void 0&&r81($)&&!Z}var jx4,Ex4,Tx4,xf;var sP0=O(()=>{A4();P0();t9();J3();OK();M11();jF();$Y();vN();$9();nA$();Mf();rZ();jG();jx4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"type",action:"type_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}],Ex4=["title","description","status","priority","type","assigneeId","repo","dueDate","sortOrder","previewRoutes","tagIds"];Tx4=new Set(["approved","merged","post_deploy_validation","done","archived"]);xf=x({name:"TASK_BOARD_ITEM_UPDATE",description:"Update a task board item's fields (title, description, status, priority, assignee), and/or link a chat thread to it.",annotations:{title:"Update Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pY.object({id:pY.string(),title:pY.string().min(1).max(Qz0).optional(),description:pY.string().max(Zz0).nullable().optional(),status:fN.optional(),priority:$f.optional(),type:Ba.optional(),assigneeId:pY.string().nullable().optional(),repo:pY.string().max(Yz0).nullable().optional(),dueDate:pY.string().datetime().nullable().optional(),sortOrder:pY.number().optional(),previewRoutes:pY.array(pY.string().max(500)).max(20).optional().describe("Paths this task's work created or edited, e.g. "+'["/cliente-vip", "/cliente-vip/faq"]. Paths only \u2014 no host: the '+"card joins each onto the pull request's deploy-preview origin so a reviewer can open the pages directly. Replaces the previous set; pass [] to clear."),tagIds:pY.array(pY.string()).max(1000).optional(),linkThreadId:pY.string().optional(),prUrl:pY.string().nullable().optional().describe("GitHub pull request URL to link to this task, e.g. https://github.com/owner/repo/pull/123. Pass it after opening a PR for an existing card; linking one is what starts its review.")}),outputSchema:pY.object({item:El}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=$.prUrl?Yw($.prUrl):null;if($.prUrl&&!Y)throw Error(`Not a change request URL: ${$.prUrl} (expected https://github.com/<owner>/<repo>/pull/<number>, https://gitlab.com/<namespace>/<project>/-/merge_requests/<iid> or https://bitbucket.org/<workspace>/<repo>/pull-requests/<id>)`);if($.assigneeId)await Xz0(Z,Q,$.assigneeId);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,Q))throw Error(`Task board item not found: ${$.id}`);if(!await Z.storage.threads.get($.linkThreadId))throw Error(`Thread not found: ${$.linkThreadId}`);await Z.storage.taskBoard.linkThread($.id,$.linkThreadId,Q)}let X=zx4($),J=X?await Z.storage.taskBoard.getById($.id,Q):null;if(X&&!J)throw Error(`Task board item not found: ${$.id}`);if($.status!==void 0&&r81($.status)){let N=await Z.storage.organizationSettings.get(Q);if(q41($.status,ZQ(N?.flags,"delivery_lanes_enabled")))throw Error("Delivery lanes are not enabled for this organization \u2014 enable "+"them in Settings before moving a task to Approved, Merged, or Post-deploy Validation.")}let G=Y3.getStore()!==void 0;if(Rx4($.status,J??void 0,G))throw Error("This task is under review \u2014 a run can't move it to Done or Archived. "+"Leave it for the reviewer; only a person, or TASK_BOARD_REVIEW_DECISION on a reviewer's own run, closes out a task under review.");let W=$.assigneeId!==void 0&&$.assigneeId!==(J?.assigneeId??null),K=Ax4($.assigneeId,J),F=(K?T$.queue:void 0)??$.status;if(J&&xX(J)){if($.title!==void 0||$.description!==void 0||$.priority!==void 0)throw Error("This task was generated from your report and can't be edited \u2014 create your own task instead.");if(K)await hu(Z,J,FL())}if($.tagIds!==void 0){let N=await Z.storage.tags.listOrgTags(Q),B=new Set(N.map((D)=>D.id));for(let D of $.tagIds)if(!B.has(D))throw Error(`Tag not found: ${D}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,c0(Z))}let U;if(X)U=await Z.storage.taskBoard.update($.id,Q,{title:$.title,description:$.description,status:F,priority:$.priority,type:$.type,assigneeId:$.assigneeId,assignedBy:W?$.assigneeId?c0(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder,previewRoutes:tA$($.previewRoutes)},c0(Z));else{let N=await Z.storage.taskBoard.getById($.id,Q);if(!N)throw Error(`Task board item not found: ${$.id}`);U=N}if(Y)await Z.storage.taskBoard.linkPr({taskBoardItemId:U.id,organizationId:Q,url:Y.url,prNumber:Y.number,repo:Y.repo,connectionId:null}),await SG(Q).catch((N)=>{console.error("[task-board] PR card cache invalidation failed",N)});if(J){let N=c0(Z),B=Px4(J,U);if(B.length>0)await WA$(Z,B.map((D)=>({taskBoardItemId:U.id,actorId:N,...D,alsoSubscribe:D.action==="assignee_changed"&&U.assigneeId!==o$?[U.assigneeId]:void 0})))}if(J&&U.description!==J.description)await Z.storage.notifications.notifyMentions({taskBoardItemId:U.id,organizationId:Q,actorId:c0(Z),body:U.description??"",previousBody:J.description});if(X||$.linkThreadId||Y)r$(Q,U);if(K)return await Gw(Z,U,{userInitiated:!0}),{item:U};if($.status!==void 0&&J!==null&&J.status!==U.status)U=await pA$(Z,U,{assignedBy:c0(Z),actor:c0(Z)});return{item:U}}})});import{z as aP0}from"zod";var yf;var M41=O(()=>{P0();$9();yf=x({name:"TASK_BOARD_ITEM_DELETE",description:"Delete a task board item. A reports-pushed task also dismisses its finding, so the next diagnostic import won't re-create the card.",annotations:{title:"Delete Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:aP0.object({id:aP0.string()}),outputSchema:aP0.object({success:aP0.boolean()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.taskBoard.delete($.id,Q,c0(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return hA$(Q,$.id),{success:!0}}})});import{z as c$}from"zod";async function _x4($,Z,Q){let Y=i(Z),X={query:{orgIds:[Y.id]},org:Y.slug??Y.id},J=$.to??new Date().toISOString(),W={from:$.from??new Date(Date.parse(J)-qx4).toISOString(),to:J},K=$.org;if(!K||K===Y.slug||K===Y.id)return{query:{...W,...X.query},org:X.org};let H=await He(Z);if(K==="all"){if(!H)return{query:{...W,...X.query},org:X.org};return If({action:"analytics_read",actorUserId:Z.auth?.user?.id,actorOrgId:Y.id,targetOrgId:"all",tool:Q}),{query:{...W,orgIds:null},org:"all"}}if(!H)throw Error("Not allowed to read another organization's task board analytics");let F=await Z.storage.taskBoardAnalytics.resolveOrgRef(K);if(!F)throw Error(`Organization not found: ${K}`);return If({action:"analytics_read",actorUserId:Z.auth?.user?.id,actorOrgId:Y.id,targetOrgId:F.id,tool:Q}),{query:{...W,orgIds:[F.id]},org:F.slug}}function vx4($){let Z=$.sections.filter((Y)=>Y.kind==="stat").flatMap((Y)=>Y.values).map((Y)=>`${Y.label}: ${Y.value??"\u2014"}${Y.unit?` ${Y.unit}`:""}`).join(", "),Q=$.sections.filter((Y)=>Y.kind==="table").map((Y)=>`${Y.title} (${Y.rows.length} rows)`).join(", ");return[`${$.org}, ${$.range.from}..${$.range.to}`,Z,Q].filter(Boolean).join(" \u2014 ")}function ol($,Z,Q,Y){return x({name:$,description:Q,annotations:{title:Z,readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Mx4,outputSchema:Cx4,modelSummary:vx4,handler:async(X,J)=>{p(J),await J.access.check();let{query:G,org:W}=await _x4(X,J,$);return{range:{from:G.from,to:G.to},org:W,sections:await Y(J,G)}}})}var qx4=2592000000,Mx4,Ix4,Vx4,kx4,Sx4,Cx4,gf,hf,uf,lf,cf,df,mf;var I41=O(()=>{P0();SP0();Mx4=c$.object({org:c$.string().optional().describe('Org slug or id to report on. Omit for the current org. "all" is the cross-tenant aggregate (admin orgs only).'),from:c$.string().datetime({offset:!0}).optional().describe("ISO start of the range. Defaults to 30 days ago."),to:c$.string().datetime({offset:!0}).optional().describe("ISO end of the range. Defaults to now.")}),Ix4=c$.object({kind:c$.literal("stat"),title:c$.string(),values:c$.array(c$.object({label:c$.string(),value:c$.number().nullable(),unit:c$.string().optional()}))}),Vx4=c$.object({kind:c$.literal("series"),title:c$.string(),unit:c$.string().optional(),points:c$.array(c$.record(c$.string(),c$.union([c$.number(),c$.string(),c$.null()])))}),kx4=c$.object({kind:c$.literal("table"),title:c$.string(),columns:c$.array(c$.string()),rows:c$.array(c$.array(c$.union([c$.string(),c$.number(),c$.null()])))}),Sx4=c$.discriminatedUnion("kind",[Ix4,Vx4,kx4]),Cx4=c$.object({range:c$.object({from:c$.string(),to:c$.string()}),org:c$.string(),sections:c$.array(Sx4)});gf=ol("TASK_BOARD_DELIVERY","Task Board Delivery","Task board throughput and flow: tasks completed, how many shipped a PR, lead vs cycle time, completions per day by board, time in review, and dwell by lane.",($,Z)=>$.storage.taskBoardAnalytics.delivery(Z)),hf=ol("TASK_BOARD_STUCK","Task Board Stuck Work","What is stuck on the task board right now: open lane visits oldest first, and work in progress bucketed by age. Deliberately not time-filtered.",($,Z)=>$.storage.taskBoardAnalytics.stuck(Z)),uf=ol("TASK_BOARD_COST","Task Board Cost","Task board spend: total USD, cost per completed task and per shipped PR, spend burned on abandoned work, spend per day, cost by tenant, and the coverage % that says how much of it was actually priced.",($,Z)=>$.storage.taskBoardAnalytics.cost(Z)),lf=ol("TASK_BOARD_QUALITY","Task Board Quality","Task board quality: first-pass yield, rework rate, autonomy (finished without a human), abandonment, rework over time, and retry burn.",($,Z)=>$.storage.taskBoardAnalytics.quality(Z)),cf=ol("TASK_BOARD_ERRORS","Task Board Errors","Task board run failures: failed runs, quota-blocked runs, failures per day, failure kinds, a live error feed, error signatures, and superseded runs.",($,Z)=>$.storage.taskBoardAnalytics.errors(Z)),df=ol("TASK_BOARD_TENANTS","Task Board Tenants",'Per-tenant task board scorecard and queue wait. Pass org: "all" for the cross-tenant view (admin orgs only).',($,Z)=>$.storage.taskBoardAnalytics.tenants(Z)),mf=x({name:"TASK_BOARD_ADMIN_ORG_LIST",description:"Whether the caller may read every org's task board, and if so the orgs that have board items. Non-admins get an empty list.",annotations:{title:"List Task Board Admin Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:c$.object({}),outputSchema:c$.object({isTaskBoardAdmin:c$.boolean(),orgs:c$.array(c$.object({id:c$.string(),slug:c$.string(),name:c$.string()}))}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z);if(!GA$(Q.id)||!await He(Z))return{isTaskBoardAdmin:!1,orgs:[]};return{isTaskBoardAdmin:!0,orgs:await Z.storage.taskBoardAnalytics.orgsWithBoardItems()}}})});function oA$($,Z){let Q=({output:Y,toolCallId:X})=>mz0(Y,X,Z)??{type:"json",value:Y};return{TASK_BOARD_ITEM_LIST:h1({description:bf.description,inputSchema:a(bf.inputSchema),execute:(Y)=>bf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ITEM_CREATE:h1({description:pf.description,inputSchema:a(pf.inputSchema),execute:(Y)=>pf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ITEM_UPDATE:h1({description:xf.description,inputSchema:a(xf.inputSchema),execute:(Y)=>xf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ITEM_DELETE:h1({description:yf.description,inputSchema:a(yf.inputSchema),execute:(Y)=>yf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ITEM_PRS_GET:h1({description:ff.description,inputSchema:a(ff.inputSchema),execute:(Y)=>ff.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ADMIN_ORG_LIST:h1({description:mf.description,inputSchema:a(mf.inputSchema),execute:(Y)=>mf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_DELIVERY:h1({description:gf.description,inputSchema:a(gf.inputSchema),execute:(Y)=>gf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_STUCK:h1({description:hf.description,inputSchema:a(hf.inputSchema),execute:(Y)=>hf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_COST:h1({description:uf.description,inputSchema:a(uf.inputSchema),execute:(Y)=>uf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_QUALITY:h1({description:lf.description,inputSchema:a(lf.inputSchema),execute:(Y)=>lf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_ERRORS:h1({description:cf.description,inputSchema:a(cf.inputSchema),execute:(Y)=>cf.execute(Y,$),toModelOutput:Q}),TASK_BOARD_TENANTS:h1({description:df.description,inputSchema:a(df.inputSchema),execute:(Y)=>df.execute(Y,$),toModelOutput:Q})}}var rA$=O(()=>{b4();BF();V41();R41();sP0();M41();rZ();I41()});function sA$($){return{COLLECTION_VIRTUAL_MCP_CREATE:h1({description:ez.description,inputSchema:a(ez.inputSchema),execute:(Z)=>ez.execute(Z,$)}),COLLECTION_VIRTUAL_MCP_LIST:h1({description:ZP.description,inputSchema:a(ZP.inputSchema),execute:(Z)=>ZP.execute(Z,$)}),COLLECTION_VIRTUAL_MCP_GET:h1({description:QP.description,inputSchema:a(QP.inputSchema),execute:(Z)=>QP.execute(Z,$)}),COLLECTION_VIRTUAL_MCP_UPDATE:h1({description:YP.description,inputSchema:a(YP.inputSchema),execute:(Z)=>YP.execute(Z,$)}),COLLECTION_VIRTUAL_MCP_DELETE:h1({description:XP.description,inputSchema:a(XP.inputSchema),execute:(Z)=>XP.execute(Z,$)}),VIRTUAL_MCP_PLUGIN_CONFIG_GET:h1({description:JP.description,inputSchema:a(JP.inputSchema),execute:(Z)=>JP.execute(Z,$)}),VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE:h1({description:GP.description,inputSchema:a(GP.inputSchema),execute:(Z)=>GP.execute(Z,$)}),VIRTUAL_MCP_PINNED_VIEWS_UPDATE:h1({description:WP.description,inputSchema:a(WP.inputSchema),execute:(Z)=>WP.execute(Z,$)}),COLLECTION_CONNECTIONS_LIST:h1({description:rz.description,inputSchema:a(rz.inputSchema),execute:(Z)=>rz.execute(Z,$)}),COLLECTION_CONNECTIONS_GET:h1({description:sz.description,inputSchema:a(sz.inputSchema),execute:(Z)=>sz.execute(Z,$)})}}var aA$=O(()=>{b4();vr0();_r0();or0();Ws0();$s0();ar0();Ys0();Fs0();Ks0();Hs0()});async function bx4($,Z,Q){let{provider:Y,imageProvider:X,webSearchProvider:J,deepResearchProvider:G,organization:W,models:K,toolApprovalLevel:H="auto",isPlanMode:F=!1,toolOutputMap:U,pendingImages:N,passthroughClient:B,vmContext:D,htmlArtifactBuffer:L,taskId:w,agentId:j,onChildUsage:E,backgroundDispatcher:z}=Z,P={isPlanMode:F},A=Q.auth?.user?.id,q=cz$({writer:$,toolOutputMap:U,passthroughClient:B,toolApprovalLevel:H,isPlanMode:F,objectStorage:Q.objectStorage});if(A)q.update_interests=Iz$({write:async(S)=>{await Q.storage.interests.setForAgent(S.orgId,S.agentId,S.userId,{interests:S.interests})},orgId:W.id,agentId:j,userId:A});if(Object.assign(q,oz$(Q)),Object.assign(q,await yx4(Q,w)?lP$(Q,w):oA$(Q,U)),uQ(j))Object.assign(q,sA$(Q));let k=ma(H,!1,P)!==!1,M;if(D){let S=await bl(Q,{virtualMcpId:D.virtualMcpId,branch:D.branch,userId:D.userId,syncTools:D.syncTools,threadId:D.threadId}),d=Pz$(S);M=Ez$({fs:d.fs,htmlArtifactBuffer:L,toolOutputMap:U,needsApproval:k,pendingImages:N}),Object.assign(q,M);let f=await Rz$({ctx:Q,orgId:W.id,virtualMcpId:D.virtualMcpId,userId:D.userId,threadId:D.threadId,writer:$,rebindFs:async(b)=>{d.swap(await bl(Q,{virtualMcpId:D.virtualMcpId,branch:b,userId:D.userId,syncTools:D.syncTools,threadId:D.threadId}))}});if(f)q.load_repo=f}if(Y)q.subtask=ra("subtask",S41,C41($,{provider:Y,organization:W,models:K,self:{id:j},currentThreadId:w,needsApproval:ma(H,!1,P)!==!1,onChildUsage:E,vmTools:M,parentBuiltInParams:Z},Q),z,(S)=>xz$(w,S));if(X&&K.image&&Q.objectStorage)q.generate_image=ra("generate_image",ta,vz$($,{provider:X,imageModelInfo:K.image,objectStorage:Q.objectStorage,allowHttpExternalUrls:O0().localMode}),z);if(J&&K.webSearch){let S=K81({provider:J,modelInfo:K.webSearch,ctx:Q,mode:"quick",toolName:"web_search"});q.web_search=G81($,{researchJob:S,toolOutputMap:U,taskId:w})}if(G&&K.deepResearch){let S=K81({provider:G,modelInfo:K.deepResearch,ctx:Q,mode:"deep",toolName:"deep_research"});q.deep_research=G81($,{researchJob:S,toolOutputMap:U,taskId:w,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}return q}function xx4($,Z,Q){let Y=Z.organization.id,X=Q.auth?.user?.id,J={};for(let[G,W]of Object.entries($)){let K=W,H=K.execute;if(typeof H!=="function"){J[G]=W;continue}let F=fx4[G],U=H.constructor?.name==="AsyncGeneratorFunction",N=(D,L)=>{if(!Y||!X)return;M1.capture({distinctId:X,event:"tool_called",groups:{organization:Y},properties:{organization_id:Y,tool_source:"builtin",tool_name:G,tool_safe_name:G,read_only:F?.readOnly??null,destructive:F?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(D),is_error:L}})},B=U?async function*(D,L){let w=performance.now(),j=!1;try{yield*H.call(K,D,L)}catch(E){throw j=!0,E}finally{N(performance.now()-w,j)}}:async(D,L)=>{let w=performance.now(),j=!1;try{return await H.call(K,D,L)}catch(E){throw j=!0,E}finally{N(performance.now()-w,j)}};J[G]={...K,execute:B}}return J}async function eP0($,Z,Q){let Y=await bx4($,Z,Q),X=xx4(Y,Z,Q);if(!Z.isPlanMode){let{propose_plan:J,...G}=X;return G}return X}function eA$($){let{ctx:Z,writer:Q,toolOutputMap:Y,subtaskParams:X,planMode:J}=$,G={user_ask:QP0,todo_write:YP0,read_tool_output:dz0({toolOutputMap:Y})};if(J)G.propose_plan=JP0;if(X.provider)G.subtask=C41(Q,X,Z);return G}async function yx4($,Z){try{return(await $.storage.threads.get(Z))?.metadata?.source==="jira"}catch{return!1}}var fx4;var k41=O(()=>{f4();ia();BF();zz$();$P0();qz$();_41();a$1();e$1();Vz$();$81();fz$();Y81();J81();oa();gz$();lz$();dz$();rz$();cP$();rA$();q8();aA$();o1();fx4={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1},TASK_BOARD_ITEM_LIST:{readOnly:!0,destructive:!1},TASK_BOARD_ITEM_CREATE:{readOnly:!1,destructive:!1},TASK_BOARD_ITEM_UPDATE:{readOnly:!1,destructive:!1},TASK_BOARD_ITEM_DELETE:{readOnly:!1,destructive:!0},TASK_BOARD_ITEM_PRS_GET:{readOnly:!0,destructive:!1},TASK_BOARD_ADMIN_ORG_LIST:{readOnly:!0,destructive:!1},TASK_BOARD_DELIVERY:{readOnly:!0,destructive:!1},TASK_BOARD_STUCK:{readOnly:!0,destructive:!1},TASK_BOARD_COST:{readOnly:!0,destructive:!1},TASK_BOARD_QUALITY:{readOnly:!0,destructive:!1},TASK_BOARD_ERRORS:{readOnly:!0,destructive:!1},TASK_BOARD_TENANTS:{readOnly:!0,destructive:!1}}});async function $2$($){let Z=$.toolOutputMap??cz0(),{tools:Q,nameMap:Y}=await ZP0($.mcpClient,Z,$.writer,$.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:$.planMode,timeoutMs:lz0,resolveArgs:$.resolveArgs,onToolCalled:$.onToolCalled,onPrOpened:$.onPrOpened}),X=$.fullBuiltInParams?await eP0($.writer,{...$.fullBuiltInParams,toolOutputMap:Z},$.ctx):eA$({ctx:$.ctx,writer:$.writer,toolOutputMap:Z,subtaskParams:$.subtaskParams,planMode:$.planMode}),J=$.kind==="subagent"?Object.fromEntries(Object.entries(X).filter(([W])=>!gx4.includes(W))):X;return{tools:{...Q,...J},toolOutputMap:Z,nameMap:Y}}var gx4;var Z2$=O(()=>{ia();BF();k41();gx4=["subtask","user_ask","propose_plan"]});var ZA0={};q4(ZA0,{waitForSeed:()=>tx4,seedLocalMode:()=>ix4,pruneUndecryptableJwks:()=>X2$,markSeedComplete:()=>nx4,isLocalMode:()=>iN,healLocalJwks:()=>cx4,getLocalAdminUser:()=>v41,getLocalAdminPassword:()=>$A0});import{symmetricDecrypt as hx4}from"better-auth/crypto";import{sql as Q2$}from"kysely";import{userInfo as ux4}from"os";async function cx4(){let $=O0();if(!$.localMode)return 0;if(!$.betterAuthSecret)return 0;return X2$(G8().db,$.betterAuthSecret)}async function X2$($,Z){let Q;try{Q=(await Q2$`
1577
1577
  select id, "privateKey" from jwks
1578
1578
  `.execute($)).rows}catch(X){if(X?.code==="42P01")return 0;return console.warn("[local-mode] JWKS heal skipped \u2014 could not read jwks:",X),0}let Y=0;for(let X of Q){let J=!0;try{await hx4({key:Z,data:JSON.parse(X.privateKey)})}catch{J=!1}if(J)continue;try{await Q2$`delete from jwks where id = ${X.id}`.execute($),Y++}catch(G){console.warn(`[local-mode] JWKS heal could not delete stale key ${X.id}:`,G)}}return Y}async function $A0(){return"local-mode-default"}function J2$(){try{return ux4().username||"local"}catch{return"local"}}function dx4($){return $.charAt(0).toUpperCase()+$.slice(1)}async function mx4(){let $=G8(),Z=await $.db.selectFrom("user").select($.db.fn.countAll().as("count")).executeTakeFirst();return Number(Z?.count??0)===0}async function ix4(){if(!await mx4())return!1;let Z=J2$(),Q=`${Z}@${Y2$}`,Y=dx4(Z),X=await $A0(),J=await W8.api.signUpEmail({body:{email:Q,password:X,name:Y}});if(!J?.user?.id)throw Error("Failed to create local admin user");let G=J.user.id,W=G8();await W.db.updateTable("user").set({role:"admin"}).where("id","=",G).execute();let K=`${Z}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),H=`${Y} Local`;return await W.db.updateTable("organization").set({name:H,slug:K}).where("id","in",(F)=>F.selectFrom("member").select("organizationId").where("userId","=",G)).execute(),!0}async function v41(){let $=G8(),Z=J2$(),Q=await $.db.selectFrom("user").where("email","=",`${Z}@${Y2$}`).selectAll().executeTakeFirst();if(Q)return Q;return $.db.selectFrom("user").where("email","=",`${Z}@${lx4}`).selectAll().executeTakeFirst()}function iN(){return O0().localMode}function nx4(){G2$()}function tx4(){return px4}var Y2$="localhost.studio",lx4="localhost.mesh",G2$,px4;var nf=O(()=>{UG();o1();oJ();px4=new Promise(($)=>{if(G2$=$,!iN())$()})});var W2$=O(()=>{GP0()});function rx4($){return $.type==="file"&&"mediaType"in $&&typeof $.mediaType==="string"&&ox4.has($.mediaType)}function B2$($){let Z=$.match(/^data:([^;]+);base64,(.+)$/s);if(!Z)return null;let[,Q,Y]=Z;try{let X=atob(Y),J=new Uint8Array(X.length);for(let G=0;G<X.length;G++)J[G]=X.charCodeAt(G);return{mimeType:Q,bytes:J}}catch{return null}}function f41($){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[$]??"bin"}async function sx4($,Z,Q,Y){if(!Y.objectStorage)return null;try{return await Y.objectStorage.put(Z,$,{contentType:Q}),Z}catch(X){return console.error("[file-materializer] Failed to upload file:",X),null}}async function Le($,Z){if(!Z.objectStorage)return null;try{return await Z.objectStorage.presignedGetUrl($,ax4)}catch(Q){return console.error("[file-materializer] Failed to generate presigned URL:",Q),null}}function D2$($){try{return decodeURIComponent($)}catch{return $}}function H2$($,Z){let Q=typeof $.filename==="string"&&$.filename.trim()?$.filename:`attachment.${f41(Z)}`,Y=Q.match(ex4);if(Y?.[1])Q=D2$(Y[1]);return[...Q.split(/[\\/]/).pop()??Q].filter((G)=>(G.codePointAt(0)??0)>=32).join("").trim()||`attachment.${f41(Z)}`}function F2$($,Z){if(!Z.has($))return Z.add($),$;let Q=$.lastIndexOf("."),Y=Q>0?$.slice(0,Q):$,X=Q>0?$.slice(Q):"";for(let J=2;;J++){let G=`${Y} (${J})${X}`;if(!Z.has(G))return Z.add(G),G}}async function U2$($,Z,Q,Y,X){if(!X||!Y.orgFs)return console.warn("[file-materializer] uploads-volume write skipped",{hasThreadId:Boolean(X),hasOrgFs:Boolean(Y.orgFs)}),null;try{let J=`${X}/${Q}`;return await Y.orgFs.write("uploads",J,$,{actor:Y.auth?.user?.id??"unknown",contentType:Z}),{key:oK("uploads",J),sandboxPath:`org/upload/${Q}`}}catch(J){return console.error("[file-materializer] uploads-volume write failed:",J),null}}async function QA0($,Z,Q){if(!Z.organization)return $;let Y=Z.organization.slug;if(!Y)return $;let X=$.findLastIndex((P)=>P.role==="user");if(X===-1)return $;let J=$[X],G=J.parts.filter((P)=>P.type==="file"&&("url"in P)&&typeof P.url==="string"&&P.url.startsWith("data:")),K=Boolean(Q?.threadId&&Z.orgFs)?J.parts.flatMap((P)=>{if(P.type!=="text"||!("text"in P)||typeof P.text!=="string")return[];let A=P.text.match($y4);if(!A?.[1]||A[2]===void 0)return[];return[{name:D2$(A[1]),content:A[2]}]}):[];if(G.length===0&&K.length===0)return $;let H=new Set,F=G.flatMap((P)=>{if(P.type!=="file"||!("url"in P)||typeof P.url!=="string")return[];let A=B2$(P.url);if(!A)return[];let q=F2$(H2$(P,A.mimeType),H);return[{dataUrl:P.url,parsed:A,filename:q}]}),U=K.map(({name:P,content:A})=>({filename:F2$(H2$({filename:P},"text/plain"),H),content:A})),B=(await Promise.all([...F.map(async({dataUrl:P,parsed:A,filename:q})=>{let k=await U2$(A.bytes,A.mimeType,q,Z,Q?.threadId);if(!k)return null;return{dataUrl:P,studioStorageUrl:uN(k.key),redirectUrl:ky(Z.baseUrl,Y,k.key),filename:q,sandboxPath:k.sandboxPath}}),...U.map(async({filename:P,content:A})=>{let q=await U2$(new TextEncoder().encode(A),K7(P),P,Z,Q?.threadId);if(!q)return null;return{dataUrl:null,studioStorageUrl:uN(q.key),redirectUrl:ky(Z.baseUrl,Y,q.key),filename:P,sandboxPath:q.sandboxPath}})])).filter((P)=>P!==null);if(B.length===0)return $;let D=B.map((P)=>P.sandboxPath?`- ${P.filename}: ${P.sandboxPath} (tool URL: ${P.studioStorageUrl})`:`- ${P.filename}: ${P.studioStorageUrl}`).join(`
1579
1579
  `),L=B.some((P)=>P.sandboxPath)?`[Attached files \u2014 already inside your sandbox; read them at the given path. The tool URL is only for tools that take a URL argument]
@@ -1659,7 +1659,7 @@ ${Q.trim()}`}function Bu4($){return[`Your ${nH[$]} comment carries no screenshot
1659
1659
  AND date >= {since:Date} AND date <= {until:Date}
1660
1660
  GROUP BY host
1661
1661
  ORDER BY sum(requests) DESC
1662
- LIMIT 25`,{slug:$,since:Z,until:Q});return[...new Set(Y.map((X)=>Hc(X.host)).filter(Boolean))]}async function mq$($){let Z=O0().oneDollarStatsApiKey;if(!Z||!nN())return null;let{slug:Q,testName:Y,since:X,until:J,goalOnDash:G}=$,W=await fu4(Q,X,J);if(W.length===0)return null;let K=`event:props:${Y}`,H=[X,J],F=Array.from(new Set([iA0,...$.goals])),U=async(b,n,m)=>{let o=[];for(let Q0=0;Q0<W.length;Q0+=dq$){let w0=await Promise.all(W.slice(Q0,Q0+dq$).map(async(e)=>{let s=await fetch(Cu4,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":Z,Accept:"application/json"},body:JSON.stringify({site_id:e,metrics:b,date_range:H,...n.length?{dimensions:n}:{},...m.length?{filters:m}:{},pagination:{limit:1e4,offset:0}}),signal:AbortSignal.timeout(_u4)}).catch(()=>null);if(!s||!s.ok)return[];return(await s.json().catch(()=>null))?.results??[]}));for(let e of w0)o.push(...e)}return o},N=async(b,n)=>{let m=b===iA0;return(await U(["visitors"],[K,...m?[]:["event:goal"]],[["is",K,[n]],...m?[]:[["is","event:goal",[b]]]])).reduce((Q0,w0)=>Q0+(w0.metrics?.[0]??0),0)},B=async(b)=>{let n=G===iA0;return U(["visitors"],["time:day",K,...n?[]:["event:goal"]],[["is",K,[b]],...n?[]:[["is","event:goal",[G]]]])},[D,L,w]=await Promise.all([Promise.all(F.map(async(b)=>({goal:b,variant:await N(b,"true"),default:await N(b,"false")}))),B("false"),B("true")]),j=D.find((b)=>b.goal===iA0),E={default:j?.default??0,variant:j?.variant??0},z=new Map;for(let b of L){let n=b.dimensions?.[0]?.split(" ")[0]??"";if(!n)continue;let m=z.get(n)??{default:0,variant:0};m.default+=b.metrics?.[0]??0,z.set(n,m)}for(let b of w){let n=b.dimensions?.[0]?.split(" ")[0]??"";if(!n)continue;let m=z.get(n)??{default:0,variant:0};m.variant+=b.metrics?.[0]??0,z.set(n,m)}let P=Array.from(z.entries()).map(([b,n])=>({date:b,...n})).sort((b,n)=>b.date.localeCompare(n.date)),A=L.reduce((b,n)=>b+(n.metrics?.[0]??0),0),q=w.reduce((b,n)=>b+(n.metrics?.[0]??0),0),k={successes:A,total:E.default},M={successes:q,total:E.variant},S=cq$(k,M),d=S==null||Number.isNaN(S)?1000:S,f=lq$(k,M);return{visitors:E,goals:D,timeseries:P,stats:{totalParticipants:E.default+E.variant,sampleSize:d,probabilityVariantBest:f,probabilityDefaultBest:1-f}}}var Cu4="https://deco.lilstts.com/plausible",_u4=12000,dq$=6,iA0="visitors",vu4="site_id IN (SELECT id FROM default.dim_sites WHERE name = {slug:String})";var iq$=O(()=>{o1();dA0();mA0()});import{z as g6}from"zod";function nq$($){return $.toISOString().slice(0,10)}function bu4(){let $=new Date,Z=new Date($);return Z.setUTCDate(Z.getUTCDate()-29),{since:nq$(Z),until:nq$($)}}var pq$,B51;var tq$=O(()=>{LG();P0();iq$();Zb();pq$=/^\d{4}-\d{2}-\d{2}$/;B51=x({name:"EXPERIMENT_RESULTS",description:"A/B results for one experiment: per-goal visitor conversions for each variant, a daily timeseries for the selected goal, and the computed statistics (participants, target sample size, probability each variant is best).",annotations:{title:"Experiment Results",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:g6.object({site:g6.string().min(1).max(60).refine(mZ).describe("Site slug the experiment belongs to."),key:g6.string().min(1).describe("Analytics prop key the variants split on: `event:props:<key>` = 'true'/'false'. In the deco runtime this is the sticky segment matcher block's id (not the multivariate section name), so `key` must equal that matcher id for results to populate."),since:g6.string().regex(pq$).optional().describe("Window start (YYYY-MM-DD)."),until:g6.string().regex(pq$).optional().describe("Window end (YYYY-MM-DD)."),goals:g6.array(g6.string()).default([]).describe("Custom goals to aggregate conversions for."),goalOnDash:g6.string().default("visitors").describe("Goal plotted in the timeseries / used for the statistics.")}),outputSchema:g6.object({available:g6.boolean(),results:g6.object({visitors:g6.object({default:g6.number(),variant:g6.number()}),goals:g6.array(g6.object({goal:g6.string(),default:g6.number(),variant:g6.number()})),timeseries:g6.array(g6.object({date:g6.string(),default:g6.number(),variant:g6.number()})),stats:g6.object({totalParticipants:g6.number(),sampleSize:g6.number(),probabilityVariantBest:g6.number(),probabilityDefaultBest:g6.number()})}).nullable()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z);await vG(Z,Q.id,$.site);let Y=$.site.toLowerCase(),X=$.since&&$.until?{since:$.since,until:$.until}:bu4(),J=await mq$({slug:Y,testName:$.key,since:X.since,until:X.until,goals:$.goals,goalOnDash:$.goalOnDash});return{available:J!==null,results:J}}})});var oq$=O(()=>{vq$();fq$();bq$();xq$();yq$();tq$()});import{z as rq$}from"zod";function hu4($,Z){let Q=$?.[Z];if(!Q)return;return Object.entries(Q).filter(([,X])=>(XQ in X)).sort(([,X],[,J])=>(J[XQ]?.createdAt??0)-(X[XQ]?.createdAt??0))[0]?.[0]}var yu4,gu4,D51;var sq$=O(()=>{f4();P0();Of();vl();r7();mX();yu4=rq$.object({data:pz$.describe("Data for the new thread (id is auto-generated if not provided)")}),gu4=rq$.object({item:DF.describe("The created thread entity")});D51=x({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:yu4,outputSchema:gu4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to create thread");let{data:X}=$,J=X.id??z8("thrd"),W=(await HP0(Z.storage.virtualMcps,X.virtual_mcp_id,Q.id)).metadata,K=W?.githubRepo,H=null;if(K)H=X.branch??hu4(W?.sandboxMap,Y)??sz0(rz0(Z.auth.user));let F=await Z.storage.threads.create({id:J,organization_id:Q.id,title:X.title,description:X.description,virtual_mcp_id:X.virtual_mcp_id,branch:H,created_by:Y,metadata:{runtime:X.runtime??ez0(W)}});if(F.isNew)M1.capture({distinctId:Y,event:"chat_started",groups:{organization:Q.id},properties:{organization_id:Q.id,thread_id:J,has_title:!!$.data.title,created_via:"tool"}});return{item:VG(F)}}})});import{z as O51}from"zod";var uu4,lu4,L51;var aq$=O(()=>{f4();P0();Of();vl();uu4=O51.object({id:O51.string().describe("ID of the thread to update"),data:nz$.describe("Partial thread data to update")}),lu4=O51.object({item:DF.describe("The updated thread entity")}),L51=x({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uu4,outputSchema:lu4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to update thread");let{id:X,data:J}=$,G=await Z.storage.threads.get(X);if(!G)throw Error("Thread not found in organization");if(J.virtual_mcp_id!==void 0)await HP0(Z.storage.virtualMcps,J.virtual_mcp_id,Q.id);if(J.branch===null&&G.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(G.virtual_mcp_id,Q.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let W={title:J.title,description:J.description,hidden:J.hidden,updated_by:Y};if(J.status)W.status=J.status;if(J.metadata!==void 0){let H=xu(J.metadata)??{},F=Bf(G.metadata?.runtime),U=Bf(H.runtime);if(F&&U&&U!==F)throw Error(`Cannot change a thread's runtime (${F} \u2192 ${U}); it is stamped once at creation. Start a new chat instead.`);let N=G.metadata?.sandboxMap;W.metadata={...H,...F?{runtime:F}:{},...N!==void 0?{sandboxMap:N}:{}}}if(J.branch!==void 0)W.branch=J.branch;if(J.virtual_mcp_id!==void 0)W.virtual_mcp_id=J.virtual_mcp_id;let K=await Z.storage.threads.update(X,W);if(J.hidden!==void 0&&J.hidden!==G.hidden)M1.capture({distinctId:Y,event:J.hidden?"chat_archived":"chat_unarchived",groups:{organization:Q.id},properties:{organization_id:Q.id,thread_id:X}});return{item:VG(K)}}})});var w51;var eq$=O(()=>{pJ();Of();f4();P0();cN();bA0();Yc();w51=x({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pr,outputSchema:nr(DF),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=await Z.storage.threads.get($.id);if(!Y)throw Error(`Thread not found: ${$.id}`);if(Y.status==="in_progress"){let J=(W)=>(K)=>console.error("[thread] delete-time run cancel step failed",{threadId:$.id,step:W,err:K});await Qc($.id).catch(J("background-jobs")),await Wc($.id).catch(J("gate-head"));let G=await Z.storage.threads.getRunFence($.id).catch(()=>null);if(G)await ef($.id,G).catch(J("hosted-harness"));vA0($.id)}await Z.storage.threads.delete($.id);let X=c0(Z);if(X)M1.capture({distinctId:X,event:"chat_deleted",groups:{organization:Q.id},properties:{organization_id:Q.id,thread_id:$.id}});return{item:VG(Y)}}})});var $M$=O(()=>{sq$();U81();N81();aq$();eq$();B81()});function du4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function mu4($){return $.map((Z)=>{let Q=Z.metadata;if(Q?.tiptapDoc)return Z;let Y=Z.parts.find((X)=>X.type==="text"&&typeof X.text==="string");if(!Y?.text||typeof Y.text!=="string")return Z;return{...Z,metadata:{...Q,tiptapDoc:du4(Y.text)}}})}function pA0($){let Z;if(typeof $==="string")try{let Q=JSON.parse($);if(Array.isArray(Q)&&Q.length>0&&Q[0]?.role&&Array.isArray(Q[0]?.parts))Z=Q;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return mu4(Z)}import{z as B5}from"zod";var j51;var ZM$=O(()=>{f4();P0();t9();j51=x({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:B5.object({name:B5.string().min(1).max(255),virtual_mcp_id:B5.string(),messages:B5.union([B5.string(),B5.array(B5.looseObject({id:B5.string().optional(),role:B5.enum(["user","assistant","system"]),parts:B5.array(B5.record(B5.string(),B5.unknown())),metadata:B5.unknown().optional()}))]),models:B5.object({tier:$L,modelId:B5.string().optional(),credentialId:B5.string().optional()}).loose().default({tier:"smart"}),tools:B5.array(B5.string()).nullable().optional(),maxAgentSteps:B5.number().int().min(1).max(100).nullable().optional(),temperature:B5.number().default(0.5),active:B5.boolean().default(!0)}),outputSchema:B5.object({id:B5.string(),name:B5.string(),active:B5.boolean(),created_at:B5.string()}),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("Unable to determine user identity");let X=pA0($.messages),J=await Z.storage.automations.create({organization_id:Q.id,created_by:Y,name:$.name,messages:JSON.stringify(X),models:JSON.stringify($.models),tools:$.tools===void 0||$.tools===null?null:JSON.stringify($.tools),max_agent_steps:$.maxAgentSteps??null,temperature:$.temperature,active:$.active,virtual_mcp_id:$.virtual_mcp_id});return M1.capture({distinctId:Y,event:"automation_created",groups:{organization:Q.id},properties:{organization_id:Q.id,automation_id:J.id,virtual_mcp_id:$.virtual_mcp_id,active:J.active,tier:$.models.tier}}),{id:J.id,name:J.name,active:J.active,created_at:J.created_at}}})});import{z as a6}from"zod";var E51;var QM$=O(()=>{P0();E51=x({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:a6.object({id:a6.string()}),outputSchema:a6.object({automation:a6.object({id:a6.string(),name:a6.string(),active:a6.boolean(),created_by:a6.string(),created_at:a6.string(),updated_at:a6.string(),virtual_mcp_id:a6.string(),messages:a6.unknown(),models:a6.unknown(),tools:a6.array(a6.string()).nullable(),maxAgentSteps:a6.number().nullable(),temperature:a6.number(),triggers:a6.array(a6.object({id:a6.string(),type:a6.enum(["cron","event","webhook"]),cron_expression:a6.string().nullable(),connection_id:a6.string().nullable(),event_type:a6.string().nullable(),params:a6.unknown().nullable(),last_run_at:a6.string().nullable(),api_key_id:a6.string().nullable(),created_at:a6.string()}))}).nullable()}),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=await Z.storage.automations.findById($.id,Q.id);if(!Y)return{automation:null};let X=await Z.storage.automations.listTriggers(Y.id);return{automation:{id:Y.id,name:Y.name,active:Y.active,created_by:Y.created_by,created_at:Y.created_at,updated_at:Y.updated_at,virtual_mcp_id:Y.virtual_mcp_id,messages:JSON.parse(Y.messages),models:JSON.parse(Y.models),tools:Y.tools?JSON.parse(Y.tools):null,maxAgentSteps:Y.max_agent_steps,temperature:Y.temperature,triggers:X.map((J)=>({id:J.id,type:J.type,cron_expression:J.cron_expression,connection_id:J.connection_id,event_type:J.event_type,params:J.params?JSON.parse(J.params):null,last_run_at:J.last_run_at,api_key_id:J.api_key_id,created_at:J.created_at}))}}}})});import{z as U3}from"zod";var z51;var YM$=O(()=>{P0();z51=x({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:U3.object({virtual_mcp_id:U3.string().optional().nullable()}),outputSchema:U3.object({automations:U3.array(U3.object({id:U3.string(),name:U3.string(),active:U3.boolean(),created_by:U3.string(),created_at:U3.string(),trigger_count:U3.number(),nearest_next_run_at:U3.string().nullable(),virtual_mcp_id:U3.string()}))}),handler:async($,Z)=>{p(Z);let Q=i(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(Q.id,$.virtual_mcp_id)).map((J)=>({id:J.id,name:J.name,active:J.active,created_by:J.created_by,created_at:J.created_at,trigger_count:J.trigger_count,nearest_next_run_at:J.nearest_next_run_at,virtual_mcp_id:J.virtual_mcp_id}))}}})});function pu4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((Q)=>typeof Q==="string"))return Z.length>0?Z:null}catch{}return null}function XM$($){return`${$}:context`}function JM$($,Z,Q,Y,X){let G=JSON.parse($.messages).map((H,F)=>({...H,id:`${Q}:${F}`})),W=Z?{...X,[zl]:iu4}:X;return{messages:G,models:{credentialId:Y.credentialId,thinking:Y.thinking,...Y.image?{image:Y.image}:{},...Y.webSearch?{webSearch:Y.webSearch}:{},...Y.deepResearch?{deepResearch:Y.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:pu4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",triggerId:Z??void 0,...W?{runMetadata:W}:{},taskId:Q}}var iu4="new_task";var GM$=O(()=>{Pl()});function QY($,Z,Q,Y,X,J,G,W){return QY.fromTZ(QY.tp($,Z,Q,Y,X,J,G),W)}function P51($,Z=new Date){let Q=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],Y=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${Y} GMT`)-Date.parse(`${Y} ${Q}`)}function nu4($,Z){let Q=new Date(Date.parse($));if(isNaN(Q))throw Error("minitz: Invalid ISO8601 passed to parser.");let Y=$.substring(9);return $.includes("Z")||Y.includes("-")||Y.includes("+")?QY.tp(Q.getUTCFullYear(),Q.getUTCMonth()+1,Q.getUTCDate(),Q.getUTCHours(),Q.getUTCMinutes(),Q.getUTCSeconds(),"Etc/UTC"):QY.tp(Q.getFullYear(),Q.getMonth()+1,Q.getDate(),Q.getHours(),Q.getMinutes(),Q.getSeconds(),Z)}function tu4($){if($===void 0&&($={}),delete $.name,$.legacyMode=$.legacyMode===void 0?!0:$.legacyMode,$.paused=$.paused===void 0?!1:$.paused,$.maxRuns=$.maxRuns===void 0?1/0:$.maxRuns,$.catch=$.catch===void 0?!1:$.catch,$.interval=$.interval===void 0?0:parseInt($.interval.toString(),10),$.utcOffset=$.utcOffset===void 0?void 0:parseInt($.utcOffset.toString(),10),$.unref=$.unref===void 0?!1:$.unref,$.startAt&&($.startAt=new fG($.startAt,$.timezone)),$.stopAt&&($.stopAt=new fG($.stopAt,$.timezone)),$.interval!==null){if(isNaN($.interval))throw Error("CronOptions: Supplied value for interval is not a number");if($.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if($.utcOffset!==void 0){if(isNaN($.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if($.utcOffset<-870||$.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if($.utcOffset!==void 0&&$.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if($.unref!==!0&&$.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return $}function ve($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function ou4($){return ve($)}function ru4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var A51=32,fe,FM$,WM$=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor($,Z){this.pattern=$,this.timezone=Z,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let $=this.pattern.replace(/\s+/g," ").split(" ");if($.length<5||$.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if($.length===5&&$.unshift("0"),$[3].indexOf("L")>=0&&($[3]=$[3].replace("L",""),this.lastDayOfMonth=!0),$[3]=="*"&&(this.starDOM=!0),$[4].length>=3&&($[4]=this.replaceAlphaMonths($[4])),$[5].length>=3&&($[5]=this.replaceAlphaDays($[5])),$[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Z=new fG(new Date,this.timezone).getDate(!0);$[0]=$[0].replace("?",Z.getSeconds().toString()),$[1]=$[1].replace("?",Z.getMinutes().toString()),$[2]=$[2].replace("?",Z.getHours().toString()),this.starDOM||($[3]=$[3].replace("?",Z.getDate().toString())),$[4]=$[4].replace("?",(Z.getMonth()+1).toString()),this.starDOW||($[5]=$[5].replace("?",Z.getDay().toString()))}this.throwAtIllegalCharacters($),this.partToArray("second",$[0],0,1),this.partToArray("minute",$[1],0,1),this.partToArray("hour",$[2],0,1),this.partToArray("day",$[3],-1,1),this.partToArray("month",$[4],-1,1),this.partToArray("dayOfWeek",$[5],0,fe),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,Q,Y){let X=this[$],J=$==="day"&&this.lastDayOfMonth;if(Z===""&&!J)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return X.fill(Y);let G=Z.split(",");if(G.length>1)for(let W=0;W<G.length;W++)this.partToArray($,G[W],Q,Y);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,Q,Y):Z.indexOf("-")!==-1?this.handleRange(Z,$,Q,Y):Z.indexOf("/")!==-1?this.handleStepping(Z,$,Q,Y):Z!==""&&this.handleNumber(Z,$,Q,Y)}throwAtIllegalCharacters($){for(let Z=0;Z<$.length;Z++)if((Z===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test($[Z]))throw TypeError("CronPattern: configuration entry "+Z+" ("+$[Z]+") contains illegal characters.")}handleNumber($,Z,Q,Y){let X=this.extractNth($,Z),J=parseInt(X[0],10)+Q;if(isNaN(J))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,J,X[1]||Y)}setPart($,Z,Q){if(!Object.prototype.hasOwnProperty.call(this,$))throw TypeError("CronPattern: Invalid part specified: "+$);if($==="dayOfWeek"){if(Z===7&&(Z=0),Z<0||Z>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Z);this.setNthWeekdayOfMonth(Z,Q);return}if($==="second"||$==="minute"){if(Z<0||Z>=60)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="hour"){if(Z<0||Z>=24)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="day"){if(Z<0||Z>=31)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="month"&&(Z<0||Z>=12))throw RangeError("CronPattern: Invalid value for "+$+": "+Z);this[$][Z]=Q}handleRangeWithStepping($,Z,Q,Y){let X=this.extractNth($,Z),J=X[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(J===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,G,W,K]=J,H=parseInt(G,10)+Q,F=parseInt(W,10)+Q,U=parseInt(K,10);if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(U))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(U===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(U>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(H>F)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let N=H;N<=F;N+=U)this.setPart(Z,N,X[1]||Y)}extractNth($,Z){let Q=$,Y;if(Q.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");Y=Q.split("#")[1],Q=Q.split("#")[0]}return[Q,Y]}handleRange($,Z,Q,Y){let X=this.extractNth($,Z),J=X[0].split("-");if(J.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let G=parseInt(J[0],10)+Q,W=parseInt(J[1],10)+Q;if(isNaN(G))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(G>W)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let K=G;K<=W;K++)this.setPart(Z,K,X[1]||Y)}handleStepping($,Z,Q,Y){let X=this.extractNth($,Z),J=X[0].split("/");if(J.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");J[0]===""&&(J[0]="*");let G=0;J[0]!=="*"&&(G=parseInt(J[0],10)+Q);let W=parseInt(J[1],10);if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(W===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(W>this[Z].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Z].length+")");for(let K=G;K<this[Z].length;K+=W)this.setPart(Z,K,X[1]||Y)}replaceAlphaDays($){return $.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths($){return $.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames($){let Z=$.trim().toLowerCase();return Z==="@yearly"||Z==="@annually"?"0 0 1 1 *":Z==="@monthly"?"0 0 1 * *":Z==="@weekly"?"0 0 * * 0":Z==="@daily"?"0 0 * * *":Z==="@hourly"?"0 * * * *":$}setNthWeekdayOfMonth($,Z){if(typeof Z!="number"&&Z==="L")this.dayOfWeek[$]=this.dayOfWeek[$]|A51;else if(Z===fe)this.dayOfWeek[$]=fe;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|FM$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},KM$,tN,fG=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,Q){if(this.tz=Q,Z&&Z instanceof Date)if(!isNaN(Z))this.fromDate(Z);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Z===void 0)this.fromDate(new Date);else if(Z&&typeof Z=="string")this.fromString(Z);else if(Z instanceof $)this.fromCronDate(Z);else throw TypeError("CronDate: Invalid type ("+typeof Z+") passed to CronDate constructor")}isNthWeekdayOfMonth(Z,Q,Y,X){let J=new Date(Date.UTC(Z,Q,Y)).getUTCDay(),G=0;for(let W=1;W<=Y;W++)new Date(Date.UTC(Z,Q,W)).getUTCDay()===J&&G++;if(X&fe&&FM$[G-1]&X)return!0;if(X&A51){let W=new Date(Date.UTC(Z,Q+1,0)).getUTCDate();for(let K=Y+1;K<=W;K++)if(new Date(Date.UTC(Z,Q,K)).getUTCDay()===J)return!1;return!0}return!1}fromDate(Z){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes()+this.tz,this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),this.apply();else{let Q=QY.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=Q.s,this.minute=Q.i,this.hour=Q.h,this.day=Q.d,this.month=Q.m-1,this.year=Q.y}else this.ms=Z.getMilliseconds(),this.second=Z.getSeconds(),this.minute=Z.getMinutes(),this.hour=Z.getHours(),this.day=Z.getDate(),this.month=Z.getMonth(),this.year=Z.getFullYear()}fromCronDate(Z){this.tz=Z.tz,this.year=Z.year,this.month=Z.month,this.day=Z.day,this.hour=Z.hour,this.minute=Z.minute,this.second=Z.second,this.ms=Z.ms}apply(){if(this.month>11||this.day>KM$[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Z=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes(),this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),!0}else return!1}fromString(Z){if(typeof this.tz=="number"){let Q=QY.fromTZISO(Z);this.ms=Q.getUTCMilliseconds(),this.second=Q.getUTCSeconds(),this.minute=Q.getUTCMinutes(),this.hour=Q.getUTCHours(),this.day=Q.getUTCDate(),this.month=Q.getUTCMonth(),this.year=Q.getUTCFullYear(),this.apply()}else return this.fromDate(QY.fromTZISO(Z,this.tz))}findNext(Z,Q,Y,X){let J=this[Q],G;Y.lastDayOfMonth&&(this.month!==1?G=KM$[this.month]:G=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let W=!Y.starDOW&&Q=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[Q]+X;K<Y[Q].length;K++){let H=Y[Q][K];if(Q==="day"&&Y.lastDayOfMonth&&K-X==G&&(H=1),Q==="day"&&!Y.starDOW){let F=Y.dayOfWeek[(W+(K-X-1))%7];if(F&&F&fe)F=this.isNthWeekdayOfMonth(this.year,this.month,K-X,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);Z.legacyMode&&!Y.starDOM?H=H||F:H=H&&F}if(H)return this[Q]=K-X,J!==this[Q]?2:1}return 3}recurse(Z,Q,Y){let X=this.findNext(Q,tN[Y][0],Z,tN[Y][2]);if(X>1){let J=Y+1;for(;J<tN.length;)this[tN[J][0]]=-tN[J][2],J++;if(X===3)return this[tN[Y][1]]++,this[tN[Y][0]]=-tN[Y][2],this.apply(),this.recurse(Z,Q,0);if(this.apply())return this.recurse(Z,Q,Y-1)}return Y+=1,Y>=tN.length?this:this.year>=3000?null:this.recurse(Z,Q,Y)}increment(Z,Q,Y){return this.second+=Q.interval!==void 0&&Q.interval>1&&Y?Q.interval:1,this.ms=0,this.apply(),this.recurse(Z,Q,0)}getDate(Z){return Z||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):QY.fromTZ(QY.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},HM$=30000,nA0,tA0=class{name;options;_states;fn;constructor($,Z,Q){let Y,X;if(ve(Z))X=Z;else if(typeof Z=="object")Y=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(ve(Q))X=Q;else if(typeof Q=="object")Y=Q;else if(Q!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=Y?.name,this.options=tu4(Y),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:Y?Y.maxRuns:void 0,paused:Y?Y.paused:!1,pattern:new WM$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new fG($,this.options.timezone||this.options.utcOffset):this._states.pattern=new WM$($,this.options.timezone),this.name){if(nA0.find((J)=>J.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");nA0.push(this)}return X!==void 0&&ou4(X)&&(this.fn=X,this.schedule()),this}nextRun($){let Z=this._next($);return Z?Z.getDate(!1):null}nextRuns($,Z){this._states.maxRuns!==void 0&&$>this._states.maxRuns&&($=this._states.maxRuns);let Q=[],Y=Z||this._states.currentRun||void 0;for(;$--&&(Y=this.nextRun(Y));)Q.push(Y);return Q}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,Q=this.fn!==void 0,Y=!this._states.kill;return Z&&Q&&Y&&$!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext($){let Z=this._next($);return Z?$ instanceof fG||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new fG($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=nA0.indexOf(this);$>=0&&nA0.splice($,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule($){if($&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");$&&(this.fn=$);let Z=this.msToNext(),Q=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||Q===null?this:(Z>HM$&&(Z=HM$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(Q),Z),this._states.currentTimeout&&this.options.unref&&ru4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new fG(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Z){ve(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new fG($,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger($){let Z=new Date,Q=!this._states.paused&&Z.getTime()>=$.getTime(),Y=this._states.blocking&&this.options.protect;Q&&!Y?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):Q&&Y&&ve(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),Q=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),Q=!$),$=new fG($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let Y=this._states.once||new fG($,this.options.timezone||this.options.utcOffset);return!Q&&Y!==this._states.once&&(Y=Y.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||Y===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&Y.getTime()>=this.options.stopAt.getTime()?null:Y}_calculatePreviousRun($,Z){let Q=new fG(void 0,this.options.timezone||this.options.utcOffset),Y=$;if(this.options.startAt.getTime()<=Q.getTime()){Y=this.options.startAt;let X=Y.getTime()+this.options.interval*1000;for(;X<=Q.getTime();)Y=new fG(Y,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),X=Y.getTime()+this.options.interval*1000;Z=!0}return Y===null&&(Y=void 0),[Y,Z]}};var T51=O(()=>{QY.fromTZISO=($,Z,Q)=>QY.fromTZ(nu4($,Z),Q);QY.fromTZ=function($,Z){let Q=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),Y=P51($.tz,Q),X=new Date(Q.getTime()-Y),J=P51($.tz,X);if(J-Y===0)return X;{let G=new Date(Q.getTime()-J),W=P51($.tz,G);if(W-J===0)return G;if(!Z&&W-J>0)return G;if(Z)throw Error("Invalid date passed to fromTZ()");return X}};QY.toTZ=function($,Z){let Q=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),Y=new Date(Q);return{y:Y.getFullYear(),m:Y.getMonth()+1,d:Y.getDate(),h:Y.getHours(),i:Y.getMinutes(),s:Y.getSeconds(),tz:Z}};QY.tp=($,Z,Q,Y,X,J,G)=>({y:$,m:Z,d:Q,h:Y,i:X,s:J,tz:G});QY.minitz=QY;fe=31|A51,FM$=[1,2,4,8,16],KM$=[31,28,31,30,31,30,31,31,30,31,30,31],tN=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];nA0=[]});function oA0($,Z){try{return new tA0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var R51=O(()=>{T51()});import{DBOS as GQ,SchedulerMode as su4}from"@dbos-inc/dbos-sdk";async function k51($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
1662
+ LIMIT 25`,{slug:$,since:Z,until:Q});return[...new Set(Y.map((X)=>Hc(X.host)).filter(Boolean))]}async function mq$($){let Z=O0().oneDollarStatsApiKey;if(!Z||!nN())return null;let{slug:Q,testName:Y,since:X,until:J,goalOnDash:G}=$,W=await fu4(Q,X,J);if(W.length===0)return null;let K=`event:props:${Y}`,H=[X,J],F=Array.from(new Set([iA0,...$.goals])),U=async(b,n,m)=>{let o=[];for(let Q0=0;Q0<W.length;Q0+=dq$){let w0=await Promise.all(W.slice(Q0,Q0+dq$).map(async(e)=>{let s=await fetch(Cu4,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":Z,Accept:"application/json"},body:JSON.stringify({site_id:e,metrics:b,date_range:H,...n.length?{dimensions:n}:{},...m.length?{filters:m}:{},pagination:{limit:1e4,offset:0}}),signal:AbortSignal.timeout(_u4)}).catch(()=>null);if(!s||!s.ok)return[];return(await s.json().catch(()=>null))?.results??[]}));for(let e of w0)o.push(...e)}return o},N=async(b,n)=>{let m=b===iA0;return(await U(["visitors"],[K,...m?[]:["event:goal"]],[["is",K,[n]],...m?[]:[["is","event:goal",[b]]]])).reduce((Q0,w0)=>Q0+(w0.metrics?.[0]??0),0)},B=async(b)=>{let n=G===iA0;return U(["visitors"],["time:day",K,...n?[]:["event:goal"]],[["is",K,[b]],...n?[]:[["is","event:goal",[G]]]])},[D,L,w]=await Promise.all([Promise.all(F.map(async(b)=>({goal:b,variant:await N(b,"true"),default:await N(b,"false")}))),B("false"),B("true")]),j=D.find((b)=>b.goal===iA0),E={default:j?.default??0,variant:j?.variant??0},z=new Map;for(let b of L){let n=b.dimensions?.[0]?.split(" ")[0]??"";if(!n)continue;let m=z.get(n)??{default:0,variant:0};m.default+=b.metrics?.[0]??0,z.set(n,m)}for(let b of w){let n=b.dimensions?.[0]?.split(" ")[0]??"";if(!n)continue;let m=z.get(n)??{default:0,variant:0};m.variant+=b.metrics?.[0]??0,z.set(n,m)}let P=Array.from(z.entries()).map(([b,n])=>({date:b,...n})).sort((b,n)=>b.date.localeCompare(n.date)),A=L.reduce((b,n)=>b+(n.metrics?.[0]??0),0),q=w.reduce((b,n)=>b+(n.metrics?.[0]??0),0),k={successes:A,total:E.default},M={successes:q,total:E.variant},S=cq$(k,M),d=S==null||Number.isNaN(S)?1000:S,f=lq$(k,M);return{visitors:E,goals:D,timeseries:P,stats:{totalParticipants:E.default+E.variant,sampleSize:d,probabilityVariantBest:f,probabilityDefaultBest:1-f}}}var Cu4="https://deco.lilstts.com/plausible",_u4=12000,dq$=6,iA0="visitors",vu4="site_id IN (SELECT id FROM default.dim_sites WHERE name = {slug:String})";var iq$=O(()=>{o1();dA0();mA0()});import{z as g6}from"zod";function nq$($){return $.toISOString().slice(0,10)}function bu4(){let $=new Date,Z=new Date($);return Z.setUTCDate(Z.getUTCDate()-29),{since:nq$(Z),until:nq$($)}}var pq$,B51;var tq$=O(()=>{LG();P0();iq$();Zb();pq$=/^\d{4}-\d{2}-\d{2}$/;B51=x({name:"EXPERIMENT_RESULTS",description:"A/B results for one experiment: per-goal visitor conversions for each variant, a daily timeseries for the selected goal, and the computed statistics (participants, target sample size, probability each variant is best).",annotations:{title:"Experiment Results",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:g6.object({site:g6.string().min(1).max(60).refine(mZ).describe("Site slug the experiment belongs to."),key:g6.string().min(1).describe("Analytics prop key the variants split on: `event:props:<key>` = 'true'/'false'. In the deco runtime this is the sticky segment matcher block's id (not the multivariate section name), so `key` must equal that matcher id for results to populate."),since:g6.string().regex(pq$).optional().describe("Window start (YYYY-MM-DD)."),until:g6.string().regex(pq$).optional().describe("Window end (YYYY-MM-DD)."),goals:g6.array(g6.string()).default([]).describe("Custom goals to aggregate conversions for."),goalOnDash:g6.string().default("visitors").describe("Goal plotted in the timeseries / used for the statistics.")}),outputSchema:g6.object({available:g6.boolean(),results:g6.object({visitors:g6.object({default:g6.number(),variant:g6.number()}),goals:g6.array(g6.object({goal:g6.string(),default:g6.number(),variant:g6.number()})),timeseries:g6.array(g6.object({date:g6.string(),default:g6.number(),variant:g6.number()})),stats:g6.object({totalParticipants:g6.number(),sampleSize:g6.number(),probabilityVariantBest:g6.number(),probabilityDefaultBest:g6.number()})}).nullable()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z);await vG(Z,Q.id,$.site);let Y=$.site.toLowerCase(),X=$.since&&$.until?{since:$.since,until:$.until}:bu4(),J=await mq$({slug:Y,testName:$.key,since:X.since,until:X.until,goals:$.goals,goalOnDash:$.goalOnDash});return{available:J!==null,results:J}}})});var oq$=O(()=>{vq$();fq$();bq$();xq$();yq$();tq$()});import{z as rq$}from"zod";function hu4($,Z){let Q=$?.[Z];if(!Q)return;return Object.entries(Q).filter(([,X])=>(XQ in X)).sort(([,X],[,J])=>(J[XQ]?.createdAt??0)-(X[XQ]?.createdAt??0))[0]?.[0]}var yu4,gu4,D51;var sq$=O(()=>{f4();P0();Of();vl();r7();mX();yu4=rq$.object({data:pz$.describe("Data for the new thread (id is auto-generated if not provided)")}),gu4=rq$.object({item:DF.describe("The created thread entity")});D51=x({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:yu4,outputSchema:gu4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to create thread");let{data:X}=$,J=X.id??z8("thrd"),W=(await HP0(Z.storage.virtualMcps,X.virtual_mcp_id,Q.id)).metadata,K=W?.githubRepo,H=null;if(K)H=X.branch??hu4(W?.sandboxMap,Y)??sz0(rz0(Z.auth.user));let F=await Z.storage.threads.create({id:J,organization_id:Q.id,title:X.title,description:X.description,virtual_mcp_id:X.virtual_mcp_id,branch:H,created_by:Y,metadata:{runtime:X.runtime??ez0(W)}});if(F.isNew)M1.capture({distinctId:Y,event:"chat_started",groups:{organization:Q.id},properties:{organization_id:Q.id,thread_id:J,has_title:!!$.data.title,created_via:"tool"}});return{item:VG(F)}}})});import{z as O51}from"zod";var uu4,lu4,L51;var aq$=O(()=>{f4();P0();Of();vl();uu4=O51.object({id:O51.string().describe("ID of the thread to update"),data:nz$.describe("Partial thread data to update")}),lu4=O51.object({item:DF.describe("The updated thread entity")}),L51=x({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uu4,outputSchema:lu4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to update thread");let{id:X,data:J}=$,G=await Z.storage.threads.get(X);if(!G)throw Error("Thread not found in organization");let W;if(J.virtual_mcp_id!==void 0)W=await HP0(Z.storage.virtualMcps,J.virtual_mcp_id,Q.id);let K=J.virtual_mcp_id!==void 0?J.virtual_mcp_id:G.virtual_mcp_id;if(J.branch===null&&K){if((W??await Z.storage.virtualMcps.findById(K,Q.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let H={title:J.title,description:J.description,hidden:J.hidden,updated_by:Y};if(J.status)H.status=J.status;if(J.metadata!==void 0){let U=xu(J.metadata)??{},N=Bf(G.metadata?.runtime),B=Bf(U.runtime);if(N&&B&&B!==N)throw Error(`Cannot change a thread's runtime (${N} \u2192 ${B}); it is stamped once at creation. Start a new chat instead.`);let D=G.metadata?.sandboxMap;H.metadata={...U,...N?{runtime:N}:{},...D!==void 0?{sandboxMap:D}:{}}}if(J.branch!==void 0)H.branch=J.branch;if(J.virtual_mcp_id!==void 0)H.virtual_mcp_id=J.virtual_mcp_id;let F=await Z.storage.threads.update(X,H);if(J.hidden!==void 0&&J.hidden!==G.hidden)M1.capture({distinctId:Y,event:J.hidden?"chat_archived":"chat_unarchived",groups:{organization:Q.id},properties:{organization_id:Q.id,thread_id:X}});return{item:VG(F)}}})});var w51;var eq$=O(()=>{pJ();Of();f4();P0();cN();bA0();Yc();w51=x({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pr,outputSchema:nr(DF),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=await Z.storage.threads.get($.id);if(!Y)throw Error(`Thread not found: ${$.id}`);if(Y.status==="in_progress"){let J=(W)=>(K)=>console.error("[thread] delete-time run cancel step failed",{threadId:$.id,step:W,err:K});await Qc($.id).catch(J("background-jobs")),await Wc($.id).catch(J("gate-head"));let G=await Z.storage.threads.getRunFence($.id).catch(()=>null);if(G)await ef($.id,G).catch(J("hosted-harness"));vA0($.id)}await Z.storage.threads.delete($.id);let X=c0(Z);if(X)M1.capture({distinctId:X,event:"chat_deleted",groups:{organization:Q.id},properties:{organization_id:Q.id,thread_id:$.id}});return{item:VG(Y)}}})});var $M$=O(()=>{sq$();U81();N81();aq$();eq$();B81()});function du4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function mu4($){return $.map((Z)=>{let Q=Z.metadata;if(Q?.tiptapDoc)return Z;let Y=Z.parts.find((X)=>X.type==="text"&&typeof X.text==="string");if(!Y?.text||typeof Y.text!=="string")return Z;return{...Z,metadata:{...Q,tiptapDoc:du4(Y.text)}}})}function pA0($){let Z;if(typeof $==="string")try{let Q=JSON.parse($);if(Array.isArray(Q)&&Q.length>0&&Q[0]?.role&&Array.isArray(Q[0]?.parts))Z=Q;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return mu4(Z)}import{z as B5}from"zod";var j51;var ZM$=O(()=>{f4();P0();t9();j51=x({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:B5.object({name:B5.string().min(1).max(255),virtual_mcp_id:B5.string(),messages:B5.union([B5.string(),B5.array(B5.looseObject({id:B5.string().optional(),role:B5.enum(["user","assistant","system"]),parts:B5.array(B5.record(B5.string(),B5.unknown())),metadata:B5.unknown().optional()}))]),models:B5.object({tier:$L,modelId:B5.string().optional(),credentialId:B5.string().optional()}).loose().default({tier:"smart"}),tools:B5.array(B5.string()).nullable().optional(),maxAgentSteps:B5.number().int().min(1).max(100).nullable().optional(),temperature:B5.number().default(0.5),active:B5.boolean().default(!0)}),outputSchema:B5.object({id:B5.string(),name:B5.string(),active:B5.boolean(),created_at:B5.string()}),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("Unable to determine user identity");let X=pA0($.messages),J=await Z.storage.automations.create({organization_id:Q.id,created_by:Y,name:$.name,messages:JSON.stringify(X),models:JSON.stringify($.models),tools:$.tools===void 0||$.tools===null?null:JSON.stringify($.tools),max_agent_steps:$.maxAgentSteps??null,temperature:$.temperature,active:$.active,virtual_mcp_id:$.virtual_mcp_id});return M1.capture({distinctId:Y,event:"automation_created",groups:{organization:Q.id},properties:{organization_id:Q.id,automation_id:J.id,virtual_mcp_id:$.virtual_mcp_id,active:J.active,tier:$.models.tier}}),{id:J.id,name:J.name,active:J.active,created_at:J.created_at}}})});import{z as a6}from"zod";var E51;var QM$=O(()=>{P0();E51=x({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:a6.object({id:a6.string()}),outputSchema:a6.object({automation:a6.object({id:a6.string(),name:a6.string(),active:a6.boolean(),created_by:a6.string(),created_at:a6.string(),updated_at:a6.string(),virtual_mcp_id:a6.string(),messages:a6.unknown(),models:a6.unknown(),tools:a6.array(a6.string()).nullable(),maxAgentSteps:a6.number().nullable(),temperature:a6.number(),triggers:a6.array(a6.object({id:a6.string(),type:a6.enum(["cron","event","webhook"]),cron_expression:a6.string().nullable(),connection_id:a6.string().nullable(),event_type:a6.string().nullable(),params:a6.unknown().nullable(),last_run_at:a6.string().nullable(),api_key_id:a6.string().nullable(),created_at:a6.string()}))}).nullable()}),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=await Z.storage.automations.findById($.id,Q.id);if(!Y)return{automation:null};let X=await Z.storage.automations.listTriggers(Y.id);return{automation:{id:Y.id,name:Y.name,active:Y.active,created_by:Y.created_by,created_at:Y.created_at,updated_at:Y.updated_at,virtual_mcp_id:Y.virtual_mcp_id,messages:JSON.parse(Y.messages),models:JSON.parse(Y.models),tools:Y.tools?JSON.parse(Y.tools):null,maxAgentSteps:Y.max_agent_steps,temperature:Y.temperature,triggers:X.map((J)=>({id:J.id,type:J.type,cron_expression:J.cron_expression,connection_id:J.connection_id,event_type:J.event_type,params:J.params?JSON.parse(J.params):null,last_run_at:J.last_run_at,api_key_id:J.api_key_id,created_at:J.created_at}))}}}})});import{z as U3}from"zod";var z51;var YM$=O(()=>{P0();z51=x({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:U3.object({virtual_mcp_id:U3.string().optional().nullable()}),outputSchema:U3.object({automations:U3.array(U3.object({id:U3.string(),name:U3.string(),active:U3.boolean(),created_by:U3.string(),created_at:U3.string(),trigger_count:U3.number(),nearest_next_run_at:U3.string().nullable(),virtual_mcp_id:U3.string()}))}),handler:async($,Z)=>{p(Z);let Q=i(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(Q.id,$.virtual_mcp_id)).map((J)=>({id:J.id,name:J.name,active:J.active,created_by:J.created_by,created_at:J.created_at,trigger_count:J.trigger_count,nearest_next_run_at:J.nearest_next_run_at,virtual_mcp_id:J.virtual_mcp_id}))}}})});function pu4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((Q)=>typeof Q==="string"))return Z.length>0?Z:null}catch{}return null}function XM$($){return`${$}:context`}function JM$($,Z,Q,Y,X){let G=JSON.parse($.messages).map((H,F)=>({...H,id:`${Q}:${F}`})),W=Z?{...X,[zl]:iu4}:X;return{messages:G,models:{credentialId:Y.credentialId,thinking:Y.thinking,...Y.image?{image:Y.image}:{},...Y.webSearch?{webSearch:Y.webSearch}:{},...Y.deepResearch?{deepResearch:Y.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:pu4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",triggerId:Z??void 0,...W?{runMetadata:W}:{},taskId:Q}}var iu4="new_task";var GM$=O(()=>{Pl()});function QY($,Z,Q,Y,X,J,G,W){return QY.fromTZ(QY.tp($,Z,Q,Y,X,J,G),W)}function P51($,Z=new Date){let Q=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],Y=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${Y} GMT`)-Date.parse(`${Y} ${Q}`)}function nu4($,Z){let Q=new Date(Date.parse($));if(isNaN(Q))throw Error("minitz: Invalid ISO8601 passed to parser.");let Y=$.substring(9);return $.includes("Z")||Y.includes("-")||Y.includes("+")?QY.tp(Q.getUTCFullYear(),Q.getUTCMonth()+1,Q.getUTCDate(),Q.getUTCHours(),Q.getUTCMinutes(),Q.getUTCSeconds(),"Etc/UTC"):QY.tp(Q.getFullYear(),Q.getMonth()+1,Q.getDate(),Q.getHours(),Q.getMinutes(),Q.getSeconds(),Z)}function tu4($){if($===void 0&&($={}),delete $.name,$.legacyMode=$.legacyMode===void 0?!0:$.legacyMode,$.paused=$.paused===void 0?!1:$.paused,$.maxRuns=$.maxRuns===void 0?1/0:$.maxRuns,$.catch=$.catch===void 0?!1:$.catch,$.interval=$.interval===void 0?0:parseInt($.interval.toString(),10),$.utcOffset=$.utcOffset===void 0?void 0:parseInt($.utcOffset.toString(),10),$.unref=$.unref===void 0?!1:$.unref,$.startAt&&($.startAt=new fG($.startAt,$.timezone)),$.stopAt&&($.stopAt=new fG($.stopAt,$.timezone)),$.interval!==null){if(isNaN($.interval))throw Error("CronOptions: Supplied value for interval is not a number");if($.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if($.utcOffset!==void 0){if(isNaN($.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if($.utcOffset<-870||$.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if($.utcOffset!==void 0&&$.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if($.unref!==!0&&$.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return $}function ve($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function ou4($){return ve($)}function ru4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var A51=32,fe,FM$,WM$=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor($,Z){this.pattern=$,this.timezone=Z,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let $=this.pattern.replace(/\s+/g," ").split(" ");if($.length<5||$.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if($.length===5&&$.unshift("0"),$[3].indexOf("L")>=0&&($[3]=$[3].replace("L",""),this.lastDayOfMonth=!0),$[3]=="*"&&(this.starDOM=!0),$[4].length>=3&&($[4]=this.replaceAlphaMonths($[4])),$[5].length>=3&&($[5]=this.replaceAlphaDays($[5])),$[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Z=new fG(new Date,this.timezone).getDate(!0);$[0]=$[0].replace("?",Z.getSeconds().toString()),$[1]=$[1].replace("?",Z.getMinutes().toString()),$[2]=$[2].replace("?",Z.getHours().toString()),this.starDOM||($[3]=$[3].replace("?",Z.getDate().toString())),$[4]=$[4].replace("?",(Z.getMonth()+1).toString()),this.starDOW||($[5]=$[5].replace("?",Z.getDay().toString()))}this.throwAtIllegalCharacters($),this.partToArray("second",$[0],0,1),this.partToArray("minute",$[1],0,1),this.partToArray("hour",$[2],0,1),this.partToArray("day",$[3],-1,1),this.partToArray("month",$[4],-1,1),this.partToArray("dayOfWeek",$[5],0,fe),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,Q,Y){let X=this[$],J=$==="day"&&this.lastDayOfMonth;if(Z===""&&!J)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return X.fill(Y);let G=Z.split(",");if(G.length>1)for(let W=0;W<G.length;W++)this.partToArray($,G[W],Q,Y);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,Q,Y):Z.indexOf("-")!==-1?this.handleRange(Z,$,Q,Y):Z.indexOf("/")!==-1?this.handleStepping(Z,$,Q,Y):Z!==""&&this.handleNumber(Z,$,Q,Y)}throwAtIllegalCharacters($){for(let Z=0;Z<$.length;Z++)if((Z===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test($[Z]))throw TypeError("CronPattern: configuration entry "+Z+" ("+$[Z]+") contains illegal characters.")}handleNumber($,Z,Q,Y){let X=this.extractNth($,Z),J=parseInt(X[0],10)+Q;if(isNaN(J))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,J,X[1]||Y)}setPart($,Z,Q){if(!Object.prototype.hasOwnProperty.call(this,$))throw TypeError("CronPattern: Invalid part specified: "+$);if($==="dayOfWeek"){if(Z===7&&(Z=0),Z<0||Z>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Z);this.setNthWeekdayOfMonth(Z,Q);return}if($==="second"||$==="minute"){if(Z<0||Z>=60)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="hour"){if(Z<0||Z>=24)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="day"){if(Z<0||Z>=31)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="month"&&(Z<0||Z>=12))throw RangeError("CronPattern: Invalid value for "+$+": "+Z);this[$][Z]=Q}handleRangeWithStepping($,Z,Q,Y){let X=this.extractNth($,Z),J=X[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(J===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,G,W,K]=J,H=parseInt(G,10)+Q,F=parseInt(W,10)+Q,U=parseInt(K,10);if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(U))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(U===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(U>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(H>F)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let N=H;N<=F;N+=U)this.setPart(Z,N,X[1]||Y)}extractNth($,Z){let Q=$,Y;if(Q.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");Y=Q.split("#")[1],Q=Q.split("#")[0]}return[Q,Y]}handleRange($,Z,Q,Y){let X=this.extractNth($,Z),J=X[0].split("-");if(J.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let G=parseInt(J[0],10)+Q,W=parseInt(J[1],10)+Q;if(isNaN(G))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(G>W)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let K=G;K<=W;K++)this.setPart(Z,K,X[1]||Y)}handleStepping($,Z,Q,Y){let X=this.extractNth($,Z),J=X[0].split("/");if(J.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");J[0]===""&&(J[0]="*");let G=0;J[0]!=="*"&&(G=parseInt(J[0],10)+Q);let W=parseInt(J[1],10);if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(W===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(W>this[Z].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Z].length+")");for(let K=G;K<this[Z].length;K+=W)this.setPart(Z,K,X[1]||Y)}replaceAlphaDays($){return $.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths($){return $.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames($){let Z=$.trim().toLowerCase();return Z==="@yearly"||Z==="@annually"?"0 0 1 1 *":Z==="@monthly"?"0 0 1 * *":Z==="@weekly"?"0 0 * * 0":Z==="@daily"?"0 0 * * *":Z==="@hourly"?"0 * * * *":$}setNthWeekdayOfMonth($,Z){if(typeof Z!="number"&&Z==="L")this.dayOfWeek[$]=this.dayOfWeek[$]|A51;else if(Z===fe)this.dayOfWeek[$]=fe;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|FM$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},KM$,tN,fG=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,Q){if(this.tz=Q,Z&&Z instanceof Date)if(!isNaN(Z))this.fromDate(Z);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Z===void 0)this.fromDate(new Date);else if(Z&&typeof Z=="string")this.fromString(Z);else if(Z instanceof $)this.fromCronDate(Z);else throw TypeError("CronDate: Invalid type ("+typeof Z+") passed to CronDate constructor")}isNthWeekdayOfMonth(Z,Q,Y,X){let J=new Date(Date.UTC(Z,Q,Y)).getUTCDay(),G=0;for(let W=1;W<=Y;W++)new Date(Date.UTC(Z,Q,W)).getUTCDay()===J&&G++;if(X&fe&&FM$[G-1]&X)return!0;if(X&A51){let W=new Date(Date.UTC(Z,Q+1,0)).getUTCDate();for(let K=Y+1;K<=W;K++)if(new Date(Date.UTC(Z,Q,K)).getUTCDay()===J)return!1;return!0}return!1}fromDate(Z){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes()+this.tz,this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),this.apply();else{let Q=QY.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=Q.s,this.minute=Q.i,this.hour=Q.h,this.day=Q.d,this.month=Q.m-1,this.year=Q.y}else this.ms=Z.getMilliseconds(),this.second=Z.getSeconds(),this.minute=Z.getMinutes(),this.hour=Z.getHours(),this.day=Z.getDate(),this.month=Z.getMonth(),this.year=Z.getFullYear()}fromCronDate(Z){this.tz=Z.tz,this.year=Z.year,this.month=Z.month,this.day=Z.day,this.hour=Z.hour,this.minute=Z.minute,this.second=Z.second,this.ms=Z.ms}apply(){if(this.month>11||this.day>KM$[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Z=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes(),this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),!0}else return!1}fromString(Z){if(typeof this.tz=="number"){let Q=QY.fromTZISO(Z);this.ms=Q.getUTCMilliseconds(),this.second=Q.getUTCSeconds(),this.minute=Q.getUTCMinutes(),this.hour=Q.getUTCHours(),this.day=Q.getUTCDate(),this.month=Q.getUTCMonth(),this.year=Q.getUTCFullYear(),this.apply()}else return this.fromDate(QY.fromTZISO(Z,this.tz))}findNext(Z,Q,Y,X){let J=this[Q],G;Y.lastDayOfMonth&&(this.month!==1?G=KM$[this.month]:G=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let W=!Y.starDOW&&Q=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[Q]+X;K<Y[Q].length;K++){let H=Y[Q][K];if(Q==="day"&&Y.lastDayOfMonth&&K-X==G&&(H=1),Q==="day"&&!Y.starDOW){let F=Y.dayOfWeek[(W+(K-X-1))%7];if(F&&F&fe)F=this.isNthWeekdayOfMonth(this.year,this.month,K-X,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);Z.legacyMode&&!Y.starDOM?H=H||F:H=H&&F}if(H)return this[Q]=K-X,J!==this[Q]?2:1}return 3}recurse(Z,Q,Y){let X=this.findNext(Q,tN[Y][0],Z,tN[Y][2]);if(X>1){let J=Y+1;for(;J<tN.length;)this[tN[J][0]]=-tN[J][2],J++;if(X===3)return this[tN[Y][1]]++,this[tN[Y][0]]=-tN[Y][2],this.apply(),this.recurse(Z,Q,0);if(this.apply())return this.recurse(Z,Q,Y-1)}return Y+=1,Y>=tN.length?this:this.year>=3000?null:this.recurse(Z,Q,Y)}increment(Z,Q,Y){return this.second+=Q.interval!==void 0&&Q.interval>1&&Y?Q.interval:1,this.ms=0,this.apply(),this.recurse(Z,Q,0)}getDate(Z){return Z||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):QY.fromTZ(QY.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},HM$=30000,nA0,tA0=class{name;options;_states;fn;constructor($,Z,Q){let Y,X;if(ve(Z))X=Z;else if(typeof Z=="object")Y=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(ve(Q))X=Q;else if(typeof Q=="object")Y=Q;else if(Q!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=Y?.name,this.options=tu4(Y),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:Y?Y.maxRuns:void 0,paused:Y?Y.paused:!1,pattern:new WM$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new fG($,this.options.timezone||this.options.utcOffset):this._states.pattern=new WM$($,this.options.timezone),this.name){if(nA0.find((J)=>J.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");nA0.push(this)}return X!==void 0&&ou4(X)&&(this.fn=X,this.schedule()),this}nextRun($){let Z=this._next($);return Z?Z.getDate(!1):null}nextRuns($,Z){this._states.maxRuns!==void 0&&$>this._states.maxRuns&&($=this._states.maxRuns);let Q=[],Y=Z||this._states.currentRun||void 0;for(;$--&&(Y=this.nextRun(Y));)Q.push(Y);return Q}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,Q=this.fn!==void 0,Y=!this._states.kill;return Z&&Q&&Y&&$!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext($){let Z=this._next($);return Z?$ instanceof fG||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new fG($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=nA0.indexOf(this);$>=0&&nA0.splice($,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule($){if($&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");$&&(this.fn=$);let Z=this.msToNext(),Q=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||Q===null?this:(Z>HM$&&(Z=HM$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(Q),Z),this._states.currentTimeout&&this.options.unref&&ru4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new fG(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Z){ve(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new fG($,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger($){let Z=new Date,Q=!this._states.paused&&Z.getTime()>=$.getTime(),Y=this._states.blocking&&this.options.protect;Q&&!Y?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):Q&&Y&&ve(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),Q=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),Q=!$),$=new fG($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let Y=this._states.once||new fG($,this.options.timezone||this.options.utcOffset);return!Q&&Y!==this._states.once&&(Y=Y.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||Y===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&Y.getTime()>=this.options.stopAt.getTime()?null:Y}_calculatePreviousRun($,Z){let Q=new fG(void 0,this.options.timezone||this.options.utcOffset),Y=$;if(this.options.startAt.getTime()<=Q.getTime()){Y=this.options.startAt;let X=Y.getTime()+this.options.interval*1000;for(;X<=Q.getTime();)Y=new fG(Y,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),X=Y.getTime()+this.options.interval*1000;Z=!0}return Y===null&&(Y=void 0),[Y,Z]}};var T51=O(()=>{QY.fromTZISO=($,Z,Q)=>QY.fromTZ(nu4($,Z),Q);QY.fromTZ=function($,Z){let Q=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),Y=P51($.tz,Q),X=new Date(Q.getTime()-Y),J=P51($.tz,X);if(J-Y===0)return X;{let G=new Date(Q.getTime()-J),W=P51($.tz,G);if(W-J===0)return G;if(!Z&&W-J>0)return G;if(Z)throw Error("Invalid date passed to fromTZ()");return X}};QY.toTZ=function($,Z){let Q=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),Y=new Date(Q);return{y:Y.getFullYear(),m:Y.getMonth()+1,d:Y.getDate(),h:Y.getHours(),i:Y.getMinutes(),s:Y.getSeconds(),tz:Z}};QY.tp=($,Z,Q,Y,X,J,G)=>({y:$,m:Z,d:Q,h:Y,i:X,s:J,tz:G});QY.minitz=QY;fe=31|A51,FM$=[1,2,4,8,16],KM$=[31,28,31,30,31,30,31,31,30,31,30,31],tN=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];nA0=[]});function oA0($,Z){try{return new tA0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var R51=O(()=>{T51()});import{DBOS as GQ,SchedulerMode as su4}from"@dbos-inc/dbos-sdk";async function k51($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
1663
1663
  WHERE q.name LIKE $1
1664
1664
  AND NOT EXISTS (
1665
1665
  SELECT 1 FROM dbos.workflow_status w
@@ -3387,7 +3387,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
3387
3387
  ${J.join(`
3388
3388
  `)}`:X}function rM6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
3389
3389
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var ea$=200,uM6=12,cM6,mM6=300,BI0=3;var EW1=O(()=>{pZ();u$();NI0();cM6={aheadBy:0,behindBy:0,files:[]}});function aM6($){if(!$||$.includes(".."))return!1;return sM6.test($)}function Ze$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!aM6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function Qe$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var sM6;var Ye$=O(()=>{sM6=/^[\w./@-]+$/});function X$0($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function Je$($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new mw(iZ);let J=await VL($.storage,X,Y);if(J&&await TN($.storage,J)){let F=await sH($,J,{forceRefresh:!0}).catch((U)=>{throw new mw(U instanceof Error?U.message:iZ)});await Xe$($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new mw("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await $l({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:iZ;throw new mw(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await aH(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=NG$(F instanceof Error?F.message:String(F));throw U?new mw(N):F});await Xe$($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function Xe$($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=id($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await aL(K,eM6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var eM6=10485760,mw;var zW1=O(()=>{OG();YI0();la();D30();gs();pZ();mw=class mw extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function ZI6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!$I6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Xx($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(YI6)])}async function JI6($,Z){let Q=$.var.studioContext,Y=GF(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=Bf(G?.metadata?.runtime);if(W)return W;let K=ez0(Z.virtualMcpMetadata),H=K==="cms"?await eG1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)ca(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function GI6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await iY($.var.studioContext)}catch{return null}}function Jx($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function rd($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=X$0(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=i(Y);return au(Y,J.id,X)}function PW1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=uJ$(Z);if(Y!==void 0)return $.json({error:Q},429,{...R5,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof z6)return $.json({error:Q},409,R5);let X=EG(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,R5)}return $.json({error:Q},502,R5)}async function Ke$($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function He$($){try{let Z=await rd($),Q=await DI0(Z,$.get("vmClaim").branch);return $.json(Q,200,R5)}catch(Z){return PW1($,Z)}}function J$0($,Z){let Y=(wI0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return wI0.set($,X),X.finally(()=>{if(wI0.get($)===X)wI0.delete($)}),Y}async function V7($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,R5);let Y=Q?.runner??Jx($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...R5}})}}let D=await B.text(),L=Q?.redactRepoDir?WI6(D):D,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...R5}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function WI6($){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 jI0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function KI6($){return Fe$.includes($)}var $I6,Ge$=524288,QI6=65536,YI6=1e4,We$=2000,XI6,wI0,R5,Fe$,Ue$=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",XI6),$.post("/:virtualMcpId/:branch/write",(Q)=>V7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Xx(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>V7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Xx(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>V7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Xx(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>V7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Xx(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>V7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Xx(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>V7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Xx(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>V7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Xx(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return V7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return V7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>V7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>V7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!KI6(Y))return Q.json({error:`step must be one of: ${Fe$.join(", ")}`},400);let X=Q.get("vmClaim"),J=await eG1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await GI6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,R5);if(Y==="start"){let G=i(Q.var.studioContext),W=_l(X.virtualMcpMetadata);try{await oz0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return V7(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return zB(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Fa$(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return He$(Q);return Z(Q)});let Z=(Q)=>V7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(We$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return He$(Q);return V7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(We$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await rd(Q),G=await OI0(J,Y.branch,X.base);return Q.json(G,200,R5)}catch(X){return PW1(Q,X)}return V7(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,R5);let Y=Jx(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return J$0(X,async()=>{try{await $W1(W,Y,X);let K=X$0(J,G);if(K)await Je$(W,Y,X,K)}catch(K){if(K instanceof mw)return Q.json({error:K.message},403,R5);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,R5)}return V7(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return J$0(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,R5);try{let G=await rd(Q);return await $e$(G,Y.branch,J),Q.json({ok:!0},200,R5)}catch(G){let W=EG(G)===409||G instanceof z6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,R5)}});return J$0(Y.claimName,()=>V7(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return J$0(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await rd(Q),H=W.base??await K.getDefaultBranch();return await LI0(K,Y.branch,H),Q.json({ok:!0},200,R5)}catch(W){return PW1(Q,W)}});let X=Jx(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return J$0(J,async()=>{try{await $W1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,R5)}return V7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",l5({maxSize:Ge$,onError:(Q)=>Q.json({error:"Payload too large"},413,R5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Jx(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=YW1(F)&&N?[F,U]:X?await Promise.all([jI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),jI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await rd(Q);return Promise.all([DI0(w,Y.branch),OI0(w,Y.branch)])})();await kW(K,i(K).id,"suggesting a commit message");let L=await Oa$(K,B,D);return Q.json(L,200,R5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return Q.json({error:F},502,R5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",l5({maxSize:Ge$,onError:(Q)=>Q.json({error:"Payload too large"},413,R5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Jx(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=YW1(F)&&N?[F,U]:X?await Promise.all([jI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),jI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await rd(Q);return Promise.all([DI0(w,Y.branch),OI0(w,Y.branch)])})();await kW(K,i(K).id,"judging whether a change needs review");let L=await wa$(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,R5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return Q.json({error:F},502,R5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=Jx(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return Ke$(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",l5({maxSize:QI6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=Jx(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=Ze$(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=Qe$(J,W.resolveType);return Ke$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Ne$=O(()=>{y$();_K();md();aG1();ya();Wa$();RG();vl();Ka$();WK();jH();Ha$();Ua$();c$1();ha();GW1();ja$();pZ();d6();EW1();Ye$();zW1();$I6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;XI6=QI0(async($,Z)=>{let Q=$.var.studioContext;try{p(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=c0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=i(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{ZI6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=Ha({orgId:X.id,virtualMcpId:J,branch:G}),H=await z11(Q,G),F=P11(H,Y),U=Ga$({userId:F,projectRef:K}),N=W.metadata??null,B=await JI6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let D;try{D=await iY(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});wI0=new Map;R5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Fe$=["clone","install","start"]});function Be$($,Z,Q){let Y=AW1.get($);if(!Y)Y={pending:null,running:!1},AW1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)FI6($,Y);return J}async function FI6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await UI6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)AW1.delete($)}}async function UI6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await od(Z,Q),W=await Z.listDecofileEntries(G,Y),K=LW1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let D=wW1(K,N),L=`${JSON.stringify(B,null,2)}
3390
- `;await oa$(Z.repo,L);let w=D[0]??`${UI0(Y)}/${HW1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of wW1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await ra$(Z,F.values(),X),{decofile:B,skipped:D}=e10(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:nW(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:NI6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof z6)||J>=HI6-1)throw N;await P$(C7(2000,200,J,2,0.5))}}}function NI6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return n01(Y,$.deps.coAuthor)}var HI6=3,AW1;var De$=O(()=>{lE0();JI0();X6();u$();pZ();NI0();AW1=new Map});import{createHmac as Oe$,randomBytes as BI6,timingSafeEqual as DI6}from"crypto";function Le$(){if(EI0)return EI0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return EI0=$?Buffer.from($):BI6(32),EI0}function TW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+OI6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Oe$("sha256",Le$()).update(Y).digest("base64url");return`${Y}.${X}`}function we$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Oe$("sha256",Le$()).update(Y).digest("base64url"));if(X.length!==J.length||!DI6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var OI6=21600000,EI0=null;var je$=O(()=>{o1()});import{z as sd}from"zod";function wI6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&LI6.test($)}function Te$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function G$0($){let Z=$.get("decofileScope");return au($.var.studioContext,Z.organizationId,Z.githubRepo)}function W$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof z6)return $.json({error:Q},409);let Y=EG(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function Re$(){let $=new e0;return $.use("/:virtualMcpId/:branch",Ae$),$.use("/:virtualMcpId/:branch/*",Ae$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await G$0(Z),X=await sa$(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(X.decofile,200,{...J,"content-type":"application/json"});let G=TW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(Te$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return W$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await G$0(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return W$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",EI6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=zI6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{XI0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(KW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await G$0(Z),W=await Be$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:id(Y)},J),K=TW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:Te$(Z)})}catch(G){return W$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await G$0(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(EG(W)!==409)throw W;await LI0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(EG(G)===409)return Z.json({error:"merge-conflict"},409);if(EG(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return W$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await G$0(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(EG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return W$0(Z,Y)}}),$}var LI6,Ee$=500,ze$=1048576,Pe$=1024,jI6=8388608,EI6,zI6,Ae$;var qe$=O(()=>{d$1();JI0();y$();_K();aG1();YI0();zW1();pZ();De$();je$();EW1();NI0();jH();LI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;EI6=l5({maxSize:jI6,onError:($)=>$.json({error:"Payload too large"},413)}),zI6=sd.object({set:sd.record(sd.string(),sd.unknown()).optional(),delete:sd.array(sd.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Ee$,{message:`Patch cannot touch more than ${Ee$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=ze$),{message:`Each block must be at most ${ze$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Pe$),{message:`Each block key must be at most ${Pe$} characters`}),Ae$=QI0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!wI6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!we$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await s3(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!az0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=X$0(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var Me$=($)=>{let Z=new e0;if(Z.use("*",Ad),Z.use("*",Zt$),Z.route("/",NM0()),Z.route("/",yt$()),Z.route("/",Tt$()),Z.route("/",ns$()),Z.route("/",gs$()),Z.route("/",ms$()),Z.route("/",us$()),Z.route("/",eM0()),Z.route("/tools",$a$()),Z.route("/",ss$()),Z.route("/",Ls$({kvStorage:$.kvStorage})),Z.route("/",Ds$()),Z.route("/fs",ks$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ue$()),Z.route("/decofile",Re$()),Z.route("/",bs$()),Z.route("/",Cs$()),Z.route("/deco-sites",DM0()),Z.route("/hosting",Nt$()),Z.route("/monitor",Et$()),Z.route("/sso",WM0()),Z.route("/",$I0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Wt$()),$.mountDevAssets)Z.route("/dev-assets",jM0({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("/",Hi$()),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",vs$()),Z.route("/mcp",Z20()),Z.route("/mcp/self",rM0()),Z.route("/mcp",X20()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ie$=O(()=>{y$();Qt$();rq0();Kt$();E31();Bt$();zt$();EM0();pb();D31();R31();Os$();ws$();Ss$();_s$();ye();K31();J20();dG1();fs$();xs$();hs$();ls$();pG1();ts$();as$();nG1();Za$();tG1();Q20();Ne$();qe$()});function PI6($){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 AI6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ve$=()=>{let $=new e0;return $.use("*",AI6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await GJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:PI6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var ke$=O(()=>{y$();o1();sR0()});import{z as V1}from"zod";function pF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function _I6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function vI6($,Z,Q){try{return JSON.parse($)}catch{throw new _e$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function fI6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:vI6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function bI6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?SJ(Q.function.parameters):SJ({type:"object",properties:{}});return[Q.function.name,h1({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function xI6($){if(!$)return;return{openai:{response_format:$}}}function yI6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Se$($,Z,Q,Y,X,J){let G={model:$,messages:Z,tools:Q,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function Ce$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var TI6=256,RI6,qI6,MI6,II6,VI6,kI6,SI6,CI6,_e$,ve$,fe$;var be$=O(()=>{b4();y$();md();EK();RI6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),qI6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),MI6=V1.discriminatedUnion("role",[V1.object({role:V1.literal("system"),content:V1.string(),name:V1.string().optional()}),V1.object({role:V1.literal("user"),content:V1.union([V1.string(),V1.array(V1.union([V1.object({type:V1.literal("text"),text:V1.string()}),V1.object({type:V1.literal("image_url"),image_url:V1.object({url:V1.string(),detail:V1.string().optional()})})]))]),name:V1.string().optional()}),V1.object({role:V1.literal("assistant"),content:V1.string().nullable().optional(),name:V1.string().optional(),tool_calls:V1.array(qI6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),II6=V1.object({type:V1.literal("text")}),VI6=V1.object({type:V1.literal("json_object")}),kI6=V1.object({type:V1.literal("json_schema"),json_schema:V1.object({name:V1.string(),description:V1.string().optional(),schema:V1.record(V1.string(),V1.unknown()),strict:V1.boolean().optional()})}),SI6=V1.union([II6,VI6,kI6]),CI6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(MI6),stream:V1.boolean().optional().default(!1),temperature:V1.number().min(0).max(2).optional(),max_tokens:V1.number().positive().optional(),top_p:V1.number().min(0).max(1).optional(),frequency_penalty:V1.number().min(-2).max(2).optional(),presence_penalty:V1.number().min(-2).max(2).optional(),stop:V1.union([V1.string(),V1.array(V1.string())]).optional(),tools:V1.array(RI6).optional(),tool_choice:V1.union([V1.literal("auto"),V1.literal("none"),V1.literal("required"),V1.object({type:V1.literal("function"),function:V1.object({name:V1.string()})})]).optional(),response_format:SI6.optional(),user:V1.string().optional()});_e$=class _e$ extends Error{constructor($){super($);this.name="MessageConversionError"}};ve$=new e0;ve$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(pF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(pF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(pF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=CI6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(pF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=_I6(J.model);if(!G)return $.json(pF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>$E(E.providerId));if(!j)return $.json(pF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(pF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=fI6(J.messages),N=J.tools?bI6(J.tools):void 0,B=xI6(J.response_format),D=yI6(),L=Math.floor(Date.now()/1000);if(J.stream)return zB($,async(w)=>{let j=Se$(F,U,N,J,B,$.req.raw.signal);try{let E=oL(j),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of E.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=TI6)await q()}else if(k.type==="tool-call"){await q();let M=P++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:Ce$(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 q(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Se$(F,U,N,J,B,$.req.raw.signal),j=await nL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:Ce$(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(pF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(pF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(pF(X.message,"server_error"),500)}});fe$=ve$});function gI6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function xe$(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!mZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.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","=",Y).execute(),W=[];for(let H of G){if(!H.slug||r5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(qJ0(U)!==J)continue;if(!gI6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var ye$=O(()=>{y$();LG()});var he$;var ge$=O(()=>{he$={name:"decocms",version:"4.372.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function lI6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??uI6}}var ue$,uI6="https://ph.studio.decocms.com",le$;var ce$=O(()=>{y$();Nr();nf();k5();o1();tJ1();ge$();ue$=new e0;ue$.get("/",($)=>{let Z={version:he$.version,theme:E5$(),...iW().logo&&{logo:iW().logo},...iN()&&{internalUrl:$h1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:Qn$(),posthog:lI6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});le$=ue$});function ad($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function RW1($){return(ad($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function me$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ad($))}&sz=${Z}`}function de$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function ie$($){let{brand:Z,domain:Q,score:Y,verdict:X}=$,J=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=X?.trim()?de$(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):de$(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var Gx,cI6,dI6,mI6,iI6,pe$;var ne$=O(()=>{Gx=m0.enum(["good","bad","neutral"]),cI6=m0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},m0.object({kind:m0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:m0.coerce.string().optional(),tone:Gx.optional(),muted:m0.boolean().optional(),delta:m0.coerce.string().optional(),deltaDir:m0.enum(["up","down","neutral"]).optional(),points:m0.array(m0.coerce.number()).optional(),label:m0.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 $})),dI6=m0.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},m0.array(cI6)),mI6={key:m0.coerce.string(),title:m0.coerce.string(),eyebrow:m0.coerce.string().optional(),headline:m0.coerce.string(),annotation:m0.coerce.string().optional(),methodology:m0.coerce.string().optional(),sources:m0.array(m0.object({name:m0.coerce.string(),logoUrl:m0.coerce.string()})).optional()},iI6=m0.discriminatedUnion("template",[m0.object({template:m0.literal("cover"),score:m0.object({value:m0.coerce.number(),max:m0.coerce.number().optional(),grade:m0.coerce.string().optional(),label:m0.coerce.string().optional()}).optional(),brandImage:m0.coerce.string().optional(),screenshot:m0.coerce.string().optional(),mobileScreenshot:m0.coerce.string().optional()}),m0.object({template:m0.literal("cta"),ctaUrl:m0.coerce.string().optional(),ctaLabel:m0.coerce.string().optional(),bullets:m0.array(m0.coerce.string()).optional()}),m0.object({template:m0.literal("series"),points:m0.array(m0.coerce.number()).min(2),xLabels:m0.array(m0.coerce.string()).min(1),unit:m0.coerce.string().optional(),callout:m0.object({index:m0.coerce.number(),value:m0.coerce.string(),tone:Gx.optional()})}),m0.object({template:m0.literal("threshold"),value:m0.coerce.string().default(""),metricLabel:m0.coerce.string().optional(),ratio:m0.coerce.number(),thresholdRatio:m0.coerce.number().optional(),thresholdLabel:m0.coerce.string().default(""),tone:Gx.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:Gx.optional()})).min(1)}),m0.object({template:m0.literal("bars"),items:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),ratio:m0.coerce.number(),tone:Gx.optional()})).min(1)}),m0.object({template:m0.literal("gauges"),gauges:m0.array(m0.object({label:m0.coerce.string(),value:m0.coerce.string(),status:m0.enum(["good","warn","bad"]).catch("warn"),caption:m0.coerce.string().optional(),ratio:m0.coerce.number().optional()})).min(1)}),m0.object({template:m0.literal("checklist"),checks:m0.array(m0.object({label:m0.coerce.string(),status:m0.enum(["pass","fail","warn"]).catch("fail"),value:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("table"),columns:m0.array(m0.object({label:m0.coerce.string(),align:m0.enum(["left","right"]).optional()})).min(1),rows:m0.array(dI6).min(1),highlightRow:m0.coerce.number().optional()}),m0.object({template:m0.literal("products"),products:m0.array(m0.object({name:m0.coerce.string(),price:m0.coerce.string().optional(),image:m0.coerce.string().optional(),url:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("list"),entries:m0.array(m0.object({label:m0.coerce.string(),severity:m0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:m0.coerce.number().optional()}),m0.object({template:m0.literal("keywords"),volumeLabel:m0.coerce.string().optional(),keywords:m0.array(m0.object({term:m0.coerce.string(),volume:m0.coerce.string(),position:m0.coerce.number().catch(0)})).min(1)}),m0.object({template:m0.literal("competitor"),metricLabel:m0.coerce.string().optional(),competitors:m0.array(m0.object({name:m0.coerce.string(),value:m0.coerce.string(),tone:Gx.optional(),isYou:m0.boolean().optional()})).min(1)}),m0.object({template:m0.literal("scorecard"),rivalLabel:m0.coerce.string().optional(),dimensions:m0.array(m0.object({label:m0.coerce.string(),you:m0.coerce.string(),rival:m0.coerce.string().optional(),rivalName:m0.coerce.string().optional(),tone:Gx.optional()})).min(1)})]),pe$=m0.object({...mI6,template:iI6})});function zI0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=pe$.safeParse(X.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:X.section_type,position:X.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((X)=>X!==null),Y=Q.filter((X)=>X.template.template!=="cover"&&X.template.template!=="cta").map((X)=>({key:X.key,title:X.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Y},slides:Q},drops:Z}}var qW1=O(()=>{ne$()});import{join as te$}from"path";async function nI6($){try{let Z=await fetch(`${bH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(pI6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=zI0(Q);if(!Y.slides.length)return null;let X=Y.slides.find((W)=>W.template.template==="cover"),J=X?.template,G=J&&J.template==="cover"?J:void 0;return{brand:Y.meta.brand?.trim()||RW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function E3($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function tI6($,Z){let Q=ad($),Y=Z?.brand?.trim()||RW1(Q),X=me$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=ie$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${E3(W)}</title>`,`<meta name="description" content="${E3(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="${E3(W)}" />`,`<meta property="og:description" content="${E3(K)}" />`,`<meta property="og:url" content="${E3(G)}" />`,`<meta property="og:image" content="${E3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${E3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${E3(W)}" />`,`<meta name="twitter:description" content="${E3(K)}" />`,`<meta name="twitter:image" content="${E3(H)}" />`,`<meta name="twitter:image:alt" content="${E3(F)}" />`,`<link rel="canonical" href="${E3(G)}" />`,`<link rel="icon" href="${E3(X)}" sizes="any" />`].join(`
3390
+ `;await oa$(Z.repo,L);let w=D[0]??`${UI0(Y)}/${HW1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of wW1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await ra$(Z,F.values(),X),{decofile:B,skipped:D}=e10(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:nW(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:NI6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof z6)||J>=HI6-1)throw N;await P$(C7(2000,200,J,2,0.5))}}}function NI6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return n01(Y,$.deps.coAuthor)}var HI6=3,AW1;var De$=O(()=>{lE0();JI0();X6();u$();pZ();NI0();AW1=new Map});import{createHmac as Oe$,randomBytes as BI6,timingSafeEqual as DI6}from"crypto";function Le$(){if(EI0)return EI0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return EI0=$?Buffer.from($):BI6(32),EI0}function TW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+OI6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Oe$("sha256",Le$()).update(Y).digest("base64url");return`${Y}.${X}`}function we$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Oe$("sha256",Le$()).update(Y).digest("base64url"));if(X.length!==J.length||!DI6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var OI6=21600000,EI0=null;var je$=O(()=>{o1()});import{z as sd}from"zod";function wI6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&LI6.test($)}function Te$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function G$0($){let Z=$.get("decofileScope");return au($.var.studioContext,Z.organizationId,Z.githubRepo)}function W$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof z6)return $.json({error:Q},409);let Y=EG(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function Re$(){let $=new e0;return $.use("/:virtualMcpId/:branch",Ae$),$.use("/:virtualMcpId/:branch/*",Ae$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await G$0(Z),X=await sa$(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(X.decofile,200,{...J,"content-type":"application/json"});let G=TW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(Te$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return W$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await G$0(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return W$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",EI6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=zI6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{XI0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(KW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await G$0(Z),W=await Be$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:id(Y)},J),K=TW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:Te$(Z)})}catch(G){return W$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await G$0(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(EG(W)!==409)throw W;await LI0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(EG(G)===409)return Z.json({error:"merge-conflict"},409);if(EG(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return W$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await G$0(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(EG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return W$0(Z,Y)}}),$}var LI6,Ee$=500,ze$=1048576,Pe$=1024,jI6=8388608,EI6,zI6,Ae$;var qe$=O(()=>{d$1();JI0();y$();_K();aG1();YI0();zW1();pZ();De$();je$();EW1();NI0();jH();LI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;EI6=l5({maxSize:jI6,onError:($)=>$.json({error:"Payload too large"},413)}),zI6=sd.object({set:sd.record(sd.string(),sd.unknown()).optional(),delete:sd.array(sd.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Ee$,{message:`Patch cannot touch more than ${Ee$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=ze$),{message:`Each block must be at most ${ze$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Pe$),{message:`Each block key must be at most ${Pe$} characters`}),Ae$=QI0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!wI6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!we$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await s3(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!az0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=X$0(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var Me$=($)=>{let Z=new e0;if(Z.use("*",Ad),Z.use("*",Zt$),Z.route("/",NM0()),Z.route("/",yt$()),Z.route("/",Tt$()),Z.route("/",ns$()),Z.route("/",gs$()),Z.route("/",ms$()),Z.route("/",us$()),Z.route("/",eM0()),Z.route("/tools",$a$()),Z.route("/",ss$()),Z.route("/",Ls$({kvStorage:$.kvStorage})),Z.route("/",Ds$()),Z.route("/fs",ks$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ue$()),Z.route("/decofile",Re$()),Z.route("/",bs$()),Z.route("/",Cs$()),Z.route("/deco-sites",DM0()),Z.route("/hosting",Nt$()),Z.route("/monitor",Et$()),Z.route("/sso",WM0()),Z.route("/",$I0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Wt$()),$.mountDevAssets)Z.route("/dev-assets",jM0({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("/",Hi$()),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",vs$()),Z.route("/mcp",Z20()),Z.route("/mcp/self",rM0()),Z.route("/mcp",X20()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ie$=O(()=>{y$();Qt$();rq0();Kt$();E31();Bt$();zt$();EM0();pb();D31();R31();Os$();ws$();Ss$();_s$();ye();K31();J20();dG1();fs$();xs$();hs$();ls$();pG1();ts$();as$();nG1();Za$();tG1();Q20();Ne$();qe$()});function PI6($){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 AI6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ve$=()=>{let $=new e0;return $.use("*",AI6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await GJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:PI6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var ke$=O(()=>{y$();o1();sR0()});import{z as V1}from"zod";function pF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function _I6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function vI6($,Z,Q){try{return JSON.parse($)}catch{throw new _e$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function fI6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:vI6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function bI6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?SJ(Q.function.parameters):SJ({type:"object",properties:{}});return[Q.function.name,h1({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function xI6($){if(!$)return;return{openai:{response_format:$}}}function yI6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Se$($,Z,Q,Y,X,J){let G={model:$,messages:Z,tools:Q,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function Ce$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var TI6=256,RI6,qI6,MI6,II6,VI6,kI6,SI6,CI6,_e$,ve$,fe$;var be$=O(()=>{b4();y$();md();EK();RI6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),qI6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),MI6=V1.discriminatedUnion("role",[V1.object({role:V1.literal("system"),content:V1.string(),name:V1.string().optional()}),V1.object({role:V1.literal("user"),content:V1.union([V1.string(),V1.array(V1.union([V1.object({type:V1.literal("text"),text:V1.string()}),V1.object({type:V1.literal("image_url"),image_url:V1.object({url:V1.string(),detail:V1.string().optional()})})]))]),name:V1.string().optional()}),V1.object({role:V1.literal("assistant"),content:V1.string().nullable().optional(),name:V1.string().optional(),tool_calls:V1.array(qI6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),II6=V1.object({type:V1.literal("text")}),VI6=V1.object({type:V1.literal("json_object")}),kI6=V1.object({type:V1.literal("json_schema"),json_schema:V1.object({name:V1.string(),description:V1.string().optional(),schema:V1.record(V1.string(),V1.unknown()),strict:V1.boolean().optional()})}),SI6=V1.union([II6,VI6,kI6]),CI6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(MI6),stream:V1.boolean().optional().default(!1),temperature:V1.number().min(0).max(2).optional(),max_tokens:V1.number().positive().optional(),top_p:V1.number().min(0).max(1).optional(),frequency_penalty:V1.number().min(-2).max(2).optional(),presence_penalty:V1.number().min(-2).max(2).optional(),stop:V1.union([V1.string(),V1.array(V1.string())]).optional(),tools:V1.array(RI6).optional(),tool_choice:V1.union([V1.literal("auto"),V1.literal("none"),V1.literal("required"),V1.object({type:V1.literal("function"),function:V1.object({name:V1.string()})})]).optional(),response_format:SI6.optional(),user:V1.string().optional()});_e$=class _e$ extends Error{constructor($){super($);this.name="MessageConversionError"}};ve$=new e0;ve$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(pF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(pF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(pF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=CI6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(pF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=_I6(J.model);if(!G)return $.json(pF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>$E(E.providerId));if(!j)return $.json(pF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(pF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=fI6(J.messages),N=J.tools?bI6(J.tools):void 0,B=xI6(J.response_format),D=yI6(),L=Math.floor(Date.now()/1000);if(J.stream)return zB($,async(w)=>{let j=Se$(F,U,N,J,B,$.req.raw.signal);try{let E=oL(j),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of E.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=TI6)await q()}else if(k.type==="tool-call"){await q();let M=P++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:Ce$(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 q(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Se$(F,U,N,J,B,$.req.raw.signal),j=await nL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:Ce$(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(pF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(pF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(pF(X.message,"server_error"),500)}});fe$=ve$});function gI6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function xe$(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!mZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.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","=",Y).execute(),W=[];for(let H of G){if(!H.slug||r5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(qJ0(U)!==J)continue;if(!gI6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var ye$=O(()=>{y$();LG()});var he$;var ge$=O(()=>{he$={name:"decocms",version:"4.373.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function lI6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??uI6}}var ue$,uI6="https://ph.studio.decocms.com",le$;var ce$=O(()=>{y$();Nr();nf();k5();o1();tJ1();ge$();ue$=new e0;ue$.get("/",($)=>{let Z={version:he$.version,theme:E5$(),...iW().logo&&{logo:iW().logo},...iN()&&{internalUrl:$h1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:Qn$(),posthog:lI6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});le$=ue$});function ad($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function RW1($){return(ad($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function me$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ad($))}&sz=${Z}`}function de$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function ie$($){let{brand:Z,domain:Q,score:Y,verdict:X}=$,J=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=X?.trim()?de$(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):de$(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var Gx,cI6,dI6,mI6,iI6,pe$;var ne$=O(()=>{Gx=m0.enum(["good","bad","neutral"]),cI6=m0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},m0.object({kind:m0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:m0.coerce.string().optional(),tone:Gx.optional(),muted:m0.boolean().optional(),delta:m0.coerce.string().optional(),deltaDir:m0.enum(["up","down","neutral"]).optional(),points:m0.array(m0.coerce.number()).optional(),label:m0.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 $})),dI6=m0.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},m0.array(cI6)),mI6={key:m0.coerce.string(),title:m0.coerce.string(),eyebrow:m0.coerce.string().optional(),headline:m0.coerce.string(),annotation:m0.coerce.string().optional(),methodology:m0.coerce.string().optional(),sources:m0.array(m0.object({name:m0.coerce.string(),logoUrl:m0.coerce.string()})).optional()},iI6=m0.discriminatedUnion("template",[m0.object({template:m0.literal("cover"),score:m0.object({value:m0.coerce.number(),max:m0.coerce.number().optional(),grade:m0.coerce.string().optional(),label:m0.coerce.string().optional()}).optional(),brandImage:m0.coerce.string().optional(),screenshot:m0.coerce.string().optional(),mobileScreenshot:m0.coerce.string().optional()}),m0.object({template:m0.literal("cta"),ctaUrl:m0.coerce.string().optional(),ctaLabel:m0.coerce.string().optional(),bullets:m0.array(m0.coerce.string()).optional()}),m0.object({template:m0.literal("series"),points:m0.array(m0.coerce.number()).min(2),xLabels:m0.array(m0.coerce.string()).min(1),unit:m0.coerce.string().optional(),callout:m0.object({index:m0.coerce.number(),value:m0.coerce.string(),tone:Gx.optional()})}),m0.object({template:m0.literal("threshold"),value:m0.coerce.string().default(""),metricLabel:m0.coerce.string().optional(),ratio:m0.coerce.number(),thresholdRatio:m0.coerce.number().optional(),thresholdLabel:m0.coerce.string().default(""),tone:Gx.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:Gx.optional()})).min(1)}),m0.object({template:m0.literal("bars"),items:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),ratio:m0.coerce.number(),tone:Gx.optional()})).min(1)}),m0.object({template:m0.literal("gauges"),gauges:m0.array(m0.object({label:m0.coerce.string(),value:m0.coerce.string(),status:m0.enum(["good","warn","bad"]).catch("warn"),caption:m0.coerce.string().optional(),ratio:m0.coerce.number().optional()})).min(1)}),m0.object({template:m0.literal("checklist"),checks:m0.array(m0.object({label:m0.coerce.string(),status:m0.enum(["pass","fail","warn"]).catch("fail"),value:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("table"),columns:m0.array(m0.object({label:m0.coerce.string(),align:m0.enum(["left","right"]).optional()})).min(1),rows:m0.array(dI6).min(1),highlightRow:m0.coerce.number().optional()}),m0.object({template:m0.literal("products"),products:m0.array(m0.object({name:m0.coerce.string(),price:m0.coerce.string().optional(),image:m0.coerce.string().optional(),url:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("list"),entries:m0.array(m0.object({label:m0.coerce.string(),severity:m0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:m0.coerce.number().optional()}),m0.object({template:m0.literal("keywords"),volumeLabel:m0.coerce.string().optional(),keywords:m0.array(m0.object({term:m0.coerce.string(),volume:m0.coerce.string(),position:m0.coerce.number().catch(0)})).min(1)}),m0.object({template:m0.literal("competitor"),metricLabel:m0.coerce.string().optional(),competitors:m0.array(m0.object({name:m0.coerce.string(),value:m0.coerce.string(),tone:Gx.optional(),isYou:m0.boolean().optional()})).min(1)}),m0.object({template:m0.literal("scorecard"),rivalLabel:m0.coerce.string().optional(),dimensions:m0.array(m0.object({label:m0.coerce.string(),you:m0.coerce.string(),rival:m0.coerce.string().optional(),rivalName:m0.coerce.string().optional(),tone:Gx.optional()})).min(1)})]),pe$=m0.object({...mI6,template:iI6})});function zI0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=pe$.safeParse(X.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:X.section_type,position:X.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((X)=>X!==null),Y=Q.filter((X)=>X.template.template!=="cover"&&X.template.template!=="cta").map((X)=>({key:X.key,title:X.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Y},slides:Q},drops:Z}}var qW1=O(()=>{ne$()});import{join as te$}from"path";async function nI6($){try{let Z=await fetch(`${bH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(pI6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=zI0(Q);if(!Y.slides.length)return null;let X=Y.slides.find((W)=>W.template.template==="cover"),J=X?.template,G=J&&J.template==="cover"?J:void 0;return{brand:Y.meta.brand?.trim()||RW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function E3($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function tI6($,Z){let Q=ad($),Y=Z?.brand?.trim()||RW1(Q),X=me$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=ie$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${E3(W)}</title>`,`<meta name="description" content="${E3(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="${E3(W)}" />`,`<meta property="og:description" content="${E3(K)}" />`,`<meta property="og:url" content="${E3(G)}" />`,`<meta property="og:image" content="${E3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${E3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${E3(W)}" />`,`<meta name="twitter:description" content="${E3(K)}" />`,`<meta name="twitter:image" content="${E3(H)}" />`,`<meta name="twitter:image:alt" content="${E3(F)}" />`,`<link rel="canonical" href="${E3(G)}" />`,`<link rel="icon" href="${E3(X)}" sizes="any" />`].join(`
3391
3391
  `)}function oI6($,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}
3392
3392
  </head>`)}function oe$($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=ad(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(te$($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${bH({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(rI6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?te$($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await nI6(ad(Y)),K=tI6(Y,W);return Q.html(oI6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var pI6=2500,rI6=1e4;var re$=O(()=>{y$();qW1();lz();o1()});function K$0($,Z){return fetch(`${bH({})}${$}`,Z)}async function sI6($,Z,Q){let Y=new URLSearchParams;if(Z)Y.set("pw",Z);if(Q)Y.set("lang",Q);let X=Y.toString()?`?${Y.toString()}`:"",J=await K$0(`/api/v2/public/diagnostics/${encodeURIComponent($)}${X}`,{headers:{Accept:"application/json"}});if(J.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!J.ok)throw Error(`report read HTTP ${J.status}`);let G=await J.json(),{deck:W,drops:K}=zI0(G);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:G.scanned_at,drops:K}}var aI6,AB,se$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},ae$;var ee$=O(()=>{y$();oJ();lz();qW1();aI6=new Set(["complete","errored","terminated","unknown"]),AB=new e0;AB.use("*",async($,Z)=>{let Q=await W8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});AB.use("/link-token/*",se$);AB.use("/suggest",se$);AB.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.get("reportUser"),Y=$.req.query("key")?.trim()||void 0,X=$.req.query("lang")?.trim()||void 0;try{let J=await sI6(Z,Y,X);if($.header("Cache-Control","private, no-store"),Q||!J.deck)return $.json(J);return $.json({...J,deck:{...J.deck,slides:J.deck.slides.slice(0,1)},truncated:J.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});AB.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Y=typeof Q.domain==="string"?Q.domain.trim():"";if(!Y)return $.json({error:"domain is required"},400);let X=Z?.email,J=typeof Q.distinctId==="string"&&Q.distinctId.trim()&&Q.distinctId.length<=200?Q.distinctId.trim():void 0;try{let G=await K$0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${uz({})}`},body:JSON.stringify({url:Y,...X?{email:X}:{},distinct_id:J})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.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)}});AB.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await K$0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${uz({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:aI6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});AB.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await K$0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});AB.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await K$0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});ae$=AB});var eI6=1048576,MW1;var $08=O(()=>{y$();_K();o1();vJ1();MW1=new e0;MW1.post("/webhook",l5({maxSize:eI6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=O0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!Dp$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=Op$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await Lp$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as $V6}from"crypto";function YV6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return $V6(Buffer.from(X),Buffer.from(Y))}function XV6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function Z08($){let Z=new e0;return Z.post("/webhook",l5({maxSize:ZV6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!YV6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!QV6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});let N=(await w11())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=XV6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await JV6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function JV6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await fA$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var ZV6=5242880,QV6;var Q08=O(()=>{y$();_K();WK();rZ();QV6=new Set(["check_suite","issue_comment"])});function Y08($){let Z=new FB($.db,new AY($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=$P$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new K3(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var X08=O(()=>{y$();BD();O81();Pf()});function J08($){let Z=new FB($.db,new AY($.encryptionKey));async function Q(X,J){let G=ih$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await kG($.db,W.organizationId);if(!K)return;if(await eR0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new e0;return Y.post("/webhook/:secret",l5({maxSize:GV6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var GV6=1048576;var G08=O(()=>{y$();_K();BD();$q0();Vf()});import{DBOS as PI0,SchedulerMode as WV6}from"@dbos-inc/dbos-sdk";function K08($){VW1=$}function H08(){if(!VW1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return VW1}function F08(){let $=H08();return new FB($.db,new AY($.encryptionKey))}async function FV6($,Z){try{let Q=await F08().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await kG(H08().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new K3(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${W08}m"`,K=0,H;for(let F=0;F<HV6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=ph$(N,N.changelog?.histories??[],Z);for(let D of B)if(await eR0(Y,Q,D)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function UV6($,Z){let Q=new Date($.getTime()-W08*60000),Y=await PI0.runStep(()=>F08().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>PI0.runStep(()=>FV6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function U08(){if(IW1)return;IW1=PI0.registerWorkflow(UV6,{name:"jiraTriggerSweepWorkflow"}),PI0.registerScheduled(IW1,{name:"jiraTriggerSweepWorkflow",crontab:KV6,mode:WV6.ExactlyOncePerIntervalWhenActive})}var KV6="7-59/10 * * * *",W08=15,HV6=5,VW1=null,IW1=null;var N08=O(()=>{BD();Vf();Pf();$q0()});function B08($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var D08,NV6,BV6,O08;var L08=O(()=>{y$();mW();rl();oz();D08=new e0,NV6=["range","if-none-match","if-modified-since"],BV6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];D08.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Pd($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new J$(401,{message:"Authentication required"})}if(!Q)throw new J$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new J$(400,{message:"Missing file key"});let X=await Le(Y,Z);if(!X)throw new J$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&_X()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new J$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return B08(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of NV6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new J$(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new J$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of BV6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),B08(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});O08=D08});var H$0=_((Wx)=>{var DV6=Wx&&Wx.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),OV6=Wx&&Wx.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))DV6(Z,$,Q)};Object.defineProperty(Wx,"__esModule",{value:!0});OV6(OJ(),Wx)});var E08=_((w08)=>{Object.defineProperty(w08,"__esModule",{value:!0});w08.version=void 0;w08.version="3.4.0"});var A08=_((nF)=>{var LV6=nF&&nF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(nF,"__esModule",{value:!0});nF.NodeTransport=nF.VERSION=void 0;nF.nodeResolveHost=AV6;var L5=H$0(),wV6=A0("net"),kW1=A0("tls"),jV6=A0("path"),z08=A0("fs"),EV6=LV6(A0("dns")),zV6=E08();nF.VERSION=zV6.version;var PV6="nats.js";class P08{socket;version;lang;yields=[];signal=(0,L5.deferred)();closedNotification=(0,L5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=PV6,this.version=nF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,L5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw L5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new L5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new L5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,L5.deferred)(),Q,Y=(0,wV6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,L5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=L5.DataBuffer.concat(...this.yields),X=(0,L5.extractProtocolMessage)(Y);if(X!=="")try{let J=L5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,L5.deferred)();try{if($=(0,jV6.resolve)($),!(0,z08.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,z08.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,L5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new L5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,L5.deferred)();try{let X=(0,kW1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new L5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,L5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new L5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,L5.deferred)();try{let Y=(0,kW1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new L5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}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,L5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,L5.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 kW1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,L5.render)($)}`);let Z=(0,L5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,L5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,L5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}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(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}nF.NodeTransport=P08;function AV6($){let Z=(0,L5.deferred)();return EV6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var I08=_((M08)=>{Object.defineProperty(M08,"__esModule",{value:!0});M08.connect=TV6;var T08=A08(),R08=H$0(),q08=H$0();function TV6($={}){if((0,q08.hasWsProtocol)($))return Promise.reject(q08.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,R08.setTransportFactory)({factory:()=>{return new T08.NodeTransport},dnsResolveFn:T08.nodeResolveHost}),R08.NatsConnectionImpl.connect($)}});var V08=_((TB)=>{var qV6=TB&&TB.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),MV6=TB&&TB.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))qV6(Z,$,Q)};Object.defineProperty(TB,"__esModule",{value:!0});TB.connect=void 0;var IV6=I08();Object.defineProperty(TB,"connect",{enumerable:!0,get:function(){return IV6.connect}});MV6(H$0(),TB)});function _08($){let Z=$?.connectFn??CV6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:SV6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let L=C7(kV6,VV6,D-1,2,0.5);await P$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?k08.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=C08.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function CV6($){return S08.connect($)}var k08,S08,C08,VV6=100,kV6=3000,SV6=3000;var v08=O(()=>{u$();k08=V(Tm(),1),S08=V(V08(),1),C08=V(YU(),1)});function SW1($,Z){return`${$}.${Z}`}class CW1{cache;constructor($){this.cache=Fd({ttlMs:$?.ttlMs??_V6,maxSize:$?.maxSize??vV6})}async get($,Z){return this.cache.get(SW1($,Z))??null}async set($,Z,Q){this.cache.set(SW1($,Z),Q)}async invalidate($,Z){this.cache.delete(SW1($,Z))}teardown(){this.cache.clear()}}var _V6=600000,vV6=5000;var f08=()=>{};function AI0($,Z){return`${$}:${Z}`}function _W1($){let Z=Fd({ttlMs:$?.ttlMs??fV6,maxSize:$?.maxSize??bV6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(b08,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(AI0(K,H))},set(K,H,F){Z.set(AI0(K,H),F)},invalidate(K,H){Z.delete(AI0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(b08),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(AI0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var b08="studio.ai-provider-keys.invalidate",fV6=30000,bV6=5000;var x08=()=>{};class vW1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.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 Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var y08=($)=>{let Z;return()=>Z??=$()},fW1,bW1;var g08=O(()=>{W6();fW1=y08(()=>Y$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),bW1=y08(()=>Y$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function cV6($=l08){return{name:zF,subjects:[`${B61}.>`],storage:bK.StorageType.File,max_age:gV6,max_bytes:uV6,max_msgs_per_subject:lV6,discard:bK.DiscardPolicy.Old,retention:bK.RetentionPolicy.Limits,duplicate_window:hV6,num_replicas:$}}class c08{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 h08($){let Z=u08.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function pV6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,yV6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function nV6($,Z){return $.info?.cluster?Z:1}function tV6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class xW1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Y,X)=>{let J=cV6(X);try{await Y.streams.info(zF),await Y.streams.update(zF,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(zF,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(zF),await Y.streams.add(J);else throw G}},Q=await N8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await bK.jetstreamManager($),X=nV6($,l08);try{await Z(Y,X)}catch(J){if(X<=1||!tV6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Gc});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=pV6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=LR$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=O61(H,{runId:Z}),N=performance.now()-F;fW1().record(N),bW1().add(1,{"org.id":Y??"unknown"}),iV6?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?h08(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),mV6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await N8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:h08(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Gc}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=O61(Z,{runId:$,dedup:Q});fW1().record(performance.now()-X),bW1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=OR$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?bK.DeliverPolicy.New:bK.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=Hw($),W;try{W=await N8(async()=>{return(await Y.consumers.get(zF,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Gc})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=VA0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(RA0()).pipeThrough(qA0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){D(),L.close();return}let E=j;if(E.kind==="done"){if(J){D(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(zF,{filter:Hw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var bK,u08,xV6=($)=>{let Z;return()=>Z??=$()},yV6,gV6=86400000000000,hV6=120000000000,uV6=4294967296,l08,lV6=500000,dV6,mV6,iV6;var d08=O(()=>{u$();L61();kA0();MA0();W6();g08();bK=V(YU(),1),u08=V(Tm(),1),yV6=xV6(()=>Y$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),l08=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);dV6=process.env.STREAM_ENCODE_TRACE==="1",mV6=process.env.DECOPILOT_STREAM_TRACE==="1";iV6=dV6?new c08:null});function TI0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,$H(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var m08=O(()=>{q8()});class yW1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function oV6($,Z){let Q=$.startsWith("thread:")?KK($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function i08($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await WF($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await wl($,{threadId:X,runBranch:G?.branch}),K=oV6(W,await rE0($,X)),H=await fs($,Q,ia0(J)).catch(()=>null);if(!H){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}for(let F of K){let U=await H.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:H.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await SG(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var p08=O(()=>{pZ();RG();rZ()});async function n08($,Z,Q){let Y=Z.organizationId;if(!rX(Z))return!1;if(!kf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=tH(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await y6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),r$(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var t08=O(()=>{A4();$Y();ml();OK();$9()});function Qk6($){return $ instanceof yY}function Yk6($,Z){return Z-$>=$k6}class gW1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??rV6;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??aV6,Q=this.options.itemIntervalMs??sV6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} 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()-H81),A41);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-Zk6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await E41(this.taskBoard,X,Y),await z41(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==T$.progress||G.assigneeId!==o$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await LK(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),Qk6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+eV6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==T$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),r$(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!Yk6(ON(Q,Z.reviewCycleStartedAt),Date.now()))return;await wF($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!rX(Y))return!1;let X=Y.assigneeId===o$,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await i08(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await pl(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 n08(G,Y,W))return!0;if(await Gq$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!O41(W))return!1;return await lP0(G,Y,{previewMatchesHead:L41(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await Jw($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var rV6=60000,sV6=300000,aV6=50,eV6=60000,$k6=900000,Zk6=120000;var o08=O(()=>{A4();Y41();p08();jF();Ie();OK();t08();$9();jG();T41();rZ();Ne();il()});import{readdir as Xk6,rm as RI0}from"fs/promises";import{join as qI0}from"path";async function MI0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Jk6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Kx($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await r08($,X,Z);else if(!X.startsWith(".")){let J=qI0($,X),G=await Kx(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await r08(J,K,Z)}if((await Kx(J)).length===0)await RI0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function r08($,Z,Q){let Y=0,X=qI0($,Z),J=await Kx(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=qI0(X,W),H=await Kx(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=qI0(K,U);await RI0(B,{recursive:!0,force:!0}),Y++}}if((await Kx(K)).length===0)await RI0(K,{recursive:!0,force:!0})}if((await Kx(X)).length===0)await RI0(X,{recursive:!0,force:!0});return Y}async function Kx($){try{return(await Xk6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Jk6=30;var hW1=()=>{};import{DBOS as uW1,SchedulerMode as Gk6}from"@dbos-inc/dbos-sdk";async function Kk6(){let $=[nG(),Hx(),rF()],Z=0;for(let Q of $)try{Z+=await MI0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function Hk6($,Z){await uW1.runStep(()=>Kk6(),{name:"monitoringRetention"})}function a08(){if(s08)return;s08=!0;let $=uW1.registerWorkflow(Hk6,{name:"monitoringRetentionWorkflow"});uW1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Wk6,mode:Gk6.ExactlyOncePerIntervalWhenActive})}var Wk6="23 4 * * *",s08=!1;var e08=O(()=>{R3();hW1()});function $18($){return async(Z,Q)=>{let Y=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","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await JQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await $P($.db,Z,Y.role);return X.boundAuth=qJ1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new QE(Q,void 0,X.boundAuth,Y.role,"self"),Xw(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var Z18=O(()=>{OW();mH()});function Fk6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Uk6(){return{services:Fk6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Bk6(){for(let $ of Nk6)$()}function Q18($){let Z=[...lW1.logs,$];lW1={...lW1,logs:Z.length>500?Z.slice(-500):Z},Bk6()}function cW1(){return Dk6}var lW1,Nk6,Dk6=!1;var dW1=O(()=>{lW1=Uk6(),Nk6=new Set});import{EventEmitter as Ok6}from"events";var mW1;var Y18=O(()=>{dW1();mW1=new Ok6;mW1.on("request",($)=>{Q18($)})});function X18(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=ed(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>ed(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${q5.tool}${B}${q5.dim}(${w})${q5.reset}`}else if(N.method)J=`${q5.dim}${ed(N.method)}${q5.reset}`}}catch{}}let W=ed(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${q5.mcp}${ed(F.slice(0,12))}\u2026${q5.reset}`}else if(X==="/mcp")W=`${q5.mcp}/mcp${q5.reset}`;else if(X==="/mcp/registry")W=`${q5.mcp}/mcp/registry${q5.reset}`;let K=wk6(Y),H=G?"\u25C0":"\u2190";if(!cW1())console.log(`${q5.dim}${H}${q5.reset} ${K}${Y}${q5.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Lk6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!cW1())console.log(`${q5.dim}${D}${q5.reset} ${K}${Y}${q5.reset} ${W}${J?` ${J}`:""} ${N}${U}${q5.reset} ${q5.duration}${B}${q5.reset}`);mW1.emit("request",{method:Y,path:ed(X),status:U,duration:F,timestamp:new Date})}}}var q5,Lk6=($)=>{if($>=500)return q5.serverError;if($>=400)return q5.clientError;if($>=300)return q5.redirect;return q5.ok},wk6=($)=>{return q5[$]||q5.reset},ed=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var J18=O(()=>{dW1();Y18();q5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as H18}from"crypto";import{mkdir as jk6,readdir as Ek6,rm as G18,stat as F18}from"fs/promises";import{join as pW1,relative as zk6}from"path";import{z as V$}from"zod";function N18($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return pW1(Pk6,Z)}function B18($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function iW1($,Z){let Q=N18($),Y=B18(Z);return pW1(Q,Y)}function Ak6($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return H18("sha256",X).update(J).digest("hex")}function K18($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=Ak6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${B18(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function D18($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${H18("md5","etag").update(Y).digest("hex")}"`}async function O18($,Z,Q,Y,X){try{let J=await Ek6($,{withFileTypes:!0});for(let G of J){let W=pW1($,G.name),H=zk6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await O18(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await F18(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:D18(W,F.mtime,F.size)})}catch{}}}}catch{}}function L18($,Z){let Y=i($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:V$.object({prefix:V$.string().optional(),maxKeys:V$.number().optional().default(1000),continuationToken:V$.string().optional(),delimiter:V$.string().optional()}),outputSchema:V$.object({objects:V$.array(V$.object({key:V$.string(),size:V$.number(),lastModified:V$.string(),etag:V$.string()})),nextContinuationToken:V$.string().optional(),isTruncated:V$.boolean(),commonPrefixes:V$.array(V$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=N18(Y);await jk6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await O18(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,L=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:V$.object({key:V$.string()}),outputSchema:V$.object({contentType:V$.string().optional(),contentLength:V$.number(),lastModified:V$.string(),etag:V$.string(),metadata:V$.record(V$.string(),V$.string()).optional()}),handler:async(X)=>{let J=X,G=iW1(Y,J.key),W=await F18(G);return{contentType:A31(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:D18(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:V$.object({key:V$.string(),expiresIn:V$.number().optional()}),outputSchema:V$.object({url:V$.string(),expiresIn:V$.number()}),handler:async(X)=>{let J=X,G=J.expiresIn??W18;return{url:K18(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:V$.object({key:V$.string(),expiresIn:V$.number().optional(),contentType:V$.string().optional()}),outputSchema:V$.object({url:V$.string(),expiresIn:V$.number()}),handler:async(X)=>{let J=X,G=J.expiresIn??W18;return{url:K18(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:V$.object({key:V$.string()}),outputSchema:V$.object({success:V$.boolean(),key:V$.string()}),handler:async(X)=>{let J=X,G=iW1(Y,J.key);try{return await G18(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:V$.object({keys:V$.array(V$.string()).max(1000)}),outputSchema:V$.object({deleted:V$.array(V$.string()),errors:V$.array(V$.object({key:V$.string(),message:V$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=iW1(Y,K);try{await G18(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function nW1($,Z,Q){let Y=L18(Z,Q),X=new RH({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:f5});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:V$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:V$.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.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 J=new nY({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),xG(X,J,$,"mcp:dev-assets")}async function w18($,Z,Q,Y){let J=L18(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var Pk6="./data/assets",W18=3600,U18,j18;var E18=O(()=>{o1();Nc();y$();Vt();Gb();hQ();EM0();U18=new e0;U18.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return nW1($.req.raw,Z,Y)});j18=U18});var z18={};q4(z18,{mountDevRoutes:()=>Tk6});function Tk6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return nW1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await w18(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",j18);let Q=new e0;Q.use("*",vK({mountPath:"/api/dev-assets"})),Q.route("/",jM0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var P18=O(()=>{y$();O31();EM0();E18()});import{sql as Rk6}from"kysely";import{randomUUID as A18}from"crypto";import{z as qk6}from"zod";async function Ik6($){let Z=new Date().toISOString(),Q=A18(),Y=R8.SELF($.organizationId),X="registry.publish_request.created",J={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:Q,organization_id:$.organizationId,type:"registry.publish_request.created",source:Y,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(J),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let G=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","=",Y)])).execute();if(G.length>0)await $.db.insertInto("event_deliveries").values(G.map((W)=>({id:A18(),event_id:Q,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await Rk6`SELECT
3393
3393
  pg_notify('studio_events', ${Q}),