decocms 4.301.1 → 4.302.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/dist/client/assets/{AlertCircle-ljUXZVgg.js → AlertCircle--S50lYlT.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CfjqEiiW.js → AreaChart-2sBpbuMf.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-O_poTHg5.js → ArrowLeft--moIvZF1.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-owAEYYU9.js → ArrowUp-BkX5jA0w.js} +1 -1
  5. package/dist/client/assets/{Check-Dspx9Fp7.js → Check-21QCyL9U.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-Xp4EEaHw.js → CheckCircle-CPDEO5GX.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-BIP5kqgM.js → ChevronDown-Ne8BnIfH.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-DN8wQOqh.js → ChevronRight-BNwKXu8S.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-pB9PhHfJ.js → ChevronSelectorVertical-wQ_D9Y2K.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-CziS5WaB.js → ChevronUp-BasPulcO.js} +1 -1
  11. package/dist/client/assets/{Copy01-vCqfQzFe.js → Copy01-t29PvqTS.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-Do9O8xIN.js → CreditCard01-BXjnEU5v.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-BRi7moDO.js → DotsVertical-CXv3vUpi.js} +1 -1
  14. package/dist/client/assets/{Download01-CfiTBBn_.js → Download01-BdQRwVjm.js} +1 -1
  15. package/dist/client/assets/{Eye-DeuttcGY.js → Eye-CIH0cvna.js} +1 -1
  16. package/dist/client/assets/{FilterLines-D7mDTV7W.js → FilterLines-TFzhd5Sv.js} +1 -1
  17. package/dist/client/assets/{Globe01-DjZFjLeY.js → Globe01-DgHCgXqE.js} +1 -1
  18. package/dist/client/assets/{Globe04-JNbM0T4S.js → Globe04-DhiCVMqK.js} +1 -1
  19. package/dist/client/assets/{HardDrive-BE93B0r3.js → HardDrive-CZNhB50C.js} +1 -1
  20. package/dist/client/assets/{Key01-BfP4FjhZ.js → Key01-CJ7IFAqA.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-DEeO7Yqp.js → LinkExternal01-CChSNtL1.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-BV3keEk-.js → LockUnlocked01-BgNvX2VD.js} +1 -1
  23. package/dist/client/assets/{LogOut01--nH6fRjz.js → LogOut01-BJVeOK9b.js} +1 -1
  24. package/dist/client/assets/{Monitor01-n4Ml3ptB.js → Monitor01-C8QN-pqN.js} +1 -1
  25. package/dist/client/assets/{Palette-DUQPyERX.js → Palette-CGBCMwIz.js} +1 -1
  26. package/dist/client/assets/{Play-j8BtRPuR.js → Play-C4beyigm.js} +1 -1
  27. package/dist/client/assets/{Plus-CH75M1Z_.js → Plus-BMOgHzG5.js} +1 -1
  28. package/dist/client/assets/{SearchLg-BxkHIUp9.js → SearchLg-CGVDwrMb.js} +1 -1
  29. package/dist/client/assets/{SearchMd-gHnWrk04.js → SearchMd-DnevLcSr.js} +1 -1
  30. package/dist/client/assets/{Settings02-BPV8iKcU.js → Settings02-CsELO-le.js} +1 -1
  31. package/dist/client/assets/{Share07-BGukGo7T.js → Share07-CMg5MeSz.js} +1 -1
  32. package/dist/client/assets/{Shield01-BB2neh_V.js → Shield01-C50GHdrj.js} +1 -1
  33. package/dist/client/assets/{Stars01-COgnQQBe.js → Stars01-BUhIIfF6.js} +1 -1
  34. package/dist/client/assets/{Stars02-DZ3JRVne.js → Stars02-CEnwjR-Z.js} +1 -1
  35. package/dist/client/assets/{Sun-C6ZCInWh.js → Sun-MIE_B9F8.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-CGTTaBt7.js → SwitchHorizontal01-Bzkb6o-L.js} +1 -1
  37. package/dist/client/assets/{Tool01-BjY6qOZZ.js → Tool01-BRmg7VS6.js} +1 -1
  38. package/dist/client/assets/{Tool02-D8r9WrY5.js → Tool02-DIytv_88.js} +1 -1
  39. package/dist/client/assets/{Trash01-C-Qo_xAi.js → Trash01-CVqps_Wa.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-fwYE1fSJ.js → TrendUp01-h2owl4fz.js} +1 -1
  41. package/dist/client/assets/{Upload01-B8TZG867.js → Upload01-B4pquB-8.js} +1 -1
  42. package/dist/client/assets/{User01-BVTsNjSS.js → User01-C-2eRuUK.js} +1 -1
  43. package/dist/client/assets/{UserSquare-CcB7EE3-.js → UserSquare-BEIgFGFo.js} +1 -1
  44. package/dist/client/assets/{Users01-DFm0KLRk.js → Users01-DmLZ_8H3.js} +1 -1
  45. package/dist/client/assets/{Users03-CYQdFqu5.js → Users03-DFqEkeM0.js} +1 -1
  46. package/dist/client/assets/{XCircle-BLXZX6LN.js → XCircle-CuKagUwu.js} +1 -1
  47. package/dist/client/assets/{XClose-BI1HCDzp.js → XClose-Ck8HkChC.js} +1 -1
  48. package/dist/client/assets/{YAxis-Bagaia8x.js → YAxis-DogP2msy.js} +1 -1
  49. package/dist/client/assets/{Zap-CUiG_SEX.js → Zap-BMEUb6hF.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-dsonqlnJ.js → ZapSquare-CyEVyYPm.js} +1 -1
  51. package/dist/client/assets/{access-gate-D98V2vC9.js → access-gate-DgNMsLL8.js} +1 -1
  52. package/dist/client/assets/{agent-icon-D080UAkK.js → agent-icon-BTu0aLL6.js} +1 -1
  53. package/dist/client/assets/{agents-list-BHWoc2Ab.js → agents-list-CHI4iWCs.js} +1 -1
  54. package/dist/client/assets/{ai-providers-B_zbvZms.js → ai-providers-B50WGqBN.js} +1 -1
  55. package/dist/client/assets/{alert-BZ-z_uGm.js → alert-DoV-uPtw.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-D80JF1FN.js → alert-dialog-B3-qCKYp.js} +1 -1
  57. package/dist/client/assets/{api-keys-Dxx7a6SP.js → api-keys-DKXE1ELu.js} +1 -1
  58. package/dist/client/assets/{app-editor-C_wNkqv4.js → app-editor-BQ72-EOL.js} +1 -1
  59. package/dist/client/assets/{auth-CAzZwnob.js → auth-5AK60ATv.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-E-LlAM-S.js → auth-catchall-DW-VvqJj.js} +1 -1
  61. package/dist/client/assets/{auth-entry-JuGGJf92.js → auth-entry-BRtox9Oq.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-Bx_mmH-l.js → auth-split-layout-3E2Xv55N.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-Bl5SLBwb.js → authenticate-and-persist-oauth-m5l9IIdb.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-B8DIsrsz.js → automation-list-row-CiOBbaJm.js} +1 -1
  65. package/dist/client/assets/{automation-runs-8pT6UcJX.js → automation-runs-C1o0atK6.js} +1 -1
  66. package/dist/client/assets/{automations-BblT7_xF.js → automations-D3HoiLUU.js} +1 -1
  67. package/dist/client/assets/{avatar-C-wDTrqY.js → avatar-AMLPXGy0.js} +1 -1
  68. package/dist/client/assets/{badge-C3zovwOz.js → badge-De3utlxn.js} +1 -1
  69. package/dist/client/assets/{block-document-B_n2-NvH.js → block-document-BY8f6kr3.js} +1 -1
  70. package/dist/client/assets/{breadcrumb-BGVJe9sP.js → breadcrumb-D_8xwetH.js} +1 -1
  71. package/dist/client/assets/{buckets-D5WT0cf3.js → buckets--zWQZdkU.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-HA3DYXop.js → bulk-category-panel-DEM09iDR.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-DZd0TZqr.js → capability-load-error-9u9UnRYj.js} +1 -1
  74. package/dist/client/assets/{cards-hEkcdw4x.js → cards-B0CKLrvb.js} +1 -1
  75. package/dist/client/assets/{category-editor-BYTL98zO.js → category-editor-CnUuaDs1.js} +1 -1
  76. package/dist/client/assets/{chart-BEjRfmhR.js → chart-Ct9Q-YeQ.js} +1 -1
  77. package/dist/client/assets/{chat-context-D8aIMWdd.js → chat-context-DK-zqgAd.js} +1 -1
  78. package/dist/client/assets/{checkbox-D9umlVBm.js → checkbox-jrhgij5O.js} +1 -1
  79. package/dist/client/assets/{choose-editor-zKSRgiY-.js → choose-editor-C3ywTQCb.js} +1 -1
  80. package/dist/client/assets/{cli-auth-success-Pbjl8ie0.js → cli-auth-success-CuFHRifS.js} +1 -1
  81. package/dist/client/assets/{collection-detail-KAQcK23P.js → collection-detail-B1UlrCPL.js} +1 -1
  82. package/dist/client/assets/{collection-display-button-DElS1JkI.js → collection-display-button-BHpCXAXi.js} +1 -1
  83. package/dist/client/assets/{collection-search-DwpjDZgj.js → collection-search-Cs_0NeQV.js} +1 -1
  84. package/dist/client/assets/{collection-table-wrapper-BMfdmOc5.js → collection-table-wrapper-CVr9gD1-.js} +1 -1
  85. package/dist/client/assets/{collection-tabs-MkxigJjY.js → collection-tabs-DYOU5hvW.js} +1 -1
  86. package/dist/client/assets/{command-DUGT4YuA.js → command-B0DuZOel.js} +1 -1
  87. package/dist/client/assets/{commerce-onboarding-BmuUaTay.js → commerce-onboarding-CRmKi-nH.js} +1 -1
  88. package/dist/client/assets/{config-KtrfZ-Vw.js → config-CzeSm6M1.js} +1 -1
  89. package/dist/client/assets/{connect-B-nmHPbw.js → connect-BHHvcgmH.js} +1 -1
  90. package/dist/client/assets/{connection-LGpb7l5N.js → connection-BsvgSKJK.js} +1 -1
  91. package/dist/client/assets/{connection-card-DG_wFSNi.js → connection-card-Cnwns280.js} +1 -1
  92. package/dist/client/assets/{connection-detail-aGo-Qvt-.js → connection-detail-D64vtP2R.js} +1 -1
  93. package/dist/client/assets/{connection-form-helpers-BzuUoL8A.js → connection-form-helpers-xgaaR9Wu.js} +1 -1
  94. package/dist/client/assets/{connections-CHRTDzbE.js → connections-C0aRbBn5.js} +1 -1
  95. package/dist/client/assets/{decopilot-sse-pool-BmPOv_9w.js → decopilot-sse-pool-CsEOd3x_.js} +1 -1
  96. package/dist/client/assets/{dialog-C2z64945.js → dialog-D9UcxaOZ.js} +1 -1
  97. package/dist/client/assets/{domain-settings-CgGh3z2i.js → domain-settings-BEFW_I49.js} +1 -1
  98. package/dist/client/assets/{drawer-CUiOyXL0.js → drawer-BUtvQSmI.js} +1 -1
  99. package/dist/client/assets/{dropdown-menu-ayJVblos.js → dropdown-menu-OAMtkHDy.js} +1 -1
  100. package/dist/client/assets/{empty-state-CJTsA7ZQ.js → empty-state-hLmmNxyW.js} +1 -1
  101. package/dist/client/assets/{extract-connection-data-BcHTU76U.js → extract-connection-data-BoWrhrV4.js} +1 -1
  102. package/dist/client/assets/{file-explorer-CV9-oV-Q.js → file-explorer-qVVGg7ie.js} +1 -1
  103. package/dist/client/assets/{file-type-icon-BfUDQtPj.js → file-type-icon-CzjrnCIA.js} +1 -1
  104. package/dist/client/assets/{form-DA40jxLy.js → form-D6M_LTG-.js} +1 -1
  105. package/dist/client/assets/{general-MDpTV4Dk.js → general-B-ixVJA-.js} +1 -1
  106. package/dist/client/assets/{github-repo-picker-CtQhVMRJ.js → github-repo-picker-CoxG8E9z.js} +1 -1
  107. package/dist/client/assets/{hooks-hTPN622N.js → hooks-DI5QN-lf.js} +1 -1
  108. package/dist/client/assets/{index-Cd78eLLb.js → index-BE3OLc8Y.js} +6 -6
  109. package/dist/client/assets/{index-BOx0KUFh.js → index-BUAHodE-.js} +1 -1
  110. package/dist/client/assets/{index-D8eVz1G2.js → index-BkdlYSI5.js} +1 -1
  111. package/dist/client/assets/{index-TJ7wGA3E.js → index-C5Fhci5U.js} +1 -1
  112. package/dist/client/assets/{index-DJEkiQUC.js → index-CC8H9260.js} +1 -1
  113. package/dist/client/assets/{index-BC3OycCV.js → index-DL6QWGZt.js} +3 -3
  114. package/dist/client/assets/{index-m7UZKvUt.js → index-DXRLhnEd.js} +1 -1
  115. package/dist/client/assets/{index-DatPw8uA.js → index-IpiB65ys.js} +1 -1
  116. package/dist/client/assets/{index-DFMhMZ-D.js → index-YSt4WJyU.js} +1 -1
  117. package/dist/client/assets/{index-redirect-CwBQV1Xk.js → index-redirect-nXWXEovG.js} +1 -1
  118. package/dist/client/assets/{infra-billing-v-600drN.js → infra-billing-DzIwX7K7.js} +1 -1
  119. package/dist/client/assets/{input-CJmiU1C-.js → input-31wlueT2.js} +1 -1
  120. package/dist/client/assets/{integration-icon-Bmo3oT9s.js → integration-icon-BXi1kT1t.js} +1 -1
  121. package/dist/client/assets/{invite-member-dialog-D8eWOjYF.js → invite-member-dialog-CNyLiJzv.js} +1 -1
  122. package/dist/client/assets/{label-BtUaN40E.js → label-l3A9nx8i.js} +1 -1
  123. package/dist/client/assets/{layout-zFndLcYt.js → layout-7AlJaXD_.js} +1 -1
  124. package/dist/client/assets/{login-S0L8GE65.js → login-GnNrJeXV.js} +1 -1
  125. package/dist/client/assets/{mcp-oauth-BOTsCCNI.js → mcp-oauth-RpES_cHs.js} +1 -1
  126. package/dist/client/assets/{members-Bt5J0gS4.js → members-CTTne1x8.js} +1 -1
  127. package/dist/client/assets/{monaco-editor-BMLMMPa-.js → monaco-editor-iCttGN_M.js} +1 -1
  128. package/dist/client/assets/{monitoring-stats-row-UZRMU8x5.js → monitoring-stats-row-Dyjw9oG-.js} +1 -1
  129. package/dist/client/assets/{multi-select-YRgR9zRZ.js → multi-select-nFUjFIuk.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-BnhdUk1_.js → oauth-callback-Bp9IScdO.js} +1 -1
  131. package/dist/client/assets/{oauth-callback-ai-provider-CI4OjqiI.js → oauth-callback-ai-provider-BZZIEDwx.js} +1 -1
  132. package/dist/client/assets/{onboarding-gvZqKi2d.js → onboarding-D7p-yBR8.js} +1 -1
  133. package/dist/client/assets/{org-layout-COOCTYlT.js → org-layout-eMgHxF26.js} +1 -1
  134. package/dist/client/assets/{organization-choice-BxQa72Tz.js → organization-choice-7iqgBQqb.js} +1 -1
  135. package/dist/client/assets/{orgs-D297Vmq3.js → orgs-Ccgln9xg.js} +1 -1
  136. package/dist/client/assets/{page-seo-form-CdZBFD3f.js → page-seo-form-CV107o5v.js} +1 -1
  137. package/dist/client/assets/{popover-If2D04hv.js → popover-C6zGwQIl.js} +1 -1
  138. package/dist/client/assets/{post-calendar-_2sAU49Y.js → post-calendar-D0ast4Yl.js} +1 -1
  139. package/dist/client/assets/{post-editor-Zk0Tm9uH.js → post-editor-sazq06Cc.js} +1 -1
  140. package/dist/client/assets/{primitives-Bbg6u6XW.js → primitives-Ci0hYkDg.js} +1 -1
  141. package/dist/client/assets/{profile-D0yNqtWs.js → profile-D8ohw0dP.js} +1 -1
  142. package/dist/client/assets/{project-app-view-DYhcKdZW.js → project-app-view-DYAgVh91.js} +1 -1
  143. package/dist/client/assets/{prompts-BWkGzrDr.js → prompts-CRAuTosb.js} +1 -1
  144. package/dist/client/assets/record-editor-BDTH9951.js +1 -0
  145. package/dist/client/assets/redirect-editor-XWCtvnKo.js +1 -0
  146. package/dist/client/assets/registry--75cD7Q4.js +2 -0
  147. package/dist/client/assets/{registry-layout-CLEVdutL.js → registry-layout-C2MVvqQh.js} +1 -1
  148. package/dist/client/assets/{reports-Crw9j2hu.js → reports-CSH1XgNu.js} +1 -1
  149. package/dist/client/assets/{require-capability-DfH6z05e.js → require-capability-DcgyJ0ed.js} +1 -1
  150. package/dist/client/assets/{required-auth-layout-DqEnT119.js → required-auth-layout-CZ_xeEey.js} +1 -1
  151. package/dist/client/assets/{reset-password-kid4OXSX.js → reset-password-CznFc3eP.js} +1 -1
  152. package/dist/client/assets/{review-settings-BT83EPcr.js → review-settings-BINYZIDC.js} +1 -1
  153. package/dist/client/assets/{roles-BqBiL4PM.js → roles-CU_Ur6R_.js} +1 -1
  154. package/dist/client/assets/{scroll-area-DU8Ibx6i.js → scroll-area-CGoUlzN9.js} +1 -1
  155. package/dist/client/assets/{search-input-By6KJCAU.js → search-input-oO7W7Jkx.js} +1 -1
  156. package/dist/client/assets/{secrets-FlYLmGbS.js → secrets-rVOSzo2y.js} +1 -1
  157. package/dist/client/assets/{sections-editor-BbYrmZD7.js → sections-editor-VuVu21P3.js} +1 -1
  158. package/dist/client/assets/{select-CFw9zVOp.js → select-BZD-FGQ3.js} +1 -1
  159. package/dist/client/assets/{select-model-CithTGMh.js → select-model-DUAwpbYO.js} +1 -1
  160. package/dist/client/assets/{self-tool-result-DM6h1PYI.js → self-tool-result-03d56M7n.js} +1 -1
  161. package/dist/client/assets/{seo-editor-BGJcK_dD.js → seo-editor-B_Twjp5e.js} +1 -1
  162. package/dist/client/assets/{settings-layout-B1BGgP9o.js → settings-layout-nt_bPixc.js} +1 -1
  163. package/dist/client/assets/{shell-controls-CgADbB3e.js → shell-controls-XLrHyMGG.js} +1 -1
  164. package/dist/client/assets/{shell-layout-CoGSaRZv.js → shell-layout-CyN9QvUt.js} +1 -1
  165. package/dist/client/assets/{spinner-BV8DqFIs.js → spinner-CqN_c-Vo.js} +1 -1
  166. package/dist/client/assets/{sso-D-ZrE89R.js → sso-CDrh8q1z.js} +1 -1
  167. package/dist/client/assets/{store-Bc_bBUc7.js → store-PS7WVh4w.js} +1 -1
  168. package/dist/client/assets/store-registry-BkP3L7H0.js +2 -0
  169. package/dist/client/assets/{super-agent-icon-DU04sOQc.js → super-agent-icon-DiYNyBiT.js} +1 -1
  170. package/dist/client/assets/{switch--xQ7kaDU.js → switch-Byl_sVul.js} +1 -1
  171. package/dist/client/assets/{synced-repos-Biy9etbn.js → synced-repos-BOBZW6zS.js} +1 -1
  172. package/dist/client/assets/{table-4fFr5X3V.js → table-Cmea17jX.js} +1 -1
  173. package/dist/client/assets/{tabs-DE8Uy3qS.js → tabs-Bo1G84wt.js} +1 -1
  174. package/dist/client/assets/{task-board-BiByHFh1.js → task-board-DKAS4RPu.js} +1 -1
  175. package/dist/client/assets/{tasks-Dv5scTC4.js → tasks-DdhSDrvE.js} +1 -1
  176. package/dist/client/assets/{textarea-BIyCQMXE.js → textarea-CQcDR8SL.js} +1 -1
  177. package/dist/client/assets/{toggle-group-Ban17rBs.js → toggle-group-PJVwuw0h.js} +1 -1
  178. package/dist/client/assets/{toolbar-BszG6pRV.js → toolbar-CJ7NGWqp.js} +1 -1
  179. package/dist/client/assets/{track-CRc7DoaF.js → track-FwRHeudJ.js} +1 -1
  180. package/dist/client/assets/{types-CP0iwckl.js → types-TVldurdZ.js} +1 -1
  181. package/dist/client/assets/{use-ai-providers-C6DxxrIw.js → use-ai-providers-67XyD-I5.js} +1 -1
  182. package/dist/client/assets/{use-api-keys-C22ovyI6.js → use-api-keys-C5eeVdYE.js} +1 -1
  183. package/dist/client/assets/{use-automations-Dv4L_mqz.js → use-automations-Bb-zRfpJ.js} +1 -1
  184. package/dist/client/assets/{use-autosave-B3Ol1QtM.js → use-autosave-Db__O11V.js} +1 -1
  185. package/dist/client/assets/{use-connection-BC-1N3cQ.js → use-connection-Bnw3RKv0.js} +1 -1
  186. package/dist/client/assets/{use-copy-hIsI1Npw.js → use-copy-ClF83VjI.js} +1 -1
  187. package/dist/client/assets/{use-create-virtual-mcp-DpPqjETZ.js → use-create-virtual-mcp-B7p1hpdE.js} +1 -1
  188. package/dist/client/assets/{use-debounced-autosave-Bc2vPK15.js → use-debounced-autosave-CERfWGwu.js} +1 -1
  189. package/dist/client/assets/{use-debounced-value-CDyQcr4h.js → use-debounced-value-CwZ5rH7B.js} +1 -1
  190. package/dist/client/assets/{use-decopilot-events-D1jhrYA5.js → use-decopilot-events-N4KoRwf0.js} +1 -1
  191. package/dist/client/assets/{use-delete-connection-Cw-nlqJU.js → use-delete-connection-BkjhNnHe.js} +1 -1
  192. package/dist/client/assets/{use-deployment-admin-CMGRAd7Z.js → use-deployment-admin-UOvix-CA.js} +1 -1
  193. package/dist/client/assets/{use-destination-route-ryxqobAF.js → use-destination-route-5DAVdaA6.js} +1 -1
  194. package/dist/client/assets/{use-file-configs-Wie4CKvq.js → use-file-configs-BMREGWDR.js} +1 -1
  195. package/dist/client/assets/{use-infinite-scroll-CitCgVws.js → use-infinite-scroll-Cad3tFqO.js} +1 -1
  196. package/dist/client/assets/{use-join-requests-BWcZjMaY.js → use-join-requests-D-qnEwKd.js} +1 -1
  197. package/dist/client/assets/{use-mcp-auth-status-BIoyHUqD.js → use-mcp-auth-status-Dmz2PGDh.js} +1 -1
  198. package/dist/client/assets/{use-mcp-client-BCLniVpi.js → use-mcp-client-_-q8gSpV.js} +1 -1
  199. package/dist/client/assets/{use-mcp-tools-BZwaAMhe.js → use-mcp-tools-H87UCyWm.js} +1 -1
  200. package/dist/client/assets/{use-members-DkgeBVL-.js → use-members-CQGYX3Pj.js} +1 -1
  201. package/dist/client/assets/{use-navigate-to-agent-DSUm9cYC.js → use-navigate-to-agent-Ckze4qM4.js} +1 -1
  202. package/dist/client/assets/{use-org-auth-client-BTYz4Get.js → use-org-auth-client-ClV-gFXb.js} +1 -1
  203. package/dist/client/assets/{use-org-repo-syncs-5qnhLJ1m.js → use-org-repo-syncs-DnMIWIVg.js} +1 -1
  204. package/dist/client/assets/{use-org-sso-ILC2SFH4.js → use-org-sso-BL7qkIX4.js} +1 -1
  205. package/dist/client/assets/{use-organization-roles-Bw-nhwHu.js → use-organization-roles-O3DPyr37.js} +1 -1
  206. package/dist/client/assets/{use-organization-settings-CS8eH9p-.js → use-organization-settings-DxE-DUNT.js} +1 -1
  207. package/dist/client/assets/{use-panel-navigate-D8J7h7Ug.js → use-panel-navigate-DgQaZ-S3.js} +1 -1
  208. package/dist/client/assets/{use-registry-connections-CkL-7k1R.js → use-registry-connections-DPTuPbtF.js} +1 -1
  209. package/dist/client/assets/{use-secrets-ykqA76r4.js → use-secrets-CkE-4DTo.js} +1 -1
  210. package/dist/client/assets/{use-section-preview-base-vTLGJTTw.js → use-section-preview-base-T9bUeko1.js} +1 -1
  211. package/dist/client/assets/{use-status-sounds-DkcUZrtO.js → use-status-sounds-DTPXBUkI.js} +1 -1
  212. package/dist/client/assets/{use-tags-TFH74lb0.js → use-tags-C-Dd9DWL.js} +1 -1
  213. package/dist/client/assets/{use-view-mode-DvqUeq37.js → use-view-mode-WGVCULVH.js} +1 -1
  214. package/dist/client/assets/{use-virtual-mcp-CTSK4a1q.js → use-virtual-mcp-q_2WTD-b.js} +1 -1
  215. package/dist/client/assets/useInfiniteQuery-Y1sGoq7f.js +1 -0
  216. package/dist/client/assets/useSuspenseInfiniteQuery-BaIecKZH.js +1 -0
  217. package/dist/client/assets/{users-BYS0Fc9_.js → users-If831PYj.js} +1 -1
  218. package/dist/client/assets/{variant-calendar-D77tQewW.js → variant-calendar-Jc5dZB3L.js} +1 -1
  219. package/dist/client/assets/{view-mode-toggle-DWyJ7Fpd.js → view-mode-toggle-BaI0In0z.js} +1 -1
  220. package/dist/client/index.html +1 -1
  221. package/dist/server/cli.js +4 -4
  222. package/dist/server/server.js +4 -4
  223. package/package.json +1 -1
  224. package/dist/client/assets/record-editor-B4QVewxw.js +0 -1
  225. package/dist/client/assets/redirect-editor-CzUqckYJ.js +0 -1
  226. package/dist/client/assets/registry-C5pJ9d_K.js +0 -2
  227. package/dist/client/assets/store-registry-B68MUNUv.js +0 -2
  228. package/dist/client/assets/useInfiniteQuery-CI3XHdhq.js +0 -1
  229. package/dist/client/assets/useSuspenseInfiniteQuery-VLjgFDWa.js +0 -1
