decocms 4.243.14 → 4.243.16

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 (236) hide show
  1. package/dist/client/assets/{AlertCircle-CrDuIO-K.js → AlertCircle-C_BqxkYS.js} +1 -1
  2. package/dist/client/assets/{AreaChart-Bm61PhX1.js → AreaChart-B7Vjvvjv.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-CAknXa4X.js → ArrowLeft-rCXrqKOs.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-DIxaV9Av.js → ArrowUp-DHXHkA57.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-DHP3y875.js → ArrowUpRight-BNTqCGGC.js} +1 -1
  6. package/dist/client/assets/{Check-DQ_mSti_.js → Check-CInFGgM9.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-BC1vtQnV.js → CheckCircle-BPQh2WSj.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-CM757JJk.js → ChevronDown-G9B7RdRJ.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-DSQRatby.js → ChevronRight-VJZp1sLB.js} +1 -1
  10. package/dist/client/assets/{ChevronSelectorVertical-DE8MWaeC.js → ChevronSelectorVertical-BGsPKuK_.js} +1 -1
  11. package/dist/client/assets/{ChevronUp-F5-pfgxA.js → ChevronUp-B35t1UZe.js} +1 -1
  12. package/dist/client/assets/{Copy01-DJhXFGmR.js → Copy01-Du_BX2eC.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-AE9yMJL3.js → CreditCard01-B8_wzkbJ.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-DxGrEOWA.js → DotsVertical-D_CkqHPK.js} +1 -1
  15. package/dist/client/assets/{Download01-CRgWn4pp.js → Download01-B7ZGloDx.js} +1 -1
  16. package/dist/client/assets/{Eye-DmUzUGpB.js → Eye-Cu1CMbnW.js} +1 -1
  17. package/dist/client/assets/{FilterLines-B04Nno83.js → FilterLines-I9HVcsix.js} +1 -1
  18. package/dist/client/assets/{Globe01-Dm1YbHfV.js → Globe01-DvxVAbEu.js} +1 -1
  19. package/dist/client/assets/{Globe04-DzAR39r-.js → Globe04-DWo8RVYB.js} +1 -1
  20. package/dist/client/assets/{HardDrive-CGM86W3w.js → HardDrive-BPoercM9.js} +1 -1
  21. package/dist/client/assets/{Key01-DntoqJwa.js → Key01-C9EA6-3X.js} +1 -1
  22. package/dist/client/assets/{LayoutLeft-DIU5T8Kr.js → LayoutLeft-DBSnfEmq.js} +1 -1
  23. package/dist/client/assets/{LinkExternal01-DohSj-TW.js → LinkExternal01-B3Rw8-tH.js} +1 -1
  24. package/dist/client/assets/{LockUnlocked01-CHySdX_R.js → LockUnlocked01-Daa6Affi.js} +1 -1
  25. package/dist/client/assets/{LogOut01-C9wIxpkt.js → LogOut01-DHFegKsF.js} +1 -1
  26. package/dist/client/assets/{Monitor01-BAB_vg_-.js → Monitor01-B_INSCSw.js} +1 -1
  27. package/dist/client/assets/{Palette-fCs4hauk.js → Palette-DU83-LmL.js} +1 -1
  28. package/dist/client/assets/{Play-ClHZmMoe.js → Play-CqwgtS0w.js} +1 -1
  29. package/dist/client/assets/{Plus-p4_cU8N7.js → Plus-SjHvojvA.js} +1 -1
  30. package/dist/client/assets/{SearchLg-Km-M6OZy.js → SearchLg-jR8PdTcA.js} +1 -1
  31. package/dist/client/assets/{SearchMd-C61i1pMs.js → SearchMd-fTZEvjhp.js} +1 -1
  32. package/dist/client/assets/{Settings02-C-HiDBaw.js → Settings02-CyQ_4zcu.js} +1 -1
  33. package/dist/client/assets/{Share07-Bc5qIpio.js → Share07-B1zLjBLA.js} +1 -1
  34. package/dist/client/assets/{Shield01-D-HQVoUu.js → Shield01-DaJr86l8.js} +1 -1
  35. package/dist/client/assets/{Stars01-BqGu_MMa.js → Stars01-CiQQWEJf.js} +1 -1
  36. package/dist/client/assets/{Stars02-C4ew6TCC.js → Stars02-DFfF8gym.js} +1 -1
  37. package/dist/client/assets/{Sun-BWex7y1T.js → Sun-DZ30u3up.js} +1 -1
  38. package/dist/client/assets/{SwitchHorizontal01-CNJw5L8m.js → SwitchHorizontal01-ru6oQ-Ne.js} +1 -1
  39. package/dist/client/assets/{Tool01-BhKdSP88.js → Tool01-CNB5JG5V.js} +1 -1
  40. package/dist/client/assets/{Tool02-CHteaICE.js → Tool02-BWyYg8Ma.js} +1 -1
  41. package/dist/client/assets/{Trash01-CcXY7Oq5.js → Trash01-C-Pu2sFS.js} +1 -1
  42. package/dist/client/assets/{TrendUp01-Fc993PdN.js → TrendUp01-BegPbUN9.js} +1 -1
  43. package/dist/client/assets/{Upload01-B8kERRFc.js → Upload01-CCjv17jL.js} +1 -1
  44. package/dist/client/assets/{User01-C8zZHO2B.js → User01-BnqzHs-B.js} +1 -1
  45. package/dist/client/assets/{Users01-DH7jFCFu.js → Users01-BPKbmUzc.js} +1 -1
  46. package/dist/client/assets/{Users03-Da8p-Ekm.js → Users03-gSrP0_JN.js} +1 -1
  47. package/dist/client/assets/{X-CPWTH8eh.js → X-Bv8aZrrr.js} +1 -1
  48. package/dist/client/assets/{XCircle-yd13JQWz.js → XCircle-Bmjn7En7.js} +1 -1
  49. package/dist/client/assets/{XClose-DaaGNPy7.js → XClose-DmL72eXg.js} +1 -1
  50. package/dist/client/assets/{YAxis-D-fFHUm8.js → YAxis-DJqlIxWf.js} +1 -1
  51. package/dist/client/assets/{Zap-CkZtVAXq.js → Zap-PWyJblse.js} +1 -1
  52. package/dist/client/assets/{ZapSquare-DdW92qNF.js → ZapSquare-DccwlHxL.js} +1 -1
  53. package/dist/client/assets/{access-gate-DqjonHA_.js → access-gate-DzABzYZN.js} +1 -1
  54. package/dist/client/assets/{agent-icon-Bcfp8-i2.js → agent-icon-CI6A_yeI.js} +1 -1
  55. package/dist/client/assets/{agents-list-CxE52kdx.js → agents-list-XHKx5OHO.js} +1 -1
  56. package/dist/client/assets/{ai-providers-CtR17067.js → ai-providers-DNGGtIph.js} +1 -1
  57. package/dist/client/assets/{alert-CclRrdY3.js → alert-AYU7MuYR.js} +1 -1
  58. package/dist/client/assets/{alert-dialog-CzAYHPpm.js → alert-dialog-DnO5HssT.js} +1 -1
  59. package/dist/client/assets/{api-keys-DfaGL4Et.js → api-keys-DqRQOfrd.js} +1 -1
  60. package/dist/client/assets/{app-editor-xFBYsnD5.js → app-editor-DWIdFFxa.js} +1 -1
  61. package/dist/client/assets/{auth-CXSZ9weC.js → auth-BWGSTe2L.js} +1 -1
  62. package/dist/client/assets/{auth-catchall-CRZ65MhE.js → auth-catchall-ChQY28-Q.js} +1 -1
  63. package/dist/client/assets/{auth-entry-5RXYnCQW.js → auth-entry-DvoXxqjV.js} +1 -1
  64. package/dist/client/assets/{auth-split-layout-Csh-4Qjd.js → auth-split-layout-B5eQ7Ngb.js} +1 -1
  65. package/dist/client/assets/{authenticate-and-persist-oauth-CYvFTsk9.js → authenticate-and-persist-oauth-BfePZSJJ.js} +1 -1
  66. package/dist/client/assets/{automation-list-row-4MS2Qv3m.js → automation-list-row-reSCSbQ4.js} +1 -1
  67. package/dist/client/assets/{automation-runs-C43Y1hE2.js → automation-runs-Dz7R0ss5.js} +1 -1
  68. package/dist/client/assets/{automations-BhBtHSLM.js → automations-BcqTVtg-.js} +1 -1
  69. package/dist/client/assets/{avatar-2kQ5gRA5.js → avatar-lZD43JTZ.js} +1 -1
  70. package/dist/client/assets/{badge-Ca9JSAWt.js → badge-DeJpm4bW.js} +1 -1
  71. package/dist/client/assets/{billing-BMjOFs54.js → billing-DeT87ttS.js} +1 -1
  72. package/dist/client/assets/{block-document-Dcdf6o5I.js → block-document-DKI6QQXO.js} +1 -1
  73. package/dist/client/assets/{buckets-DJ8fIEKy.js → buckets-fPELoUxv.js} +1 -1
  74. package/dist/client/assets/{bulk-category-panel-D82txuOX.js → bulk-category-panel-DAPX3OR4.js} +1 -1
  75. package/dist/client/assets/{capability-load-error-w1m3Y_pA.js → capability-load-error-CagBt27F.js} +1 -1
  76. package/dist/client/assets/{card-BO1SNdHX.js → card-zDO_w28X.js} +1 -1
  77. package/dist/client/assets/{cards-C3piepX9.js → cards-BmGzcm_x.js} +1 -1
  78. package/dist/client/assets/{category-editor-CYoKvTDQ.js → category-editor-BTaC69IB.js} +1 -1
  79. package/dist/client/assets/{chart-DrW12eH5.js → chart-Dx5g220h.js} +1 -1
  80. package/dist/client/assets/{chat-context-T31M8gD8.js → chat-context-DEvymuiY.js} +1 -1
  81. package/dist/client/assets/{checkbox-DdpV1h3c.js → checkbox-pJQdIT6S.js} +1 -1
  82. package/dist/client/assets/{choose-editor-BxTeXYer.js → choose-editor-BVTE38yF.js} +1 -1
  83. package/dist/client/assets/{cli-auth-success-DRPNLKGk.js → cli-auth-success-BmALgiir.js} +1 -1
  84. package/dist/client/assets/{collection-detail-B6f-sVqZ.js → collection-detail-BJUbTrdz.js} +1 -1
  85. package/dist/client/assets/{collection-display-button-t3Jrnotz.js → collection-display-button-B1-U1NKH.js} +1 -1
  86. package/dist/client/assets/{collection-search-DqwF3dov.js → collection-search-BRYqwtgT.js} +1 -1
  87. package/dist/client/assets/{collection-table-wrapper-C8_dtyS7.js → collection-table-wrapper-DHEjTvTG.js} +1 -1
  88. package/dist/client/assets/{collection-tabs-CcZ-KIzO.js → collection-tabs-CaP6TCvj.js} +1 -1
  89. package/dist/client/assets/{command-Caqi2e3L.js → command-CAsttCDp.js} +1 -1
  90. package/dist/client/assets/{commerce-onboarding-BJ3phSx5.js → commerce-onboarding-CzNAkLEn.js} +1 -1
  91. package/dist/client/assets/{connect-Dc3cV7MC.js → connect-DZYOvuoD.js} +1 -1
  92. package/dist/client/assets/{connection-CXsXACPa.js → connection-cDXQIc-V.js} +1 -1
  93. package/dist/client/assets/{connection-card-DWIkko7-.js → connection-card-1sCJUDx9.js} +1 -1
  94. package/dist/client/assets/{connection-detail-KfS10XdW.js → connection-detail-mnC7YZk1.js} +1 -1
  95. package/dist/client/assets/{connection-form-helpers-BksrukHo.js → connection-form-helpers-DAHqxfZV.js} +1 -1
  96. package/dist/client/assets/{connections-CXBc0jQj.js → connections-CZjI4cJh.js} +1 -1
  97. package/dist/client/assets/{decopilot-sse-pool-RWA5SqIm.js → decopilot-sse-pool-BamlDQlZ.js} +1 -1
  98. package/dist/client/assets/{dialog-C8c2jGp5.js → dialog-DpNH4YCP.js} +1 -1
  99. package/dist/client/assets/{domain-settings-DhZhIme9.js → domain-settings-BIGD7qz7.js} +1 -1
  100. package/dist/client/assets/{drawer-B8qcNIDt.js → drawer-Du0m0UPi.js} +1 -1
  101. package/dist/client/assets/{dropdown-menu-CESzJ7iq.js → dropdown-menu-Yn9qwmdM.js} +1 -1
  102. package/dist/client/assets/{empty-state-DVEOO36M.js → empty-state-IUXQrfrD.js} +1 -1
  103. package/dist/client/assets/{extract-connection-data-REAEe3pw.js → extract-connection-data-mtB0W2IC.js} +1 -1
  104. package/dist/client/assets/{file-explorer-D2u8-9ok.js → file-explorer-CXmE9xxI.js} +1 -1
  105. package/dist/client/assets/{file-type-icon-DW_vZ3mS.js → file-type-icon-DLpphwk3.js} +1 -1
  106. package/dist/client/assets/{form-C2KIY70K.js → form-DufAe7eW.js} +1 -1
  107. package/dist/client/assets/{general-BmWXQilF.js → general-BTM_RO9g.js} +1 -1
  108. package/dist/client/assets/{github-repo-picker-DE2z1i-C.js → github-repo-picker-D5LfaSIA.js} +1 -1
  109. package/dist/client/assets/{hooks-Dgi2Wrdl.js → hooks-Bflc4J5C.js} +1 -1
  110. package/dist/client/assets/{index-n_pUkv7o.js → index-B7BorFsI.js} +5 -5
  111. package/dist/client/assets/{index-Bkesjy-e.js → index-BOTaCqBI.js} +1 -1
  112. package/dist/client/assets/{index-BYG6TDF0.js → index-BV1y6WvY.js} +1 -1
  113. package/dist/client/assets/{index-IRl_LdwB.js → index-C1ptkkR_.js} +1 -1
  114. package/dist/client/assets/{index-BkN0i_Y9.js → index-CL5vaS6o.js} +1 -1
  115. package/dist/client/assets/{index-CI5UsS6K.js → index-CyzeTQD7.js} +1 -1
  116. package/dist/client/assets/{index-d-TgcEJV.js → index-DOIoCTdM.js} +1 -1
  117. package/dist/client/assets/{index-CZF8eW9j.js → index-DglsCH3H.js} +53 -53
  118. package/dist/client/assets/{index-tLP0STB1.js → index-DwhKnbgI.js} +1 -1
  119. package/dist/client/assets/{index-BOoQ9VdW.js → index-iKqZN1y9.js} +1 -1
  120. package/dist/client/assets/{index-redirect-Dw6MOoLE.js → index-redirect-B5PM7wYq.js} +1 -1
  121. package/dist/client/assets/{infra-billing-Dy6PQ9mu.js → infra-billing-C1NH7KmV.js} +1 -1
  122. package/dist/client/assets/{input-C-59skY6.js → input-D7epuK-Z.js} +1 -1
  123. package/dist/client/assets/{integration-icon-thwQmDUu.js → integration-icon-DafZl0ze.js} +1 -1
  124. package/dist/client/assets/{invite-member-dialog-QWwOoigm.js → invite-member-dialog-CD-gZGZ8.js} +1 -1
  125. package/dist/client/assets/{label-C_afEZyK.js → label-CvubZZ0I.js} +1 -1
  126. package/dist/client/assets/{layout-CXayjFpW.js → layout-C6MHkSVL.js} +1 -1
  127. package/dist/client/assets/{login-ACYXYmy9.js → login-CcwlfZz7.js} +1 -1
  128. package/dist/client/assets/{mcp-oauth-CVRYGLaa.js → mcp-oauth-Ct36wA9v.js} +1 -1
  129. package/dist/client/assets/{members-BLVZ009_.js → members-CnecFXCJ.js} +1 -1
  130. package/dist/client/assets/{monaco-editor-Dc5OzS-b.js → monaco-editor-BjYz-W4y.js} +1 -1
  131. package/dist/client/assets/{monitoring-stats-row-C8L90ZHI.js → monitoring-stats-row-BIX_AxBv.js} +1 -1
  132. package/dist/client/assets/{multi-select-B2y8Mk9t.js → multi-select-C2UnVLV1.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-D43uCPT0.js → oauth-callback-BHDkJfeZ.js} +1 -1
  134. package/dist/client/assets/{oauth-callback-ai-provider-BQkgFC6A.js → oauth-callback-ai-provider-KQy-WADg.js} +1 -1
  135. package/dist/client/assets/{onboarding-Cl1ypAXc.js → onboarding-CM_nJ4S1.js} +1 -1
  136. package/dist/client/assets/{org-layout-BRa9rVtm.js → org-layout-XMs6bieV.js} +1 -1
  137. package/dist/client/assets/{organization-choice-CdBMPrAX.js → organization-choice-DpyYsqvA.js} +1 -1
  138. package/dist/client/assets/{orgs-Cx8rn8DP.js → orgs-BBc_RovK.js} +1 -1
  139. package/dist/client/assets/{page-seo-form-Ck3JIT76.js → page-seo-form-Dgs4JdJU.js} +1 -1
  140. package/dist/client/assets/{popover-o0e_Tvcf.js → popover-_GBl33O8.js} +1 -1
  141. package/dist/client/assets/{post-editor-CrxqNJcV.js → post-editor-C3SyTdqJ.js} +1 -1
  142. package/dist/client/assets/{primitives-DpgAZoo1.js → primitives-C7dSZv9u.js} +1 -1
  143. package/dist/client/assets/{profile-DuEZMXqd.js → profile-BKFtxcCJ.js} +1 -1
  144. package/dist/client/assets/{project-app-view-jnHaIken.js → project-app-view-BHipLaUP.js} +1 -1
  145. package/dist/client/assets/record-editor-BQGoU6hi.js +1 -0
  146. package/dist/client/assets/{redirect-editor-udj6U_qb.js → redirect-editor-BrRU3NGe.js} +1 -1
  147. package/dist/client/assets/registry-CHbNGqXD.js +2 -0
  148. package/dist/client/assets/{registry-layout-CA0dIAHp.js → registry-layout-CDQ29yoE.js} +1 -1
  149. package/dist/client/assets/{reports-BO7pkfGc.js → reports-DuAh46Yd.js} +1 -1
  150. package/dist/client/assets/{require-capability-CmDer7LY.js → require-capability-gHIwYkXk.js} +1 -1
  151. package/dist/client/assets/{required-auth-layout-CheXBljc.js → required-auth-layout-DuOdb_m7.js} +1 -1
  152. package/dist/client/assets/{reset-password-DTUMNvDr.js → reset-password-CHt3KKMU.js} +1 -1
  153. package/dist/client/assets/{roles-CuoPruPY.js → roles-B8oLIuHL.js} +1 -1
  154. package/dist/client/assets/{search-input-BWOB1dxm.js → search-input-CObIT_7a.js} +1 -1
  155. package/dist/client/assets/{secrets-khnZ1JE9.js → secrets-Dl_uvOnm.js} +1 -1
  156. package/dist/client/assets/{sections-editor-CHMZxcdt.js → sections-editor-knlXTLmf.js} +1 -1
  157. package/dist/client/assets/{select-BjLdAKRN.js → select-Dvpyj8NQ.js} +1 -1
  158. package/dist/client/assets/{select-model-C50sOZME.js → select-model-DzpbX8SS.js} +1 -1
  159. package/dist/client/assets/{self-tool-result-BHabvbVG.js → self-tool-result-DP8ab1C7.js} +1 -1
  160. package/dist/client/assets/{seo-editor-C6K32s25.js → seo-editor-JYaRXoHn.js} +1 -1
  161. package/dist/client/assets/{settings-layout-Dhg4tgk7.js → settings-layout-cNgazNYM.js} +1 -1
  162. package/dist/client/assets/{settings-section-DFFfOuRp.js → settings-section-W09oceW9.js} +1 -1
  163. package/dist/client/assets/{settings-subnav-DxIGDg-C.js → settings-subnav-emx7OuV6.js} +1 -1
  164. package/dist/client/assets/{shell-controls-CtkqT3bS.js → shell-controls-DdMCwcXE.js} +1 -1
  165. package/dist/client/assets/{shell-layout-ui9SII6o.js → shell-layout-TW_wA41L.js} +1 -1
  166. package/dist/client/assets/{sidebar-BYTgjbnI.js → sidebar-B2KhEaQf.js} +1 -1
  167. package/dist/client/assets/{skeleton-Bpyk0nMH.js → skeleton-BlZwbMCP.js} +1 -1
  168. package/dist/client/assets/{spinner-9ABT2ti7.js → spinner-MFNDKl-_.js} +1 -1
  169. package/dist/client/assets/{sso-Bl9rw6zW.js → sso-BuHi3YmG.js} +1 -1
  170. package/dist/client/assets/{store-7gXkG-g4.js → store-BAhFZ3y4.js} +1 -1
  171. package/dist/client/assets/store-registry-BuJIo1rg.js +2 -0
  172. package/dist/client/assets/{studio-tools-Bzmkx7kR.js → studio-tools-DcMPcKsR.js} +1 -1
  173. package/dist/client/assets/{switch-BYRMvuuJ.js → switch-jevNXNY5.js} +1 -1
  174. package/dist/client/assets/{synced-repos-0wclg7nW.js → synced-repos-2-TJwQq1.js} +1 -1
  175. package/dist/client/assets/{tab-id-CWz_S9PQ.js → tab-id-BqoCoJhy.js} +1 -1
  176. package/dist/client/assets/{table-DAF3mPot.js → table-BnzhPb_k.js} +1 -1
  177. package/dist/client/assets/{tabs-IjYokb6B.js → tabs-7kGeT9go.js} +1 -1
  178. package/dist/client/assets/{tasks-BzIcL749.js → tasks-DOS3dPav.js} +1 -1
  179. package/dist/client/assets/{textarea-C-cYMHmA.js → textarea-C7UW5eI1.js} +1 -1
  180. package/dist/client/assets/{toggle-group-g4btBExH.js → toggle-group-CAtHie06.js} +1 -1
  181. package/dist/client/assets/{toolbar-DlLSc2Nx.js → toolbar-Djmoj5MT.js} +1 -1
  182. package/dist/client/assets/{tooltip-nO4Wd1lE.js → tooltip-ocz-8ZiH.js} +1 -1
  183. package/dist/client/assets/{track-DKyvqVYN.js → track-B-qWZwKx.js} +1 -1
  184. package/dist/client/assets/{types-eTVfkr3u.js → types-Bdsm2j2P.js} +1 -1
  185. package/dist/client/assets/{use-ai-providers-DRDoUYXy.js → use-ai-providers-BN3bZalW.js} +1 -1
  186. package/dist/client/assets/{use-api-keys-DQkRL7C2.js → use-api-keys-C1YLxBWc.js} +1 -1
  187. package/dist/client/assets/{use-automations-CKGDAq-4.js → use-automations-BNeN7xfc.js} +1 -1
  188. package/dist/client/assets/{use-autosave-DPbs09hr.js → use-autosave-CoYBmgzS.js} +1 -1
  189. package/dist/client/assets/{use-capability-C0b8qjjf.js → use-capability-C58qo0xH.js} +1 -1
  190. package/dist/client/assets/{use-clock-tick-DSsyCvwK.js → use-clock-tick-BaMg9yqc.js} +1 -1
  191. package/dist/client/assets/{use-commerce-diagnostic-BRO8EDAq.js → use-commerce-diagnostic-4i7w8Clz.js} +1 -1
  192. package/dist/client/assets/{use-connection-BltOys1c.js → use-connection-Bk3MkNRE.js} +1 -1
  193. package/dist/client/assets/{use-copy-VC0r9iEh.js → use-copy-DEwTO3_J.js} +1 -1
  194. package/dist/client/assets/{use-create-virtual-mcp-D9CoJ0U5.js → use-create-virtual-mcp-BqhHC1uD.js} +1 -1
  195. package/dist/client/assets/{use-debounced-autosave-BWH9oyAO.js → use-debounced-autosave-DpFsTc9Z.js} +1 -1
  196. package/dist/client/assets/{use-debounced-value-xLDhPrQA.js → use-debounced-value-B_OE6aAs.js} +1 -1
  197. package/dist/client/assets/{use-decopilot-events-B0sNSz-b.js → use-decopilot-events-DX8x3a0A.js} +1 -1
  198. package/dist/client/assets/{use-delete-connection-K5Pdg6MU.js → use-delete-connection-BNGaa9qe.js} +1 -1
  199. package/dist/client/assets/{use-deployment-admin-CPxqOIUb.js → use-deployment-admin-BfyCG-4k.js} +1 -1
  200. package/dist/client/assets/{use-file-configs-BftSzLbr.js → use-file-configs-BIIie-dO.js} +1 -1
  201. package/dist/client/assets/{use-infinite-scroll-6er3xTHc.js → use-infinite-scroll-C0Nc5vtp.js} +1 -1
  202. package/dist/client/assets/{use-join-requests-Br7SOxen.js → use-join-requests-Ccmuw8Q_.js} +1 -1
  203. package/dist/client/assets/{use-mcp-client-Dq7jbheJ.js → use-mcp-client-BtmukcyN.js} +1 -1
  204. package/dist/client/assets/{use-mcp-tools-BdRkzPjU.js → use-mcp-tools-WuZKeXoU.js} +1 -1
  205. package/dist/client/assets/{use-members-BljNtuTA.js → use-members-xOMF6AK_.js} +1 -1
  206. package/dist/client/assets/{use-mobile-DR1RUy6m.js → use-mobile-DLrw2mfj.js} +1 -1
  207. package/dist/client/assets/{use-navigate-to-agent-DIpaPneu.js → use-navigate-to-agent-D-oaaZ5G.js} +1 -1
  208. package/dist/client/assets/{use-open-billing-url-DLgOEeH1.js → use-open-billing-url-CFaef0dg.js} +1 -1
  209. package/dist/client/assets/{use-org-auth-client-CCZhmNcA.js → use-org-auth-client-B4A7mgtf.js} +1 -1
  210. package/dist/client/assets/{use-org-repo-syncs-_Fy_LEU9.js → use-org-repo-syncs-D13KhS7c.js} +1 -1
  211. package/dist/client/assets/{use-org-sso-ZLVa6Klf.js → use-org-sso-D2JwPrAt.js} +1 -1
  212. package/dist/client/assets/{use-organization-roles-C8ZiGW-H.js → use-organization-roles-BLsWxlpF.js} +1 -1
  213. package/dist/client/assets/{use-organization-settings-BkwFEeyz.js → use-organization-settings-CGBhQFa1.js} +1 -1
  214. package/dist/client/assets/{use-registry-connections-CirR1Usp.js → use-registry-connections-B2fDGJK3.js} +1 -1
  215. package/dist/client/assets/{use-secrets-BuHf1xNW.js → use-secrets-DXlgv2yw.js} +1 -1
  216. package/dist/client/assets/{use-section-preview-base-CfRJmWe5.js → use-section-preview-base-D4oFfUr0.js} +1 -1
  217. package/dist/client/assets/{use-settings-tabs-CgIX4oCd.js → use-settings-tabs-DGzOtCun.js} +1 -1
  218. package/dist/client/assets/{use-status-sounds-rqI8dYNf.js → use-status-sounds-D-EIaw8A.js} +1 -1
  219. package/dist/client/assets/{use-tags-JNHXo9H7.js → use-tags-JLGPLIW-.js} +1 -1
  220. package/dist/client/assets/{use-view-mode-DDqWF3eX.js → use-view-mode-oCS_vizZ.js} +1 -1
  221. package/dist/client/assets/{use-virtual-mcp-OdTc8Q7z.js → use-virtual-mcp-C64K_52X.js} +1 -1
  222. package/dist/client/assets/useInfiniteQuery-Bh9IfQvx.js +1 -0
  223. package/dist/client/assets/{useRouterState-CV69R02o.js → useRouterState-B7ibUnMv.js} +1 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-i0SzE3B3.js +1 -0
  225. package/dist/client/assets/{users-4AP2lRzC.js → users-DMyiJLoO.js} +1 -1
  226. package/dist/client/assets/{variant-calendar-B4BkwJhc.js → variant-calendar-Cle8X91Y.js} +1 -1
  227. package/dist/client/assets/{view-mode-toggle-DKesscf4.js → view-mode-toggle-DyWSYSri.js} +1 -1
  228. package/dist/client/index.html +1 -1
  229. package/dist/server/cli.js +3 -3
  230. package/dist/server/server.js +3 -3
  231. package/package.json +1 -1
  232. package/dist/client/assets/record-editor-CUhI0aE0.js +0 -1
  233. package/dist/client/assets/registry-DMv6dawm.js +0 -2
  234. package/dist/client/assets/store-registry-CGGSo0VL.js +0 -2
  235. package/dist/client/assets/useInfiniteQuery-BHLjleqi.js +0 -1
  236. package/dist/client/assets/useSuspenseInfiniteQuery-CzRwbdk7.js +0 -1
