decocms 4.205.2 → 4.205.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/client/assets/{AlertCircle-DT4ogH7T.js → AlertCircle-DNyRl07r.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CUMoC-gq.js → AreaChart-BLXyhfdm.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BBoCs-vs.js → ArrowLeft-DMb1xeg8.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-fFQOhYSl.js → ArrowUp-am5_uNtA.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-BGE42lZT.js → ArrowUpRight-CQae0Phk.js} +1 -1
  6. package/dist/client/assets/{Check-CwoDm-BZ.js → Check-Dj_5OUva.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-BifN-c-M.js → CheckCircle-CaMmPFsb.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-IMS4VarS.js → ChevronDown-z8rewN8_.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-DwwxMXbJ.js → ChevronRight-BwtaIo0v.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-5rvpPh6i.js → ChevronUp-Ck9Za_Vs.js} +1 -1
  11. package/dist/client/assets/{Copy01-C8K4qVaI.js → Copy01-D_LBrNkv.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-BHB5Svc8.js → CpuChip01-BJ1Vem6e.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-BN45_sIz.js → CreditCard01-BKCCwoB6.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-B9CpFwiR.js → DotsVertical-CaBIn1AY.js} +1 -1
  15. package/dist/client/assets/{Eye-BRmj20OZ.js → Eye-DwKekAMK.js} +1 -1
  16. package/dist/client/assets/{FilterLines-C_jqY_xU.js → FilterLines-B_iKi7P5.js} +1 -1
  17. package/dist/client/assets/{Globe01-Ddac6lPc.js → Globe01-BLhh8Cgw.js} +1 -1
  18. package/dist/client/assets/{Globe04-Du0b80Uv.js → Globe04-Cn0ir2Td.js} +1 -1
  19. package/dist/client/assets/{HardDrive-D_c-C6Eg.js → HardDrive-CdH6tRZJ.js} +1 -1
  20. package/dist/client/assets/{Key01-B22jC5bn.js → Key01-CybVo0_t.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-C20sxRVe.js → LayoutLeft-lk9Ko2Pn.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-BDouqx5Q.js → LinkExternal01-C0Z06ad0.js} +1 -1
  23. package/dist/client/assets/{LogOut01-DXL6_Qr2.js → LogOut01-D7JRVvMq.js} +1 -1
  24. package/dist/client/assets/{Monitor01-C7QRCXPb.js → Monitor01-D1lYcsjH.js} +1 -1
  25. package/dist/client/assets/{Palette-tMKRKQFl.js → Palette-DSRESIFG.js} +1 -1
  26. package/dist/client/assets/{Play-UTlssgLs.js → Play-zeSsxd3Y.js} +1 -1
  27. package/dist/client/assets/{Plus-Q1colDUQ.js → Plus-CoVh9p-J.js} +1 -1
  28. package/dist/client/assets/{SearchLg-DJzGFa6n.js → SearchLg-Bp6h1sw5.js} +1 -1
  29. package/dist/client/assets/{SearchMd--SerfgxV.js → SearchMd-M0omef_V.js} +1 -1
  30. package/dist/client/assets/{Settings02-Cr2gx_1C.js → Settings02-DO2Nc3ys.js} +1 -1
  31. package/dist/client/assets/{Share07-BQBk4G5H.js → Share07-BGm6SIfX.js} +1 -1
  32. package/dist/client/assets/{Shield01-BsLY8Gmb.js → Shield01-DSrgNP0M.js} +1 -1
  33. package/dist/client/assets/{Star01-PFFRv69z.js → Star01-nR6LYpps.js} +1 -1
  34. package/dist/client/assets/{Stars01-Botvz2bI.js → Stars01-S50_uot9.js} +1 -1
  35. package/dist/client/assets/{Stars02-BobCFF3I.js → Stars02-CksdEMP5.js} +1 -1
  36. package/dist/client/assets/{Sun-BuxyFxUr.js → Sun-DFm_XfWY.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-BWjXGXL8.js → SwitchHorizontal01-Dst7SGY6.js} +1 -1
  38. package/dist/client/assets/{Tool01-CIJcWYM8.js → Tool01-D9yY3-Us.js} +1 -1
  39. package/dist/client/assets/{Tool02-CwnG6aB4.js → Tool02-CLNmrpEa.js} +1 -1
  40. package/dist/client/assets/{Trash01-BAkKcs6B.js → Trash01-HO7OtnfE.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-BKt75543.js → TrendUp01-BwDaEqEd.js} +1 -1
  42. package/dist/client/assets/{Upload01-B_-YLTnI.js → Upload01-DQY61qLr.js} +1 -1
  43. package/dist/client/assets/{User01-5DEVPoDT.js → User01-BznUEa6Z.js} +1 -1
  44. package/dist/client/assets/{Users01-A_RC1j2Z.js → Users01-D6sh1N3A.js} +1 -1
  45. package/dist/client/assets/{Users03-BztLJOTk.js → Users03-DKbunQPx.js} +1 -1
  46. package/dist/client/assets/{X-DWjGvs9Y.js → X-B2Q_xu3g.js} +1 -1
  47. package/dist/client/assets/{XCircle-zXn3UqPV.js → XCircle-B5CJiABH.js} +1 -1
  48. package/dist/client/assets/{XClose-DGX3A8va.js → XClose-B45u8xPC.js} +1 -1
  49. package/dist/client/assets/{Zap-DQK6JCpg.js → Zap-CqRnX2su.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-BMIe2avN.js → ZapSquare-DMr0tPkI.js} +1 -1
  51. package/dist/client/assets/{access-gate-DAhgJpAk.js → access-gate-BC54MUjS.js} +1 -1
  52. package/dist/client/assets/{agent-icon-C-DDTkgE.js → agent-icon-iMAcTW5p.js} +1 -1
  53. package/dist/client/assets/{agents-list-Dy2PzAv4.js → agents-list-BQvgmz79.js} +1 -1
  54. package/dist/client/assets/{ai-providers-DYnZorR6.js → ai-providers-Bvusl_Qy.js} +1 -1
  55. package/dist/client/assets/{alert-8VDkIqlq.js → alert-B2wW5wE7.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-CfzGfedS.js → alert-dialog-Cw79bxRU.js} +1 -1
  57. package/dist/client/assets/{app-editor-DbMZu-gC.js → app-editor-COqHlKYX.js} +1 -1
  58. package/dist/client/assets/{auth-D-LTL2HK.js → auth-DMYcy0Ou.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-CYmiRFqD.js → auth-catchall-COpx3a0b.js} +1 -1
  60. package/dist/client/assets/{auth-entry-QkdvZK9K.js → auth-entry-C049Wsbd.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-DxRv6e2h.js → auth-split-layout-CA4-wm9m.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-Cm1Y0dlk.js → authenticate-and-persist-oauth-CeXXb3NA.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-Cu5DjMOZ.js → automation-list-row-D6TdEPoC.js} +1 -1
  64. package/dist/client/assets/{automation-runs-DqecvFb-.js → automation-runs-D-LKA8hO.js} +1 -1
  65. package/dist/client/assets/{automations-LhZtItmx.js → automations-Csu1_5vq.js} +1 -1
  66. package/dist/client/assets/{avatar-BZeVTTOK.js → avatar-Bul78N1s.js} +1 -1
  67. package/dist/client/assets/{badge-BPCpCm8-.js → badge-prScT2iN.js} +1 -1
  68. package/dist/client/assets/{billing-B4mFcJs5.js → billing-COf5kkMG.js} +1 -1
  69. package/dist/client/assets/{block-document-DRZuLa4u.js → block-document-DWtQM-dZ.js} +1 -1
  70. package/dist/client/assets/{brand-context-DUBjWP_l.js → brand-context-BDEvgVXo.js} +1 -1
  71. package/dist/client/assets/{buckets-D_fCLOHz.js → buckets-BST1dCUP.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-qqpmkjYm.js → bulk-category-panel-aeDi007f.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-CWZpHRnD.js → capability-load-error-qbIvt61-.js} +1 -1
  74. package/dist/client/assets/{card-DyDb4Jle.js → card-D-jSnOxg.js} +1 -1
  75. package/dist/client/assets/{cards-C-CYIOTG.js → cards-BVGy6ZUW.js} +1 -1
  76. package/dist/client/assets/{category-editor-CoDQwnKr.js → category-editor-3kayX8-y.js} +1 -1
  77. package/dist/client/assets/{chat-context-BRGTVDoJ.js → chat-context-5Ho8P_iR.js} +1 -1
  78. package/dist/client/assets/{checkbox-DmQLUyKd.js → checkbox-IqLBzaWT.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-CSSTROim.js → cli-auth-success-Bz_06ulU.js} +1 -1
  80. package/dist/client/assets/{collection-detail-9_riYquc.js → collection-detail-DDNoO9ZR.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-BKNSmWCv.js → collection-display-button-BCkyIYaq.js} +1 -1
  82. package/dist/client/assets/{collection-search-D7DLkxpI.js → collection-search-BRDem_Mr.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-CUczGdsi.js → collection-table-wrapper-B2YqxUPR.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-BOt_tF0Z.js → collection-tabs-DhmeQHSZ.js} +1 -1
  85. package/dist/client/assets/{command-wAssRwCP.js → command-CUvM3h9Q.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-BKbKGvGk.js → commerce-onboarding-RJCf-zdc.js} +1 -1
  87. package/dist/client/assets/{connect-a_Kc0mv-.js → connect-COIqQlLI.js} +1 -1
  88. package/dist/client/assets/{connection-C8le19RQ.js → connection-BmptdaOp.js} +1 -1
  89. package/dist/client/assets/{connection-card-Cq1eoRdR.js → connection-card-D0M0jKw7.js} +1 -1
  90. package/dist/client/assets/{connection-detail-uHt9VtRi.js → connection-detail-Bl6Q5JeR.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-DCwoZRkE.js → connection-form-helpers-CkiT3zMV.js} +1 -1
  92. package/dist/client/assets/{connections-DeZcofvR.js → connections-DH6-7rDM.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-DwvSnXbs.js → decopilot-sse-pool-C97vdT_r.js} +1 -1
  94. package/dist/client/assets/{dialog-RctqmW5f.js → dialog-XQVS5cqr.js} +1 -1
  95. package/dist/client/assets/{domain-settings-BwEBfFTU.js → domain-settings-BYHinQmX.js} +1 -1
  96. package/dist/client/assets/{drawer-BL-rm4El.js → drawer-D291qIg5.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-OZIKRhC6.js → dropdown-menu-j3JAdZ7A.js} +1 -1
  98. package/dist/client/assets/{empty-state-mluW8SPC.js → empty-state-ChY-KASk.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-DPY7WXBa.js → extract-connection-data-Bmoq9N7a.js} +1 -1
  100. package/dist/client/assets/{file-explorer-BXu2FPoI.js → file-explorer-kk5Zyhnq.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-CwcBsPQB.js → file-type-icon-f87H9sSh.js} +1 -1
  102. package/dist/client/assets/{form-ekTJ6dzg.js → form-loX1BZs5.js} +1 -1
  103. package/dist/client/assets/{general-qziECEnS.js → general-gfEAUBqE.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-7zVikfWX.js → github-repo-picker-otnWcHoH.js} +1 -1
  105. package/dist/client/assets/{hooks-1YxcXvrI.js → hooks-Cz1j_zBd.js} +1 -1
  106. package/dist/client/assets/{index-BdmbzbDr.js → index-6DNYn3dl.js} +5 -5
  107. package/dist/client/assets/{index-BWvsPBN3.js → index-8pkK4A2d.js} +1 -1
  108. package/dist/client/assets/{index-DiIx5Gvt.js → index-BBwLwumH.js} +1 -1
  109. package/dist/client/assets/{index-UBYvdpKD.js → index-BWHQT2R7.js} +1 -1
  110. package/dist/client/assets/{index-C1KPmxzw.js → index-BwJpTLXk.js} +3 -3
  111. package/dist/client/assets/{index-DOD4Ev_Q.js → index-C40BWT9-.js} +1 -1
  112. package/dist/client/assets/{index-CywUMbfX.js → index-Cit0sIqr.js} +1 -1
  113. package/dist/client/assets/{index-BPKD15i5.js → index-CxqOfMw7.js} +1 -1
  114. package/dist/client/assets/{index-1-8hrBMG.js → index-EvKdNhEB.js} +1 -1
  115. package/dist/client/assets/{index-C4ProsEc.js → index-T_O426K_.js} +1 -1
  116. package/dist/client/assets/{index-redirect-Bvjdilku.js → index-redirect-Bwk6c7Kh.js} +1 -1
  117. package/dist/client/assets/{input-CMXTf_xX.js → input-BKpIgmDV.js} +1 -1
  118. package/dist/client/assets/{integration-icon-DeuW4yT1.js → integration-icon-Dl7vFAh0.js} +1 -1
  119. package/dist/client/assets/{invite-member-dialog-Lal4Zdch.js → invite-member-dialog-BStH7Y9F.js} +1 -1
  120. package/dist/client/assets/{label-CBGhn9yh.js → label-xgNa47EQ.js} +1 -1
  121. package/dist/client/assets/{layout-tILx2JEG.js → layout-BqFWjSO4.js} +1 -1
  122. package/dist/client/assets/{login-Be_WWg4t.js → login-nSciD7XP.js} +1 -1
  123. package/dist/client/assets/{mcp-oauth-DJVZ4GGn.js → mcp-oauth-CzANoK9Y.js} +1 -1
  124. package/dist/client/assets/{members-Cz3YClTM.js → members-CUdyHAEU.js} +1 -1
  125. package/dist/client/assets/{monaco-editor-c2IpXYqZ.js → monaco-editor-tkRAZo7-.js} +1 -1
  126. package/dist/client/assets/{monitoring-stats-row-DET-MJsD.js → monitoring-stats-row-Dna8Etg_.js} +1 -1
  127. package/dist/client/assets/{multi-select-hfhWOgV7.js → multi-select-DeOFXQQe.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-l7ucoTjw.js → oauth-callback-DVIFg34s.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-ai-provider-DNSAjUPq.js → oauth-callback-ai-provider-DUViCY8h.js} +1 -1
  130. package/dist/client/assets/{onboarding-BwA88Pjz.js → onboarding-DCHoZQKi.js} +1 -1
  131. package/dist/client/assets/{org-layout-CC80_gVN.js → org-layout-DMahZevQ.js} +1 -1
  132. package/dist/client/assets/{organization-choice-2DzPnUz8.js → organization-choice-CLcM_K64.js} +1 -1
  133. package/dist/client/assets/{orgs-Bqz-FijN.js → orgs-DBF730Ls.js} +1 -1
  134. package/dist/client/assets/{page-seo-form-CdqBiIpP.js → page-seo-form-Dch1sxcv.js} +1 -1
  135. package/dist/client/assets/{popover-C0ce_fcK.js → popover-DVXsqWSU.js} +1 -1
  136. package/dist/client/assets/{post-editor-UlxOV2eD.js → post-editor-CM-yniZ9.js} +1 -1
  137. package/dist/client/assets/{primitives-C_Sw0giD.js → primitives-C_JwQhYW.js} +1 -1
  138. package/dist/client/assets/{profile-GzGqsplI.js → profile-blhG44by.js} +1 -1
  139. package/dist/client/assets/{project-app-view-BQMc0ZDe.js → project-app-view-BKMug1KN.js} +1 -1
  140. package/dist/client/assets/record-editor-CKQbUrDG.js +1 -0
  141. package/dist/client/assets/{redirect-editor-BCf_CGXs.js → redirect-editor-sL_MhGJB.js} +1 -1
  142. package/dist/client/assets/registry-Dg32YaAR.js +2 -0
  143. package/dist/client/assets/{registry-layout-BAUuoPuq.js → registry-layout-9-HsVNOa.js} +1 -1
  144. package/dist/client/assets/{reports-1qQ-xrMf.js → reports-DoR9Z74Z.js} +1 -1
  145. package/dist/client/assets/{require-capability-Dv7RzEaX.js → require-capability-_IDlI0Bx.js} +1 -1
  146. package/dist/client/assets/{required-auth-layout-B0w8q8h4.js → required-auth-layout-CZnHp3Es.js} +1 -1
  147. package/dist/client/assets/{reset-password-DSNTDue1.js → reset-password-SuW5T4X_.js} +1 -1
  148. package/dist/client/assets/{roles-BLO-NvYm.js → roles-BUNKcqll.js} +1 -1
  149. package/dist/client/assets/{search-input-B80ackAh.js → search-input-BVsK7eEJ.js} +1 -1
  150. package/dist/client/assets/{secrets-YfluQU11.js → secrets-DlX1i1d9.js} +1 -1
  151. package/dist/client/assets/{sections-editor-DvVbKrXY.js → sections-editor-BBQ2cGB5.js} +1 -1
  152. package/dist/client/assets/{select-CWYubPco.js → select-CmPW7Mbc.js} +1 -1
  153. package/dist/client/assets/{select-model-DDAHC-f0.js → select-model-CAdm1EkY.js} +1 -1
  154. package/dist/client/assets/{self-tool-result-CbcsfrLH.js → self-tool-result-x-pvudt-.js} +1 -1
  155. package/dist/client/assets/{seo-editor-gor1NZux.js → seo-editor-BY5XdetI.js} +1 -1
  156. package/dist/client/assets/{settings-layout-DgIcloas.js → settings-layout-B7LEK02W.js} +1 -1
  157. package/dist/client/assets/{settings-section-d2uXEQIW.js → settings-section-jdiJSK1p.js} +1 -1
  158. package/dist/client/assets/{shell-controls-C5bmuK3U.js → shell-controls-DWcfbxcO.js} +1 -1
  159. package/dist/client/assets/{shell-layout-Ywi2J373.js → shell-layout-P4ayLvnl.js} +1 -1
  160. package/dist/client/assets/{sidebar-CykWDHgi.js → sidebar-DFn2K1_p.js} +1 -1
  161. package/dist/client/assets/{skeleton-DEqFi2K3.js → skeleton-00d7l2Od.js} +1 -1
  162. package/dist/client/assets/{spinner-B-Et2Rql.js → spinner-C1h38aMd.js} +1 -1
  163. package/dist/client/assets/{sso-WhK7Glkp.js → sso-BfyNlGlm.js} +1 -1
  164. package/dist/client/assets/{store-iTMn61AS.js → store-CCCRstks.js} +1 -1
  165. package/dist/client/assets/store-registry-DT_Iierh.js +2 -0
  166. package/dist/client/assets/{studio-tools-D9rGQPxm.js → studio-tools-Cr1rBS5W.js} +1 -1
  167. package/dist/client/assets/{switch-hgFRSh80.js → switch-BeIMWt_3.js} +1 -1
  168. package/dist/client/assets/{synced-repos-FySBqK5k.js → synced-repos-DwB2Rdii.js} +1 -1
  169. package/dist/client/assets/{tab-id-DnVMEJgY.js → tab-id-BEcJ0qYM.js} +1 -1
  170. package/dist/client/assets/{table-X-NkiHIu.js → table-ETs7pgGr.js} +1 -1
  171. package/dist/client/assets/{tabs-CBAQOMey.js → tabs-CWeptkWi.js} +1 -1
  172. package/dist/client/assets/{textarea-CfCykLsx.js → textarea-C_LPzQzK.js} +1 -1
  173. package/dist/client/assets/{toggle-group-DSfSES7Z.js → toggle-group-BDtL_YzV.js} +1 -1
  174. package/dist/client/assets/{toolbar-CTozWbiD.js → toolbar-B-UgoADs.js} +1 -1
  175. package/dist/client/assets/{tooltip-CpJiwq4X.js → tooltip-CEkzy5_u.js} +1 -1
  176. package/dist/client/assets/{use-ai-providers-8oxmwtvB.js → use-ai-providers-DMycdqpY.js} +1 -1
  177. package/dist/client/assets/{use-automations-C-CYQomu.js → use-automations-DUiJPqOn.js} +1 -1
  178. package/dist/client/assets/{use-autosave-CsbIheZz.js → use-autosave-CXKaZ6CK.js} +1 -1
  179. package/dist/client/assets/{use-capability-BPv-RiGf.js → use-capability-pSOmEs21.js} +1 -1
  180. package/dist/client/assets/{use-clock-tick-BOGk9zyU.js → use-clock-tick-B4KmdsZl.js} +1 -1
  181. package/dist/client/assets/{use-connection-DM3HSMSQ.js → use-connection-D8YWiOXI.js} +1 -1
  182. package/dist/client/assets/{use-copy-BMO4yQox.js → use-copy-d6A5qYJH.js} +1 -1
  183. package/dist/client/assets/{use-create-virtual-mcp-BJPqZDRq.js → use-create-virtual-mcp-S918ao1F.js} +1 -1
  184. package/dist/client/assets/{use-debounced-autosave-DAHuGXYG.js → use-debounced-autosave-CcuW_o0d.js} +1 -1
  185. package/dist/client/assets/{use-debounced-value-Ckt9Zohs.js → use-debounced-value-Cc8H9Y7A.js} +1 -1
  186. package/dist/client/assets/{use-deco-credits-DIvaze32.js → use-deco-credits-D2wX7Gn4.js} +1 -1
  187. package/dist/client/assets/{use-decopilot-events-BOfGPnP3.js → use-decopilot-events-C01aEO9v.js} +1 -1
  188. package/dist/client/assets/{use-delete-connection-CEPVFkka.js → use-delete-connection-BtRPCPDK.js} +1 -1
  189. package/dist/client/assets/{use-deployment-admin-fcH1uOfX.js → use-deployment-admin-BJypE1aj.js} +1 -1
  190. package/dist/client/assets/{use-file-configs-Dr_t9ZJG.js → use-file-configs-DA_XIxnA.js} +1 -1
  191. package/dist/client/assets/{use-infinite-scroll-DrSDlnaP.js → use-infinite-scroll-CeE1cmvi.js} +1 -1
  192. package/dist/client/assets/{use-join-requests-miAhbcpj.js → use-join-requests-Cx3GSy99.js} +1 -1
  193. package/dist/client/assets/{use-mcp-client-Id-huKGb.js → use-mcp-client-BT5_JvUF.js} +1 -1
  194. package/dist/client/assets/{use-mcp-tools-1AXW6cKy.js → use-mcp-tools-OwLVtcDL.js} +1 -1
  195. package/dist/client/assets/{use-members-BW5AInzP.js → use-members-DMTcwT8b.js} +1 -1
  196. package/dist/client/assets/{use-mobile-DOUfE59G.js → use-mobile-BEMYXY8X.js} +1 -1
  197. package/dist/client/assets/{use-navigate-to-agent-DPYeYLWV.js → use-navigate-to-agent-BIzKXNSB.js} +1 -1
  198. package/dist/client/assets/{use-open-billing-url-C-tDZIKU.js → use-open-billing-url-DpoP6d-L.js} +1 -1
  199. package/dist/client/assets/{use-org-auth-client-CX7xcPjj.js → use-org-auth-client-DeSyItiJ.js} +1 -1
  200. package/dist/client/assets/{use-org-sso-B04U2ggi.js → use-org-sso-ChCIpWEL.js} +1 -1
  201. package/dist/client/assets/{use-organization-roles-DAWdJy95.js → use-organization-roles-DMvCuTky.js} +1 -1
  202. package/dist/client/assets/{use-organization-settings-BB4jWajK.js → use-organization-settings-CDwpCjQ4.js} +1 -1
  203. package/dist/client/assets/{use-registry-connections-BcY5Rc2i.js → use-registry-connections-CVtpK_IL.js} +1 -1
  204. package/dist/client/assets/{use-secrets-DaBsQ4R7.js → use-secrets-DMWNrzfP.js} +1 -1
  205. package/dist/client/assets/{use-section-preview-base-CpJHSOY-.js → use-section-preview-base-BQieR9VK.js} +1 -1
  206. package/dist/client/assets/{use-status-sounds-D3MytbK8.js → use-status-sounds-C3TABQk8.js} +1 -1
  207. package/dist/client/assets/{use-tags-CSUg0q_3.js → use-tags-AW5DZW_B.js} +1 -1
  208. package/dist/client/assets/{use-view-mode-BmMHlKNA.js → use-view-mode-CTHo7Cni.js} +1 -1
  209. package/dist/client/assets/{use-virtual-mcp-DBlf_6gT.js → use-virtual-mcp-DfyqQSqA.js} +1 -1
  210. package/dist/client/assets/useInfiniteQuery-DTYpL5Dk.js +1 -0
  211. package/dist/client/assets/{useRouterState-Bhd7F5_V.js → useRouterState-DcvWYS4n.js} +1 -1
  212. package/dist/client/assets/useSuspenseInfiniteQuery-5SsnA51s.js +1 -0
  213. package/dist/client/assets/{users-COsoPIBa.js → users-C_mSSKV-.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-ChpZdRh_.js → variant-calendar-BjU9WgH3.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-BppWi5ko.js → view-mode-toggle-PD0f9zgf.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +4 -4
  218. package/dist/server/server.js +4 -4
  219. package/package.json +1 -1
  220. package/dist/client/assets/record-editor-C2k0YqCy.js +0 -1
  221. package/dist/client/assets/registry-DkCxx0B2.js +0 -2
  222. package/dist/client/assets/store-registry-DVLoUwwk.js +0 -2
  223. package/dist/client/assets/useInfiniteQuery-IHwGk8aa.js +0 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-CP80kQ5s.js +0 -1
@@ -1461,12 +1461,12 @@ Guidelines:
1461
1461
  ${O}`:`[Uploaded files \u2014 use these URLs when calling tools]
1462
1462
  ${O}`,L=new Map(w.flatMap((A)=>A.dataUrl?[[A.dataUrl,A.studioStorageUrl]]:[])),E=G.parts.map((A)=>{if(A.type!=="file"||!("url"in A)||typeof A.url!=="string")return A;let P=L.get(A.url);if(!P)return A;return{...A,url:P}}),j=E.findIndex((A)=>A.type==="text"),z;if(j!==-1)z=E.map((A,P)=>{if(P!==j||A.type!=="text")return A;return{...A,text:`${D}
1463
1463
 
1464
- ${"text"in A?A.text:""}`.trim()}});else z=[{type:"text",text:D},...E];return[...$.slice(0,Y),{...G,parts:z},...$.slice(Y+1)]}async function Aw0($,Z){if(!Z.organization)return $;let X=$.map((W)=>{let K=W.parts.filter((H)=>!XH4(H));return K.length===W.parts.length?W:{...W,parts:K}}),Q=new Set;for(let W of X)for(let K of W.parts)if(K.type==="file"&&"url"in K&&typeof K.url==="string"){let H=zn(K.url);if(H)Q.add(H)}let Y=wK(),G=new Map;if(await Promise.all(Array.from(Q).map(async(W)=>{let K=await Rn(W,Z);if(!K)return;if(Y&&!K.startsWith("https://"))try{let H=await Z.objectStorage.getBytes(W);if(H.byteLength<=kJ$){G.set(W,{kind:"bytes",b64:Buffer.from(H).toString("base64")});return}console.warn(`[file-materializer] dev inline skipped (${H.byteLength}B > ${kJ$}B):`,W)}catch(H){console.error("[file-materializer] dev inline read failed; passing URL through:",H)}G.set(W,{kind:"url",url:K})})),G.size===0)return WH4(X,Z);return X.map((W)=>{let K=W.parts.map((N)=>{if(N.type==="file"&&"url"in N&&typeof N.url==="string"){let F=zn(N.url);if(F){let U=G.get(F);if(U?.kind==="url")return{...N,url:U.url};if(U?.kind==="bytes"){let w="mediaType"in N&&typeof N.mediaType==="string"?N.mediaType:"application/octet-stream";return{...N,url:`data:${w};base64,${U.b64}`}}}}return N});return K.some((N,F)=>N!==W.parts[F])?{...W,parts:K}:W})}async function fJ$($,Z){let X=new Set;if(Jn0($,X),X.size===0)return $;let Q=new Map;if(await Promise.all(Array.from(X).map(async(Y)=>{let G=await Rn(Y,Z);if(G)Q.set(Y,G)})),Q.size===0)return $;return Wn0($,Q)}function Jn0($,Z){if(typeof $==="string")for(let X of $.matchAll(li0()))Z.add(X[1]);else if(Array.isArray($))for(let X of $)Jn0(X,Z);else if($!==null&&typeof $==="object")for(let X of Object.values($))Jn0(X,Z)}function Wn0($,Z){if(typeof $==="string")return $.replace(li0(),(X,Q)=>Z.get(Q)??K7(Q));if(Array.isArray($))return $.map((X)=>Wn0(X,Z));if($!==null&&typeof $==="object")return Object.fromEntries(Object.entries($).map(([X,Q])=>[X,Wn0(Q,Z)]));return $}async function WH4($,Z){let X=$.findLastIndex((H)=>H.role==="user");if(X===-1)return $;let Q=$[X],Y=Q.parts.filter((H)=>H.type==="file"&&("url"in H)&&typeof H.url==="string"&&H.url.startsWith("data:"));if(Y.length===0)return $;let J=(await Promise.all(Y.map(async(H)=>{if(H.type!=="file"||!("url"in H)||typeof H.url!=="string")return null;let N=_J$(H.url);if(!N)return null;let F=Gn0(N.mimeType),U=`chat-uploads/${crypto.randomUUID()}.${F}`,w=await QH4(N.bytes,U,N.mimeType,Z);if(!w)return null;let O=await Rn(w,Z);return O?{dataUrl:H.url,presigned:O}:null}))).filter((H)=>H!==null);if(J.length===0)return $;let W=new Map(J.map((H)=>[H.dataUrl,H.presigned])),K=Q.parts.map((H)=>{if(H.type!=="file"||!("url"in H)||typeof H.url!=="string")return H;let N=W.get(H.url);return N?{...H,url:N}:H});return[...$.slice(0,X),{...Q,parts:K},...$.slice(X+1)]}var ZH4,YH4=604800,kJ$=20971520,GH4,JH4;var ux=B(()=>{fV();qv();JW();MJ$();ZH4=new Set(["application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]);GH4=/^\[file::\/\/(.+?)\]$/,JH4=/^\[file::\/\/(.+?)\]\n([\s\S]*)$/});import{sql as KH4}from"kysely";function Kn0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function bJ$($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function Hn0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;if(!Z.every((X)=>X.status!==null&&In.has(X.status)))return!1;return Z.some((X)=>X.status==="completed")}function HH4($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class IN{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).where("dismissed_at","is",null).orderBy("sort_order","asc").execute()).map((Q)=>this.itemFromDbRow(Q));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let Q=this.itemFromDbRow(X);return await this.attachRefs([Q],Z),Q}async create($){let Z=l8("board"),X=new Date().toISOString(),Q=$.status??"triage",Y=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:Q,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,repo:$.repo??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:KH4`(
1464
+ ${"text"in A?A.text:""}`.trim()}});else z=[{type:"text",text:D},...E];return[...$.slice(0,Y),{...G,parts:z},...$.slice(Y+1)]}async function Aw0($,Z){if(!Z.organization)return $;let X=$.map((W)=>{let K=W.parts.filter((H)=>!XH4(H));return K.length===W.parts.length?W:{...W,parts:K}}),Q=new Set;for(let W of X)for(let K of W.parts)if(K.type==="file"&&"url"in K&&typeof K.url==="string"){let H=zn(K.url);if(H)Q.add(H)}let Y=wK(),G=new Map;if(await Promise.all(Array.from(Q).map(async(W)=>{let K=await Rn(W,Z);if(!K)return;if(Y&&!K.startsWith("https://"))try{let H=await Z.objectStorage.getBytes(W);if(H.byteLength<=kJ$){G.set(W,{kind:"bytes",b64:Buffer.from(H).toString("base64")});return}console.warn(`[file-materializer] dev inline skipped (${H.byteLength}B > ${kJ$}B):`,W)}catch(H){console.error("[file-materializer] dev inline read failed; passing URL through:",H)}G.set(W,{kind:"url",url:K})})),G.size===0)return WH4(X,Z);return X.map((W)=>{let K=W.parts.map((N)=>{if(N.type==="file"&&"url"in N&&typeof N.url==="string"){let F=zn(N.url);if(F){let U=G.get(F);if(U?.kind==="url")return{...N,url:U.url};if(U?.kind==="bytes"){let w="mediaType"in N&&typeof N.mediaType==="string"?N.mediaType:"application/octet-stream";return{...N,url:`data:${w};base64,${U.b64}`}}}}return N});return K.some((N,F)=>N!==W.parts[F])?{...W,parts:K}:W})}async function fJ$($,Z){let X=new Set;if(Jn0($,X),X.size===0)return $;let Q=new Map;if(await Promise.all(Array.from(X).map(async(Y)=>{let G=await Rn(Y,Z);if(G)Q.set(Y,G)})),Q.size===0)return $;return Wn0($,Q)}function Jn0($,Z){if(typeof $==="string")for(let X of $.matchAll(li0()))Z.add(X[1]);else if(Array.isArray($))for(let X of $)Jn0(X,Z);else if($!==null&&typeof $==="object")for(let X of Object.values($))Jn0(X,Z)}function Wn0($,Z){if(typeof $==="string")return $.replace(li0(),(X,Q)=>Z.get(Q)??K7(Q));if(Array.isArray($))return $.map((X)=>Wn0(X,Z));if($!==null&&typeof $==="object")return Object.fromEntries(Object.entries($).map(([X,Q])=>[X,Wn0(Q,Z)]));return $}async function WH4($,Z){let X=$.findLastIndex((H)=>H.role==="user");if(X===-1)return $;let Q=$[X],Y=Q.parts.filter((H)=>H.type==="file"&&("url"in H)&&typeof H.url==="string"&&H.url.startsWith("data:"));if(Y.length===0)return $;let J=(await Promise.all(Y.map(async(H)=>{if(H.type!=="file"||!("url"in H)||typeof H.url!=="string")return null;let N=_J$(H.url);if(!N)return null;let F=Gn0(N.mimeType),U=`chat-uploads/${crypto.randomUUID()}.${F}`,w=await QH4(N.bytes,U,N.mimeType,Z);if(!w)return null;let O=await Rn(w,Z);return O?{dataUrl:H.url,presigned:O}:null}))).filter((H)=>H!==null);if(J.length===0)return $;let W=new Map(J.map((H)=>[H.dataUrl,H.presigned])),K=Q.parts.map((H)=>{if(H.type!=="file"||!("url"in H)||typeof H.url!=="string")return H;let N=W.get(H.url);return N?{...H,url:N}:H});return[...$.slice(0,X),{...Q,parts:K},...$.slice(X+1)]}var ZH4,YH4=604800,kJ$=20971520,GH4,JH4;var ux=B(()=>{fV();qv();JW();MJ$();ZH4=new Set(["application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]);GH4=/^\[file::\/\/(.+?)\]$/,JH4=/^\[file::\/\/(.+?)\]\n([\s\S]*)$/});import{sql as KH4}from"kysely";function Kn0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function bJ$($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function Hn0($,Z=!1){if($.status!=="in_progress")return!1;let X=$.threads.filter((Q)=>Q.hasMessages);if(X.length===0)return!1;if($.repo!=null&&!Z)return!1;if(!X.every((Q)=>Q.status!==null&&In.has(Q.status)))return!1;return X.some((Q)=>Q.status==="completed")}function HH4($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class IN{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).where("dismissed_at","is",null).orderBy("sort_order","asc").execute()).map((Q)=>this.itemFromDbRow(Q));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let Q=this.itemFromDbRow(X);return await this.attachRefs([Q],Z),Q}async create($){let Z=l8("board"),X=new Date().toISOString(),Q=$.status??"triage",Y=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:Q,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,repo:$.repo??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:KH4`(
1465
1465
  select coalesce(min(sort_order), 0) - 1
1466
1466
  from task_board_items
1467
1467
  where organization_id = ${$.organizationId}
1468
1468
  and status = ${Q}
1469
- )`,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(Y)}async update($,Z,X,Q){let Y=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.repo!==void 0?{repo:X.repo}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}async delete($,Z,X){return this.inTransaction(async(Q)=>{let Y=await Q.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Y)return!1;if(jQ({createdBy:Y.created_by}))return await Q.updateTable("task_board_items").set({dismissed_at:new Date().toISOString(),updated_by:X}).where("id","=",$).where("organization_id","=",Z).where("dismissed_at","is",null).execute(),!0;return await Q.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute(),!0})}async dismissedFindingKeys($,Z){if(Z.length===0)return new Set;let X=await this.db.selectFrom("task_board_items").select(["external_key"]).where("organization_id","=",$).where("external_key","in",Z).where("dismissed_at","is not",null).execute();return new Set(X.flatMap((Q)=>Q.external_key??[]))}async listDismissedFindings($){return(await this.db.selectFrom("task_board_items").select(["external_key","updated_by","dismissed_at"]).where("organization_id","=",$).where("dismissed_at","is not",null).orderBy("dismissed_at","desc").execute()).flatMap((X)=>X.external_key&&X.dismissed_at?[{externalKey:X.external_key,dismissedBy:X.updated_by,dismissedAt:X.dismissed_at instanceof Date?X.dismissed_at.toISOString():X.dismissed_at}]:[])}async restoreDismissedFindings($,Z){if(Z&&Z.length===0)return 0;let X=this.db.updateTable("task_board_items").set({dismissed_at:null}).where("organization_id","=",$).where("dismissed_at","is not",null);if(Z)X=X.where("external_key","in",Z);let Q=await X.executeTakeFirst();return Number(Q.numUpdatedRows??0n)}async setItemTags($,Z,X){await this.inTransaction(async(Q)=>{if(await Q.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(Y)=>Y.where("id","not in",Z)).execute(),Z.length>0)await Q.insertInto("task_board_item_tags").values(Z.map((Y)=>({task_board_item_id:$,id:Y,created_by:X,created_at:new Date().toISOString()}))).onConflict((Y)=>Y.doNothing()).execute()})}async addItemTags($,Z,X){if(Z.length===0)return;await this.db.insertInto("task_board_item_tags").values(Z.map((Q)=>({task_board_item_id:$,id:Q,created_by:X,created_at:new Date().toISOString()}))).onConflict((Q)=>Q.doNothing()).execute()}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((Q)=>Q.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async listItemsPendingReview($,Z,X){let Q=this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","updated_at"]).where("status","=","in_review").where("assignee_id","=",L4).where("dismissed_at","is",null);if(X)Q=Q.where((G)=>G.or([G("last_swept_at","is",null),G("last_swept_at","<",X)]));if(Z){let G=new Date(Z.updatedAt);Q=Q.where((J)=>J.or([J("updated_at",">",G),J.and([J("updated_at","=",G),J("id",">",Z.id)])]))}return(await Q.orderBy("updated_at","asc").orderBy("id","asc").limit($).execute()).map((G)=>({id:G.id,organizationId:G.organizationId,updatedAt:G.updated_at instanceof Date?G.updated_at.toISOString():String(G.updated_at)}))}async markSwept($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).execute()}async failedRunInfo($,Z){let X=await this.db.selectFrom("threads as t").leftJoinLateral((Q)=>Q.selectFrom("thread_message_parts as p").select("p.payload").whereRef("p.thread_id","=","t.id").where("p.kind","=","error").orderBy("p.created_at","desc").limit(1).as("err"),(Q)=>Q.onTrue()).select(["t.status","t.failure_kind as kind","err.payload as payload"]).where("t.id","=",$).where("t.organization_id","=",Z).executeTakeFirst();if(!X||X.status!=="failed")return null;return{kind:X.kind??null,errorText:bJ$(X.payload)}}async scheduleRunRetry($,Z,X,Q){return(await this.db.updateTable("task_board_items").set({retry_at:Q,retry_attempts:X}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returning("id").execute()).length>0}async returnToTodoAfterFailure($,Z,X){if((await this.db.updateTable("task_board_items").set({status:"todo",retry_at:null,retry_attempts:0,updated_by:X,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returning("id").execute()).length===0)return null;return await this.getById($,Z)}async failNeverStartedLinkedThreads($,Z,X){let Q=await this.db.selectFrom("threads as t").innerJoin("task_board_item_threads as l","l.thread_id","t.id").select(["t.id as threadId","l.task_board_item_id as itemId","l.organization_id as organizationId"]).where("t.status","=","in_progress").where("t.run_started_at","is",null).where((W)=>W.and([W("t.updated_at","<",Z),W.or([W("t.last_progress_at","is",null),W("t.last_progress_at","<",Z)])])).limit($).execute();if(Q.length===0)return[];let Y=Q.map((W)=>W.threadId),G=await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:"abandoned",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","in",Y).where("status","=","in_progress").returning("id").execute(),J=new Set(G.map((W)=>W.id));return Q.filter((W)=>J.has(W.threadId))}async listItemsStuckAfterFailure($,Z){let X=await this.db.selectFrom("task_board_items as i").innerJoin("task_board_item_threads as l","l.task_board_item_id","i.id").innerJoin("threads as t","t.id","l.thread_id").select(["i.id as id","i.organization_id as organizationId","t.id as threadId"]).where("i.status","=","in_progress").where("i.assignee_id","=",L4).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where("t.updated_at","<",Z).where((Y)=>Y.not(Y.exists(Y.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("t.updated_at","desc").limit($).execute(),Q=new Set;return X.filter((Y)=>!Q.has(Y.id)&&Q.add(Y.id))}async listItemsDueForRetry($,Z){return await this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","retry_attempts as attempts"]).where("retry_at","is not",null).where("retry_at","<=",Z).where("status","=","in_progress").where("dismissed_at","is",null).orderBy("retry_at","asc").limit($).execute()}async claimDueRetry($,Z,X){return(await this.db.updateTable("task_board_items").set({retry_at:null}).where("id","=",$).where("organization_id","=",Z).where("retry_at","is not",null).where("retry_at","<=",X).returning("id").execute()).length>0}async clearRunRetry($,Z){await this.db.updateTable("task_board_items").set({retry_at:null,retry_attempts:0}).where("id","=",$).where("organization_id","=",Z).execute()}async clearSweepBudget($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((Q)=>Q.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((Q)=>({url:Q.url,number:Q.prNumber,repoOwner:Q.repoOwner,repoName:Q.repoName,connectionId:Q.connectionId??null,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let Y=await this.getById(Q,Z);if(!Y||!Hn0(Y))continue;let G=await this.advanceToReviewIfInProgress(Q,Z,Y.updatedBy);if(!G)continue;X.push(G),await this.recordActivity({taskBoardItemId:Q,action:"status_changed",actorId:null,data:{from:Y.status,to:"in_review"}}).catch((J)=>console.error("[task-board] in_review activity write failed",J))}return X}async advanceToReviewIfInProgress($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_review",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let Y=await this.getById(Q,Z);if(!Y||Y.status!=="in_review")continue;X.push(await this.update(Q,Z,{status:"in_progress"},Y.updatedBy))}return X}claimConflictResolution($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}claimReviewChangesBounce($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}async claimInReviewSuperAgentSlot($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",L4).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async unassignSuperAgent($,Z,X){let Q=await this.db.updateTable("task_board_items").set({assignee_id:null,updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("assignee_id","=",L4).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let Q=Z.map((J)=>J.id),Y=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",Q).orderBy("link.created_at","desc").execute(),G=new Map;for(let J of Y){let W={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:bJ$(J.lastMessagePayload),hasPreview:HH4(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},K=G.get(J.taskId);if(K)K.push(W);else G.set(J.taskId,[W])}for(let J of Z)J.threads=G.get(J.id)??[]}async attachTags($,Z){let X=Z.map((G)=>G.id),Q=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),Y=new Map;for(let G of Q){let J={id:G.id,name:G.name,color:G.color??null,createdBy:G.createdBy,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt},W=Y.get(G.taskId);if(W)W.push(J);else Y.set(G.taskId,[J])}for(let G of Z)G.tags=Y.get(G.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:l8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let Q=`rtok_${crypto.randomUUID()}`,Y=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:Q}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(Y)return{claimed:!0,token:Y.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??Q}}async releaseReviewerClaim($,Z,X){await this.db.deleteFrom("task_board_review_claims").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).execute()}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:l8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((Q)=>({id:Q.id,taskBoardItemId:Q.task_board_item_id,action:Q.action,actorId:Q.actor_id,data:typeof Q.data==="string"?JSON.parse(Q.data):Q.data??{},occurredAt:Q.occurred_at instanceof Date?Q.occurred_at.toISOString():Q.occurred_at}))}async listComments($,Z){return(await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").selectAll("c").where("item.organization_id","=",Z).where("c.task_board_item_id","=",$).orderBy("c.created_at","asc").execute()).map((Q)=>Kn0(Q))}async createComment($){if(!await this.db.selectFrom("task_board_items").select("id").where("id","=",$.taskBoardItemId).where("organization_id","=",$.organizationId).executeTakeFirst())return null;let X=null;if($.parentId){let Y=await this.db.selectFrom("task_board_comments").select(["id","parent_id"]).where("id","=",$.parentId).where("task_board_item_id","=",$.taskBoardItemId).executeTakeFirst();if(!Y)return null;X=Y.parent_id??Y.id}let Q=await this.db.insertInto("task_board_comments").values({id:l8("cmt"),task_board_item_id:$.taskBoardItemId,parent_id:X,author_id:$.authorId,body:$.body}).returningAll().executeTakeFirstOrThrow();return Kn0(Q)}async updateComment($){let Z=await this.commentInOrg($.id,$.organizationId);if(!Z)return null;if($.body!==void 0&&Z.authorId!==$.callerId)return null;if($.resolved!==void 0&&Z.parentId!==null)return null;let X=await this.db.updateTable("task_board_comments").set({...$.body===void 0?{}:{body:$.body},...$.resolved===void 0?{}:{resolved:$.resolved},updated_at:new Date().toISOString()}).where("id","=",$.id).returningAll().executeTakeFirst();return X?Kn0(X):null}async deleteComment($,Z,X){let Q=await this.commentInOrg($,Z);if(!Q)return!1;if(Q.authorId!==X&&Q.authorId!==L4)return!1;return await this.db.deleteFrom("task_board_comments").where("id","=",$).execute(),!0}async commentInOrg($,Z){let X=await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").select(["c.id","c.author_id","c.parent_id"]).where("c.id","=",$).where("item.organization_id","=",Z).executeTakeFirst();return X?{authorId:X.author_id,parentId:X.parent_id}:null}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,repo:$.repo,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,retryAttempts:$.retry_attempts??0,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var In;var bV=B(()=>{K3();kX();kZ();In=new Set(["completed","failed","expired"])});function xJ$($){let Z=$[1],X=$[2],Q=Number($[3]);return{owner:Z,repo:X,number:Q,url:`https://github.com/${Z}/${X}/pull/${Q}`}}function Tw0($){let Z=$.length>200000?$.slice(0,200000):$,X=NH4.exec(Z);if(X&&Number(X[3])>0)return xJ$(X);let Q=FH4.exec(Z);if(Q&&Number(Q[3])>0)return xJ$(Q);return null}function yJ$($){if($==null)return null;if(typeof $==="string")return Tw0($);let Z;try{Z=JSON.stringify($)}catch{return null}return Z?Tw0(Z):null}var NH4,FH4;var Nn0=B(()=>{NH4=/https?:\/\/github\.com\/([^/\s"']+)\/([^/\s"']+)\/pull\/(\d+)/,FH4=/https?:\/\/api\.github\.com\/repos\/([^/\s"']+)\/([^/\s"']+)\/pulls\/(\d+)/});function hJ$($){if(gJ$.has($.kind??""))return 0;return DH4($)?OH4:BH4}function DH4($){let Z=$.kind??"";if(gJ$.has(Z))return!1;if(UH4.has(Z))return!0;let X=$.errorText??"";if(!X)return!1;if(X.includes(sU0))return!0;return wH4.some((Q)=>Q.test(X))}var UH4,gJ$,wH4,OH4=3,BH4=1;var uJ$=B(()=>{Vi0();UH4=new Set(["stall","liveness","projection","abandoned"]),gJ$=new Set(["cancelled","superseded"]),wH4=[/sandbox did not become ready/i,/sandbox (?:provisioning|claim) failed/i,/mcp is unusable/i,/harness_crashed: unexpected eof/i,/too many clients already|timeout exceeded when trying to connect/i,/\b(?:429|503)\b|too many requests|service unavailable/i]});class dJ${listeners=new Map;totalCount=0;strategy=null;started=!1;async start($){if(this.started){if(!$)return;await this.stop()}this.strategy=$,await this.strategy.start((Z,X)=>this.localEmit(Z,X)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add($){if(this.totalCount>=lJ$)return console.warn(`[SSEHub] Total connection limit reached (${lJ$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=cJ$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${cJ$})`),null;return Z.set($.id,$),this.totalCount++,$.id}remove($,Z){let X=this.listeners.get($);if(!X)return;if(X.delete(Z)){if(this.totalCount--,X.size===0)this.listeners.delete($)}}emit($,Z){if(this.strategy)this.strategy.broadcast($,Z);else this.localEmit($,Z)}countForOrg($){return this.listeners.get($)?.size??0}get count(){return this.totalCount}localEmit($,Z){let X=this.listeners.get($);if(!X||X.size===0)return;for(let Q of X.values()){if(Q.typePatterns&&!LH4(Z.type,Q.typePatterns))continue;try{Q.push(Z)}catch{this.remove($,Q.id)}}}}function LH4($,Z){for(let X of Z){if(X===$)return!0;if(X.endsWith(".*")){let Q=X.slice(0,-1);if($.startsWith(Q))return!0}}return!1}var cJ$=50,lJ$=500,a5;var Rw0=B(()=>{C6();a5=new dJ$;k$.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(a5.count))});import{z as Iw0}from"zod";async function s5($,Z){try{await $.storage.taskBoard.recordActivity(Z)}catch(X){console.error("[task-board] activity log write failed",X)}}async function mJ$($,Z){if(Z.length===0)return;try{await $.storage.taskBoard.recordActivities(Z)}catch(X){console.error("[task-board] activity log write failed",X)}}var Fn0;var cG=B(()=>{v0();YK();Fn0=m({name:"TASK_BOARD_ACTIVITY_LIST",description:"List a task board item's change history (timeline, oldest first).",annotations:{title:"List Task Activity",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Iw0.object({taskBoardItemId:Iw0.string()}),outputSchema:Iw0.object({activity:Iw0.array(XX$)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{activity:await Z.storage.taskBoard.listActivity($.taskBoardItemId,X)}}})});function Un0($,Z,X,Q){aJ({event:$,organizationId:Z,properties:{task_id:X.id,reports_task:jQ(X),...Q}})}function y4($,Z){a5.emit($,{id:crypto.randomUUID(),type:uo1,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function iJ$($,Z){a5.emit($,{id:crypto.randomUUID(),type:co1,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function EH4($,Z){return $?[$]:Z}async function Mw0($,Z,X){let Q=$.metadata?.runMetadata?.taskBoardItemId,Y=!Q&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return EH4(Q,Y)}async function cx($,Z,X){let Q=$.organization?.id;if(!Q)return;try{for(let Y of await Mw0($,Q,X)){let G=await $.storage.taskBoard.getById(Y,Q);if(!G||qw0[Z]<=qw0[G.status])continue;let J=await $.storage.taskBoard.update(Y,Q,{status:Z},$.auth?.user?.id??G.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:G.status,to:Z}}).catch((W)=>console.error("[task-board] activity log write failed",W)),y4(Q,J),Z==="in_progress"||Z==="in_review")Un0(Z==="in_progress"?"task_run_started":"task_run_completed",Q,J,{from:G.status,via:"pr_open"})}}catch(Y){console.error("[task-board] run transition failed",Y)}}async function kw0($,Z,X,Q){let Y=$.organization?.id;if(!Y)return;try{let G=yJ$(Z);if(!G)return;let J=await Mw0($,Y,Q);for(let W of J)await $.storage.taskBoard.linkPr({taskBoardItemId:W,organizationId:Y,url:G.url,prNumber:G.number,repoOwner:G.owner,repoName:G.repo,connectionId:X??null})}catch(G){console.error("[task-board] PR capture failed",G)}}async function lx($,Z,X,Q){try{let Y=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let G of Y)y4(X,G),Un0("task_run_completed",X,G,{from:"in_progress",via:"thread_finish"});for(let G of Y)await $.clearRunRetry(G.id,X).catch(()=>{})}catch(Y){console.error("[task-board] thread-finish transition failed",Y)}await wn0($,Z,X),await On0($,Q,Z,X)}async function wn0($,Z,X){try{let Q=await $.failedRunInfo(Z,X);if(!Q)return;let Y=hJ$(Q);for(let G of await $.linkedTaskIds(Z,X)){let J=await $.getById(G,X);if(!J||J.status!=="in_progress")continue;if(J.threads.some((H)=>H.hasMessages&&H.status==="in_progress"))continue;let W=J.retryAttempts;if(W<Y){let H=uZ(zH4,jH4,W,2,0.5);if(!await $.scheduleRunRetry(G,X,W+1,new Date(Date.now()+H)))continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"in_progress",retry:W+1,of:Y,reason:Q.errorText??Q.kind}}).catch(()=>{});continue}let K=await $.returnToTodoAfterFailure(G,X,J.updatedBy);if(!K)continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q.errorText??Q.kind,retriesSpent:W}}).catch(()=>{}),y4(X,K),Un0("task_run_failed",X,J,{reason:Q.kind??"error",retries_spent:W})}}catch(Q){console.error("[task-board] failed-run reaction failed",Q)}}async function On0($,Z,X,Q){try{for(let Y of await $.linkedTaskIds(X,Q)){let G=await $.getById(Y,Q);if(!G)continue;if(qw0[G.status]>=qw0.in_review)continue;if(G.threads.some((W)=>W.hasMessages&&(W.status===null||!In.has(W.status))))continue;if((await $.listPrs(Y,Q)).length>0)continue;await io1(Z,Q,Y)}}catch(Y){console.error("[task-board] quota refund pass failed",Y)}}async function GO($,Z,X){let Q=Z.organizationId;if(Z.assigneeId!==L4)return!1;try{let Y=await $.storage.taskBoard.unassignSuperAgent(Z.id,Q,Z.updatedBy);if(!Y)return!1;return await s5($,{taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:Z.assigneeId,to:null,reason:X}}),console.warn(`[task-board] ${Z.id} handed to a human: ${X}`),y4(Q,Y),!0}catch(Y){return console.error(`[task-board] handing ${Z.id} to a human failed`,Y),!1}}async function nJ$($,Z){let X=$.organization?.id;if(!X)return;try{let Q=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let Y of Q)y4(X,Y)}catch(Q){console.error("[task-board] thread-run reopen failed",Q)}}function pJ$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function tJ$($){if(PH4.test($))return!0;return AH4.test($)&&TH4.test($)}var qw0,jH4=30000,zH4=120000,PH4,AH4,TH4;var ZZ=B(()=>{K3();x4();bV();Nn0();uJ$();$6();Rw0();kZ();cG();qw0={triage:0,todo:1,in_progress:2,in_review:3,done:4};PH4=/\bgh\s+pr\s+create\b/,AH4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,TH4=/(?:-X|--request)\s+POST/});function Sw0($,Z){return{resolveArgs:(X)=>fJ$(X,$),onToolCalled:(X)=>{if(!X.isError&&pJ$(X.toolName))cx($,"in_review",Z);let Q=$.organization?.id,Y=$.auth?.user?.id;if(!Q||!Y)return;y1.capture({distinctId:Y,event:"tool_called",groups:{organization:Q},properties:{organization_id:Q,tool_source:"mcp",tool_name:X.toolName,tool_safe_name:X.toolSafeName,read_only:X.annotations?.readOnlyHint??null,destructive:X.annotations?.destructiveHint??null,idempotent:X.annotations?.idempotentHint??null,open_world:X.annotations?.openWorldHint??null,latency_ms:Math.round(X.latencyMs),is_error:X.isError}})},onPrOpened:(X)=>{kw0($,X.result,X.connectionId,Z)}}}var Bn0=B(()=>{x4();ux();ZZ()});function oJ$($){if($ instanceof Error)return $.message;if(typeof $==="string")return $;if(typeof $==="object"&&$!==null){let Z=$.message;if(typeof Z==="string")return Z;try{return JSON.stringify($)}catch{return String($)}}return String($)}function rJ$($){let Z,X,Q=new Promise((W)=>{X=W}),Y=(W)=>{if(Z===void 0)Z=W;X(Z)},J=($.streamText??kw)({model:$.model,system:$.systemMessages,messages:$.messages,tools:$.tools,providerOptions:oY$,prepareStep:$.prepareStep,temperature:$.temperature,maxOutputTokens:$.maxOutputTokens,stopWhen:$.stopWhen,abortSignal:$.abortSignal,onStepFinish:$.onStepFinish,onError:async(W)=>{let K=W.error??W,H=oJ$(K);$.onError?.(H,K),Y(H)},onAbort:async()=>{Y(Z??"Run aborted before completion.")}});return Promise.resolve(J.finishReason).then(()=>{if(Z===void 0)X(void 0)}).catch((W)=>{let K=oJ$(W);$.onError?.(K,W),Y(K)}),{result:J,error:Q}}var aJ$=B(()=>{S4();yi0()});import{SpanStatusCode as Dn0,trace as RH4}from"@opentelemetry/api";async function dx($){let Z=$.tracer??RH4.getTracer("decopilot"),X=$.stepLimit??($.kind==="agent"?UY$:AN),Q=$.planMode??!1,Y=$.toolApprovalLevel??"auto",G=Z.startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":$.virtualMcp.id,"decopilot.agent.kind":$.kind,"decopilot.organization.id":$.organization.id,"decopilot.model.id":$.models.thinking.id}}),J=await FG$({ctx:$.ctx,organization:$.organization,virtualMcp:$.virtualMcp,kind:$.kind,planMode:Q,isDecopilot:$.isDecopilot,agentInstructions:$.systemAgentInstructions,currentThreadId:$.currentThreadId,user:$.user,userContext:$.userContext,codingWorkspace:$.codingWorkspace,passthroughClient:$.passthroughClient,connectionsData:$.connectionsData}),W=$.additionalSystemMessages&&$.additionalSystemMessages.length>0?[...J,...$.additionalSystemMessages]:J,{resolveArgs:K,onToolCalled:H,onPrOpened:N}=Sw0($.ctx,$.currentThreadId),{tools:F}=await zJ$({kind:$.kind,ctx:$.ctx,mcpClient:$.mcpClient,writer:$.writer,planMode:Q,toolApprovalLevel:Y,subtaskParams:$.subtaskParams,resolveArgs:K,onToolCalled:H,onPrOpened:N,fullBuiltInParams:$.subagentBuiltInParams,toolOutputMap:$.toolOutputMap}),U=$.extraTools?{...F,...$.extraTools}:F,w=$.__streamText?void 0:aU0($.provider,$.models.thinking),O=(L)=>{for(let E of L.toolCalls??[]){let j=E.input?.command;if(E.toolName==="bash"&&j&&tJ$(j)){cx($.ctx,"in_review",$.currentThreadId);let z=(L.toolResults??[]).find((A)=>A.toolCallId===E.toolCallId);kw0($.ctx,z?.output,null,$.currentThreadId);break}}return $.onStepFinish?.(L)},D=rJ$({model:w,systemMessages:W,messages:$.messages,tools:U,prepareStep:$.prepareStep,temperature:$.temperature,maxOutputTokens:iY$($.models.thinking.limits,$X(W)+$X($.messages)+$X(mY$(U,$.activeToolNames))),stopWhen:Iw(X),abortSignal:$.abortSignal,onStepFinish:O,streamText:$.__streamText,onError:(L,E)=>{if(console.error(`[runAgentLoop:${$.kind}:${$.virtualMcp.id}] Error`,L),G.setStatus({code:Dn0.ERROR,message:L}),E instanceof Error)G.recordException(E)}});return Promise.resolve(D.result.finishReason).then(()=>{G.setStatus({code:Dn0.OK})}).catch((L)=>{let E=L instanceof Error?L.message:typeof L==="string"?L:`${L}`;G.setStatus({code:Dn0.ERROR,message:E})}).finally(()=>G.end()),{result:D.result,error:D.error,span:G,assembledSystemMessages:W}}var Vw0=B(()=>{S4();ji0();RN();qV();UG$();PJ$();Bn0();ZZ();aJ$()});function Cw0($){let Z=Number.isFinite($)?Math.max(1,$):1,X=0,Q=0,Y=[];return{async acquire(G=0){if(X<Z)X++;else await new Promise((W)=>{let K={priority:G,seq:Q++,wake:W},H=Y.length;while(H>0&&Y[H-1].priority>G)H--;Y.splice(H,0,K)});let J=!1;return()=>{if(J)return;J=!0;let W=Y.shift();if(W)W.wake();else X--}},get active(){return X},get pending(){return Y.length}}}var IH4,sJ$=()=>IH4.acquire();var Ln0=B(()=>{M$();IH4=Cw0(y0().decopilotMaxConcurrentSubagents)});import{z as En0}from"zod";function zn0($){return/socket connection was closed|econnreset|epipe|etimedout|fetch failed|terminated|network error|premature close|\b(429|500|502|503|504)\b|overloaded|rate.?limit|timed? ?out/i.test($)}function MH4($,Z,X=!1){if(!$.repo)return X?Z:void 0;return{repo:{owner:$.repo.owner,name:$.repo.name,connectedGithub:Boolean($.repo.connectionId)},branch:Z?.branch,cwd:Z?.cwd,workspaceKind:"github"}}function jn0($){if($==="{}")return"";return $.length>$3$?$.slice(0,$3$)+"\u2026":$}function kH4($,Z){let X="";try{X=typeof Z==="string"?Z:JSON.stringify(Z??{})}catch{X=""}let Q=jn0(X);return Q?`${$} ${Q}`:$}function Xn0($,Z,X){let{provider:Q,organization:Y,models:G,needsApproval:J,self:W,onChildUsage:K,vmTools:H,codingWorkspace:N,parentBuiltInParams:F,currentThreadId:U}=Z;return f$({description:qH4,inputSchema:$0(Zn0),needsApproval:J,execute:async function*({prompt:w,agent_id:O},{abortSignal:D,toolCallId:L}){let E=performance.now(),j=!!W&&(!O||O===W.id),z=j?W.id:O,A=W?" Omit agent_id to clone yourself (a fresh subagent with your tools + instructions).":"";if(!z){yield{text:"",error:`agent_id is required here.${A}`,finishReason:"error"};return}if(!j&&W){let f=(await X.storage.virtualMcps.findById(W.id,Y.id))?.metadata?.subAgents;if(Array.isArray(f)&&!f.includes(z)){let x=f.length>0?" Or pass an id from <available-agents> or <available-connections>.":"";yield{text:"",error:`Target '${z}' is not in this agent's delegation allowlist (allow=${JSON.stringify(f)}).${A}${x}`,finishReason:"error"};return}}let P;try{P=await Yw0(X,Y.id,z,{superUser:j})}catch(l){yield{text:"",error:`${l.message} (agent_id="${z}").${A}`,finishReason:"error"};return}let{mcpClient:q,targetRef:S}=P,M=S.id,_=await sJ$();D?.addEventListener("abort",()=>_(),{once:!0});try{let l=MH4(S,N,j),f=F?(()=>{let{toolOutputMap:Q0,...O0}=F;return{...O0,passthroughClient:q,agentId:S.id,vmContext:j?O0.vmContext:null,backgroundDispatcher:null,onChildUsage:void 0,pendingImages:[]}})():void 0,x="",p=null,h=0,r=200,w0=()=>{if(!p)return;let Q0=jn0(p.args),O0=x&&!x.endsWith(`
1469
+ )`,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(Y)}async update($,Z,X,Q){let Y=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.repo!==void 0?{repo:X.repo}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}async delete($,Z,X){return this.inTransaction(async(Q)=>{let Y=await Q.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Y)return!1;if(jQ({createdBy:Y.created_by}))return await Q.updateTable("task_board_items").set({dismissed_at:new Date().toISOString(),updated_by:X}).where("id","=",$).where("organization_id","=",Z).where("dismissed_at","is",null).execute(),!0;return await Q.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute(),!0})}async dismissedFindingKeys($,Z){if(Z.length===0)return new Set;let X=await this.db.selectFrom("task_board_items").select(["external_key"]).where("organization_id","=",$).where("external_key","in",Z).where("dismissed_at","is not",null).execute();return new Set(X.flatMap((Q)=>Q.external_key??[]))}async listDismissedFindings($){return(await this.db.selectFrom("task_board_items").select(["external_key","updated_by","dismissed_at"]).where("organization_id","=",$).where("dismissed_at","is not",null).orderBy("dismissed_at","desc").execute()).flatMap((X)=>X.external_key&&X.dismissed_at?[{externalKey:X.external_key,dismissedBy:X.updated_by,dismissedAt:X.dismissed_at instanceof Date?X.dismissed_at.toISOString():X.dismissed_at}]:[])}async restoreDismissedFindings($,Z){if(Z&&Z.length===0)return 0;let X=this.db.updateTable("task_board_items").set({dismissed_at:null}).where("organization_id","=",$).where("dismissed_at","is not",null);if(Z)X=X.where("external_key","in",Z);let Q=await X.executeTakeFirst();return Number(Q.numUpdatedRows??0n)}async setItemTags($,Z,X){await this.inTransaction(async(Q)=>{if(await Q.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(Y)=>Y.where("id","not in",Z)).execute(),Z.length>0)await Q.insertInto("task_board_item_tags").values(Z.map((Y)=>({task_board_item_id:$,id:Y,created_by:X,created_at:new Date().toISOString()}))).onConflict((Y)=>Y.doNothing()).execute()})}async addItemTags($,Z,X){if(Z.length===0)return;await this.db.insertInto("task_board_item_tags").values(Z.map((Q)=>({task_board_item_id:$,id:Q,created_by:X,created_at:new Date().toISOString()}))).onConflict((Q)=>Q.doNothing()).execute()}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((Q)=>Q.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async listItemsPendingReview($,Z,X){let Q=this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","updated_at"]).where("status","=","in_review").where("assignee_id","=",L4).where("dismissed_at","is",null);if(X)Q=Q.where((G)=>G.or([G("last_swept_at","is",null),G("last_swept_at","<",X)]));if(Z){let G=new Date(Z.updatedAt);Q=Q.where((J)=>J.or([J("updated_at",">",G),J.and([J("updated_at","=",G),J("id",">",Z.id)])]))}return(await Q.orderBy("updated_at","asc").orderBy("id","asc").limit($).execute()).map((G)=>({id:G.id,organizationId:G.organizationId,updatedAt:G.updated_at instanceof Date?G.updated_at.toISOString():String(G.updated_at)}))}async markSwept($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).execute()}async failedRunInfo($,Z){let X=await this.db.selectFrom("threads as t").leftJoinLateral((Q)=>Q.selectFrom("thread_message_parts as p").select("p.payload").whereRef("p.thread_id","=","t.id").where("p.kind","=","error").orderBy("p.created_at","desc").limit(1).as("err"),(Q)=>Q.onTrue()).select(["t.status","t.failure_kind as kind","err.payload as payload"]).where("t.id","=",$).where("t.organization_id","=",Z).executeTakeFirst();if(!X||X.status!=="failed")return null;return{kind:X.kind??null,errorText:bJ$(X.payload)}}async scheduleRunRetry($,Z,X,Q){return(await this.db.updateTable("task_board_items").set({retry_at:Q,retry_attempts:X}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returning("id").execute()).length>0}async returnToTodoAfterFailure($,Z,X){if((await this.db.updateTable("task_board_items").set({status:"todo",retry_at:null,retry_attempts:0,updated_by:X,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returning("id").execute()).length===0)return null;return await this.getById($,Z)}async failNeverStartedLinkedThreads($,Z,X){let Q=await this.db.selectFrom("threads as t").innerJoin("task_board_item_threads as l","l.thread_id","t.id").select(["t.id as threadId","l.task_board_item_id as itemId","l.organization_id as organizationId"]).where("t.status","=","in_progress").where("t.run_started_at","is",null).where((W)=>W.and([W("t.updated_at","<",Z),W.or([W("t.last_progress_at","is",null),W("t.last_progress_at","<",Z)])])).limit($).execute();if(Q.length===0)return[];let Y=Q.map((W)=>W.threadId),G=await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:"abandoned",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","in",Y).where("status","=","in_progress").returning("id").execute(),J=new Set(G.map((W)=>W.id));return Q.filter((W)=>J.has(W.threadId))}async listItemsStuckAfterFailure($,Z){let X=await this.db.selectFrom("task_board_items as i").innerJoin("task_board_item_threads as l","l.task_board_item_id","i.id").innerJoin("threads as t","t.id","l.thread_id").select(["i.id as id","i.organization_id as organizationId","t.id as threadId"]).where("i.status","=","in_progress").where("i.assignee_id","=",L4).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where("t.updated_at","<",Z).where((Y)=>Y.not(Y.exists(Y.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("t.updated_at","desc").limit($).execute(),Q=new Set;return X.filter((Y)=>!Q.has(Y.id)&&Q.add(Y.id))}async listItemsDueForRetry($,Z){return await this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","retry_attempts as attempts"]).where("retry_at","is not",null).where("retry_at","<=",Z).where("status","=","in_progress").where("dismissed_at","is",null).orderBy("retry_at","asc").limit($).execute()}async claimDueRetry($,Z,X){return(await this.db.updateTable("task_board_items").set({retry_at:null}).where("id","=",$).where("organization_id","=",Z).where("retry_at","is not",null).where("retry_at","<=",X).returning("id").execute()).length>0}async clearRunRetry($,Z){await this.db.updateTable("task_board_items").set({retry_at:null,retry_attempts:0}).where("id","=",$).where("organization_id","=",Z).execute()}async clearSweepBudget($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((Q)=>Q.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((Q)=>({url:Q.url,number:Q.prNumber,repoOwner:Q.repoOwner,repoName:Q.repoName,connectionId:Q.connectionId??null,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let Y=await this.getById(Q,Z);if(!Y)continue;let G=Y.repo!=null&&(await this.listPrs(Q,Z)).length>0;if(!Hn0(Y,G))continue;let J=await this.advanceToReviewIfInProgress(Q,Z,Y.updatedBy);if(!J)continue;X.push(J),await this.recordActivity({taskBoardItemId:Q,action:"status_changed",actorId:null,data:{from:Y.status,to:"in_review"}}).catch((W)=>console.error("[task-board] in_review activity write failed",W))}return X}async advanceToReviewIfInProgress($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_review",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let Y=await this.getById(Q,Z);if(!Y||Y.status!=="in_review")continue;X.push(await this.update(Q,Z,{status:"in_progress"},Y.updatedBy))}return X}claimConflictResolution($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}claimReviewChangesBounce($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}async claimInReviewSuperAgentSlot($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",L4).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async unassignSuperAgent($,Z,X){let Q=await this.db.updateTable("task_board_items").set({assignee_id:null,updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("assignee_id","=",L4).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let Q=Z.map((J)=>J.id),Y=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",Q).orderBy("link.created_at","desc").execute(),G=new Map;for(let J of Y){let W={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:bJ$(J.lastMessagePayload),hasPreview:HH4(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},K=G.get(J.taskId);if(K)K.push(W);else G.set(J.taskId,[W])}for(let J of Z)J.threads=G.get(J.id)??[]}async attachTags($,Z){let X=Z.map((G)=>G.id),Q=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),Y=new Map;for(let G of Q){let J={id:G.id,name:G.name,color:G.color??null,createdBy:G.createdBy,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt},W=Y.get(G.taskId);if(W)W.push(J);else Y.set(G.taskId,[J])}for(let G of Z)G.tags=Y.get(G.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:l8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let Q=`rtok_${crypto.randomUUID()}`,Y=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:Q}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(Y)return{claimed:!0,token:Y.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??Q}}async releaseReviewerClaim($,Z,X){await this.db.deleteFrom("task_board_review_claims").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).execute()}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:l8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((Q)=>({id:Q.id,taskBoardItemId:Q.task_board_item_id,action:Q.action,actorId:Q.actor_id,data:typeof Q.data==="string"?JSON.parse(Q.data):Q.data??{},occurredAt:Q.occurred_at instanceof Date?Q.occurred_at.toISOString():Q.occurred_at}))}async listComments($,Z){return(await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").selectAll("c").where("item.organization_id","=",Z).where("c.task_board_item_id","=",$).orderBy("c.created_at","asc").execute()).map((Q)=>Kn0(Q))}async createComment($){if(!await this.db.selectFrom("task_board_items").select("id").where("id","=",$.taskBoardItemId).where("organization_id","=",$.organizationId).executeTakeFirst())return null;let X=null;if($.parentId){let Y=await this.db.selectFrom("task_board_comments").select(["id","parent_id"]).where("id","=",$.parentId).where("task_board_item_id","=",$.taskBoardItemId).executeTakeFirst();if(!Y)return null;X=Y.parent_id??Y.id}let Q=await this.db.insertInto("task_board_comments").values({id:l8("cmt"),task_board_item_id:$.taskBoardItemId,parent_id:X,author_id:$.authorId,body:$.body}).returningAll().executeTakeFirstOrThrow();return Kn0(Q)}async updateComment($){let Z=await this.commentInOrg($.id,$.organizationId);if(!Z)return null;if($.body!==void 0&&Z.authorId!==$.callerId)return null;if($.resolved!==void 0&&Z.parentId!==null)return null;let X=await this.db.updateTable("task_board_comments").set({...$.body===void 0?{}:{body:$.body},...$.resolved===void 0?{}:{resolved:$.resolved},updated_at:new Date().toISOString()}).where("id","=",$.id).returningAll().executeTakeFirst();return X?Kn0(X):null}async deleteComment($,Z,X){let Q=await this.commentInOrg($,Z);if(!Q)return!1;if(Q.authorId!==X&&Q.authorId!==L4)return!1;return await this.db.deleteFrom("task_board_comments").where("id","=",$).execute(),!0}async commentInOrg($,Z){let X=await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").select(["c.id","c.author_id","c.parent_id"]).where("c.id","=",$).where("item.organization_id","=",Z).executeTakeFirst();return X?{authorId:X.author_id,parentId:X.parent_id}:null}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,repo:$.repo,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,retryAttempts:$.retry_attempts??0,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var In;var bV=B(()=>{K3();kX();kZ();In=new Set(["completed","failed","expired"])});function xJ$($){let Z=$[1],X=$[2],Q=Number($[3]);return{owner:Z,repo:X,number:Q,url:`https://github.com/${Z}/${X}/pull/${Q}`}}function Tw0($){let Z=$.length>200000?$.slice(0,200000):$,X=NH4.exec(Z);if(X&&Number(X[3])>0)return xJ$(X);let Q=FH4.exec(Z);if(Q&&Number(Q[3])>0)return xJ$(Q);return null}function yJ$($){if($==null)return null;if(typeof $==="string")return Tw0($);let Z;try{Z=JSON.stringify($)}catch{return null}return Z?Tw0(Z):null}var NH4,FH4;var Nn0=B(()=>{NH4=/https?:\/\/github\.com\/([^/\s"']+)\/([^/\s"']+)\/pull\/(\d+)/,FH4=/https?:\/\/api\.github\.com\/repos\/([^/\s"']+)\/([^/\s"']+)\/pulls\/(\d+)/});function hJ$($){if(gJ$.has($.kind??""))return 0;return DH4($)?OH4:BH4}function DH4($){let Z=$.kind??"";if(gJ$.has(Z))return!1;if(UH4.has(Z))return!0;let X=$.errorText??"";if(!X)return!1;if(X.includes(sU0))return!0;return wH4.some((Q)=>Q.test(X))}var UH4,gJ$,wH4,OH4=3,BH4=1;var uJ$=B(()=>{Vi0();UH4=new Set(["stall","liveness","projection","abandoned"]),gJ$=new Set(["cancelled","superseded"]),wH4=[/sandbox did not become ready/i,/sandbox (?:provisioning|claim) failed/i,/mcp is unusable/i,/harness_crashed: unexpected eof/i,/too many clients already|timeout exceeded when trying to connect/i,/\b(?:429|503)\b|too many requests|service unavailable/i]});class dJ${listeners=new Map;totalCount=0;strategy=null;started=!1;async start($){if(this.started){if(!$)return;await this.stop()}this.strategy=$,await this.strategy.start((Z,X)=>this.localEmit(Z,X)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add($){if(this.totalCount>=lJ$)return console.warn(`[SSEHub] Total connection limit reached (${lJ$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=cJ$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${cJ$})`),null;return Z.set($.id,$),this.totalCount++,$.id}remove($,Z){let X=this.listeners.get($);if(!X)return;if(X.delete(Z)){if(this.totalCount--,X.size===0)this.listeners.delete($)}}emit($,Z){if(this.strategy)this.strategy.broadcast($,Z);else this.localEmit($,Z)}countForOrg($){return this.listeners.get($)?.size??0}get count(){return this.totalCount}localEmit($,Z){let X=this.listeners.get($);if(!X||X.size===0)return;for(let Q of X.values()){if(Q.typePatterns&&!LH4(Z.type,Q.typePatterns))continue;try{Q.push(Z)}catch{this.remove($,Q.id)}}}}function LH4($,Z){for(let X of Z){if(X===$)return!0;if(X.endsWith(".*")){let Q=X.slice(0,-1);if($.startsWith(Q))return!0}}return!1}var cJ$=50,lJ$=500,a5;var Rw0=B(()=>{C6();a5=new dJ$;k$.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(a5.count))});import{z as Iw0}from"zod";async function s5($,Z){try{await $.storage.taskBoard.recordActivity(Z)}catch(X){console.error("[task-board] activity log write failed",X)}}async function mJ$($,Z){if(Z.length===0)return;try{await $.storage.taskBoard.recordActivities(Z)}catch(X){console.error("[task-board] activity log write failed",X)}}var Fn0;var cG=B(()=>{v0();YK();Fn0=m({name:"TASK_BOARD_ACTIVITY_LIST",description:"List a task board item's change history (timeline, oldest first).",annotations:{title:"List Task Activity",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Iw0.object({taskBoardItemId:Iw0.string()}),outputSchema:Iw0.object({activity:Iw0.array(XX$)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{activity:await Z.storage.taskBoard.listActivity($.taskBoardItemId,X)}}})});function Un0($,Z,X,Q){aJ({event:$,organizationId:Z,properties:{task_id:X.id,reports_task:jQ(X),...Q}})}function y4($,Z){a5.emit($,{id:crypto.randomUUID(),type:uo1,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function iJ$($,Z){a5.emit($,{id:crypto.randomUUID(),type:co1,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function EH4($,Z){return $?[$]:Z}async function Mw0($,Z,X){let Q=$.metadata?.runMetadata?.taskBoardItemId,Y=!Q&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return EH4(Q,Y)}async function cx($,Z,X){let Q=$.organization?.id;if(!Q)return;try{for(let Y of await Mw0($,Q,X)){let G=await $.storage.taskBoard.getById(Y,Q);if(!G||qw0[Z]<=qw0[G.status])continue;let J=await $.storage.taskBoard.update(Y,Q,{status:Z},$.auth?.user?.id??G.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:G.status,to:Z}}).catch((W)=>console.error("[task-board] activity log write failed",W)),y4(Q,J),Z==="in_progress"||Z==="in_review")Un0(Z==="in_progress"?"task_run_started":"task_run_completed",Q,J,{from:G.status,via:"pr_open"})}}catch(Y){console.error("[task-board] run transition failed",Y)}}async function kw0($,Z,X,Q){let Y=$.organization?.id;if(!Y)return;try{let G=yJ$(Z);if(!G)return;let J=await Mw0($,Y,Q);for(let W of J)await $.storage.taskBoard.linkPr({taskBoardItemId:W,organizationId:Y,url:G.url,prNumber:G.number,repoOwner:G.owner,repoName:G.repo,connectionId:X??null})}catch(G){console.error("[task-board] PR capture failed",G)}}async function lx($,Z,X,Q){try{let Y=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let G of Y)y4(X,G),Un0("task_run_completed",X,G,{from:"in_progress",via:"thread_finish"});for(let G of Y)await $.clearRunRetry(G.id,X).catch(()=>{})}catch(Y){console.error("[task-board] thread-finish transition failed",Y)}await wn0($,Z,X),await On0($,Q,Z,X)}async function wn0($,Z,X){try{let Q=await $.failedRunInfo(Z,X);if(!Q)return;let Y=hJ$(Q);for(let G of await $.linkedTaskIds(Z,X)){let J=await $.getById(G,X);if(!J||J.status!=="in_progress")continue;if(J.threads.some((H)=>H.hasMessages&&H.status==="in_progress"))continue;let W=J.retryAttempts;if(W<Y){let H=uZ(zH4,jH4,W,2,0.5);if(!await $.scheduleRunRetry(G,X,W+1,new Date(Date.now()+H)))continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"in_progress",retry:W+1,of:Y,reason:Q.errorText??Q.kind}}).catch(()=>{});continue}let K=await $.returnToTodoAfterFailure(G,X,J.updatedBy);if(!K)continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q.errorText??Q.kind,retriesSpent:W}}).catch(()=>{}),y4(X,K),Un0("task_run_failed",X,J,{reason:Q.kind??"error",retries_spent:W})}}catch(Q){console.error("[task-board] failed-run reaction failed",Q)}}async function On0($,Z,X,Q){try{for(let Y of await $.linkedTaskIds(X,Q)){let G=await $.getById(Y,Q);if(!G)continue;if(qw0[G.status]>=qw0.in_review)continue;if(G.threads.some((W)=>W.hasMessages&&(W.status===null||!In.has(W.status))))continue;if((await $.listPrs(Y,Q)).length>0)continue;await io1(Z,Q,Y)}}catch(Y){console.error("[task-board] quota refund pass failed",Y)}}async function GO($,Z,X){let Q=Z.organizationId;if(Z.assigneeId!==L4)return!1;try{let Y=await $.storage.taskBoard.unassignSuperAgent(Z.id,Q,Z.updatedBy);if(!Y)return!1;return await s5($,{taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:Z.assigneeId,to:null,reason:X}}),console.warn(`[task-board] ${Z.id} handed to a human: ${X}`),y4(Q,Y),!0}catch(Y){return console.error(`[task-board] handing ${Z.id} to a human failed`,Y),!1}}async function nJ$($,Z){let X=$.organization?.id;if(!X)return;try{let Q=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let Y of Q)y4(X,Y)}catch(Q){console.error("[task-board] thread-run reopen failed",Q)}}function pJ$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function tJ$($){if(PH4.test($))return!0;return AH4.test($)&&TH4.test($)}var qw0,jH4=30000,zH4=120000,PH4,AH4,TH4;var ZZ=B(()=>{K3();x4();bV();Nn0();uJ$();$6();Rw0();kZ();cG();qw0={triage:0,todo:1,in_progress:2,in_review:3,done:4};PH4=/\bgh\s+pr\s+create\b/,AH4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,TH4=/(?:-X|--request)\s+POST/});function Sw0($,Z){return{resolveArgs:(X)=>fJ$(X,$),onToolCalled:(X)=>{if(!X.isError&&pJ$(X.toolName))cx($,"in_review",Z);let Q=$.organization?.id,Y=$.auth?.user?.id;if(!Q||!Y)return;y1.capture({distinctId:Y,event:"tool_called",groups:{organization:Q},properties:{organization_id:Q,tool_source:"mcp",tool_name:X.toolName,tool_safe_name:X.toolSafeName,read_only:X.annotations?.readOnlyHint??null,destructive:X.annotations?.destructiveHint??null,idempotent:X.annotations?.idempotentHint??null,open_world:X.annotations?.openWorldHint??null,latency_ms:Math.round(X.latencyMs),is_error:X.isError}})},onPrOpened:(X)=>{kw0($,X.result,X.connectionId,Z)}}}var Bn0=B(()=>{x4();ux();ZZ()});function oJ$($){if($ instanceof Error)return $.message;if(typeof $==="string")return $;if(typeof $==="object"&&$!==null){let Z=$.message;if(typeof Z==="string")return Z;try{return JSON.stringify($)}catch{return String($)}}return String($)}function rJ$($){let Z,X,Q=new Promise((W)=>{X=W}),Y=(W)=>{if(Z===void 0)Z=W;X(Z)},J=($.streamText??kw)({model:$.model,system:$.systemMessages,messages:$.messages,tools:$.tools,providerOptions:oY$,prepareStep:$.prepareStep,temperature:$.temperature,maxOutputTokens:$.maxOutputTokens,stopWhen:$.stopWhen,abortSignal:$.abortSignal,onStepFinish:$.onStepFinish,onError:async(W)=>{let K=W.error??W,H=oJ$(K);$.onError?.(H,K),Y(H)},onAbort:async()=>{Y(Z??"Run aborted before completion.")}});return Promise.resolve(J.finishReason).then(()=>{if(Z===void 0)X(void 0)}).catch((W)=>{let K=oJ$(W);$.onError?.(K,W),Y(K)}),{result:J,error:Q}}var aJ$=B(()=>{S4();yi0()});import{SpanStatusCode as Dn0,trace as RH4}from"@opentelemetry/api";async function dx($){let Z=$.tracer??RH4.getTracer("decopilot"),X=$.stepLimit??($.kind==="agent"?UY$:AN),Q=$.planMode??!1,Y=$.toolApprovalLevel??"auto",G=Z.startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":$.virtualMcp.id,"decopilot.agent.kind":$.kind,"decopilot.organization.id":$.organization.id,"decopilot.model.id":$.models.thinking.id}}),J=await FG$({ctx:$.ctx,organization:$.organization,virtualMcp:$.virtualMcp,kind:$.kind,planMode:Q,isDecopilot:$.isDecopilot,agentInstructions:$.systemAgentInstructions,currentThreadId:$.currentThreadId,user:$.user,userContext:$.userContext,codingWorkspace:$.codingWorkspace,passthroughClient:$.passthroughClient,connectionsData:$.connectionsData}),W=$.additionalSystemMessages&&$.additionalSystemMessages.length>0?[...J,...$.additionalSystemMessages]:J,{resolveArgs:K,onToolCalled:H,onPrOpened:N}=Sw0($.ctx,$.currentThreadId),{tools:F}=await zJ$({kind:$.kind,ctx:$.ctx,mcpClient:$.mcpClient,writer:$.writer,planMode:Q,toolApprovalLevel:Y,subtaskParams:$.subtaskParams,resolveArgs:K,onToolCalled:H,onPrOpened:N,fullBuiltInParams:$.subagentBuiltInParams,toolOutputMap:$.toolOutputMap}),U=$.extraTools?{...F,...$.extraTools}:F,w=$.__streamText?void 0:aU0($.provider,$.models.thinking),O=(L)=>{for(let E of L.toolCalls??[]){let j=E.input?.command;if(E.toolName==="bash"&&j&&tJ$(j)){cx($.ctx,"in_review",$.currentThreadId);let z=(L.toolResults??[]).find((A)=>A.toolCallId===E.toolCallId);kw0($.ctx,z?.output,null,$.currentThreadId);break}}return $.onStepFinish?.(L)},D=rJ$({model:w,systemMessages:W,messages:$.messages,tools:U,prepareStep:$.prepareStep,temperature:$.temperature,maxOutputTokens:iY$($.models.thinking.limits,$X(W)+$X($.messages)+$X(mY$(U,$.activeToolNames))),stopWhen:Iw(X),abortSignal:$.abortSignal,onStepFinish:O,streamText:$.__streamText,onError:(L,E)=>{if(console.error(`[runAgentLoop:${$.kind}:${$.virtualMcp.id}] Error`,L),G.setStatus({code:Dn0.ERROR,message:L}),E instanceof Error)G.recordException(E)}});return Promise.resolve(D.result.finishReason).then(()=>{G.setStatus({code:Dn0.OK})}).catch((L)=>{let E=L instanceof Error?L.message:typeof L==="string"?L:`${L}`;G.setStatus({code:Dn0.ERROR,message:E})}).finally(()=>G.end()),{result:D.result,error:D.error,span:G,assembledSystemMessages:W}}var Vw0=B(()=>{S4();ji0();RN();qV();UG$();PJ$();Bn0();ZZ();aJ$()});function Cw0($){let Z=Number.isFinite($)?Math.max(1,$):1,X=0,Q=0,Y=[];return{async acquire(G=0){if(X<Z)X++;else await new Promise((W)=>{let K={priority:G,seq:Q++,wake:W},H=Y.length;while(H>0&&Y[H-1].priority>G)H--;Y.splice(H,0,K)});let J=!1;return()=>{if(J)return;J=!0;let W=Y.shift();if(W)W.wake();else X--}},get active(){return X},get pending(){return Y.length}}}var IH4,sJ$=()=>IH4.acquire();var Ln0=B(()=>{M$();IH4=Cw0(y0().decopilotMaxConcurrentSubagents)});import{z as En0}from"zod";function zn0($){return/socket connection was closed|econnreset|epipe|etimedout|fetch failed|terminated|network error|premature close|\b(429|500|502|503|504)\b|overloaded|rate.?limit|timed? ?out/i.test($)}function MH4($,Z,X=!1){if(!$.repo)return X?Z:void 0;return{repo:{owner:$.repo.owner,name:$.repo.name,connectedGithub:Boolean($.repo.connectionId)},branch:Z?.branch,cwd:Z?.cwd,workspaceKind:"github"}}function jn0($){if($==="{}")return"";return $.length>$3$?$.slice(0,$3$)+"\u2026":$}function kH4($,Z){let X="";try{X=typeof Z==="string"?Z:JSON.stringify(Z??{})}catch{X=""}let Q=jn0(X);return Q?`${$} ${Q}`:$}function Xn0($,Z,X){let{provider:Q,organization:Y,models:G,needsApproval:J,self:W,onChildUsage:K,vmTools:H,codingWorkspace:N,parentBuiltInParams:F,currentThreadId:U}=Z;return f$({description:qH4,inputSchema:$0(Zn0),needsApproval:J,execute:async function*({prompt:w,agent_id:O},{abortSignal:D,toolCallId:L}){let E=performance.now(),j=!!W&&(!O||O===W.id),z=j?W.id:O,A=W?" Omit agent_id to clone yourself (a fresh subagent with your tools + instructions).":"";if(!z){yield{text:"",error:`agent_id is required here.${A}`,finishReason:"error"};return}if(!j&&W){let f=(await X.storage.virtualMcps.findById(W.id,Y.id))?.metadata?.subAgents;if(Array.isArray(f)&&!f.includes(z)){let x=f.length>0?" Or pass an id from <available-agents> or <available-connections>.":"";yield{text:"",error:`Target '${z}' is not in this agent's delegation allowlist (allow=${JSON.stringify(f)}).${A}${x}`,finishReason:"error"};return}}let P;try{P=await Yw0(X,Y.id,z,{superUser:j})}catch(l){yield{text:"",error:`${l.message} (agent_id="${z}").${A}`,finishReason:"error"};return}let{mcpClient:q,targetRef:S}=P,M=S.id,_=await sJ$();D?.addEventListener("abort",()=>_(),{once:!0});try{let l=MH4(S,N,j),f=F?(()=>{let{toolOutputMap:Q0,...O0}=F;return{...O0,passthroughClient:q,agentId:S.id,vmContext:j?O0.vmContext:null,backgroundDispatcher:null,onChildUsage:void 0,pendingImages:[]}})():void 0,x="",p=null,h=0,r=200,w0=()=>{if(!p)return;let Q0=jn0(p.args),O0=x&&!x.endsWith(`
1470
1470
  `)?`
1471
1471
  `:"";x+=`${O0}\u21B3 ${Q0?`${p.name} ${Q0}`:p.name}
1472
1472
  `,p=null},B0=()=>{if(!p)return x;let Q0=jn0(p.args),O0=x&&!x.endsWith(`
@@ -1513,7 +1513,7 @@ ${$.description}
1513
1513
  `):Z?.feedback?[Z.pr?`A reviewer requested changes on the existing pull request #${Z.pr.number} (${Z.pr.url}):`:"A reviewer requested changes on your previous work:",Z.feedback,Z.pr?`Load the repo, then CHECK OUT that PR's branch (e.g. \`gh pr checkout ${Z.pr.number}\`) before editing, address the feedback, commit, and push to update the SAME pull request \u2014 do NOT open a new one or start a new branch.`:"Address this feedback.",""].join(`
1514
1514
  `):"","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.","- 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(`
1515
1515
  `)}async function pF4($,Z,X){let Y=(await $.storage.taskBoard.listPrs(Z.id,Z.organizationId).catch(()=>[])).find((G)=>G.number===X);if(!Y)return null;return HK$($,Z.organizationId,Y).catch(()=>null)}async function SN($,Z,X){let Q=await lo1($,Z,X?.userInitiated?pb():void 0),Y="decopilot";try{let G=y0().taskBoardRerunReusesPrBranch&&X?.pr?await pF4($,Z,X.pr.number):null,J=await GO0($,Z.organizationId);if(J){Y="claude-code";let W="repo"in J?J.repo:null;await fn($,Z,{title:`Super Agent: ${Z.title}`,...X?.runClass?{runClass:X.runClass}:{},...G?{pinnedRef:G}:{},prompt:aW$(Z,W,{...X,..."choices"in J?{repoChoices:J.choices}:{}}),temperature:0.5,harnessId:"claude-code",...W?{repo:W}:{}})}else await fn($,Z,{title:`Super Agent: ${Z.title}`,...X?.runClass?{runClass:X.runClass}:{},prompt:nF4(Z,X),temperature:0.5,...G?{pinnedRef:G}:{}})}catch(G){throw await do1($.storage.organizationBilling,Z.organizationId,Z.id,Q),G}aJ({event:"task_run_enqueued",organizationId:Z.organizationId,properties:{task_id:Z.id,reports_task:jQ(Z),claim:Q,harness:Y,...X?.runClass?{run_class:X.runClass}:{}}})}var FO=B(()=>{kZ();K3();kZ();x4();M$();Fp0();sx();Up0()});import{z as VN}from"zod";var Rp0;var NK$=B(()=>{v0();YK();Cm0();FO();cG();ZZ();Rp0=m({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:VN.object({title:VN.string().min(1),description:VN.string().nullable().optional(),status:LN.optional(),priority:DV.optional(),assigneeId:VN.string().nullable().optional(),repo:VN.string().nullable().optional(),dueDate:VN.string().datetime().nullable().optional(),tagIds:VN.array(VN.string()).optional()}),outputSchema:VN.object({item:Vx}),handler:async($,Z)=>{Z0(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 bU0(Z,X,$.assigneeId);let Q=$.assigneeId===L4;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?W1(Z):null,repo:$.repo??null,dueDate:$.dueDate??null,by:W1(Z)});if($.tagIds?.length)await Z.storage.taskBoard.setItemTags(Y.id,$.tagIds,W1(Z)),Y=await Z.storage.taskBoard.getById(Y.id,X);return await s5(Z,{taskBoardItemId:Y.id,action:"created",actorId:W1(Z)}),y4(X,Y),await ex(Z,Y),{item:Y}}})});function tF4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&R3$($))return"nudge";return"none"}function oF4($){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(`
1516
- `)}async function rF4($,Z,X){let Q=Z.organizationId,Y=await r7($,"smart"),G=X.virtual_mcp_id??TD(Q),J={id:`stall-nudge-${Z.id}-${X.id}`,role:"user",parts:[{type:"text",text:oF4(X.harness_id)}]};await new ZX({storage:$.storage.threads.messageParts(),orgId:Q,threadId:X.id,runId:X.id}).emitRequestMessage(J),await MN({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:xU0(Z)}},{workflowID:`stall-nudge:${Z.id}:${X.id}`})}async function aF4($,Z){let X=await $.storage.threads.get(Z);if(!X)return{action:"none",thread:null};return{action:tF4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id,sandboxProviderKind:X.sandbox_provider_kind}),thread:X}}function sF4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return oi0($,Z)}async function eF4($,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||!sF4(Y))continue;if(await $.storage.threads.markRunFailed(Q.threadId,Ip0,"abandoned"))X.push(Q.threadId),console.warn(`[task-board] failed never-started thread ${Q.threadId} on ${Z.id}`)}return X}async function FK$($,Z){let X=$.organization?.id;if(!X)return;for(let Q of Z){if(Q.status==="in_progress")try{if((await eF4($,Q)).length>0)continue}catch(G){console.error(`[task-board] reaping threads for ${Q.id} failed`,G)}if(!Hn0(Q))continue;let Y=Q.threads.find((G)=>G.hasMessages);if(!Y)continue;try{let{action:G,thread:J}=await aF4($,Y.threadId);if(G==="none"||!J)continue;if(G==="advance")await lx($.storage.taskBoard,Y.threadId,X,$.storage.organizationBilling);else await rF4($,Q,J)}catch(G){console.error(`[task-board] stall recovery failed for ${Q.id}`,G)}}}var Ip0="Run never started \u2014 no pod picked it up before the idle window elapsed";var qp0=B(()=>{Yn();JO();rw();KO();bV();L8();ZZ()});import{z as Mp0}from"zod";var kp0;var UK$=B(()=>{v0();YK();qp0();kp0=m({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization.",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Mp0.object({}),outputSchema:Mp0.object({items:Mp0.array(Vx)}),handler:async($,Z)=>{Z0(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);return FK$(Z,Q),{items:Q}}})});import{z as lG}from"zod";function ZU4($,Z){let X=[];for(let{field:G,action:J}of $U4){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 XU4($,Z){if($!==L4)return!1;if(!Z)return!1;return Z.assigneeId!==L4?!0:Z.status==="todo"}var $U4,Sp0;var wK$=B(()=>{v0();YK();Cm0();FO();cG();ZZ();K3();$U4=[{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"}];Sp0=m({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:lG.object({id:lG.string(),title:lG.string().min(1).optional(),description:lG.string().nullable().optional(),status:LN.optional(),priority:DV.optional(),assigneeId:lG.string().nullable().optional(),repo:lG.string().nullable().optional(),dueDate:lG.string().datetime().nullable().optional(),sortOrder:lG.number().optional(),tagIds:lG.array(lG.string()).optional(),linkThreadId:lG.string().optional()}),outputSchema:lG.object({item:Vx}),handler:async($,Z)=>{Z0(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 bU0(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=$.assigneeId!==void 0&&$.assigneeId!==(Y?.assigneeId??null),J=XU4($.assigneeId,Y);if(Y&&jQ(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(J)await F50(Z,Y,pb())}if($.tagIds!==void 0){let K=await Z.storage.tags.listOrgTags(X),H=new Set(K.map((N)=>N.id));for(let N of $.tagIds)if(!H.has(N))throw Error(`Tag not found: ${N}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,W1(Z))}let W;if(Q)W=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:J?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId,assignedBy:G?$.assigneeId?W1(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder},W1(Z));else{let K=await Z.storage.taskBoard.getById($.id,X);if(!K)throw Error(`Task board item not found: ${$.id}`);W=K}if(Y){let K=W1(Z),H=ZU4(Y,W);if(H.length>0)await mJ$(Z,H.map((N)=>({taskBoardItemId:W.id,actorId:K,...N})))}if(Q||$.linkThreadId)y4(X,W);if(J)await ex(Z,W,{userInitiated:!0});return{item:W}}})});import{z as UO0}from"zod";var Vp0;var OK$=B(()=>{v0();ZZ();Vp0=m({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:UO0.object({id:UO0.string()}),outputSchema:UO0.object({success:UO0.boolean()}),handler:async($,Z)=>{Z0(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,W1(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return iJ$(X,$.id),{success:!0}}})});import{z as gV}from"zod";var Cp0;var BK$=B(()=>{v0();Nn0();ZZ();Qn();Cp0=m({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:gV.object({url:gV.string().describe("The pull request URL, e.g. https://github.com/owner/repo/pull/123")}),outputSchema:gV.object({url:gV.string(),prNumber:gV.number(),taskBoardItemIds:gV.array(gV.string())}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z).id,{threadId:Q}=fU0(),Y=Tw0($.url);if(!Y)throw Error(`Not a GitHub pull request URL: ${$.url} (expected https://github.com/<owner>/<repo>/pull/<number>)`);let G=await Mw0(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 LK$($){DK$=$}function EK$($){DK$?.broadcast($)}var DK$=null;import{DBOS as wO0}from"@dbos-inc/dbos-sdk";function QU4($,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 _p0($){return(await wO0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING","ENQUEUED"],loadInput:!0,loadOutput:!1})).map((X)=>QU4(X,$)).filter((X)=>X!==null).sort((X,Q)=>X.enqueuedAt-Q.enqueuedAt)}async function jK$($,Z){if(!Z.startsWith(`thread-run:${$}:`))return!1;return await wO0.cancelWorkflows([Z]),!0}async function OO0($){let Z=await wO0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING"],loadInput:!1,loadOutput:!1});if(Z.length===0)return;await wO0.cancelWorkflows(Z.map((X)=>X.workflowID))}var vp0=()=>{};import{z as $y}from"zod";function GU4($){return $.threads.filter((Z)=>Z.status!==null&&!In.has(Z.status)).map((Z)=>Z.threadId)}async function JU4($,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 OO0(Z).catch(Q("gate-head"));let Y=await $.storage.threads.getRunFence(Z).catch(()=>null);if(Y)await vn(Z,Y).catch(Q("hosted-harness"));EK$(Z)}var YU4="Superseded by a manual re-run of this task",fp0;var zK$=B(()=>{v0();kZ();bV();KO();vp0();cG();ZZ();FO();K3();fp0=m({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:$y.object({id:$y.string().describe("The task board item to re-run.")}),outputSchema:$y.object({status:$y.string().describe("The task's lane after the re-run was queued."),supersededThreadIds:$y.array($y.string()).describe("Runs that were failed to make room for this one.")}),handler:async({id:$},Z)=>{Z0(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!==L4)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 F50(Z,Q,pb());let Y=[];for(let J of GU4(Q)){if(!await Z.storage.threads.failIfNotTerminal(J,YU4,"superseded"))continue;Y.push(J),await JU4(Z,J,X)}let G=await Z.storage.taskBoard.update($,X,{status:"in_progress"},W1(Z));return await s5(Z,{taskBoardItemId:$,action:"status_changed",actorId:W1(Z),data:{from:Q.status,to:"in_progress",reason:"rerun"}}),y4(X,G),await SN(Z,G,{userInitiated:!0}),{status:G.status,supersededThreadIds:Y}}})});async function HU4($,Z,X,Q,Y){if(KU4.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 s5($,{taskBoardItemId:X,action:"merge_failed",actorId:null,data:{reason:Q,...Y?{detail:Y}:{}}})}async function bn($,Z,X){let Q=async(N,F)=>{return await HU4($,Z,X,N,F),{merged:!1,reason:N,...F?{detail:F}:{}}},G=(await $.storage.taskBoard.listPrs(X,Z))[0];if(!G)return console.warn(`[task-board] merge skipped \u2014 no linked PR on ${X}`),Q("no_pr");let J=await WK$($,Z,G);if(J==="failing"||J==="pending")return console.warn(`[task-board] merge blocked \u2014 checks ${J} on PR #${G.number}`),Q(J==="failing"?"checks_failing":"checks_pending");let W=`${G.repoOwner}/${G.repoName}`,K=await ax($,Z,G.connectionId,{owner:G.repoOwner,name:G.repoName});if(!K)return console.warn("[task-board] merge blocked \u2014 no active GitHub connection for "+`${W} (PR #${G.number})`),Q("no_connection",W);let H=await j5(K,$,!0);try{let N=await H.callTool({name:"merge_pull_request",arguments:{owner:G.repoOwner,repo:G.repoName,pullNumber:G.number}},void 0,{timeout:WU4});if(N?.isError){let F=JSON.stringify(N?.content);return console.error(`[task-board] merge refused by GitHub on PR #${G.number}:`,F),Q("refused",F?.slice(0,500))}return XK$(K.id),{merged:!0}}catch(N){return console.error("[task-board] merge PR failed",N),Q("error",N instanceof Error?N.message:String(N))}finally{await H.close().catch(()=>{})}}async function bp0($,Z,X){let Y=(await $.storage.organizationSettings.get(Z))?.flags??{},G=kG.filter((W)=>Y[$N[W]]===!0),J=await $.storage.taskBoard.listActivity(X,Z);return Lw(J,G,{verifiedOnly:!0})}async function NU4($,Z){let Q=(await $.storage.organizationSettings.get(Z.organizationId))?.flags??{},Y=kG.filter((J)=>Q[$N[J]]===!0),G=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);if(!go1(G,Y))return;await GO($,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 FU4($){if($.merged||$.reason!=="refused")return!1;return!Ep0($.detail??"")}async function UU4($,Z,X){if(!FU4(X))return;let Q=Z.organizationId,G=(await $.storage.taskBoard.listPrs(Z.id,Q))[0];if(!G)return;await rx($,Q,Z,{pr:{number:G.number,url:G.url},conflict:await FO0($,Q,G)}).catch((J)=>{console.error("[task-board] sweep conflict auto-resolve failed",J)})}async function PK$($,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 bp0($,X,Z.id))return await NU4($,Z),!1;let Y=await bn($,X,Z.id);if(!Y.merged)return await UU4($,Z,Y),!1;let G=await $.storage.taskBoard.update(Z.id,X,{status:"done"},Z.updatedBy);return await s5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done"}}),y4(X,G),!0}var WU4=15000,KU4;var BO0=B(()=>{pH();kZ();cG();WO0();sx();ZZ();KU4=new Set(["checks_pending"])});import{z as UO}from"zod";function wU4($,Z,X){return $!==null&&$.reviewer===Z&&$.cycleAt.getTime()===X}var xp0;var AK$=B(()=>{v0();kZ();YK();cG();ZZ();FO();BO0();sx();WO0();K3();xp0=m({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:UO.object({taskBoardItemId:UO.string(),reviewer:UO.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:UO.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:UO.enum(["approve","request_changes"]),notes:UO.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:UO.object({status:LN,merged:UO.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)=>{Z0(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?await G.storage.taskBoard.resolveReviewClaimByToken($,X):null,H=K?PL(await G.storage.taskBoard.listActivity($,J)):0,N=wU4(K,Z,H);if(Q==="request_changes"){let L=await G.storage.taskBoard.listActivity($,J);if(ho1(L))return await s5(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:N,bounceLimitReached:!0}}),await GO(G,W,`${yu0} 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 E=await G.storage.taskBoard.claimReviewChangesBounce($,J,W.updatedBy);if(await s5(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:N}}),!E)return{status:(await G.storage.taskBoard.getById($,J)??W).status,merged:!1};y4(J,E);let z=(await G.storage.taskBoard.listPrs($,J))[0];return await SN(G,E,{feedback:`${nb[Z]}: ${Y}`,pr:z?{number:z.number,url:z.url}:void 0}).catch((A)=>{if(A instanceof zQ)throw A;console.error("[task-board] request_changes re-enqueue failed",A)}),{status:E.status,merged:!1}}if(await s5(G,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Y,verified:N}}),!await bp0(G,J,$)){let L=await G.storage.taskBoard.getById($,J)??W;return y4(J,L),{status:L.status,merged:!1}}let w=(await G.storage.organizationSettings.get(J))?.flags?.auto_merge===!0;if(w?(await bn(G,J,$)).merged:!1){let L=await G.storage.taskBoard.update($,J,{status:"done"},W.updatedBy);return await s5(G,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:W.status,to:"done"}}),y4(J,L),{status:L.status,merged:!0}}let D=await G.storage.taskBoard.getById($,J)??W;if(w){let E=(await G.storage.taskBoard.listPrs($,J))[0];if(E?await rx(G,J,D,{pr:{number:E.number,url:E.url},conflict:await FO0(G,J,E)}).catch((z)=>{if(z instanceof zQ)throw z;return console.error("[task-board] conflict auto-resolve failed",z),!1}):!1)return{status:(await G.storage.taskBoard.getById($,J)??D).status,merged:!1}}return y4(J,D),{status:D.status,merged:!1}}})});import{z as DO0}from"zod";function OU4($,Z,X){if($!=="in_review")return!1;return X.length===0||Lw(Z,X)}var yp0;var TK$=B(()=>{v0();kZ();YK();cG();ZZ();BO0();yp0=m({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:DO0.object({taskBoardItemId:DO0.string()}),outputSchema:DO0.object({status:LN,merged:DO0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{Z0(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 G=(await Z.storage.organizationSettings.get(X))?.flags??{},J=kG.filter((N)=>G[$N[N]]===!0),W=await Z.storage.taskBoard.listActivity($,X);if(!OU4(Q.status,W,J))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!(await bn(Z,X,$)).merged){let N=await Z.storage.taskBoard.getById($,X)??Q;return y4(X,N),{status:Q.status,merged:!1}}let H=await Z.storage.taskBoard.update($,X,{status:"done"},Q.updatedBy);if(Q.status!=="done")await s5(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Q.status,to:"done"}});return y4(X,H),{status:H.status,merged:!0}}})});import{z as dG}from"zod";function RK$($){if(!$)throw Error("Organization ID required (no active organization in context)");return $}var BU4,gp0,hp0;var IK$=B(()=>{v0();BU4=dG.object({externalKey:dG.string(),dismissedBy:dG.string(),dismissedAt:dG.string()});gp0=m({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:dG.object({}),outputSchema:dG.object({findings:dG.array(BU4)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=RK$(Z.organization?.id);return{findings:await Z.storage.taskBoard.listDismissedFindings(X)}}}),hp0=m({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:dG.object({externalKeys:dG.array(dG.string()).optional()}),outputSchema:dG.object({restored:dG.number()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=RK$(Z.organization?.id);return{restored:await Z.storage.taskBoard.restoreDismissedFindings(X,$.externalKeys)}}})});import{z as h6}from"zod";function LO0($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}var up0,cp0,lp0,dp0,mp0;var qK$=B(()=>{v0();kZ();Qn();up0=h6.object({id:h6.string(),taskBoardItemId:h6.string(),parentId:h6.string().nullable(),authorId:h6.string(),body:h6.string(),resolved:h6.boolean(),createdAt:h6.string(),updatedAt:h6.string()});cp0=m({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:h6.object({taskBoardItemId:h6.string()}),outputSchema:h6.object({comments:h6.array(up0)}),handler:async($,Z)=>{return Z0(Z),await Z.access.check(),{comments:await Z.storage.taskBoard.listComments($.taskBoardItemId,LO0(Z))}}}),lp0=m({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:h6.object({taskBoardItemId:h6.string(),body:h6.string().trim().min(1),parentId:h6.string().nullish()}),outputSchema:h6.object({comment:up0}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=await Z.storage.taskBoard.createComment({taskBoardItemId:$.taskBoardItemId,organizationId:LO0(Z),parentId:$.parentId??null,authorId:Xn.getStore()?L4:W1(Z),body:$.body});if(!X)throw Error("Task board item not found");return{comment:X}}}),dp0=m({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:h6.object({id:h6.string(),body:h6.string().trim().min(1).optional(),resolved:h6.boolean().optional()}),outputSchema:h6.object({comment:up0}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:LO0(Z),callerId:W1(Z),body:$.body,resolved:$.resolved});if(!X)throw Error("Comment not found, or you can only edit your own comments");return{comment:X}}}),mp0=m({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:h6.object({id:h6.string()}),outputSchema:h6.object({success:h6.boolean()}),handler:async($,Z)=>{return Z0(Z),await Z.access.check(),{success:await Z.storage.taskBoard.deleteComment($.id,LO0(Z),W1(Z))}}})});var MK$=B(()=>{$X$();NK$();UK$();wK$();OK$();sx();BK$();zK$();AK$();TK$();cG();IK$();qK$()});import{z as CN}from"zod";var ip0;var kK$=B(()=>{v0();ip0=m({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:CN.object({}),outputSchema:CN.object({tags:CN.array(CN.object({id:CN.string(),organizationId:CN.string(),name:CN.string(),color:CN.string().nullable(),createdAt:CN.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 BK}from"zod";var np0;var SK$=B(()=>{v0();np0=m({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:BK.object({name:BK.string().min(1).max(50).describe("Tag name"),color:BK.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:BK.object({tag:BK.object({id:BK.string(),organizationId:BK.string(),name:BK.string(),color:BK.string().nullable(),createdAt:BK.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 EO0}from"zod";var pp0;var VK$=B(()=>{v0();pp0=m({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:EO0.object({tagId:EO0.string().describe("Tag ID to delete")}),outputSchema:EO0.object({success:EO0.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 DK}from"zod";var tp0;var CK$=B(()=>{v0();tp0=m({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:DK.object({memberId:DK.string().describe("Member ID")}),outputSchema:DK.object({tags:DK.array(DK.object({id:DK.string(),organizationId:DK.string(),name:DK.string(),color:DK.string().nullable(),createdAt:DK.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 mG}from"zod";var op0;var _K$=B(()=>{v0();op0=m({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:mG.object({memberId:mG.string().describe("Member ID"),tagIds:mG.array(mG.string()).describe("Array of tag IDs to assign")}),outputSchema:mG.object({success:mG.boolean(),tags:mG.array(mG.object({id:mG.string(),organizationId:mG.string(),name:mG.string(),createdAt:mG.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 vK$=B(()=>{kK$();SK$();VK$();CK$();_K$()});import{z as fK$}from"zod";function zU4($,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 EU4,jU4,rp0;var bK$=B(()=>{x4();v0();VV();kX();EU4=fK$.object({data:OJ$.describe("Data for the new thread (id is auto-generated if not provided)")}),jU4=fK$.object({item:UK.describe("The created thread entity")});rp0=m({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:EU4,outputSchema:jU4,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("User ID required to create thread");let{data:Y}=$,G=Y.id??l8("thrd"),J=await Z.storage.virtualMcps.findById(Y.virtual_mcp_id,X.id);if(!J||J.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);let W=J.metadata,K=W?.githubRepo,H=null;if(K)H=Y.branch??zU4(W?.sandboxMap,Q)??qU0(IU0(Z.auth.user));let N=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});if(N.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:uG(N)}}})});import{z as ap0}from"zod";var PU4,AU4,sp0;var xK$=B(()=>{x4();v0();VV();PU4=ap0.object({id:ap0.string().describe("ID of the thread to update"),data:BJ$.describe("Partial thread data to update")}),AU4=ap0.object({item:UK.describe("The updated thread entity")}),sp0=m({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:PU4,outputSchema:AU4,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(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){let H=await Z.storage.virtualMcps.findById(G.virtual_mcp_id,X.id);if(!H||H.organization_id!==X.id)throw Error(`Virtual MCP not found: ${G.virtual_mcp_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)W.metadata=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:uG(K)}}})});var ep0;var yK$=B(()=>{AG();VV();x4();v0();ep0=m({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:Cm,outputSchema:_m(UK),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=await Z.storage.threads.get($.id);if(!Q)throw Error(`Thread not found: ${$.id}`);await Z.storage.threads.delete($.id);let Y=W1(Z);if(Y)y1.capture({distinctId:Y,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:uG(Q)}}})});var gK$=B(()=>{bK$();ai0();si0();xK$();yK$();ei0()});function RU4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function IU4($){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:RU4(Q.text)}}})}function jO0($){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 IU4(Z)}import{z as u6}from"zod";var $t0;var hK$=B(()=>{x4();v0();qG();$t0=m({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:u6.object({name:u6.string().min(1).max(255),virtual_mcp_id:u6.string(),messages:u6.union([u6.string(),u6.array(u6.looseObject({id:u6.string().optional(),role:u6.enum(["user","assistant","system"]),parts:u6.array(u6.record(u6.string(),u6.unknown())),metadata:u6.unknown().optional()}))]),models:u6.object({tier:ww,modelId:u6.string().optional(),credentialId:u6.string().optional()}).loose().default({tier:"smart"}),tools:u6.array(u6.string()).nullable().optional(),maxAgentSteps:u6.number().int().min(1).max(100).nullable().optional(),temperature:u6.number().default(0.5),active:u6.boolean().default(!0)}),outputSchema:u6.object({id:u6.string(),name:u6.string(),active:u6.boolean(),created_at:u6.string()}),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("Unable to determine user identity");let Y=jO0($.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 k6}from"zod";var Zt0;var uK$=B(()=>{v0();Zt0=m({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:k6.object({id:k6.string()}),outputSchema:k6.object({automation:k6.object({id:k6.string(),name:k6.string(),active:k6.boolean(),created_by:k6.string(),created_at:k6.string(),updated_at:k6.string(),virtual_mcp_id:k6.string(),messages:k6.unknown(),models:k6.unknown(),tools:k6.array(k6.string()).nullable(),maxAgentSteps:k6.number().nullable(),temperature:k6.number(),triggers:k6.array(k6.object({id:k6.string(),type:k6.enum(["cron","event","webhook"]),cron_expression:k6.string().nullable(),connection_id:k6.string().nullable(),event_type:k6.string().nullable(),params:k6.unknown().nullable(),last_run_at:k6.string().nullable(),api_key_id:k6.string().nullable(),created_at:k6.string()}))}).nullable()}),handler:async($,Z)=>{Z0(Z);let X=o(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 _Y}from"zod";var Xt0;var cK$=B(()=>{v0();Xt0=m({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:_Y.object({virtual_mcp_id:_Y.string().optional().nullable()}),outputSchema:_Y.object({automations:_Y.array(_Y.object({id:_Y.string(),name:_Y.string(),active:_Y.boolean(),created_by:_Y.string(),created_at:_Y.string(),trigger_count:_Y.number(),nearest_next_run_at:_Y.string().nullable(),virtual_mcp_id:_Y.string()}))}),handler:async($,Z)=>{Z0(Z);let X=o(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 qU4($){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 lK$($){return`${$}:context`}function dK$($,Z,X,Q,Y){return{messages:JSON.parse($.messages).map((K,H)=>({...K,id:`${X}:${H}`})),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:qU4($.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,...Y?{runMetadata:Y}:{},taskId:X}}function XX($,Z,X,Q,Y,G,J,W){return XX.fromTZ(XX.tp($,Z,X,Q,Y,G,J),W)}function Qt0($,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 MU4($,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("+")?XX.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):XX.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function kU4($){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 iG($.startAt,$.timezone)),$.stopAt&&($.stopAt=new iG($.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 xn($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function SU4($){return xn($)}function VU4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var Yt0=32,yn,pK$,mK$=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 iG(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,yn),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,N=parseInt(W,10)+X,F=parseInt(K,10);if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(N))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(F===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(F>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(H>N)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let U=H;U<=N;U+=F)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[$]|Yt0;else if(Z===yn)this.dayOfWeek[$]=yn;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|pK$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},iK$,_N,iG=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&yn&&pK$[J-1]&Y)return!0;if(Y&Yt0){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=XX.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>iK$[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=XX.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(XX.fromTZISO(Z,this.tz))}findNext(Z,X,Q,Y){let G=this[X],J;Q.lastDayOfMonth&&(this.month!==1?J=iK$[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 N=Q.dayOfWeek[(W+(K-Y-1))%7];if(N&&N&yn)N=this.isNthWeekdayOfMonth(this.year,this.month,K-Y,N)?1:0;else if(N)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${N}`);Z.legacyMode&&!Q.starDOM?H=H||N:H=H&&N}if(H)return this[X]=K-Y,G!==this[X]?2:1}return 3}recurse(Z,X,Q){let Y=this.findNext(X,_N[Q][0],Z,_N[Q][2]);if(Y>1){let G=Q+1;for(;G<_N.length;)this[_N[G][0]]=-_N[G][2],G++;if(Y===3)return this[_N[Q][1]]++,this[_N[Q][0]]=-_N[Q][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,Q-1)}return Q+=1,Q>=_N.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)):XX.fromTZ(XX.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},nK$=30000,zO0,PO0=class{name;options;_states;fn;constructor($,Z,X){let Q,Y;if(xn(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(xn(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=kU4(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 mK$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new iG($,this.options.timezone||this.options.utcOffset):this._states.pattern=new mK$($,this.options.timezone),this.name){if(zO0.find((G)=>G.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");zO0.push(this)}return Y!==void 0&&SU4(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 iG||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new iG($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=zO0.indexOf(this);$>=0&&zO0.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>nK$&&(Z=nK$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&VU4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new iG(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){xn(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new iG($,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&&xn(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 iG($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let Q=this._states.once||new iG($,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 iG(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 iG(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 Gt0=B(()=>{XX.fromTZISO=($,Z,X)=>XX.fromTZ(MU4($,Z),X);XX.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),Q=Qt0($.tz,X),Y=new Date(X.getTime()-Q),G=Qt0($.tz,Y);if(G-Q===0)return Y;{let J=new Date(X.getTime()-G),W=Qt0($.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}};XX.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}};XX.tp=($,Z,X,Q,Y,G,J)=>({y:$,m:Z,d:X,h:Q,i:Y,s:G,tz:J});XX.minitz=XX;yn=31|Yt0,pK$=[1,2,4,8,16],iK$=[31,28,31,30,31,30,31,31,30,31,30,31],_N=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];zO0=[]});function AO0($,Z){try{return new PO0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var Jt0=B(()=>{Gt0()});import{DBOS as H7,SchedulerMode as CU4}from"@dbos-inc/dbos-sdk";async function Ft0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
1516
+ `)}async function rF4($,Z,X){let Q=Z.organizationId,Y=await r7($,"smart"),G=X.virtual_mcp_id??TD(Q),J={id:`stall-nudge-${Z.id}-${X.id}`,role:"user",parts:[{type:"text",text:oF4(X.harness_id)}]};await new ZX({storage:$.storage.threads.messageParts(),orgId:Q,threadId:X.id,runId:X.id}).emitRequestMessage(J),await MN({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:xU0(Z)}},{workflowID:`stall-nudge:${Z.id}:${X.id}`})}async function aF4($,Z){let X=await $.storage.threads.get(Z);if(!X)return{action:"none",thread:null};return{action:tF4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id,sandboxProviderKind:X.sandbox_provider_kind}),thread:X}}function sF4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return oi0($,Z)}async function eF4($,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||!sF4(Y))continue;if(await $.storage.threads.markRunFailed(Q.threadId,Ip0,"abandoned"))X.push(Q.threadId),console.warn(`[task-board] failed never-started thread ${Q.threadId} on ${Z.id}`)}return X}async function FK$($,Z){let X=$.organization?.id;if(!X)return;for(let Q of Z){if(Q.status==="in_progress")try{if((await eF4($,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(!Hn0(Q,Y))continue;let G=Q.threads.find((J)=>J.hasMessages);if(!G)continue;try{let{action:J,thread:W}=await aF4($,G.threadId);if(J==="none"||!W)continue;if(J==="advance")await lx($.storage.taskBoard,G.threadId,X,$.storage.organizationBilling);else await rF4($,Q,W)}catch(J){console.error(`[task-board] stall recovery failed for ${Q.id}`,J)}}}var Ip0="Run never started \u2014 no pod picked it up before the idle window elapsed";var qp0=B(()=>{Yn();JO();rw();KO();bV();L8();ZZ()});import{z as Mp0}from"zod";var kp0;var UK$=B(()=>{v0();YK();qp0();kp0=m({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization.",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Mp0.object({}),outputSchema:Mp0.object({items:Mp0.array(Vx)}),handler:async($,Z)=>{Z0(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);return FK$(Z,Q),{items:Q}}})});import{z as lG}from"zod";function ZU4($,Z){let X=[];for(let{field:G,action:J}of $U4){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 XU4($,Z){if($!==L4)return!1;if(!Z)return!1;return Z.assigneeId!==L4?!0:Z.status==="todo"}var $U4,Sp0;var wK$=B(()=>{v0();YK();Cm0();FO();cG();ZZ();K3();$U4=[{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"}];Sp0=m({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:lG.object({id:lG.string(),title:lG.string().min(1).optional(),description:lG.string().nullable().optional(),status:LN.optional(),priority:DV.optional(),assigneeId:lG.string().nullable().optional(),repo:lG.string().nullable().optional(),dueDate:lG.string().datetime().nullable().optional(),sortOrder:lG.number().optional(),tagIds:lG.array(lG.string()).optional(),linkThreadId:lG.string().optional()}),outputSchema:lG.object({item:Vx}),handler:async($,Z)=>{Z0(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 bU0(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=$.assigneeId!==void 0&&$.assigneeId!==(Y?.assigneeId??null),J=XU4($.assigneeId,Y);if(Y&&jQ(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(J)await F50(Z,Y,pb())}if($.tagIds!==void 0){let K=await Z.storage.tags.listOrgTags(X),H=new Set(K.map((N)=>N.id));for(let N of $.tagIds)if(!H.has(N))throw Error(`Tag not found: ${N}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,W1(Z))}let W;if(Q)W=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:J?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId,assignedBy:G?$.assigneeId?W1(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder},W1(Z));else{let K=await Z.storage.taskBoard.getById($.id,X);if(!K)throw Error(`Task board item not found: ${$.id}`);W=K}if(Y){let K=W1(Z),H=ZU4(Y,W);if(H.length>0)await mJ$(Z,H.map((N)=>({taskBoardItemId:W.id,actorId:K,...N})))}if(Q||$.linkThreadId)y4(X,W);if(J)await ex(Z,W,{userInitiated:!0});return{item:W}}})});import{z as UO0}from"zod";var Vp0;var OK$=B(()=>{v0();ZZ();Vp0=m({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:UO0.object({id:UO0.string()}),outputSchema:UO0.object({success:UO0.boolean()}),handler:async($,Z)=>{Z0(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,W1(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return iJ$(X,$.id),{success:!0}}})});import{z as gV}from"zod";var Cp0;var BK$=B(()=>{v0();Nn0();ZZ();Qn();Cp0=m({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:gV.object({url:gV.string().describe("The pull request URL, e.g. https://github.com/owner/repo/pull/123")}),outputSchema:gV.object({url:gV.string(),prNumber:gV.number(),taskBoardItemIds:gV.array(gV.string())}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z).id,{threadId:Q}=fU0(),Y=Tw0($.url);if(!Y)throw Error(`Not a GitHub pull request URL: ${$.url} (expected https://github.com/<owner>/<repo>/pull/<number>)`);let G=await Mw0(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 LK$($){DK$=$}function EK$($){DK$?.broadcast($)}var DK$=null;import{DBOS as wO0}from"@dbos-inc/dbos-sdk";function QU4($,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 _p0($){return(await wO0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING","ENQUEUED"],loadInput:!0,loadOutput:!1})).map((X)=>QU4(X,$)).filter((X)=>X!==null).sort((X,Q)=>X.enqueuedAt-Q.enqueuedAt)}async function jK$($,Z){if(!Z.startsWith(`thread-run:${$}:`))return!1;return await wO0.cancelWorkflows([Z]),!0}async function OO0($){let Z=await wO0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING"],loadInput:!1,loadOutput:!1});if(Z.length===0)return;await wO0.cancelWorkflows(Z.map((X)=>X.workflowID))}var vp0=()=>{};import{z as $y}from"zod";function GU4($){return $.threads.filter((Z)=>Z.status!==null&&!In.has(Z.status)).map((Z)=>Z.threadId)}async function JU4($,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 OO0(Z).catch(Q("gate-head"));let Y=await $.storage.threads.getRunFence(Z).catch(()=>null);if(Y)await vn(Z,Y).catch(Q("hosted-harness"));EK$(Z)}var YU4="Superseded by a manual re-run of this task",fp0;var zK$=B(()=>{v0();kZ();bV();KO();vp0();cG();ZZ();FO();K3();fp0=m({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:$y.object({id:$y.string().describe("The task board item to re-run.")}),outputSchema:$y.object({status:$y.string().describe("The task's lane after the re-run was queued."),supersededThreadIds:$y.array($y.string()).describe("Runs that were failed to make room for this one.")}),handler:async({id:$},Z)=>{Z0(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!==L4)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 F50(Z,Q,pb());let Y=[];for(let J of GU4(Q)){if(!await Z.storage.threads.failIfNotTerminal(J,YU4,"superseded"))continue;Y.push(J),await JU4(Z,J,X)}let G=await Z.storage.taskBoard.update($,X,{status:"in_progress"},W1(Z));return await s5(Z,{taskBoardItemId:$,action:"status_changed",actorId:W1(Z),data:{from:Q.status,to:"in_progress",reason:"rerun"}}),y4(X,G),await SN(Z,G,{userInitiated:!0}),{status:G.status,supersededThreadIds:Y}}})});async function HU4($,Z,X,Q,Y){if(KU4.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 s5($,{taskBoardItemId:X,action:"merge_failed",actorId:null,data:{reason:Q,...Y?{detail:Y}:{}}})}async function bn($,Z,X){let Q=async(N,F)=>{return await HU4($,Z,X,N,F),{merged:!1,reason:N,...F?{detail:F}:{}}},G=(await $.storage.taskBoard.listPrs(X,Z))[0];if(!G)return console.warn(`[task-board] merge skipped \u2014 no linked PR on ${X}`),Q("no_pr");let J=await WK$($,Z,G);if(J==="failing"||J==="pending")return console.warn(`[task-board] merge blocked \u2014 checks ${J} on PR #${G.number}`),Q(J==="failing"?"checks_failing":"checks_pending");let W=`${G.repoOwner}/${G.repoName}`,K=await ax($,Z,G.connectionId,{owner:G.repoOwner,name:G.repoName});if(!K)return console.warn("[task-board] merge blocked \u2014 no active GitHub connection for "+`${W} (PR #${G.number})`),Q("no_connection",W);let H=await j5(K,$,!0);try{let N=await H.callTool({name:"merge_pull_request",arguments:{owner:G.repoOwner,repo:G.repoName,pullNumber:G.number}},void 0,{timeout:WU4});if(N?.isError){let F=JSON.stringify(N?.content);return console.error(`[task-board] merge refused by GitHub on PR #${G.number}:`,F),Q("refused",F?.slice(0,500))}return XK$(K.id),{merged:!0}}catch(N){return console.error("[task-board] merge PR failed",N),Q("error",N instanceof Error?N.message:String(N))}finally{await H.close().catch(()=>{})}}async function bp0($,Z,X){let Y=(await $.storage.organizationSettings.get(Z))?.flags??{},G=kG.filter((W)=>Y[$N[W]]===!0),J=await $.storage.taskBoard.listActivity(X,Z);return Lw(J,G,{verifiedOnly:!0})}async function NU4($,Z){let Q=(await $.storage.organizationSettings.get(Z.organizationId))?.flags??{},Y=kG.filter((J)=>Q[$N[J]]===!0),G=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);if(!go1(G,Y))return;await GO($,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 FU4($){if($.merged||$.reason!=="refused")return!1;return!Ep0($.detail??"")}async function UU4($,Z,X){if(!FU4(X))return;let Q=Z.organizationId,G=(await $.storage.taskBoard.listPrs(Z.id,Q))[0];if(!G)return;await rx($,Q,Z,{pr:{number:G.number,url:G.url},conflict:await FO0($,Q,G)}).catch((J)=>{console.error("[task-board] sweep conflict auto-resolve failed",J)})}async function PK$($,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 bp0($,X,Z.id))return await NU4($,Z),!1;let Y=await bn($,X,Z.id);if(!Y.merged)return await UU4($,Z,Y),!1;let G=await $.storage.taskBoard.update(Z.id,X,{status:"done"},Z.updatedBy);return await s5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done"}}),y4(X,G),!0}var WU4=15000,KU4;var BO0=B(()=>{pH();kZ();cG();WO0();sx();ZZ();KU4=new Set(["checks_pending"])});import{z as UO}from"zod";function wU4($,Z,X){return $!==null&&$.reviewer===Z&&$.cycleAt.getTime()===X}var xp0;var AK$=B(()=>{v0();kZ();YK();cG();ZZ();FO();BO0();sx();WO0();K3();xp0=m({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:UO.object({taskBoardItemId:UO.string(),reviewer:UO.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:UO.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:UO.enum(["approve","request_changes"]),notes:UO.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:UO.object({status:LN,merged:UO.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)=>{Z0(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?await G.storage.taskBoard.resolveReviewClaimByToken($,X):null,H=K?PL(await G.storage.taskBoard.listActivity($,J)):0,N=wU4(K,Z,H);if(Q==="request_changes"){let L=await G.storage.taskBoard.listActivity($,J);if(ho1(L))return await s5(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:N,bounceLimitReached:!0}}),await GO(G,W,`${yu0} 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 E=await G.storage.taskBoard.claimReviewChangesBounce($,J,W.updatedBy);if(await s5(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:N}}),!E)return{status:(await G.storage.taskBoard.getById($,J)??W).status,merged:!1};y4(J,E);let z=(await G.storage.taskBoard.listPrs($,J))[0];return await SN(G,E,{feedback:`${nb[Z]}: ${Y}`,pr:z?{number:z.number,url:z.url}:void 0}).catch((A)=>{if(A instanceof zQ)throw A;console.error("[task-board] request_changes re-enqueue failed",A)}),{status:E.status,merged:!1}}if(await s5(G,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Y,verified:N}}),!await bp0(G,J,$)){let L=await G.storage.taskBoard.getById($,J)??W;return y4(J,L),{status:L.status,merged:!1}}let w=(await G.storage.organizationSettings.get(J))?.flags?.auto_merge===!0;if(w?(await bn(G,J,$)).merged:!1){let L=await G.storage.taskBoard.update($,J,{status:"done"},W.updatedBy);return await s5(G,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:W.status,to:"done"}}),y4(J,L),{status:L.status,merged:!0}}let D=await G.storage.taskBoard.getById($,J)??W;if(w){let E=(await G.storage.taskBoard.listPrs($,J))[0];if(E?await rx(G,J,D,{pr:{number:E.number,url:E.url},conflict:await FO0(G,J,E)}).catch((z)=>{if(z instanceof zQ)throw z;return console.error("[task-board] conflict auto-resolve failed",z),!1}):!1)return{status:(await G.storage.taskBoard.getById($,J)??D).status,merged:!1}}return y4(J,D),{status:D.status,merged:!1}}})});import{z as DO0}from"zod";function OU4($,Z,X){if($!=="in_review")return!1;return X.length===0||Lw(Z,X)}var yp0;var TK$=B(()=>{v0();kZ();YK();cG();ZZ();BO0();yp0=m({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:DO0.object({taskBoardItemId:DO0.string()}),outputSchema:DO0.object({status:LN,merged:DO0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{Z0(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 G=(await Z.storage.organizationSettings.get(X))?.flags??{},J=kG.filter((N)=>G[$N[N]]===!0),W=await Z.storage.taskBoard.listActivity($,X);if(!OU4(Q.status,W,J))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!(await bn(Z,X,$)).merged){let N=await Z.storage.taskBoard.getById($,X)??Q;return y4(X,N),{status:Q.status,merged:!1}}let H=await Z.storage.taskBoard.update($,X,{status:"done"},Q.updatedBy);if(Q.status!=="done")await s5(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Q.status,to:"done"}});return y4(X,H),{status:H.status,merged:!0}}})});import{z as dG}from"zod";function RK$($){if(!$)throw Error("Organization ID required (no active organization in context)");return $}var BU4,gp0,hp0;var IK$=B(()=>{v0();BU4=dG.object({externalKey:dG.string(),dismissedBy:dG.string(),dismissedAt:dG.string()});gp0=m({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:dG.object({}),outputSchema:dG.object({findings:dG.array(BU4)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=RK$(Z.organization?.id);return{findings:await Z.storage.taskBoard.listDismissedFindings(X)}}}),hp0=m({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:dG.object({externalKeys:dG.array(dG.string()).optional()}),outputSchema:dG.object({restored:dG.number()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=RK$(Z.organization?.id);return{restored:await Z.storage.taskBoard.restoreDismissedFindings(X,$.externalKeys)}}})});import{z as h6}from"zod";function LO0($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}var up0,cp0,lp0,dp0,mp0;var qK$=B(()=>{v0();kZ();Qn();up0=h6.object({id:h6.string(),taskBoardItemId:h6.string(),parentId:h6.string().nullable(),authorId:h6.string(),body:h6.string(),resolved:h6.boolean(),createdAt:h6.string(),updatedAt:h6.string()});cp0=m({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:h6.object({taskBoardItemId:h6.string()}),outputSchema:h6.object({comments:h6.array(up0)}),handler:async($,Z)=>{return Z0(Z),await Z.access.check(),{comments:await Z.storage.taskBoard.listComments($.taskBoardItemId,LO0(Z))}}}),lp0=m({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:h6.object({taskBoardItemId:h6.string(),body:h6.string().trim().min(1),parentId:h6.string().nullish()}),outputSchema:h6.object({comment:up0}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=await Z.storage.taskBoard.createComment({taskBoardItemId:$.taskBoardItemId,organizationId:LO0(Z),parentId:$.parentId??null,authorId:Xn.getStore()?L4:W1(Z),body:$.body});if(!X)throw Error("Task board item not found");return{comment:X}}}),dp0=m({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:h6.object({id:h6.string(),body:h6.string().trim().min(1).optional(),resolved:h6.boolean().optional()}),outputSchema:h6.object({comment:up0}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:LO0(Z),callerId:W1(Z),body:$.body,resolved:$.resolved});if(!X)throw Error("Comment not found, or you can only edit your own comments");return{comment:X}}}),mp0=m({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:h6.object({id:h6.string()}),outputSchema:h6.object({success:h6.boolean()}),handler:async($,Z)=>{return Z0(Z),await Z.access.check(),{success:await Z.storage.taskBoard.deleteComment($.id,LO0(Z),W1(Z))}}})});var MK$=B(()=>{$X$();NK$();UK$();wK$();OK$();sx();BK$();zK$();AK$();TK$();cG();IK$();qK$()});import{z as CN}from"zod";var ip0;var kK$=B(()=>{v0();ip0=m({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:CN.object({}),outputSchema:CN.object({tags:CN.array(CN.object({id:CN.string(),organizationId:CN.string(),name:CN.string(),color:CN.string().nullable(),createdAt:CN.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 BK}from"zod";var np0;var SK$=B(()=>{v0();np0=m({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:BK.object({name:BK.string().min(1).max(50).describe("Tag name"),color:BK.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:BK.object({tag:BK.object({id:BK.string(),organizationId:BK.string(),name:BK.string(),color:BK.string().nullable(),createdAt:BK.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 EO0}from"zod";var pp0;var VK$=B(()=>{v0();pp0=m({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:EO0.object({tagId:EO0.string().describe("Tag ID to delete")}),outputSchema:EO0.object({success:EO0.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 DK}from"zod";var tp0;var CK$=B(()=>{v0();tp0=m({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:DK.object({memberId:DK.string().describe("Member ID")}),outputSchema:DK.object({tags:DK.array(DK.object({id:DK.string(),organizationId:DK.string(),name:DK.string(),color:DK.string().nullable(),createdAt:DK.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 mG}from"zod";var op0;var _K$=B(()=>{v0();op0=m({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:mG.object({memberId:mG.string().describe("Member ID"),tagIds:mG.array(mG.string()).describe("Array of tag IDs to assign")}),outputSchema:mG.object({success:mG.boolean(),tags:mG.array(mG.object({id:mG.string(),organizationId:mG.string(),name:mG.string(),createdAt:mG.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(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 vK$=B(()=>{kK$();SK$();VK$();CK$();_K$()});import{z as fK$}from"zod";function zU4($,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 EU4,jU4,rp0;var bK$=B(()=>{x4();v0();VV();kX();EU4=fK$.object({data:OJ$.describe("Data for the new thread (id is auto-generated if not provided)")}),jU4=fK$.object({item:UK.describe("The created thread entity")});rp0=m({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:EU4,outputSchema:jU4,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("User ID required to create thread");let{data:Y}=$,G=Y.id??l8("thrd"),J=await Z.storage.virtualMcps.findById(Y.virtual_mcp_id,X.id);if(!J||J.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);let W=J.metadata,K=W?.githubRepo,H=null;if(K)H=Y.branch??zU4(W?.sandboxMap,Q)??qU0(IU0(Z.auth.user));let N=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});if(N.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:uG(N)}}})});import{z as ap0}from"zod";var PU4,AU4,sp0;var xK$=B(()=>{x4();v0();VV();PU4=ap0.object({id:ap0.string().describe("ID of the thread to update"),data:BJ$.describe("Partial thread data to update")}),AU4=ap0.object({item:UK.describe("The updated thread entity")}),sp0=m({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:PU4,outputSchema:AU4,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(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){let H=await Z.storage.virtualMcps.findById(G.virtual_mcp_id,X.id);if(!H||H.organization_id!==X.id)throw Error(`Virtual MCP not found: ${G.virtual_mcp_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)W.metadata=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:uG(K)}}})});var ep0;var yK$=B(()=>{AG();VV();x4();v0();ep0=m({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:Cm,outputSchema:_m(UK),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=await Z.storage.threads.get($.id);if(!Q)throw Error(`Thread not found: ${$.id}`);await Z.storage.threads.delete($.id);let Y=W1(Z);if(Y)y1.capture({distinctId:Y,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:uG(Q)}}})});var gK$=B(()=>{bK$();ai0();si0();xK$();yK$();ei0()});function RU4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function IU4($){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:RU4(Q.text)}}})}function jO0($){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 IU4(Z)}import{z as u6}from"zod";var $t0;var hK$=B(()=>{x4();v0();qG();$t0=m({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:u6.object({name:u6.string().min(1).max(255),virtual_mcp_id:u6.string(),messages:u6.union([u6.string(),u6.array(u6.looseObject({id:u6.string().optional(),role:u6.enum(["user","assistant","system"]),parts:u6.array(u6.record(u6.string(),u6.unknown())),metadata:u6.unknown().optional()}))]),models:u6.object({tier:ww,modelId:u6.string().optional(),credentialId:u6.string().optional()}).loose().default({tier:"smart"}),tools:u6.array(u6.string()).nullable().optional(),maxAgentSteps:u6.number().int().min(1).max(100).nullable().optional(),temperature:u6.number().default(0.5),active:u6.boolean().default(!0)}),outputSchema:u6.object({id:u6.string(),name:u6.string(),active:u6.boolean(),created_at:u6.string()}),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("Unable to determine user identity");let Y=jO0($.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 k6}from"zod";var Zt0;var uK$=B(()=>{v0();Zt0=m({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:k6.object({id:k6.string()}),outputSchema:k6.object({automation:k6.object({id:k6.string(),name:k6.string(),active:k6.boolean(),created_by:k6.string(),created_at:k6.string(),updated_at:k6.string(),virtual_mcp_id:k6.string(),messages:k6.unknown(),models:k6.unknown(),tools:k6.array(k6.string()).nullable(),maxAgentSteps:k6.number().nullable(),temperature:k6.number(),triggers:k6.array(k6.object({id:k6.string(),type:k6.enum(["cron","event","webhook"]),cron_expression:k6.string().nullable(),connection_id:k6.string().nullable(),event_type:k6.string().nullable(),params:k6.unknown().nullable(),last_run_at:k6.string().nullable(),api_key_id:k6.string().nullable(),created_at:k6.string()}))}).nullable()}),handler:async($,Z)=>{Z0(Z);let X=o(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 _Y}from"zod";var Xt0;var cK$=B(()=>{v0();Xt0=m({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:_Y.object({virtual_mcp_id:_Y.string().optional().nullable()}),outputSchema:_Y.object({automations:_Y.array(_Y.object({id:_Y.string(),name:_Y.string(),active:_Y.boolean(),created_by:_Y.string(),created_at:_Y.string(),trigger_count:_Y.number(),nearest_next_run_at:_Y.string().nullable(),virtual_mcp_id:_Y.string()}))}),handler:async($,Z)=>{Z0(Z);let X=o(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 qU4($){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 lK$($){return`${$}:context`}function dK$($,Z,X,Q,Y){return{messages:JSON.parse($.messages).map((K,H)=>({...K,id:`${X}:${H}`})),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:qU4($.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,...Y?{runMetadata:Y}:{},taskId:X}}function XX($,Z,X,Q,Y,G,J,W){return XX.fromTZ(XX.tp($,Z,X,Q,Y,G,J),W)}function Qt0($,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 MU4($,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("+")?XX.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):XX.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function kU4($){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 iG($.startAt,$.timezone)),$.stopAt&&($.stopAt=new iG($.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 xn($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function SU4($){return xn($)}function VU4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var Yt0=32,yn,pK$,mK$=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 iG(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,yn),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,N=parseInt(W,10)+X,F=parseInt(K,10);if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(N))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(F===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(F>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(H>N)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let U=H;U<=N;U+=F)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[$]|Yt0;else if(Z===yn)this.dayOfWeek[$]=yn;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|pK$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},iK$,_N,iG=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&yn&&pK$[J-1]&Y)return!0;if(Y&Yt0){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=XX.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>iK$[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=XX.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(XX.fromTZISO(Z,this.tz))}findNext(Z,X,Q,Y){let G=this[X],J;Q.lastDayOfMonth&&(this.month!==1?J=iK$[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 N=Q.dayOfWeek[(W+(K-Y-1))%7];if(N&&N&yn)N=this.isNthWeekdayOfMonth(this.year,this.month,K-Y,N)?1:0;else if(N)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${N}`);Z.legacyMode&&!Q.starDOM?H=H||N:H=H&&N}if(H)return this[X]=K-Y,G!==this[X]?2:1}return 3}recurse(Z,X,Q){let Y=this.findNext(X,_N[Q][0],Z,_N[Q][2]);if(Y>1){let G=Q+1;for(;G<_N.length;)this[_N[G][0]]=-_N[G][2],G++;if(Y===3)return this[_N[Q][1]]++,this[_N[Q][0]]=-_N[Q][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,Q-1)}return Q+=1,Q>=_N.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)):XX.fromTZ(XX.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},nK$=30000,zO0,PO0=class{name;options;_states;fn;constructor($,Z,X){let Q,Y;if(xn(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(xn(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=kU4(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 mK$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new iG($,this.options.timezone||this.options.utcOffset):this._states.pattern=new mK$($,this.options.timezone),this.name){if(zO0.find((G)=>G.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");zO0.push(this)}return Y!==void 0&&SU4(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 iG||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new iG($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=zO0.indexOf(this);$>=0&&zO0.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>nK$&&(Z=nK$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&VU4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new iG(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){xn(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new iG($,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&&xn(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 iG($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let Q=this._states.once||new iG($,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 iG(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 iG(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 Gt0=B(()=>{XX.fromTZISO=($,Z,X)=>XX.fromTZ(MU4($,Z),X);XX.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),Q=Qt0($.tz,X),Y=new Date(X.getTime()-Q),G=Qt0($.tz,Y);if(G-Q===0)return Y;{let J=new Date(X.getTime()-G),W=Qt0($.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}};XX.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}};XX.tp=($,Z,X,Q,Y,G,J)=>({y:$,m:Z,d:X,h:Q,i:Y,s:G,tz:J});XX.minitz=XX;yn=31|Yt0,pK$=[1,2,4,8,16],iK$=[31,28,31,30,31,30,31,31,30,31,30,31],_N=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];zO0=[]});function AO0($,Z){try{return new PO0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var Jt0=B(()=>{Gt0()});import{DBOS as H7,SchedulerMode as CU4}from"@dbos-inc/dbos-sdk";async function Ft0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
1517
1517
  WHERE q.name LIKE $1
1518
1518
  AND NOT EXISTS (
1519
1519
  SELECT 1 FROM dbos.workflow_status w
@@ -2731,7 +2731,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2731
2731
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2732
2732
 
2733
2733
  Respond with the structured verdict and a short reason.`,Gf$;var Wf$=B(()=>{S4();rw();s41();r66=e41.object({requiresReview:e41.boolean().describe("true if the changes should go through pull-request review"),reason:e41.string().describe("One short sentence explaining the decision (max ~120 chars)")});Gf$={requiresReview:!1,reason:""}});function Kf$($){let Z=$?.trim();if(!Z)return null;try{let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;return X.href}catch{return null}}function rj0($){return Kf$($?.previewServerUrl)??Kf$($?.productionUrl)}function Hf$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Nf$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Ff$($){let Z=Wh.get($);if(!Z)return;Wh.delete($),$61-=Z.bytes}function X56($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Ff$($),Q>Z56)return;Wh.set($,{etag:Z,body:X,bytes:Q}),$61+=Q;while($61>$56||Wh.size>e66){let Y=Wh.keys().next().value;if(Y===void 0)break;Ff$(Y)}}function Uf$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,N){let F=`${Hf$()}${K}`,U=Nf$(W,K)?Wh.get(F):void 0,w=await fetch(F,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&w.status===304)return{status:200,json:U.body};if(!w.ok&&!N?.allow?.includes(w.status)){let D=await w.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new m6(w.status,W,K,L)}let O=w.status===204?void 0:await w.json();if(w.status===200&&Nf$(W,K)){let D=w.headers.get("etag");if(D)X56(F,D,O)}return{status:w.status,json:O}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${oC(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${oC(W)}`,H=await fetch(`${Hf$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let N=await H.text().catch(()=>"");throw new m6(H.status,"GET",K,N.slice(0,300))}if(!H.body)throw new m6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new m6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new m6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:N}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return N.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${oC(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:N,json:F}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return N===204?null:F?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:N}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:N.number,html_url:N.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),N=H[0];return N?{number:N.number,html_url:N.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${oC(W)}...${oC(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${oC(W)}...${oC(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((N)=>({filename:N.filename,status:N.status,sha:N.sha,...N.previous_filename?{previousFilename:N.previous_filename}:{}}))}}}}function oC($){return $.split("/").map(encodeURIComponent).join("/")}var e66=512,$56=8388608,Z56=262144,Wh,$61=0,m6;var rC=B(()=>{Wh=new Map;m6=class m6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function aj0($,Z,X){if(!X.connectionId)throw new m6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new m6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await Kx($,Q);return Uf$({owner:X.owner,repo:X.name,accessToken:Y})}var Z61=B(()=>{t50();rC()});function Q56($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function sj0($){if(Q56($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function Xr($){let Z=$;for(;;){let X;try{X=decodeURIComponent(Z)}catch{return Z}if(X===Z)return Z;Z=X}}function X61($){return sj0($),encodeURIComponent($)}function Qr($){let Z=[...$].sort((Y,G)=>{let J=`${Y.stem}.json`,W=`${G.stem}.json`;return J<W?-1:J>W?1:0}),X="{",Q=!0;for(let Y of Z){let G=Y.content.trim();if(G.length===0)continue;if(!Q)X+=",";Q=!1,X+=`${JSON.stringify(Xr(Y.stem))}:${G}`}return`${X}}`}var wf$=()=>{};var ej0=B(()=>{wf$()});function Y56($){return $.startsWith("merged/")?"merged":"blobs"}function Q61($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=Y56(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function Of$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Kh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function Bf$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),N=[],F=new Set;if(Y==="merged")for(let[U,w]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||w.area!=="merged")continue;N.push(U),F.add(U),H-=w.bytes,K-=w.bytes}for(let[U,w]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||F.has(U))continue;N.push(U),F.add(U),K-=w.bytes}for(let U of N)Kh($,U);return Kh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:N}}function Yr($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function Y61($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as Pf$}from"crypto";import{mkdir as Gr,readdir as G56,readFile as J56,rename as W56,rm as Af$,stat as Tf$,statfs as K56,unlink as H56,writeFile as N56}from"fs/promises";import{tmpdir as F56}from"os";import{dirname as U56,join as A7}from"path";function Hh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function B56(){if($z0)return $z0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?A7(F56(),"studio-fast-preview-cache"):$;return $z0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Hh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Df$),maxMergedBytes:Hh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*Zz0),maxEntryBytes:{blobs:Hh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",Zz0),merged:Hh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*Zz0)}},freeFloorBytes:Hh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Df$),sweepIntervalMs:Hh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},$z0}function D56(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function L56(){if($B)return;$B={hits:k$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:k$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:k$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:k$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:k$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},k$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Nh)return;$.observe(Nh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Nh.index.areaBytes.merged,{area:"merged"})}),k$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Nh)return;let Z={blobs:0,merged:0};for(let X of Nh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function E56($){aC.hits[$]+=1,$B?.hits.add(1,{area:$})}function Lf$($){aC.misses[$]+=1,$B?.misses.add(1,{area:$})}function G61(){aC.evictions+=1,$B?.evictions.add(1)}function KF($){aC.errors+=1,$B?.errors.add(1,{op:$})}function j56($){aC.invalidKeySkips+=1,$B?.errors.add(1,{op:`${$}_invalid_key`})}function J61(){return Ef$??=P56(),Ef$}async function P56(){let $=B56();if(!$.enabled)return null;L56();try{await Gr(A7($.root,"blobs"),{recursive:!0}),await Gr(A7($.root,"merged"),{recursive:!0}),await Gr(A7($.root,"tmp"),{recursive:!0})}catch{return KF("init"),null}let Z=[];try{Z=await Rf$($.root)}catch{KF("scan"),Z=[]}let X={root:$.root,index:Q61(Z,$.index),cfg:$};return Nh=X,R56(X),X}async function Xz0($){try{return await G56($)}catch{return[]}}async function Rf$($){let Z=[];for(let X of["blobs","merged"]){let Q=A7($,X);for(let Y of await Xz0(Q)){let G=A7(Q,Y);for(let J of await Xz0(G)){let W=A7(G,J);for(let K of await Xz0(W))try{let H=await Tf$(A7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function If$($,Z,X){if(!Y61(X))return null;try{return`blobs/${Yr($)}/${Yr(Z)}/${X}`}catch{return null}}function qf$($,Z,X){if(!Y61(X))return null;try{return`merged/${Yr($)}/${Yr(Z)}/${X}.json`}catch{return null}}async function Mf$($,Z){try{let X=await J61();if(!X)return null;if(Z===null)return Lf$($),null;try{let Q=await J56(A7(X.root,Z),"utf8");return Of$(X.index,Z),E56($),Q}catch{return Lf$($),null}}catch{return KF(`get_${$}`),null}}function kf$($,Z,X){return Mf$("blobs",If$($,Z,X))}function Sf$($,Z,X){return Mf$("merged",qf$($,Z,X))}async function A56($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await K56($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function Qz0($){try{await H56($)}catch{}}async function T56($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Kh($.index,X.value),await Qz0(A7($.root,X.value)),G61()}}catch{KF("emergency_evict")}}async function Vf$($,Z,X,Q){try{let Y=await J61();if(!Y)return;if(X===null){j56(Z);return}if(!await A56(Y)){aC.floorSkips+=1,$B?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=Bf$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){aC.admissionRefusals+=1;return}for(let K of J.evict)await Qz0(A7(Y.root,K)),G61();let W=A7(Y.root,"tmp",`stage-${Pf$()}`);try{await N56(W,Q,"utf8");let K=A7(Y.root,X);await Gr(U56(K),{recursive:!0}),await W56(W,K)}catch(K){if(Kh(Y.index,X),await Qz0(W),KF(Z),K?.code==="ENOSPC")await T56(Y)}}catch{KF(Z)}}function Yz0($,Z,X,Q){return Vf$("blobs","put_blob",If$($,Z,X),Q)}function Cf$($,Z,X,Q){return Vf$("merged","put_merged",qf$($,Z,X),Q)}async function _f$(){try{let $=await J61();if(!$)return null;let Z=A7($.root,"tmp",Pf$());return await Gr(Z,{recursive:!0}),Z}catch{return KF("make_scratch"),null}}async function vf$($){try{await Af$($,{recursive:!0,force:!0})}catch{KF("remove_scratch")}}function R56($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;jf$=new AbortController,C$(Math.random()*Z,{signal:jf$.signal}).then(()=>{zf$($);let X=setInterval(()=>void zf$($),Z);X.unref?.(),z56=X}).catch(()=>{})}async function zf$($){try{let Z=Q61(await Rf$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Kh(Z,G),await Qz0(A7($.root,G)),G61()}$.index=Z;let Q=A7($.root,"tmp"),Y=Date.now();for(let G of await Xz0(Q)){let J=A7(Q,G);try{let W=await Tf$(J);if(Y-W.mtimeMs>O56)await Af$(J,{recursive:!0,force:!0})}catch{}}}catch{KF("sweep")}}var w56=1024,Zz0,Df$,O56=3600000,$z0=null,$B=null,aC,Ef$=null,Nh=null,z56=null,jf$=null;var ff$=B(()=>{$6();C6();Zz0=1024*w56,Df$=1024*Zz0;aC=D56()});function bf$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as I56,stat as q56}from"fs/promises";import{join as xf$}from"path";function M56($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function k56(){return yf$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),yf$}async function gf$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new Jr(`invalid blocks path prefix: ${X}`);let Y=await k56(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...M56(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(F){throw new Jr("failed to spawn tar",{cause:F})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let F=(await K).trim().slice(0,500);throw new Jr(`tar exited with code ${H}${F?`: ${F}`:""}`)}let N=await S56(Z,Q);if(N.length===0)throw new Jr(`tar extracted no ${G} members into ${Z}`);return N}async function S56($,Z){let X=xf$($,...Z.split("/")),Q;try{Q=await I56(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=xf$(X,G);try{if(!(await q56(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var Jr,yf$=null;var hf$=B(()=>{Jr=class Jr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as V56}from"crypto";import{readFile as C56}from"fs/promises";async function Wr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof m6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof m6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function v56(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return cf$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):cf$}function f56($){lf$??=k$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),lf$.add(1,{path:$})}async function Gz0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function Jz0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function W61($,Z){let X=`${Jz0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function K61($,Z){return $.filter((X)=>Xr(X.stem)===Z).map((X)=>X.path).sort()}function df$($,Z,X,Q){return Yz0($,Z,X,Q)}function b56($,Z){if(!Z)return $;return V56("sha1").update(`${$}:${Z}`).digest("hex")}async function mf$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await Wr($,Z):await $.getHeadSha(Z);return x56.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>y56($,Y,X))}async function y56($,Z,X){let{owner:Q,repo:Y}=$,G=b56(Z,X),J=await Sf$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=W61(K,X),N=new Map;if(await Gz0(H,uf$,async(O)=>{let D=await kf$(Q,Y,O.sha);if(D!==null)N.set(O.path,D)}),H.length-N.size>_56){let O=await g56($,Z,X,H);if(f56(O!==null?"tarball":"blobs"),O!==null)for(let[D,L]of O)N.set(D,L)}let U=await Gz0(H,uf$,async(O)=>{let D=N.get(O.path);if(D!==void 0)return{stem:O.stem,content:D};let L=await $.getBlobText(O.sha);return await Yz0(Q,Y,O.sha,L),{stem:O.stem,content:L}}),w=Qr(U);return await Cf$(Q,Y,G,w),{sha:Z,decofile:w}}async function g56($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=v56(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await _f$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await gf$(K,W,Jz0(X)),N=new Map(Q.map((U)=>[U.path,U.sha])),F=new Map;for(let U of H){let w=N.get(U.path);if(w===void 0)continue;let O=await C56(U.diskPath,"utf8");await Yz0($.owner,$.repo,w,O),F.set(U.path,O)}return F}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await vf$(W)}}var uf$=12,_56=50,cf$=134217728,lf$=null,x56;var Wz0=B(()=>{ej0();C6();ff$();rC();hf$();x56=bf$()});async function Kz0($,Z){let X=await $.getDefaultBranch(),Q=await Wr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function Hz0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,h56),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((N)=>N.type==="blob").map((N)=>[N.path,N.sha])),H=await Gz0(G,u56,async(N)=>{let F=N.previousFilename??N.filename,U=N.status==="added"?void 0:K.get(F),w=U?await $.getBlobText(U):null,O=N.status==="removed"?null:await $.getBlobText(N.sha);return[N.filename,{from:w,to:O}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function if$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof m6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new m6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await d56($,Z,X)}async function d56($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=c56)throw new m6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let w=K.get(U.filename);if(U.status==="removed"||!w)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:w.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let N=await $.createTree(await $.getCommitTreeSha(G),H),F=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:N,parentShas:[Y,G]});try{await $.updateRef(Z,F);return}catch(U){if(U instanceof m6&&U.status===422&&Q<l56)continue;throw U}}}var h56=200,u56=12,c56=300,l56=3;var nf$=B(()=>{rC();Wz0()});function i56($){if(!$||$.includes(".."))return!1;return m56.test($)}function pf$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!i56(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function tf$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var m56;var of$=B(()=>{m56=/^[\w./@-]+$/});function H61($){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 Kr($,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 rf$($,Z,X,Q){if(!Q.connectionId)throw new Fh("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Fh(p7);await Vw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:p7;throw new Fh(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await Cw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Jh($),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 N=await tw(H,n56).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var n56=10485760,Fh;var N61=B(()=>{WN();oj0();ei();Hx();Fh=class Fh extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function t56($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!p56.test(Z))throw Error(`Invalid branch name: ${$}`)}function sC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(r56)])}function eC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Hr($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Kr(Z,X);if(!Y)throw new m6(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return aj0(Q,G.id,Y)}function F61($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,E9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,E9)}async function ef$($){try{let Z=await Hr($),X=await Kz0(Z,$.get("vmClaim").branch);return $.json(X,200,E9)}catch(Z){return F61($,Z)}}function Fz0($,Z){let Q=(Nz0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Nz0.set($,Y),Y.finally(()=>{if(Nz0.get($)===Y)Nz0.delete($)}),Q}async function yZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,E9);let Q=eC($);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 N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...E9}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?s56(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...E9}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function s56($){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 Uz0($,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 e56($){return $b$.includes($)}var p56,af$=524288,o56=65536,r56=1e4,sf$=2000,a56,Nz0,E9,$b$,Zb$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",a56),$.post("/:virtualMcpId/:branch/write",(X)=>yZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>yZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>yZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>yZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>yZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>yZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>yZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:sC(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 yZ(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 yZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>yZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>yZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!e56(Q))return X.json({error:`step must be one of: ${$b$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=o(X.var.studioContext),J=qx(Y.virtualMcpMetadata);try{await RU0({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 yZ(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 WF(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 ev$(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 ef$(X);return Z(X)});let Z=(X)=>yZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(sf$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return ef$(X);return yZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(sf$)])})}),$.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 Hr(X),J=await Hz0(G,Q.branch,Y.base);return X.json(J,200,E9)}catch(Y){return F61(X,Y)}return yZ(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,E9);let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Fz0(Y,async()=>{try{await n41(W,Q,Y);let K=Kr(G,J);if(K)await rf$(W,Q,Y,K)}catch(K){if(K instanceof Fh)return X.json({error:K.message},403,E9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,E9)}return yZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,E9);return Fz0(Q,()=>yZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Fz0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Hr(X),H=W.base??await K.getDefaultBranch();return await if$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,E9)}catch(W){return F61(X,W)}});let Y=eC(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Fz0(G,async()=>{try{await n41(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,E9)}return yZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",FZ({maxSize:af$,onError:(X)=>X.json({error:"Payload too large"},413,E9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=eC(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(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=o41(N)&&U?[N,F]:Y?await Promise.all([Uz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Uz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hr(X);return Promise.all([Kz0(L,Q.branch),Hz0(L,Q.branch)])})(),D=await Yf$(K,w,O);return X.json(D,200,E9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E9);return X.json({error:N},502,E9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",FZ({maxSize:af$,onError:(X)=>X.json({error:"Payload too large"},413,E9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=eC(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(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=o41(N)&&U?[N,F]:Y?await Promise.all([Uz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Uz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hr(X);return Promise.all([Kz0(L,Q.branch),Hz0(L,Q.branch)])})(),D=await Jf$(K,w,O,typeof H.language==="string"?H.language:void 0);return X.json(D,200,E9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E9);return X.json({error:N},502,E9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=eC(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=H61(`${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 N;try{N=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",FZ({maxSize:o56,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=eC(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=pf$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=tf$(G,W.resolveType),H=H61(K),N;try{N=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 F;try{F=await N.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var Xb$=B(()=>{C8();oO();Gh();i41();JN();av$();T3();mw();sv$();$f$();Im0();ai();s41();Wf$();Z61();rC();nf$();of$();N61();p56=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;a56=tj0(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(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{t56(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},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=ji({orgId:Y.id,virtualMcpId:G,branch:J}),H=await DN(X,J,Q),N=rv$({userId:H,projectRef:K}),F=W.metadata??null;if(F?.fastPreview===!0&&rj0(F))return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await dX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Nz0=new Map;E9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};$b$=["clone","install","start"]});function Qb$($,Z,X){let Q=U61.get($);if(!Q)Q={pending:null,running:!1},U61.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)Z96($,Q);return G}async function Z96($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await X96(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)U61.delete($)}}async function X96($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Wr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=W61(W,Q),H=[],N=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,D]of $.set){let L=K61(K,O),E=`${JSON.stringify(D,null,2)}
2734
- `,j=await Z.createBlob(E);await df$(Z.owner,Z.repo,j,E);let z=L[0]??`${Jz0(Q)}/${X61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.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}),N.delete(P)}for(let O of $.del)for(let D of K61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Qr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:Q96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof m6&&O.status===422)||Y>=$96-1)throw O;await C$(uZ(2000,200,Y,2,0.5))}}}function Q96($){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 ac0(Q,$.deps.coAuthor)}var $96=3,U61;var Yb$=B(()=>{LU0();ej0();$6();rC();Wz0();U61=new Map});import{createHmac as Gb$,randomBytes as Y96,timingSafeEqual as G96}from"crypto";function Jb$(){if(wz0)return wz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wz0=$?Buffer.from($):Y96(32),wz0}function w61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+J96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Gb$("sha256",Jb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Wb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Gb$("sha256",Jb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!G96(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 J96=21600000,wz0=null;var Kb$=B(()=>{M$()});import{z as Uh}from"zod";function K96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&W96.test($)}function Nb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Oz0($){let Z=$.get("decofileScope");return aj0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bz0($,Z){if(Z instanceof m6){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 Fb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Hb$),$.use("/:virtualMcpId/:branch/*",Hb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await mf$(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=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Nb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=H96.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{sj0(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 Oz0(Z),W=await Qb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jh(Q)},G),K=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Nb$(Z)})}catch(J){return Bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof m6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof m6&&G.status===405){let W=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:W.number,url:W.html_url})}throw G}}catch(Q){return Bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(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 m6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Bz0(Z,Q)}}),$}var W96,H96,Hb$;var Ub$=B(()=>{ej0();C8();i41();oj0();N61();Z61();Yb$();Kb$();rC();Wz0();W96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;H96=Uh.object({set:Uh.record(Uh.string(),Uh.unknown()).optional(),delete:Uh.array(Uh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Hb$=tj0(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(!K96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Wb$(w,{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(!rj0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Kr(K,N);if(!F)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:F,userId:J}),Z()})});var wb$=($)=>{let Z=new U1;if(Z.use("*",uC),Z.route("/",Fj0()),Z.route("/",fV$()),Z.route("/",yv$()),Z.route("/",fv$()),Z.route("/",ij0()),Z.route("/tools",mv$()),Z.route("/",cv$()),Z.route("/",Dv$({kvStorage:$.kvStorage})),Z.route("/",Ov$()),Z.route("/fs",Mv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Zb$()),Z.route("/decofile",Fb$()),Z.route("/",Cv$()),Z.route("/deco-sites",wj0()),Z.route("/sso",Gj0()),Z.route("/",nj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",qV$()),$.mountDevAssets)Z.route("/dev-assets",Oj0({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("/",Rk$()),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",Sv$()),Z.route("/mcp",kO0()),Z.route("/mcp/self",mj0()),Z.route("/mcp",CO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ob$=B(()=>{C8();U81();MV$();L81();Bj0();ko();N81();Bv$();Lv$();kv$();un();X81();_O0();g41();Vv$();_v$();bv$();gv$();lv$();u41();iv$();c41();SO0();Xb$();Ub$()});function F96($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function U96($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(N96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var N96=1e4,w96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Bb$=()=>{let $=new U1;return $.use("*",w96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await U96(Q,Y);return Z.json({apps:F96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Db$=B(()=>{C8();M$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function T96($){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 R96($,Z,X){try{return JSON.parse($)}catch{throw new jb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function I96($){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:R96(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 q96($){let Z=$.map((X)=>{let Q=X.function.parameters?RY(X.function.parameters):RY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function M96($){if(!$)return;return{openai:{response_format:$}}}function k96(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Lb$($,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 Eb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var O96=256,B96,D96,L96,E96,j96,z96,P96,A96,jb$,zb$,Pb$;var Ab$=B(()=>{S4();C8();Gh();uN();B96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),D96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),L96=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(D96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),E96=M1.object({type:M1.literal("text")}),j96=M1.object({type:M1.literal("json_object")}),z96=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()})}),P96=M1.union([E96,j96,z96]),A96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(L96),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(B96).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:P96.optional(),user:M1.string().optional()});jb$=class jb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zb$=new U1;zb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("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(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=A96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=T96(G.model);if(!J)return $.json(lK("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)=>HD(j.providerId));if(!E)return $.json(lK("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(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=I96(G.messages),U=G.tools?q96(G.tools):void 0,w=M96(G.response_format),O=k96(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=Lb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=O96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Eb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),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=Lb$(N,F,U,G,w,$.req.raw.signal),E=await qw(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:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Eb$(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(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Pb$=zb$});var Rb$;var Tb$=B(()=>{Rb$={name:"decocms",version:"4.205.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function C96(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??V96}}var Ib$,V96="https://ph.studio.decocms.com",qb$;var Mb$=B(()=>{C8();_y0();fV();PZ();M$();a$1();Tb$();Ib$=new U1;Ib$.get("/",($)=>{let Z={version:Rb$.version,theme:Fc1(),...eD().logo&&{logo:eD().logo},...wK()&&{internalUrl:uM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:mS$(),posthog:C96(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});qb$=Ib$});function wh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function O61($){return(wh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Sb$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wh($))}&sz=${Z}`}function kb$($,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 Vb$($){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()?kb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):kb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var $_,_96,v96,f96,b96,Cb$;var _b$=B(()=>{$_=c0.enum(["good","bad","neutral"]),_96=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:$_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),v96=c0.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},c0.array(_96)),f96={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},b96=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:$_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:$_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(v96).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:$_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:$_.optional()})).min(1)})]),Cb$=c0.object({...f96,template:b96})});function Dz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Cb$.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 B61=B(()=>{_b$()});import{join as vb$}from"path";async function y96($){try{let Z=await fetch(`${yW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(x96)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dz0(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()||O61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function mY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function g96($,Z){let X=wh($),Q=Z?.brand?.trim()||O61(X),Y=Sb$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Vb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${mY(W)}</title>`,`<meta name="description" content="${mY(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="${mY(W)}" />`,`<meta property="og:description" content="${mY(K)}" />`,`<meta property="og:url" content="${mY(J)}" />`,`<meta property="og:image" content="${mY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mY(W)}" />`,`<meta name="twitter:description" content="${mY(K)}" />`,`<meta name="twitter:image" content="${mY(H)}" />`,`<meta name="twitter:image:alt" content="${mY(N)}" />`,`<link rel="canonical" href="${mY(J)}" />`,`<link rel="icon" href="${mY(Y)}" sizes="any" />`].join(`
2734
+ `,j=await Z.createBlob(E);await df$(Z.owner,Z.repo,j,E);let z=L[0]??`${Jz0(Q)}/${X61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.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}),N.delete(P)}for(let O of $.del)for(let D of K61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Qr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:Q96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof m6&&O.status===422)||Y>=$96-1)throw O;await C$(uZ(2000,200,Y,2,0.5))}}}function Q96($){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 ac0(Q,$.deps.coAuthor)}var $96=3,U61;var Yb$=B(()=>{LU0();ej0();$6();rC();Wz0();U61=new Map});import{createHmac as Gb$,randomBytes as Y96,timingSafeEqual as G96}from"crypto";function Jb$(){if(wz0)return wz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wz0=$?Buffer.from($):Y96(32),wz0}function w61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+J96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Gb$("sha256",Jb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Wb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Gb$("sha256",Jb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!G96(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 J96=21600000,wz0=null;var Kb$=B(()=>{M$()});import{z as Uh}from"zod";function K96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&W96.test($)}function Nb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Oz0($){let Z=$.get("decofileScope");return aj0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bz0($,Z){if(Z instanceof m6){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 Fb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Hb$),$.use("/:virtualMcpId/:branch/*",Hb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await mf$(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=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Nb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=H96.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{sj0(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 Oz0(Z),W=await Qb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jh(Q)},G),K=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Nb$(Z)})}catch(J){return Bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof m6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof m6&&G.status===405){let W=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:W.number,url:W.html_url})}throw G}}catch(Q){return Bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(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 m6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Bz0(Z,Q)}}),$}var W96,H96,Hb$;var Ub$=B(()=>{ej0();C8();i41();oj0();N61();Z61();Yb$();Kb$();rC();Wz0();W96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;H96=Uh.object({set:Uh.record(Uh.string(),Uh.unknown()).optional(),delete:Uh.array(Uh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Hb$=tj0(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(!K96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Wb$(w,{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(!rj0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Kr(K,N);if(!F)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:F,userId:J}),Z()})});var wb$=($)=>{let Z=new U1;if(Z.use("*",uC),Z.route("/",Fj0()),Z.route("/",fV$()),Z.route("/",yv$()),Z.route("/",fv$()),Z.route("/",ij0()),Z.route("/tools",mv$()),Z.route("/",cv$()),Z.route("/",Dv$({kvStorage:$.kvStorage})),Z.route("/",Ov$()),Z.route("/fs",Mv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Zb$()),Z.route("/decofile",Fb$()),Z.route("/",Cv$()),Z.route("/deco-sites",wj0()),Z.route("/sso",Gj0()),Z.route("/",nj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",qV$()),$.mountDevAssets)Z.route("/dev-assets",Oj0({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("/",Rk$()),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",Sv$()),Z.route("/mcp",kO0()),Z.route("/mcp/self",mj0()),Z.route("/mcp",CO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ob$=B(()=>{C8();U81();MV$();L81();Bj0();ko();N81();Bv$();Lv$();kv$();un();X81();_O0();g41();Vv$();_v$();bv$();gv$();lv$();u41();iv$();c41();SO0();Xb$();Ub$()});function F96($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function U96($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(N96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var N96=1e4,w96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Bb$=()=>{let $=new U1;return $.use("*",w96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await U96(Q,Y);return Z.json({apps:F96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Db$=B(()=>{C8();M$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function T96($){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 R96($,Z,X){try{return JSON.parse($)}catch{throw new jb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function I96($){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:R96(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 q96($){let Z=$.map((X)=>{let Q=X.function.parameters?RY(X.function.parameters):RY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function M96($){if(!$)return;return{openai:{response_format:$}}}function k96(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Lb$($,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 Eb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var O96=256,B96,D96,L96,E96,j96,z96,P96,A96,jb$,zb$,Pb$;var Ab$=B(()=>{S4();C8();Gh();uN();B96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),D96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),L96=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(D96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),E96=M1.object({type:M1.literal("text")}),j96=M1.object({type:M1.literal("json_object")}),z96=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()})}),P96=M1.union([E96,j96,z96]),A96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(L96),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(B96).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:P96.optional(),user:M1.string().optional()});jb$=class jb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zb$=new U1;zb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("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(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=A96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=T96(G.model);if(!J)return $.json(lK("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)=>HD(j.providerId));if(!E)return $.json(lK("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(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=I96(G.messages),U=G.tools?q96(G.tools):void 0,w=M96(G.response_format),O=k96(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=Lb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=O96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Eb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),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=Lb$(N,F,U,G,w,$.req.raw.signal),E=await qw(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:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Eb$(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(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Pb$=zb$});var Rb$;var Tb$=B(()=>{Rb$={name:"decocms",version:"4.205.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function C96(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??V96}}var Ib$,V96="https://ph.studio.decocms.com",qb$;var Mb$=B(()=>{C8();_y0();fV();PZ();M$();a$1();Tb$();Ib$=new U1;Ib$.get("/",($)=>{let Z={version:Rb$.version,theme:Fc1(),...eD().logo&&{logo:eD().logo},...wK()&&{internalUrl:uM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:mS$(),posthog:C96(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});qb$=Ib$});function wh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function O61($){return(wh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Sb$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wh($))}&sz=${Z}`}function kb$($,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 Vb$($){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()?kb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):kb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var $_,_96,v96,f96,b96,Cb$;var _b$=B(()=>{$_=c0.enum(["good","bad","neutral"]),_96=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:$_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),v96=c0.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},c0.array(_96)),f96={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},b96=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:$_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:$_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(v96).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:$_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:$_.optional()})).min(1)})]),Cb$=c0.object({...f96,template:b96})});function Dz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Cb$.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 B61=B(()=>{_b$()});import{join as vb$}from"path";async function y96($){try{let Z=await fetch(`${yW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(x96)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dz0(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()||O61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function mY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function g96($,Z){let X=wh($),Q=Z?.brand?.trim()||O61(X),Y=Sb$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Vb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${mY(W)}</title>`,`<meta name="description" content="${mY(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="${mY(W)}" />`,`<meta property="og:description" content="${mY(K)}" />`,`<meta property="og:url" content="${mY(J)}" />`,`<meta property="og:image" content="${mY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mY(W)}" />`,`<meta name="twitter:description" content="${mY(K)}" />`,`<meta name="twitter:image" content="${mY(H)}" />`,`<meta name="twitter:image:alt" content="${mY(N)}" />`,`<link rel="canonical" href="${mY(J)}" />`,`<link rel="icon" href="${mY(Y)}" sizes="any" />`].join(`
2735
2735
  `)}function h96($,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}
2736
2736
  </head>`)}function fb$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=wh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(vb$($,"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(`${yW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(u96)}),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=$?vb$($,"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 y96(wh(Q)),K=g96(Q,W);return X.html(h96(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var x96=2500,u96=1e4;var bb$=B(()=>{C8();B61();wL();M$()});function Nr($,Z){return fetch(`${yW({})}${$}`,Z)}async function c96($,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 Nr(`/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}=Dz0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var l96,HF,xb$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},yb$;var gb$=B(()=>{C8();MG();wL();B61();l96=new Set(["complete","errored","terminated","unknown"]),HF=new U1;HF.use("*",async($,Z)=>{let X=await j8.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});HF.use("/link-token/*",xb$);HF.use("/suggest",xb$);HF.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 c96(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)}});HF.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 Nr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${UL({})}`},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)}});HF.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Nr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${UL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:l96.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});HF.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Nr(`/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)}});HF.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Nr(`/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:[]})}});yb$=HF});import{createHmac as d96,timingSafeEqual as m96}from"crypto";function ub$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>i96)return!1;let W=d96("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&m96(K,N)})}function cb$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=KJ(Z),Q=KJ(KJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:dK(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 lb$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function dK($){return typeof $==="string"?$:void 0}function KJ($){return typeof $==="object"&&$!==null?$:void 0}function Lz0($){return typeof $==="number"?new Date($*1000):null}function E61($){return dK($)??dK(KJ($)?.id)}function n96($){return E61($.subscription)??dK(KJ(KJ($.parent)?.subscription_details)?.subscription)}function p96($){let Z=Lz0($.current_period_end);if(Z)return Z;let X=KJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=KJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function D61($,Z){let X=Lz0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function L61($,Z){let X=Lz0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function t96($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=dK(KJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(dK(KJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(dK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=dK(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(KJ(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:KJ(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(dK(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=E61(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(D61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:E61(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=dK(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&&D61(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":lb$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:p96(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=n96(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(D61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:Lz0(X.period_end),lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function o96($,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:lb$(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 hb$($,Z){let X=o96($,Z);if(!X)return;aJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:jd1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function db$($){let Z=new vW(m8().db),X=await t96(Z,$);if(!(X.handled&&X.topUp))hb$($,X);if(X.handled&&X.topUp)await SU$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),hb$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await fo1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof W3&&(Q.status===400||Q.status===404)))throw Q}return X}var i96=300;var mb$=B(()=>{jG();x4();U40();om();nr0()});var r96=1048576,j61;var ib$=B(()=>{C8();oO();M$();mb$();j61=new U1;j61.post("/webhook",FZ({maxSize:r96,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=y0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ub$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=cb$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await db$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as a96}from"crypto";function e96($,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 a96(Buffer.from(Y),Buffer.from(Q))}var s96=5242880,z61;var nb$=B(()=>{C8();oO();ti();z61=new U1;z61.post("/webhook",FZ({maxSize:s96,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(!e96(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 jm0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function pb$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var tb$,$Z6,ZZ6,ob$;var rb$=B(()=>{C8();rJ();ux();ub();tb$=new U1,$Z6=["range","if-none-match","if-modified-since"],ZZ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];tb$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ug($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let Y=await Rn(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&X3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return pb$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of $Z6){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 e1(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 e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of ZZ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),pb$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});ob$=tb$});var Fr=C((Z_)=>{var XZ6=Z_&&Z_.__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]}),QZ6=Z_&&Z_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))XZ6(Z,$,X)};Object.defineProperty(Z_,"__esModule",{value:!0});QZ6(QY(),Z_)});var eb$=C((ab$)=>{Object.defineProperty(ab$,"__esModule",{value:!0});ab$.version=void 0;ab$.version="3.4.0"});var Xx$=C((mK)=>{var YZ6=mK&&mK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(mK,"__esModule",{value:!0});mK.NodeTransport=mK.VERSION=void 0;mK.nodeResolveHost=NZ6;var i6=Fr(),GZ6=z0("net"),P61=z0("tls"),JZ6=z0("path"),$x$=z0("fs"),WZ6=YZ6(z0("dns")),KZ6=eb$();mK.VERSION=KZ6.version;var HZ6="nats.js";class Zx${socket;version;lang;yields=[];signal=(0,i6.deferred)();closedNotification=(0,i6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=HZ6,this.version=mK.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,i6.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 i6.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 i6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new i6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,i6.deferred)(),X,Q=(0,GZ6.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,i6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=i6.DataBuffer.concat(...this.yields),Y=(0,i6.extractProtocolMessage)(Q);if(Y!=="")try{let G=i6.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,i6.deferred)();try{if($=(0,JZ6.resolve)($),!(0,$x$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,$x$.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,i6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new i6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,i6.deferred)();try{let Y=(0,P61.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 i6.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,i6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new i6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,i6.deferred)();try{let Q=(0,P61.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 i6.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,i6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,i6.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 P61.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,i6.render)($)}`);let Z=(0,i6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,i6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,i6.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}}mK.NodeTransport=Zx$;function NZ6($){let Z=(0,i6.deferred)();return WZ6.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 Wx$=C((Jx$)=>{Object.defineProperty(Jx$,"__esModule",{value:!0});Jx$.connect=FZ6;var Qx$=Xx$(),Yx$=Fr(),Gx$=Fr();function FZ6($={}){if((0,Gx$.hasWsProtocol)($))return Promise.reject(Gx$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Yx$.setTransportFactory)({factory:()=>{return new Qx$.NodeTransport},dnsResolveFn:Qx$.nodeResolveHost}),Yx$.NatsConnectionImpl.connect($)}});var Kx$=C((NF)=>{var wZ6=NF&&NF.__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]}),OZ6=NF&&NF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))wZ6(Z,$,X)};Object.defineProperty(NF,"__esModule",{value:!0});NF.connect=void 0;var BZ6=Wx$();Object.defineProperty(NF,"connect",{enumerable:!0,get:function(){return BZ6.connect}});OZ6(Fr(),NF)});function Ux$($){let Z=$?.connectFn??jZ6,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 N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!G)try{X=await Z({servers:U,timeout:EZ6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=uZ(LZ6,DZ6,O-1,2,0.5);await C$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?Hx$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Fx$.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 jZ6($){return Nx$.connect($)}var Hx$,Nx$,Fx$,DZ6=100,LZ6=3000,EZ6=3000;var wx$=B(()=>{$6();Hx$=k(hh(),1),Nx$=k(Kx$(),1),Fx$=k(LB(),1)});function A61($,Z){return`${$}.${Z}`}class T61{cache;constructor($){this.cache=qg({ttlMs:$?.ttlMs??zZ6,maxSize:$?.maxSize??PZ6})}async get($,Z){return this.cache.get(A61($,Z))??null}async set($,Z,X){this.cache.set(A61($,Z),X)}async invalidate($,Z){this.cache.delete(A61($,Z))}teardown(){this.cache.clear()}}var zZ6=600000,PZ6=5000;var Ox$=()=>{};function Ez0($,Z){return`${$}:${Z}`}function R61($){let Z=qg({ttlMs:$?.ttlMs??AZ6,maxSize:$?.maxSize??TZ6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(Bx$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(Ez0(K,H))},set(K,H,N){Z.set(Ez0(K,H),N)},invalidate(K,H){Z.delete(Ez0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Bx$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(Ez0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Bx$="studio.ai-provider-keys.invalidate",AZ6=30000,TZ6=5000;var Dx$=()=>{};class I61{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=Lx$.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 Lx$)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 Lx$;var Ex$=B(()=>{Lx$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var jx$=($)=>{let Z;return()=>Z??=$()},q61,M61;var zx$=B(()=>{C6();q61=jx$(()=>k$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),M61=jx$(()=>k$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function VZ6(){return{name:kN,subjects:[`${ow0}.>`],storage:p3.StorageType.File,max_age:qZ6,max_bytes:kZ6,max_msgs_per_subject:SZ6,discard:p3.DiscardPolicy.Old,retention:p3.RetentionPolicy.Limits,duplicate_window:MZ6,num_replicas:1}}class Tx${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 Px$($){let Z=Ax$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function fZ6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,IZ6().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 bZ6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class k61{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=VZ6(),X=await cZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await p3.jetstreamManager($);try{await Q.streams.info(kN),await Q.streams.update(kN,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(kN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:bZ6});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=fZ6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=BW$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=mn0(H,{runId:Z}),U=performance.now()-N;if(q61().record(U),M61().add(1,{"org.id":Q??"unknown"}),vZ6?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)G.publish(Y,w.subject,w.data,w.headers?Px$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),_Z6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,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=mn0(Z,{runId:$,dedup:X});if(q61().record(performance.now()-Y),M61().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:Px$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=OW$({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"?p3.DeliverPolicy.New:p3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=NO($),W;try{W=await(await Q.consumers.get(kN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=$O0({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(rw0()).pipeThrough(aw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(G){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(kN,{filter:NO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var p3,Ax$,RZ6=($)=>{let Z;return()=>Z??=$()},IZ6,qZ6=86400000000000,MZ6=120000000000,kZ6=4294967296,SZ6=500000,CZ6,_Z6,vZ6;var Rx$=B(()=>{$6();in0();ZO0();sw0();C6();zx$();p3=k(LB(),1),Ax$=k(hh(),1),IZ6=RZ6(()=>k$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));CZ6=process.env.STREAM_ENCODE_TRACE==="1",_Z6=process.env.DECOPILOT_STREAM_TRACE==="1";vZ6=CZ6?new Tx$:null});function jz0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,DW(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 Ix$=B(()=>{L8()});class S61{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function lZ6($){return $ instanceof zQ}function dZ6($,Z){return Z-$>=uZ6}class V61{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??xZ6;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??gZ6,X=this.options.itemIntervalMs??yZ6,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}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()-NJ$),Ip0);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()-cZ6));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 wn0(this.taskBoard,Y,Q),await On0(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!==L4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await SN(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),lZ6(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()+hZ6)).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(()=>{}),y4(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(!dZ6(PL(X),Date.now()))return;await GO($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==L4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z),Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;if(Q.length===0)return await this.handOffReviewWithoutPr(Y,X),!1;if(await PK$(Y,X))return!0;let G=await Promise.all(Q.map(async(J)=>({...J,...await Ap0(Y,Z,J)})));if(G.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${G.length} PR(s)) \u2014 proceeding on unknown`);if(!Pp0(G))return!1;return await JO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var xZ6=60000,yZ6=300000,gZ6=50,hZ6=60000,uZ6=900000,cZ6=120000;var qx$=B(()=>{kZ();Op0();FO();BO0();ZZ();K3();qp0();sx()});import{readdir as mZ6,rm as zz0}from"fs/promises";import{join as Pz0}from"path";async function Az0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-iZ6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await X_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Mx$($,Y,Z);else if(!Y.startsWith(".")){let G=Pz0($,Y),J=await X_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Mx$(G,K,Z)}if((await X_(G)).length===0)await zz0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Mx$($,Z,X){let Q=0,Y=Pz0($,Z),G=await X_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=Pz0(Y,W),H=await X_(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Pz0(K,F);await zz0(w,{recursive:!0,force:!0}),Q++}}if((await X_(K)).length===0)await zz0(K,{recursive:!0,force:!0})}if((await X_(Y)).length===0)await zz0(Y,{recursive:!0,force:!0});return Q}async function X_($){try{return(await mZ6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var iZ6=30;var C61=()=>{};import{DBOS as _61,SchedulerMode as nZ6}from"@dbos-inc/dbos-sdk";async function tZ6(){let $=[wJ(),Q_(),nK()],Z=0;for(let X of $)try{Z+=await Az0(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 oZ6($,Z){await _61.runStep(()=>tZ6(),{name:"monitoringRetention"})}function Sx$(){if(kx$)return;kx$=!0;let $=_61.registerWorkflow(oZ6,{name:"monitoringRetentionWorkflow"});_61.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:pZ6,mode:nZ6.ExactlyOncePerIntervalWhenActive})}var pZ6="23 4 * * *",kx$=!1;var Vx$=B(()=>{eQ();C61()});function Cx$($){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 yK.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await g$1($.db,Z,Q.role);return Y.boundAuth=y$1({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new oD(X,void 0,Y.boundAuth,Q.role,"self"),gg(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var _x$=B(()=>{rD();Cg()});function rZ6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function sZ6(){for(let $ of aZ6)$()}function vx$($){let Z=[...v61.logs,$];v61={...v61,logs:Z.length>500?Z.slice(-500):Z},sZ6()}function f61(){return eZ6}var v61,aZ6,eZ6=!1;var b61=B(()=>{v61=rZ6(),aZ6=new Set});import{EventEmitter as $76}from"events";var x61;var fx$=B(()=>{b61();x61=new $76;x61.on("request",($)=>{vx$($)})});function bx$(){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 w=Oh(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Oh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Z5.tool}${w}${Z5.dim}(${L})${Z5.reset}`}else if(U.method)G=`${Z5.dim}${Oh(U.method)}${Z5.reset}`}}catch{}}let W=Oh(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${Z5.mcp}${Oh(N.slice(0,12))}\u2026${Z5.reset}`}else if(Y==="/mcp")W=`${Z5.mcp}/mcp${Z5.reset}`;else if(Y==="/mcp/registry")W=`${Z5.mcp}/mcp/registry${Z5.reset}`;let K=X76(Q),H=J?"\u25C0":"\u2190";if(!f61())console.log(`${Z5.dim}${H}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=Z76(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!f61())console.log(`${Z5.dim}${O}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""} ${U}${F}${Z5.reset} ${Z5.duration}${w}${Z5.reset}`);x61.emit("request",{method:Q,path:Oh(Y),status:F,duration:N,timestamp:new Date})}}}var Z5,Z76=($)=>{if($>=500)return Z5.serverError;if($>=400)return Z5.clientError;if($>=300)return Z5.redirect;return Z5.ok},X76=($)=>{return Z5[$]||Z5.reset},Oh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var xx$=B(()=>{b61();fx$();Z5={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 ux$}from"crypto";import{mkdir as Q76,readdir as Y76,rm as yx$,stat as cx$}from"fs/promises";import{join as g61,relative as G76}from"path";import{z as E$}from"zod";function dx$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return g61(J76,Z)}function mx$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function y61($,Z){let X=dx$($),Q=mx$(Z);return g61(X,Q)}function W76($,Z,X,Q){let Y=y0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ux$("sha256",Y).update(G).digest("hex")}function hx$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=W76(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${mx$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function ix$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ux$("md5","etag").update(Q).digest("hex")}"`}async function nx$($,Z,X,Q,Y){try{let G=await Y76($,{withFileTypes:!0});for(let J of G){let W=g61($,J.name),H=G76(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await nx$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await cx$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:ix$(W,N.mtime,N.size)})}catch{}}}}catch{}}function px$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=dx$(Q);await Q76(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await nx$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=y61(Q,G.key),W=await cx$(J);return{contentType:j81(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:ix$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??gx$;return{url:hx$(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:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??gx$;return{url:hx$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(Y)=>{let G=Y,J=y61(Q,G.key);try{return await yx$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=y61(Q,K);try{await yx$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function h61($,Z,X){let Q=px$(Z,X),Y=new TW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new iX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),pG(Y,G,$,"mcp:dev-assets")}async function tx$($,Z,X,Q){let G=px$(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 J76="./data/assets",gx$=3600,lx$,ox$;var rx$=B(()=>{M$();Qy();C8();Nl();cV();MX();Bj0();lx$=new U1;lx$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return h61($.req.raw,Z,Q)});ox$=lx$});var ax$={};N4(ax$,{mountDevRoutes:()=>K76});function K76($,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 h61(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 tx$(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",ox$);let X=new U1;X.use("*",i3({mountPath:"/api/dev-assets"})),X.route("/",Oj0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var sx$=B(()=>{C8();F81();Bj0();rx$()});import{sql as H76}from"kysely";import{randomUUID as ex$}from"crypto";import{z as N76}from"zod";async function U76($){let Z=new Date().toISOString(),X=ex$(),Q=u4.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:ex$(),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 H76`SELECT
2737
2737
  pg_notify('studio_events', ${X}),