@@ -1489,7 +1489,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var mp1=L(()=>{nf()});f
1489
1489
  `.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await Ey`
1490
1490
  DELETE FROM kysely_migration WHERE name = ${X}
1491
1491
  `.execute($)}}async function ga1($){await Ts8($),await Rs8($);let Z=new ba1({db:$,provider:{getMigrations:()=>Promise.resolve(dp0)}}),{error:X,results:Q}=await Z.migrateToLatest(),Y=0;if(Q?.forEach((G)=>{if(G.status==="Success")Y++;else if(G.status==="Error")console.error(`Failed to execute migration "${G.migrationName}"`)}),X)throw console.error("Failed to migrate"),console.error(X),X;return Y}async function Is8($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await hl0();let G=X??F8(),J=async()=>{if(!Z&&!X)await eB(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await ga1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function qs8(){let $=F8(),Z=new ba1({db:$.db,provider:{getMigrations:()=>Promise.resolve(dp0)}}),{error:X,results:Q}=await Z.migrateDown();if(Q?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),X)throw console.error("Failed to rollback migration"),console.error(X),X}var ua1=L(()=>{fa1();ul0();QX()});async function D70($){let Z={...process.env},X=H80($,Z);console.log(iw1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?zt1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (PZ0(),zZ0)),{outputs:G,services:J}=await Y({home:X.settings.dataDir,externalDatabaseUrl:X.externalDatabaseUrl,externalNatsUrl:X.externalNatsUrl});if(!X.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (ul0(),At1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (QX(),gn1)),{migrateToLatest:F}=await Promise.resolve().then(() => (ua1(),ha1)),N=H(G.databaseUrl);await F({keepOpen:!0,database:N,skipBetterAuth:!0})}let K={...X.settings,betterAuthSecret:Q,databaseUrl:G.databaseUrl,natsUrls:G.natsUrls,...G.s3?{s3Endpoint:G.s3.endpoint,s3Bucket:G.s3.bucket,s3AccessKeyId:G.s3.accessKeyId,s3SecretAccessKey:G.s3.secretAccessKey,s3ForcePathStyle:G.s3.forcePathStyle}:{}};return dp1(K),{settings:K,services:J.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:J.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var ip0=L(()=>{nf();Pt1();R$()});var da1={};Z0(da1,{updateService:()=>mE,subscribeCliState:()=>tp0,setTuiConsoleIntercepted:()=>w70,setServerUrl:()=>Op,setMigrationsDone:()=>Bp,setDevMode:()=>Vs8,resetCliStateForTests:()=>Ms8,isTuiConsoleIntercepted:()=>E70,getCliState:()=>np0,addLogEntry:()=>JO});function ca1(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function la1(){return{services:ca1(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Ms8(){cQ=la1()}function Up(){for(let $ of pp0)$()}function np0(){return cQ}function tp0($){return pp0.add($),()=>pp0.delete($)}function mE($){cQ={...cQ,services:cQ.services.map((Z)=>Z.name===$.name?$:Z)},Up()}function Bp(){cQ={...cQ,migrationsStatus:"done"},Up()}function Op($){cQ={...cQ,serverUrl:$},Up()}function JO($){let Z=[...cQ.logs,$];cQ={...cQ,logs:Z.length>500?Z.slice(-500):Z},Up()}function Vs8(){cQ={...cQ,services:[...ca1(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},Up()}function w70($){ma1=$}function E70(){return ma1}var cQ,pp0,ma1=!1;var dE=L(()=>{cQ=la1();pp0=new Set});import{createServer as ia1}from"net";function ks8($){return new Promise((Z)=>{let X=ia1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function Lp($){if(await ks8($))return $;let Z=await new Promise((X,Q)=>{let Y=ia1();Y.once("error",Q),Y.listen(0,"0.0.0.0",()=>{let G=Y.address(),J=typeof G==="object"&&G?G.port:0;Y.close(()=>X(J))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var op0=()=>{};var ap0={};Z0(ap0,{startDevServer:()=>Cs8,pipeToLogStore:()=>rp0});import{join as Ss8}from"path";function rp0($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
1492
- `);Q=G.pop()??"";for(let J of G){let K=Bun.stripANSI(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;JO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}}catch{}if(Q.trim()){let G=Bun.stripANSI(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)JO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function Cs8($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await Lp(Number(Y)+1):await Lp(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await D70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)mE({name:D.name,status:"ready",port:D.port});Bp();let F=Ss8(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)rp0(U.stdout),rp0(U.stderr);Op(G),mE({name:"Vite",status:"ready",port:Number(Y)}),mE({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(U.kill(D),await U.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (PZ0(),zZ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var sp0=L(()=>{ip0();dE();op0()});var j70;var ep0=L(()=>{j70={name:"decocms",version:"4.301.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as vs8,Text as pa1}from"ink";import{jsx as xs8,jsxs as na1}from"react/jsx-runtime";function ta1({version:$}){return na1(vs8,{flexDirection:"column",marginTop:1,children:[dZ0.map((Z,X)=>xs8(pa1,{color:iZ0[X],children:Z},X)),na1(pa1,{dimColor:!0,children:[" v",$]})]})}var oa1=L(()=>{$p()});import{Box as iE,Text as KO}from"ink";import{Spinner as fs8}from"@inkjs/ui";import{jsx as XG,jsxs as jy}from"react/jsx-runtime";function ra1({status:$}){if($==="pending")return XG(fs8,{label:""});return XG(KO,{color:"green",children:"\u2713"})}function bs8($){return`${$.name}: ${$.port||"...."}`}function aa1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return jy(iE,{flexDirection:"column",paddingBottom:1,children:[XG(ta1,{version:j70.version}),XG(iE,{marginBottom:1,children:XG(KO,{dimColor:!0,children:"\u2500".repeat(80)})}),XG(iE,{children:jy(KO,{dimColor:!0,children:["Home: ",X]})}),jy(iE,{gap:2,children:[$.map((Y)=>jy(iE,{gap:1,children:[XG(KO,{children:bs8(Y)}),XG(ra1,{status:Y.status})]},Y.name)),jy(iE,{gap:1,children:[XG(KO,{children:"Migrations"}),XG(ra1,{status:Z})]})]}),XG(iE,{children:Q?jy(KO,{children:["Open in browser: ",XG(KO,{color:"cyan",children:Q})]}):XG(KO,{dimColor:!0,children:"Starting..."})})]})}var sa1=L(()=>{ep0();oa1()});import{Box as ys8,Text as Dp}from"ink";import{jsx as $n0,jsxs as Zn0}from"react/jsx-runtime";function gs8($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function ea1({logs:$}){return $n0(ys8,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return $n0(Dp,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Zn0(Dp,{children:[Zn0(Dp,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),$n0(Dp,{color:gs8(Z.status),children:Z.status}),Zn0(Dp,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var $s1=()=>{};var Xn0={};Z0(Xn0,{App:()=>cs8});import{Box as hs8}from"ink";import{useSyncExternalStore as us8}from"react";import{jsx as Zs1,jsxs as ls8}from"react/jsx-runtime";function cs8({home:$}){let Z=us8(tp0,np0);return ls8(hs8,{flexDirection:"column",children:[Zs1(aa1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Zs1(ea1,{logs:Z.logs})]})}var Qn0=L(()=>{sa1();$s1();dE()});var c3="thread-gate",HN="decopilot-hosted-harness",FN="decopilot-hosted-harness-sandboxed",wJ="automations",WO="background-tools",pE="task-board-github-reads",nE="jira-push";var Xs1="9";function Qs1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Xs1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var Ys1=()=>{};import ms8 from"pg";async function Js1($,Z){let{databaseUrl:X,lockTimeoutMs:Q=ds8}=$,Y=$.log??((W)=>console.log(W)),G=new ms8.Client({connectionString:X});await G.connect();let J=Date.now(),K=!1;try{while(!K){if(K=(await G.query("SELECT pg_try_advisory_lock($1) AS locked",[Gs1.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-J>=Q)throw Error(`Timed out after ${Q}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await H$(is8)}let W=Date.now()-J;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await G.query("SELECT pg_advisory_unlock($1)",[Gs1.toString()])}catch{}await G.end().catch(()=>{})}}var Gs1=8314027461559302n,ds8=600000,is8=500;var Ks1=L(()=>{J4()});function ps8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Yn0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function Ws1(){let $=ps8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Yn0($,"--cpu-prof-dir")??process.cwd(),name:Yn0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Yn0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function Hs1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=hE();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),z70=setInterval(()=>void Z().catch(()=>{}),$),z70.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(z70)clearInterval(z70)}}var z70;var Fs1=()=>{};import*as ns8 from"bun:jsc";function Ns1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{ts8()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=os8()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var ts8,os8;var Us1=L(()=>{({startSamplingProfiler:ts8,samplingProfilerStackTraces:os8}=ns8)});function Bs1(){Ws1();let $=[Hs1(),Sn1(),Ns1()];return()=>{for(let Z of $)Z()}}var Os1=L(()=>{Sl0();Fs1();Us1()});var tE=v((Ls1)=>{Object.defineProperty(Ls1,"__esModule",{value:!0});Ls1.RepublishHeaders=Ls1.DirectMsgHeaders=Ls1.JsHeaders=Ls1.AdvisoryKind=void 0;Ls1.isOrderedPushConsumerOptions=rs8;Ls1.isPullConsumer=as8;Ls1.isPushConsumer=ss8;Ls1.isBoundPushConsumerOptions=es8;function rs8($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function as8($){return $.isPullConsumer()}function ss8($){return $.isPushConsumer()}function es8($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Ls1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};Ls1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};Ls1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Ls1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var QG=v((ws1)=>{Object.defineProperty(ws1,"__esModule",{value:!0});ws1.TD=ws1.TE=ws1.Empty=void 0;ws1.encode=We8;ws1.decode=He8;ws1.Empty=new Uint8Array(0);ws1.TE=new TextEncoder;ws1.TD=new TextDecoder;function Ke8(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function We8(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(ws1.TE.encode($[X]));if(Z.length===0)return ws1.Empty;if(Z.length===1)return Z[0];return Ke8(...Z)}function He8($){if(!$||$.length===0)return"";return ws1.TD.decode($)}});var YG=v((zs1)=>{Object.defineProperty(zs1,"__esModule",{value:!0});zs1.errors=zs1.PermissionViolationError=zs1.NoRespondersError=zs1.TimeoutError=zs1.RequestError=zs1.ProtocolError=zs1.ConnectionError=zs1.DrainingConnectionError=zs1.ClosedConnectionError=zs1.AuthorizationError=zs1.UserAuthenticationExpiredError=zs1.InvalidOperationError=zs1.InvalidArgumentError=zs1.InvalidSubjectError=void 0;class Jn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}zs1.InvalidSubjectError=Jn0;class P70 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new P70(`${$} ${Z}`,X)}}zs1.InvalidArgumentError=P70;class Kn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}zs1.InvalidOperationError=Kn0;class A70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new A70($);return null}}zs1.UserAuthenticationExpiredError=A70;class T70 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new T70($);return null}}zs1.AuthorizationError=T70;class Wn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}zs1.ClosedConnectionError=Wn0;class Hn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}zs1.DrainingConnectionError=Hn0;class Fn0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}zs1.ConnectionError=Fn0;class Nn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}zs1.ProtocolError=Nn0;class Un0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof R70}}zs1.RequestError=Un0;class Bn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}zs1.TimeoutError=Bn0;class R70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}zs1.NoRespondersError=R70;class I70 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new I70($,X,Q,Y)}}zs1.PermissionViolationError=I70;zs1.errors={AuthorizationError:T70,ClosedConnectionError:Wn0,ConnectionError:Fn0,DrainingConnectionError:Hn0,InvalidArgumentError:P70,InvalidOperationError:Kn0,InvalidSubjectError:Jn0,NoRespondersError:R70,PermissionViolationError:I70,ProtocolError:Nn0,RequestError:Un0,TimeoutError:Bn0,UserAuthenticationExpiredError:A70}});var l3=v((Is1)=>{Object.defineProperty(Is1,"__esModule",{value:!0});Is1.SimpleMutex=Is1.Perf=void 0;Is1.extend=qe8;Is1.render=Me8;Is1.timeout=Ve8;Is1.delay=ke8;Is1.deadline=Se8;Is1.deferred=Ln0;Is1.debugDeferred=Ce8;Is1.shuffle=_e8;Is1.collect=ve8;Is1.jitter=Rs1;Is1.backoff=xe8;Is1.nanos=fe8;Is1.millis=be8;Is1.randomToken=he8;var Ie8=QG(),On0=YG();function qe8($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function Me8($){return Ie8.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Ve8($,Z=!0){let X=Z?new On0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new On0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function ke8($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function Se8($,Z=1000){let X=Ln0(),Q=setTimeout(()=>{X.reject(new On0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function Ln0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function Ce8(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function _e8($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function ve8($){let Z=[];for await(let X of $)Z.push(X);return Z}class As1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}Is1.Perf=As1;class Ts1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Ln0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Is1.SimpleMutex=Ts1;function Rs1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function xe8($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return Rs1(X>Z?$[Z]:$[X])}}}function fe8($){return $*1e6}function be8($){return Math.floor($/1e6)}var ye8="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",NN=new Uint8Array(62);for(let $=0;$<62;$++)NN[$]=ye8.charCodeAt($);var ge8=218340105584896;function he8(){let $=Math.floor(Math.random()*ge8),Z=$%62,X=NN[Z];$=($-Z)/62,Z=$%62;let Q=NN[Z];$=($-Z)/62,Z=$%62;let Y=NN[Z];$=($-Z)/62,Z=$%62;let G=NN[Z];$=($-Z)/62,Z=$%62;let J=NN[Z];$=($-Z)/62,Z=$%62;let K=NN[Z];$=($-Z)/62,Z=$%62;let W=NN[Z];$=($-Z)/62;let H=NN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var vs1=v((Cs1)=>{Object.defineProperty(Cs1,"__esModule",{value:!0});Cs1.nuid=Cs1.NuidImpl=void 0;var Z04="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",HO=62,M70=12,ks1=10,Ms1=33,X04=333,Vs1=M70+ks1,wn0=new Uint8Array(HO);for(let $=0;$<HO;$++)wn0[$]=Z04.charCodeAt($);var q70=4294967296,Ss1=BigInt(HO)**BigInt(ks1),wp=Number(Ss1/(1n<<32n)),Dn0=Number(Ss1%(1n<<32n));function Q04($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Y04($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Q04($)}class En0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Vs1),this.cbuf=new Uint8Array(M70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(wp+1)),this.seqLo=Math.floor(Math.random()*q70);while($++<8&&this.seqHi===wp&&this.seqLo>=Dn0);if(this.seqHi===wp&&this.seqLo>=Dn0)this.seqLo=0;this.inc=Math.random()*(X04-Ms1)+Ms1|0}setPre(){Y04(this.cbuf);for(let $=0;$<M70;$++)this.buf[$]=wn0[this.cbuf[$]%HO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=Vs1-1;X>=M70;X--){let Q=Math.floor($/HO),G=($-Q*HO)*q70+Z,J=Math.floor(G/HO),K=G-J*HO;this.buf[X]=wn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=q70)this.seqLo-=q70,this.seqHi+=1;if(this.seqHi>wp||this.seqHi===wp&&this.seqLo>=Dn0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}Cs1.NuidImpl=En0;Cs1.nuid=new En0});var ys1=v((fs1)=>{Object.defineProperty(fs1,"__esModule",{value:!0});fs1.nuid=fs1.Nuid=void 0;var xs1=vs1();fs1.Nuid=xs1.NuidImpl;fs1.nuid=xs1.nuid});var k70=v((V70)=>{Object.defineProperty(V70,"__esModule",{value:!0});V70.nuid=V70.Nuid=void 0;var gs1=ys1();Object.defineProperty(V70,"Nuid",{enumerable:!0,get:function(){return gs1.Nuid}});Object.defineProperty(V70,"nuid",{enumerable:!0,get:function(){return gs1.nuid}})});var FO=v((hs1)=>{Object.defineProperty(hs1,"__esModule",{value:!0});hs1.DEFAULT_HOST=hs1.DEFAULT_PORT=hs1.Match=void 0;hs1.syncIterator=F04;hs1.createInbox=N04;var W04=k70(),H04=YG();hs1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function F04($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function N04($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw H04.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${W04.nuid.next()}`}hs1.DEFAULT_PORT=4222;hs1.DEFAULT_HOST="127.0.0.1"});var Ep=v((ms1)=>{Object.defineProperty(ms1,"__esModule",{value:!0});ms1.DataBuffer=void 0;var cs1=QG();class ls1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return cs1.TE.encode($)}static toAscii($){return cs1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}ms1.DataBuffer=ls1});var oE=v((ps1)=>{Object.defineProperty(ps1,"__esModule",{value:!0});ps1.LF=ps1.CR=ps1.CRLF=ps1.CR_LF_LEN=ps1.CR_LF=void 0;ps1.setTransportFactory=j04;ps1.defaultPort=z04;ps1.getUrlParseFn=P04;ps1.newTransport=A04;ps1.getResolveFn=T04;ps1.protoLen=is1;ps1.extractProtocolMessage=R04;var D04=QG(),w04=FO(),E04=Ep(),GG;function j04($){GG=$}function z04(){return GG!==void 0&&GG.defaultPort!==void 0?GG.defaultPort:w04.DEFAULT_PORT}function P04(){return GG!==void 0&&GG.urlParseFn?GG.urlParseFn:void 0}function A04(){if(!GG||typeof GG.factory!=="function")throw Error("transport fn is not set");return GG.factory()}function T04(){return GG!==void 0&&GG.dnsResolveFn?GG.dnsResolveFn:void 0}ps1.CR_LF=`\r
1492
+ `);Q=G.pop()??"";for(let J of G){let K=Bun.stripANSI(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;JO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}}catch{}if(Q.trim()){let G=Bun.stripANSI(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)JO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function Cs8($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await Lp(Number(Y)+1):await Lp(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await D70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)mE({name:D.name,status:"ready",port:D.port});Bp();let F=Ss8(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)rp0(U.stdout),rp0(U.stderr);Op(G),mE({name:"Vite",status:"ready",port:Number(Y)}),mE({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(U.kill(D),await U.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (PZ0(),zZ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var sp0=L(()=>{ip0();dE();op0()});var j70;var ep0=L(()=>{j70={name:"decocms",version:"4.302.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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"}}});import{Box as vs8,Text as pa1}from"ink";import{jsx as xs8,jsxs as na1}from"react/jsx-runtime";function ta1({version:$}){return na1(vs8,{flexDirection:"column",marginTop:1,children:[dZ0.map((Z,X)=>xs8(pa1,{color:iZ0[X],children:Z},X)),na1(pa1,{dimColor:!0,children:[" v",$]})]})}var oa1=L(()=>{$p()});import{Box as iE,Text as KO}from"ink";import{Spinner as fs8}from"@inkjs/ui";import{jsx as XG,jsxs as jy}from"react/jsx-runtime";function ra1({status:$}){if($==="pending")return XG(fs8,{label:""});return XG(KO,{color:"green",children:"\u2713"})}function bs8($){return`${$.name}: ${$.port||"...."}`}function aa1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return jy(iE,{flexDirection:"column",paddingBottom:1,children:[XG(ta1,{version:j70.version}),XG(iE,{marginBottom:1,children:XG(KO,{dimColor:!0,children:"\u2500".repeat(80)})}),XG(iE,{children:jy(KO,{dimColor:!0,children:["Home: ",X]})}),jy(iE,{gap:2,children:[$.map((Y)=>jy(iE,{gap:1,children:[XG(KO,{children:bs8(Y)}),XG(ra1,{status:Y.status})]},Y.name)),jy(iE,{gap:1,children:[XG(KO,{children:"Migrations"}),XG(ra1,{status:Z})]})]}),XG(iE,{children:Q?jy(KO,{children:["Open in browser: ",XG(KO,{color:"cyan",children:Q})]}):XG(KO,{dimColor:!0,children:"Starting..."})})]})}var sa1=L(()=>{ep0();oa1()});import{Box as ys8,Text as Dp}from"ink";import{jsx as $n0,jsxs as Zn0}from"react/jsx-runtime";function gs8($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function ea1({logs:$}){return $n0(ys8,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return $n0(Dp,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Zn0(Dp,{children:[Zn0(Dp,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),$n0(Dp,{color:gs8(Z.status),children:Z.status}),Zn0(Dp,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var $s1=()=>{};var Xn0={};Z0(Xn0,{App:()=>cs8});import{Box as hs8}from"ink";import{useSyncExternalStore as us8}from"react";import{jsx as Zs1,jsxs as ls8}from"react/jsx-runtime";function cs8({home:$}){let Z=us8(tp0,np0);return ls8(hs8,{flexDirection:"column",children:[Zs1(aa1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Zs1(ea1,{logs:Z.logs})]})}var Qn0=L(()=>{sa1();$s1();dE()});var c3="thread-gate",HN="decopilot-hosted-harness",FN="decopilot-hosted-harness-sandboxed",wJ="automations",WO="background-tools",pE="task-board-github-reads",nE="jira-push";var Xs1="9";function Qs1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Xs1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var Ys1=()=>{};import ms8 from"pg";async function Js1($,Z){let{databaseUrl:X,lockTimeoutMs:Q=ds8}=$,Y=$.log??((W)=>console.log(W)),G=new ms8.Client({connectionString:X});await G.connect();let J=Date.now(),K=!1;try{while(!K){if(K=(await G.query("SELECT pg_try_advisory_lock($1) AS locked",[Gs1.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-J>=Q)throw Error(`Timed out after ${Q}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await H$(is8)}let W=Date.now()-J;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await G.query("SELECT pg_advisory_unlock($1)",[Gs1.toString()])}catch{}await G.end().catch(()=>{})}}var Gs1=8314027461559302n,ds8=600000,is8=500;var Ks1=L(()=>{J4()});function ps8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Yn0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function Ws1(){let $=ps8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Yn0($,"--cpu-prof-dir")??process.cwd(),name:Yn0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Yn0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function Hs1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=hE();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),z70=setInterval(()=>void Z().catch(()=>{}),$),z70.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(z70)clearInterval(z70)}}var z70;var Fs1=()=>{};import*as ns8 from"bun:jsc";function Ns1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{ts8()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=os8()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var ts8,os8;var Us1=L(()=>{({startSamplingProfiler:ts8,samplingProfilerStackTraces:os8}=ns8)});function Bs1(){Ws1();let $=[Hs1(),Sn1(),Ns1()];return()=>{for(let Z of $)Z()}}var Os1=L(()=>{Sl0();Fs1();Us1()});var tE=v((Ls1)=>{Object.defineProperty(Ls1,"__esModule",{value:!0});Ls1.RepublishHeaders=Ls1.DirectMsgHeaders=Ls1.JsHeaders=Ls1.AdvisoryKind=void 0;Ls1.isOrderedPushConsumerOptions=rs8;Ls1.isPullConsumer=as8;Ls1.isPushConsumer=ss8;Ls1.isBoundPushConsumerOptions=es8;function rs8($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function as8($){return $.isPullConsumer()}function ss8($){return $.isPushConsumer()}function es8($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Ls1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};Ls1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};Ls1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Ls1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var QG=v((ws1)=>{Object.defineProperty(ws1,"__esModule",{value:!0});ws1.TD=ws1.TE=ws1.Empty=void 0;ws1.encode=We8;ws1.decode=He8;ws1.Empty=new Uint8Array(0);ws1.TE=new TextEncoder;ws1.TD=new TextDecoder;function Ke8(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function We8(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(ws1.TE.encode($[X]));if(Z.length===0)return ws1.Empty;if(Z.length===1)return Z[0];return Ke8(...Z)}function He8($){if(!$||$.length===0)return"";return ws1.TD.decode($)}});var YG=v((zs1)=>{Object.defineProperty(zs1,"__esModule",{value:!0});zs1.errors=zs1.PermissionViolationError=zs1.NoRespondersError=zs1.TimeoutError=zs1.RequestError=zs1.ProtocolError=zs1.ConnectionError=zs1.DrainingConnectionError=zs1.ClosedConnectionError=zs1.AuthorizationError=zs1.UserAuthenticationExpiredError=zs1.InvalidOperationError=zs1.InvalidArgumentError=zs1.InvalidSubjectError=void 0;class Jn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}zs1.InvalidSubjectError=Jn0;class P70 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new P70(`${$} ${Z}`,X)}}zs1.InvalidArgumentError=P70;class Kn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}zs1.InvalidOperationError=Kn0;class A70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new A70($);return null}}zs1.UserAuthenticationExpiredError=A70;class T70 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new T70($);return null}}zs1.AuthorizationError=T70;class Wn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}zs1.ClosedConnectionError=Wn0;class Hn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}zs1.DrainingConnectionError=Hn0;class Fn0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}zs1.ConnectionError=Fn0;class Nn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}zs1.ProtocolError=Nn0;class Un0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof R70}}zs1.RequestError=Un0;class Bn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}zs1.TimeoutError=Bn0;class R70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}zs1.NoRespondersError=R70;class I70 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new I70($,X,Q,Y)}}zs1.PermissionViolationError=I70;zs1.errors={AuthorizationError:T70,ClosedConnectionError:Wn0,ConnectionError:Fn0,DrainingConnectionError:Hn0,InvalidArgumentError:P70,InvalidOperationError:Kn0,InvalidSubjectError:Jn0,NoRespondersError:R70,PermissionViolationError:I70,ProtocolError:Nn0,RequestError:Un0,TimeoutError:Bn0,UserAuthenticationExpiredError:A70}});var l3=v((Is1)=>{Object.defineProperty(Is1,"__esModule",{value:!0});Is1.SimpleMutex=Is1.Perf=void 0;Is1.extend=qe8;Is1.render=Me8;Is1.timeout=Ve8;Is1.delay=ke8;Is1.deadline=Se8;Is1.deferred=Ln0;Is1.debugDeferred=Ce8;Is1.shuffle=_e8;Is1.collect=ve8;Is1.jitter=Rs1;Is1.backoff=xe8;Is1.nanos=fe8;Is1.millis=be8;Is1.randomToken=he8;var Ie8=QG(),On0=YG();function qe8($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function Me8($){return Ie8.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Ve8($,Z=!0){let X=Z?new On0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new On0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function ke8($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function Se8($,Z=1000){let X=Ln0(),Q=setTimeout(()=>{X.reject(new On0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function Ln0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function Ce8(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function _e8($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function ve8($){let Z=[];for await(let X of $)Z.push(X);return Z}class As1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}Is1.Perf=As1;class Ts1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Ln0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Is1.SimpleMutex=Ts1;function Rs1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function xe8($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return Rs1(X>Z?$[Z]:$[X])}}}function fe8($){return $*1e6}function be8($){return Math.floor($/1e6)}var ye8="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",NN=new Uint8Array(62);for(let $=0;$<62;$++)NN[$]=ye8.charCodeAt($);var ge8=218340105584896;function he8(){let $=Math.floor(Math.random()*ge8),Z=$%62,X=NN[Z];$=($-Z)/62,Z=$%62;let Q=NN[Z];$=($-Z)/62,Z=$%62;let Y=NN[Z];$=($-Z)/62,Z=$%62;let G=NN[Z];$=($-Z)/62,Z=$%62;let J=NN[Z];$=($-Z)/62,Z=$%62;let K=NN[Z];$=($-Z)/62,Z=$%62;let W=NN[Z];$=($-Z)/62;let H=NN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var vs1=v((Cs1)=>{Object.defineProperty(Cs1,"__esModule",{value:!0});Cs1.nuid=Cs1.NuidImpl=void 0;var Z04="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",HO=62,M70=12,ks1=10,Ms1=33,X04=333,Vs1=M70+ks1,wn0=new Uint8Array(HO);for(let $=0;$<HO;$++)wn0[$]=Z04.charCodeAt($);var q70=4294967296,Ss1=BigInt(HO)**BigInt(ks1),wp=Number(Ss1/(1n<<32n)),Dn0=Number(Ss1%(1n<<32n));function Q04($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Y04($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Q04($)}class En0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Vs1),this.cbuf=new Uint8Array(M70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(wp+1)),this.seqLo=Math.floor(Math.random()*q70);while($++<8&&this.seqHi===wp&&this.seqLo>=Dn0);if(this.seqHi===wp&&this.seqLo>=Dn0)this.seqLo=0;this.inc=Math.random()*(X04-Ms1)+Ms1|0}setPre(){Y04(this.cbuf);for(let $=0;$<M70;$++)this.buf[$]=wn0[this.cbuf[$]%HO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=Vs1-1;X>=M70;X--){let Q=Math.floor($/HO),G=($-Q*HO)*q70+Z,J=Math.floor(G/HO),K=G-J*HO;this.buf[X]=wn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=q70)this.seqLo-=q70,this.seqHi+=1;if(this.seqHi>wp||this.seqHi===wp&&this.seqLo>=Dn0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}Cs1.NuidImpl=En0;Cs1.nuid=new En0});var ys1=v((fs1)=>{Object.defineProperty(fs1,"__esModule",{value:!0});fs1.nuid=fs1.Nuid=void 0;var xs1=vs1();fs1.Nuid=xs1.NuidImpl;fs1.nuid=xs1.nuid});var k70=v((V70)=>{Object.defineProperty(V70,"__esModule",{value:!0});V70.nuid=V70.Nuid=void 0;var gs1=ys1();Object.defineProperty(V70,"Nuid",{enumerable:!0,get:function(){return gs1.Nuid}});Object.defineProperty(V70,"nuid",{enumerable:!0,get:function(){return gs1.nuid}})});var FO=v((hs1)=>{Object.defineProperty(hs1,"__esModule",{value:!0});hs1.DEFAULT_HOST=hs1.DEFAULT_PORT=hs1.Match=void 0;hs1.syncIterator=F04;hs1.createInbox=N04;var W04=k70(),H04=YG();hs1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function F04($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function N04($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw H04.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${W04.nuid.next()}`}hs1.DEFAULT_PORT=4222;hs1.DEFAULT_HOST="127.0.0.1"});var Ep=v((ms1)=>{Object.defineProperty(ms1,"__esModule",{value:!0});ms1.DataBuffer=void 0;var cs1=QG();class ls1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return cs1.TE.encode($)}static toAscii($){return cs1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}ms1.DataBuffer=ls1});var oE=v((ps1)=>{Object.defineProperty(ps1,"__esModule",{value:!0});ps1.LF=ps1.CR=ps1.CRLF=ps1.CR_LF_LEN=ps1.CR_LF=void 0;ps1.setTransportFactory=j04;ps1.defaultPort=z04;ps1.getUrlParseFn=P04;ps1.newTransport=A04;ps1.getResolveFn=T04;ps1.protoLen=is1;ps1.extractProtocolMessage=R04;var D04=QG(),w04=FO(),E04=Ep(),GG;function j04($){GG=$}function z04(){return GG!==void 0&&GG.defaultPort!==void 0?GG.defaultPort:w04.DEFAULT_PORT}function P04(){return GG!==void 0&&GG.urlParseFn?GG.urlParseFn:void 0}function A04(){if(!GG||typeof GG.factory!=="function")throw Error("transport fn is not set");return GG.factory()}function T04(){return GG!==void 0&&GG.dnsResolveFn?GG.dnsResolveFn:void 0}ps1.CR_LF=`\r
1493
1493
  `;ps1.CR_LF_LEN=ps1.CR_LF.length;ps1.CRLF=E04.DataBuffer.fromAscii(ps1.CR_LF);ps1.CR=new Uint8Array(ps1.CRLF)[0];ps1.LF=new Uint8Array(ps1.CRLF)[1];function is1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===ps1.CR&&$[X]===ps1.LF)return X+1}return 0}function R04($){let Z=is1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return D04.TD.decode(Q)}return""}});var Tn0=v(($e1)=>{Object.defineProperty($e1,"__esModule",{value:!0});$e1.ipV4=as1;$e1.isIP=f04;$e1.parseIP=ss1;var jp=4,rE=16,S70=48,rs1=57,ts1=65,v04=70,os1=97,x04=102,An0=16777215;function as1($,Z,X,Q){let Y=new Uint8Array(rE);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,K)=>{Y[K]=J}),Y[12]=$,Y[13]=Z,Y[14]=X,Y[15]=Q,Y}function f04($){return ss1($)!==void 0}function ss1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return es1($);case":":return b04($)}return}function es1($){let Z=new Uint8Array(jp);for(let X=0;X<jp;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=y04($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return as1(Z[0],Z[1],Z[2],Z[3])}function b04($){let Z=new Uint8Array(rE),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<rE){let{n:Y,c:G,ok:J}=g04($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=rE-jp)return;if(Q+jp>rE)return;let K=es1($);if(K===void 0)return;Z[Q]=K[12],Z[Q+1]=K[13],Z[Q+2]=K[14],Z[Q+3]=K[15],$="",Q+=jp;break}if(Z[Q]=Y>>8,Z[Q+1]=Y,Q+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(X>=0)return;if(X=Q,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(Q<rE){if(X<0)return;let Y=rE-Q;for(let G=Q-1;G>=X;G--)Z[G+Y]=Z[G];for(let G=X+Y-1;G>=X;G--)Z[G]=0}else if(X>=0)return;return Z}function y04($){let Z=0,X=0;for(Z=0;Z<$.length&&S70<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=rs1;Z++)if(X=X*10+($.charCodeAt(Z)-S70),X>=An0)return{n:An0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function g04($){let Z=0,X=0;for(X=0;X<$.length;X++){if(S70<=$.charCodeAt(X)&&$.charCodeAt(X)<=rs1)Z*=16,Z+=$.charCodeAt(X)-S70;else if(os1<=$.charCodeAt(X)&&$.charCodeAt(X)<=x04)Z*=16,Z+=$.charCodeAt(X)-os1+10;else if(ts1<=$.charCodeAt(X)&&$.charCodeAt(X)<=v04)Z*=16,Z+=$.charCodeAt(X)-ts1+10;else break;if(Z>=An0)return{n:0,c:X,ok:!1}}if(X===0)return{n:0,c:X,ok:!1};return{n:Z,c:X,ok:!0}}});var kn0=v((Xe1)=>{Object.defineProperty(Xe1,"__esModule",{value:!0});Xe1.Servers=Xe1.ServerImpl=void 0;Xe1.isIPV4OrHostname=Ze1;Xe1.hostPort=Vn0;var Rn0=oE(),In0=l3(),qn0=Tn0(),l04=FO(),m04=YG();function Ze1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Mn0($){return!Ze1($)}function d04($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function Vn0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=d04($),Mn0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Mn0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):l04.DEFAULT_PORT,Y=new URL(`${X===80?"https":"http"}://${$}`);Y.port=`${X}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:X}}class zy{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=Vn0($);this.listen=X.listen,this.hostname=X.hostname,this.port=X.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,qn0.isIP)(this.hostname))return[this];else{let X=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${X.join(",")}`);for(let Q of X){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${Mn0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new zy(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,In0.shuffle)(Z);return this.resolves=Z,Z}}Xe1.ServerImpl=zy;class C70{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw m04.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Rn0.getUrlParseFn)(),X=new Map;for(let Y of this.servers)X.set(Y.listen,Y);let Q=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=Vn0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new zy(Y))}if(this.randomize)(0,In0.shuffle)(Q);if(this.servers=Q,this.currentServer===void 0||!Q.includes(this.currentServer))this.currentServer=Q[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,qn0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let X=(0,Rn0.getUrlParseFn)();$=X?X($):$;let Q=new zy($,Z);if((0,qn0.isIP)(Q.hostname))Q.tlsName=this.tlsName;this.servers.push(Q)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return C70.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return C70.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let X=[],Q=[],Y=(0,Rn0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new zy(K,!0);G.set(K,W)});let J=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&G.get(H)===void 0)J.push(W);G.delete(H)}),J.reverse(),J.forEach((K)=>{let W=this.servers.splice(K,1);Q=Q.concat(W[0].listen)}),G.forEach((K,W)=>{this.servers.push(K),X.push(W)}),this.randomize&&X.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,In0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}Xe1.Servers=C70});var _70=v((Je1)=>{Object.defineProperty(Je1,"__esModule",{value:!0});Je1.QueuedIteratorImpl=void 0;var Sn0=l3(),Ye1=YG();class Ge1{inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,Sn0.deferred)(),this.yields=[],this.iterClosed=(0,Sn0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(X){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new Ye1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new Ye1.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let Q=$[Z];try{Q()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let X=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-X:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,Sn0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}Je1.QueuedIteratorImpl=Ge1});var Cn0=v((Fe1)=>{Object.defineProperty(Fe1,"__esModule",{value:!0});Fe1.MuxSubscription=void 0;var t04=FO(),We1=YG();class He1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,t04.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((X)=>{X.resolver(Z,{})}),!0;if(Z.operation==="publish"){let X=this.all().find((Q)=>{return Q.requestSubject===Z.subject});if(X)return X.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let X=this.getToken(Z);if(X){let Q=this.get(X);if(Q){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new We1.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new We1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}Fe1.MuxSubscription=He1});var _n0=v((Be1)=>{Object.defineProperty(Be1,"__esModule",{value:!0});Be1.Heartbeat=void 0;var o04=l3();class Ue1{ph;interval;maxOut;timer;pendings;constructor($,Z,X){this.ph=$,this.interval=Z,this.maxOut=X,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,o04.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}Be1.Heartbeat=Ue1});var fn0=v((Ee1)=>{Object.defineProperty(Ee1,"__esModule",{value:!0});Ee1.DenoBuffer=Ee1.MAX_SIZE=Ee1.AssertionError=void 0;Ee1.assert=De1;Ee1.concat=we1;Ee1.append=a04;Ee1.readAll=s04;Ee1.writeAll=e04;var r04=QG();class vn0 extends Error{constructor($){super($);this.name="AssertionError"}}Ee1.AssertionError=vn0;function De1($,Z="Assertion failed."){if(!$)throw new vn0(Z)}var Le1=32768;Ee1.MAX_SIZE=4294967294;function v70($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function we1($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let X=new Uint8Array($.length+Z.length);return X.set($,0),X.set(Z,$.length),X}function a04($,Z){return we1($,Uint8Array.of(Z))}class xn0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){De1($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=v70(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(r04.TE.encode($))}write($){let Z=this._grow($.byteLength);return v70($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let X=this._tryGrowByReslice($);if(X>=0)return X;let Q=this.capacity;if($<=Math.floor(Q/2)-Z)v70(this._buf.subarray(this._off),this._buf);else if(Q+$>Ee1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,Ee1.MAX_SIZE));v70(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,Ee1.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,X=new Uint8Array(Le1);while(!0){let Q=this.capacity-this.length<Le1,Y=Q?X:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(Q)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}Ee1.DenoBuffer=xn0;function s04($){let Z=new xn0;return Z.readFrom($),Z.bytes()}function e04($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var gn0=v((Te1)=>{Object.defineProperty(Te1,"__esModule",{value:!0});Te1.cc=Te1.State=Te1.Parser=Te1.Kind=void 0;Te1.describe=J14;var bn0=fn0(),yn0=QG();Te1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function J14($){let Z,X="";switch($.kind){case Te1.Kind.MSG:Z="MSG";break;case Te1.Kind.OK:Z="OK";break;case Te1.Kind.ERR:Z="ERR",X=yn0.TD.decode($.data);break;case Te1.Kind.PING:Z="PING";break;case Te1.Kind.PONG:Z="PONG";break;case Te1.Kind.INFO:Z="INFO",X=yn0.TD.decode($.data)}return`${Z}: ${X}`}function ze1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var Pe1=48,K14=57,Py=67108864;class Ae1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=Te1.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let X=$[Z];switch(this.state){case Te1.State.OP_START:switch(X){case Te1.cc.M:case Te1.cc.m:this.state=Te1.State.OP_M,this.hdr=-1,this.ma=ze1();break;case Te1.cc.H:case Te1.cc.h:this.state=Te1.State.OP_H,this.hdr=0,this.ma=ze1();break;case Te1.cc.P:case Te1.cc.p:this.state=Te1.State.OP_P;break;case Te1.cc.PLUS:this.state=Te1.State.OP_PLUS;break;case Te1.cc.MINUS:this.state=Te1.State.OP_MINUS;break;case Te1.cc.I:case Te1.cc.i:this.state=Te1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_H:switch(X){case Te1.cc.M:case Te1.cc.m:this.state=Te1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_M:switch(X){case Te1.cc.S:case Te1.cc.s:this.state=Te1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_MS:switch(X){case Te1.cc.G:case Te1.cc.g:this.state=Te1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_MSG:switch(X){case Te1.cc.SPACE:case Te1.cc.TAB:this.state=Te1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_MSG_SPC:switch(X){case Te1.cc.SPACE:case Te1.cc.TAB:continue;default:this.state=Te1.State.MSG_ARG,this.as=Z}break;case Te1.State.MSG_ARG:switch(X){case Te1.cc.CR:this.drop=1;break;case Te1.cc.NL:{let Q=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(Q),this.drop=0,this.as=Z+1,this.state=Te1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case Te1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:Te1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=Te1.State.MSG_END}else{let Q=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<Q)Q=Y;if(Q>0)this.msgBuf.write($.subarray(Z,Z+Q)),Z=Z+Q-1;else this.msgBuf.writeByte(X)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:Te1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=Te1.State.MSG_END;break;case Te1.State.MSG_END:switch(X){case Te1.cc.NL:this.drop=0,this.as=Z+1,this.state=Te1.State.OP_START;break;default:continue}break;case Te1.State.OP_PLUS:switch(X){case Te1.cc.O:case Te1.cc.o:this.state=Te1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_PLUS_O:switch(X){case Te1.cc.K:case Te1.cc.k:this.state=Te1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_PLUS_OK:switch(X){case Te1.cc.NL:this.dispatcher.push({kind:Te1.Kind.OK}),this.drop=0,this.state=Te1.State.OP_START;break}break;case Te1.State.OP_MINUS:switch(X){case Te1.cc.E:case Te1.cc.e:this.state=Te1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_MINUS_E:switch(X){case Te1.cc.R:case Te1.cc.r:this.state=Te1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_MINUS_ER:switch(X){case Te1.cc.R:case Te1.cc.r:this.state=Te1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_MINUS_ERR:switch(X){case Te1.cc.SPACE:case Te1.cc.TAB:this.state=Te1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_MINUS_ERR_SPC:switch(X){case Te1.cc.SPACE:case Te1.cc.TAB:continue;default:this.state=Te1.State.MINUS_ERR_ARG,this.as=Z}break;case Te1.State.MINUS_ERR_ARG:switch(X){case Te1.cc.CR:this.drop=1;break;case Te1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:Te1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=Te1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case Te1.State.OP_P:switch(X){case Te1.cc.I:case Te1.cc.i:this.state=Te1.State.OP_PI;break;case Te1.cc.O:case Te1.cc.o:this.state=Te1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_PO:switch(X){case Te1.cc.N:case Te1.cc.n:this.state=Te1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_PON:switch(X){case Te1.cc.G:case Te1.cc.g:this.state=Te1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_PONG:switch(X){case Te1.cc.NL:this.dispatcher.push({kind:Te1.Kind.PONG}),this.drop=0,this.state=Te1.State.OP_START;break}break;case Te1.State.OP_PI:switch(X){case Te1.cc.N:case Te1.cc.n:this.state=Te1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_PIN:switch(X){case Te1.cc.G:case Te1.cc.g:this.state=Te1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_PING:switch(X){case Te1.cc.NL:this.dispatcher.push({kind:Te1.Kind.PING}),this.drop=0,this.state=Te1.State.OP_START;break}break;case Te1.State.OP_I:switch(X){case Te1.cc.N:case Te1.cc.n:this.state=Te1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_IN:switch(X){case Te1.cc.F:case Te1.cc.f:this.state=Te1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_INF:switch(X){case Te1.cc.O:case Te1.cc.o:this.state=Te1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_INFO:switch(X){case Te1.cc.SPACE:case Te1.cc.TAB:this.state=Te1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case Te1.State.OP_INFO_SPC:switch(X){case Te1.cc.SPACE:case Te1.cc.TAB:continue;default:this.state=Te1.State.INFO_ARG,this.as=Z}break;case Te1.State.INFO_ARG:switch(X){case Te1.cc.CR:this.drop=1;break;case Te1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:Te1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=Te1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===Te1.State.MSG_ARG||this.state===Te1.State.MINUS_ERR_ARG||this.state===Te1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new bn0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===Te1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new bn0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,X=new Uint8Array($+Z);if(X.set(this.ma.subject),this.ma.reply)X.set(this.ma.reply,$);if(this.argBuf=new bn0.DenoBuffer(X),this.ma.subject=X.subarray(0,$),this.ma.reply)this.ma.reply=X.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case Te1.cc.SPACE:case Te1.cc.TAB:case Te1.cc.CR:case Te1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],Py);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],Py);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${yn0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case Te1.cc.SPACE:case Te1.cc.TAB:case Te1.cc.CR:case Te1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],Py),this.ma.size=this.protoParseInt(Z[3],Py);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],Py),this.ma.size=this.protoParseInt(Z[4],Py);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let X=0;for(let Q=0;Q<$.length;Q++){if($[Q]<Pe1||$[Q]>K14)return-1;X=X*10+($[Q]-Pe1)}return Z!==void 0&&X>Z?-1:X}}Te1.Parser=Ae1;Te1.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};Te1.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var b70=v((Ie1)=>{Object.defineProperty(Ie1,"__esModule",{value:!0});Ie1.MsgHdrsImpl=void 0;Ie1.canonicalMIMEHeaderKey=un0;Ie1.headers=F14;var Re1=QG(),m3=FO(),f70=YG();function un0($){let F=!0,N=Array($.length);for(let U=0;U<$.length;U++){let B=$.charCodeAt(U);if(B===58||B<33||B>126)throw f70.InvalidArgumentError.format("header",`'${$[U]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;N[U]=B,F=B==45}return String.fromCharCode(...N)}function F14($=0,Z=""){if($===0&&Z!=="")throw f70.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw f70.InvalidArgumentError.format("description","is required");return new Ay($,Z)}var hn0="NATS/1.0";class Ay{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,X]of this.headers){let Q=$.values(Z);if(X.length!==Q.length)return!1;let Y=[...X].sort(),G=[...Q].sort();for(let J=0;J<Y.length;J++)if(Y[J]!==G[J])return!1}return!0}return!1}static decode($){let Z=new Ay,Q=Re1.TD.decode($).split(`\r
1494
1494
  `),Y=Q[0];if(Y!==hn0){let G=Y.replace(hn0,"").trim();if(G.length>0){if(Z._code=parseInt(G,10),isNaN(Z._code))Z._code=0;let J=Z._code.toString();G=G.replace(J,""),Z._description=G.trim()}}if(Q.length>=1)Q.slice(1).map((G)=>{if(G){let J=G.indexOf(":");if(J>-1){let K=G.slice(0,J),W=G.slice(J+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=hn0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,X]of this.headers)for(let Q=0;Q<X.length;Q++)$=`${$}\r
1495
1495
  ${Z}: ${X[Q]}`;return`${$}\r
@@ -2744,7 +2744,7 @@ Guidelines:
2744
2744
  - Include file paths, function names, and specific code locations discovered during exploration.
2745
2745
  - List concrete implementation steps in order.
2746
2746
  - Note any risks, dependencies, or trade-offs.`,CA0=m$({description:wi4,inputSchema:Q0(Li4),outputSchema:Q0(Di4)})});function LU($){return`studio-storage://${$}`}function ba($){if($.startsWith("studio-storage://"))return $.slice(17);if($.startsWith("mesh-storage://"))return $.slice(15);return null}function DZ1(){return/(?:studio|mesh)-storage:\/\/([^\s"'<>[\]]+)/g}var _A0=()=>{};import{lookup as Ei4}from"dns/promises";import{z as Pv}from"zod";function vA0($){if($>hS$){let Z=($/1048576).toFixed(1),X=hS$/1048576;throw Error(`Reference image too large: ${Z} MB (max ${X} MB). Use a smaller image.`)}}function Pi4($,Z){let X;try{X=new URL($)}catch{throw Error("Invalid image URL")}if(X.protocol!=="https:"&&!(Z&&X.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let Q of zi4)if(Q.test(X.hostname))throw Error("Image URL must not point to a private network address")}function Ai4($){let Z=$.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);if(Z){let Q=Number(Z[1]),Y=Number(Z[2]);if(Q===127||Q===10||Q===0)return!0;if(Q===172&&Y>=16&&Y<=31)return!0;if(Q===192&&Y===168)return!0;if(Q===169&&Y===254)return!0;return!1}let X=$.toLowerCase();return X==="::1"||X.startsWith("::ffff:")||X.startsWith("fc")||X.startsWith("fd")||X.startsWith("fe80")}async function Ti4($,Z=async(X)=>(await Ei4(X,{all:!0})).map((Q)=>Q.address)){let X=new URL($).hostname;if(/^\d+\.\d+\.\d+\.\d+$/.test(X)||X.startsWith("[")&&X.endsWith("]"))return;let Y;try{Y=await Z(X)}catch{throw Error("Image URL must not point to a private network address")}if(Y.length===0||Y.some(Ai4))throw Error("Image URL must not point to a private network address")}async function lS$($,Z){if(!Z?.getBytes)throw Error("Object storage read is not available");if(Z.head){let{size:Q}=await Z.head($);vA0(Q)}let X=await Z.getBytes($);return vA0(X.byteLength),X}async function Ri4($,Z){let X=ba($);if(X!==null)return lS$(X,Z.objectStorage);let Q=$.match(ji4);if(Q)return lS$(Q[1],Z.objectStorage);if($.startsWith("data:")){let W=$.match(/^data:[^;]+;base64,(.+)$/s);if(!W)throw Error("Invalid data: URI");let H=Buffer.from(W[1],"base64");return vA0(H.byteLength),H}Pi4($,Z.allowHttpExternalUrls===!0),await Ti4($);let Y=AbortSignal.timeout(uS$),G=Z.abortSignal?AbortSignal.any([Z.abortSignal,Y]):Y,J;try{J=await fetch($,{signal:G})}catch(W){if(W instanceof Error&&W.name==="TimeoutError")throw Error(`Fetching image from ${$} timed out after ${uS$}ms`);throw W}if(!J.ok)throw Error(`Failed to fetch image from ${$}: ${J.status}`);let K=new Uint8Array(await J.arrayBuffer());return vA0(K.byteLength),K}async function wZ1($,Z){let{provider:X,imageModelInfo:Q,objectStorage:Y}=Z,G=X.aiSdk.imageModel(Q.id),J=$.referenceImages&&$.referenceImages.length>0,K=J?await Promise.all($.referenceImages.map((D)=>{let w=D.uri??D.url;if(!w)throw Error("Reference image missing uri");return Ri4(w,Z)})):[],W=J?{text:$.prompt,images:K}:$.prompt,H=AbortSignal.timeout(cS$),F=Z.abortSignal?AbortSignal.any([Z.abortSignal,H]):H,N;try{N=await YK0({model:G,prompt:W,n:$.n??1,...$.aspectRatio?{aspectRatio:$.aspectRatio}:{},abortSignal:F})}catch(D){if(H.aborted&&!Z.abortSignal?.aborted)throw Error(`Image generation timed out after ${cS$}ms`);throw D}if(!Y)throw Error("Object storage is unavailable; cannot persist the generated image.");let U=$.n??1,B=N.images.length>U?N.images.slice(-U):N.images;return{success:!0,images:await Promise.all(B.map(async(D)=>{let w=D.mediaType??"image/png",E=w.split("/")[1]??"png",j=`generated-images/${crypto.randomUUID()}.${E}`,z=Uint8Array.from(atob(D.base64),(A)=>A.charCodeAt(0));return await Y.put(j,z,{contentType:w}),{uri:LU(j),mediaType:w}})),prompt:$.prompt,model:Q.id,usage:{inputTokens:N.usage.inputTokens??0,outputTokens:N.usage.outputTokens??0},usedReferenceImages:J?$.referenceImages.length:0}}function xA0($,Z){return m$({description:"Generate an image from a text description, optionally using reference images. Use this when the user asks you to create, generate, draw, or design an image. If the user has attached images and wants to modify or use them as a reference, pass them as referenceImages. "+"The image is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:Q0(ya),execute:async(X,Q)=>{let Y=performance.now();try{return await wZ1(X,Z)}finally{$.write({type:"data-tool-metadata",id:Q.toolCallId,data:{latencyMs:performance.now()-Y}})}}})}var ji4,hS$=20971520,uS$=45000,cS$=120000,ya,zi4;var ga=L(()=>{p4();p4();_A0();ji4=/\/api\/[^/]+\/files\/([^?#]+)/,ya=Pv.object({prompt:Pv.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:Pv.array(Pv.object({uri:Pv.string().describe("URI of the reference image (e.g. studio-storage://generated-images/uuid.png).")})).optional().describe("Reference images to use as input for image-to-image generation. Pass the URI of any image from the conversation (uploaded files, previously generated images, etc.) when the user wants to modify, transform, or use an existing image as a starting point."),aspectRatio:Pv.enum(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]).optional().describe("Aspect ratio for the generated image. Defaults to 1:1."),n:Pv.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),zi4=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[f[cd]/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function mS$($,Z){return xA0($,{provider:Z.provider,imageModelInfo:Z.imageModelInfo,objectStorage:Z.objectStorage,allowHttpExternalUrls:Z.allowHttpExternalUrls})}var dS$=L(()=>{ga()});import{z as Ii4}from"zod";function iS$($){return{background:!0,status:"started",jobId:$,note:qi4}}function Vi4($){return!!$&&typeof $==="object"&&$.status==="started"&&$.background===!0}function ha($,Z,X,Q,Y){if(!Q)return X;let G=X.execute,J=Q0(Z.extend(Mi4)),W=G.constructor.name==="AsyncGeneratorFunction"?async function*(F,N){let{background:U,...B}=F,O=async function*(){let{jobId:z}=await Q.start({toolName:$,input:B,toolCallId:N.toolCallId});yield iS$(z)};if(U){yield*O();return}let D=Y?.(N.toolCallId);if(!D){yield*G(B,N);return}let w=new AbortController,E=()=>w.abort();N.abortSignal?.addEventListener("abort",E,{once:!0});let j=G(B,{...N,abortSignal:w.signal})[Symbol.asyncIterator]();try{let z=j.next(),A=z.then((P)=>({kind:"next",r:P}));while(!0){let P=await Promise.race([A,D.flipped.then(()=>({kind:"flip"}))]);if(P.kind==="flip"){w.abort(),A.catch(()=>{}),(async()=>{try{await z}catch{}try{await j.return?.(void 0)}catch{}})(),yield*O();return}if(P.r.done)return;yield P.r.value,z=j.next(),A=z.then((I)=>({kind:"next",r:I}))}}finally{N.abortSignal?.removeEventListener("abort",E),D.dispose()}}:async(F,N)=>{let{background:U,...B}=F;if(U){let{jobId:O}=await Q.start({toolName:$,input:B,toolCallId:N.toolCallId});return iS$(O)}return G(B,N)};return{...X,inputSchema:J,execute:W,toModelOutput:(F)=>{if(Vi4(F.output))return{type:"text",value:F.output.note};if(X.toModelOutput)return X.toModelOutput(F);return{type:"text",value:JSON.stringify(F.output)}}}}var qi4,Mi4;var EZ1=L(()=>{p4();qi4="Running in the background. The result will appear in the conversation as "+"soon as it's ready \u2014 keep helping the user in the meantime, and do not "+"wait for it or call this tool again for the same request.",Mi4={background:Ii4.boolean().optional().describe("Run this in the BACKGROUND and return immediately instead of blocking this turn. Set true for long, fire-and-forget work whose result you do "+"NOT need in this same reply \u2014 it's delivered to the conversation when "+"it finishes and you'll be nudged to use it then. Leave false/omit when you need the result now to act on it this turn.")}});function pS$($,Z){let X=ua.get($);if(!X)X=new Map,ua.set($,X);let Q,Y=new Promise((G)=>{Q=G});return X.set(Z,Q),{flipped:Y,dispose(){let G=ua.get($);if(!G)return;if(G.delete(Z),G.size===0)ua.delete($)}}}function jZ1($,Z){ua.get($)?.get(Z)?.()}var ua;var zZ1=L(()=>{ua=new Map});import{z as nS$}from"zod";function PZ1($,Z){let{researchJob:X,toolOutputMap:Q,taskId:Y}=Z;return m$({description:Z.description??Si4,inputSchema:Q0(ki4),execute:async(G,J)=>{let K=performance.now(),W=(H)=>{$.write({type:"data-web-search",id:J.toolCallId,data:{text:H}})};try{let H=X({query:G.query,taskId:Y,toolCallId:J.toolCallId,abortSignal:J.abortSignal}),F=await H.next();while(!F.done)W(F.value.progress),F=await H.next();let N=F.value;return Q.set(J.toolCallId,N.text),Ci4({query:G.query,text:N.text,citations:N.citations,usage:N.usage,resultUri:N.resultUri??null,preview:N.preview??""})}finally{let H=performance.now()-K;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:H}})}}})}function Ci4($){if($.resultUri)return{success:!0,uri:$.resultUri,preview:$.preview,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}};return{success:!0,content:$.text,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}}}var ki4,Si4="Search the web for up-to-date information and synthesize a concise answer. Use this for quick lookups, fact-checking, current events, or when the answer requires knowledge beyond your training data and a fast response is enough. For exhaustive, multi-source reports prefer `deep_research` when available.";var tS$=L(()=>{p4();ki4=nS$.object({query:nS$.string().max(1e4).describe("The research query. Be specific about what information you need. The research model will search the web and synthesize a comprehensive answer.")})});var Av;var AZ1=L(()=>{Av=class Av extends Error{constructor($){super($);this.name="AsyncResearchTerminalError"}}});var oS$=L(()=>{AZ1()});var rS$=L(()=>{oS$()});var TZ1=32000;function kG($,Z,X){let Q=Object.entries(X).filter(([,G])=>G!==void 0&&G!==null).map(([G,J])=>`${G}=${typeof J==="string"?J:JSON.stringify(J)}`).join(" "),Y=`[web-search] ${Z} ${Q}`.trim();if($==="error")console.error(Y);else if($==="warn")console.warn(Y);else console.log(Y)}function RZ1($){let{provider:Z,modelInfo:X,ctx:Q,mode:Y,toolName:G}=$,J=X.id;return async function*(W){let H=Z.asyncResearch;if(Y==="deep"&&H?.canHandle(J)===!0&&H)return yield*_i4({params:W,asyncResearch:H,providerId:Z.info.id,modelId:J,toolName:G,ctx:Q});return yield*xi4({params:W,provider:Z,modelId:J,ctx:Q})}}async function*_i4({params:$,asyncResearch:Z,providerId:X,modelId:Q,toolName:Y,ctx:G}){let{toolCallId:J,taskId:K}=$,W={tc:J,thread:K,provider:X,model:Q},H=await G.storage.asyncResearchJobs.upsertPending({threadId:K,toolCallId:J,provider:X,modelId:Q,query:$.query});if(H.status==="completed"&&H.resultPreview!=null)return kG("info","replay-completed",{...W,job:H.id}),vi4(H);if(H.status==="failed"||H.status==="cancelled")throw kG("warn",`replay-${H.status}`,{...W,job:H.id,err:H.lastError}),Error(H.lastError??`previous research ${H.status}`);if(!H.interactionId){kG("info","submit",{...W,job:H.id});let B;try{B=(await Z.start({modelId:Q,query:$.query,abortSignal:$.abortSignal})).jobId}catch(O){let D=O.message??String(O);throw await G.storage.asyncResearchJobs.markFailed(J,D),kG("error","submit-failed",{...W,job:H.id,err:D}),O}await G.storage.asyncResearchJobs.markPolling(J,B,{threadId:K,toolName:Y,query:$.query}),H={...H,interactionId:B,status:"polling"},kG("info","polling-started",{...W,job:H.id,interaction:B})}else kG("info","polling-resumed",{...W,job:H.id,interaction:H.interactionId,attempts:H.attempts});let F=0,N=50,U=[];try{let B=!1,O,D=Z.resume({jobId:H.interactionId,abortSignal:$.abortSignal,onProgress:(P)=>{let I=Date.now();if(I-F>=N)F=I,U.push(P);G.storage.asyncResearchJobs.recordPoll(J).catch((V)=>{kG("warn","record-poll-failed",{...W,job:H.id,err:V.message})})}}).catch((P)=>{O=P;return}).finally(()=>{B=!0});while(!B){while(U.length>0)yield{progress:U.shift()};await Promise.race([D,H$(N)])}while(U.length>0)yield{progress:U.shift()};if(await D,O!==void 0)throw O;let w=await D;if(yield{progress:w.text},w.text.trim()==="")throw kG("error","empty-result",{...W,job:H.id,tokens:w.usage.outputTokens}),new Av("research completed with empty result");let E={inputTokens:w.usage.inputTokens,outputTokens:w.usage.outputTokens},j=w.usage.outputTokens>TZ1&&G.objectStorage!=null,z=null;if(j&&G.objectStorage){let P=`web-search/${crypto.randomUUID()}.md`;try{await G.objectStorage.put(P,new TextEncoder().encode(w.text),{contentType:"text/markdown"}),z=LU(P)}catch(I){kG("warn","blob-upload-failed",{...W,job:H.id,err:I.message})}}let A=TD(w.text);return await G.storage.asyncResearchJobs.markCompleted(J,{inputTokens:E.inputTokens,outputTokens:E.outputTokens,citations:w.citations,resultUri:z,resultPreview:A,resultContent:z?null:w.text}),kG("info","completed",{...W,job:H.id,tokens:E.outputTokens,citations:w.citations.length,uri:z??"inline"}),{text:w.text,citations:w.citations,usage:E,resultUri:z,preview:z?A:void 0}}catch(B){if($.abortSignal?.aborted)throw await G.storage.asyncResearchJobs.markCancelled(J,"aborted"),kG("info","cancelled",{...W,job:H.id}),B;let O=B.message??String(B);if(B instanceof Av||B instanceof Error&&B.name==="AsyncResearchTerminalError")throw await G.storage.asyncResearchJobs.markFailed(J,O),kG("error","terminal-failure",{...W,job:H.id,err:O}),B;throw await G.storage.asyncResearchJobs.recordPoll(J,O).catch(()=>{}),kG("warn","transient-error",{...W,job:H.id,err:O}),B}}function vi4($){if($.resultUri)return{text:"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:$.resultUri,preview:$.resultPreview??""};return{text:$.resultContent??$.resultPreview??"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:null}}async function*xi4({params:$,provider:Z,modelId:X,ctx:Q}){let Y=Z.aiSdk.languageModel(X),G=QD({model:Y,prompt:$.query,abortSignal:$.abortSignal}),J="",K=0,W=50;for await(let w of G.textStream){J+=w;let E=Date.now();if(E-K>=W)K=E,yield{progress:J}}yield{progress:J};let[H,F,N]=await Promise.all([G.usage,G.sources,G.providerMetadata]),U=H.inputTokens??0,B=H.outputTokens??0;WY0(N);let O=[];if(F&&Array.isArray(F)){for(let w of F)if(w&&typeof w==="object"&&"sourceType"in w&&w.sourceType==="url"&&"url"in w&&typeof w.url==="string")O.push({url:w.url,title:"title"in w&&typeof w.title==="string"?w.title:void 0})}let D={inputTokens:U,outputTokens:B};if(B>TZ1&&Q.objectStorage){let w=`web-search/${crypto.randomUUID()}.md`,E=new TextEncoder().encode(J);try{return await Q.objectStorage.put(w,E,{contentType:"text/markdown"}),{text:J,citations:O,usage:D,resultUri:LU(w),preview:TD(J)}}catch(j){console.error("[web-search] Failed to upload to storage, returning inline",j)}}return{text:J,citations:O,usage:D,resultUri:null}}var aS$=L(()=>{p4();J4();rS$();g8();_A0();BU()});function sS$($){let{writer:Z,toolOutputMap:X,objectStorage:Q,imageTool:Y}=$,G={user_ask:VA0,todo_write:kA0,propose_plan:CA0,read_tool_output:IA0({toolOutputMap:X})};if(Y)G.generate_image=ha("generate_image",ya,xA0(Z,{...Y,objectStorage:Q}),null);return G}var eS$=L(()=>{BZ1();OZ1();LZ1();BU();ga();EZ1()});async function fA0($,Z,X){let Q=await $.findById(Z,X);if(!Q||Q.organization_id!==X)throw Error(`Virtual MCP not found: ${Z}`);return Q}function ca($,Z=Date.now()){let X=new Date($.updated_at).getTime(),Q=$.last_progress_at?new Date($.last_progress_at).getTime():Number.NaN,Y=Math.max(Number.isFinite(X)?X:Number.NEGATIVE_INFINITY,Number.isFinite(Q)?Q:Number.NEGATIVE_INFINITY);return!Number.isFinite(Y)||Z-Y>IZ1}function aJ($,Z=Date.now()){let X=$.status;if(X==="in_progress"&&ca($,Z))X="expired";return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,created_at:$.created_at,updated_at:$.updated_at,created_by:$.created_by,updated_by:$.updated_by,hidden:$.hidden??!1,status:X,virtual_mcp_id:$.virtual_mcp_id||void 0,trigger_id:$.trigger_id,branch:$.branch,harness_id:$.harness_id,metadata:$.metadata&&Object.keys($.metadata).length>0?$.metadata:void 0,run_config:$.run_config}}var IZ1=1800000;var qZ1,la;var bA0=L(()=>{qZ1=["in_progress","requires_action","failed","completed"],la=["ended_after_delivery","superseded"]});import{z as k$}from"zod";var $C$,fi4,ZC$,xH,XC$,QC$;var Tv=L(()=>{bA0();vu();$C$=k$.object({id:k$.string().describe("Unique message ID"),thread_id:k$.string().describe("ID of the parent thread"),metadata:k$.unknown().optional().describe("Optional message metadata"),parts:k$.array(k$.record(k$.string(),k$.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:k$.enum(["user","assistant","system"]).describe("Message role"),created_at:k$.string().datetime().describe("Timestamp of creation"),updated_at:k$.string().datetime().describe("Timestamp of last update")}),fi4=k$.object({toolName:k$.string().describe("Fully qualified tool name"),appId:k$.string().describe("App ID that owns the tool"),args:k$.record(k$.string(),k$.unknown()).describe("Arguments used when expanding the tool"),expandedAt:k$.string().datetime().describe("When the tool was expanded")}),ZC$=k$.object({expanded_tools:k$.array(fi4).optional(),read_only:k$.boolean().optional().describe("The thread takes no further input (an autonomous run the user cannot continue)"),runtime:k$.enum(u91).optional().describe("Session runtime, stamped once at creation and immutable afterwards: 'cms' is a sandbox-less content session, 'sandbox' a coding session with a pod. Absent only on threads created before the stamp existed.")}).catchall(k$.unknown()),xH=k$.object({id:k$.string().describe("Unique thread ID"),organization_id:k$.string().describe("Organization this thread belongs to"),title:k$.string().describe("Thread title"),description:k$.string().nullable().describe("Thread description"),created_at:k$.string().datetime().describe("Timestamp of creation"),updated_at:k$.string().datetime().describe("Timestamp of last update"),hidden:k$.boolean().optional().describe("Whether the thread is hidden"),status:k$.enum([...qZ1,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:k$.string().describe("User ID who created the thread"),updated_by:k$.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:k$.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:k$.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:k$.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),harness_id:k$.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:ZC$.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:k$.record(k$.string(),k$.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),XC$=k$.object({id:k$.string().optional().describe("Optional custom ID for the thread"),title:k$.string().optional().describe("Thread title"),description:k$.string().nullish().describe("Thread description"),virtual_mcp_id:k$.string().describe("Virtual MCP (agent) this thread is bound to"),branch:k$.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name."),runtime:k$.enum(u91).optional().describe("Session runtime for the new thread, honored verbatim and immutable for the thread's life. 'sandbox' starts a coding session even on a Fast Preview project, sharing the given branch (it continues the CMS draft). Omitted \u21D2 stamped with the project's default (Fast Preview capable \u21D2 'cms', else 'sandbox').")}),QC$=k$.object({title:k$.string().optional().describe("New thread title"),description:k$.string().nullish().describe("New thread description"),hidden:k$.boolean().optional().describe("Whether the thread is hidden"),status:k$.enum(qZ1).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:ZC$.superRefine(($,Z)=>{if("sandboxMap"in $)Z.addIssue({code:"custom",path:["sandboxMap"],message:"sandboxMap is managed by the sandbox lifecycle"})}).optional().describe("Full replacement of the thread's user-managed metadata"),branch:k$.string().min(1).nullish().describe("New git branch for this thread"),virtual_mcp_id:k$.string().optional().describe("Re-point the thread at a different agent. Only meaningful for an unsent thread (changing the recipient of a new chat); the UI restricts it accordingly.")})});import{z as SG}from"zod";var bi4,yi4,Rv;var MZ1=L(()=>{fJ();k0();Tv();bi4=zK.extend({where:SG.object({created_by:SG.string().optional(),trigger_ids:SG.array(SG.string()).max(1000).optional(),virtual_mcp_id:SG.string().optional(),hidden:SG.boolean().optional(),has_trigger:SG.boolean().optional()}).optional(),startDate:SG.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:SG.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:SG.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:SG.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:SG.string().optional().describe("Filter by the user who created the thread"),agentId:SG.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),yi4=gN(xH),Rv=c({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:bi4,outputSchema:yi4,handler:async($,Z)=>{await Z.access.check();let X=Z.auth.user?.id;if(!X)throw Error("User ID required to list threads");s(Z);let Q=$.offset??0,Y=$.limit??100,G=$.where?.trigger_ids,J=$.where?.virtual_mcp_id,K=$.userId??($.where?.created_by==="me"?X:$.where?.created_by),{threads:W,total:H}=G?.length?await Z.storage.threads.listByTriggerIds(G,{limit:Y,offset:Q}):await Z.storage.threads.list(K,{limit:Y,offset:Q,virtualMcpId:J,startDate:$.startDate,endDate:$.endDate,search:$.search,status:$.status,agentId:$.agentId,includeArchived:$.where?.hidden,hasTrigger:$.where?.has_trigger}),F=Q+Y<H,N=Date.now();return{items:W.map((U)=>aJ(U,N)),totalCount:H,hasMore:F}}})});var gi4,Iv;var VZ1=L(()=>{fJ();k0();Tv();gi4=eo(xH),Iv=c({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:so,outputSchema:gi4,handler:async($,Z)=>{a(Z),s(Z),await Z.access.check();let X=await Z.storage.threads.get($.id);if(!X)return{item:null};return{item:aJ(X)}}})});import{z as hi4}from"zod";function YC$($){if(!$)return null;if("field"in $&&$.field[0]==="thread_id"&&$.operator==="eq")return String($.value);if("conditions"in $&&($.operator==="and"||$.operator==="or"))for(let Z of $.conditions){let X=YC$(Z);if(X)return X}return null}var ui4,ci4,qv;var kZ1=L(()=>{fJ();k0();Tv();ui4=zK.extend({thread_id:hi4.string().optional().describe("ID of the thread to list messages for (required)")}),ci4=gN($C$),qv=c({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ui4,outputSchema:ci4,handler:async($,Z)=>{s(Z),await Z.access.check();let X=$.thread_id??YC$($.where);if(!X)throw Error("thread_id is required (provide as top-level param or in where clause)");let Q=$.offset??0,Y=$.limit??100,G=$.orderBy?.[0]?.direction??"asc",J=await Z.storage.threads.get(X);if(!J)return{items:[],totalCount:0,hasMore:!1};if(J.message_storage_version===2){let{messages:F,total:N}=await Z.storage.threads.messageParts().loadWindow(X,{limit:Y,offset:Q,includeInFlight:!0});return{items:F.map((U)=>({id:U.id,thread_id:X,role:U.role,parts:U.parts,metadata:U.metadata??null,created_at:U.created_at,updated_at:U.created_at})),totalCount:N,hasMore:Q+Y<N}}let{messages:K,total:W}=await Z.storage.threads.listMessages(X,{limit:Y,offset:Q,sort:G}),H=Q+Y<W;return{items:K,totalCount:W,hasMore:H}}})});function GC$($){return{search_threads:m$({description:Rv.description,inputSchema:Q0(Rv.inputSchema),execute:(Z)=>Rv.execute(Z,$)}),get_thread:m$({description:Iv.description,inputSchema:Q0(Iv.inputSchema),execute:(Z)=>Iv.execute(Z,$)}),list_thread_messages:m$({description:qv.description,inputSchema:Q0(qv.inputSchema),execute:(Z)=>qv.execute(Z,$)})}}var JC$=L(()=>{p4();MZ1();VZ1();kZ1()});function _Z1($){let Z=$.type;if(typeof Z!=="string")return!1;if(Z==="text"||Z==="reasoning")return $.state!=="streaming";if(Z==="step-start")return!1;if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="approval-requested"||Z==="tool-user_ask"&&$.state==="input-available"||$.state==="output-available"||$.state==="output-error"||$.state==="output-denied";return!0}function SZ1($){let Z=$.type??"";if(Z==="reasoning")return"reasoning";if(Z==="file")return"file";if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="output-available"||$.state==="output-error"||$.state==="output-denied"?"tool_result":"tool_call";return"text"}class vZ1{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor($){this.ctx=$;this.base=$.baseTimeMs??Date.now()}hasEmittedContentFor($){let Z=`${$}#`;for(let X of this.emitted)if(X.startsWith(Z))return!0;return!1}seqFor($){let Z=this.seqByPart.get($);if(Z!==void 0)return Z;let X=this.nextSeq++;return this.seqByPart.set($,X),X}row($,Z,X,Q,Y,G=null){return{id:`${this.ctx.runId}:${$}:${X}`,seq:X,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:$,role:Z,kind:Q,payload:Y,payload_ref:null,metadata:G,created_at:new Date(this.base+X).toISOString()}}emitMessageParts($){let Z=$.parts??[],X=[];for(let Q=0;Q<Z.length;Q++){let Y=Z[Q];if(!_Z1(Y))continue;let G=`${$.id}#${Q}`;if(this.emitted.has(G))continue;let J=this.seqFor(G),K=this.row($.id,$.role,J,SZ1(Y),CZ1(Y));this.partKeyByRowId.set(K.id,G),X.push(K)}return X}emitRequestMessageParts($){let Z=$.parts??[],X=[];for(let Q=0;Q<Z.length;Q++){let Y=Z[Q],G=`${$.id}#${Q}`,J=this.seqFor(G),K=this.row($.id,$.role,J,SZ1(Y),CZ1(Y));this.partKeyByRowId.set(K.id,G),X.push(K)}return X}markFinished($,Z,X=null){if(this.finished.has($))return[];let Q=this.seqFor(`${$}#finish`),Y=this.row($,Z,Q,"finish",{},X);return this.finishMessageIdByRowId.set(Y.id,$),[Y]}markRequestFinished($,Z,X=null){let Q=this.seqFor(`${$}#finish`),Y=this.row($,Z,Q,"finish",{},X);return this.finishMessageIdByRowId.set(Y.id,$),[Y]}acknowledge($){for(let Z of $){let X=this.partKeyByRowId.get(Z.id);if(X!==void 0)this.emitted.add(X);let Q=this.finishMessageIdByRowId.get(Z.id);if(Q!==void 0)this.finished.add(Q)}}emitUserMessage($){return[...this.emitMessageParts($),...this.markFinished($.id,$.role,$.metadata??null)]}emitRequestMessage($){return[...this.emitRequestMessageParts($),...this.markRequestFinished($.id,$.role,$.metadata??null)]}emitStepParts($){return this.emitMessageParts($)}emitFinal($){let Z=this.emitMessageParts($);if(Z.length===0&&!this.hasEmittedContentFor($.id))return Z;return[...Z,...this.markFinished($.id,$.role,$.metadata??null)]}emitFinalSnapshot($){let Z=$.parts??[],X=[];for(let G=0;G<Z.length;G++){let J=Z[G];if(!_Z1(J))continue;let K=`${$.id}#${G}`,W=this.seqFor(K),H=this.row($.id,$.role,W,SZ1(J),CZ1(J));this.partKeyByRowId.set(H.id,K),X.push(H)}if(X.length===0&&!this.hasEmittedContentFor($.id))return X;let Q=this.seqFor(`${$.id}#finish`),Y=this.row($.id,$.role,Q,"finish",{},$.metadata??null);return this.finishMessageIdByRowId.set(Y.id,$.id),[...X,Y]}emitError($,Z){let X=`${$}#error`,Q=[];if(!this.emitted.has(X)){let Y=this.seqFor(X),G=this.row($,"assistant",Y,"error",{type:"text",text:`Error: ${KC$(Z)}`});this.partKeyByRowId.set(G.id,X),Q.push(G)}return[...Q,...this.markFinished($,"assistant")]}}function KC$($){if($.length<=yA0)return $;let Z=$.length-yA0;return`${$.slice(0,yA0)}\u2026 [truncated ${Z} characters]`}function CZ1($){let Z=$.errorText;if(typeof Z!=="string"||Z.length<=yA0)return $;return{...$,errorText:KC$(Z)}}var yA0=8000;class RX{ctx;builder;constructor($){this.ctx=$;this.builder=new vZ1($)}async appendBuiltRows($){await this.ctx.storage.appendParts($),this.builder.acknowledge($)}async emitUserMessage($){await this.appendBuiltRows(this.builder.emitUserMessage($))}async emitRequestMessage($){let Z=this.builder.emitRequestMessage($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitStepParts($){await this.appendBuiltRows(this.builder.emitStepParts($))}async emitFinal($){await this.appendBuiltRows(this.builder.emitFinal($))}async replaceFinal($){let Z=this.builder.emitFinalSnapshot($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitError($,Z){await this.appendBuiltRows(this.builder.emitError($,Z))}}var VD=()=>{};async function du($,Z,X,Q){let Y=Z.organizationId,G=await Z7($,"smart"),J=X.virtual_mcp_id??Rj(Y),K={id:Q.messageId,role:"user",parts:[{type:"text",text:Q.prompt}],metadata:{created_at:new Date().toISOString()}};await new RX({storage:$.storage.threads.messageParts(),orgId:Y,threadId:X.id,runId:X.id}).emitRequestMessage(K),await DU({threadId:X.id,source:"background-tool",request:{messages:[K],models:{credentialId:G.credentialId,thinking:{id:G.modelId,title:G.modelMeta.title}},agent:{id:J,...Q.agent??{}},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:Y,userId:Z.assignedBy??Z.createdBy,harnessId:X.harness_id==="claude-code"?"claude-code":"decopilot",...X.branch?{branch:X.branch}:{},taskId:X.id,runMetadata:{...FA0(Z),...Q.runClass?{[gu]:Q.runClass}:{}}}},{workflowID:Q.workflowID})}var gA0=L(()=>{Va();VD();FU();wU();hu();g8()});var hA0,WC$="notification.created";var uA0=L(()=>{hA0=["created","commented","mentioned","status_changed","assignee_changed","review_requested","review_approved","review_changes_requested","merge_failed"]});class NC${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>=FC$)return console.warn(`[SSEHub] Total connection limit reached (${FC$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=HC$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${HC$})`),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&&!li4(Z.type,Q.typePatterns))continue;try{Q.push(Z)}catch{this.remove($,Q.id)}}}}function li4($,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 HC$=50,FC$=500,c5;var ma=L(()=>{x6();c5=new NC$;P$.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(c5.count))});function mi4($){return $.replace(/[^a-zA-Z]/g,"").toUpperCase().slice(0,4)||"TASK"}function UC$($,Z,X){let Q=X?.trim();if(Q)return Q;if(Z==null)return null;return`${mi4($)}-${String(Z).padStart(2,"0")}`}var BC$=()=>{};function xZ1($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function ii4($,Z){let X=$.taskKeySeq===null?null:UC$($.orgSlug,$.taskKeySeq),Q=xZ1($.actorName??"The agent"),Y=xZ1($.taskTitle),G=X?`${xZ1(X)} \xB7 ${Y}`:Y,J=X?`<a href="${Z}/${encodeURIComponent($.orgSlug)}/t/${encodeURIComponent(X)}" style="color:#141413;">${G}</a>`:G;return`<p style="margin:0 0 12px 0;font-size:14px;color:#141413;line-height:1.6;font-family:Inter,system-ui,sans-serif;">${Q} ${di4[$.type]} ${J}</p>`}function OC$($,Z){let X=$.length===1?"1 update on your tasks":`${$.length} updates on your tasks`;return{subject:X,html:DK({preheader:X,heading:X,body:$.map((Q)=>ii4(Q,Z)).join(`
2747
- `),footnote:"You received this because you follow these tasks. Open a task and use Unfollow to stop."})}}var di4;var LC$=L(()=>{BC$();di4={created:"created",commented:"commented on",mentioned:"mentioned you on",status_changed:"moved",assignee_changed:"reassigned",review_requested:"requested review on",review_approved:"approved",review_changes_requested:"requested changes on",merge_failed:"couldn't merge"}});import{z as da}from"zod";var iu;var cA0=L(()=>{iu=da.object({taskTitle:da.string(),taskKeySeq:da.number().int().nullable(),actorName:da.string().nullable(),actorImage:da.string().nullable()})});import{DBOS as fH,SchedulerMode as pi4}from"@dbos-inc/dbos-sdk";function DC$($){yZ1=$}function hZ1(){if(!yZ1)throw Error("[notifications] runtime not initialized \u2014 setNotificationDigestRuntime() must run before the workflow fires");return yZ1}function wC$(){return hZ1().db.selectFrom("notifications as n").innerJoin("organization as o","o.id","n.organization_id").innerJoin("user as u","u.id","n.user_id").innerJoin("member as m",($)=>$.onRef("m.userId","=","n.user_id").onRef("m.organizationId","=","n.organization_id")).select(["n.id as id","n.user_id as userId","n.type as type","n.data as data","o.slug as orgSlug","u.email as email"]).where("n.emailed_at","is",null).where("n.read_at","is",null).orderBy("n.created_at","asc").limit(oi4)}function EC$($){return $.map((Z)=>{let X=iu.parse(Z.data);return{id:Z.id,userId:Z.userId,email:Z.email,type:Z.type,orgSlug:Z.orgSlug,taskTitle:X.taskTitle,taskKeySeq:X.taskKeySeq,actorName:X.actorName}})}async function ai4($){return EC$(await wC$().where("n.user_id","=",$).execute())}async function si4($){return EC$(await wC$().where("n.created_at","<",$).execute())}async function ei4($){if($.length===0)return new Set;let Z=await hZ1().db.updateTable("notifications").set({emailed_at:new Date}).where("id","in",$).where("emailed_at","is",null).returning("id").execute();return new Set(Z.map((X)=>X.id))}function $p4($){let Z=new Map;for(let X of $){let Q=Z.get(X.userId);if(Q)Q.push(X);else Z.set(X.userId,[X])}return[...Z.values()]}function uZ1(){let $=xN().auth,Z=$.emailProviders??[],X=$.inviteEmailProviderId?LK(Z,$.inviteEmailProviderId):Z[0];return X?OK(X):null}async function Zp4($){let Z=uZ1();if(!Z)throw Error("no email provider configured");let{subject:X,html:Q}=OC$($,v5());await Z({to:$[0].email,subject:X,html:Q})}async function Xp4($){await hZ1().db.deleteFrom("notifications").where("created_at","<",$).execute()}async function jC$($,Z){if($.length===0)return;let X=await fH.runStep(()=>ei4($.map((Y)=>Y.id)),{name:`claimForEmail:${Z}`}),Q=$.filter((Y)=>X.has(Y.id));if(Q.length===0)return;await fH.runStep(()=>Zp4(Q),{name:`sendDigest:${Z}`})}async function Qp4($,Z){let X=Z-Date.now();if(X>0)await fH.sleep(X);if(!uZ1())return;let Q=await fH.runStep(()=>ai4($),{name:"loadPendingForUser"});try{await jC$(Q,$)}catch(Y){console.warn(`[notifications] digest for ${$} failed:`,Y instanceof Error?Y.message:Y)}}async function Yp4($,Z){let X=new Date($.getTime()-bZ1-ti4),Q=uZ1()?await fH.runStep(()=>si4(X),{name:"loadOrphanedNotifications"}):[];for(let Y of $p4(Q)){let G=Y[0].userId;try{await jC$(Y,G)}catch(J){console.warn(`[notifications] sweep digest for ${G} failed:`,J instanceof Error?J.message:J)}}if($.getUTCMinutes()<2)await fH.runStep(()=>Xp4(new Date($.getTime()-ri4)),{name:"pruneOldNotifications"})}function zC$($){if(!gZ1)return;let Z=Math.floor(Date.now()/bZ1),X=(Z+1)*bZ1;fH.startWorkflow(gZ1,{workflowID:`notif-digest:${$}:${Z}`})($,X).catch((Q)=>{console.debug("[notifications] digest enqueue skipped:",Q instanceof Error?Q.message:Q)})}function PC$(){if(fZ1)return;gZ1=fH.registerWorkflow(Qp4,{name:"notificationUserDigestWorkflow"}),fZ1=fH.registerWorkflow(Yp4,{name:"notificationDigestWorkflow"}),fH.registerScheduled(fZ1,{name:"notificationDigestWorkflow",crontab:ni4,mode:pi4.ExactlyOncePerIntervalWhenActive})}var ni4="*/2 * * * *",bZ1=30000,ti4=60000,oi4=500,ri4=2592000000,yZ1=null,fZ1=null,gZ1=null;var cZ1=L(()=>{nG0();p5();fh();LC$();cA0()});async function Gp4($,Z){return await $.selectFrom("task_board_items").select(["organization_id","title","key_seq"]).where("id","=",Z).executeTakeFirst()}async function Jp4($,Z){if(!Z)return{name:null,image:null};let X=await $.selectFrom("user").select(["name","image"]).where("id","=",Z).executeTakeFirst();return{name:X?.name??null,image:X?.image??null}}async function pu($){let{db:Z,taskBoardItemId:X,type:Q,actorId:Y}=$;try{let G=[],J=await Gp4(Z,X);if(!J)return;let K=async(W)=>{let H=[...new Set($.alsoSubscribe?.filter((D)=>!!D))];if(H.length>0)await W.insertInto("notification_subscriptions").values(H.map((D)=>({id:o$("nsub"),user_id:D,task_board_item_id:X}))).onConflict((D)=>D.columns(["user_id","task_board_item_id"]).doNothing()).execute();let F=$.recipients,U=(F?[...new Set(F.filter((D)=>!!D))]:(await W.selectFrom("notification_subscriptions").select("user_id").where("task_board_item_id","=",X).where("subscribed","=",!0).execute()).map((D)=>D.user_id)).filter((D)=>D!==Y);if(U.length===0)return;G=U;let B=await Jp4(W,Y),O=iu.parse({taskTitle:J.title,taskKeySeq:J.key_seq??null,actorName:B.name,actorImage:B.image});await W.insertInto("notifications").values(U.map((D)=>({id:o$("notif"),user_id:D,organization_id:J.organization_id,task_board_item_id:X,type:Q,actor_id:Y,data:JSON.stringify(O)}))).execute()};await(Z.isTransaction?K(Z):Z.transaction().execute(K));for(let W of G)zC$(W),c5.emit(J.organization_id,{id:crypto.randomUUID(),type:WC$,source:"notifications",subject:W,time:new Date().toISOString()})}catch(G){console.error("[notifications] fan-out failed",G)}}var lA0=L(()=>{dZ();uA0();ma();cZ1();cA0()});import{sql as kD}from"kysely";function Wp4($){return Kp4.has($)?$:null}function mA0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,threadId:$.thread_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function AC$($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function lZ1($,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&&ia.has(Q.status)))return!1;return X.some((Q)=>Q.status==="completed")}function Up4($){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}function Bp4($){if($===null||$===void 0)return null;let Z=typeof $==="number"?$:Number($);return Number.isFinite(Z)?Z:null}function Op4($,Z){let X=(G)=>G instanceof Date?G.getTime():new Date(G).getTime(),Q=X($),Y=Z===null?Number.NEGATIVE_INFINITY:X(Z);return new Date(Math.max(Q,Y)).toISOString()}class TQ{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=o$("board"),X=new Date().toISOString(),Q=$.status??"triage",Y=(J)=>J.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:Q,priority:$.priority??"medium",type:$.type??m81,assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,repo:$.repo??null,due_date:$.dueDate??null,sprint_id:$.sprintId??null,external_key:$.externalKey??null,sort_order:kD`(
2747
+ `),footnote:"You received this because you follow these tasks. Open a task and use Unfollow to stop."})}}var di4;var LC$=L(()=>{BC$();di4={created:"created",commented:"commented on",mentioned:"mentioned you on",status_changed:"moved",assignee_changed:"reassigned",review_requested:"requested review on",review_approved:"approved",review_changes_requested:"requested changes on",merge_failed:"couldn't merge"}});import{z as da}from"zod";var iu;var cA0=L(()=>{iu=da.object({taskTitle:da.string(),taskKeySeq:da.number().int().nullable(),actorName:da.string().nullable(),actorImage:da.string().nullable()})});import{DBOS as fH,SchedulerMode as pi4}from"@dbos-inc/dbos-sdk";function DC$($){yZ1=$}function hZ1(){if(!yZ1)throw Error("[notifications] runtime not initialized \u2014 setNotificationDigestRuntime() must run before the workflow fires");return yZ1}function wC$(){return hZ1().db.selectFrom("notifications as n").innerJoin("organization as o","o.id","n.organization_id").innerJoin("user as u","u.id","n.user_id").innerJoin("member as m",($)=>$.onRef("m.userId","=","n.user_id").onRef("m.organizationId","=","n.organization_id")).select(["n.id as id","n.user_id as userId","n.type as type","n.data as data","o.slug as orgSlug","u.email as email"]).where("n.emailed_at","is",null).where("n.read_at","is",null).orderBy("n.created_at","asc").limit(oi4)}function EC$($){return $.map((Z)=>{let X=iu.parse(Z.data);return{id:Z.id,userId:Z.userId,email:Z.email,type:Z.type,orgSlug:Z.orgSlug,taskTitle:X.taskTitle,taskKeySeq:X.taskKeySeq,actorName:X.actorName}})}async function ai4($){return EC$(await wC$().where("n.user_id","=",$).execute())}async function si4($){return EC$(await wC$().where("n.created_at","<",$).execute())}async function ei4($){if($.length===0)return new Set;let Z=await hZ1().db.updateTable("notifications").set({emailed_at:new Date}).where("id","in",$).where("emailed_at","is",null).returning("id").execute();return new Set(Z.map((X)=>X.id))}function $p4($){let Z=new Map;for(let X of $){let Q=Z.get(X.userId);if(Q)Q.push(X);else Z.set(X.userId,[X])}return[...Z.values()]}function uZ1(){let $=xN().auth,Z=$.emailProviders??[],X=$.inviteEmailProviderId?LK(Z,$.inviteEmailProviderId):Z[0];return X?OK(X):null}async function Zp4($){let Z=uZ1();if(!Z)throw Error("no email provider configured");let{subject:X,html:Q}=OC$($,v5());await Z({to:$[0].email,subject:X,html:Q})}async function Xp4($){await hZ1().db.deleteFrom("notifications").where("created_at","<",$).execute()}async function jC$($,Z){if($.length===0)return;let X=await fH.runStep(()=>ei4($.map((Y)=>Y.id)),{name:`claimForEmail:${Z}`}),Q=$.filter((Y)=>X.has(Y.id));if(Q.length===0)return;await fH.runStep(()=>Zp4(Q),{name:`sendDigest:${Z}`})}async function Qp4($,Z){let X=Z-Date.now();if(X>0)await fH.sleep(X);if(!uZ1())return;let Q=await fH.runStep(()=>ai4($),{name:"loadPendingForUser"});try{await jC$(Q,$)}catch(Y){console.warn(`[notifications] digest for ${$} failed:`,Y instanceof Error?Y.message:Y)}}async function Yp4($,Z){let X=new Date($.getTime()-bZ1-ti4),Q=uZ1()?await fH.runStep(()=>si4(X),{name:"loadOrphanedNotifications"}):[];for(let Y of $p4(Q)){let G=Y[0].userId;try{await jC$(Y,G)}catch(J){console.warn(`[notifications] sweep digest for ${G} failed:`,J instanceof Error?J.message:J)}}if($.getUTCMinutes()<2)await fH.runStep(()=>Xp4(new Date($.getTime()-ri4)),{name:"pruneOldNotifications"})}function zC$($){if(!gZ1)return;let Z=Math.floor(Date.now()/bZ1),X=(Z+1)*bZ1;fH.startWorkflow(gZ1,{workflowID:`notif-digest:${$}:${Z}`})($,X).catch((Q)=>{console.debug("[notifications] digest enqueue skipped:",Q instanceof Error?Q.message:Q)})}function PC$(){if(fZ1)return;gZ1=fH.registerWorkflow(Qp4,{name:"notificationUserDigestWorkflow"}),fZ1=fH.registerWorkflow(Yp4,{name:"notificationDigestWorkflow"}),fH.registerScheduled(fZ1,{name:"notificationDigestWorkflow",crontab:ni4,mode:pi4.ExactlyOncePerIntervalWhenActive})}var ni4="*/2 * * * *",bZ1=30000,ti4=60000,oi4=500,ri4=2592000000,yZ1=null,fZ1=null,gZ1=null;var cZ1=L(()=>{nG0();p5();fh();LC$();cA0()});async function Gp4($,Z){return await $.selectFrom("task_board_items").select(["organization_id","title","key_seq"]).where("id","=",Z).executeTakeFirst()}async function Jp4($,Z){if(!Z)return{name:null,image:null};let X=await $.selectFrom("user").select(["name","image"]).where("id","=",Z).executeTakeFirst();return{name:X?.name??null,image:X?.image??null}}async function pu($){let{db:Z,taskBoardItemId:X,type:Q,actorId:Y}=$;try{let G=[],J=await Gp4(Z,X);if(!J)return;let K=async(W)=>{let H=[...new Set($.alsoSubscribe?.filter((D)=>!!D))];if(H.length>0)await W.insertInto("notification_subscriptions").values(H.map((D)=>({id:o$("nsub"),user_id:D,task_board_item_id:X}))).onConflict((D)=>D.columns(["user_id","task_board_item_id"]).doNothing()).execute();let F=$.recipients,U=(F?[...new Set(F.filter((D)=>!!D))]:(await W.selectFrom("notification_subscriptions").select("user_id").where("task_board_item_id","=",X).where("subscribed","=",!0).execute()).map((D)=>D.user_id)).filter((D)=>D!==Y);if(U.length===0)return;G=U;let B=await Jp4(W,Y),O=iu.parse({taskTitle:J.title,taskKeySeq:J.key_seq??null,actorName:B.name,actorImage:B.image});await W.insertInto("notifications").values(U.map((D)=>({id:o$("notif"),user_id:D,organization_id:J.organization_id,task_board_item_id:X,type:Q,actor_id:Y,data:JSON.stringify(O)}))).execute()};await(Z.isTransaction?K(Z):Z.transaction().execute(K));for(let W of G)zC$(W),c5.emit(J.organization_id,{id:crypto.randomUUID(),type:WC$,source:"notifications",subject:W,time:new Date().toISOString()})}catch(G){console.error("[notifications] fan-out failed",G)}}var lA0=L(()=>{dZ();uA0();ma();cZ1();cA0()});import{sql as kD}from"kysely";function Wp4($){return Kp4.has($)?$:null}function mA0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,threadId:$.thread_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function AC$($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function lZ1($,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&&ia.has(Q.status)))return!1;return X.some((Q)=>Q.status==="completed")}function Up4($){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}function Bp4($){if($===null||$===void 0)return null;let Z=typeof $==="number"?$:Number($);return Number.isFinite(Z)?Z:null}function Op4($,Z){let X=(G)=>G instanceof Date?G.getTime():new Date(G).getTime(),Q=X($),Y=Z===null?Number.NEGATIVE_INFINITY:X(Z);return new Date(Math.max(Q,Y)).toISOString()}class TQ{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=o$("board"),X=new Date().toISOString(),Q=$.status??"triage",Y=(J)=>J.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:Q,board_column_org:$.boardColumnOrg??null,priority:$.priority??"medium",type:$.type??m81,assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,repo:$.repo??null,due_date:$.dueDate??null,sprint_id:$.sprintId??null,external_key:$.externalKey??null,sort_order:kD`(
2748
2748
  select coalesce(min(sort_order), 0) - 1
2749
2749
  from task_board_items
2750
2750
  where organization_id = ${$.organizationId}
@@ -2753,7 +2753,7 @@ Guidelines:
2753
2753
  select coalesce(max(key_seq), 0) + 1
2754
2754
  from task_board_items
2755
2755
  where organization_id = ${$.organizationId}
2756
- )`,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow(),G=await this.inTransaction(async(J)=>{return await kD`select pg_advisory_xact_lock(hashtext(${`task-board-key-seq:${$.organizationId}`})::bigint)`.execute(J),Y(J)});return this.itemFromDbRow(G)}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.type!==void 0?{type:X.type}:{},...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.sprintId!==void 0?{sprint_id:X.sprintId}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},...X.status!==void 0&&!Np4.has(X.status)?{review_cycle_started_at:null}:{},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(WY({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((G)=>G.or([G("review_cycle_started_at","is not",null),G("status","=","in_review")])).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 listItemsAwaitingArchive($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","=","done").where("i.dismissed_at","is",null).where("i.updated_at","<",$).where((Q)=>Q.exists(Q.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).orderBy("i.updated_at","asc").limit(Z).execute()).map((Q)=>({id:Q.id,organizationId:Q.organizationId}))}async listItemsAwaitingMergedTag($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","in",Lp4).where("i.dismissed_at","is",null).where((Q)=>Q.exists(Q.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).where((Q)=>Q.not(Q.exists(Q.selectFrom("task_board_item_tags as t").innerJoin("organization_tags as g","g.id","t.id").select("t.id").whereRef("t.task_board_item_id","=","i.id").where(kD`lower(g.name)`,"=",$)))).orderBy("i.updated_at","desc").limit(Z).execute()).map((Q)=>({id:Q.id,organizationId:Q.organizationId}))}async claimSweep($,Z,X){let Q=await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("last_swept_at","is",null),Y("last_swept_at","<",X)])).executeTakeFirst();return Number(Q.numUpdatedRows??0)>0}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:AC$(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((K)=>K.and([K("t.updated_at","<",Z),K.or([K("t.last_progress_at","is",null),K("t.last_progress_at","<",Z)])])).limit($).execute();if(Q.length===0)return[];let Y=Q.map((K)=>K.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((K)=>K.id));return Q.filter((K)=>J.has(K.threadId))}async relabelDeliveredFailure($,Z,X){return(await this.db.updateTable("threads").set({failure_reason:X,failure_kind:"ended_after_delivery",updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","failed").where((Y)=>Y.or([Y("failure_kind","is",null),Y("failure_kind","not in",["cancelled",...la])])).returning("id").execute()).length>0}async supersedeFailedThreads($,Z){return(await this.db.updateTable("threads").set({failure_kind:"superseded",updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("status","=","failed").where("failure_kind","is distinct from","cancelled").where((Q)=>Q("id","in",Q.selectFrom("task_board_item_threads").select("thread_id").where("task_board_item_id","=",$).where("organization_id","=",Z))).returning("id").execute()).length}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","=",G8).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where((Y)=>Y.or([Y("t.failure_kind","is",null),Y("t.failure_kind","not in",[...la])])).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=(await this.listPrs(Q,Z)).length>0;if(!lZ1(Y,G))continue;if(Y.reviewCycleStartedAt)continue;if(G){let K=await this.openReviewCycleIfInProgress(Q,Z);if(!K)continue;X.push(K);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((K)=>console.error("[task-board] in_review activity write failed",K))}return X}async openReviewCycleIfInProgress($,Z){let X=await this.db.updateTable("task_board_items").set({review_cycle_started_at:new Date,status:"in_progress"}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("status","=","in_progress"),Y.and([Y("status","=","in_review"),Y("assignee_id","=",G8)])])).where("review_cycle_started_at","is",null).where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!X)return null;let Q=this.itemFromDbRow(X);return await this.attachRefs([Q],Z),Q}async closeReviewCycle($,Z){await this.db.updateTable("task_board_items").set({review_cycle_started_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}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;await this.closeReviewCycle(Q,Z),X.push(await this.update(Q,Z,{status:"in_progress"},Y.updatedBy))}return X}claimConflictResolution($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}async claimInReviewSuperAgentSlot($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_progress",review_cycle_started_at:null,updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",G8).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async claimUnassignedForSuperAgent($,Z,X,Q){let Y=await this.db.updateTable("task_board_items").set({assignee_id:G8,assigned_by:X,updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","todo").where("assignee_id","is",null).returningAll().executeTakeFirst();if(!Y)return null;let G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}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","=",G8).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,$),await this.attachJiraKeys(X,$),await this.attachReviewVerdicts(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()).leftJoinLateral((J)=>J.selectFrom("thread_message_parts as up").select((K)=>[K.fn.sum(kD`coalesce((up.metadata->'usage'->'providerMetadata'->'openrouter'->'usage'->>'cost')::numeric, 0)`).as("usd"),kD`
2756
+ )`,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow(),G=await this.inTransaction(async(J)=>{return await kD`select pg_advisory_xact_lock(hashtext(${`task-board-key-seq:${$.organizationId}`})::bigint)`.execute(J),Y(J)});return this.itemFromDbRow(G)}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.type!==void 0?{type:X.type}:{},...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.sprintId!==void 0?{sprint_id:X.sprintId}:{},...X.boardColumnOrg!==void 0?{board_column_org:X.boardColumnOrg}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},...X.status!==void 0&&!Np4.has(X.status)?{review_cycle_started_at:null}:{},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(WY({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((G)=>G.or([G("review_cycle_started_at","is not",null),G("status","=","in_review")])).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 listItemsAwaitingArchive($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","=","done").where("i.dismissed_at","is",null).where("i.updated_at","<",$).where((Q)=>Q.exists(Q.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).orderBy("i.updated_at","asc").limit(Z).execute()).map((Q)=>({id:Q.id,organizationId:Q.organizationId}))}async listItemsAwaitingMergedTag($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","in",Lp4).where("i.dismissed_at","is",null).where((Q)=>Q.exists(Q.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).where((Q)=>Q.not(Q.exists(Q.selectFrom("task_board_item_tags as t").innerJoin("organization_tags as g","g.id","t.id").select("t.id").whereRef("t.task_board_item_id","=","i.id").where(kD`lower(g.name)`,"=",$)))).orderBy("i.updated_at","desc").limit(Z).execute()).map((Q)=>({id:Q.id,organizationId:Q.organizationId}))}async claimSweep($,Z,X){let Q=await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("last_swept_at","is",null),Y("last_swept_at","<",X)])).executeTakeFirst();return Number(Q.numUpdatedRows??0)>0}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:AC$(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((K)=>K.and([K("t.updated_at","<",Z),K.or([K("t.last_progress_at","is",null),K("t.last_progress_at","<",Z)])])).limit($).execute();if(Q.length===0)return[];let Y=Q.map((K)=>K.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((K)=>K.id));return Q.filter((K)=>J.has(K.threadId))}async relabelDeliveredFailure($,Z,X){return(await this.db.updateTable("threads").set({failure_reason:X,failure_kind:"ended_after_delivery",updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","failed").where((Y)=>Y.or([Y("failure_kind","is",null),Y("failure_kind","not in",["cancelled",...la])])).returning("id").execute()).length>0}async supersedeFailedThreads($,Z){return(await this.db.updateTable("threads").set({failure_kind:"superseded",updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("status","=","failed").where("failure_kind","is distinct from","cancelled").where((Q)=>Q("id","in",Q.selectFrom("task_board_item_threads").select("thread_id").where("task_board_item_id","=",$).where("organization_id","=",Z))).returning("id").execute()).length}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","=",G8).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where((Y)=>Y.or([Y("t.failure_kind","is",null),Y("t.failure_kind","not in",[...la])])).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=(await this.listPrs(Q,Z)).length>0;if(!lZ1(Y,G))continue;if(Y.reviewCycleStartedAt)continue;if(G){let K=await this.openReviewCycleIfInProgress(Q,Z);if(!K)continue;X.push(K);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((K)=>console.error("[task-board] in_review activity write failed",K))}return X}async openReviewCycleIfInProgress($,Z){let X=await this.db.updateTable("task_board_items").set({review_cycle_started_at:new Date,status:"in_progress"}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("status","=","in_progress"),Y.and([Y("status","=","in_review"),Y("assignee_id","=",G8)])])).where("review_cycle_started_at","is",null).where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!X)return null;let Q=this.itemFromDbRow(X);return await this.attachRefs([Q],Z),Q}async closeReviewCycle($,Z){await this.db.updateTable("task_board_items").set({review_cycle_started_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}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;await this.closeReviewCycle(Q,Z),X.push(await this.update(Q,Z,{status:"in_progress"},Y.updatedBy))}return X}claimConflictResolution($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}async claimInReviewSuperAgentSlot($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_progress",review_cycle_started_at:null,updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",G8).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async claimUnassignedForSuperAgent($,Z,X,Q){let Y=await this.db.updateTable("task_board_items").set({assignee_id:G8,assigned_by:X,updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","todo").where("assignee_id","is",null).returningAll().executeTakeFirst();if(!Y)return null;let G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}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","=",G8).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,$),await this.attachJiraKeys(X,$),await this.attachReviewVerdicts(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()).leftJoinLateral((J)=>J.selectFrom("thread_message_parts as up").select((K)=>[K.fn.sum(kD`coalesce((up.metadata->'usage'->'providerMetadata'->'openrouter'->'usage'->>'cost')::numeric, 0)`).as("usd"),kD`
2757
2757
  case
2758
2758
  when count(distinct up.metadata->'models'->'thinking'->>'provider') = 1
2759
2759
  then max(up.metadata->'models'->'thinking'->>'provider')
@@ -2798,7 +2798,7 @@ ${Y}`:Y}case"media":return"";case"mediaSingle":case"mediaGroup":return ru(gH(X),
2798
2798
 
2799
2799
  ${G}`.trim().slice(0,__$)}function bn4($){let Z=$.fields.priority?.name?.toLowerCase();return Z&&Sn4[Z]||"medium"}async function V_$($,Z,X){if(X.assigneeId)return X;let Q=Z.organizationId,Y=await(await TY($,Q)).automationFor(X.status);if(!Y)return X;let G=await $.storage.taskBoard.claimUnassignedForSuperAgent(X.id,Q,Z.createdBy,hH);if(!G)return X;await $.storage.taskBoard.recordActivity({taskBoardItemId:X.id,action:"assignee_changed",actorId:null,data:{from:null,to:G8}});try{await xD($,G,{instruction:Y.prompt??void 0})}catch(J){return console.warn(`[jira] auto-delegate of ${X.id} rejected, un-delegating:`,J instanceof Error?J.message:J),await $.storage.taskBoard.update(X.id,Q,{assigneeId:null,assignedBy:null},hH)}return G}async function k_$($,Z,X,Q,Y,G,J){let K=Z.organizationId,W=Q.fields.comment;if(W&&W.total===0)return;let H=W&&W.comments.length>=W.total?W.comments:await X.listComments(Q.id),F=await $.storage.jiraIntegrations.knownJiraCommentIds(K,H.map((B)=>B.id)),N=H.filter((B)=>!F.has(B.id)&&B.author?.accountId!==G);if(N.length===0)return;let U=await J.resolve(N.flatMap((B)=>ta(B.body)));for(let B of N){let O=N71(B.body,U).slice(0,__$),D=await $.storage.taskBoard.createComment({taskBoardItemId:Y,organizationId:K,authorId:hH,body:`**${B.author?.displayName??"Jira"} \xB7 via Jira:**
2800
2800
 
2801
- ${O}`});if(!D)continue;try{await $.storage.jiraIntegrations.createCommentLink({commentId:D.id,organizationId:K,jiraCommentId:B.id})}catch(w){if(w.code==="23505"){await $.storage.taskBoard.deleteComment(D.id,K,hH);continue}throw w}}}class v_${ctx;organizationId;ids=new Map;constructor($,Z){this.ctx=$;this.organizationId=Z}async seed($){if($.length===0)return;let Z=await this.ctx.storage.sprints.upsertManyFromJira(this.organizationId,$.map(S_$));for(let[X,Q]of Z)this.ids.set(X,Q)}async localIdFor($){if(!$)return null;let Z=this.ids.get($.id);if(Z)return Z;let X=await this.ctx.storage.sprints.upsertFromJira(this.organizationId,S_$($));return this.ids.set($.id,X),X}}function S_$($){return{jiraSprintId:$.id,name:$.name,state:$.state,startsAt:$.startsAt,endsAt:$.endsAt}}function yn4($,Z){if($.size===0)return[];return Z.filter((X)=>!$.has(X.jiraIssueId))}async function gn4($,Z,X,Q){let Y=Z.organizationId,G=await X.searchIssueIds(`(${Q}) AND issuetype IN standardIssueTypes()`);if(G.size===0)return console.warn(`[jira] scope for org ${Y} came back empty \u2014 skipping reconciliation rather than archiving the whole board`),0;let J=yn4(G,await $.storage.jiraIntegrations.listLinkedIssuesOnBoard(Y));if(J.length===0)return 0;for(let K of J){let W=await $.storage.taskBoard.getById(K.itemId,Y);if(!W||W.status==="archived")continue;let H=await $.storage.taskBoard.update(K.itemId,Y,{status:"archived"},hH);await $.storage.taskBoard.recordActivity({taskBoardItemId:K.itemId,action:"status_changed",actorId:null,data:{from:W.status,to:"archived"}}),h$(Y,H),console.log(`[jira] ${K.jiraIssueKey} is no longer in board ${Z.boardId}'s scope \u2014 archived its card`)}return J.length}async function hn4($,Z){let{organizationId:X,boardId:Q}=Z;if(!Q)throw Error("No Jira board selected");let Y=await $.storage.organizationSettings.get(Z.organizationId),G=V7(Y?.flags,"org_board_columns"),J=G?await Cn4($,Z,Q):fC$(Z.statusMapping);if(J.size===0)throw Error(G?"This Jira board has no columns to mirror":"No status mapping configured");let K=Z.lastSyncedAt===null||Z.rescanPending,W=new CG(Z.siteUrl,Z.email,Z.apiToken),{accountId:H}=await W.myself(),F=new U71(W),N=new Date,U=await W.getBoardScopeJql(Q),B=_n4(Z,U,N),O=new v_$($,X);await O.seed(await W.listBoardSprints(Q));let D={created:0,updated:0,unchanged:0,skipped:0,archived:0,unmappedStatuses:[]},w=new Set,E,j,z=0,A=0;while(z<B71&&A<C_$){A++;let V=await W.searchIssues({jql:B,nextPageToken:j});if(j=V.nextPageToken??void 0,V.issues.length===0){if(!j)break;continue}let q=await $.storage.jiraIntegrations.getLinksByIssueIds(X,V.issues.map((S)=>S.id));await F.resolve(V.issues.flatMap((S)=>[...ta(S.fields.description),...(S.fields.comment?.comments??[]).flatMap((m)=>ta(m.body))]));for(let S of V.issues){if(z>=B71)break;z++;let m=new Date(S.fields.updated);if(Number.isNaN(m.getTime()))throw Error(`Unparseable updated on ${S.key}`);let f=J.get(S.fields.status.name);if(!f||!M_$(S)){if(!f&&M_$(S))w.add(S.fields.status.name);D.skipped++,E=m;continue}let b=q.get(S.id);if(b&&vn4(b.jiraUpdatedAt,m,K)){D.unchanged++,E=m;continue}let l=S.fields.status.name,y={title:S.fields.summary,description:await fn4(Z.siteUrl,S,F),priority:bn4(S),sprintId:await O.localIdFor(K_$(S.sprints))};if(b){let p=b.jiraStatus!==l,Y0=await $.storage.taskBoard.getById(b.itemId,X),B0=await $.storage.taskBoard.update(b.itemId,X,{...y,...p?{status:f}:{}},hH);if(await $.storage.jiraIntegrations.touchLink(b.itemId,{jiraStatus:l}),Y0&&p&&Y0.status!==f)await $.storage.taskBoard.recordActivity({taskBoardItemId:b.itemId,action:"status_changed",actorId:null,data:{from:Y0.status,to:f}});if(p&&!K)B0=await V_$($,Z,B0);await k_$($,Z,W,S,b.itemId,H,F),await $.storage.jiraIntegrations.touchLink(b.itemId,{jiraUpdatedAt:m}),h$(X,B0),D.updated++}else{let p=await $.storage.taskBoard.create({organizationId:X,...y,status:f,by:hH});try{await $.storage.jiraIntegrations.createLink({itemId:p.id,organizationId:X,jiraIssueId:S.id,jiraIssueKey:S.key,jiraUpdatedAt:new Date(0),jiraStatus:l})}catch(Y0){if(Y0.code==="23505"){await $.storage.taskBoard.delete(p.id,X,hH),D.unchanged++,E=m;continue}throw Y0}if(!K)p=await V_$($,Z,p);await k_$($,Z,W,S,p.id,H,F),await $.storage.jiraIntegrations.touchLink(p.id,{jiraUpdatedAt:m}),h$(X,p),D.created++}E=m}if(!j)break}D.unmappedStatuses=[...w].sort();let P=xn4(z,A);if(!P)D.archived=await gn4($,Z,W,U);let I=K&&P;if(E===void 0&&z===0)return{counts:D,watermark:N,rescanPending:I};return{counts:D,watermark:E,rescanPending:I}}var hH="jira",B71=500,kn4=5,C_$=25,__$=1e4,Sn4;var XT0=L(()=>{r9();AD();h6();EU();M5();ZT0();Q71();Sn4={highest:"urgent",high:"high",medium:"medium",low:"low",lowest:"low"}});var x_$={};Z0(x_$,{setJiraSyncRuntime:()=>w71,registerJiraSyncWorkflow:()=>j71,maybeEnqueueJiraStatusPush:()=>Zt4,enqueueJiraCommentPush:()=>E71});import{DBOS as RQ,SchedulerMode as un4}from"@dbos-inc/dbos-sdk";function w71($){QT0=$}function ra(){if(!QT0)throw Error("[jira] sync runtime not initialized \u2014 setJiraSyncRuntime() must run before the workflow fires");return QT0}function jU(){let{db:$,encryptionKey:Z}=ra();return new Vv($,new WG(Z))}function ln4(){return new TQ(ra().db)}async function mn4($){try{let{db:Z}=ra(),X=await jU().getById($);if(!X)return{id:$,error:"integration no longer exists"};if(!X.enabled)return{id:$};let Q=await gK(Z,X.organizationId);if(!Q)return{id:$,error:"organization no longer exists"};let Y=await au(Q,X);return"error"in Y?{id:$,error:Y.error}:{id:$}}catch(Z){return{id:$,error:Z instanceof Error?Z.message:String(Z)}}}async function dn4($,Z){let X=await RQ.runStep(()=>jU().listEnabledIds(),{name:"loadJiraIntegrations"});for(let Q of X){let Y=await RQ.runStep(()=>mn4(Q),{name:`syncJira:${Q}`});if(Y.error)console.warn(`[jira] sync ${Y.id} failed: ${Y.error}`)}}async function pn4($){let Z=jU();if(!(await Z.getByOrg($.organizationId))?.enabled)return null;let Q=await Z.getLinkByItemId($.taskBoardItemId,$.organizationId);if(!Q)return null;if(await Z.hasCommentLink($.commentId))return null;return{jiraIssueId:Q.jiraIssueId}}async function nn4($){return(await ra().db.selectFrom("organization").select("slug").where("id","=",$).executeTakeFirst())?.slug??null}async function tn4($,Z,X){let Q=await jU().getByOrg($);if(!Q?.enabled)return null;let G=(await gK(ra().db,$))?.orgFs;if(!G)return null;let J=new CG(Q.siteUrl,Q.email,Q.apiToken);return I_$(X,{read:(K)=>G.read(K.volume,K.path).catch((W)=>{if(W instanceof EJ)return null;throw W}),listAttachments:()=>J.listAttachments(Z),upload:(K)=>J.addAttachment(Z,K),mediaIdFor:(K)=>J.resolveMediaId(K)})}async function on4($,Z,X){let Q=jU(),Y=await Q.getByOrg($.organizationId);if(!Y?.enabled)return null;let G=await Q.getLinkByItemId($.taskBoardItemId,$.organizationId);if(!G)return null;if(await Q.hasCommentLink($.commentId))return null;return(await new CG(Y.siteUrl,Y.email,Y.apiToken).addComment(G.jiraIssueId,Z,{header:`${$.authorLabel} \xB7 via Studio:`,media:new Map(X)})).id}async function rn4($,Z){try{await jU().createCommentLink({commentId:$.commentId,organizationId:$.organizationId,jiraCommentId:Z})}catch(X){if(X.code!=="23505")throw X}}async function an4($){let Z=$.body.slice(0,in4),X=await RQ.runStep(()=>pn4($),{name:"resolveCommentTarget",retriesAllowed:!0,maxAttempts:3});if(!X)return;let Q=[],Y=nC$(Z);if(Y.length>0){let J=await RQ.runStep(()=>nn4($.organizationId),{name:"readOrgSlug",retriesAllowed:!0,maxAttempts:3});for(let K of R_$(Y,J??""))try{let W=await RQ.runStep(()=>tn4($.organizationId,X.jiraIssueId,K),{name:`attachCommentImage:${K.name}`,retriesAllowed:!0,maxAttempts:3});if(W)Q.push([K.target,W])}catch(W){if(!_C$(W))throw W;console.warn(`[jira] could not attach ${K.ref.path}:`,W)}}let G=await RQ.runStep(()=>on4($,Z,Q),{name:"postCommentToJira",retriesAllowed:!1});if(!G)return;await RQ.runStep(()=>rn4($,G),{name:"recordCommentLink",retriesAllowed:!0,maxAttempts:4})}async function sn4($){let Z=jU(),X=await Z.getByOrg($.organizationId);if(!X?.enabled)return null;let Q=await Z.getLinkByItemId($.itemId,$.organizationId);if(!Q)return null;let Y=await ln4().getById($.itemId,$.organizationId);if(!Y)return null;if(iZ1(X.statusMapping,Y.status,Q.jiraStatus))return null;let J=await new CG(X.siteUrl,X.email,X.apiToken).listTransitions(Q.jiraIssueId),K=yC$({mapping:X.statusMapping,lane:Y.status,currentJiraStatus:Q.jiraStatus,availableTransitions:J.map((H)=>H.to.name)});if(K.kind!=="transition"){if(K.kind==="unreachable")console.warn(`[jira] ${Q.jiraIssueKey} is ${Y.status} on the board, but its workflow offers no transition to ${K.targets.join(" / ")} \u2014 `+"the card will not move on the Jira board");return null}let W=J.find((H)=>H.to.name===K.targetName);if(!W)return null;return{jiraIssueId:Q.jiraIssueId,transitionId:W.id,targetName:K.targetName}}async function en4($,Z){let X=jU(),Q=await X.getByOrg($.organizationId);if(!Q?.enabled)return;let Y=await X.getLinkByItemId($.itemId,$.organizationId);if(!Y||Y.jiraStatus===Z.targetName)return;let G=new CG(Q.siteUrl,Q.email,Q.apiToken);if(await G.getStatusName(Z.jiraIssueId)===Z.targetName){await X.touchLink($.itemId,{jiraStatus:Z.targetName});return}await G.transitionIssue(Z.jiraIssueId,Z.transitionId),await X.touchLink($.itemId,{jiraStatus:Z.targetName})}async function $t4($){let Z=await RQ.runStep(()=>sn4($),{name:"resolveStatusTransition",retriesAllowed:!0,maxAttempts:3});if(!Z)return;await RQ.runStep(()=>en4($,Z),{name:"executeStatusTransition",retriesAllowed:!0,maxAttempts:3})}function Zt4($,Z){if(Z.updatedBy===hH)return;if(!D71||!QT0)return;let X=D71;(async()=>{if(!await jU().getLinkByItemId(Z.id,$))return;await RQ.startWorkflow(X,{queueName:nE,workflowID:`jira-status:${Z.id}:${Z.status}:${Date.parse(Z.updatedAt)}`,enqueueOptions:{queuePartitionKey:$}})({organizationId:$,itemId:Z.id})})().catch((Q)=>{console.warn(`[jira] status push enqueue failed for ${Z.id}:`,Q instanceof Error?Q.message:Q)})}async function E71($,Z){try{if(!L71)return;if(!await $.storage.jiraIntegrations.getLinkByItemId(Z.taskBoardItemId,Z.organizationId))return;await RQ.startWorkflow(L71,{queueName:nE,workflowID:`jira-cmt-push:${Z.commentId}`,enqueueOptions:{queuePartitionKey:Z.organizationId}})(Z)}catch(X){console.warn(`[jira] comment push enqueue failed for ${Z.commentId}:`,X instanceof Error?X.message:X)}}function j71(){if(O71)return;O71=RQ.registerWorkflow(dn4,{name:"jiraSyncWorkflow"}),RQ.registerScheduled(O71,{name:"jiraSyncWorkflow",crontab:cn4,mode:un4.ExactlyOncePerIntervalWhenActive}),L71=RQ.registerWorkflow(an4,{name:"jiraCommentPushWorkflow"}),D71=RQ.registerWorkflow($t4,{name:"jiraStatusPushWorkflow"})}var cn4="2-59/10 * * * *",QT0=null,in4=30000,O71=null,L71=null,D71=null;var YT0=L(()=>{vC$();wO();tu();nA0();bH();Wj();ZT0();q_$();$71();XT0()});function GT0($,Z,X,Q){OG({event:$,organizationId:Z,properties:{task_id:X.id,reports_task:WY(X),...Q}})}function h$($,Z){c5.emit($,{id:crypto.randomUUID(),type:ML$,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()}),Promise.resolve().then(() => (YT0(),x_$)).then((X)=>X.maybeEnqueueJiraStatusPush($,Z)).catch((X)=>{console.warn("[jira] status push hook unavailable:",X)})}function f_$($,Z){c5.emit($,{id:crypto.randomUUID(),type:VL$,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function Xt4($,Z){return $?[$]:Z}async function Cv($,Z,X){let Q=$.metadata?.runMetadata?.taskBoardItemId,Y=!Q&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return Xt4(Q,Y)}async function b_$($,Z,X){let Q=$.organization?.id;if(!Q)return;try{for(let Y of await Cv($,Q,X)){let G=await $.storage.taskBoard.getById(Y,Q),J=Mv(Z),K=Mv(G?.status??"");if(!G||J!==null&&K!==null&&J<=K)continue;let W=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((H)=>console.error("[task-board] activity log write failed",H)),h$(Q,W),Z==="in_progress")GT0("task_run_started",Q,W,{from:G.status})}}catch(Y){console.error("[task-board] run transition failed",Y)}}async function JT0($,Z){let X=$.organization?.id;if(!X)return;try{for(let Q of await Cv($,X,Z)){let Y=await $.storage.taskBoard.openReviewCycleIfInProgress(Q,X);if(!Y)continue;h$(X,Y),GT0("task_run_completed",X,Y,{from:"in_progress",via:"pr_open"})}}catch(Q){console.error("[task-board] review-cycle open failed",Q)}}async function KT0($,Z,X,Q){let Y=$.organization?.id;if(!Y)return;try{let G=dA0(Z);if(!G)return;let J=await Cv($,Y,Q);for(let K of J)await $.storage.taskBoard.linkPr({taskBoardItemId:K,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 su($,Z,X,Q){try{let Y=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let G of Y)h$(X,G),GT0("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 z71($,Z,X),await P71($,Q,Z,X)}function y_$($){return(Mv($.status)??-1)>=pA0.in_review||Boolean($.reviewCycleStartedAt)}async function z71($,Z,X){try{let Q=await $.failedRunInfo(Z,X);if(!Q)return;let Y=IC$(Q);for(let G of await $.linkedTaskIds(Z,X)){let J=await $.getById(G,X);if(!J)continue;if(y_$(J))await $.relabelDeliveredFailure(Z,X,Gt4).catch(()=>{});if(J.status!=="in_progress")continue;if(J.reviewCycleStartedAt)continue;if(J.threads.some((H)=>H.hasMessages&&H.status==="in_progress"))continue;let K=J.retryAttempts;if(K<Y){let H=N7(Yt4,Qt4,K,2,0.5);if(!await $.scheduleRunRetry(G,X,K+1,new Date(Date.now()+H)))continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"in_progress",retry:K+1,of:Y,reason:Q.errorText??Q.kind}}).catch(()=>{});continue}let W=await $.returnToTodoAfterFailure(G,X,J.updatedBy);if(!W)continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q.errorText??Q.kind,retriesSpent:K}}).catch(()=>{}),h$(X,W),GT0("task_run_failed",X,J,{reason:Q.kind??"error",retries_spent:K})}}catch(Q){console.error("[task-board] failed-run reaction failed",Q)}}async function P71($,Z,X,Q){try{for(let Y of await $.linkedTaskIds(X,Q)){let G=await $.getById(Y,Q);if(!G)continue;if(y_$(G))continue;if(G.threads.some((K)=>K.hasMessages&&(K.status===null||!ia.has(K.status))))continue;if((await $.listPrs(Y,Q)).length>0)continue;await _L$(Z,Q,Y)}}catch(Y){console.error("[task-board] quota refund pass failed",Y)}}async function A71($,Z){if(Z.status!=="in_progress"||!RY(Z))return;try{let X=await $.storage.taskBoard.update(Z.id,Z.organizationId,{status:"in_review"},Z.updatedBy);await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"in_review"}}).catch(()=>{}),h$(Z.organizationId,X)}catch(X){console.error(`[task-board] parking ${Z.id} for review failed`,X)}}async function uH($,Z,X){let Q=Z.organizationId;if(Z.assigneeId!==G8)return!1;try{await A71($,Z);let Y=await $.storage.taskBoard.unassignSuperAgent(Z.id,Q,Z.updatedBy);if(!Y)return!1;return await M6($,{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}`),h$(Q,Y),!0}catch(Y){return console.error(`[task-board] handing ${Z.id} to a human failed`,Y),!1}}async function g_$($,Z,X){if(!(X instanceof LQ))return!1;if(X.reason!=="runs_exhausted")return!1;return await uH($,Z,"per-task run limit reached \u2014 the Super Agent can no longer re-dispatch "+"itself on this task. Re-run it manually to continue."),!0}async function h_$($,Z){let X=$.organization?.id;if(!X)return;try{let Q=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let Y of Q)h$(X,Y)}catch(Q){console.error("[task-board] thread-run reopen failed",Q)}}function u_$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function c_$($){if(Jt4.test($))return!0;return Kt4.test($)&&Wt4.test($)}var Qt4=30000,Yt4=120000,Gt4="Run ended after it had already delivered \u2014 the task moved on without it",Jt4,Kt4,Wt4;var M5=L(()=>{uJ();x4();bH();nu();qC$();J4();ma();h6();IX();yH();Jt4=/\bgh\s+pr\s+create\b/,Kt4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,Wt4=/(?:-X|--request)\s+POST/});function Ht4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&($.harnessId==="decopilot"||$.harnessId==="claude-code"))return"nudge";return"none"}function Ft4($){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(`
2801
+ ${O}`});if(!D)continue;try{await $.storage.jiraIntegrations.createCommentLink({commentId:D.id,organizationId:K,jiraCommentId:B.id})}catch(w){if(w.code==="23505"){await $.storage.taskBoard.deleteComment(D.id,K,hH);continue}throw w}}}class v_${ctx;organizationId;ids=new Map;constructor($,Z){this.ctx=$;this.organizationId=Z}async seed($){if($.length===0)return;let Z=await this.ctx.storage.sprints.upsertManyFromJira(this.organizationId,$.map(S_$));for(let[X,Q]of Z)this.ids.set(X,Q)}async localIdFor($){if(!$)return null;let Z=this.ids.get($.id);if(Z)return Z;let X=await this.ctx.storage.sprints.upsertFromJira(this.organizationId,S_$($));return this.ids.set($.id,X),X}}function S_$($){return{jiraSprintId:$.id,name:$.name,state:$.state,startsAt:$.startsAt,endsAt:$.endsAt}}function yn4($,Z){if($.size===0)return[];return Z.filter((X)=>!$.has(X.jiraIssueId))}async function gn4($,Z,X,Q){let Y=Z.organizationId,G=await X.searchIssueIds(`(${Q}) AND issuetype IN standardIssueTypes()`);if(G.size===0)return console.warn(`[jira] scope for org ${Y} came back empty \u2014 skipping reconciliation rather than archiving the whole board`),0;let J=yn4(G,await $.storage.jiraIntegrations.listLinkedIssuesOnBoard(Y));if(J.length===0)return 0;for(let K of J){let W=await $.storage.taskBoard.getById(K.itemId,Y);if(!W||W.status==="archived")continue;let H=await $.storage.taskBoard.update(K.itemId,Y,{status:"archived"},hH);await $.storage.taskBoard.recordActivity({taskBoardItemId:K.itemId,action:"status_changed",actorId:null,data:{from:W.status,to:"archived"}}),h$(Y,H),console.log(`[jira] ${K.jiraIssueKey} is no longer in board ${Z.boardId}'s scope \u2014 archived its card`)}return J.length}async function hn4($,Z){let{organizationId:X,boardId:Q}=Z;if(!Q)throw Error("No Jira board selected");let Y=await $.storage.organizationSettings.get(Z.organizationId),G=V7(Y?.flags,"org_board_columns"),J=G?await Cn4($,Z,Q):fC$(Z.statusMapping);if(J.size===0)throw Error(G?"This Jira board has no columns to mirror":"No status mapping configured");let K=Z.lastSyncedAt===null||Z.rescanPending,W=new CG(Z.siteUrl,Z.email,Z.apiToken),{accountId:H}=await W.myself(),F=new U71(W),N=new Date,U=await W.getBoardScopeJql(Q),B=_n4(Z,U,N),O=new v_$($,X);await O.seed(await W.listBoardSprints(Q));let D={created:0,updated:0,unchanged:0,skipped:0,archived:0,unmappedStatuses:[]},w=new Set,E,j,z=0,A=0;while(z<B71&&A<C_$){A++;let V=await W.searchIssues({jql:B,nextPageToken:j});if(j=V.nextPageToken??void 0,V.issues.length===0){if(!j)break;continue}let q=await $.storage.jiraIntegrations.getLinksByIssueIds(X,V.issues.map((S)=>S.id));await F.resolve(V.issues.flatMap((S)=>[...ta(S.fields.description),...(S.fields.comment?.comments??[]).flatMap((m)=>ta(m.body))]));for(let S of V.issues){if(z>=B71)break;z++;let m=new Date(S.fields.updated);if(Number.isNaN(m.getTime()))throw Error(`Unparseable updated on ${S.key}`);let f=J.get(S.fields.status.name);if(!f||!M_$(S)){if(!f&&M_$(S))w.add(S.fields.status.name);D.skipped++,E=m;continue}let b=q.get(S.id);if(b&&vn4(b.jiraUpdatedAt,m,K)){D.unchanged++,E=m;continue}let l=S.fields.status.name,y={title:S.fields.summary,description:await fn4(Z.siteUrl,S,F),priority:bn4(S),sprintId:await O.localIdFor(K_$(S.sprints)),boardColumnOrg:G?X:null};if(b){let p=b.jiraStatus!==l,Y0=await $.storage.taskBoard.getById(b.itemId,X),B0=await $.storage.taskBoard.update(b.itemId,X,{...y,...p?{status:f}:{}},hH);if(await $.storage.jiraIntegrations.touchLink(b.itemId,{jiraStatus:l}),Y0&&p&&Y0.status!==f)await $.storage.taskBoard.recordActivity({taskBoardItemId:b.itemId,action:"status_changed",actorId:null,data:{from:Y0.status,to:f}});if(p&&!K)B0=await V_$($,Z,B0);await k_$($,Z,W,S,b.itemId,H,F),await $.storage.jiraIntegrations.touchLink(b.itemId,{jiraUpdatedAt:m}),h$(X,B0),D.updated++}else{let p=await $.storage.taskBoard.create({organizationId:X,...y,status:f,by:hH});try{await $.storage.jiraIntegrations.createLink({itemId:p.id,organizationId:X,jiraIssueId:S.id,jiraIssueKey:S.key,jiraUpdatedAt:new Date(0),jiraStatus:l})}catch(Y0){if(Y0.code==="23505"){await $.storage.taskBoard.delete(p.id,X,hH),D.unchanged++,E=m;continue}throw Y0}if(!K)p=await V_$($,Z,p);await k_$($,Z,W,S,p.id,H,F),await $.storage.jiraIntegrations.touchLink(p.id,{jiraUpdatedAt:m}),h$(X,p),D.created++}E=m}if(!j)break}D.unmappedStatuses=[...w].sort();let P=xn4(z,A);if(!P)D.archived=await gn4($,Z,W,U);let I=K&&P;if(E===void 0&&z===0)return{counts:D,watermark:N,rescanPending:I};return{counts:D,watermark:E,rescanPending:I}}var hH="jira",B71=500,kn4=5,C_$=25,__$=1e4,Sn4;var XT0=L(()=>{r9();AD();h6();EU();M5();ZT0();Q71();Sn4={highest:"urgent",high:"high",medium:"medium",low:"low",lowest:"low"}});var x_$={};Z0(x_$,{setJiraSyncRuntime:()=>w71,registerJiraSyncWorkflow:()=>j71,maybeEnqueueJiraStatusPush:()=>Zt4,enqueueJiraCommentPush:()=>E71});import{DBOS as RQ,SchedulerMode as un4}from"@dbos-inc/dbos-sdk";function w71($){QT0=$}function ra(){if(!QT0)throw Error("[jira] sync runtime not initialized \u2014 setJiraSyncRuntime() must run before the workflow fires");return QT0}function jU(){let{db:$,encryptionKey:Z}=ra();return new Vv($,new WG(Z))}function ln4(){return new TQ(ra().db)}async function mn4($){try{let{db:Z}=ra(),X=await jU().getById($);if(!X)return{id:$,error:"integration no longer exists"};if(!X.enabled)return{id:$};let Q=await gK(Z,X.organizationId);if(!Q)return{id:$,error:"organization no longer exists"};let Y=await au(Q,X);return"error"in Y?{id:$,error:Y.error}:{id:$}}catch(Z){return{id:$,error:Z instanceof Error?Z.message:String(Z)}}}async function dn4($,Z){let X=await RQ.runStep(()=>jU().listEnabledIds(),{name:"loadJiraIntegrations"});for(let Q of X){let Y=await RQ.runStep(()=>mn4(Q),{name:`syncJira:${Q}`});if(Y.error)console.warn(`[jira] sync ${Y.id} failed: ${Y.error}`)}}async function pn4($){let Z=jU();if(!(await Z.getByOrg($.organizationId))?.enabled)return null;let Q=await Z.getLinkByItemId($.taskBoardItemId,$.organizationId);if(!Q)return null;if(await Z.hasCommentLink($.commentId))return null;return{jiraIssueId:Q.jiraIssueId}}async function nn4($){return(await ra().db.selectFrom("organization").select("slug").where("id","=",$).executeTakeFirst())?.slug??null}async function tn4($,Z,X){let Q=await jU().getByOrg($);if(!Q?.enabled)return null;let G=(await gK(ra().db,$))?.orgFs;if(!G)return null;let J=new CG(Q.siteUrl,Q.email,Q.apiToken);return I_$(X,{read:(K)=>G.read(K.volume,K.path).catch((W)=>{if(W instanceof EJ)return null;throw W}),listAttachments:()=>J.listAttachments(Z),upload:(K)=>J.addAttachment(Z,K),mediaIdFor:(K)=>J.resolveMediaId(K)})}async function on4($,Z,X){let Q=jU(),Y=await Q.getByOrg($.organizationId);if(!Y?.enabled)return null;let G=await Q.getLinkByItemId($.taskBoardItemId,$.organizationId);if(!G)return null;if(await Q.hasCommentLink($.commentId))return null;return(await new CG(Y.siteUrl,Y.email,Y.apiToken).addComment(G.jiraIssueId,Z,{header:`${$.authorLabel} \xB7 via Studio:`,media:new Map(X)})).id}async function rn4($,Z){try{await jU().createCommentLink({commentId:$.commentId,organizationId:$.organizationId,jiraCommentId:Z})}catch(X){if(X.code!=="23505")throw X}}async function an4($){let Z=$.body.slice(0,in4),X=await RQ.runStep(()=>pn4($),{name:"resolveCommentTarget",retriesAllowed:!0,maxAttempts:3});if(!X)return;let Q=[],Y=nC$(Z);if(Y.length>0){let J=await RQ.runStep(()=>nn4($.organizationId),{name:"readOrgSlug",retriesAllowed:!0,maxAttempts:3});for(let K of R_$(Y,J??""))try{let W=await RQ.runStep(()=>tn4($.organizationId,X.jiraIssueId,K),{name:`attachCommentImage:${K.name}`,retriesAllowed:!0,maxAttempts:3});if(W)Q.push([K.target,W])}catch(W){if(!_C$(W))throw W;console.warn(`[jira] could not attach ${K.ref.path}:`,W)}}let G=await RQ.runStep(()=>on4($,Z,Q),{name:"postCommentToJira",retriesAllowed:!1});if(!G)return;await RQ.runStep(()=>rn4($,G),{name:"recordCommentLink",retriesAllowed:!0,maxAttempts:4})}async function sn4($){let Z=jU(),X=await Z.getByOrg($.organizationId);if(!X?.enabled)return null;let Q=await Z.getLinkByItemId($.itemId,$.organizationId);if(!Q)return null;let Y=await ln4().getById($.itemId,$.organizationId);if(!Y)return null;if(iZ1(X.statusMapping,Y.status,Q.jiraStatus))return null;let J=await new CG(X.siteUrl,X.email,X.apiToken).listTransitions(Q.jiraIssueId),K=yC$({mapping:X.statusMapping,lane:Y.status,currentJiraStatus:Q.jiraStatus,availableTransitions:J.map((H)=>H.to.name)});if(K.kind!=="transition"){if(K.kind==="unreachable")console.warn(`[jira] ${Q.jiraIssueKey} is ${Y.status} on the board, but its workflow offers no transition to ${K.targets.join(" / ")} \u2014 `+"the card will not move on the Jira board");return null}let W=J.find((H)=>H.to.name===K.targetName);if(!W)return null;return{jiraIssueId:Q.jiraIssueId,transitionId:W.id,targetName:K.targetName}}async function en4($,Z){let X=jU(),Q=await X.getByOrg($.organizationId);if(!Q?.enabled)return;let Y=await X.getLinkByItemId($.itemId,$.organizationId);if(!Y||Y.jiraStatus===Z.targetName)return;let G=new CG(Q.siteUrl,Q.email,Q.apiToken);if(await G.getStatusName(Z.jiraIssueId)===Z.targetName){await X.touchLink($.itemId,{jiraStatus:Z.targetName});return}await G.transitionIssue(Z.jiraIssueId,Z.transitionId),await X.touchLink($.itemId,{jiraStatus:Z.targetName})}async function $t4($){let Z=await RQ.runStep(()=>sn4($),{name:"resolveStatusTransition",retriesAllowed:!0,maxAttempts:3});if(!Z)return;await RQ.runStep(()=>en4($,Z),{name:"executeStatusTransition",retriesAllowed:!0,maxAttempts:3})}function Zt4($,Z){if(Z.updatedBy===hH)return;if(!D71||!QT0)return;let X=D71;(async()=>{if(!await jU().getLinkByItemId(Z.id,$))return;await RQ.startWorkflow(X,{queueName:nE,workflowID:`jira-status:${Z.id}:${Z.status}:${Date.parse(Z.updatedAt)}`,enqueueOptions:{queuePartitionKey:$}})({organizationId:$,itemId:Z.id})})().catch((Q)=>{console.warn(`[jira] status push enqueue failed for ${Z.id}:`,Q instanceof Error?Q.message:Q)})}async function E71($,Z){try{if(!L71)return;if(!await $.storage.jiraIntegrations.getLinkByItemId(Z.taskBoardItemId,Z.organizationId))return;await RQ.startWorkflow(L71,{queueName:nE,workflowID:`jira-cmt-push:${Z.commentId}`,enqueueOptions:{queuePartitionKey:Z.organizationId}})(Z)}catch(X){console.warn(`[jira] comment push enqueue failed for ${Z.commentId}:`,X instanceof Error?X.message:X)}}function j71(){if(O71)return;O71=RQ.registerWorkflow(dn4,{name:"jiraSyncWorkflow"}),RQ.registerScheduled(O71,{name:"jiraSyncWorkflow",crontab:cn4,mode:un4.ExactlyOncePerIntervalWhenActive}),L71=RQ.registerWorkflow(an4,{name:"jiraCommentPushWorkflow"}),D71=RQ.registerWorkflow($t4,{name:"jiraStatusPushWorkflow"})}var cn4="2-59/10 * * * *",QT0=null,in4=30000,O71=null,L71=null,D71=null;var YT0=L(()=>{vC$();wO();tu();nA0();bH();Wj();ZT0();q_$();$71();XT0()});function GT0($,Z,X,Q){OG({event:$,organizationId:Z,properties:{task_id:X.id,reports_task:WY(X),...Q}})}function h$($,Z){c5.emit($,{id:crypto.randomUUID(),type:ML$,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()}),Promise.resolve().then(() => (YT0(),x_$)).then((X)=>X.maybeEnqueueJiraStatusPush($,Z)).catch((X)=>{console.warn("[jira] status push hook unavailable:",X)})}function f_$($,Z){c5.emit($,{id:crypto.randomUUID(),type:VL$,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function Xt4($,Z){return $?[$]:Z}async function Cv($,Z,X){let Q=$.metadata?.runMetadata?.taskBoardItemId,Y=!Q&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return Xt4(Q,Y)}async function b_$($,Z,X){let Q=$.organization?.id;if(!Q)return;try{for(let Y of await Cv($,Q,X)){let G=await $.storage.taskBoard.getById(Y,Q),J=Mv(Z),K=Mv(G?.status??"");if(!G||J!==null&&K!==null&&J<=K)continue;let W=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((H)=>console.error("[task-board] activity log write failed",H)),h$(Q,W),Z==="in_progress")GT0("task_run_started",Q,W,{from:G.status})}}catch(Y){console.error("[task-board] run transition failed",Y)}}async function JT0($,Z){let X=$.organization?.id;if(!X)return;try{for(let Q of await Cv($,X,Z)){let Y=await $.storage.taskBoard.openReviewCycleIfInProgress(Q,X);if(!Y)continue;h$(X,Y),GT0("task_run_completed",X,Y,{from:"in_progress",via:"pr_open"})}}catch(Q){console.error("[task-board] review-cycle open failed",Q)}}async function KT0($,Z,X,Q){let Y=$.organization?.id;if(!Y)return;try{let G=dA0(Z);if(!G)return;let J=await Cv($,Y,Q);for(let K of J)await $.storage.taskBoard.linkPr({taskBoardItemId:K,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 su($,Z,X,Q){try{let Y=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let G of Y)h$(X,G),GT0("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 z71($,Z,X),await P71($,Q,Z,X)}function y_$($){return(Mv($.status)??-1)>=pA0.in_review||Boolean($.reviewCycleStartedAt)}async function z71($,Z,X){try{let Q=await $.failedRunInfo(Z,X);if(!Q)return;let Y=IC$(Q);for(let G of await $.linkedTaskIds(Z,X)){let J=await $.getById(G,X);if(!J)continue;if(y_$(J))await $.relabelDeliveredFailure(Z,X,Gt4).catch(()=>{});if(J.status!=="in_progress")continue;if(J.reviewCycleStartedAt)continue;if(J.threads.some((H)=>H.hasMessages&&H.status==="in_progress"))continue;let K=J.retryAttempts;if(K<Y){let H=N7(Yt4,Qt4,K,2,0.5);if(!await $.scheduleRunRetry(G,X,K+1,new Date(Date.now()+H)))continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"in_progress",retry:K+1,of:Y,reason:Q.errorText??Q.kind}}).catch(()=>{});continue}let W=await $.returnToTodoAfterFailure(G,X,J.updatedBy);if(!W)continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q.errorText??Q.kind,retriesSpent:K}}).catch(()=>{}),h$(X,W),GT0("task_run_failed",X,J,{reason:Q.kind??"error",retries_spent:K})}}catch(Q){console.error("[task-board] failed-run reaction failed",Q)}}async function P71($,Z,X,Q){try{for(let Y of await $.linkedTaskIds(X,Q)){let G=await $.getById(Y,Q);if(!G)continue;if(y_$(G))continue;if(G.threads.some((K)=>K.hasMessages&&(K.status===null||!ia.has(K.status))))continue;if((await $.listPrs(Y,Q)).length>0)continue;await _L$(Z,Q,Y)}}catch(Y){console.error("[task-board] quota refund pass failed",Y)}}async function A71($,Z){if(Z.status!=="in_progress"||!RY(Z))return;try{let X=await $.storage.taskBoard.update(Z.id,Z.organizationId,{status:"in_review"},Z.updatedBy);await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"in_review"}}).catch(()=>{}),h$(Z.organizationId,X)}catch(X){console.error(`[task-board] parking ${Z.id} for review failed`,X)}}async function uH($,Z,X){let Q=Z.organizationId;if(Z.assigneeId!==G8)return!1;try{await A71($,Z);let Y=await $.storage.taskBoard.unassignSuperAgent(Z.id,Q,Z.updatedBy);if(!Y)return!1;return await M6($,{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}`),h$(Q,Y),!0}catch(Y){return console.error(`[task-board] handing ${Z.id} to a human failed`,Y),!1}}async function g_$($,Z,X){if(!(X instanceof LQ))return!1;if(X.reason!=="runs_exhausted")return!1;return await uH($,Z,"per-task run limit reached \u2014 the Super Agent can no longer re-dispatch "+"itself on this task. Re-run it manually to continue."),!0}async function h_$($,Z){let X=$.organization?.id;if(!X)return;try{let Q=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let Y of Q)h$(X,Y)}catch(Q){console.error("[task-board] thread-run reopen failed",Q)}}function u_$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function c_$($){if(Jt4.test($))return!0;return Kt4.test($)&&Wt4.test($)}var Qt4=30000,Yt4=120000,Gt4="Run ended after it had already delivered \u2014 the task moved on without it",Jt4,Kt4,Wt4;var M5=L(()=>{uJ();x4();bH();nu();qC$();J4();ma();h6();IX();yH();Jt4=/\bgh\s+pr\s+create\b/,Kt4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,Wt4=/(?:-X|--request)\s+POST/});function Ht4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&($.harnessId==="decopilot"||$.harnessId==="claude-code"))return"nudge";return"none"}function Ft4($){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(`
2802
2802
  `)}async function Nt4($,Z,X){await du($,Z,X,{messageId:`stall-nudge-${Z.id}-${X.id}`,prompt:Ft4(X.harness_id),workflowID:`stall-nudge:${Z.id}:${X.id}`})}async function Ut4($,Z){let X=await $.storage.threads.get(Z);if(!X)return{action:"none",thread:null};return{action:Ht4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id}),thread:X}}function Bt4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return ca($,Z)}async function Ot4($,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||!Bt4(Y))continue;if(await $.storage.threads.markRunFailed(Q.threadId,T71,"abandoned"))X.push(Q.threadId),console.warn(`[task-board] failed never-started thread ${Q.threadId} on ${Z.id}`)}return X}async function l_$($,Z){let X=$.organization?.id;if(!X)return;for(let Q of Z){if(Q.status==="in_progress")try{if((await Ot4($,Q)).length>0)continue}catch(J){console.error(`[task-board] reaping threads for ${Q.id} failed`,J)}let Y;try{Y=Q.repo!=null&&(await $.storage.taskBoard.listPrs(Q.id,X)).length>0}catch(J){console.error(`[task-board] listPrs for ${Q.id} failed`,J);continue}if(!lZ1(Q,Y))continue;let G=Q.threads.find((J)=>J.hasMessages);if(!G)continue;try{let{action:J,thread:K}=await Ut4($,G.threadId);if(J==="none"||!K)continue;if(J==="advance")await su($.storage.taskBoard,G.threadId,X,$.storage.organizationBilling);else await Nt4($,Q,K)}catch(J){console.error(`[task-board] stall recovery failed for ${Q.id}`,J)}}}var T71="Run never started \u2014 no pod picked it up before the idle window elapsed";var R71=L(()=>{gA0();bH();M5()});import{z as eJ}from"zod";var Lt4,_v;var I71=L(()=>{AD();k0();YY();bK();R71();Lt4=eJ.object({key:eJ.string(),title:eJ.string(),position:eJ.number(),role:eJ.string().nullable()}),_v=c({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization, plus the `owner/name` repos this organization has imported (the valid values for a task's `repo` field).",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:eJ.object({}),outputSchema:eJ.object({items:eJ.array(yu),repos:eJ.array(eJ.string()),sprints:eJ.array(Zk$),columns:eJ.array(Lt4)}),handler:async($,Z)=>{a(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let[Q,{items:Y},G,J]=await Promise.all([Z.storage.taskBoard.list(X),Z.storage.connections.list(X,{slug:"mcp-github"}),Z.storage.sprints.listByOrg(X),TY(Z,X).then((W)=>W.columns())]),K=CO$(Y);return l_$(Z,Q),{items:Q,repos:K,sprints:G,columns:J}}})});import{z as _G}from"zod";function Et4($){return wt4.some((Z)=>$[Z]!==void 0)}function jt4($,Z){let X=[];for(let{field:G,action:J}of Dt4){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 zt4($,Z){if($!==G8)return!1;if(!Z)return!1;return Z.assigneeId!==G8?!0:Z.status==="todo"}function At4($,Z,X){let Q=$!==void 0&&Pt4.has($),Y=Z!==void 0&&RY(Z);return X&&Q&&Y}function q71($,Z){return $!==void 0&&dZ1($)&&!Z}var Dt4,wt4,Pt4,vv;var WT0=L(()=>{AD();k0();r9();bK();yH();p91();EU();IX();PD();M5();nu();uJ();Dt4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"type",action:"type_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}],wt4=["title","description","status","priority","type","assigneeId","repo","dueDate","sortOrder","tagIds"];Pt4=new Set(["approved","merged","post_deploy_validation","done","archived"]);vv=c({name:"TASK_BOARD_ITEM_UPDATE",description:"Update a task board item's fields (title, description, status, priority, assignee), and/or link a chat thread to it.",annotations:{title:"Update Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_G.object({id:_G.string(),title:_G.string().min(1).max(KA0).optional(),description:_G.string().max(JA0).nullable().optional(),status:HU.optional(),priority:jv.optional(),type:Ma.optional(),assigneeId:_G.string().nullable().optional(),repo:_G.string().max(WA0).nullable().optional(),dueDate:_G.string().datetime().nullable().optional(),sortOrder:_G.number().optional(),tagIds:_G.array(_G.string()).max(1000).optional(),linkThreadId:_G.string().optional(),prUrl:_G.string().nullable().optional().describe("GitHub pull request URL to link to this task, e.g. https://github.com/owner/repo/pull/123. Pass it after opening a PR for an existing card; linking one is what starts its review.")}),outputSchema:_G.object({item:yu}),handler:async($,Z)=>{a(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=$.prUrl?SD($.prUrl):null;if($.prUrl&&!Q)throw Error(`Not a GitHub pull request URL: ${$.prUrl} (expected https://github.com/<owner>/<repo>/pull/<number>)`);if($.assigneeId)await HA0(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 Y=Et4($),G=Y?await Z.storage.taskBoard.getById($.id,X):null;if(Y&&!G)throw Error(`Task board item not found: ${$.id}`);if($.status!==void 0)await YA0(await TY(Z,X),$.status);if($.status!==void 0&&dZ1($.status)){let F=await Z.storage.organizationSettings.get(X);if(q71($.status,V7(F?.flags,"delivery_lanes_enabled")))throw Error("Delivery lanes are not enabled for this organization \u2014 enable "+"them in Settings before moving a task to Approved, Merged, or Post-deploy Validation.")}let J=WU.getStore()!==void 0;if(At4($.status,G??void 0,J))throw Error("This task is under review \u2014 a run can't move it to Done or Archived. "+"Leave it for the reviewer; only a person, or TASK_BOARD_REVIEW_DECISION on a reviewer's own run, closes out a task under review.");let K=$.assigneeId!==void 0&&$.assigneeId!==(G?.assigneeId??null),W=zt4($.assigneeId,G);if(G&&WY(G)){if($.title!==void 0||$.description!==void 0||$.priority!==void 0)throw Error("This task was generated from your report and can't be edited \u2014 create your own task instead.");if(W)await eh(Z,G,pL())}if($.tagIds!==void 0){let F=await Z.storage.tags.listOrgTags(X),N=new Set(F.map((U)=>U.id));for(let U of $.tagIds)if(!N.has(U))throw Error(`Tag not found: ${U}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,a0(Z))}let H;if(Y)H=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:W?"todo":$.status,priority:$.priority,type:$.type,assigneeId:$.assigneeId,assignedBy:K?$.assigneeId?a0(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder},a0(Z));else{let F=await Z.storage.taskBoard.getById($.id,X);if(!F)throw Error(`Task board item not found: ${$.id}`);H=F}if(Q)await Z.storage.taskBoard.linkPr({taskBoardItemId:H.id,organizationId:X,url:Q.url,prNumber:Q.number,repoOwner:Q.owner,repoName:Q.repo,connectionId:null});if(G){let F=a0(Z),N=jt4(G,H);if(N.length>0)await MC$(Z,N.map((U)=>({taskBoardItemId:H.id,actorId:F,...U,alsoSubscribe:U.action==="assignee_changed"&&H.assigneeId!==G8?[H.assigneeId]:void 0})))}if(G&&H.description!==G.description)await Z.storage.notifications.notifyMentions({taskBoardItemId:H.id,organizationId:X,actorId:a0(Z),body:H.description??"",previousBody:G.description});if(Y||$.linkThreadId||Q)h$(X,H);if(W)await xD(Z,H,{userInitiated:!0});return{item:H}}})});import{z as HT0}from"zod";var xv;var M71=L(()=>{k0();M5();xv=c({name:"TASK_BOARD_ITEM_DELETE",description:"Delete a task board item. A reports-pushed task also dismisses its finding, so the next diagnostic import won't re-create the card.",annotations:{title:"Delete Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:HT0.object({id:HT0.string()}),outputSchema:HT0.object({success:HT0.boolean()}),handler:async($,Z)=>{a(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,a0(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return f_$(X,$.id),{success:!0}}})});function fv($){if($.length===0)return!1;let Z=new Map;for(let X of $){let Q=`${X.repoOwner}/${X.repoName}`.toLowerCase(),Y=Z.get(Q);if(Y)Y.push(X);else Z.set(Q,[X])}return[...Z.values()].every(Tt4)}function Tt4($){return $.some((Z)=>Z.merged===!0)&&$.every((Z)=>Z.merged===!0||Z.state==="closed")}async function Rt4($,Z,X,Q){let Y=await $.storage.taskBoard.getById(X,Z);if(!Y||Y.status!=="done")return!1;let G=await $.storage.taskBoard.listPrs(X,Z),J=await Promise.all(G.map(async(H)=>({...H,...await Q($,Z,H)})));if(!fv(J))return!1;let K=await(await TY($,Z)).archiveColumn();if(!K)return!1;let W=await $.storage.taskBoard.update(X,Z,{status:K},Y.updatedBy);return await M6($,{taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:"done",to:K,reason:"merged_pr_auto_archive"}}),h$(Z,W),!0}async function m_$($,Z,X,Q=NT0){let Y=0;for(let G of X)try{if(await Rt4($,Z,G,Q))Y+=1}catch(J){console.error(`[task-board-archive] ${G} failed`,J)}return{archived:Y}}function FT0($){let Z=new Map;for(let{id:X,organizationId:Q}of $){let Y=Z.get(Q);if(Y)Y.push(X);else Z.set(Q,[X])}return[...Z].map(([X,Q])=>({organizationId:X,itemIds:Q}))}var eu=L(()=>{AD();IX();vG();M5()});function UT0($){return $.replace(/\/api\/[^/\s)]+\/fs\/([^/\s)]+)\/read\?path=([^)\s]+)/g,(Z,X,Q)=>{let Y;try{Y=decodeURIComponent(Q)}catch{return Z}if(Y.startsWith("/")||Y.split("/").includes(".."))return Z;return MH(decodeURIComponent(X),Y)})}function BT0($,Z){return Z===$?null:"The image and file links in that description are real paths in this sandbox, not URLs \u2014 `Read` them. A screenshot the task points at is usually the clearest statement of what it wants."}var V71=L(()=>{cz()});function It4($){let Z=new Map($.map((G)=>[G.id,G])),X=new Map;for(let G of bu($)){let J=d_$(G.owner,G.repo);X.set(J,[...X.get(J)??[],G])}if(X.size!==1)return null;let Q=[...X.values()][0],Y=Q.find((G)=>{let J=Z.get(G.connectionId);return J?zz(J):!1})??Q[0];return{connectionId:Y.connectionId,owner:Y.owner,name:Y.repo,installationId:Y.installationId,url:`https://github.com/${Y.owner}/${Y.repo}`}}async function OT0($,Z){if(!AZ0())return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"hosted sandbox unavailable \u2014 running Decopilot"),null;try{let{items:X}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Q=It4(X);if(Q)return{repo:Q};let Y=new Map;for(let J of bu(X)){let K=d_$(J.owner,J.repo);if(!Y.has(K))Y.set(K,{connectionId:J.connectionId,repo:`${J.owner}/${J.repo}`})}let G=Y;if(G.size===0)return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"no importable repos \u2014 running Decopilot"),null;return console.warn(`[task-board] claude-code for org ${Z}: ${G.size} importable repos \u2014 the run picks one with TASK_ADD_REPO`),{choices:[...G.values()]}}catch(X){return console.warn("[task-board] repo lookup for claude-code failed",X),null}}function i_$($,Z,X){let Q=["You've been assigned this task. Complete it and finish with a pull request if it makes sense (like a coding task) or is explicitly requested.","","You are running AUTONOMOUSLY \u2014 no human is watching, so drive this to "+"completion yourself. Make reasonable decisions and move on; do not stop to ask for confirmation.","",`Title: ${$.title}`];if($.description){let Y=UT0($.description);Q.push("","Description:",Y);let G=BT0($.description,Y);if(G)Q.push("",G)}if(Q.push("",Z?`The repository ${Z.owner}/${Z.name} is already cloned at your working directory, on its own branch. \`git\` and \`gh\` are authenticated. ${jr}`:["Your working directory is EMPTY: this organization has several repositories, so nothing has been cloned yet. FIRST call `mcp__studio__TASK_ADD_REPO` with the connectionId of the repository this task is about. It clones that repository into your working directory and waits for the checkout, so once it returns the repository is there on its own branch and `git` and `gh` are authenticated. Do not read files, run `git`, or run `gh` before it returns; there is nothing there yet.","","Repositories in this organization:",...(X?.repoChoices??[]).map((Y)=>`- ${Y.repo} (connectionId: ${Y.connectionId})`),X?.repoChoices?.length?"Start with the one the task is about. If it turns out to need a change in "+"another of them too, call `mcp__studio__TASK_ADD_REPO` again \u2014 repositories "+"accumulate, so a second call adds a checkout beside the first rather than replacing it. Each lands in its own directory and keeps its own git remote, so open one pull request per repository you changed.":"Call `mcp__studio__TASK_ADD_REPO` with no arguments to list them."].join(`
2803
2803
  `),""),X?.resolveConflict&&X.pr)Q.push(`Pull request #${X.pr.number} (${X.pr.url}) is approved but has a MERGE CONFLICT with its base branch.`,`Check that branch out (\`gh pr checkout ${X.pr.number}\`), merge or rebase the base branch into it, resolve the conflicts, and push to update the SAME pull request \u2014 do NOT open a new one. Resolve by preserving BOTH sides' intent; never blindly discard either side, and change only what the conflict requires.`,"");else if(X?.feedback)Q.push(X.pr?`A reviewer requested changes on pull request #${X.pr.number} (${X.pr.url}):`:"A reviewer requested changes on your previous work:",X.feedback,X.pr?`Check that branch out (\`gh pr checkout ${X.pr.number}\`) before editing, address the feedback, then push to update the SAME pull request \u2014 do NOT open a new one.`:"Address this feedback.","");else if(X?.pr)Q.push(`This task already has an open pull request #${X.pr.number} (${X.pr.url}), and you are already on its branch.`,"Continue that work: commit and push to update the SAME pull request \u2014 do NOT open a new one. If it already does everything the task asks, say so and stop rather than changing it.","");return Q.push("How to finish:","- Make the change, commit it, push the branch, and open a pull request"+(X?.pr?" \u2014 or push to the existing one, per the instruction above.":"."),"- Change only what the task needs. Don't refactor around it.","- The change must be REACHABLE from the surface the task names: edit the component that route actually renders, not one that merely looks like the right place. A change nothing imports is dead code, and it is the most common reason a task comes back rejected.","- Before handing over, VERIFY the task's outcome LOCALLY, in the sandbox: exercise the affected code path (the dev server hot-reloads, so hit the route it renders) and confirm the behaviour actually happens. A green test suite is not the bar. Do NOT wait for, or verify against, the PR's deploy preview \u2014 a reviewer checks that after you hand over.","- For a VISUAL change that means LOOKING at it: `qa-screenshot <url> <path>.png [--mobile] [--full] [--selector=<css>]` renders the page in headless Chromium \u2014 it reaches your own dev server on localhost, and unlike `curl` it runs the page's JS, so lazily-rendered sections are actually there. Then `Read` the file: a screenshot you never opened is not verification. It is already installed; do NOT look for playwright in the repo's `node_modules` or start a browser yourself.","- As soon as `gh pr create` prints the URL, call `mcp__studio__TASK_BOARD_ITEM_PR_LINK` with that url. Do this even if you also mention the PR in a comment \u2014 the reviewers are dispatched from the linked PR, not from your message.",'- If the task turns out to need no code change, do NOT open a PR: explain why in a comment on the task (`mcp__studio__TASK_BOARD_COMMENT_CREATE`) and move it to "done". There is nothing for a reviewer to review, so leaving it for one would strand it.',`- Anything a reviewer should know (a decision you made, something you found and deliberately left alone, a question) goes on the task as a comment: \`mcp__studio__TASK_BOARD_COMMENT_CREATE\` with taskBoardItemId "${$.id}". Read what's already there first with \`mcp__studio__TASK_BOARD_COMMENT_LIST\` \u2014 a comment may be addressed to you.`,"",`(task id: ${$.id})`),Q.join(`
2804
2804
  `)}var d_$=($,Z)=>`${$}/${Z}`.toLowerCase();var k71=L(()=>{XA0();YY();h6();R$();V71()});import{createHmac as qt4,randomBytes as Mt4,timingSafeEqual as Vt4}from"crypto";function kt4(){if(LT0)return LT0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return LT0=$?Buffer.from($):Mt4(32),LT0}function S71($,Z,X){return`rtok_${qt4("sha256",kt4()).update(`${$}:${Z}:${X.toISOString()}`).digest("base64url")}`}function p_$($,Z,X,Q){let Y=Buffer.from($),G=Buffer.from(S71(Z,X,Q));return Y.length===G.length&&Vt4(Y,G)}var LT0=null;var C71=L(()=>{R$()});import{createHash as St4}from"crypto";function aa($,Z){if($.status===null||n_$.has($.status))return!1;return!ca({updated_at:$.lastActiveAt,last_progress_at:null},Z)}function Ct4($,Z){return $.threads.some((X)=>!LH.some((Q)=>dL(X.title,Q))&&aa(X,Z))}function xt4($,Z){return Z-$>=vt4}async function DT0($,Z,X){let Q=await $.storage.organizationSettings.get(Z.organizationId),Y=dN(Q?.flags);if(Y.length===0)return;if(Ct4(Z,Date.now()))return;let G=V7(Q?.flags,"cheap_reviewer_model")?"reviewer":"default",J=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId),K=Z.reviewCycleStartedAt,W=iN(J,K),H=new Date(W),F=iL(J,{cycleStartedAt:K});await Promise.all(Y.map(async(N)=>{let U=F.has(N);if(!U){let O=ct4(J,W),D=ut4(Z,N,W,O);if(D){await it4($,Z,N,D).catch((w)=>console.error(`[task-board] ${N} verdict nudge failed`,w));return}if(mt4(O,Date.now()))return}if(gt4(Z,N,W,Date.now(),U)){await uH($,Z,`${DH[N]} failed ${_71} times on `+"this review \u2014 it will not be retried");return}if(X?.previewMatchesHead===!1){if(xt4(W,Date.now()))await uH($,Z,"the pull request's deploy preview is not showing its latest commit (its checks never went green), so the Reviewer cannot verify this change against what the PR actually does");return}if(ht4(Z,N,W,Date.now(),U))return;let B=ft4(Z,N,W,Date.now(),U);await tt4($,Z,N,H,B,G).catch((O)=>console.error(`[task-board] ${N} reviewer enqueue failed`,O))}))}function ft4($,Z,X,Q=Date.now(),Y=!0){return $.threads.filter((G)=>dL(G.title,Z)&&v71(G,Q,Y)&&new Date(G.createdAt).getTime()>=X).length}function bt4($,Z){if(!$||!Z||!("choices"in Z))return null;return Z.choices.find((X)=>X.repo===$)?.connectionId??null}function yt4($,Z,X){let Q=$.threads.filter((Y)=>dL(Y.title,Z)&&Y.status==="completed"&&new Date(Y.createdAt).getTime()<X).map((Y)=>new Date(Y.lastActiveAt).getTime()).filter((Y)=>Number.isFinite(Y));return Q.length===0?0:Math.max(...Q)}function v71($,Z,X=!0){if($.status==="failed")return!0;if($.status!==null&&n_$.has($.status))return!X;return $.status!==null&&!aa($,Z)}function t_$($,Z,X,Q=Date.now()){return $.threads.filter((Y)=>{if(!dL(Y.title,Z))return!1;return aa(Y,Q)||new Date(Y.createdAt).getTime()>=X})}function gt4($,Z,X,Q=Date.now(),Y=!0){let G=t_$($,Z,X,Q);return G.length>0&&G.every((J)=>v71(J,Q,Y))&&G.length>=_71}function ht4($,Z,X,Q=Date.now(),Y=!0){let G=t_$($,Z,X,Q);if(G.length===0)return!1;if(G.some((K)=>aa(K,Q)))return!0;let J=G.filter((K)=>v71(K,Q,Y));if(J.length>=_71)return!0;return J.length!==G.length}function ut4($,Z,X,Q,Y=Date.now()){return $.threads.find((G)=>dL(G.title,Z)&&G.status==="completed"&&!aa(G,Y)&&new Date(G.createdAt).getTime()>=X&&!Q.has(G.threadId))??null}function ct4($,Z){let X=new Map;for(let Q of $){if(Q.action!=="review_verdict_requested")continue;let Y=new Date(Q.occurredAt).getTime();if(Y<Z)continue;let G=Q.data?.threadId;if(typeof G==="string")X.set(G,Y)}return X}function mt4($,Z){for(let X of $.values())if(Z-X<lt4)return!0;return!1}function dt4($){return[`Your ${DH[$]} run ended without recording a decision, so the task is stuck: nothing ships and nobody is told why. A review that reaches no verdict is not a review.`,"","Do exactly ONE thing in this run and then stop:","- Call `TASK_BOARD_REVIEW_DECISION` now, with the verdict your review already reached and notes that say what you checked.","- Approve ONLY if you actually exercised the change and it holds. If you could not finish \u2014 a check never came back, a preview never rendered, you ran out of room \u2014 `request_changes` and say exactly what is unresolved. That hands the card to a person, which is the correct outcome for an unfinished review.","- Do NOT re-run the review, do NOT change any code, and do NOT wait on any background task: whatever you know right now is the verdict."].join(`