@@ -1477,7 +1477,7 @@ ${iW$(Z.content)}
1477
1477
  `)X--;return $.slice(Z,X)}function YO4($){let Z=[],X=0;while(X<$.length){let Q=GO4($,X),Y=pW$($,X,"{noformat}"),G=pW$($,X,"{quote}"),J=[];if(Q)J.push({type:"code",...Q});if(Y)J.push({type:"code",lang:"",...Y});if(G)J.push({type:"quote",...G});let W=J.sort((K,H)=>K.start-H.start)[0];if(!W){Z.push({type:"text",content:$.slice(X)});break}if(W.start>X)Z.push({type:"text",content:$.slice(X,W.start)});Z.push(W),X=W.end}return Z}function GO4($,Z){for(let X=$.indexOf("{code",Z);X!==-1;){let Q=$.indexOf("}",X);if(Q===-1)return null;let Y=$.slice(X+5,Q);if(Y===""||Y.startsWith(":")){let G=$.indexOf("{code}",Q+1);if(G===-1)return null;let J=Y.startsWith(":")?Y.slice(1).split("|")[0]??"":"";return{start:X,end:G+6,content:$.slice(Q+1,G),lang:J}}X=$.indexOf("{code",X+1)}return null}function pW$($,Z,X){let Q=$.indexOf(X,Z);if(Q===-1)return null;let Y=$.indexOf(X,Q+X.length);if(Y===-1)return null;return{start:Q,end:Y+X.length,content:$.slice(Q+X.length,Y)}}function nW$($){return $.split(`
1478
1478
  `).map(WO4).join(`
1479
1479
  `)}function tn0($,Z){let X=0;while($[X]===Z)X++;return X}function JO4($){let Z=$.trim();return Z.length>=4&&tn0(Z,"-")===Z.length}function WO4($){let Z=$[1]??"";if($[0]==="h"&&Z>="1"&&Z<="6"&&$[2]===".")return`${"#".repeat(Number(Z))} ${JC($.slice(3).trimStart())}`;if(JO4($))return"---";let X=tn0($,"*");if(X>0&&$[X]===" ")return`${X===1?"*":`${" ".repeat(X-1)}-`} ${JC($.slice(X+1))}`;let Q=tn0($,"#");if(Q>0&&$[Q]===" ")return`${" ".repeat(Q-1)}1. ${JC($.slice(Q+1))}`;let Y=$.trimEnd();if(Y.startsWith("||")&&Y.endsWith("||")&&Y.length>4){let G=Y.slice(2,-2).split("||");return`${`| ${G.map((W)=>JC(W.trim())).join(" | ")} |`}
1480
- |${G.map(()=>" --- ").join("|")}|`}if(Y.startsWith("|")&&Y.endsWith("|")&&Y.length>2)return`| ${Y.slice(1,-1).split("|").map((J)=>JC(J.trim())).join(" | ")} |`;return JC($)}function nn0($){return($.startsWith("http://")||$.startsWith("https://"))&&!$.includes(" ")}function JC($){let Z="",X=0;while(X<$.length){let Q=$[X]??"";if(Q==="{"){if($.startsWith("{{",X)){let Y=$.indexOf("}}",X+2);if(Y!==-1){Z+=`\`${$.slice(X+2,Y)}\``,X=Y+2;continue}}if($.startsWith("{color",X)){let Y=$.indexOf("}",X);if(Y!==-1){X=Y+1;continue}}}else if(Q==="["){let Y=$.indexOf("]",X);if(Y!==-1){let G=$.slice(X+1,Y),J=G.indexOf("|");if(J!==-1&&nn0(G.slice(J+1))){Z+=`[${G.slice(0,J)}](${G.slice(J+1)})`,X=Y+1;continue}if(nn0(G)){Z+=G,X=Y+1;continue}}}else if(Q==="!"){let Y=$.indexOf("!",X+1);if(Y!==-1){let G=$.slice(X+1,Y),J=G.indexOf("|"),W=J===-1?G:G.slice(0,J);if(nn0(W)){Z+=`![](${W})`,X=Y+1;continue}}}else if(Q==="*"||Q==="_"){let Y=FO4($,X,Q,Z.slice(-1)||" ");if(Y){Z+=Y.text,X=Y.next;continue}}Z+=Q,X++}return Z}function FO4($,Z,X,Q){if(!KO4.includes(Q))return null;let Y=$[Z+1];if(!Y||Y===" "||Y===X)return null;for(let G=Z+2;G<$.length;G++){if($[G]!==X||$[G-1]===" ")continue;let J=$[G+1];if(J!==void 0&&!HO4.includes(J))continue;let W=JC($.slice(Z+1,G));return{text:X==="*"?`**${W}**`:`*${W}*`,next:G+1}}return null}var KO4=" ([{>",HO4=` )]}.,:;!?{["'`;function OO4($){let Z=$ instanceof Error?$.message:String($),X=Z.match(/failed \((\d+)\)/);if(X&&X[1]){let Q=parseInt(X[1],10);return Q>=500||Q===429}if(/returned invalid JSON/.test(Z))return!1;return!0}function rn0($){let Z=$.trim().replace(/\/+$/,""),X=/^https?:\/\//i.test(Z)?Z:`https://${Z}`,Q;try{Q=new URL(X).hostname.toLowerCase()}catch{throw Error(`Invalid Jira site URL: ${$}`)}if(!BO4.test(Q))throw Error(`Invalid Jira site URL: ${$} \u2014 expected <your-site>.atlassian.net`);return`https://${Q}`}function on0($){if(!/^\d+$/.test($))throw Error(`Invalid Jira board id: ${$}`);return $}class h3{baseUrl;authHeader;constructor($,Z,X){this.baseUrl=rn0($),this.authHeader=`Basic ${Buffer.from(`${Z}:${X}`).toString("base64")}`}async request($,Z,{idempotent:X=!0}={}){let Q=async()=>{let Y=await fetch(`${this.baseUrl}${$}`,{...Z,headers:{Authorization:this.authHeader,Accept:"application/json",...Z?.body?{"Content-Type":"application/json"}:{}},signal:AbortSignal.timeout(NO4)}),G=await Y.text().catch(()=>"");if(!Y.ok)throw Error(`Jira ${$} failed (${Y.status}): ${G.slice(0,300)}`);if(G==="")return;try{return JSON.parse(G)}catch(J){throw Error(`Jira ${$} returned invalid JSON: ${G.slice(0,300)}`,{cause:J})}};if(!X)return Q();return N9(Q,{maxAttempts:3,minTimeout:100,maxTimeout:5000,multiplier:2,jitter:1,isRetriable:OO4})}async myself(){return this.request("/rest/api/3/myself")}async listBoards(){let $=[],Z=0;while($.length<200){let X=await this.request(`/rest/agile/1.0/board?startAt=${Z}&maxResults=50`);if($.push(...X.values.map((Q)=>({id:Q.id,name:Q.name,type:Q.type,projectKey:Q.location?.projectKey,projectName:Q.location?.projectName}))),X.isLast||X.values.length===0)break;Z+=X.values.length}return $}async getBoardColumns($){let Z=await this.request(`/rest/agile/1.0/board/${on0($)}/configuration`),X=new Map,Q=[];for(let Y of Z.columnConfig?.columns??[]){let G=[];for(let J of Y.statuses??[]){if(!X.has(J.id)){let W=await this.request(`/rest/api/3/status/${encodeURIComponent(J.id)}`);X.set(J.id,W.name)}G.push(X.get(J.id)??J.id)}Q.push({name:Y.name,statuses:G})}return Q}async listBoardIssues($){let Z=new URLSearchParams({startAt:String($.startAt),maxResults:"100",jql:$.jql,fields:UO4}),X=await this.request(`/rest/agile/1.0/board/${on0($.boardId)}/issue?${Z}`);return{issues:X.issues??[],total:X.total}}async listBacklogIssueIds($){let Z=new Set,X=0;while(Z.size<5000){let Q=await this.request(`/rest/agile/1.0/board/${on0($)}/backlog?startAt=${X}&maxResults=100&fields=id`);for(let Y of Q.issues??[])Z.add(Y.id);if(X+=Q.issues?.length??0,X>=Q.total||(Q.issues?.length??0)===0)break}return Z}async listTransitions($){return(await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/transitions`)).transitions??[]}async getStatusName($){return(await this.request(`/rest/api/3/issue/${encodeURIComponent($)}?fields=status`)).fields?.status?.name??null}async transitionIssue($,Z){await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/transitions`,{method:"POST",body:JSON.stringify({transition:{id:Z}})},{idempotent:!1})}async listComments($){let Z=[],X=0;while(Z.length<1000){let Q=await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/comment?startAt=${X}&maxResults=100&orderBy=created`);if(Z.push(...Q.comments),Z.length>=Q.total||Q.comments.length===0)break;X+=Q.comments.length}return Z}async addComment($,Z){return this.request(`/rest/api/3/issue/${encodeURIComponent($)}/comment`,{method:"POST",body:JSON.stringify({body:wO4(Z)})},{idempotent:!1})}}function wO4($){let Z=$.split(`
1480
+ |${G.map(()=>" --- ").join("|")}|`}if(Y.startsWith("|")&&Y.endsWith("|")&&Y.length>2)return`| ${Y.slice(1,-1).split("|").map((J)=>JC(J.trim())).join(" | ")} |`;return JC($)}function nn0($){return($.startsWith("http://")||$.startsWith("https://"))&&!$.includes(" ")}function JC($){let Z="",X=0;while(X<$.length){let Q=$[X]??"";if(Q==="{"){if($.startsWith("{{",X)){let Y=$.indexOf("}}",X+2);if(Y!==-1){Z+=`\`${$.slice(X+2,Y)}\``,X=Y+2;continue}}if($.startsWith("{color",X)){let Y=$.indexOf("}",X);if(Y!==-1){X=Y+1;continue}}}else if(Q==="["){let Y=$.indexOf("]",X);if(Y!==-1){let G=$.slice(X+1,Y),J=G.indexOf("|");if(J!==-1&&nn0(G.slice(J+1))){Z+=`[${G.slice(0,J)}](${G.slice(J+1)})`,X=Y+1;continue}if(nn0(G)){Z+=G,X=Y+1;continue}}}else if(Q==="!"){let Y=$.indexOf("!",X+1);if(Y!==-1){let G=$.slice(X+1,Y),J=G.indexOf("|"),W=J===-1?G:G.slice(0,J);if(nn0(W)){Z+=`![](${W})`,X=Y+1;continue}}}else if(Q==="*"||Q==="_"){let Y=FO4($,X,Q,Z.slice(-1)||" ");if(Y){Z+=Y.text,X=Y.next;continue}}Z+=Q,X++}return Z}function FO4($,Z,X,Q){if(!KO4.includes(Q))return null;let Y=$[Z+1];if(!Y||Y===" "||Y===X)return null;for(let G=Z+2;G<$.length;G++){if($[G]!==X||$[G-1]===" ")continue;let J=$[G+1];if(J!==void 0&&!HO4.includes(J))continue;let W=JC($.slice(Z+1,G));return{text:X==="*"?`**${W}**`:`*${W}*`,next:G+1}}return null}var KO4=" ([{>",HO4=` )]}.,:;!?{["'`;function OO4($){let Z=$ instanceof Error?$.message:String($),X=Z.match(/failed \((\d+)\)/);if(X&&X[1]){let Q=parseInt(X[1],10);return Q>=500||Q===429}if(/returned invalid JSON/.test(Z))return!1;return!0}function rn0($){let Z=$.trim().replace(/\/+$/,""),X=/^https?:\/\//i.test(Z)?Z:`https://${Z}`,Q;try{Q=new URL(X).hostname.toLowerCase()}catch{throw Error(`Invalid Jira site URL: ${$}`)}if(!BO4.test(Q))throw Error(`Invalid Jira site URL: ${$} \u2014 expected <your-site>.atlassian.net`);return`https://${Q}`}function on0($){if(!/^\d+$/.test($))throw Error(`Invalid Jira board id: ${$}`);return $}class h3{baseUrl;authHeader;constructor($,Z,X){this.baseUrl=rn0($),this.authHeader=`Basic ${Buffer.from(`${Z}:${X}`).toString("base64")}`}async request($,Z,{idempotent:X=!0}={}){let Q=async()=>{let Y=await fetch(`${this.baseUrl}${$}`,{...Z,headers:{Authorization:this.authHeader,Accept:"application/json",...Z?.body?{"Content-Type":"application/json"}:{}},signal:AbortSignal.timeout(NO4)}),G;try{G=await Y.text()}catch(J){throw Error(`Jira ${$} failed to read response body`,{cause:J})}if(!Y.ok)throw Error(`Jira ${$} failed (${Y.status}): ${G.slice(0,300)}`);if(G==="")return;try{return JSON.parse(G)}catch(J){throw Error(`Jira ${$} returned invalid JSON: ${G.slice(0,300)}`,{cause:J})}};if(!X)return Q();return N9(Q,{maxAttempts:3,minTimeout:100,maxTimeout:5000,multiplier:2,jitter:1,isRetriable:OO4})}async myself(){return this.request("/rest/api/3/myself")}async listBoards(){let $=[],Z=0;while($.length<200){let X=await this.request(`/rest/agile/1.0/board?startAt=${Z}&maxResults=50`);if($.push(...X.values.map((Q)=>({id:Q.id,name:Q.name,type:Q.type,projectKey:Q.location?.projectKey,projectName:Q.location?.projectName}))),X.isLast||X.values.length===0)break;Z+=X.values.length}return $}async getBoardColumns($){let Z=await this.request(`/rest/agile/1.0/board/${on0($)}/configuration`),X=new Map,Q=[];for(let Y of Z.columnConfig?.columns??[]){let G=[];for(let J of Y.statuses??[]){if(!X.has(J.id)){let W=await this.request(`/rest/api/3/status/${encodeURIComponent(J.id)}`);X.set(J.id,W.name)}G.push(X.get(J.id)??J.id)}Q.push({name:Y.name,statuses:G})}return Q}async listBoardIssues($){let Z=new URLSearchParams({startAt:String($.startAt),maxResults:"100",jql:$.jql,fields:UO4}),X=await this.request(`/rest/agile/1.0/board/${on0($.boardId)}/issue?${Z}`);return{issues:X.issues??[],total:X.total}}async listBacklogIssueIds($){let Z=new Set,X=0;while(Z.size<5000){let Q=await this.request(`/rest/agile/1.0/board/${on0($)}/backlog?startAt=${X}&maxResults=100&fields=id`);for(let Y of Q.issues??[])Z.add(Y.id);if(X+=Q.issues?.length??0,X>=Q.total||(Q.issues?.length??0)===0)break}return Z}async listTransitions($){return(await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/transitions`)).transitions??[]}async getStatusName($){return(await this.request(`/rest/api/3/issue/${encodeURIComponent($)}?fields=status`)).fields?.status?.name??null}async transitionIssue($,Z){await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/transitions`,{method:"POST",body:JSON.stringify({transition:{id:Z}})},{idempotent:!1})}async listComments($){let Z=[],X=0;while(Z.length<1000){let Q=await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/comment?startAt=${X}&maxResults=100&orderBy=created`);if(Z.push(...Q.comments),Z.length>=Q.total||Q.comments.length===0)break;X+=Q.comments.length}return Z}async addComment($,Z){return this.request(`/rest/api/3/issue/${encodeURIComponent($)}/comment`,{method:"POST",body:JSON.stringify({body:wO4(Z)})},{idempotent:!1})}}function wO4($){let Z=$.split(`
1481
1481
  `).filter((X)=>X.trim()!=="");return{type:"doc",version:1,content:Z.length>0?Z.map((X)=>({type:"paragraph",content:[{type:"text",text:X}]})):[{type:"paragraph",content:[]}]}}function lB0($){if(typeof $==="string")return tW$($);if(!$||typeof $!=="object")return"";let Z=$;if(Z.type==="text")return Z.text??"";if(Z.type==="hardBreak")return`
1482
1482
  `;let X=(Array.isArray(Z.content)?Z.content:[]).map(lB0);if(Z.type==="doc")return X.filter((Q)=>Q.trim()!=="").join(`
1483
1483
 
@@ -1543,7 +1543,7 @@ ${$.description}
1543
1543
  `):Z?.pr?[`This task already has an open pull request #${Z.pr.number} (${Z.pr.url}), and you are already on its branch.`,"Continue that work: commit and push to update the SAME pull request \u2014 do NOT open a new one or start a new branch. If you find it already does everything the task asks, say so and stop rather than changing it.",""].join(`
1544
1544
  `):"","How to work:","- First decide whether this task requires changing code in a repository. Some tasks (research, answering a question, planning) don't. If it doesn't, just do the work directly \u2014 don't load a repo or open a PR.",Z?.pr?"- If it DOES need code changes: use the `load_repo` tool to load the relevant repository, make the change, then commit and push to the pull request named above.":"- If it DOES need code changes: use the `load_repo` tool to load the relevant repository, then make the change, commit on a new branch, push, and open a pull request. Only then does a PR apply.","- Prefer the GitHub tool to open the PR. If it errors or targets the wrong repo, fall back to `git push` + the GitHub REST API (the auth token is embedded in the `origin` URL).","- If a dev server is running it hot-reloads your changes \u2014 don't restart it, hunt for its port, or run a full typecheck/build just to verify a small edit.","- Change only what the task needs. Don't trace the definition of a pre-existing symbol that's incidental to your change \u2014 note it in one line and move on. Prefer one or two broad searches over many narrow retries.","- Only if you hit a genuine blocker a human must clear (see above) may you call `user_ask` \u2014 otherwise keep going and finish the task.","",`(task id: ${$.id})`].join(`
1545
1545
  `)}async function lD4($,Z,X){let Y=(await $.storage.taskBoard.listPrs(Z.id,Z.organizationId).catch(()=>[])).find((G)=>G.number===X);if(!Y)return null;return _F$($,Z.organizationId,Y).catch(()=>null)}async function dD4($,Z){let X=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId).catch(()=>[]);return ga1(X)}function mD4($){return $!=="closed"}async function iD4($,Z){let X=await $.storage.taskBoard.listPrs(Z.id,Z.organizationId).catch(()=>[]);for(let Q of X){let{state:Y}=await vy(Z.organizationId,Q);if(mD4(Y))return{number:Q.number,url:Q.url}}return}async function iF($,Z,X){let Q=await la1($,Z,X?.userInitiated?Rx():void 0),Y="decopilot";try{let G=b0().taskBoardRerunReusesPrBranch,J=X?.pr??(G?await iD4($,Z):void 0),W=G&&J?await lD4($,Z,J.number):null,K=!X?.feedback&&!X?.resolveConflict,H=J&&K?await dD4($,Z):null,F=J&&J!==X?.pr||H?{...X,...J?{pr:J}:{},...H?{feedback:H}:{}}:X,N=await Iw0($,Z.organizationId);if(N){Y="claude-code";let U="repo"in N?N.repo:null;await jn($,Z,{title:`Super Agent: ${Z.title}`,...X?.runClass?{runClass:X.runClass}:{},...W?{pinnedRef:W}:{},prompt:OF$(Z,U,{...F,..."choices"in N?{repoChoices:N.choices}:{}}),temperature:0.5,harnessId:"claude-code",...U?{repo:U}:{}})}else await jn($,Z,{title:`Super Agent: ${Z.title}`,...X?.runClass?{runClass:X.runClass}:{},prompt:cD4(Z,F),temperature:0.5,...W?{pinnedRef:W}:{}})}catch(G){throw await da1($.storage.organizationBilling,Z.organizationId,Z.id,Q),G}await $.storage.taskBoard.supersedeFailedThreads(Z.id,Z.organizationId).catch((G)=>console.error("[task-board] superseding failed threads failed",G)),MY({event:"task_run_enqueued",organizationId:Z.organizationId,properties:{task_id:Z.id,reports_task:kQ(Z),claim:Q,harness:Y,...X?.runClass?{run_class:X.runClass}:{}}})}var cF=w(()=>{E9();E3();E9();M4();T$();$o0();kK();Pn();Zo0()});import{z as pF}from"zod";var Eo0;var vF$=w(()=>{C0();_3();Fp0();cF();sX();h5();Eo0=c({name:"TASK_BOARD_ITEM_CREATE",description:"Create a new task board item for the organization.",annotations:{title:"Create Task Board Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:pF.object({title:pF.string().min(1),description:pF.string().nullable().optional(),status:C3.optional(),priority:hS.optional(),assigneeId:pF.string().nullable().optional(),repo:pF.string().nullable().optional(),dueDate:pF.string().datetime().nullable().optional(),tagIds:pF.array(pF.string()).optional()}),outputSchema:pF.object({item:Ky}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if($.assigneeId)await lO0(Z,X,$.assigneeId);let Q=$.assigneeId===n8;if($.tagIds?.length){let G=await Z.storage.tags.listOrgTags(X),J=new Set(G.map((W)=>W.id));for(let W of $.tagIds)if(!J.has(W))throw Error(`Tag not found: ${W}`)}let Y=await Z.storage.taskBoard.create({organizationId:X,title:$.title,description:$.description??null,status:Q?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId??null,assignedBy:$.assigneeId?G1(Z):null,repo:$.repo??null,dueDate:$.dueDate??null,by:G1(Z)});if($.tagIds?.length)await Z.storage.taskBoard.setItemTags(Y.id,$.tagIds,G1(Z)),Y=await Z.storage.taskBoard.getById(Y.id,X);return await C6(Z,{taskBoardItemId:Y.id,action:"created",actorId:G1(Z)}),F8(X,Y),await TB(Z,Y),{item:Y}}})});function pD4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&cK$($))return"nudge";return"none"}function nD4($){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(`
1546
- `)}async function tD4($,Z,X){let Q=Z.organizationId,Y=await $X($,"smart"),G=X.virtual_mcp_id??dD(Q),J={id:`stall-nudge-${Z.id}-${X.id}`,role:"user",parts:[{type:"text",text:nD4(X.harness_id)}]};await new GX({storage:$.storage.threads.messageParts(),orgId:Q,threadId:X.id,runId:X.id}).emitRequestMessage(J),await lF({threadId:X.id,source:"background-tool",request:{messages:[J],models:{credentialId:Y.credentialId,thinking:{id:Y.modelId,title:Y.modelMeta.title}},agent:{id:G},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:Q,userId:Z.assignedBy??Z.createdBy,harnessId:X.harness_id==="claude-code"?"claude-code":"decopilot",sandboxProviderKind:"agent-sandbox",...X.branch?{branch:X.branch}:{},taskId:X.id,runMetadata:dO0(Z)}},{workflowID:`stall-nudge:${Z.id}:${X.id}`})}async function oD4($,Z){let X=await $.storage.threads.get(Z);if(!X)return{action:"none",thread:null};return{action:pD4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id,sandboxProviderKind:X.sandbox_provider_kind}),thread:X}}function rD4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return Gn($,Z)}async function aD4($,Z){let X=[];for(let Q of Z.threads){if(Q.status!=="in_progress")continue;let Y=await $.storage.threads.get(Q.threadId);if(!Y||!rD4(Y))continue;if(await $.storage.threads.markRunFailed(Q.threadId,jo0,"abandoned"))X.push(Q.threadId),console.warn(`[task-board] failed never-started thread ${Q.threadId} on ${Z.id}`)}return X}async function fF$($,Z){let X=$.organization?.id;if(!X)return;for(let Q of Z){if(Q.status==="in_progress")try{if((await aD4($,Q)).length>0)continue}catch(J){console.error(`[task-board] reaping threads for ${Q.id} failed`,J)}let Y=Q.repo!=null&&(await $.storage.taskBoard.listPrs(Q.id,X)).length>0;if(!mn0(Q,Y))continue;let G=Q.threads.find((J)=>J.hasMessages);if(!G)continue;try{let{action:J,thread:W}=await oD4($,G.threadId);if(J==="none"||!W)continue;if(J==="advance")await Ty($.storage.taskBoard,G.threadId,X,$.storage.organizationBilling);else await tD4($,Q,W)}catch(J){console.error(`[task-board] stall recovery failed for ${Q.id}`,J)}}}var jo0="Run never started \u2014 no pod picked it up before the idle window elapsed";var zo0=w(()=>{gp();RB();OB();dF();RK();O8();h5()});import{z as In}from"zod";var Po0;var bF$=w(()=>{C0();TQ();_3();zo0();Po0=c({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:In.object({}),outputSchema:In.object({items:In.array(Ky),repos:In.array(In.string())}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.list(X),{items:Y}=await Z.storage.connections.list(X,{slug:"mcp-github"}),G=mr1(Y);return fF$(Z,Q),{items:Q,repos:G}}})});import{z as $J}from"zod";function eD4($,Z){let X=[];for(let{field:G,action:J}of sD4){if(Z[G]===$[G])continue;X.push({action:J,data:{from:$[G],to:Z[G]}})}if(Z.description!==$.description)X.push({action:"description_changed"});let Q=new Set($.tags.map((G)=>G.id));if(Z.tags.length!==$.tags.length||Z.tags.some((G)=>!Q.has(G.id)))X.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return X}function $L4($,Z){if($!==n8)return!1;if(!Z)return!1;return Z.assigneeId!==n8?!0:Z.status==="todo"}function ZL4($,Z,X){return X&&$==="done"&&Z==="in_review"}var sD4,Ao0;var xF$=w(()=>{C0();_3();Fp0();cF();sX();Wy();h5();E3();sD4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}];Ao0=c({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:$J.object({id:$J.string(),title:$J.string().min(1).optional(),description:$J.string().nullable().optional(),status:C3.optional(),priority:hS.optional(),assigneeId:$J.string().nullable().optional(),repo:$J.string().nullable().optional(),dueDate:$J.string().datetime().nullable().optional(),sortOrder:$J.number().optional(),tagIds:$J.array($J.string()).optional(),linkThreadId:$J.string().optional()}),outputSchema:$J.object({item:Ky}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if($.assigneeId)await lO0(Z,X,$.assigneeId);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,X))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,X)}let Q=$.title!==void 0||$.description!==void 0||$.status!==void 0||$.priority!==void 0||$.assigneeId!==void 0||$.repo!==void 0||$.dueDate!==void 0||$.sortOrder!==void 0||$.tagIds!==void 0,Y=Q?await Z.storage.taskBoard.getById($.id,X):null;if(Q&&!Y)throw Error(`Task board item not found: ${$.id}`);let G=gS.getStore()!==void 0;if(ZL4($.status,Y?.status,G))throw Error("This task is In Review \u2014 a run can't move it to Done. Leave it in "+"in_review for the reviewer; only a person, or TASK_BOARD_REVIEW_DECISION on a reviewer's own run, completes a task under review.");let J=$.assigneeId!==void 0&&$.assigneeId!==(Y?.assigneeId??null),W=$L4($.assigneeId,Y);if(Y&&kQ(Y)){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(W)await O90(Z,Y,Rx())}if($.tagIds!==void 0){let H=await Z.storage.tags.listOrgTags(X),F=new Set(H.map((N)=>N.id));for(let N of $.tagIds)if(!F.has(N))throw Error(`Tag not found: ${N}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,G1(Z))}let K;if(Q)K=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:W?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId,assignedBy:J?$.assigneeId?G1(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder},G1(Z));else{let H=await Z.storage.taskBoard.getById($.id,X);if(!H)throw Error(`Task board item not found: ${$.id}`);K=H}if(Y){let H=G1(Z),F=eD4(Y,K);if(F.length>0)await mW$(Z,F.map((N)=>({taskBoardItemId:K.id,actorId:H,...N})))}if(Q||$.linkThreadId)F8(X,K);if(W)await TB(Z,K,{userInitiated:!0});return{item:K}}})});import{z as fw0}from"zod";var To0;var yF$=w(()=>{C0();h5();To0=c({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:fw0.object({id:fw0.string()}),outputSchema:fw0.object({success:fw0.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.taskBoard.delete($.id,X,G1(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return $K$(X,$.id),{success:!0}}})});import{z as UC}from"zod";var Ro0;var gF$=w(()=>{C0();in0();h5();Wy();Ro0=c({name:"TASK_BOARD_ITEM_PR_LINK",description:"Link the pull request you just opened to this run's task board item. Call this right after `gh pr create` succeeds, with the PR URL it printed. Reviewers (QA, code review) are dispatched from the linked PR, so a task whose PR is not linked never gets reviewed.",annotations:{title:"Link Pull Request to Task",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:UC.object({url:UC.string().describe("The pull request URL, e.g. https://github.com/owner/repo/pull/123")}),outputSchema:UC.object({url:UC.string(),prNumber:UC.number(),taskBoardItemIds:UC.array(UC.string())}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z).id,{threadId:Q}=cO0(),Y=hB0($.url);if(!Y)throw Error(`Not a GitHub pull request URL: ${$.url} (expected https://github.com/<owner>/<repo>/pull/<number>)`);let G=await tB0(Z,X,Q);for(let J of G)await Z.storage.taskBoard.linkPr({taskBoardItemId:J,organizationId:X,url:Y.url,prNumber:Y.number,repoOwner:Y.owner,repoName:Y.repo}),await Z.storage.taskBoard.clearSweepBudget(J,X);return{url:Y.url,prNumber:Y.number,taskBoardItemIds:G}}})});function uF$($){hF$=$}function bw0($){hF$?.broadcast($)}var hF$=null;import{DBOS as xw0}from"@dbos-inc/dbos-sdk";function XL4($,Z){let X=`thread-run:${Z}:`;if(!$.workflowID.startsWith(X))return null;let Q=$.input?.[0],Y=Q?.request;return{workflowId:$.workflowID,messageId:Y?.messageId??$.workflowID.slice(X.length),status:$.status==="PENDING"?"running":"queued",enqueuedAt:$.createdAt,...Q?.source!==void 0?{source:Q.source}:{}}}async function Io0($){return(await xw0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING","ENQUEUED"],loadInput:!0,loadOutput:!1})).map((X)=>XL4(X,$)).filter((X)=>X!==null).sort((X,Q)=>X.enqueuedAt-Q.enqueuedAt)}async function cF$($,Z){if(!Z.startsWith(`thread-run:${$}:`))return!1;return await xw0.cancelWorkflows([Z]),!0}async function by($){let Z=await xw0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING"],loadInput:!1,loadOutput:!1});if(Z.length===0)return;await xw0.cancelWorkflows(Z.map((X)=>X.workflowID))}var yw0=()=>{};function GL4($){return/\b405\b/.test($)&&/not allowed on this repository/i.test($)}function WL4($,Z={}){if($==="failing")return!0;if($==="pending")return!Z.allowPendingChecks;return!1}async function KL4($,Z,X,Q,Y){if(JL4.has(Q))return;let J=(await $.storage.taskBoard.listActivity(X,Z).catch(()=>[])).at(-1);if(J?.action==="merge_failed"&&J.data?.reason===Q)return;await C6($,{taskBoardItemId:X,action:"merge_failed",actorId:null,data:{reason:Q,...Y?{detail:Y}:{}}})}function HL4($){if(!$?.isError)return{kind:"merged"};let Z=JSON.stringify($?.content)??"";if(GL4(Z))return{kind:"method_not_allowed",detail:Z};if(Cw0(Z))return{kind:"rate_limited",detail:Z};return{kind:"refused",detail:Z}}async function FL4($,Z,X){let Q=await $.callTool({name:"merge_pull_request",arguments:{owner:Z.repoOwner,repo:Z.repoName,pullNumber:Z.number,merge_method:X}},void 0,{timeout:QL4});return HL4(Q)}async function qn($,Z,X,Q={}){let Y=async(N,U)=>{return await KL4($,Z,X,N,U),{merged:!1,reason:N,...U?{detail:U}:{}}},G=await $.storage.taskBoard.listPrs(X,Z),J=await kB($,Z,G);if(!J)return console.warn(`[task-board] merge skipped \u2014 no linked PR on ${X}`),Y("no_pr");let W=await VF$($,Z,J);if(WL4(W,Q))return console.warn(`[task-board] merge blocked \u2014 checks ${W} on PR #${J.number}`),Y(W==="failing"?"checks_failing":"checks_pending");let K=`${J.repoOwner}/${J.repoName}`,H=await NC($,Z,J.connectionId,{owner:J.repoOwner,name:J.repoName});if(!H)return console.warn("[task-board] merge blocked \u2014 no active GitHub connection for "+`${K} (PR #${J.number})`),Y("no_connection",K);let F=await F5(H,$,!0);try{let N=null;for(let U of YL4){let O=await FL4(F,J,U);if(O.kind==="merged")return TF$(H.id),{merged:!0};if(O.kind==="rate_limited")return console.warn(`[task-board] merge rate-limited on PR #${J.number} \u2014 sweep retries`),Y("rate_limited",O.detail.slice(0,500));if(O.kind==="method_not_allowed"){console.warn(`[task-board] merge method '${U}' not allowed on ${K} \u2014 trying next`),N=O.detail;continue}return console.error(`[task-board] merge refused by GitHub on PR #${J.number}:`,O.detail),Y("refused",O.detail.slice(0,500))}return console.error(`[task-board] no merge method allowed on ${K} (PR #${J.number})`,N),Y("refused",N?.slice(0,500))}catch(N){let U=N instanceof Error?N.message:String(N);if(Cw0(N))return Y("rate_limited",U);return console.error("[task-board] merge PR failed",N),Y("error",U)}finally{await F.close().catch(()=>{})}}async function Mn($,Z,X){let Q=await $.storage.organizationSettings.get(Z),Y=DF(Q?.flags),G=await $.storage.taskBoard.listActivity(X,Z);return fO(G,Y,{verifiedOnly:!0})}async function NL4($,Z){let X=await $.storage.organizationSettings.get(Z.organizationId),Q=DF(X?.flags),Y=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);if(!ya1(Y,Q))return;await qK($,Z,"every reviewer approved, but an approval could not be verified \u2014 "+"auto-merge is blocked and no reviewer can be re-dispatched this cycle")}function lF$($){return!$.merged&&$.reason==="refused"}function qo0($,Z){if($!==null)return $;if(Z===null||!lF$(Z))return null;return(Z.detail??"").toLowerCase().includes("merge conflict")?!0:null}async function UL4($,Z,X){if(!lF$(X))return;let Q=Z.organizationId,Y=await $.storage.taskBoard.listPrs(Z.id,Q),G=await kB($,Q,Y);if(!G)return;await _y($,Q,Z,{pr:{number:G.number,url:G.url},conflict:qo0(await fy($,Q,G),X)}).catch((J)=>{console.error("[task-board] sweep conflict auto-resolve failed",J)})}async function dF$($,Z){let X=Z.organizationId;if(Z.status!=="in_review")return!1;if((await $.storage.organizationSettings.get(X))?.flags?.auto_merge!==!0)return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,X))return!1;if(!await Mn($,X,Z.id))return await NL4($,Z),!1;let Y=await qn($,X,Z.id);if(!Y.merged)return await UL4($,Z,Y),!1;let G=await $.storage.taskBoard.update(Z.id,X,{status:"done"},Z.updatedBy);return await C6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done"}}),F8(X,G),!0}var QL4=15000,YL4,JL4;var kn=w(()=>{HF();E9();sX();zn();kK();h5();YL4=["merge","squash","rebase"];JL4=new Set(["checks_pending"])});import{z as xy}from"zod";function BL4($){return $.threads.filter((Z)=>Z.status!==null&&!Hn.has(Z.status)).map((Z)=>Z.threadId)}async function wL4($,Z,X){let Q=(G)=>(J)=>console.error("[task-board] rerun takeover step failed",{threadId:Z,step:G,err:J});await $.storage.threads.setCancelRequested(Z,X).catch(Q("cancel-flag")),await qy(Z).catch(Q("background-jobs")),await by(Z).catch(Q("gate-head"));let Y=await $.storage.threads.getRunFence(Z).catch(()=>null);if(Y)await FC(Z,Y).catch(Q("hosted-harness"));bw0(Z)}function DL4($,Z){return $===!0&&Ko0(Z)}async function LL4($,Z,X){let Q=Z.organizationId,Y=await $.storage.taskBoard.listPrs(Z.id,Q).catch(()=>[]),G=await kB($,Q,Y).catch(()=>{return});if(!G)return!1;let J=await fy($,Q,G).catch(()=>null);return DL4(J,X)}function jL4($,Z){let X=LF($),Q=0;for(let Y of $){if(Y.action!=="review_approved")continue;let G=new Date(Y.occurredAt).getTime();if(G>=X)Q=Math.max(Q,G)}return Z-Q>=EL4}async function zL4($,Z){if(Z.status!=="in_review")return;if((await $.storage.organizationSettings.get(Z.organizationId))?.flags?.auto_merge!==!0)return;if(!await Mn($,Z.organizationId,Z.id))return;let Y=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId).catch(()=>[]);if(jL4(Y,Date.now()))return;if(await LL4($,Z,Y))return;throw Error("Every reviewer approved this task and its merge is retrying \u2014 re-running "+"would throw that away and start a new review cycle. Wait for the merge, or use the ship button if the PR needs a nudge.")}var OL4="Superseded by a manual re-run of this task",EL4=900000,Mo0;var mF$=w(()=>{C0();E9();RK();dF();yw0();My();sX();h5();cF();kn();kK();zn();E3();Mo0=c({name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task board item with the Super Agent, whatever lane it is in. Use this to retry a task that stalled, finished without doing the job, or is already assigned to the Super Agent (in which case re-assigning it does nothing). Fails any run still holding the task open, moves it to In Progress, and queues a fresh run.",annotations:{title:"Re-run Task",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:xy.object({id:xy.string().describe("The task board item to re-run.")}),outputSchema:xy.object({status:xy.string().describe("The task's lane after the re-run was queued."),supersededThreadIds:xy.array(xy.string()).describe("Runs that were failed to make room for this one.")}),handler:async({id:$},Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X);if(!Q)throw Error(`Task board item not found: ${$}`);if(Q.assigneeId!==n8)throw Error("Only a task assigned to the Super Agent can be re-run. Assign it to "+"the Super Agent instead \u2014 that queues a run by itself.");await zL4(Z,Q),await O90(Z,Q,Rx());let Y=[];for(let J of BL4(Q)){if(!await Z.storage.threads.failIfNotTerminal(J,OL4,"superseded"))continue;Y.push(J),await wL4(Z,J,X)}let G=await Z.storage.taskBoard.update($,X,{status:"in_progress"},G1(Z));return await C6(Z,{taskBoardItemId:$,action:"status_changed",actorId:G1(Z),data:{from:Q.status,to:"in_progress",reason:"rerun"}}),F8(X,G),await iF(Z,G,{userInitiated:!0}),{status:G.status,supersededThreadIds:Y}}})});import{z as VB}from"zod";function PL4($,Z,X){return $!==null&&$.reviewer===Z&&$.cycleAt.getTime()===X}function AL4($,Z){return Bl0($).get(Z)==="changes_requested"}var ko0;var iF$=w(()=>{C0();E9();_3();sX();h5();cF();kn();kK();Qo0();zn();E3();ko0=c({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:VB.object({taskBoardItemId:VB.string(),reviewer:VB.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:VB.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:VB.enum(["approve","request_changes"]),notes:VB.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:VB.object({status:C3,merged:VB.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:$,reviewer:Z,reviewToken:X,decision:Q,notes:Y},G)=>{r(G),await G.access.check();let J=G.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let W=await G.storage.taskBoard.getById($,J);if(!W)throw Error(`Task board item not found: ${$}`);let K=X?LF(await G.storage.taskBoard.listActivity($,J)):0,H=!!X&&(BF$(X,$,Z,new Date(K))||PL4(await G.storage.taskBoard.resolveReviewClaimByToken($,X),Z,K));if(Q==="request_changes"){let j=await G.storage.taskBoard.listActivity($,J);if(AL4(j,Z))return{status:W.status,merged:!1};if(ha1(j))return await C6(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:H,bounceLimitReached:!0}}),await qK(G,W,`${wl0} review bounces reached \u2014 the reviewer and the `+"Super Agent are not converging"),{status:(await G.storage.taskBoard.getById($,J)??W).status,merged:!1};let z=await G.storage.taskBoard.claimReviewChangesBounce($,J,W.updatedBy);if(await C6(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:H}}),!z)return{status:(await G.storage.taskBoard.getById($,J)??W).status,merged:!1};F8(J,z);let A=await G.storage.taskBoard.listPrs($,J),P=await kB(G,J,A);return await iF(G,z,{feedback:`${Tx[Z]}: ${Y}`,pr:P?{number:P.number,url:P.url}:void 0}).catch(async(M)=>{if(await rB0(G,z,M)){await G.storage.taskBoard.update(z.id,J,{status:"in_review"},"system").then((q)=>F8(J,q)).catch((q)=>console.error("[task-board] runs-exhausted status revert failed",q));return}if(M instanceof n7)throw M;console.error("[task-board] request_changes re-enqueue failed",M)}),{status:z.status,merged:!1}}if(await C6(G,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Y,verified:H}}),!await Mn(G,J,$)){let j=await G.storage.taskBoard.getById($,J)??W;return F8(J,j),{status:j.status,merged:!1}}let U=(await G.storage.organizationSettings.get(J))?.flags?.auto_merge===!0,O=await G.storage.taskBoard.hasHumanRejectedDone($,J),B=U&&!O,D=B?await qn(G,J,$):null;if(D?.merged===!0){let j=await G.storage.taskBoard.update($,J,{status:"done"},W.updatedBy);return await C6(G,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:W.status,to:"done"}}),F8(J,j),{status:j.status,merged:!0}}let E=await G.storage.taskBoard.getById($,J)??W;if(B){let j=await G.storage.taskBoard.listPrs($,J),z=await kB(G,J,j);if(z?await _y(G,J,E,{pr:{number:z.number,url:z.url},conflict:qo0(await fy(G,J,z),D)}).catch((P)=>{if(P instanceof n7)throw P;return console.error("[task-board] conflict auto-resolve failed",P),!1}):!1)return{status:(await G.storage.taskBoard.getById($,J)??E).status,merged:!1}}return F8(J,E),{status:E.status,merged:!1}}})});import{z as gw0}from"zod";function TL4($,Z,X){if($!=="in_review")return!1;return X.length===0||fO(Z,X)}var Vo0;var pF$=w(()=>{C0();E9();_3();sX();h5();kn();Vo0=c({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:gw0.object({taskBoardItemId:gw0.string()}),outputSchema:gw0.object({status:C3,merged:gw0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X);if(!Q)throw Error(`Task board item not found: ${$}`);let Y=await Z.storage.organizationSettings.get(X),G=DF(Y?.flags),J=await Z.storage.taskBoard.listActivity($,X);if(!TL4(Q.status,J,G))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!(await qn(Z,X,$,{allowPendingChecks:!0})).merged){let H=await Z.storage.taskBoard.getById($,X)??Q;return F8(X,H),{status:Q.status,merged:!1}}let K=await Z.storage.taskBoard.update($,X,{status:"done"},Q.updatedBy);if(Q.status!=="done")await C6(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Q.status,to:"done"}});return F8(X,K),{status:K.status,merged:!0}}})});import{z as ZJ}from"zod";function nF$($){if(!$)throw Error("Organization ID required (no active organization in context)");return $}var RL4,So0,Co0;var tF$=w(()=>{C0();RL4=ZJ.object({externalKey:ZJ.string(),dismissedBy:ZJ.string(),dismissedAt:ZJ.string()});So0=c({name:"TASK_BOARD_DISMISSED_LIST",description:"List the diagnostic findings this organization has dismissed by deleting their task board cards. The import skips these until they're restored.",annotations:{title:"List Dismissed Findings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZJ.object({}),outputSchema:ZJ.object({findings:ZJ.array(RL4)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=nF$(Z.organization?.id);return{findings:await Z.storage.taskBoard.listDismissedFindings(X)}}}),Co0=c({name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss diagnostic findings, returning their cards to the board. Omit externalKeys to restore every dismissed finding.",annotations:{title:"Restore Dismissed Findings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZJ.object({externalKeys:ZJ.array(ZJ.string()).optional()}),outputSchema:ZJ.object({restored:ZJ.number()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=nF$(Z.organization?.id);return{restored:await Z.storage.taskBoard.restoreDismissedFindings(X,$.externalKeys)}}})});import{z as m6}from"zod";function hw0($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}function qL4($,Z,X){return $.replace(IL4,(Q,Y,G,J)=>{let W=encodeURIComponent(`${Z}/${G}`);return`${Y}/api/${encodeURIComponent(X)}/fs/outputs/read?path=${W}${J}`})}var _o0,vo0,IL4,fo0,bo0,xo0;var oF$=w(()=>{C0();E9();pB0();Wy();_o0=m6.object({id:m6.string(),taskBoardItemId:m6.string(),parentId:m6.string().nullable(),authorId:m6.string(),body:m6.string(),resolved:m6.boolean(),createdAt:m6.string(),updatedAt:m6.string()});vo0=c({name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comments (flat, oldest first; replies carry parentId).",annotations:{title:"List Task Comments",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:m6.object({taskBoardItemId:m6.string()}),outputSchema:m6.object({comments:m6.array(_o0)}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{comments:await Z.storage.taskBoard.listComments($.taskBoardItemId,hw0(Z))}}}),IL4=/(!\[[^\]]*\]\()org\/output\/([^)\s]+)(\))/g;fo0=c({name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment on a task board item, or a reply to one.",annotations:{title:"Create Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:m6.object({taskBoardItemId:m6.string(),body:m6.string().trim().min(1),parentId:m6.string().nullish()}),outputSchema:m6.object({comment:_o0}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=hw0(Z),Q=gS.getStore(),Y=Z.organization?.slug,G=Q?.threadId&&Y?qL4($.body,Q.threadId,Y):$.body,J=await Z.storage.taskBoard.createComment({taskBoardItemId:$.taskBoardItemId,organizationId:X,parentId:$.parentId??null,authorId:Q?n8:G1(Z),body:G});if(!J)throw Error("Task board item not found");return await Xt0(Z,{commentId:J.id,taskBoardItemId:J.taskBoardItemId,organizationId:X,authorLabel:Q?"Super Agent":Z.auth?.user?.name??Z.auth?.user?.email??"Studio",body:J.body}),{comment:J}}}),bo0=c({name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit your own comment's body, or resolve/unresolve a comment thread (root only, any org member may toggle it).",annotations:{title:"Update Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:m6.object({id:m6.string(),body:m6.string().trim().min(1).optional(),resolved:m6.boolean().optional()}),outputSchema:m6.object({comment:_o0}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:hw0(Z),callerId:G1(Z),body:$.body,resolved:$.resolved});if(!X)throw Error("Comment not found, or you can only edit your own comments");return{comment:X}}}),xo0=c({name:"TASK_BOARD_COMMENT_DELETE",description:"Delete your own comment. Deleting a thread root deletes its replies too.",annotations:{title:"Delete Task Comment",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:m6.object({id:m6.string()}),outputSchema:m6.object({success:m6.boolean()}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{success:await Z.storage.taskBoard.deleteComment($.id,hw0(Z),G1(Z))}}})});var rF$=w(()=>{eQ$();vF$();bF$();xF$();yF$();kK();gF$();mF$();iF$();pF$();sX();tF$();oF$()});import{z as nF}from"zod";var yo0;var aF$=w(()=>{C0();yo0=c({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:nF.object({}),outputSchema:nF.object({tags:nF.array(nF.object({id:nF.string(),organizationId:nF.string(),name:nF.string(),color:nF.string().nullable(),createdAt:nF.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{tags:(await Z.storage.tags.listOrgTags(X.id)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as VK}from"zod";var go0;var sF$=w(()=>{C0();go0=c({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:VK.object({name:VK.string().min(1).max(50).describe("Tag name"),color:VK.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:VK.object({tag:VK.object({id:VK.string(),organizationId:VK.string(),name:VK.string(),color:VK.string().nullable(),createdAt:VK.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.tags.createTag(X.id,$.name,$.color);return{tag:{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}}}})});import{z as uw0}from"zod";var ho0;var eF$=w(()=>{C0();ho0=c({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uw0.object({tagId:uw0.string().describe("Tag ID to delete")}),outputSchema:uw0.object({success:uw0.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.tags.getTag($.tagId);if(!Q)throw Error("Tag not found");if(Q.organizationId!==X.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as SK}from"zod";var uo0;var $N$=w(()=>{C0();uo0=c({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:SK.object({memberId:SK.string().describe("Member ID")}),outputSchema:SK.object({tags:SK.array(SK.object({id:SK.string(),organizationId:SK.string(),name:SK.string(),color:SK.string().nullable(),createdAt:SK.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});import{z as XJ}from"zod";var co0;var ZN$=w(()=>{C0();co0=c({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:XJ.object({memberId:XJ.string().describe("Member ID"),tagIds:XJ.array(XJ.string()).describe("Array of tag IDs to assign")}),outputSchema:XJ.object({success:XJ.boolean(),tags:XJ.array(XJ.object({id:XJ.string(),organizationId:XJ.string(),name:XJ.string(),createdAt:XJ.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let G of $.tagIds){let J=await Z.storage.tags.getTag(G);if(!J)throw Error(`Tag not found: ${G}`);if(J.organizationId!==X.id)throw Error(`Tag does not belong to this organization: ${G}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});var XN$=w(()=>{aF$();sF$();eF$();$N$();ZN$()});import{z as QN$}from"zod";function CL4($,Z){let X=$?.[Z];if(!X)return;return Object.entries(X).sort(([,Y],[,G])=>{let J=Math.max(0,...Object.values(Y).map((K)=>K.createdAt??0));return Math.max(0,...Object.values(G).map((K)=>K.createdAt??0))-J})[0]?.[0]}var VL4,SL4,lo0;var YN$=w(()=>{M4();C0();eS();vX();VL4=QN$.object({data:BW$.describe("Data for the new thread (id is auto-generated if not provided)")}),SL4=QN$.object({item:AK.describe("The created thread entity")});lo0=c({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:VL4,outputSchema:SL4,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=G1(Z);if(!Q)throw Error("User ID required to create thread");let{data:Y}=$,G=Y.id??m8("thrd"),W=(await SB0(Z.storage.virtualMcps,Y.virtual_mcp_id,X.id)).metadata,K=W?.githubRepo,H=null;if(K)H=Y.branch??CL4(W?.sandboxMap,Q)??bO0(fO0(Z.auth.user));let F=await Z.storage.threads.create({id:G,organization_id:X.id,title:Y.title,description:Y.description,virtual_mcp_id:Y.virtual_mcp_id,branch:H,created_by:Q,...Y.runtime?{metadata:{runtime:Y.runtime}}:{}});if(F.isNew)y1.capture({distinctId:Q,event:"chat_started",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:G,has_title:!!$.data.title,created_via:"tool"}});return{item:aG(F)}}})});import{z as do0}from"zod";var _L4,vL4,mo0;var GN$=w(()=>{M4();C0();eS();vB0();_L4=do0.object({id:do0.string().describe("ID of the thread to update"),data:wW$.describe("Partial thread data to update")}),vL4=do0.object({item:AK.describe("The updated thread entity")}),mo0=c({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:_L4,outputSchema:vL4,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=G1(Z);if(!Q)throw Error("User ID required to update thread");let{id:Y,data:G}=$,J=await Z.storage.threads.get(Y);if(!J)throw Error("Thread not found in organization");if(G.virtual_mcp_id!==void 0)await SB0(Z.storage.virtualMcps,G.virtual_mcp_id,X.id);if(G.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,X.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let W={title:G.title,description:G.description,hidden:G.hidden,updated_by:Q};if(G.status)W.status=G.status;if(G.metadata!==void 0){let H=Cn0(J.metadata?.runtime);W.metadata=H?{...G.metadata,runtime:H}:G.metadata}if(G.branch!==void 0)W.branch=G.branch;if(G.virtual_mcp_id!==void 0)W.virtual_mcp_id=G.virtual_mcp_id;let K=await Z.storage.threads.update(Y,W);if(G.hidden!==void 0&&G.hidden!==J.hidden)y1.capture({distinctId:Q,event:G.hidden?"chat_archived":"chat_unarchived",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Y}});return{item:aG(K)}}})});var io0;var JN$=w(()=>{bG();eS();M4();C0();dF();yw0();My();io0=c({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:Hi,outputSchema:Fi(AK),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.threads.get($.id);if(!Q)throw Error(`Thread not found: ${$.id}`);if(Q.status==="in_progress"){let G=(W)=>(K)=>console.error("[thread] delete-time run cancel step failed",{threadId:$.id,step:W,err:K});await qy($.id).catch(G("background-jobs")),await by($.id).catch(G("gate-head"));let J=await Z.storage.threads.getRunFence($.id).catch(()=>null);if(J)await FC($.id,J).catch(G("hosted-harness"));bw0($.id)}await Z.storage.threads.delete($.id);let Y=G1(Z);if(Y)y1.capture({distinctId:Y,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:aG(Q)}}})});var WN$=w(()=>{YN$();_n0();vn0();GN$();JN$();fn0()});function bL4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function xL4($){return $.map((Z)=>{let X=Z.metadata;if(X?.tiptapDoc)return Z;let Q=Z.parts.find((Y)=>Y.type==="text"&&typeof Y.text==="string");if(!Q?.text||typeof Q.text!=="string")return Z;return{...Z,metadata:{...X,tiptapDoc:bL4(Q.text)}}})}function cw0($){let Z;if(typeof $==="string")try{let X=JSON.parse($);if(Array.isArray(X)&&X.length>0&&X[0]?.role&&Array.isArray(X[0]?.parts))Z=X;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return xL4(Z)}import{z as i6}from"zod";var po0;var KN$=w(()=>{M4();C0();IQ();po0=c({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:i6.object({name:i6.string().min(1).max(255),virtual_mcp_id:i6.string(),messages:i6.union([i6.string(),i6.array(i6.looseObject({id:i6.string().optional(),role:i6.enum(["user","assistant","system"]),parts:i6.array(i6.record(i6.string(),i6.unknown())),metadata:i6.unknown().optional()}))]),models:i6.object({tier:SO,modelId:i6.string().optional(),credentialId:i6.string().optional()}).loose().default({tier:"smart"}),tools:i6.array(i6.string()).nullable().optional(),maxAgentSteps:i6.number().int().min(1).max(100).nullable().optional(),temperature:i6.number().default(0.5),active:i6.boolean().default(!0)}),outputSchema:i6.object({id:i6.string(),name:i6.string(),active:i6.boolean(),created_at:i6.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=G1(Z);if(!Q)throw Error("Unable to determine user identity");let Y=cw0($.messages),G=await Z.storage.automations.create({organization_id:X.id,created_by:Q,name:$.name,messages:JSON.stringify(Y),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 y1.capture({distinctId:Q,event:"automation_created",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:G.id,virtual_mcp_id:$.virtual_mcp_id,active:G.active,tier:$.models.tier}}),{id:G.id,name:G.name,active:G.active,created_at:G.created_at}}})});import{z as _6}from"zod";var no0;var HN$=w(()=>{C0();no0=c({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:_6.object({id:_6.string()}),outputSchema:_6.object({automation:_6.object({id:_6.string(),name:_6.string(),active:_6.boolean(),created_by:_6.string(),created_at:_6.string(),updated_at:_6.string(),virtual_mcp_id:_6.string(),messages:_6.unknown(),models:_6.unknown(),tools:_6.array(_6.string()).nullable(),maxAgentSteps:_6.number().nullable(),temperature:_6.number(),triggers:_6.array(_6.object({id:_6.string(),type:_6.enum(["cron","event","webhook"]),cron_expression:_6.string().nullable(),connection_id:_6.string().nullable(),event_type:_6.string().nullable(),params:_6.unknown().nullable(),last_run_at:_6.string().nullable(),api_key_id:_6.string().nullable(),created_at:_6.string()}))}).nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.id,X.id);if(!Q)return{automation:null};let Y=await Z.storage.automations.listTriggers(Q.id);return{automation:{id:Q.id,name:Q.name,active:Q.active,created_by:Q.created_by,created_at:Q.created_at,updated_at:Q.updated_at,virtual_mcp_id:Q.virtual_mcp_id,messages:JSON.parse(Q.messages),models:JSON.parse(Q.models),tools:Q.tools?JSON.parse(Q.tools):null,maxAgentSteps:Q.max_agent_steps,temperature:Q.temperature,triggers:Y.map((G)=>({id:G.id,type:G.type,cron_expression:G.cron_expression,connection_id:G.connection_id,event_type:G.event_type,params:G.params?JSON.parse(G.params):null,last_run_at:G.last_run_at,api_key_id:G.api_key_id,created_at:G.created_at}))}}}})});import{z as pY}from"zod";var to0;var FN$=w(()=>{C0();to0=c({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:pY.object({virtual_mcp_id:pY.string().optional().nullable()}),outputSchema:pY.object({automations:pY.array(pY.object({id:pY.string(),name:pY.string(),active:pY.boolean(),created_by:pY.string(),created_at:pY.string(),trigger_count:pY.number(),nearest_next_run_at:pY.string().nullable(),virtual_mcp_id:pY.string()}))}),handler:async($,Z)=>{r(Z);let X=t(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(X.id,$.virtual_mcp_id)).map((G)=>({id:G.id,name:G.name,active:G.active,created_by:G.created_by,created_at:G.created_at,trigger_count:G.trigger_count,nearest_next_run_at:G.nearest_next_run_at,virtual_mcp_id:G.virtual_mcp_id}))}}})});function gL4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((X)=>typeof X==="string"))return Z.length>0?Z:null}catch{}return null}function NN$($){return`${$}:context`}function UN$($,Z,X,Q,Y){let J=JSON.parse($.messages).map((H,F)=>({...H,id:`${X}:${F}`})),W=Z?{...Y,[mO0]:yL4}:Y;return{messages:J,models:{credentialId:Q.credentialId,thinking:Q.thinking,...Q.image?{image:Q.image}:{},...Q.webSearch?{webSearch:Q.webSearch}:{},...Q.deepResearch?{deepResearch:Q.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:gL4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",triggerId:Z??void 0,...W?{runMetadata:W}:{},taskId:X}}var yL4="new_task";var ON$=w(()=>{hp()});function JX($,Z,X,Q,Y,G,J,W){return JX.fromTZ(JX.tp($,Z,X,Q,Y,G,J),W)}function oo0($,Z=new Date){let X=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],Q=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${Q} GMT`)-Date.parse(`${Q} ${X}`)}function hL4($,Z){let X=new Date(Date.parse($));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let Q=$.substring(9);return $.includes("Z")||Q.includes("-")||Q.includes("+")?JX.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):JX.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function uL4($){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 QJ($.startAt,$.timezone)),$.stopAt&&($.stopAt=new QJ($.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 Vn($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function cL4($){return Vn($)}function lL4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var ro0=32,Sn,LN$,BN$=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 QJ(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,Sn),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,X,Q){let Y=this[$],G=$==="day"&&this.lastDayOfMonth;if(Z===""&&!G)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Y.fill(Q);let J=Z.split(",");if(J.length>1)for(let W=0;W<J.length;W++)this.partToArray($,J[W],X,Q);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,X,Q):Z.indexOf("-")!==-1?this.handleRange(Z,$,X,Q):Z.indexOf("/")!==-1?this.handleStepping(Z,$,X,Q):Z!==""&&this.handleNumber(Z,$,X,Q)}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,X,Q){let Y=this.extractNth($,Z),G=parseInt(Y[0],10)+X;if(isNaN(G))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,G,Y[1]||Q)}setPart($,Z,X){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,X);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]=X}handleRangeWithStepping($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(G===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,W,K]=G,H=parseInt(J,10)+X,F=parseInt(W,10)+X,N=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(N))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(N===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(N>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 U=H;U<=F;U+=N)this.setPart(Z,U,Y[1]||Q)}extractNth($,Z){let X=$,Q;if(X.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");Q=X.split("#")[1],X=X.split("#")[0]}return[X,Q]}handleRange($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].split("-");if(G.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(G[0],10)+X,W=parseInt(G[1],10)+X;if(isNaN(J))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(J>W)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let K=J;K<=W;K++)this.setPart(Z,K,Y[1]||Q)}handleStepping($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].split("/");if(G.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");G[0]===""&&(G[0]="*");let J=0;G[0]!=="*"&&(J=parseInt(G[0],10)+X);let W=parseInt(G[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=J;K<this[Z].length;K+=W)this.setPart(Z,K,Y[1]||Q)}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[$]|ro0;else if(Z===Sn)this.dayOfWeek[$]=Sn;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|LN$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},wN$,tF,QJ=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,X){if(this.tz=X,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,X,Q,Y){let G=new Date(Date.UTC(Z,X,Q)).getUTCDay(),J=0;for(let W=1;W<=Q;W++)new Date(Date.UTC(Z,X,W)).getUTCDay()===G&&J++;if(Y&Sn&&LN$[J-1]&Y)return!0;if(Y&ro0){let W=new Date(Date.UTC(Z,X+1,0)).getUTCDate();for(let K=Q+1;K<=W;K++)if(new Date(Date.UTC(Z,X,K)).getUTCDay()===G)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 X=JX.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.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>wN$[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 X=JX.fromTZISO(Z);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(JX.fromTZISO(Z,this.tz))}findNext(Z,X,Q,Y){let G=this[X],J;Q.lastDayOfMonth&&(this.month!==1?J=wN$[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let W=!Q.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[X]+Y;K<Q[X].length;K++){let H=Q[X][K];if(X==="day"&&Q.lastDayOfMonth&&K-Y==J&&(H=1),X==="day"&&!Q.starDOW){let F=Q.dayOfWeek[(W+(K-Y-1))%7];if(F&&F&Sn)F=this.isNthWeekdayOfMonth(this.year,this.month,K-Y,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);Z.legacyMode&&!Q.starDOM?H=H||F:H=H&&F}if(H)return this[X]=K-Y,G!==this[X]?2:1}return 3}recurse(Z,X,Q){let Y=this.findNext(X,tF[Q][0],Z,tF[Q][2]);if(Y>1){let G=Q+1;for(;G<tF.length;)this[tF[G][0]]=-tF[G][2],G++;if(Y===3)return this[tF[Q][1]]++,this[tF[Q][0]]=-tF[Q][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,Q-1)}return Q+=1,Q>=tF.length?this:this.year>=3000?null:this.recurse(Z,X,Q)}increment(Z,X,Q){return this.second+=X.interval!==void 0&&X.interval>1&&Q?X.interval:1,this.ms=0,this.apply(),this.recurse(Z,X,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)):JX.fromTZ(JX.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},DN$=30000,lw0,dw0=class{name;options;_states;fn;constructor($,Z,X){let Q,Y;if(Vn(Z))Y=Z;else if(typeof Z=="object")Q=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(Vn(X))Y=X;else if(typeof X=="object")Q=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=Q?.name,this.options=uL4(Q),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:Q?Q.maxRuns:void 0,paused:Q?Q.paused:!1,pattern:new BN$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new QJ($,this.options.timezone||this.options.utcOffset):this._states.pattern=new BN$($,this.options.timezone),this.name){if(lw0.find((G)=>G.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");lw0.push(this)}return Y!==void 0&&cL4(Y)&&(this.fn=Y,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 X=[],Q=Z||this._states.currentRun||void 0;for(;$--&&(Q=this.nextRun(Q));)X.push(Q);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,X=this.fn!==void 0,Q=!this._states.kill;return Z&&X&&Q&&$!==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 QJ||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new QJ($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=lw0.indexOf(this);$>=0&&lw0.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(),X=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||X===null?this:(Z>DN$&&(Z=DN$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&lL4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new QJ(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){Vn(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new QJ($,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,X=!this._states.paused&&Z.getTime()>=$.getTime(),Q=this._states.blocking&&this.options.protect;X&&!Q?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&Q&&Vn(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),X=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),X=!$),$=new QJ($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let Q=this._states.once||new QJ($,this.options.timezone||this.options.utcOffset);return!X&&Q!==this._states.once&&(Q=Q.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||Q===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&Q.getTime()>=this.options.stopAt.getTime()?null:Q}_calculatePreviousRun($,Z){let X=new QJ(void 0,this.options.timezone||this.options.utcOffset),Q=$;if(this.options.startAt.getTime()<=X.getTime()){Q=this.options.startAt;let Y=Q.getTime()+this.options.interval*1000;for(;Y<=X.getTime();)Q=new QJ(Q,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Y=Q.getTime()+this.options.interval*1000;Z=!0}return Q===null&&(Q=void 0),[Q,Z]}};var ao0=w(()=>{JX.fromTZISO=($,Z,X)=>JX.fromTZ(hL4($,Z),X);JX.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),Q=oo0($.tz,X),Y=new Date(X.getTime()-Q),G=oo0($.tz,Y);if(G-Q===0)return Y;{let J=new Date(X.getTime()-G),W=oo0($.tz,J);if(W-G===0)return J;if(!Z&&W-G>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Y}};JX.toTZ=function($,Z){let X=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),Q=new Date(X);return{y:Q.getFullYear(),m:Q.getMonth()+1,d:Q.getDate(),h:Q.getHours(),i:Q.getMinutes(),s:Q.getSeconds(),tz:Z}};JX.tp=($,Z,X,Q,Y,G,J)=>({y:$,m:Z,d:X,h:Q,i:Y,s:G,tz:J});JX.minitz=JX;Sn=31|ro0,LN$=[1,2,4,8,16],wN$=[31,28,31,30,31,30,31,31,30,31,30,31],tF=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];lw0=[]});function mw0($,Z){try{return new dw0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var so0=w(()=>{ao0()});import{DBOS as O7,SchedulerMode as dL4}from"@dbos-inc/dbos-sdk";async function Qr0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
1546
+ `)}async function tD4($,Z,X){let Q=Z.organizationId,Y=await $X($,"smart"),G=X.virtual_mcp_id??dD(Q),J={id:`stall-nudge-${Z.id}-${X.id}`,role:"user",parts:[{type:"text",text:nD4(X.harness_id)}]};await new GX({storage:$.storage.threads.messageParts(),orgId:Q,threadId:X.id,runId:X.id}).emitRequestMessage(J),await lF({threadId:X.id,source:"background-tool",request:{messages:[J],models:{credentialId:Y.credentialId,thinking:{id:Y.modelId,title:Y.modelMeta.title}},agent:{id:G},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:Q,userId:Z.assignedBy??Z.createdBy,harnessId:X.harness_id==="claude-code"?"claude-code":"decopilot",sandboxProviderKind:"agent-sandbox",...X.branch?{branch:X.branch}:{},taskId:X.id,runMetadata:dO0(Z)}},{workflowID:`stall-nudge:${Z.id}:${X.id}`})}async function oD4($,Z){let X=await $.storage.threads.get(Z);if(!X)return{action:"none",thread:null};return{action:pD4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id,sandboxProviderKind:X.sandbox_provider_kind}),thread:X}}function rD4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return Gn($,Z)}async function aD4($,Z){let X=[];for(let Q of Z.threads){if(Q.status!=="in_progress")continue;let Y=await $.storage.threads.get(Q.threadId);if(!Y||!rD4(Y))continue;if(await $.storage.threads.markRunFailed(Q.threadId,jo0,"abandoned"))X.push(Q.threadId),console.warn(`[task-board] failed never-started thread ${Q.threadId} on ${Z.id}`)}return X}async function fF$($,Z){let X=$.organization?.id;if(!X)return;for(let Q of Z){if(Q.status==="in_progress")try{if((await aD4($,Q)).length>0)continue}catch(J){console.error(`[task-board] reaping threads for ${Q.id} failed`,J)}let Y;try{Y=Q.repo!=null&&(await $.storage.taskBoard.listPrs(Q.id,X)).length>0}catch(J){console.error(`[task-board] listPrs for ${Q.id} failed`,J);continue}if(!mn0(Q,Y))continue;let G=Q.threads.find((J)=>J.hasMessages);if(!G)continue;try{let{action:J,thread:W}=await oD4($,G.threadId);if(J==="none"||!W)continue;if(J==="advance")await Ty($.storage.taskBoard,G.threadId,X,$.storage.organizationBilling);else await tD4($,Q,W)}catch(J){console.error(`[task-board] stall recovery failed for ${Q.id}`,J)}}}var jo0="Run never started \u2014 no pod picked it up before the idle window elapsed";var zo0=w(()=>{gp();RB();OB();dF();RK();O8();h5()});import{z as In}from"zod";var Po0;var bF$=w(()=>{C0();TQ();_3();zo0();Po0=c({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:In.object({}),outputSchema:In.object({items:In.array(Ky),repos:In.array(In.string())}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.list(X),{items:Y}=await Z.storage.connections.list(X,{slug:"mcp-github"}),G=mr1(Y);return fF$(Z,Q),{items:Q,repos:G}}})});import{z as $J}from"zod";function eD4($,Z){let X=[];for(let{field:G,action:J}of sD4){if(Z[G]===$[G])continue;X.push({action:J,data:{from:$[G],to:Z[G]}})}if(Z.description!==$.description)X.push({action:"description_changed"});let Q=new Set($.tags.map((G)=>G.id));if(Z.tags.length!==$.tags.length||Z.tags.some((G)=>!Q.has(G.id)))X.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return X}function $L4($,Z){if($!==n8)return!1;if(!Z)return!1;return Z.assigneeId!==n8?!0:Z.status==="todo"}function ZL4($,Z,X){return X&&$==="done"&&Z==="in_review"}var sD4,Ao0;var xF$=w(()=>{C0();_3();Fp0();cF();sX();Wy();h5();E3();sD4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}];Ao0=c({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:$J.object({id:$J.string(),title:$J.string().min(1).optional(),description:$J.string().nullable().optional(),status:C3.optional(),priority:hS.optional(),assigneeId:$J.string().nullable().optional(),repo:$J.string().nullable().optional(),dueDate:$J.string().datetime().nullable().optional(),sortOrder:$J.number().optional(),tagIds:$J.array($J.string()).optional(),linkThreadId:$J.string().optional()}),outputSchema:$J.object({item:Ky}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if($.assigneeId)await lO0(Z,X,$.assigneeId);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,X))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,X)}let Q=$.title!==void 0||$.description!==void 0||$.status!==void 0||$.priority!==void 0||$.assigneeId!==void 0||$.repo!==void 0||$.dueDate!==void 0||$.sortOrder!==void 0||$.tagIds!==void 0,Y=Q?await Z.storage.taskBoard.getById($.id,X):null;if(Q&&!Y)throw Error(`Task board item not found: ${$.id}`);let G=gS.getStore()!==void 0;if(ZL4($.status,Y?.status,G))throw Error("This task is In Review \u2014 a run can't move it to Done. Leave it in "+"in_review for the reviewer; only a person, or TASK_BOARD_REVIEW_DECISION on a reviewer's own run, completes a task under review.");let J=$.assigneeId!==void 0&&$.assigneeId!==(Y?.assigneeId??null),W=$L4($.assigneeId,Y);if(Y&&kQ(Y)){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(W)await O90(Z,Y,Rx())}if($.tagIds!==void 0){let H=await Z.storage.tags.listOrgTags(X),F=new Set(H.map((N)=>N.id));for(let N of $.tagIds)if(!F.has(N))throw Error(`Tag not found: ${N}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,G1(Z))}let K;if(Q)K=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:W?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId,assignedBy:J?$.assigneeId?G1(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder},G1(Z));else{let H=await Z.storage.taskBoard.getById($.id,X);if(!H)throw Error(`Task board item not found: ${$.id}`);K=H}if(Y){let H=G1(Z),F=eD4(Y,K);if(F.length>0)await mW$(Z,F.map((N)=>({taskBoardItemId:K.id,actorId:H,...N})))}if(Q||$.linkThreadId)F8(X,K);if(W)await TB(Z,K,{userInitiated:!0});return{item:K}}})});import{z as fw0}from"zod";var To0;var yF$=w(()=>{C0();h5();To0=c({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:fw0.object({id:fw0.string()}),outputSchema:fw0.object({success:fw0.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.taskBoard.delete($.id,X,G1(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return $K$(X,$.id),{success:!0}}})});import{z as UC}from"zod";var Ro0;var gF$=w(()=>{C0();in0();h5();Wy();Ro0=c({name:"TASK_BOARD_ITEM_PR_LINK",description:"Link the pull request you just opened to this run's task board item. Call this right after `gh pr create` succeeds, with the PR URL it printed. Reviewers (QA, code review) are dispatched from the linked PR, so a task whose PR is not linked never gets reviewed.",annotations:{title:"Link Pull Request to Task",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:UC.object({url:UC.string().describe("The pull request URL, e.g. https://github.com/owner/repo/pull/123")}),outputSchema:UC.object({url:UC.string(),prNumber:UC.number(),taskBoardItemIds:UC.array(UC.string())}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z).id,{threadId:Q}=cO0(),Y=hB0($.url);if(!Y)throw Error(`Not a GitHub pull request URL: ${$.url} (expected https://github.com/<owner>/<repo>/pull/<number>)`);let G=await tB0(Z,X,Q);for(let J of G)await Z.storage.taskBoard.linkPr({taskBoardItemId:J,organizationId:X,url:Y.url,prNumber:Y.number,repoOwner:Y.owner,repoName:Y.repo}),await Z.storage.taskBoard.clearSweepBudget(J,X);return{url:Y.url,prNumber:Y.number,taskBoardItemIds:G}}})});function uF$($){hF$=$}function bw0($){hF$?.broadcast($)}var hF$=null;import{DBOS as xw0}from"@dbos-inc/dbos-sdk";function XL4($,Z){let X=`thread-run:${Z}:`;if(!$.workflowID.startsWith(X))return null;let Q=$.input?.[0],Y=Q?.request;return{workflowId:$.workflowID,messageId:Y?.messageId??$.workflowID.slice(X.length),status:$.status==="PENDING"?"running":"queued",enqueuedAt:$.createdAt,...Q?.source!==void 0?{source:Q.source}:{}}}async function Io0($){return(await xw0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING","ENQUEUED"],loadInput:!0,loadOutput:!1})).map((X)=>XL4(X,$)).filter((X)=>X!==null).sort((X,Q)=>X.enqueuedAt-Q.enqueuedAt)}async function cF$($,Z){if(!Z.startsWith(`thread-run:${$}:`))return!1;return await xw0.cancelWorkflows([Z]),!0}async function by($){let Z=await xw0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING"],loadInput:!1,loadOutput:!1});if(Z.length===0)return;await xw0.cancelWorkflows(Z.map((X)=>X.workflowID))}var yw0=()=>{};function GL4($){return/\b405\b/.test($)&&/not allowed on this repository/i.test($)}function WL4($,Z={}){if($==="failing")return!0;if($==="pending")return!Z.allowPendingChecks;return!1}async function KL4($,Z,X,Q,Y){if(JL4.has(Q))return;let J=(await $.storage.taskBoard.listActivity(X,Z).catch(()=>[])).at(-1);if(J?.action==="merge_failed"&&J.data?.reason===Q)return;await C6($,{taskBoardItemId:X,action:"merge_failed",actorId:null,data:{reason:Q,...Y?{detail:Y}:{}}})}function HL4($){if(!$?.isError)return{kind:"merged"};let Z=JSON.stringify($?.content)??"";if(GL4(Z))return{kind:"method_not_allowed",detail:Z};if(Cw0(Z))return{kind:"rate_limited",detail:Z};return{kind:"refused",detail:Z}}async function FL4($,Z,X){let Q=await $.callTool({name:"merge_pull_request",arguments:{owner:Z.repoOwner,repo:Z.repoName,pullNumber:Z.number,merge_method:X}},void 0,{timeout:QL4});return HL4(Q)}async function qn($,Z,X,Q={}){let Y=async(N,U)=>{return await KL4($,Z,X,N,U),{merged:!1,reason:N,...U?{detail:U}:{}}},G=await $.storage.taskBoard.listPrs(X,Z),J=await kB($,Z,G);if(!J)return console.warn(`[task-board] merge skipped \u2014 no linked PR on ${X}`),Y("no_pr");let W=await VF$($,Z,J);if(WL4(W,Q))return console.warn(`[task-board] merge blocked \u2014 checks ${W} on PR #${J.number}`),Y(W==="failing"?"checks_failing":"checks_pending");let K=`${J.repoOwner}/${J.repoName}`,H=await NC($,Z,J.connectionId,{owner:J.repoOwner,name:J.repoName});if(!H)return console.warn("[task-board] merge blocked \u2014 no active GitHub connection for "+`${K} (PR #${J.number})`),Y("no_connection",K);let F=await F5(H,$,!0);try{let N=null;for(let U of YL4){let O=await FL4(F,J,U);if(O.kind==="merged")return TF$(H.id),{merged:!0};if(O.kind==="rate_limited")return console.warn(`[task-board] merge rate-limited on PR #${J.number} \u2014 sweep retries`),Y("rate_limited",O.detail.slice(0,500));if(O.kind==="method_not_allowed"){console.warn(`[task-board] merge method '${U}' not allowed on ${K} \u2014 trying next`),N=O.detail;continue}return console.error(`[task-board] merge refused by GitHub on PR #${J.number}:`,O.detail),Y("refused",O.detail.slice(0,500))}return console.error(`[task-board] no merge method allowed on ${K} (PR #${J.number})`,N),Y("refused",N?.slice(0,500))}catch(N){let U=N instanceof Error?N.message:String(N);if(Cw0(N))return Y("rate_limited",U);return console.error("[task-board] merge PR failed",N),Y("error",U)}finally{await F.close().catch(()=>{})}}async function Mn($,Z,X){let Q=await $.storage.organizationSettings.get(Z),Y=DF(Q?.flags),G=await $.storage.taskBoard.listActivity(X,Z);return fO(G,Y,{verifiedOnly:!0})}async function NL4($,Z){let X=await $.storage.organizationSettings.get(Z.organizationId),Q=DF(X?.flags),Y=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);if(!ya1(Y,Q))return;await qK($,Z,"every reviewer approved, but an approval could not be verified \u2014 "+"auto-merge is blocked and no reviewer can be re-dispatched this cycle")}function lF$($){return!$.merged&&$.reason==="refused"}function qo0($,Z){if($!==null)return $;if(Z===null||!lF$(Z))return null;return(Z.detail??"").toLowerCase().includes("merge conflict")?!0:null}async function UL4($,Z,X){if(!lF$(X))return;let Q=Z.organizationId,Y=await $.storage.taskBoard.listPrs(Z.id,Q),G=await kB($,Q,Y);if(!G)return;await _y($,Q,Z,{pr:{number:G.number,url:G.url},conflict:qo0(await fy($,Q,G),X)}).catch((J)=>{console.error("[task-board] sweep conflict auto-resolve failed",J)})}async function dF$($,Z){let X=Z.organizationId;if(Z.status!=="in_review")return!1;if((await $.storage.organizationSettings.get(X))?.flags?.auto_merge!==!0)return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,X))return!1;if(!await Mn($,X,Z.id))return await NL4($,Z),!1;let Y=await qn($,X,Z.id);if(!Y.merged)return await UL4($,Z,Y),!1;let G=await $.storage.taskBoard.update(Z.id,X,{status:"done"},Z.updatedBy);return await C6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done"}}),F8(X,G),!0}var QL4=15000,YL4,JL4;var kn=w(()=>{HF();E9();sX();zn();kK();h5();YL4=["merge","squash","rebase"];JL4=new Set(["checks_pending"])});import{z as xy}from"zod";function BL4($){return $.threads.filter((Z)=>Z.status!==null&&!Hn.has(Z.status)).map((Z)=>Z.threadId)}async function wL4($,Z,X){let Q=(G)=>(J)=>console.error("[task-board] rerun takeover step failed",{threadId:Z,step:G,err:J});await $.storage.threads.setCancelRequested(Z,X).catch(Q("cancel-flag")),await qy(Z).catch(Q("background-jobs")),await by(Z).catch(Q("gate-head"));let Y=await $.storage.threads.getRunFence(Z).catch(()=>null);if(Y)await FC(Z,Y).catch(Q("hosted-harness"));bw0(Z)}function DL4($,Z){return $===!0&&Ko0(Z)}async function LL4($,Z,X){let Q=Z.organizationId,Y=await $.storage.taskBoard.listPrs(Z.id,Q).catch(()=>[]),G=await kB($,Q,Y).catch(()=>{return});if(!G)return!1;let J=await fy($,Q,G).catch(()=>null);return DL4(J,X)}function jL4($,Z){let X=LF($),Q=0;for(let Y of $){if(Y.action!=="review_approved")continue;let G=new Date(Y.occurredAt).getTime();if(G>=X)Q=Math.max(Q,G)}return Z-Q>=EL4}async function zL4($,Z){if(Z.status!=="in_review")return;if((await $.storage.organizationSettings.get(Z.organizationId))?.flags?.auto_merge!==!0)return;if(!await Mn($,Z.organizationId,Z.id))return;let Y=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId).catch(()=>[]);if(jL4(Y,Date.now()))return;if(await LL4($,Z,Y))return;throw Error("Every reviewer approved this task and its merge is retrying \u2014 re-running "+"would throw that away and start a new review cycle. Wait for the merge, or use the ship button if the PR needs a nudge.")}var OL4="Superseded by a manual re-run of this task",EL4=900000,Mo0;var mF$=w(()=>{C0();E9();RK();dF();yw0();My();sX();h5();cF();kn();kK();zn();E3();Mo0=c({name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task board item with the Super Agent, whatever lane it is in. Use this to retry a task that stalled, finished without doing the job, or is already assigned to the Super Agent (in which case re-assigning it does nothing). Fails any run still holding the task open, moves it to In Progress, and queues a fresh run.",annotations:{title:"Re-run Task",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:xy.object({id:xy.string().describe("The task board item to re-run.")}),outputSchema:xy.object({status:xy.string().describe("The task's lane after the re-run was queued."),supersededThreadIds:xy.array(xy.string()).describe("Runs that were failed to make room for this one.")}),handler:async({id:$},Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X);if(!Q)throw Error(`Task board item not found: ${$}`);if(Q.assigneeId!==n8)throw Error("Only a task assigned to the Super Agent can be re-run. Assign it to "+"the Super Agent instead \u2014 that queues a run by itself.");await zL4(Z,Q),await O90(Z,Q,Rx());let Y=[];for(let J of BL4(Q)){if(!await Z.storage.threads.failIfNotTerminal(J,OL4,"superseded"))continue;Y.push(J),await wL4(Z,J,X)}let G=await Z.storage.taskBoard.update($,X,{status:"in_progress"},G1(Z));return await C6(Z,{taskBoardItemId:$,action:"status_changed",actorId:G1(Z),data:{from:Q.status,to:"in_progress",reason:"rerun"}}),F8(X,G),await iF(Z,G,{userInitiated:!0}),{status:G.status,supersededThreadIds:Y}}})});import{z as VB}from"zod";function PL4($,Z,X){return $!==null&&$.reviewer===Z&&$.cycleAt.getTime()===X}function AL4($,Z){return Bl0($).get(Z)==="changes_requested"}var ko0;var iF$=w(()=>{C0();E9();_3();sX();h5();cF();kn();kK();Qo0();zn();E3();ko0=c({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:VB.object({taskBoardItemId:VB.string(),reviewer:VB.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:VB.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:VB.enum(["approve","request_changes"]),notes:VB.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:VB.object({status:C3,merged:VB.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:$,reviewer:Z,reviewToken:X,decision:Q,notes:Y},G)=>{r(G),await G.access.check();let J=G.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let W=await G.storage.taskBoard.getById($,J);if(!W)throw Error(`Task board item not found: ${$}`);let K=X?LF(await G.storage.taskBoard.listActivity($,J)):0,H=!!X&&(BF$(X,$,Z,new Date(K))||PL4(await G.storage.taskBoard.resolveReviewClaimByToken($,X),Z,K));if(Q==="request_changes"){let j=await G.storage.taskBoard.listActivity($,J);if(AL4(j,Z))return{status:W.status,merged:!1};if(ha1(j))return await C6(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:H,bounceLimitReached:!0}}),await qK(G,W,`${wl0} review bounces reached \u2014 the reviewer and the `+"Super Agent are not converging"),{status:(await G.storage.taskBoard.getById($,J)??W).status,merged:!1};let z=await G.storage.taskBoard.claimReviewChangesBounce($,J,W.updatedBy);if(await C6(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:H}}),!z)return{status:(await G.storage.taskBoard.getById($,J)??W).status,merged:!1};F8(J,z);let A=await G.storage.taskBoard.listPrs($,J),P=await kB(G,J,A);return await iF(G,z,{feedback:`${Tx[Z]}: ${Y}`,pr:P?{number:P.number,url:P.url}:void 0}).catch(async(M)=>{if(await rB0(G,z,M)){await G.storage.taskBoard.update(z.id,J,{status:"in_review"},"system").then((q)=>F8(J,q)).catch((q)=>console.error("[task-board] runs-exhausted status revert failed",q));return}if(M instanceof n7)throw M;console.error("[task-board] request_changes re-enqueue failed",M)}),{status:z.status,merged:!1}}if(await C6(G,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Y,verified:H}}),!await Mn(G,J,$)){let j=await G.storage.taskBoard.getById($,J)??W;return F8(J,j),{status:j.status,merged:!1}}let U=(await G.storage.organizationSettings.get(J))?.flags?.auto_merge===!0,O=await G.storage.taskBoard.hasHumanRejectedDone($,J),B=U&&!O,D=B?await qn(G,J,$):null;if(D?.merged===!0){let j=await G.storage.taskBoard.update($,J,{status:"done"},W.updatedBy);return await C6(G,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:W.status,to:"done"}}),F8(J,j),{status:j.status,merged:!0}}let E=await G.storage.taskBoard.getById($,J)??W;if(B){let j=await G.storage.taskBoard.listPrs($,J),z=await kB(G,J,j);if(z?await _y(G,J,E,{pr:{number:z.number,url:z.url},conflict:qo0(await fy(G,J,z),D)}).catch((P)=>{if(P instanceof n7)throw P;return console.error("[task-board] conflict auto-resolve failed",P),!1}):!1)return{status:(await G.storage.taskBoard.getById($,J)??E).status,merged:!1}}return F8(J,E),{status:E.status,merged:!1}}})});import{z as gw0}from"zod";function TL4($,Z,X){if($!=="in_review")return!1;return X.length===0||fO(Z,X)}var Vo0;var pF$=w(()=>{C0();E9();_3();sX();h5();kn();Vo0=c({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:gw0.object({taskBoardItemId:gw0.string()}),outputSchema:gw0.object({status:C3,merged:gw0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X);if(!Q)throw Error(`Task board item not found: ${$}`);let Y=await Z.storage.organizationSettings.get(X),G=DF(Y?.flags),J=await Z.storage.taskBoard.listActivity($,X);if(!TL4(Q.status,J,G))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!(await qn(Z,X,$,{allowPendingChecks:!0})).merged){let H=await Z.storage.taskBoard.getById($,X)??Q;return F8(X,H),{status:Q.status,merged:!1}}let K=await Z.storage.taskBoard.update($,X,{status:"done"},Q.updatedBy);if(Q.status!=="done")await C6(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Q.status,to:"done"}});return F8(X,K),{status:K.status,merged:!0}}})});import{z as ZJ}from"zod";function nF$($){if(!$)throw Error("Organization ID required (no active organization in context)");return $}var RL4,So0,Co0;var tF$=w(()=>{C0();RL4=ZJ.object({externalKey:ZJ.string(),dismissedBy:ZJ.string(),dismissedAt:ZJ.string()});So0=c({name:"TASK_BOARD_DISMISSED_LIST",description:"List the diagnostic findings this organization has dismissed by deleting their task board cards. The import skips these until they're restored.",annotations:{title:"List Dismissed Findings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZJ.object({}),outputSchema:ZJ.object({findings:ZJ.array(RL4)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=nF$(Z.organization?.id);return{findings:await Z.storage.taskBoard.listDismissedFindings(X)}}}),Co0=c({name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss diagnostic findings, returning their cards to the board. Omit externalKeys to restore every dismissed finding.",annotations:{title:"Restore Dismissed Findings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZJ.object({externalKeys:ZJ.array(ZJ.string()).optional()}),outputSchema:ZJ.object({restored:ZJ.number()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=nF$(Z.organization?.id);return{restored:await Z.storage.taskBoard.restoreDismissedFindings(X,$.externalKeys)}}})});import{z as m6}from"zod";function hw0($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}function qL4($,Z,X){return $.replace(IL4,(Q,Y,G,J)=>{let W=encodeURIComponent(`${Z}/${G}`);return`${Y}/api/${encodeURIComponent(X)}/fs/outputs/read?path=${W}${J}`})}var _o0,vo0,IL4,fo0,bo0,xo0;var oF$=w(()=>{C0();E9();pB0();Wy();_o0=m6.object({id:m6.string(),taskBoardItemId:m6.string(),parentId:m6.string().nullable(),authorId:m6.string(),body:m6.string(),resolved:m6.boolean(),createdAt:m6.string(),updatedAt:m6.string()});vo0=c({name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comments (flat, oldest first; replies carry parentId).",annotations:{title:"List Task Comments",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:m6.object({taskBoardItemId:m6.string()}),outputSchema:m6.object({comments:m6.array(_o0)}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{comments:await Z.storage.taskBoard.listComments($.taskBoardItemId,hw0(Z))}}}),IL4=/(!\[[^\]]*\]\()org\/output\/([^)\s]+)(\))/g;fo0=c({name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment on a task board item, or a reply to one.",annotations:{title:"Create Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:m6.object({taskBoardItemId:m6.string(),body:m6.string().trim().min(1),parentId:m6.string().nullish()}),outputSchema:m6.object({comment:_o0}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=hw0(Z),Q=gS.getStore(),Y=Z.organization?.slug,G=Q?.threadId&&Y?qL4($.body,Q.threadId,Y):$.body,J=await Z.storage.taskBoard.createComment({taskBoardItemId:$.taskBoardItemId,organizationId:X,parentId:$.parentId??null,authorId:Q?n8:G1(Z),body:G});if(!J)throw Error("Task board item not found");return await Xt0(Z,{commentId:J.id,taskBoardItemId:J.taskBoardItemId,organizationId:X,authorLabel:Q?"Super Agent":Z.auth?.user?.name??Z.auth?.user?.email??"Studio",body:J.body}),{comment:J}}}),bo0=c({name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit your own comment's body, or resolve/unresolve a comment thread (root only, any org member may toggle it).",annotations:{title:"Update Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:m6.object({id:m6.string(),body:m6.string().trim().min(1).optional(),resolved:m6.boolean().optional()}),outputSchema:m6.object({comment:_o0}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:hw0(Z),callerId:G1(Z),body:$.body,resolved:$.resolved});if(!X)throw Error("Comment not found, or you can only edit your own comments");return{comment:X}}}),xo0=c({name:"TASK_BOARD_COMMENT_DELETE",description:"Delete your own comment. Deleting a thread root deletes its replies too.",annotations:{title:"Delete Task Comment",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:m6.object({id:m6.string()}),outputSchema:m6.object({success:m6.boolean()}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{success:await Z.storage.taskBoard.deleteComment($.id,hw0(Z),G1(Z))}}})});var rF$=w(()=>{eQ$();vF$();bF$();xF$();yF$();kK();gF$();mF$();iF$();pF$();sX();tF$();oF$()});import{z as nF}from"zod";var yo0;var aF$=w(()=>{C0();yo0=c({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:nF.object({}),outputSchema:nF.object({tags:nF.array(nF.object({id:nF.string(),organizationId:nF.string(),name:nF.string(),color:nF.string().nullable(),createdAt:nF.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{tags:(await Z.storage.tags.listOrgTags(X.id)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as VK}from"zod";var go0;var sF$=w(()=>{C0();go0=c({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:VK.object({name:VK.string().min(1).max(50).describe("Tag name"),color:VK.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:VK.object({tag:VK.object({id:VK.string(),organizationId:VK.string(),name:VK.string(),color:VK.string().nullable(),createdAt:VK.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.tags.createTag(X.id,$.name,$.color);return{tag:{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}}}})});import{z as uw0}from"zod";var ho0;var eF$=w(()=>{C0();ho0=c({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uw0.object({tagId:uw0.string().describe("Tag ID to delete")}),outputSchema:uw0.object({success:uw0.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.tags.getTag($.tagId);if(!Q)throw Error("Tag not found");if(Q.organizationId!==X.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as SK}from"zod";var uo0;var $N$=w(()=>{C0();uo0=c({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:SK.object({memberId:SK.string().describe("Member ID")}),outputSchema:SK.object({tags:SK.array(SK.object({id:SK.string(),organizationId:SK.string(),name:SK.string(),color:SK.string().nullable(),createdAt:SK.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});import{z as XJ}from"zod";var co0;var ZN$=w(()=>{C0();co0=c({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:XJ.object({memberId:XJ.string().describe("Member ID"),tagIds:XJ.array(XJ.string()).describe("Array of tag IDs to assign")}),outputSchema:XJ.object({success:XJ.boolean(),tags:XJ.array(XJ.object({id:XJ.string(),organizationId:XJ.string(),name:XJ.string(),createdAt:XJ.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let G of $.tagIds){let J=await Z.storage.tags.getTag(G);if(!J)throw Error(`Tag not found: ${G}`);if(J.organizationId!==X.id)throw Error(`Tag does not belong to this organization: ${G}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});var XN$=w(()=>{aF$();sF$();eF$();$N$();ZN$()});import{z as QN$}from"zod";function CL4($,Z){let X=$?.[Z];if(!X)return;return Object.entries(X).sort(([,Y],[,G])=>{let J=Math.max(0,...Object.values(Y).map((K)=>K.createdAt??0));return Math.max(0,...Object.values(G).map((K)=>K.createdAt??0))-J})[0]?.[0]}var VL4,SL4,lo0;var YN$=w(()=>{M4();C0();eS();vX();VL4=QN$.object({data:BW$.describe("Data for the new thread (id is auto-generated if not provided)")}),SL4=QN$.object({item:AK.describe("The created thread entity")});lo0=c({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:VL4,outputSchema:SL4,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=G1(Z);if(!Q)throw Error("User ID required to create thread");let{data:Y}=$,G=Y.id??m8("thrd"),W=(await SB0(Z.storage.virtualMcps,Y.virtual_mcp_id,X.id)).metadata,K=W?.githubRepo,H=null;if(K)H=Y.branch??CL4(W?.sandboxMap,Q)??bO0(fO0(Z.auth.user));let F=await Z.storage.threads.create({id:G,organization_id:X.id,title:Y.title,description:Y.description,virtual_mcp_id:Y.virtual_mcp_id,branch:H,created_by:Q,...Y.runtime?{metadata:{runtime:Y.runtime}}:{}});if(F.isNew)y1.capture({distinctId:Q,event:"chat_started",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:G,has_title:!!$.data.title,created_via:"tool"}});return{item:aG(F)}}})});import{z as do0}from"zod";var _L4,vL4,mo0;var GN$=w(()=>{M4();C0();eS();vB0();_L4=do0.object({id:do0.string().describe("ID of the thread to update"),data:wW$.describe("Partial thread data to update")}),vL4=do0.object({item:AK.describe("The updated thread entity")}),mo0=c({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:_L4,outputSchema:vL4,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=G1(Z);if(!Q)throw Error("User ID required to update thread");let{id:Y,data:G}=$,J=await Z.storage.threads.get(Y);if(!J)throw Error("Thread not found in organization");if(G.virtual_mcp_id!==void 0)await SB0(Z.storage.virtualMcps,G.virtual_mcp_id,X.id);if(G.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,X.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let W={title:G.title,description:G.description,hidden:G.hidden,updated_by:Q};if(G.status)W.status=G.status;if(G.metadata!==void 0){let H=Cn0(J.metadata?.runtime);W.metadata=H?{...G.metadata,runtime:H}:G.metadata}if(G.branch!==void 0)W.branch=G.branch;if(G.virtual_mcp_id!==void 0)W.virtual_mcp_id=G.virtual_mcp_id;let K=await Z.storage.threads.update(Y,W);if(G.hidden!==void 0&&G.hidden!==J.hidden)y1.capture({distinctId:Q,event:G.hidden?"chat_archived":"chat_unarchived",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Y}});return{item:aG(K)}}})});var io0;var JN$=w(()=>{bG();eS();M4();C0();dF();yw0();My();io0=c({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:Hi,outputSchema:Fi(AK),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.threads.get($.id);if(!Q)throw Error(`Thread not found: ${$.id}`);if(Q.status==="in_progress"){let G=(W)=>(K)=>console.error("[thread] delete-time run cancel step failed",{threadId:$.id,step:W,err:K});await qy($.id).catch(G("background-jobs")),await by($.id).catch(G("gate-head"));let J=await Z.storage.threads.getRunFence($.id).catch(()=>null);if(J)await FC($.id,J).catch(G("hosted-harness"));bw0($.id)}await Z.storage.threads.delete($.id);let Y=G1(Z);if(Y)y1.capture({distinctId:Y,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:aG(Q)}}})});var WN$=w(()=>{YN$();_n0();vn0();GN$();JN$();fn0()});function bL4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function xL4($){return $.map((Z)=>{let X=Z.metadata;if(X?.tiptapDoc)return Z;let Q=Z.parts.find((Y)=>Y.type==="text"&&typeof Y.text==="string");if(!Q?.text||typeof Q.text!=="string")return Z;return{...Z,metadata:{...X,tiptapDoc:bL4(Q.text)}}})}function cw0($){let Z;if(typeof $==="string")try{let X=JSON.parse($);if(Array.isArray(X)&&X.length>0&&X[0]?.role&&Array.isArray(X[0]?.parts))Z=X;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return xL4(Z)}import{z as i6}from"zod";var po0;var KN$=w(()=>{M4();C0();IQ();po0=c({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:i6.object({name:i6.string().min(1).max(255),virtual_mcp_id:i6.string(),messages:i6.union([i6.string(),i6.array(i6.looseObject({id:i6.string().optional(),role:i6.enum(["user","assistant","system"]),parts:i6.array(i6.record(i6.string(),i6.unknown())),metadata:i6.unknown().optional()}))]),models:i6.object({tier:SO,modelId:i6.string().optional(),credentialId:i6.string().optional()}).loose().default({tier:"smart"}),tools:i6.array(i6.string()).nullable().optional(),maxAgentSteps:i6.number().int().min(1).max(100).nullable().optional(),temperature:i6.number().default(0.5),active:i6.boolean().default(!0)}),outputSchema:i6.object({id:i6.string(),name:i6.string(),active:i6.boolean(),created_at:i6.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=G1(Z);if(!Q)throw Error("Unable to determine user identity");let Y=cw0($.messages),G=await Z.storage.automations.create({organization_id:X.id,created_by:Q,name:$.name,messages:JSON.stringify(Y),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 y1.capture({distinctId:Q,event:"automation_created",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:G.id,virtual_mcp_id:$.virtual_mcp_id,active:G.active,tier:$.models.tier}}),{id:G.id,name:G.name,active:G.active,created_at:G.created_at}}})});import{z as _6}from"zod";var no0;var HN$=w(()=>{C0();no0=c({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:_6.object({id:_6.string()}),outputSchema:_6.object({automation:_6.object({id:_6.string(),name:_6.string(),active:_6.boolean(),created_by:_6.string(),created_at:_6.string(),updated_at:_6.string(),virtual_mcp_id:_6.string(),messages:_6.unknown(),models:_6.unknown(),tools:_6.array(_6.string()).nullable(),maxAgentSteps:_6.number().nullable(),temperature:_6.number(),triggers:_6.array(_6.object({id:_6.string(),type:_6.enum(["cron","event","webhook"]),cron_expression:_6.string().nullable(),connection_id:_6.string().nullable(),event_type:_6.string().nullable(),params:_6.unknown().nullable(),last_run_at:_6.string().nullable(),api_key_id:_6.string().nullable(),created_at:_6.string()}))}).nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.id,X.id);if(!Q)return{automation:null};let Y=await Z.storage.automations.listTriggers(Q.id);return{automation:{id:Q.id,name:Q.name,active:Q.active,created_by:Q.created_by,created_at:Q.created_at,updated_at:Q.updated_at,virtual_mcp_id:Q.virtual_mcp_id,messages:JSON.parse(Q.messages),models:JSON.parse(Q.models),tools:Q.tools?JSON.parse(Q.tools):null,maxAgentSteps:Q.max_agent_steps,temperature:Q.temperature,triggers:Y.map((G)=>({id:G.id,type:G.type,cron_expression:G.cron_expression,connection_id:G.connection_id,event_type:G.event_type,params:G.params?JSON.parse(G.params):null,last_run_at:G.last_run_at,api_key_id:G.api_key_id,created_at:G.created_at}))}}}})});import{z as pY}from"zod";var to0;var FN$=w(()=>{C0();to0=c({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:pY.object({virtual_mcp_id:pY.string().optional().nullable()}),outputSchema:pY.object({automations:pY.array(pY.object({id:pY.string(),name:pY.string(),active:pY.boolean(),created_by:pY.string(),created_at:pY.string(),trigger_count:pY.number(),nearest_next_run_at:pY.string().nullable(),virtual_mcp_id:pY.string()}))}),handler:async($,Z)=>{r(Z);let X=t(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(X.id,$.virtual_mcp_id)).map((G)=>({id:G.id,name:G.name,active:G.active,created_by:G.created_by,created_at:G.created_at,trigger_count:G.trigger_count,nearest_next_run_at:G.nearest_next_run_at,virtual_mcp_id:G.virtual_mcp_id}))}}})});function gL4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((X)=>typeof X==="string"))return Z.length>0?Z:null}catch{}return null}function NN$($){return`${$}:context`}function UN$($,Z,X,Q,Y){let J=JSON.parse($.messages).map((H,F)=>({...H,id:`${X}:${F}`})),W=Z?{...Y,[mO0]:yL4}:Y;return{messages:J,models:{credentialId:Q.credentialId,thinking:Q.thinking,...Q.image?{image:Q.image}:{},...Q.webSearch?{webSearch:Q.webSearch}:{},...Q.deepResearch?{deepResearch:Q.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:gL4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",triggerId:Z??void 0,...W?{runMetadata:W}:{},taskId:X}}var yL4="new_task";var ON$=w(()=>{hp()});function JX($,Z,X,Q,Y,G,J,W){return JX.fromTZ(JX.tp($,Z,X,Q,Y,G,J),W)}function oo0($,Z=new Date){let X=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],Q=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${Q} GMT`)-Date.parse(`${Q} ${X}`)}function hL4($,Z){let X=new Date(Date.parse($));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let Q=$.substring(9);return $.includes("Z")||Q.includes("-")||Q.includes("+")?JX.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):JX.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function uL4($){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 QJ($.startAt,$.timezone)),$.stopAt&&($.stopAt=new QJ($.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 Vn($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function cL4($){return Vn($)}function lL4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var ro0=32,Sn,LN$,BN$=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 QJ(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,Sn),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,X,Q){let Y=this[$],G=$==="day"&&this.lastDayOfMonth;if(Z===""&&!G)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Y.fill(Q);let J=Z.split(",");if(J.length>1)for(let W=0;W<J.length;W++)this.partToArray($,J[W],X,Q);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,X,Q):Z.indexOf("-")!==-1?this.handleRange(Z,$,X,Q):Z.indexOf("/")!==-1?this.handleStepping(Z,$,X,Q):Z!==""&&this.handleNumber(Z,$,X,Q)}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,X,Q){let Y=this.extractNth($,Z),G=parseInt(Y[0],10)+X;if(isNaN(G))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,G,Y[1]||Q)}setPart($,Z,X){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,X);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]=X}handleRangeWithStepping($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(G===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,W,K]=G,H=parseInt(J,10)+X,F=parseInt(W,10)+X,N=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(N))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(N===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(N>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 U=H;U<=F;U+=N)this.setPart(Z,U,Y[1]||Q)}extractNth($,Z){let X=$,Q;if(X.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");Q=X.split("#")[1],X=X.split("#")[0]}return[X,Q]}handleRange($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].split("-");if(G.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(G[0],10)+X,W=parseInt(G[1],10)+X;if(isNaN(J))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(J>W)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let K=J;K<=W;K++)this.setPart(Z,K,Y[1]||Q)}handleStepping($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].split("/");if(G.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");G[0]===""&&(G[0]="*");let J=0;G[0]!=="*"&&(J=parseInt(G[0],10)+X);let W=parseInt(G[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=J;K<this[Z].length;K+=W)this.setPart(Z,K,Y[1]||Q)}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[$]|ro0;else if(Z===Sn)this.dayOfWeek[$]=Sn;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|LN$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},wN$,tF,QJ=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,X){if(this.tz=X,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,X,Q,Y){let G=new Date(Date.UTC(Z,X,Q)).getUTCDay(),J=0;for(let W=1;W<=Q;W++)new Date(Date.UTC(Z,X,W)).getUTCDay()===G&&J++;if(Y&Sn&&LN$[J-1]&Y)return!0;if(Y&ro0){let W=new Date(Date.UTC(Z,X+1,0)).getUTCDate();for(let K=Q+1;K<=W;K++)if(new Date(Date.UTC(Z,X,K)).getUTCDay()===G)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 X=JX.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.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>wN$[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 X=JX.fromTZISO(Z);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(JX.fromTZISO(Z,this.tz))}findNext(Z,X,Q,Y){let G=this[X],J;Q.lastDayOfMonth&&(this.month!==1?J=wN$[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let W=!Q.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[X]+Y;K<Q[X].length;K++){let H=Q[X][K];if(X==="day"&&Q.lastDayOfMonth&&K-Y==J&&(H=1),X==="day"&&!Q.starDOW){let F=Q.dayOfWeek[(W+(K-Y-1))%7];if(F&&F&Sn)F=this.isNthWeekdayOfMonth(this.year,this.month,K-Y,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);Z.legacyMode&&!Q.starDOM?H=H||F:H=H&&F}if(H)return this[X]=K-Y,G!==this[X]?2:1}return 3}recurse(Z,X,Q){let Y=this.findNext(X,tF[Q][0],Z,tF[Q][2]);if(Y>1){let G=Q+1;for(;G<tF.length;)this[tF[G][0]]=-tF[G][2],G++;if(Y===3)return this[tF[Q][1]]++,this[tF[Q][0]]=-tF[Q][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,Q-1)}return Q+=1,Q>=tF.length?this:this.year>=3000?null:this.recurse(Z,X,Q)}increment(Z,X,Q){return this.second+=X.interval!==void 0&&X.interval>1&&Q?X.interval:1,this.ms=0,this.apply(),this.recurse(Z,X,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)):JX.fromTZ(JX.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},DN$=30000,lw0,dw0=class{name;options;_states;fn;constructor($,Z,X){let Q,Y;if(Vn(Z))Y=Z;else if(typeof Z=="object")Q=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(Vn(X))Y=X;else if(typeof X=="object")Q=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=Q?.name,this.options=uL4(Q),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:Q?Q.maxRuns:void 0,paused:Q?Q.paused:!1,pattern:new BN$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new QJ($,this.options.timezone||this.options.utcOffset):this._states.pattern=new BN$($,this.options.timezone),this.name){if(lw0.find((G)=>G.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");lw0.push(this)}return Y!==void 0&&cL4(Y)&&(this.fn=Y,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 X=[],Q=Z||this._states.currentRun||void 0;for(;$--&&(Q=this.nextRun(Q));)X.push(Q);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,X=this.fn!==void 0,Q=!this._states.kill;return Z&&X&&Q&&$!==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 QJ||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new QJ($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=lw0.indexOf(this);$>=0&&lw0.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(),X=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||X===null?this:(Z>DN$&&(Z=DN$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&lL4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new QJ(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){Vn(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new QJ($,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,X=!this._states.paused&&Z.getTime()>=$.getTime(),Q=this._states.blocking&&this.options.protect;X&&!Q?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&Q&&Vn(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),X=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),X=!$),$=new QJ($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let Q=this._states.once||new QJ($,this.options.timezone||this.options.utcOffset);return!X&&Q!==this._states.once&&(Q=Q.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||Q===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&Q.getTime()>=this.options.stopAt.getTime()?null:Q}_calculatePreviousRun($,Z){let X=new QJ(void 0,this.options.timezone||this.options.utcOffset),Q=$;if(this.options.startAt.getTime()<=X.getTime()){Q=this.options.startAt;let Y=Q.getTime()+this.options.interval*1000;for(;Y<=X.getTime();)Q=new QJ(Q,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Y=Q.getTime()+this.options.interval*1000;Z=!0}return Q===null&&(Q=void 0),[Q,Z]}};var ao0=w(()=>{JX.fromTZISO=($,Z,X)=>JX.fromTZ(hL4($,Z),X);JX.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),Q=oo0($.tz,X),Y=new Date(X.getTime()-Q),G=oo0($.tz,Y);if(G-Q===0)return Y;{let J=new Date(X.getTime()-G),W=oo0($.tz,J);if(W-G===0)return J;if(!Z&&W-G>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Y}};JX.toTZ=function($,Z){let X=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),Q=new Date(X);return{y:Q.getFullYear(),m:Q.getMonth()+1,d:Q.getDate(),h:Q.getHours(),i:Q.getMinutes(),s:Q.getSeconds(),tz:Z}};JX.tp=($,Z,X,Q,Y,G,J)=>({y:$,m:Z,d:X,h:Q,i:Y,s:G,tz:J});JX.minitz=JX;Sn=31|ro0,LN$=[1,2,4,8,16],wN$=[31,28,31,30,31,30,31,31,30,31,30,31],tF=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];lw0=[]});function mw0($,Z){try{return new dw0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var so0=w(()=>{ao0()});import{DBOS as O7,SchedulerMode as dL4}from"@dbos-inc/dbos-sdk";async function Qr0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
1547
1547
  WHERE q.name LIKE $1
1548
1548
  AND NOT EXISTS (
1549
1549
  SELECT 1 FROM dbos.workflow_status w
@@ -2826,7 +2826,7 @@ Respond with the structured verdict and a short reason.`,jy$;var Py$=w(()=>{_4()
2826
2826
  ${G.join(`
2827
2827
  `)}`:Y}function JG6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2828
2828
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var eY6=200,$G6=12,ZG6=300,N91=3;var U91=w(()=>{q_();xP0()});function KG6($){if(!$||$.includes(".."))return!1;return WG6.test($)}function Jg$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!KG6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Wg$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var WG6;var Kg$=w(()=>{WG6=/^[\w./@-]+$/});function O91($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Ya($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Hg$($,Z,X,Q){if(!Q.connectionId)throw new k_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new k_(Z9);await nO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:Z9;throw new k_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await tO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=o8$(F instanceof Error?F.message:String(F));throw N?new k_(U):F}),K=ch($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await UB(H,HG6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var HG6=10485760,k_;var B91=w(()=>{uG();IP0();xp();gd0();hx();k_=class k_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function NG6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!FG6.test(Z))throw Error(`Invalid branch name: ${$}`)}function V_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(OG6)])}function BG6($,Z,X){let Q=B5($)[Z]?.[X];return!!Q&&Object.keys(AY(Q)).length>0}function S_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function ph($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Ya(Z,X);if(!Y)throw new Q6(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return qP0(Q,G.id,Y)}function w91($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,i5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,i5)}async function Ug$($){try{let Z=await ph($),X=await yP0(Z,$.get("vmClaim").branch);return $.json(X,200,i5)}catch(Z){return w91($,Z)}}function Ga($,Z){let Q=(uP0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return uP0.set($,Y),Y.finally(()=>{if(uP0.get($)===Y)uP0.delete($)}),Q}async function dZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,i5);let Q=S_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...i5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?DG6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...i5}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function DG6($){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 cP0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function LG6($){return Og$.includes($)}var FG6,Fg$=524288,UG6=65536,OG6=1e4,Ng$=2000,wG6,uP0,i5,Og$,Bg$=()=>{let $=new F1;$.use("/:virtualMcpId/:branch/*",wG6),$.post("/:virtualMcpId/:branch/write",(X)=>dZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>dZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>dZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>dZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>dZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>dZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>dZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return dZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return dZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>dZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>dZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!LG6(Q))return X.json({error:`step must be one of: ${Og$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Qy(Y.virtualMcpMetadata);try{await vO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return dZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return TN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Oy$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Ug$(X);return Z(X)});let Z=(X)=>dZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Ng$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Ug$(X);return dZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Ng$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await ph(X),J=await gP0(G,Q.branch,Y.base);return X.json(J,200,i5)}catch(Y){return w91(X,Y)}return dZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,i5);let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Ga(Y,async()=>{try{await t51(W,Q,Y);let K=Ya(G,J);if(K)await Hg$(W,Q,Y,K)}catch(K){if(K instanceof k_)return X.json({error:K.message},403,i5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,i5)}return dZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Ga(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,i5);try{let J=await ph(X);return await Gg$(J,Q.branch,G),X.json({ok:!0},200,i5)}catch(J){let W=J instanceof Q6&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,i5)}});return Ga(Q.claimName,()=>dZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Ga(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await ph(X),H=W.base??await K.getDefaultBranch();return await hP0(K,Q.branch,H),X.json({ok:!0},200,i5)}catch(W){return w91(X,W)}});let Y=S_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Ga(G,async()=>{try{await t51(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,i5)}return dZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",M9({maxSize:Fg$,onError:(X)=>X.json({error:"Payload too large"},413,i5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=S_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=a51(F)&&U?[F,N]:Y?await Promise.all([cP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),cP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await ph(X);return Promise.all([yP0(L,Q.branch),gP0(L,Q.branch)])})(),D=await Ey$(K,O,B);return X.json(D,200,i5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,i5);return X.json({error:F},502,i5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",M9({maxSize:Fg$,onError:(X)=>X.json({error:"Payload too large"},413,i5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=S_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=a51(F)&&U?[F,N]:Y?await Promise.all([cP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),cP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await ph(X);return Promise.all([yP0(L,Q.branch),gP0(L,Q.branch)])})(),D=await zy$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,i5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,i5);return X.json({error:F},502,i5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=O91(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",M9({maxSize:UG6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Jg$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Wg$(G,W.resolveType),H=O91(K),F;try{F=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$};var wg$=w(()=>{D8();BN();uh();n51();TF();Ny$();S3();dX();O8();vB0();KB();Uy$();By$();Jp0();fp();$91();Py$();Q91();q_();U91();Kg$();B91();FG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;wG6=RP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{NG6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=ai({orgId:Y.id,virtualMcpId:G,branch:J}),H=await vF(X,J,Q),F=Fy$({userId:H,projectRef:K}),N=W.metadata??null;if(NW$(N).fastPreviewCapability&&!BG6(N,H,J))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await oX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});uP0=new Map;i5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Og$=["clone","install","start"]});function Dg$($,Z,X){let Q=D91.get($);if(!Q)Q={pending:null,running:!1},D91.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)jG6($,Q);return G}async function jG6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await zG6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)D91.delete($)}}async function zG6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Qa(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=H91(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=F91(K,B),E=`${JSON.stringify(D,null,2)}
2829
- `,j=await Z.createBlob(E);await Qg$(Z.owner,Z.repo,j,E);let z=L[0]??`${bP0(Q)}/${Y91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of F91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=er(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:PG6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof Q6&&B.status===422)||Y>=EG6-1)throw B;await q$(pZ(2000,200,Y,2,0.5))}}}function PG6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Vd0(Q,$.deps.coAuthor)}var EG6=3,D91;var Lg$=w(()=>{IO0();kP0();u4();q_();xP0();D91=new Map});import{createHmac as Eg$,randomBytes as AG6,timingSafeEqual as TG6}from"crypto";function jg$(){if(lP0)return lP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return lP0=$?Buffer.from($):AG6(32),lP0}function L91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+RG6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Eg$("sha256",jg$()).update(Q).digest("base64url");return`${Q}.${Y}`}function zg$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Eg$("sha256",jg$()).update(Q).digest("base64url"));if(Y.length!==G.length||!TG6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var RG6=21600000,lP0=null;var Pg$=w(()=>{T$()});import{z as nh}from"zod";function qG6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&IG6.test($)}function Tg$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function dP0($){let Z=$.get("decofileScope");return qP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function mP0($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Rg$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Ag$),$.use("/:virtualMcpId/:branch/*",Ag$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await dP0(Z),Y=await Yg$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=L91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Tg$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return mP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=MG6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{MP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await dP0(Z),W=await Dg$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:ch(Q)},G),K=L91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Tg$(Z)})}catch(J){return mP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await dP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof Q6&&W.status===409))throw W;await hP0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof Q6&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof Q6&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return mP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await dP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof Q6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return mP0(Z,Q)}}),$}var IG6,MG6,Ag$;var Ig$=w(()=>{kP0();D8();n51();IP0();B91();Q91();Lg$();Pg$();U91();q_();xP0();IG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;MG6=nh.object({set:nh.record(nh.string(),nh.unknown()).optional(),delete:nh.array(nh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ag$=RP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!qG6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!zg$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!_B0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=Ya(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var qg$=($)=>{let Z=new F1;if(Z.use("*",D_),Z.route("/",cz0()),Z.route("/",tv$()),Z.route("/",ax$()),Z.route("/",tx$()),Z.route("/",PP0()),Z.route("/tools",Yy$()),Z.route("/",Zy$()),Z.route("/",Sx$({kvStorage:$.kvStorage})),Z.route("/",kx$()),Z.route("/fs",cx$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Bg$()),Z.route("/decofile",Rg$()),Z.route("/",ix$()),Z.route("/deco-sites",dz0()),Z.route("/sso",bz0()),Z.route("/",AP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",uv$()),$.mountDevAssets)Z.route("/dev-assets",mz0({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("/",AC$()),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",dx$()),Z.route("/mcp",rw0()),Z.route("/mcp/self",zP0()),Z.route("/mcp",ew0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Mg$=w(()=>{D8();w61();cv$();j61();iz0();Ir();O61();Vx$();Cx$();lx$();vn();G61();$D0();u51();mx$();px$();ox$();sx$();Xy$();l51();Gy$();d51();aw0();wg$();Ig$()});function kG6($){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 VG6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},kg$=()=>{let $=new F1;return $.use("*",VG6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await lZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:kG6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Vg$=w(()=>{D8();T$();mj0()});import{z as M1}from"zod";function QH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function hG6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function uG6($,Z,X){try{return JSON.parse($)}catch{throw new _g$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function cG6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:uG6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function lG6($){let Z=$.map((X)=>{let Q=X.function.parameters?xY(X.function.parameters):xY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function dG6($){if(!$)return;return{openai:{response_format:$}}}function mG6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Sg$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Cg$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var SG6=256,CG6,_G6,vG6,fG6,bG6,xG6,yG6,gG6,_g$,vg$,fg$;var bg$=w(()=>{_4();D8();uh();XN();CG6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),_G6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),vG6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(_G6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),fG6=M1.object({type:M1.literal("text")}),bG6=M1.object({type:M1.literal("json_object")}),xG6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),yG6=M1.union([fG6,bG6,xG6]),gG6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(vG6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(CG6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:yG6.optional(),user:M1.string().optional()});_g$=class _g$ extends Error{constructor($){super($);this.name="MessageConversionError"}};vg$=new F1;vg$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(QH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(QH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(QH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=gG6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(QH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=hG6(G.model);if(!J)return $.json(QH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>VD(j.providerId));if(!E)return $.json(QH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(QH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=cG6(G.messages),U=G.tools?lG6(G.tools):void 0,O=dG6(G.response_format),B=mG6(),D=Math.floor(Date.now()/1000);if(G.stream)return TN($,async(L)=>{let E=Sg$(F,N,U,G,O,$.req.raw.signal);try{let j=iO(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=SG6)await M()}else if(q.type==="tool-call"){await M();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Cg$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Sg$(F,N,U,G,O,$.req.raw.signal),E=await dO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Cg$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(QH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(QH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(QH(Y.message,"server_error"),500)}});fg$=vg$});function iG6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function xg$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||J7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(N.title.toLowerCase()!==G)continue;if(!iG6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var yg$=w(()=>{D8();W_()});var hg$;var gg$=w(()=>{hg$={name:"decocms",version:"4.243.14",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function tG6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??nG6}}var ug$,nG6="https://ph.studio.decocms.com",cg$;var lg$=w(()=>{D8();Kh0();QC();v9();T$();$61();gg$();ug$=new F1;ug$.get("/",($)=>{let Z={version:hg$.version,theme:Od1(),...jL().logo&&{logo:jL().logo},...TK()&&{internalUrl:dV1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Gv$(),posthog:tG6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!TK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});cg$=ug$});function th($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function E91($){return(th($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function mg$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(th($))}&sz=${Z}`}function dg$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function ig$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?dg$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):dg$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var C_,oG6,rG6,aG6,sG6,pg$;var ng$=w(()=>{C_=l0.enum(["good","bad","neutral"]),oG6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:C_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),rG6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(oG6)),aG6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},sG6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:C_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:C_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(rG6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:C_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:C_.optional()})).min(1)})]),pg$=l0.object({...aG6,template:sG6})});function iP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=pg$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var j91=w(()=>{ng$()});import{join as tg$}from"path";async function $J6($){try{let Z=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(eG6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=iP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||E91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function YG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function ZJ6($,Z){let X=th($),Q=Z?.brand?.trim()||E91(X),Y=mg$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=ig$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${YG(W)}</title>`,`<meta name="description" content="${YG(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="${YG(W)}" />`,`<meta property="og:description" content="${YG(K)}" />`,`<meta property="og:url" content="${YG(J)}" />`,`<meta property="og:image" content="${YG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${YG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${YG(W)}" />`,`<meta name="twitter:description" content="${YG(K)}" />`,`<meta name="twitter:image" content="${YG(H)}" />`,`<meta name="twitter:image:alt" content="${YG(F)}" />`,`<link rel="canonical" href="${YG(J)}" />`,`<link rel="icon" href="${YG(Y)}" sizes="any" />`].join(`
2829
+ `,j=await Z.createBlob(E);await Qg$(Z.owner,Z.repo,j,E);let z=L[0]??`${bP0(Q)}/${Y91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of F91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=er(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:PG6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof Q6&&B.status===422)||Y>=EG6-1)throw B;await q$(pZ(2000,200,Y,2,0.5))}}}function PG6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Vd0(Q,$.deps.coAuthor)}var EG6=3,D91;var Lg$=w(()=>{IO0();kP0();u4();q_();xP0();D91=new Map});import{createHmac as Eg$,randomBytes as AG6,timingSafeEqual as TG6}from"crypto";function jg$(){if(lP0)return lP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return lP0=$?Buffer.from($):AG6(32),lP0}function L91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+RG6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Eg$("sha256",jg$()).update(Q).digest("base64url");return`${Q}.${Y}`}function zg$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Eg$("sha256",jg$()).update(Q).digest("base64url"));if(Y.length!==G.length||!TG6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var RG6=21600000,lP0=null;var Pg$=w(()=>{T$()});import{z as nh}from"zod";function qG6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&IG6.test($)}function Tg$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function dP0($){let Z=$.get("decofileScope");return qP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function mP0($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Rg$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Ag$),$.use("/:virtualMcpId/:branch/*",Ag$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await dP0(Z),Y=await Yg$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=L91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Tg$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return mP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=MG6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{MP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await dP0(Z),W=await Dg$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:ch(Q)},G),K=L91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Tg$(Z)})}catch(J){return mP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await dP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof Q6&&W.status===409))throw W;await hP0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof Q6&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof Q6&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return mP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await dP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof Q6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return mP0(Z,Q)}}),$}var IG6,MG6,Ag$;var Ig$=w(()=>{kP0();D8();n51();IP0();B91();Q91();Lg$();Pg$();U91();q_();xP0();IG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;MG6=nh.object({set:nh.record(nh.string(),nh.unknown()).optional(),delete:nh.array(nh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ag$=RP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!qG6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!zg$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!_B0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=Ya(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var qg$=($)=>{let Z=new F1;if(Z.use("*",D_),Z.route("/",cz0()),Z.route("/",tv$()),Z.route("/",ax$()),Z.route("/",tx$()),Z.route("/",PP0()),Z.route("/tools",Yy$()),Z.route("/",Zy$()),Z.route("/",Sx$({kvStorage:$.kvStorage})),Z.route("/",kx$()),Z.route("/fs",cx$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Bg$()),Z.route("/decofile",Rg$()),Z.route("/",ix$()),Z.route("/deco-sites",dz0()),Z.route("/sso",bz0()),Z.route("/",AP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",uv$()),$.mountDevAssets)Z.route("/dev-assets",mz0({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("/",AC$()),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",dx$()),Z.route("/mcp",rw0()),Z.route("/mcp/self",zP0()),Z.route("/mcp",ew0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Mg$=w(()=>{D8();w61();cv$();j61();iz0();Ir();O61();Vx$();Cx$();lx$();vn();G61();$D0();u51();mx$();px$();ox$();sx$();Xy$();l51();Gy$();d51();aw0();wg$();Ig$()});function kG6($){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 VG6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},kg$=()=>{let $=new F1;return $.use("*",VG6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await lZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:kG6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Vg$=w(()=>{D8();T$();mj0()});import{z as M1}from"zod";function QH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function hG6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function uG6($,Z,X){try{return JSON.parse($)}catch{throw new _g$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function cG6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:uG6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function lG6($){let Z=$.map((X)=>{let Q=X.function.parameters?xY(X.function.parameters):xY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function dG6($){if(!$)return;return{openai:{response_format:$}}}function mG6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Sg$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Cg$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var SG6=256,CG6,_G6,vG6,fG6,bG6,xG6,yG6,gG6,_g$,vg$,fg$;var bg$=w(()=>{_4();D8();uh();XN();CG6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),_G6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),vG6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(_G6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),fG6=M1.object({type:M1.literal("text")}),bG6=M1.object({type:M1.literal("json_object")}),xG6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),yG6=M1.union([fG6,bG6,xG6]),gG6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(vG6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(CG6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:yG6.optional(),user:M1.string().optional()});_g$=class _g$ extends Error{constructor($){super($);this.name="MessageConversionError"}};vg$=new F1;vg$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(QH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(QH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(QH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=gG6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(QH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=hG6(G.model);if(!J)return $.json(QH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>VD(j.providerId));if(!E)return $.json(QH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(QH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=cG6(G.messages),U=G.tools?lG6(G.tools):void 0,O=dG6(G.response_format),B=mG6(),D=Math.floor(Date.now()/1000);if(G.stream)return TN($,async(L)=>{let E=Sg$(F,N,U,G,O,$.req.raw.signal);try{let j=iO(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=SG6)await M()}else if(q.type==="tool-call"){await M();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Cg$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Sg$(F,N,U,G,O,$.req.raw.signal),E=await dO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Cg$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(QH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(QH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(QH(Y.message,"server_error"),500)}});fg$=vg$});function iG6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function xg$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||J7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(N.title.toLowerCase()!==G)continue;if(!iG6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var yg$=w(()=>{D8();W_()});var hg$;var gg$=w(()=>{hg$={name:"decocms",version:"4.243.16",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function tG6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??nG6}}var ug$,nG6="https://ph.studio.decocms.com",cg$;var lg$=w(()=>{D8();Kh0();QC();v9();T$();$61();gg$();ug$=new F1;ug$.get("/",($)=>{let Z={version:hg$.version,theme:Od1(),...jL().logo&&{logo:jL().logo},...TK()&&{internalUrl:dV1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Gv$(),posthog:tG6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!TK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});cg$=ug$});function th($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function E91($){return(th($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function mg$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(th($))}&sz=${Z}`}function dg$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function ig$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?dg$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):dg$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var C_,oG6,rG6,aG6,sG6,pg$;var ng$=w(()=>{C_=l0.enum(["good","bad","neutral"]),oG6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:C_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),rG6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(oG6)),aG6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},sG6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:C_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:C_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(rG6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:C_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:C_.optional()})).min(1)})]),pg$=l0.object({...aG6,template:sG6})});function iP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=pg$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var j91=w(()=>{ng$()});import{join as tg$}from"path";async function $J6($){try{let Z=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(eG6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=iP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||E91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function YG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function ZJ6($,Z){let X=th($),Q=Z?.brand?.trim()||E91(X),Y=mg$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=ig$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${YG(W)}</title>`,`<meta name="description" content="${YG(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="${YG(W)}" />`,`<meta property="og:description" content="${YG(K)}" />`,`<meta property="og:url" content="${YG(J)}" />`,`<meta property="og:image" content="${YG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${YG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${YG(W)}" />`,`<meta name="twitter:description" content="${YG(K)}" />`,`<meta name="twitter:image" content="${YG(H)}" />`,`<meta name="twitter:image:alt" content="${YG(F)}" />`,`<link rel="canonical" href="${YG(J)}" />`,`<link rel="icon" href="${YG(Y)}" sizes="any" />`].join(`
2830
2830
  `)}function XJ6($,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}
2831
2831
  </head>`)}function og$($){let Z=new F1;return Z.get("/:domain/og.png",async(X)=>{let Q=th(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(tg$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(QJ6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?tg$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await $J6(th(Q)),K=ZJ6(Q,W);return X.html(XJ6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var eG6=2500,QJ6=1e4;var rg$=w(()=>{D8();j91();vL();T$()});function Ja($,Z){return fetch(`${oW({})}${$}`,Z)}async function YJ6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Ja(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=iP0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var GJ6,IN,ag$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},sg$;var eg$=w(()=>{D8();_Y();vL();j91();GJ6=new Set(["complete","errored","terminated","unknown"]),IN=new F1;IN.use("*",async($,Z)=>{let X=await H8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});IN.use("/link-token/*",ag$);IN.use("/suggest",ag$);IN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await YJ6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});IN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Ja("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_L({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});IN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ja(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${_L({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:GJ6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});IN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ja(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});IN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ja(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});sg$=IN});import{createHmac as JJ6,timingSafeEqual as WJ6}from"crypto";function Zh$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>KJ6)return!1;let W=JJ6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&WJ6(K,F)})}function Xh$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=PJ(Z),Q=PJ(PJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:YH(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function Qh$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function YH($){return typeof $==="string"?$:void 0}function PJ($){return typeof $==="object"&&$!==null?$:void 0}function pP0($){return typeof $==="number"?new Date($*1000):null}function A91($){return YH($)??YH(PJ($)?.id)}function HJ6($){return A91($.subscription)??YH(PJ(PJ($.parent)?.subscription_details)?.subscription)}function FJ6($){let Z=pP0($.current_period_end);if(Z)return Z;let X=PJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=PJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function z91($,Z){let X=pP0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function P91($,Z){let X=pP0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function NJ6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=YH(PJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(YH(PJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(YH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=YH(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(PJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:PJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(YH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=A91(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(z91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:A91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:P91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=YH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&z91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Qh$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:FJ6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:P91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=HJ6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(z91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:pP0(X.period_end),lastStripeEventAt:P91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function UJ6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Qh$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function $h$($,Z){let X=UJ6($,Z);if(!X)return;MY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Pi1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Yh$($){let Z=new iW(p8().db),X=await NJ6(Z,$);if(!(X.handled&&X.topUp))$h$($,X);if(X.handled&&X.topUp)await eB$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),$h$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await fa1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof vY&&(Q.status===400||Q.status===404)))throw Q}return X}var KJ6=300;var Gh$=w(()=>{_G();M4();K60();lL();gs0()});var OJ6=1048576,T91;var Jh$=w(()=>{D8();BN();T$();Gh$();T91=new F1;T91.post("/webhook",M9({maxSize:OJ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Zh$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Xh$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Yh$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as BJ6}from"crypto";function DJ6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return BJ6(Buffer.from(Y),Buffer.from(Q))}var wJ6=5242880,R91;var Wh$=w(()=>{D8();BN();Cp();R91=new F1;R91.post("/webhook",M9({maxSize:wJ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!DJ6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await $p0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Kh$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Hh$,LJ6,EJ6,Fh$;var Nh$=w(()=>{D8();K3();jy();Lx();Hh$=new F1,LJ6=["range","if-none-match","if-modified-since"],EJ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Hh$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Ah($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await Wn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&O3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Kh$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of LJ6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of EJ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Kh$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Fh$=Hh$});var Wa=_((__)=>{var jJ6=__&&__.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),zJ6=__&&__.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))jJ6(Z,$,X)};Object.defineProperty(__,"__esModule",{value:!0});zJ6(FY(),__)});var Bh$=_((Uh$)=>{Object.defineProperty(Uh$,"__esModule",{value:!0});Uh$.version=void 0;Uh$.version="3.4.0"});var Lh$=_((GH)=>{var PJ6=GH&&GH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(GH,"__esModule",{value:!0});GH.NodeTransport=GH.VERSION=void 0;GH.nodeResolveHost=MJ6;var o6=Wa(),AJ6=z0("net"),I91=z0("tls"),TJ6=z0("path"),wh$=z0("fs"),RJ6=PJ6(z0("dns")),IJ6=Bh$();GH.VERSION=IJ6.version;var qJ6="nats.js";class Dh${socket;version;lang;yields=[];signal=(0,o6.deferred)();closedNotification=(0,o6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=qJ6,this.version=GH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,o6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw o6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new o6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new o6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,o6.deferred)(),X,Q=(0,AJ6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,o6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=o6.DataBuffer.concat(...this.yields),Y=(0,o6.extractProtocolMessage)(Q);if(Y!=="")try{let G=o6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,o6.deferred)();try{if($=(0,TJ6.resolve)($),!(0,wh$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,wh$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,o6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new o6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,o6.deferred)();try{let Y=(0,I91.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new o6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,o6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new o6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,o6.deferred)();try{let Q=(0,I91.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new o6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,o6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,o6.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 I91.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,o6.render)($)}`);let Z=(0,o6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,o6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,o6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}GH.NodeTransport=Dh$;function MJ6($){let Z=(0,o6.deferred)();return RJ6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Ah$=_((Ph$)=>{Object.defineProperty(Ph$,"__esModule",{value:!0});Ph$.connect=kJ6;var Eh$=Lh$(),jh$=Wa(),zh$=Wa();function kJ6($={}){if((0,zh$.hasWsProtocol)($))return Promise.reject(zh$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,jh$.setTransportFactory)({factory:()=>{return new Eh$.NodeTransport},dnsResolveFn:Eh$.nodeResolveHost}),jh$.NatsConnectionImpl.connect($)}});var Th$=_((qN)=>{var SJ6=qN&&qN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),CJ6=qN&&qN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))SJ6(Z,$,X)};Object.defineProperty(qN,"__esModule",{value:!0});qN.connect=void 0;var _J6=Ah$();Object.defineProperty(qN,"connect",{enumerable:!0,get:function(){return _J6.connect}});CJ6(Wa(),qN)});function Mh$($){let Z=$?.connectFn??xJ6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:bJ6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=pZ(fJ6,vJ6,B-1,2,0.5);await q$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Rh$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=qh$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function xJ6($){return Ih$.connect($)}var Rh$,Ih$,qh$,vJ6=100,fJ6=3000,bJ6=3000;var kh$=w(()=>{u4();Rh$=V(ju(),1),Ih$=V(Th$(),1),qh$=V(bw(),1)});function q91($,Z){return`${$}.${Z}`}class M91{cache;constructor($){this.cache=Hh({ttlMs:$?.ttlMs??yJ6,maxSize:$?.maxSize??gJ6})}async get($,Z){return this.cache.get(q91($,Z))??null}async set($,Z,X){this.cache.set(q91($,Z),X)}async invalidate($,Z){this.cache.delete(q91($,Z))}teardown(){this.cache.clear()}}var yJ6=600000,gJ6=5000;var Vh$=()=>{};function nP0($,Z){return`${$}:${Z}`}function k91($){let Z=Hh({ttlMs:$?.ttlMs??hJ6,maxSize:$?.maxSize??uJ6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(Sh$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(nP0(K,H))},set(K,H,F){Z.set(nP0(K,H),F)},invalidate(K,H){Z.delete(nP0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Sh$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(nP0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Sh$="studio.ai-provider-keys.invalidate",hJ6=30000,uJ6=5000;var Ch$=()=>{};class V91{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=_h$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of _h$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var _h$;var vh$=w(()=>{_h$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var fh$=($)=>{let Z;return()=>Z??=$()},S91,C91;var bh$=w(()=>{b6();S91=fh$(()=>S$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),C91=fh$(()=>S$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function nJ6(){return{name:mF,subjects:[`${ww0}.>`],storage:GW.StorageType.File,max_age:dJ6,max_bytes:iJ6,max_msgs_per_subject:pJ6,discard:GW.DiscardPolicy.Old,retention:GW.RetentionPolicy.Limits,duplicate_window:mJ6,num_replicas:1}}class gh${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 xh$($){let Z=yh$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function aJ6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,lJ6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function sJ6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class _91{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=nJ6(),X=await N9(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await GW.jetstreamManager($);try{await Q.streams.info(mF),await Q.streams.update(mF,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(mF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:sJ6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=aJ6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=CH$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=xt0(H,{runId:Z}),U=performance.now()-F;if(S91().record(U),C91().add(1,{"org.id":Q??"unknown"}),rJ6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?xh$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),oJ6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=xt0(Z,{runId:$,dedup:X});if(S91().record(performance.now()-Y),C91().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:xh$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=SH$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?GW.DeliverPolicy.New:GW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=MB($),W;try{W=await(await Q.consumers.get(mF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=zw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Dw0()).pipeThrough(Lw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(mF,{filter:MB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var GW,yh$,cJ6=($)=>{let Z;return()=>Z??=$()},lJ6,dJ6=86400000000000,mJ6=120000000000,iJ6=4294967296,pJ6=500000,tJ6,oJ6,rJ6;var hh$=w(()=>{u4();yt0();Pw0();Ew0();b6();bh$();GW=V(bw(),1),yh$=V(ju(),1),lJ6=cJ6(()=>S$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));tJ6=process.env.STREAM_ENCODE_TRACE==="1",oJ6=process.env.DECOPILOT_STREAM_TRACE==="1";rJ6=tJ6?new gh$:null});function tP0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,kW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var uh$=w(()=>{O8()});class v91{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function ch$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!Er(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await C6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),F8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var lh$=w(()=>{sX();jr();h5()});function G36($){return $ instanceof n7}function J36($,Z){return Z-$>=Q36}class f91{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??eJ6;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??Z36,X=this.options.itemIntervalMs??$36,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-kn0),jo0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-Y36));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await Gt0(this.taskBoard,Y,Q),await Jt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==n8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await iF(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),G36(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+X36)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),F8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!J36(LF(X),Date.now()))return;await qK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===n8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await vy(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 ch$(J,Q,W.map((K)=>K.merged)))return!0;if(await dF$(J,Q))return!0;if(!Y)return!1;if(!wo0(W))return!1;return await Mw0(J,Q,{previewMatchesHead:Do0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var eJ6=60000,$36=300000,Z36=50,X36=60000,Q36=900000,Y36=120000;var dh$=w(()=>{E9();Wo0();cF();kn();lh$();h5();E3();zo0();kK();Pn()});import{readdir as W36,rm as oP0}from"fs/promises";import{join as rP0}from"path";async function aP0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-K36),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await v_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await mh$($,Y,Z);else if(!Y.startsWith(".")){let G=rP0($,Y),J=await v_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await mh$(G,K,Z)}if((await v_(G)).length===0)await oP0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function mh$($,Z,X){let Q=0,Y=rP0($,Z),G=await v_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=rP0(Y,W),H=await v_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=rP0(K,N);await oP0(O,{recursive:!0,force:!0}),Q++}}if((await v_(K)).length===0)await oP0(K,{recursive:!0,force:!0})}if((await v_(Y)).length===0)await oP0(Y,{recursive:!0,force:!0});return Q}async function v_($){try{return(await W36($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var K36=30;var b91=()=>{};import{DBOS as x91,SchedulerMode as H36}from"@dbos-inc/dbos-sdk";async function N36(){let $=[qJ(),f_(),HH()],Z=0;for(let X of $)try{Z+=await aP0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function U36($,Z){await x91.runStep(()=>N36(),{name:"monitoringRetention"})}function ph$(){if(ih$)return;ih$=!0;let $=x91.registerWorkflow(U36,{name:"monitoringRetentionWorkflow"});x91.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:F36,mode:H36.ExactlyOncePerIntervalWhenActive})}var F36="23 4 * * *",ih$=!1;var nh$=w(()=>{JY();b91()});function th$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await sG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await y41($.db,Z,Q.role);return Y.boundAuth=x41({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new wL(X,void 0,Y.boundAuth,Q.role,"self"),AB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var oh$=w(()=>{DL();YC()});function O36(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function w36(){for(let $ of B36)$()}function rh$($){let Z=[...y91.logs,$];y91={...y91,logs:Z.length>500?Z.slice(-500):Z},w36()}function g91(){return D36}var y91,B36,D36=!1;var h91=w(()=>{y91=O36(),B36=new Set});import{EventEmitter as L36}from"events";var u91;var ah$=w(()=>{h91();u91=new L36;u91.on("request",($)=>{rh$($)})});function sh$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=oh(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>oh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Y5.tool}${O}${Y5.dim}(${L})${Y5.reset}`}else if(U.method)G=`${Y5.dim}${oh(U.method)}${Y5.reset}`}}catch{}}let W=oh(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${Y5.mcp}${oh(F.slice(0,12))}\u2026${Y5.reset}`}else if(Y==="/mcp")W=`${Y5.mcp}/mcp${Y5.reset}`;else if(Y==="/mcp/registry")W=`${Y5.mcp}/mcp/registry${Y5.reset}`;let K=j36(Q),H=J?"\u25C0":"\u2190";if(!g91())console.log(`${Y5.dim}${H}${Y5.reset} ${K}${Q}${Y5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=E36(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!g91())console.log(`${Y5.dim}${B}${Y5.reset} ${K}${Q}${Y5.reset} ${W}${G?` ${G}`:""} ${U}${N}${Y5.reset} ${Y5.duration}${O}${Y5.reset}`);u91.emit("request",{method:Q,path:oh(Y),status:N,duration:F,timestamp:new Date})}}}var Y5,E36=($)=>{if($>=500)return Y5.serverError;if($>=400)return Y5.clientError;if($>=300)return Y5.redirect;return Y5.ok},j36=($)=>{return Y5[$]||Y5.reset},oh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var eh$=w(()=>{h91();ah$();Y5={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 Qu$}from"crypto";import{mkdir as z36,readdir as P36,rm as $u$,stat as Yu$}from"fs/promises";import{join as l91,relative as A36}from"path";import{z as z$}from"zod";function Ju$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return l91(T36,Z)}function Wu$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function c91($,Z){let X=Ju$($),Q=Wu$(Z);return l91(X,Q)}function R36($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Qu$("sha256",Y).update(G).digest("hex")}function Xu$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=R36(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Wu$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Ku$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Qu$("md5","etag").update(Q).digest("hex")}"`}async function Hu$($,Z,X,Q,Y){try{let G=await P36($,{withFileTypes:!0});for(let J of G){let W=l91($,J.name),H=A36(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Hu$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Yu$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Ku$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Fu$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:z$.object({prefix:z$.string().optional(),maxKeys:z$.number().optional().default(1000),continuationToken:z$.string().optional(),delimiter:z$.string().optional()}),outputSchema:z$.object({objects:z$.array(z$.object({key:z$.string(),size:z$.number(),lastModified:z$.string(),etag:z$.string()})),nextContinuationToken:z$.string().optional(),isTruncated:z$.boolean(),commonPrefixes:z$.array(z$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Ju$(Q);await z36(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Hu$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:z$.object({key:z$.string()}),outputSchema:z$.object({contentType:z$.string().optional(),contentLength:z$.number(),lastModified:z$.string(),etag:z$.string(),metadata:z$.record(z$.string(),z$.string()).optional()}),handler:async(Y)=>{let G=Y,J=c91(Q,G.key),W=await Yu$(J);return{contentType:P61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Ku$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:z$.object({key:z$.string(),expiresIn:z$.number().optional()}),outputSchema:z$.object({url:z$.string(),expiresIn:z$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Zu$;return{url:Xu$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:z$.object({key:z$.string(),expiresIn:z$.number().optional(),contentType:z$.string().optional()}),outputSchema:z$.object({url:z$.string(),expiresIn:z$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Zu$;return{url:Xu$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:z$.object({key:z$.string()}),outputSchema:z$.object({success:z$.boolean(),key:z$.string()}),handler:async(Y)=>{let G=Y,J=c91(Q,G.key);try{return await $u$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:z$.object({keys:z$.array(z$.string()).max(1000)}),outputSchema:z$.object({deleted:z$.array(z$.string()),errors:z$.array(z$.object({key:z$.string(),message:z$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=c91(Q,K);try{await $u$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function d91($,Z,X){let Q=Fu$(Z,X),Y=new bW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:z$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:z$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new eX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),GJ(Y,G,$,"mcp:dev-assets")}async function Nu$($,Z,X,Q){let G=Fu$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var T36="./data/assets",Zu$=3600,Gu$,Uu$;var Ou$=w(()=>{T$();hy();D8();ll();wC();_X();iz0();Gu$=new F1;Gu$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return d91($.req.raw,Z,Q)});Uu$=Gu$});var Bu$={};Y4(Bu$,{mountDevRoutes:()=>I36});function I36($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return d91(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Nu$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Uu$);let X=new F1;X.use("*",QW({mountPath:"/api/dev-assets"})),X.route("/",mz0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var wu$=w(()=>{D8();B61();iz0();Ou$()});import{sql as q36}from"kysely";import{randomUUID as Du$}from"crypto";import{z as M36}from"zod";async function V36($){let Z=new Date().toISOString(),X=Du$(),Q=l4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Du$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await q36`SELECT
2832
2832
  pg_notify('studio_events', ${X}),