decocms 4.329.5 → 4.329.6

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 (245) hide show
  1. package/dist/client/assets/{AlertCircle-mN_-o_mQ.js → AlertCircle-DA1cEHVG.js} +1 -1
  2. package/dist/client/assets/{AreaChart-Bvt1hsm0.js → AreaChart-CXRdv0xx.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-TOd2y5eQ.js → ArrowLeft-Br9KqDZP.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-D9BmQW3y.js → ArrowUp-TsmTWJjN.js} +1 -1
  5. package/dist/client/assets/{Check-DHPj8hLS.js → Check-grvRnT6d.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-Bape6EQJ.js → CheckCircle-W70-Hp-u.js} +1 -1
  7. package/dist/client/assets/{ChevronRight-CNf6Y7s8.js → ChevronRight-gw9dm0MJ.js} +1 -1
  8. package/dist/client/assets/{ChevronSelectorVertical-BGG06THN.js → ChevronSelectorVertical-CZ_XnnrO.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-DhEp0EVP.js → ChevronUp-DbYyUJ2c.js} +1 -1
  10. package/dist/client/assets/{Copy01-BM0WPlp9.js → Copy01-DC15dYeZ.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-BcxIFS9C.js → CreditCard01-BQ448v1L.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-Bbr6RMTH.js → DotsVertical-DuImY45F.js} +1 -1
  13. package/dist/client/assets/{Download01-BP8_5nMI.js → Download01-C92aqGYG.js} +1 -1
  14. package/dist/client/assets/{ErrorBarContext-D1mkTlU7.js → ErrorBarContext-VF7KGcUm.js} +1 -1
  15. package/dist/client/assets/{Eye-B0Pd_ezn.js → Eye-BHvUcvRj.js} +1 -1
  16. package/dist/client/assets/{GitBranch01-ITA5wAsb.js → GitBranch01-5KhVbuOf.js} +1 -1
  17. package/dist/client/assets/{Globe01-CxD9oJyC.js → Globe01-B1lfl4nW.js} +1 -1
  18. package/dist/client/assets/{HardDrive-Bx3SgLl5.js → HardDrive-Bl2sm0P3.js} +1 -1
  19. package/dist/client/assets/{Image01-DkeWoTxv.js → Image01-BmysQdds.js} +1 -1
  20. package/dist/client/assets/{Key01-3XmA_FLZ.js → Key01-BHRixQVB.js} +1 -1
  21. package/dist/client/assets/{Link01-DBqTW3qG.js → Link01-pXyMJR2J.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-CDbttyHT.js → LinkExternal01-CqwZLC94.js} +1 -1
  23. package/dist/client/assets/{Monitor01-DxoPQwl_.js → Monitor01-VQD1wr6O.js} +1 -1
  24. package/dist/client/assets/{Package-BmmKpgLP.js → Package-D8xZrFk4.js} +1 -1
  25. package/dist/client/assets/{Palette-PDnTmDZk.js → Palette-Bo_A8ldC.js} +1 -1
  26. package/dist/client/assets/{Play-67XUCyKd.js → Play-CyYcbqou.js} +1 -1
  27. package/dist/client/assets/{Plus-BiE4uFsT.js → Plus-BIAtk7db.js} +1 -1
  28. package/dist/client/assets/{SearchMd-D9B5PGY2.js → SearchMd-D6yqdaba.js} +1 -1
  29. package/dist/client/assets/{Sector-Bx8Rm7Bx.js → Sector-CsxyX7hI.js} +1 -1
  30. package/dist/client/assets/{Settings02-D20k8vab.js → Settings02-Dmn9Uagb.js} +1 -1
  31. package/dist/client/assets/{Share07-mTYGTjnX.js → Share07-BUu5_15N.js} +1 -1
  32. package/dist/client/assets/{Shield01-Dh1KVvty.js → Shield01-B9JGpaTp.js} +1 -1
  33. package/dist/client/assets/{Stars01-PXW__m1z.js → Stars01-CWhfbfaB.js} +1 -1
  34. package/dist/client/assets/{Sun-CPXNGo67.js → Sun-DWLAV3m1.js} +1 -1
  35. package/dist/client/assets/{Tool01-DO3tFwrT.js → Tool01-Cy0ZGCil.js} +1 -1
  36. package/dist/client/assets/{Tool02-BsbxtGm_.js → Tool02-CSZTEjDX.js} +1 -1
  37. package/dist/client/assets/{Trash01-Dp51yqnn.js → Trash01-D1GpJcjK.js} +1 -1
  38. package/dist/client/assets/{TrendUp01-B5AMHutg.js → TrendUp01-CYPVBoFc.js} +1 -1
  39. package/dist/client/assets/{Upload01-BNUtlGr4.js → Upload01-BCzsausn.js} +1 -1
  40. package/dist/client/assets/{User01-Ct3vu-8e.js → User01-DpOHQvBN.js} +1 -1
  41. package/dist/client/assets/{UserSquare-BMU7ptkw.js → UserSquare-BncQsikh.js} +1 -1
  42. package/dist/client/assets/{Users01-BiGPt9OV.js → Users01-Di41qDP0.js} +1 -1
  43. package/dist/client/assets/{Users03-CtT9PMQy.js → Users03-DTortZ69.js} +1 -1
  44. package/dist/client/assets/{XCircle-CPujy2uw.js → XCircle-waBvJxuW.js} +1 -1
  45. package/dist/client/assets/{XClose-ydonzdQx.js → XClose-D87Tx9wT.js} +1 -1
  46. package/dist/client/assets/{Zap-Cff3TLsZ.js → Zap-Bz0lnET7.js} +1 -1
  47. package/dist/client/assets/{ZoomOut-Cyr7GMp8.js → ZoomOut-NYNe_Z4v.js} +1 -1
  48. package/dist/client/assets/{access-gate-CxbXElgc.js → access-gate-CrQA8sIX.js} +1 -1
  49. package/dist/client/assets/{agent-icon-D0nFNhxK.js → agent-icon-CUm4oB7y.js} +1 -1
  50. package/dist/client/assets/{agents-list-CWgCuNdA.js → agents-list-dztbB-Cw.js} +1 -1
  51. package/dist/client/assets/{ai-providers-B_1c2MUZ.js → ai-providers-B_bOEKQb.js} +1 -1
  52. package/dist/client/assets/{alert-DXRS4LlD.js → alert-6mjnov6H.js} +1 -1
  53. package/dist/client/assets/{alert-dialog-P0CuRl4b.js → alert-dialog-C51iVTPN.js} +1 -1
  54. package/dist/client/assets/{analytics-tab-C8Ml9hnf.js → analytics-tab-BncFpj4z.js} +1 -1
  55. package/dist/client/assets/{api-keys-BlbK2ztb.js → api-keys-BAAWPoda.js} +1 -1
  56. package/dist/client/assets/api-keys-HdPFDyhU.js +1 -0
  57. package/dist/client/assets/{app-editor-DNnqs-BT.js → app-editor-DR0tLRro.js} +1 -1
  58. package/dist/client/assets/{auth-BVp2xy53.js → auth-Bbv_i1Jo.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-DNlKODhS.js → auth-catchall-C4qKgNYY.js} +1 -1
  60. package/dist/client/assets/{auth-entry-DBaEHAB5.js → auth-entry-DRIlfsP_.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-BhgIfBec.js → auth-split-layout-CC36faDL.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-BAd7rGHc.js → authenticate-and-persist-oauth-sBYdDIRi.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-DlvHKPyj.js → automation-list-row-Hqe9OUun.js} +1 -1
  64. package/dist/client/assets/{automation-runs-CCVcrtR2.js → automation-runs-DLjirUtq.js} +1 -1
  65. package/dist/client/assets/automations-BDc7sMoE.js +1 -0
  66. package/dist/client/assets/{avatar-b8hndRPx.js → avatar-Cqr4rNtI.js} +1 -1
  67. package/dist/client/assets/{badge-BStsm_lg.js → badge-CdD_S6_J.js} +1 -1
  68. package/dist/client/assets/{block-document-CgPj5a7q.js → block-document-CwU9JWtH.js} +1 -1
  69. package/dist/client/assets/{breadcrumb-Bcg6Ab2L.js → breadcrumb-CGLwazRA.js} +1 -1
  70. package/dist/client/assets/{buckets-C0rDB5Al.js → buckets-CJn89MHy.js} +1 -1
  71. package/dist/client/assets/{bulk-category-panel-DN63hkby.js → bulk-category-panel-3QzafbMh.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-DJ7cUT9Z.js → capability-load-error-DXzCDpxj.js} +1 -1
  73. package/dist/client/assets/{cards-DaQEzixK.js → cards-De2Tofte.js} +1 -1
  74. package/dist/client/assets/{category-editor-vpz2dWAT.js → category-editor-COqxAE1f.js} +1 -1
  75. package/dist/client/assets/{cdn-tab-BbmlviYg.js → cdn-tab-D_pbGC7l.js} +1 -1
  76. package/dist/client/assets/{chart-DHv_Afvm.js → chart-7R5tmwSB.js} +1 -1
  77. package/dist/client/assets/{chat-context-CsVVImtr.js → chat-context-CTC6stWi.js} +1 -1
  78. package/dist/client/assets/{checkbox-BSJHTjoV.js → checkbox-DtN6Dr54.js} +1 -1
  79. package/dist/client/assets/{choose-editor-CJmqYzFT.js → choose-editor-Blhw32Ri.js} +1 -1
  80. package/dist/client/assets/{cli-auth-success-BsTXHwdh.js → cli-auth-success-CeAzdEYA.js} +1 -1
  81. package/dist/client/assets/{client-icons-Dbh16KTh.js → client-icons-C1w3IsHJ.js} +1 -1
  82. package/dist/client/assets/{collection-detail-YcEc9PSs.js → collection-detail-BFl9ZukZ.js} +1 -1
  83. package/dist/client/assets/{collection-display-button-Dlv2uRSO.js → collection-display-button-Bzjk0jzF.js} +1 -1
  84. package/dist/client/assets/{collection-search-Nx8I1VWD.js → collection-search-CO09NGkg.js} +1 -1
  85. package/dist/client/assets/{collection-table-wrapper-DEUvwrm7.js → collection-table-wrapper-eg9oZGZn.js} +1 -1
  86. package/dist/client/assets/{collection-tabs-DkuVrlwj.js → collection-tabs-cr1701fJ.js} +1 -1
  87. package/dist/client/assets/{command-BQZNWnLl.js → command-A0s0uPHt.js} +1 -1
  88. package/dist/client/assets/{commerce-onboarding-D2RPtK_d.js → commerce-onboarding-DtsFghjm.js} +1 -1
  89. package/dist/client/assets/{connect-CqMi0Kj6.js → connect-DrXaw1w8.js} +1 -1
  90. package/dist/client/assets/{connect-layout-LGbISPTt.js → connect-layout-CrHWsBPn.js} +1 -1
  91. package/dist/client/assets/{connection-BKjGbuRp.js → connection-DFFOswZj.js} +1 -1
  92. package/dist/client/assets/{connection-card-CUDq88xM.js → connection-card-TaYo6pYl.js} +1 -1
  93. package/dist/client/assets/{connection-detail-PQGXGzTQ.js → connection-detail-BFvYx2p3.js} +1 -1
  94. package/dist/client/assets/{connection-form-helpers-j54kv39E.js → connection-form-helpers-CoIQo1Gb.js} +1 -1
  95. package/dist/client/assets/{connections-BIa_J0_x.js → connections-DW0Ud7Ns.js} +1 -1
  96. package/dist/client/assets/{create-organization-dialog-C0dAeHRr.js → create-organization-dialog-CY527eHC.js} +1 -1
  97. package/dist/client/assets/{decopilot-sse-pool-BJt1WWih.js → decopilot-sse-pool-DU0j98RE.js} +1 -1
  98. package/dist/client/assets/{dialog-CwR2ZkB1.js → dialog-1xIvEVWS.js} +1 -1
  99. package/dist/client/assets/{domain-settings-Ck9aohMU.js → domain-settings-CiOIlCwE.js} +1 -1
  100. package/dist/client/assets/{download-app-dialog-BSTfXNDN.js → download-app-dialog-CsPmnO0q.js} +1 -1
  101. package/dist/client/assets/{drawer-C4eE6wVo.js → drawer-C-pTdfTV.js} +1 -1
  102. package/dist/client/assets/{dropdown-menu-D1Dyu0Ie.js → dropdown-menu-Dm9zz_PI.js} +1 -1
  103. package/dist/client/assets/{e2e-tab-BKa3vgG1.js → e2e-tab-DAWapk18.js} +1 -1
  104. package/dist/client/assets/{editor-X_GwLxUe.js → editor-DuZZHVnS.js} +1 -1
  105. package/dist/client/assets/{empty-state-DweMZJTW.js → empty-state-CaQCn5yY.js} +1 -1
  106. package/dist/client/assets/{empty-state-BObNah86.js → empty-state-Z33ir3je.js} +1 -1
  107. package/dist/client/assets/{extract-connection-data-TVNJHOmc.js → extract-connection-data-C44EqyQK.js} +1 -1
  108. package/dist/client/assets/{file-explorer-BVlXTJHP.js → file-explorer-DQ8njhcM.js} +1 -1
  109. package/dist/client/assets/{file-type-icon-DFeVbUcK.js → file-type-icon-Dl9zrC0W.js} +1 -1
  110. package/dist/client/assets/{folder-icon-fliliFSE.js → folder-icon-DXofXja-.js} +1 -1
  111. package/dist/client/assets/{form-R-ND42yQ.js → form-DLHM0IAy.js} +1 -1
  112. package/dist/client/assets/{general-CbsMwCUF.js → general-D6rHAjlN.js} +1 -1
  113. package/dist/client/assets/{github-repo-picker-VVXQm56m.js → github-repo-picker-BIbCpUFZ.js} +1 -1
  114. package/dist/client/assets/{hooks-Chtya12g.js → hooks-Cv_l36vR.js} +1 -1
  115. package/dist/client/assets/{hosting-tab-yCo5MFnA.js → hosting-tab-DtuFDGvE.js} +1 -1
  116. package/dist/client/assets/{index-F3C6ps0B.js → index-BVvpVlYL.js} +1 -1
  117. package/dist/client/assets/{index-BPoFiAxf.js → index-BkljfHxy.js} +2 -2
  118. package/dist/client/assets/{index-T5aBTzrV.js → index-CRSJpMzc.js} +1 -1
  119. package/dist/client/assets/{index-EMRlgytw.js → index-CUyq5xp-.js} +1 -1
  120. package/dist/client/assets/{index-C9r1r2iD.js → index-Dh_lhfEM.js} +1 -1
  121. package/dist/client/assets/{index-C-iRRri3.js → index-Dm5mbx-j.js} +1 -1
  122. package/dist/client/assets/{index-B4S5w1-x.js → index-Dmu_jFDN.js} +1 -1
  123. package/dist/client/assets/{index-DFO8Hy2x.js → index-TRl02mXS.js} +6 -6
  124. package/dist/client/assets/{index-CZG_2YcM.js → index-fcQmErZ3.js} +1 -1
  125. package/dist/client/assets/{index-94aQRAaT.js → index-ldx_aeXw.js} +1 -1
  126. package/dist/client/assets/{index-redirect-wsAas5g2.js → index-redirect-B4WcqrST.js} +1 -1
  127. package/dist/client/assets/{infra-billing-DmphYAUU.js → infra-billing-CT4isBll.js} +1 -1
  128. package/dist/client/assets/{input-LsHd3z5Z.js → input-CYJ7J22n.js} +1 -1
  129. package/dist/client/assets/{integration-icon-BukX17Ja.js → integration-icon-kfJeGcu4.js} +1 -1
  130. package/dist/client/assets/{invite-member-dialog-CnDi6qyS.js → invite-member-dialog-CcDGSu2c.js} +1 -1
  131. package/dist/client/assets/{label-fGGyQxp5.js → label-BSeVlzkX.js} +1 -1
  132. package/dist/client/assets/{layout-CHbCwmYb.js → layout--aonA48-.js} +1 -1
  133. package/dist/client/assets/{login-C8TvcwaD.js → login-DbVueJaI.js} +1 -1
  134. package/dist/client/assets/{markdown-BKbOmMip.js → markdown-D7QuNT69.js} +1 -1
  135. package/dist/client/assets/{mcp-oauth-DTP_bedh.js → mcp-oauth-dGHhlLy0.js} +1 -1
  136. package/dist/client/assets/{members-m278wo7-.js → members-Bf8lcWZe.js} +1 -1
  137. package/dist/client/assets/{monaco-editor-BpbvUJwi.js → monaco-editor-CC-Sqg8F.js} +1 -1
  138. package/dist/client/assets/{monitoring-stats-row-BIfVwwYm.js → monitoring-stats-row-vacc3BYl.js} +1 -1
  139. package/dist/client/assets/{multi-select-BGEhYv6Q.js → multi-select-nRNpGGJY.js} +1 -1
  140. package/dist/client/assets/{oauth-callback-DNm5e3t4.js → oauth-callback-Ce0X_vqm.js} +1 -1
  141. package/dist/client/assets/{oauth-callback-ai-provider-C6wR7YHk.js → oauth-callback-ai-provider-BdyUwN3J.js} +1 -1
  142. package/dist/client/assets/{onboarding-D7MAN9sh.js → onboarding-SmWY9lBA.js} +1 -1
  143. package/dist/client/assets/org-layout-D0H1iAiF.js +1 -0
  144. package/dist/client/assets/{organization-choice-yFaS2KYn.js → organization-choice-C49clKoP.js} +1 -1
  145. package/dist/client/assets/{orgs-GzeWzw6o.js → orgs-CAjirR3W.js} +1 -1
  146. package/dist/client/assets/{page-seo-form-BlVNkW7I.js → page-seo-form-BGqqc2Gj.js} +1 -1
  147. package/dist/client/assets/{popover-Q1deFKgp.js → popover-mZ_x_ILZ.js} +1 -1
  148. package/dist/client/assets/{post-calendar-B09pnMW9.js → post-calendar-DM4--jD1.js} +1 -1
  149. package/dist/client/assets/{post-editor-DH3cc2rR.js → post-editor-GHkZtflO.js} +1 -1
  150. package/dist/client/assets/{primitives-0K9NGeUu.js → primitives-Bp0pnH9F.js} +1 -1
  151. package/dist/client/assets/{profile-BpvIbEub.js → profile-Dvj2Ky_G.js} +1 -1
  152. package/dist/client/assets/{project-app-view-BW8nEgoK.js → project-app-view-C5a0S8VK.js} +1 -1
  153. package/dist/client/assets/{project-icon-CW7lG0f-.js → project-icon-BBqdk5OE.js} +1 -1
  154. package/dist/client/assets/{prompts-BJn-p95i.js → prompts-Dr4JAnH0.js} +1 -1
  155. package/dist/client/assets/record-editor-2DwNqvUy.js +1 -0
  156. package/dist/client/assets/{redirect-editor-BI-Kllix.js → redirect-editor-Bat0o4y3.js} +1 -1
  157. package/dist/client/assets/registry--J_j_Iy0.js +2 -0
  158. package/dist/client/assets/{registry-layout-BP7gmPI-.js → registry-layout-DIey2mbB.js} +1 -1
  159. package/dist/client/assets/{reports-CAV2Cslk.js → reports-Bev3cmDf.js} +1 -1
  160. package/dist/client/assets/{require-capability-C5rDfjFm.js → require-capability-DOJ4tTFn.js} +1 -1
  161. package/dist/client/assets/{required-auth-layout-Geu1OAEe.js → required-auth-layout-B2tIP5k3.js} +1 -1
  162. package/dist/client/assets/{reset-password-DUIDurfe.js → reset-password-C4gYW7se.js} +1 -1
  163. package/dist/client/assets/{review-settings-CsiIDmFA.js → review-settings-BOZEVIl7.js} +1 -1
  164. package/dist/client/assets/{roles-BAD7kH_t.js → roles-cRWL1Za5.js} +1 -1
  165. package/dist/client/assets/{schema-D2aEo9_j.js → schema-BgSBbsw7.js} +1 -1
  166. package/dist/client/assets/{scroll-area-D_zmdKz7.js → scroll-area-0nfzfnAs.js} +1 -1
  167. package/dist/client/assets/{search-input-BizsLhvX.js → search-input-CIki-uxf.js} +1 -1
  168. package/dist/client/assets/{secrets-G0v2X3oa.js → secrets-D2e6phy9.js} +1 -1
  169. package/dist/client/assets/{sections-editor-CWq03Vnp.js → sections-editor-D-QRzAnK.js} +1 -1
  170. package/dist/client/assets/{select-BPlqzUpB.js → select-DqJyZyIQ.js} +1 -1
  171. package/dist/client/assets/{select-model-D5-IXAsH.js → select-model-BsGv2vyu.js} +1 -1
  172. package/dist/client/assets/{self-tool-result-CTIc9xGS.js → self-tool-result-BoZ6MFRP.js} +1 -1
  173. package/dist/client/assets/{seo-editor-O_gPOD8y.js → seo-editor-g6APT0uI.js} +1 -1
  174. package/dist/client/assets/settings-layout-CkbSimBL.js +1 -0
  175. package/dist/client/assets/{settings-sidebar-B8AwNjia.js → settings-sidebar-jSd5MSjq.js} +1 -1
  176. package/dist/client/assets/{shell-controls-DnZgBbdN.js → shell-controls-C4MO7deC.js} +1 -1
  177. package/dist/client/assets/{shell-layout-OBmJcmOt.js → shell-layout-tPdz54xh.js} +1 -1
  178. package/dist/client/assets/{skill-preview-mwAW0EFc.js → skill-preview-C-lpKGFK.js} +1 -1
  179. package/dist/client/assets/{skills-B4jG1i-v.js → skills-C_OSw6ZN.js} +1 -1
  180. package/dist/client/assets/{sso-DEIlxpGO.js → sso-BsFPpeYe.js} +1 -1
  181. package/dist/client/assets/{store-dJDoMR5j.js → store-qwASLyWC.js} +1 -1
  182. package/dist/client/assets/store-registry-cT643_3i.js +2 -0
  183. package/dist/client/assets/{switch-DbWQok_U.js → switch-CZqeYbje.js} +1 -1
  184. package/dist/client/assets/{synced-repos-BN345C03.js → synced-repos-ByBUacaY.js} +1 -1
  185. package/dist/client/assets/{table-DOif7xTO.js → table-DbdXafHS.js} +1 -1
  186. package/dist/client/assets/{tabs-B_MhFzq8.js → tabs-C9EAqZz9.js} +1 -1
  187. package/dist/client/assets/{task-board-CcPCmS8T.js → task-board-7HRng9a2.js} +1 -1
  188. package/dist/client/assets/{task-route-C4sr5u2Y.js → task-route-_ESOOTZi.js} +1 -1
  189. package/dist/client/assets/{tasks-DUn9MzS1.js → tasks-CxA4gPZJ.js} +1 -1
  190. package/dist/client/assets/{textarea-Cg093qVK.js → textarea-90AQXVh4.js} +1 -1
  191. package/dist/client/assets/{toggle-group-DR2FN9bK.js → toggle-group-Diuss92s.js} +1 -1
  192. package/dist/client/assets/{toolbar-BMJtXOZ8.js → toolbar-BWOWuYdi.js} +1 -1
  193. package/dist/client/assets/{toolbar-icon-button-j89gz31d.js → toolbar-icon-button-DnenepzG.js} +1 -1
  194. package/dist/client/assets/{track-CEYIUg92.js → track-Qcawd54k.js} +1 -1
  195. package/dist/client/assets/{types-CvaupNP5.js → types-B-HpXlbf.js} +1 -1
  196. package/dist/client/assets/{use-ai-providers-qSmDdlV5.js → use-ai-providers-CWtvyrT-.js} +1 -1
  197. package/dist/client/assets/{use-automations-BHUwCHCu.js → use-automations-D9Y9jZ0Z.js} +1 -1
  198. package/dist/client/assets/{use-autosave-B6xJm16y.js → use-autosave-DIT9IDbg.js} +1 -1
  199. package/dist/client/assets/{use-connection-DssDxszT.js → use-connection-Uyph_H8d.js} +1 -1
  200. package/dist/client/assets/{use-copy-DElZsO5o.js → use-copy-Cuzq782M.js} +1 -1
  201. package/dist/client/assets/{use-create-virtual-mcp-fX5KRaaa.js → use-create-virtual-mcp-D24xpy0o.js} +1 -1
  202. package/dist/client/assets/{use-debounced-autosave-MHpLopBx.js → use-debounced-autosave-DS1yKwxh.js} +1 -1
  203. package/dist/client/assets/{use-debounced-value-CfUze3fk.js → use-debounced-value-DJ0hN8gB.js} +1 -1
  204. package/dist/client/assets/{use-decopilot-events-BCTeDl9d.js → use-decopilot-events-Cm5dzSwF.js} +1 -1
  205. package/dist/client/assets/{use-delete-connection-CjblC6Ap.js → use-delete-connection-BKcL-J29.js} +1 -1
  206. package/dist/client/assets/{use-deployment-admin-i2vFl9gf.js → use-deployment-admin-BE2hLNuR.js} +1 -1
  207. package/dist/client/assets/{use-destination-route-BnzyxZK-.js → use-destination-route-DLsn9uXe.js} +1 -1
  208. package/dist/client/assets/{use-file-configs-DbhqGRsz.js → use-file-configs-CHDaFO85.js} +1 -1
  209. package/dist/client/assets/{use-infinite-scroll--JAy1jrF.js → use-infinite-scroll-Bj-_fMYw.js} +1 -1
  210. package/dist/client/assets/{use-join-requests-BmM24zP-.js → use-join-requests-Cu_2S_W2.js} +1 -1
  211. package/dist/client/assets/{use-mcp-auth-status-BWBUcCX_.js → use-mcp-auth-status-HMnG1EUf.js} +1 -1
  212. package/dist/client/assets/{use-mcp-client-r4Xv9xDe.js → use-mcp-client-Deaem8WO.js} +1 -1
  213. package/dist/client/assets/{use-mcp-prompts-BDT2dqpH.js → use-mcp-prompts-C5IrmXgS.js} +1 -1
  214. package/dist/client/assets/{use-members-BB0dVjBb.js → use-members-Cv__v2oz.js} +1 -1
  215. package/dist/client/assets/{use-navigate-to-agent-BAFEWvwz.js → use-navigate-to-agent-B-P_VAZF.js} +1 -1
  216. package/dist/client/assets/{use-org-auth-client-BhrDbDSV.js → use-org-auth-client-DWweu3ja.js} +1 -1
  217. package/dist/client/assets/{use-org-sso-CxgCZrTk.js → use-org-sso-CMfMnqpv.js} +1 -1
  218. package/dist/client/assets/{use-organization-roles-CDQDzA2S.js → use-organization-roles-BQmWc6DN.js} +1 -1
  219. package/dist/client/assets/{use-organization-settings-BZpxVSP5.js → use-organization-settings-CwdP6bUS.js} +1 -1
  220. package/dist/client/assets/{use-panel-navigate-Bqzu-m4-.js → use-panel-navigate-BRmpjsHj.js} +1 -1
  221. package/dist/client/assets/{use-registry-connections-BZ-aHAcc.js → use-registry-connections-CU4AWQn4.js} +1 -1
  222. package/dist/client/assets/{use-secrets-Bh_QiR6h.js → use-secrets--00GbFn8.js} +1 -1
  223. package/dist/client/assets/{use-section-preview-base-D_r7iT64.js → use-section-preview-base-CTx7wzR-.js} +1 -1
  224. package/dist/client/assets/{use-status-sounds-CNPhXYst.js → use-status-sounds-CkzzANKj.js} +1 -1
  225. package/dist/client/assets/{use-tags-CQrzK6kW.js → use-tags-k_sYBsNz.js} +1 -1
  226. package/dist/client/assets/{use-view-mode-PLD7Z8Gt.js → use-view-mode-3y5HyEBP.js} +1 -1
  227. package/dist/client/assets/{use-virtual-mcp-zpAtwz7v.js → use-virtual-mcp-12aBqy7V.js} +1 -1
  228. package/dist/client/assets/useInfiniteQuery-DiQVH8QR.js +1 -0
  229. package/dist/client/assets/useSuspenseInfiniteQuery-BMUPA2Dd.js +1 -0
  230. package/dist/client/assets/{users-BZQPvMd3.js → users-DjB8KCBh.js} +1 -1
  231. package/dist/client/assets/{variant-calendar-BGv44m4Q.js → variant-calendar-DaQkdUZ_.js} +1 -1
  232. package/dist/client/assets/{view-mode-toggle-CC6x-V9J.js → view-mode-toggle-WcHFJdKB.js} +1 -1
  233. package/dist/client/index.html +1 -1
  234. package/dist/server/cli.js +2 -2
  235. package/dist/server/server.js +2 -2
  236. package/package.json +1 -1
  237. package/dist/client/assets/api-keys-CwBd9UBU.js +0 -1
  238. package/dist/client/assets/automations-D0z1_feX.js +0 -1
  239. package/dist/client/assets/org-layout-D5JilW3M.js +0 -1
  240. package/dist/client/assets/record-editor-DNyePUjb.js +0 -1
  241. package/dist/client/assets/registry-Ft8pANng.js +0 -2
  242. package/dist/client/assets/settings-layout-CB8wJ9KB.js +0 -1
  243. package/dist/client/assets/store-registry-oLwveuwU.js +0 -2
  244. package/dist/client/assets/useInfiniteQuery-BkZl1y7Z.js +0 -1
  245. package/dist/client/assets/useSuspenseInfiniteQuery-w4-apbuy.js +0 -1
@@ -1399,7 +1399,7 @@ Studio renders those as real images in the comment.`,`- End the run by calling \
1399
1399
  3. EXERCISE the change on the PR's deploy preview, AFTER your push, on the `+"preview of the commit you actually pushed \u2014 the earlier preview is a "+"different build and a verdict on it is a verdict on bytes that will not ship. Wait for it if it is still building. Deep-link to the specific page/route the task affects (not just its root), check the acceptance criteria implied by the title and description, and look for regressions "+"in the affected flow. Judge OUTCOMES, not the diff \u2014 NEVER approve on "+"inspection alone. For any VISUAL change capture the affected view BEFORE (the current production / base-branch site) and AFTER (the preview), and for a responsive change capture BOTH a desktop and a real mobile view (a "+"phone viewport AND a mobile user-agent \u2014 not a narrowed desktop). The "+`How-to steps below name the exact screenshot tool for your run.
1400
1400
  If the preview will not render (303s, hangs, blank) or you otherwise cannot exercise the change, do NOT approve: request changes stating what is blocking and what is needed to unblock. An unverified preview is not a pass.
1401
1401
  `+"4. RECORD the whole pass as a task comment BEFORE the decision \u2014 a "+"durable record, separate from the short decision summary, and REQUIRED: a verdict with no comment is an incomplete run and you will be asked for one. Structure it: what you read and the concrete issues with file/line references, WHICH of them you fixed (with the commits), the acceptance criteria / scenarios you exercised with a pass/fail on each, a "+"before\u2192after pointer to the screenshots, the exact URL(s) and viewport, "+`and anything you did not review or could not verify and why.
1402
- That comment must ALWAYS carry the visual change: embed the before/after screenshots in it whenever the change has any visual surface. If it has none, write the exact words \`${mp}\` in the comment and `+"name why (backend-only, config, test-only) \u2014 that literal is what a "+"machine check looks for, so no paraphrase of it counts, and silence about screenshots is not an acceptable answer either way.\n5. DECIDE. Approve once the pull request is in the state you would approve. Only `request_changes` for something you genuinely cannot settle here (a product decision, a missing credential, an approach that needs "+"rethinking) \u2014 that hands the card to a human, it does not start another "+"agent round. NEVER end your run without having called `TASK_BOARD_REVIEW_DECISION`: a run that stops to wait on a background task, or that runs low on room, must decide on what it knows first. An unrecorded verdict strands the card and is the one failure this run cannot leave behind."}});function Ww4($,Z){return $.status===j$.review&&$.assigneeId===m$&&Z===!0}function so0($){return $.filter((Q)=>Q.action==="merge_conflict_resolution").length>=JH$}async function JD($,Z,Q,X){if(!Ww4(Q,X.conflict))return!1;let G=(await $.storage.organizationSettings.get(Z))?.flags??{};if(!k0$(G))return!1;let J=pH(G),W=await $.storage.taskBoard.listActivity(Q.id,Z);if(!zO(W,J,{cycleStartedAt:Q.reviewCycleStartedAt,verifiedOnly:!0}))return!1;if(so0(W))return console.warn(`[task-board] conflict auto-resolve cap (${JH$}) reached on task ${Q.id} \u2014 leaving the PR for a human`),!1;let K=X.pr,F=await $.storage.taskBoard.claimConflictResolution(Q.id,Z,Q.updatedBy);if(!F)return!1;G8(Z,F);try{await XW($,F,{pr:{number:K.number,url:K.url},resolveConflict:!0})}catch(H){throw await WH$($,F,H).catch(()=>!1),await $.storage.taskBoard.update(F.id,Z,{status:j$.review},"system").then((U)=>G8(Z,U)).catch((U)=>console.error("[task-board] conflict-resolution status revert failed",U)),H}return await I6($,{taskBoardItemId:Q.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:K.number}}),!0}var JH$=3;var Cg=D(()=>{D4();i9();UQ();x5();oK()});async function rK($,Z){let Q=await $.selectFrom("organization").select(["id","slug","name"]).where("id","=",Z).executeTakeFirst();if(!Q)return null;let X=await EJ.create();return X.organization={id:Q.id,slug:Q.slug,name:Q.name},WD(X,{id:Q.id,slug:Q.slug}),X}var _g=D(()=>{KD()});import{DBOS as Zr0}from"@dbos-inc/dbos-sdk";function FH$($){eo0=$}async function Uw4($,Z){if(!eo0)throw Error("[task-board-github-read] runtime not initialized \u2014 setTaskBoardGithubReadRuntime() must run before the workflow fires");let Q=await rK(eo0.db,$);if(!Q)return $r0;return await UH$(Q,$,Z)}async function Nw4($,Z){return await Zr0.runStep(()=>Uw4($,Z),{name:"readPrState"})}function HH$(){if(Vw0)return;Vw0=Zr0.registerWorkflow(Nw4,{name:"taskBoardGithubReadWorkflow"})}async function vg($,Z){if(!Vw0)return $r0;try{return await(await Zr0.startWorkflow(Vw0,{queueName:Hw,timeoutMS:Hw4})($,Z)).getResult()}catch(Q){return console.error("[task-board-github-read] throttled PR read failed",Q),$r0}}var Kw4=20,Fw4=4,Hw4=60000,KH$,eo0=null,$r0,Vw0=null;var At=D(()=>{_g();EZ();KH$={concurrency:Fw4,rateLimit:{limitPerPeriod:Kw4,periodSec:60}};$r0={state:null,merged:null,checksStatus:null,conflict:null}});import{createHash as Bw4}from"crypto";class aC{config;options;now;kv=null;codec=WO();revalidating=new Set;fallback;placeholderFallback=new Map;static MAX_PLACEHOLDER_FALLBACK_ENTRIES=1000;constructor($,Z,Q=()=>Date.now()){this.config=$;this.options=Z;this.now=Q;let X={revalidateAfterMs:$.revalidateAfterMs,maxStaleMs:$.maxStaleMs,maxValueBytes:NH$};this.fallback=new RZ0({"tools/call":X,"resources/read":X,"prompts/get":X})}async init($){if($){this.kv=$;return}let Z=this.options.getJetStream();if(!Z)return;this.kv=await new OH$.Kvm(Z).create(this.config.bucket,{storage:BH$.StorageType.Memory,ttl:this.config.maxStaleMs,maxValueSize:NH$})}storageKey($,Z){let Q=Bw4("sha256").update(Z).digest("hex").slice(0,32);return`${$}.${Q}`}async fetch($){let{namespace:Z,key:Q,fetchLive:X,onRevalidation:Y}=$,{cache:G,revalidateAfterMs:J,maxStaleMs:W}=this.config;if(!this.kv)return this.fallback.fetch({type:"tools/call",connectionId:Z,scope:{kind:"org"},params:{key:Q},fetchLive:X,onRevalidation:Y});let K=this.storageKey(Z,Q),F=await this.read(K),H=F?this.now()-F.storedAt:Number.POSITIVE_INFINITY;if(!F||H>W){FD.add(1,{cache:G,outcome:"miss"});let U=await X();return await this.write(K,U,G),U}if(H>J&&!this.revalidating.has(K))FD.add(1,{cache:G,outcome:"stale"}),this.revalidating.add(K),Y(X().then((U)=>this.write(K,U,G)).catch(()=>{FD.add(1,{cache:G,outcome:"error"})}).finally(()=>this.revalidating.delete(K)));else FD.add(1,{cache:G,outcome:"hit"});return F.value}async fetchOrPlaceholder($){let{namespace:Z,key:Q,fetchLive:X,placeholder:Y}=$,{cache:G,revalidateAfterMs:J,maxStaleMs:W}=this.config,K=this.storageKey(Z,Q),F=await this.read(K),H=F?this.now()-F.storedAt:Number.POSITIVE_INFINITY,U=F!=null&&H<=W;if(U&&H<=J)return FD.add(1,{cache:G,outcome:"hit"}),{value:F.value,live:!0};if(FD.add(1,{cache:G,outcome:U?"stale":"placeholder"}),!this.revalidating.has(K))this.revalidating.add(K),X().then((N)=>this.write(K,N,G)).catch(()=>{FD.add(1,{cache:G,outcome:"error"})}).finally(()=>this.revalidating.delete(K));return U?{value:F.value,live:!0}:{value:Y,live:!1}}async read($){if(!this.kv)return this.placeholderFallback.get($)??null;try{let Z=await this.kv?.get($);if(!Z?.value?.length)return null;if(Z.operation==="DEL"||Z.operation==="PURGE")return null;return this.codec.decode(Z.value)}catch{return null}}async write($,Z,Q){if(!this.kv){if(this.placeholderFallback.size>=aC.MAX_PLACEHOLDER_FALLBACK_ENTRIES){let X=this.placeholderFallback.keys().next().value;if(X!==void 0)this.placeholderFallback.delete(X)}this.placeholderFallback.set($,{storedAt:this.now(),value:Z});return}try{await this.kv?.put($,this.codec.encode({storedAt:this.now(),value:Z}))}catch{FD.add(1,{cache:Q,outcome:"store_rejected"})}}async invalidate($){if(this.fallback.invalidate($),!this.kv)return;try{let Z=await this.kv.keys(`${$}.*`);for await(let Q of Z)await this.kv.delete(Q).catch(()=>{})}catch{}}teardown(){this.kv=null}}function Yr0($){DH$=$?.reads??null,wH$=$?.cards??null}function Gr0(){return DH$??Ow4}function Jr0(){return wH$??Dw4}var BH$,OH$,FD,NH$=524288,Qr0,Xr0,DH$=null,wH$=null,Ow4,Dw4;var Wr0=D(()=>{Cp();Q6();BH$=V(nF(),1),OH$=V(Op(),1),FD=$$.createCounter("pr_read_cache.fetches",{description:"Task board PR cache outcomes (hit, stale, miss, placeholder, error, store_rejected)",unit:"{fetches}"}),Qr0={bucket:"DECOCMS_PR_READS",revalidateAfterMs:55000,maxStaleMs:1800000,cache:"reads"},Xr0={bucket:"DECOCMS_PR_CARDS",revalidateAfterMs:30000,maxStaleMs:86400000,cache:"cards"};Ow4=new aC(Qr0,{getJetStream:()=>null}),Dw4=new aC(Xr0,{getJetStream:()=>null})});import{z as Sw0}from"zod";function vw0($){let Q=($ instanceof Error?$.message:String($)).replace(/https?:\/\/\S+/gi," ");return/too many requests|rate limit|\b429\b/i.test(Q)}function LH$($){return Gr0().invalidate($)}function jJ($){return Jr0().invalidate($)}function ww4($){let Z=null,Q=null;return{get:()=>{return Q??=$().then((X)=>{return Z=X,X}).catch((X)=>{throw Q=null,X}),Q},current:()=>Z}}function EH$($,Z){let{get:Q,current:X}=ww4(()=>S5($,Z,!0));return{get:Q,closeWhenIdle:(Y)=>{Promise.allSettled(Y).then(()=>X()?.close().catch(()=>{}))}}}async function Rt($,Z,Q,X,Y,G){try{let J=await Gr0().fetch({namespace:Z,key:JSON.stringify({name:Q,args:X}),fetchLive:()=>Z6(async()=>{let W=await(await $()).callTool({name:Q,arguments:X},void 0,{timeout:_w0});if(W&&typeof W==="object"&&W.isError)throw Error(W.content?.[0]?.text??`${Q} returned isError`);return W},{maxAttempts:3,minTimeout:300,maxTimeout:3000,jitter:1,isRetriable:(W)=>!vw0(W)}),onRevalidation:(W)=>G.push(W)});return fw0(J)}catch(J){let W=J instanceof MQ?J.cause:J;return console.error(`[task-board] ${Q} failed for ${Y}:`,W),null}}async function zU($,Z,Q,X){if(Q){let G=await $.storage.connections.findById(Q,Z);if(G&&G.status==="active")return G}let{items:Y}=await $.storage.connections.list(Z,{slug:"mcp-github"});return Lw4(Y.filter((G)=>G.status==="active"),X)}function Lw4($,Z){let Q=$.find((Y)=>C5(Y)===null)??null;if(!Z)return Q??$[0]??null;return $.find((Y)=>{let G=C5(Y);return G?.owner===Z.owner&&G?.repo===Z.name})??Q}function fw0($){if(!$||typeof $!=="object")return null;let Z=$;if(Z.isError)return null;if(Z.structuredContent&&typeof Z.structuredContent==="object"&&Object.keys(Z.structuredContent).length>0)return Z.structuredContent;let Q=Z.content?.find((X)=>X.type==="text")?.text;if(!Q)return null;try{return JSON.parse(Q)}catch{return null}}function sC($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")||Z.endsWith(".vercel.app")||Z.endsWith(".preview.vtex.app")}function Ew4($){if(!$||!Array.isArray($.statuses))return null;let Z=$.statuses.map((Q)=>Q&&typeof Q==="object"?Q:null).filter((Q)=>!!Q&&typeof Q.target_url==="string"&&sC(Q.target_url));if(Z.length===0)return null;return Z.find((Q)=>Q.state==="success")?.target_url??Z[0].target_url}function zw4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];for(let Q of Z){if(!Q||typeof Q!=="object")continue;let X=Q,Y=typeof X.name==="string"?/^Workers Builds:\s*([a-z0-9][a-z0-9-]*)\s*$/i.exec(X.name)?.[1]:null;if(!Y)continue;let G=X.output?.summary;if(typeof G!=="string")continue;let J=/Version ID:\s*([0-9a-f]{8})/i.exec(G)?.[1];if(!J)continue;let W=`https://${J}-${Y}.${jw4}.workers.dev`;if(sC(W))return W}return null}function Pw4($){let Z=Array.isArray($)?$:Array.isArray($?.comments)?$.comments:Array.isArray($?.items)?$.items:[],Q=(Y)=>{let G=Y;return Date.parse(G?.updated_at)||Date.parse(G?.created_at)},X=Z.map((Y,G)=>({c:Y,index:G})).sort((Y,G)=>{let J=Q(Y.c),W=Q(G.c);if(Number.isNaN(J)||Number.isNaN(W))return Y.index-G.index;return W-J}).map(({c:Y})=>Y);for(let Y of X){let G=Y&&typeof Y.body==="string"?Y.body:"";if(!G)continue;let J=G.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(J?.[1]&&sC(J[1]))return J[1];let W=(G.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((K)=>sC(K));if(W)return W}return null}function Aw4($){let Z=$&&typeof $.environmentUrl==="string"?$.environmentUrl:null;return Z&&sC(Z)?Z:null}function jH$($){return typeof $==="string"&&/^[0-9a-fA-F]{7,40}$/.test($)?$:null}function Tw4($){let Z=$?.head;return jH$(Z?.sha)}function Rw4($){return jH$($?.sha)}function zH$($){if(!$)return null;if((typeof $.total_count==="number"?$.total_count:null)===0)return null;switch($.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function AH$($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];if(Z.length===0)return null;let Q=!1,X=!1;for(let Y of Z){if(!Y||typeof Y!=="object")continue;let{status:G,conclusion:J}=Y;if(G!=="completed")X=!0;else if(typeof J==="string"&&PH$.has(J))Q=!0}if(Q)return"failing";if(X)return"pending";return"passing"}function TH$($,Z){if($==="failing"||Z==="failing")return"failing";if($==="pending"||Z==="pending")return"pending";if($==="passing"||Z==="passing")return"passing";return null}function Iw4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[],Q=[];for(let X of Z){if(!X||typeof X!=="object")continue;let Y=X;Q.push({id:typeof Y.id==="number"?Y.id:null,name:typeof Y.name==="string"?Y.name:"",status:typeof Y.status==="string"?Y.status:"completed",conclusion:typeof Y.conclusion==="string"?Y.conclusion:null,detailsUrl:typeof Y.html_url==="string"?Y.html_url:typeof Y.details_url==="string"?Y.details_url:null})}return Q}function qw4($){return $.status==="completed"&&$.conclusion!=null&&PH$.has($.conclusion)}async function Mw4($,Z,Q,X,Y){let J=(await Rt($,Z,"GET_CHECK_RUN",{owner:Q.repoOwner,repo:Q.repoName,checkRunId:X},`${Tt(Q)} check-run ${X}`,Y))?.output,W=typeof J?.summary==="string"?J.summary:null,K=typeof J?.text==="string"?J.text:null;return W??K??null}async function RH$($,Z,Q){let X=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!X)return null;let Y=await S5(X,$,!0),G=async(J)=>fw0(await Y.callTool({name:"pull_request_read",arguments:{method:J,owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number}},void 0,{timeout:_w0}));try{let J=null;try{J=zH$(await G("get_status"))}catch{}try{J=TH$(J,AH$(await G("get_check_runs")))}catch{}return J}finally{await Y.close().catch(()=>{})}}function bw0($){if(!$)return null;if($.state!=="open")return!1;if(typeof $.mergeable==="boolean")return!$.mergeable;let Z=$.mergeable_state;if(typeof Z!=="string"||Z===""||Z==="unknown")return null;return Z==="dirty"}async function HD($,Z,Q){let X=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!X)return null;let Y=await S5(X,$,!0);try{return bw0(fw0(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number}},void 0,{timeout:_w0})))}catch{return null}finally{await Y.close().catch(()=>{})}}async function kw4($,Z,Q,X,Y){let G=(N)=>Rt($,Z,"pull_request_read",{method:N,owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number},`${Tt(Q)} (${N})`,X),[J,W,K]=await Promise.all([G("get_status"),G("get_check_runs"),G("get_comments")]),F=TH$(zH$(J),AH$(W)),H=zw4(W)??Ew4(J)??Pw4(K);if(!H){let N=Tw4(await Y)??Rw4(J);if(N)H=Aw4(await Rt($,Z,"GET_PREVIEW_DEPLOYMENT",{owner:Q.repoOwner,repo:Q.repoName,sha:N},`${Tt(Q)} (deployment preview)`,X))}let U=await Promise.all(Iw4(W).map(async(N)=>({name:N.name,status:N.status,conclusion:N.conclusion,detailsUrl:N.detailsUrl,summary:qw4(N)&&N.id!=null?await Mw4($,Z,Q,N.id,X):null})));return{checksStatus:F,checks:U,previewUrl:H}}function Fr0($){return IH$($).every((Z)=>Z.checksStatus!=="failing"&&Z.checksStatus!=="pending")}async function Vw4($,Z,Q){let X=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!X)return Cw0;let{get:Y,closeWhenIdle:G}=EH$(X,$),J=[];try{let W=Rt(Y,X.id,"pull_request_read",{method:"get",owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number},`${Tt(Q)} (get)`,J),[K,F]=await Promise.all([W,kw4(Y,X.id,Q,J,W)]);if(!K)return Cw0;let H=K.state,U=H==="open",N=bw0(K);return{title:typeof K.title==="string"?K.title:null,body:typeof K.body==="string"?K.body:null,state:H==="closed"?"closed":U?"open":null,draft:typeof K.draft==="boolean"?K.draft:null,merged:typeof K.merged==="boolean"?K.merged:null,mergeable:U&&N!==null?!N:null,checksStatus:U?F.checksStatus:null,checks:U?F.checks:[],previewUrl:U?F.previewUrl:null}}catch{return Cw0}finally{G(J)}}async function qH$($,Z,Q,X){let Y=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!Y)return null;let{get:G,closeWhenIdle:J}=EH$(Y,$),W=[];try{return await Rt(G,Y.id,"pull_request_read",{method:"get",owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number},`${Tt(Q)} (${X})`,W)}catch{return null}finally{J(W)}}async function Aw0($,Z,Q){let X=await qH$($,Z,Q,"landing");return{state:X?.state==="closed"?"closed":X?.state==="open"?"open":null,merged:typeof X?.merged==="boolean"?X.merged:null}}async function UH$($,Z,Q){let X=await qH$($,Z,Q,"candidate");return{state:X?.state==="closed"?"closed":X?.state==="open"?"open":null,merged:typeof X?.merged==="boolean"?X.merged:null,checksStatus:Sw4(X?.mergeable_state),conflict:bw0(X)}}function Sw4($){if($==="clean")return"passing";if($==="unstable")return"failing";return null}function Cw4($){let Z=$.findIndex((Q)=>Q!=="closed");return Z===-1?0:Z}async function eC($,Z,Q){if(Q.length<=1)return Q[0];let X=[];for(let Y of Q){let{state:G}=await vg(Z,Y);if(X.push(G),G!=="closed")break}return Q[Cw4(X)]}async function MH$($,Z,Q){let X=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!X)return null;let Y=await S5(X,$,!0);try{let G=fw0(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number}},void 0,{timeout:_w0}));if(!G||G.state!=="open")return null;let J=G.head?.ref;return typeof J==="string"&&J.length>0?J:null}catch{return null}finally{await Y.close().catch(()=>{})}}var _w0=8000,Tt=($)=>`${$.repoOwner}/${$.repoName}#${$.number}`,Cw0,jw4="deco-cx",PH$,Kr0=($)=>IH$($).length>0,IH$=($)=>$.filter((Z)=>Z.state!=="closed"&&Z.merged!==!0),$_;var EZ=D(()=>{q0();gH();hX();D4();a8();BJ();Sg();UQ();QW();x5();ro0();Cg();At();Wr0();Cw0={title:null,body:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};PH$=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);$_=g({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Sw0.object({taskBoardItemId:Sw0.string()}),outputSchema:Sw0.object({prs:Sw0.array(k3$)}),handler:async({taskBoardItemId:$},Z)=>{t(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.taskBoard.getById($,Q),Y=await Z.storage.taskBoard.listPrs($,Q),G=()=>Promise.all(Y.map(async(U)=>{let N=await Vw4(Z,Q,U);return{url:U.url,number:U.number,repoOwner:U.repoOwner,repoName:U.repoName,createdAt:U.createdAt,...N}})),{value:J,live:W}=await Jr0().fetchOrPlaceholder({namespace:Q,key:$,fetchLive:G,placeholder:Y.map((U)=>({url:U.url,number:U.number,repoOwner:U.repoOwner,repoName:U.repoName,createdAt:U.createdAt,...Cw0}))});if(!W)return{prs:J};let K=j$.review,F=J.find((U)=>U.state==="open"&&!U.merged);if(X&&YY(X)&&X.assigneeId===m$&&Kr0(J))await kw0(Z,X,{previewMatchesHead:Fr0(J)}).catch((U)=>{console.error("[task-board] reviewer auto-handoff failed",U)});let H=F?bw0({state:F.state,mergeable:F.mergeable}):null;if(X&&X.status===K&&X.assigneeId===m$&&F&&H===!0)await JD(Z,Q,X,{pr:{number:F.number,url:F.url},conflict:!0}).catch((U)=>{console.error("[task-board] conflict auto-resolve failed",U)});if(oC(J))try{let U=await Z.storage.organizationSettings.get(Q),N=MK(U?.flags);if(X&&sF$(X.status,N)&&!await Z.storage.taskBoard.hasHumanRejectedDone($,Q)){let B=await Z.storage.taskBoard.update($,Q,{status:N},X.updatedBy);await I6(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:X.status,to:N}}),G8(Q,B)}}catch(U){console.error("[task-board] merged-PR reconcile failed",U)}return{prs:J}}})});function VH$($){if(kH$.has($.kind??""))return 0;return xw4($)?fw4:bw4}function xw4($){let Z=$.kind??"";if(kH$.has(Z))return!1;if(_w4.has(Z))return!0;let Q=$.errorText??"";if(!Q)return!1;if(Q.includes(VD0))return!0;let X=Q.replace(/https?:\/\/\S+/gi," ");return vw4.some((Y)=>Y.test(X))}var _w4,kH$,vw4,fw4=3,bw4=1;var SH$=D(()=>{rD0();_w4=new Set(["stall","liveness","projection","abandoned"]),kH$=new Set(["cancelled",...Ot]),vw4=[/sandbox did not become ready/i,/sandbox (?:provisioning|claim) failed/i,/mcp is unusable/i,/harness_crashed: unexpected eof/i,/too many clients already|timeout exceeded when trying to connect/i,/\b(?:429|503)\b|too many requests|service unavailable/i]});function xw0($,Z,Q,X){dY({event:$,organizationId:Z,properties:{task_id:Q.id,reports_task:cX(Q),...X}})}function G8($,Z){b5.emit($,{id:crypto.randomUUID(),type:J1$,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function CH$($,Z){b5.emit($,{id:crypto.randomUUID(),type:W1$,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function yw4($,Z){return $?[$]:Z}async function Z_($,Z,Q){let X=$.metadata?.runMetadata?.taskBoardItemId,Y=!X&&Q?await $.storage.taskBoard.linkedTaskIds(Q,Z):[];return yw4(X,Y)}async function _H$($,Z,Q){let X=$.organization?.id;if(!X)return;try{let Y=j$[Z];for(let G of await Z_($,X,Q)){let J=await $.storage.taskBoard.getById(G,X);if(!J)continue;if(J.status===Y||!Rw0(J.status,Y))continue;let W=await $.storage.taskBoard.update(G,X,{status:Y},$.auth?.user?.id??J.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:J.status,to:Y}}).catch((K)=>console.error("[task-board] activity log write failed",K)),G8(X,W),Z==="progress")xw0("task_run_started",X,W,{from:J.status})}}catch(Y){console.error("[task-board] run transition failed",Y)}}async function yw0($,Z){let Q=$.organization?.id;if(!Q)return;try{for(let X of await Z_($,Q,Z)){let Y=await $.storage.taskBoard.openReviewCycleIfInProgress(X,Q);if(!Y)continue;G8(Q,Y),xw0("task_run_completed",Q,Y,{from:"in_progress",via:"pr_open"})}}catch(X){console.error("[task-board] review-cycle open failed",X)}}async function gw0($,Z,Q,X){let Y=$.organization?.id;if(!Y)return;try{let G=jw0(Z);if(!G)return;let J=await Z_($,Y,X);for(let W of J)await $.storage.taskBoard.linkPr({taskBoardItemId:W,organizationId:Y,url:G.url,prNumber:G.number,repoOwner:G.owner,repoName:G.repo,connectionId:Q??null});if(J.length>0)await jJ(Y)}catch(G){console.error("[task-board] PR capture failed",G)}}async function fg($,Z,Q,X){try{let Y=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,Q);for(let G of Y)G8(Q,G),xw0("task_run_completed",Q,G,{from:"in_progress",via:"thread_finish"});for(let G of Y)await $.clearRunRetry(G.id,Q).catch(()=>{})}catch(Y){console.error("[task-board] thread-finish transition failed",Y)}await Hr0($,Z,Q),await Ur0($,X,Z,Q)}function vH$($){return(rC($.status)??-1)>=Tw0.in_review||Boolean($.reviewCycleStartedAt)}async function Hr0($,Z,Q){try{let X=await $.failedRunInfo(Z,Q);if(!X)return;let Y=VH$(X);for(let G of await $.linkedTaskIds(Z,Q)){let J=await $.getById(G,Q);if(!J)continue;if(vH$(J))await $.relabelDeliveredFailure(Z,Q,uw4).catch(()=>{});if(J.status!==j$.progress)continue;if(J.reviewCycleStartedAt)continue;if(J.threads.some((F)=>F.hasMessages&&F.status==="in_progress"))continue;let W=J.retryAttempts;if(W<Y){let F=Q7(hw4,gw4,W,2,0.5);if(!await $.scheduleRunRetry(G,Q,W+1,new Date(Date.now()+F)))continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:j$.progress,to:j$.progress,retry:W+1,of:Y,reason:X.errorText??X.kind}}).catch(()=>{});continue}let K=await $.returnToTodoAfterFailure(G,Q,J.updatedBy);if(!K)continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:j$.progress,to:j$.queue,reason:X.errorText??X.kind,retriesSpent:W}}).catch(()=>{}),G8(Q,K),xw0("task_run_failed",Q,J,{reason:X.kind??"error",retries_spent:W})}}catch(X){console.error("[task-board] failed-run reaction failed",X)}}async function Ur0($,Z,Q,X){try{for(let Y of await $.linkedTaskIds(Q,X)){let G=await $.getById(Y,X);if(!G)continue;if(vH$(G))continue;if(G.threads.some((W)=>W.hasMessages&&(W.status===null||!jt.has(W.status))))continue;if((await $.listPrs(Y,X)).length>0)continue;await N1$(Z,X,Y)}}catch(Y){console.error("[task-board] quota refund pass failed",Y)}}async function Nr0($,Z){if(Z.status!==j$.progress||!YY(Z))return;try{let Q=await $.storage.taskBoard.update(Z.id,Z.organizationId,{status:j$.review},Z.updatedBy);await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:j$.review}}).catch(()=>{}),G8(Z.organizationId,Q)}catch(Q){console.error(`[task-board] parking ${Z.id} for review failed`,Q)}}async function tK($,Z,Q){let X=Z.organizationId;if(Z.assigneeId!==m$)return!1;try{await Nr0($,Z).catch((G)=>console.warn(`[task-board] parking ${Z.id} before hand-off failed`,G));let Y=await $.storage.taskBoard.unassignSuperAgent(Z.id,X,Z.updatedBy);if(!Y)return!1;return await I6($,{taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:Z.assigneeId,to:null,reason:Q}}),console.warn(`[task-board] ${Z.id} handed to a human: ${Q}`),G8(X,Y),!0}catch(Y){return console.error(`[task-board] handing ${Z.id} to a human failed`,Y),!1}}async function WH$($,Z,Q){if(!(Q instanceof QX))return!1;if(Q.reason!=="runs_exhausted")return!1;return await tK($,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 fH$($,Z){let Q=$.organization?.id;if(!Q)return;try{let X=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,Q);for(let Y of X)G8(Q,Y)}catch(X){console.error("[task-board] thread-run reopen failed",X)}}function bH$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function xH$($){if(lw4.test($))return!0;return cw4.test($)&&dw4.test($)}var gw4=30000,hw4=120000,uw4="Run ended after it had already delivered \u2014 the task moved on without it",lw4,cw4,dw4;var x5=D(()=>{YJ();v4();jU();Vg();EZ();SH$();a8();Lt();D4();UQ();QW();lw4=/\bgh\s+pr\s+create\b/,cw4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,dw4=/(?:-X|--request)\s+POST/});function mw4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&($.harnessId==="decopilot"||$.harnessId==="claude-code"))return"nudge";return"none"}function iw4($){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(`
1402
+ That comment must ALWAYS carry the visual change: embed the before/after screenshots in it whenever the change has any visual surface. If it has none, write the exact words \`${mp}\` in the comment and `+"name why (backend-only, config, test-only) \u2014 that literal is what a "+"machine check looks for, so no paraphrase of it counts, and silence about screenshots is not an acceptable answer either way.\n5. DECIDE. Approve once the pull request is in the state you would approve. Only `request_changes` for something you genuinely cannot settle here (a product decision, a missing credential, an approach that needs "+"rethinking) \u2014 that hands the card to a human, it does not start another "+"agent round. NEVER end your run without having called `TASK_BOARD_REVIEW_DECISION`: a run that stops to wait on a background task, or that runs low on room, must decide on what it knows first. An unrecorded verdict strands the card and is the one failure this run cannot leave behind."}});function Ww4($,Z){return $.status===j$.review&&$.assigneeId===m$&&Z===!0}function so0($){return $.filter((Q)=>Q.action==="merge_conflict_resolution").length>=JH$}async function JD($,Z,Q,X){if(!Ww4(Q,X.conflict))return!1;let G=(await $.storage.organizationSettings.get(Z))?.flags??{};if(!k0$(G))return!1;let J=pH(G),W=await $.storage.taskBoard.listActivity(Q.id,Z);if(!zO(W,J,{cycleStartedAt:Q.reviewCycleStartedAt,verifiedOnly:!0}))return!1;if(so0(W))return console.warn(`[task-board] conflict auto-resolve cap (${JH$}) reached on task ${Q.id} \u2014 leaving the PR for a human`),!1;let K=X.pr,F=await $.storage.taskBoard.claimConflictResolution(Q.id,Z,Q.updatedBy);if(!F)return!1;G8(Z,F);try{await XW($,F,{pr:{number:K.number,url:K.url},resolveConflict:!0})}catch(H){throw await WH$($,F,H).catch(()=>!1),await $.storage.taskBoard.update(F.id,Z,{status:j$.review},"system").then((U)=>G8(Z,U)).catch((U)=>console.error("[task-board] conflict-resolution status revert failed",U)),H}return await I6($,{taskBoardItemId:Q.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:K.number}}),!0}var JH$=3;var Cg=D(()=>{D4();i9();UQ();x5();oK()});async function rK($,Z){let Q=await $.selectFrom("organization").select(["id","slug","name"]).where("id","=",Z).executeTakeFirst();if(!Q)return null;let X=await EJ.create();return X.organization={id:Q.id,slug:Q.slug,name:Q.name},WD(X,{id:Q.id,slug:Q.slug}),X}var _g=D(()=>{KD()});import{DBOS as Zr0}from"@dbos-inc/dbos-sdk";function FH$($){eo0=$}async function Uw4($,Z){if(!eo0)throw Error("[task-board-github-read] runtime not initialized \u2014 setTaskBoardGithubReadRuntime() must run before the workflow fires");let Q=await rK(eo0.db,$);if(!Q)return $r0;return await UH$(Q,$,Z)}async function Nw4($,Z){return await Zr0.runStep(()=>Uw4($,Z),{name:"readPrState"})}function HH$(){if(Vw0)return;Vw0=Zr0.registerWorkflow(Nw4,{name:"taskBoardGithubReadWorkflow"})}async function vg($,Z){if(!Vw0)return $r0;try{return await(await Zr0.startWorkflow(Vw0,{queueName:Hw,timeoutMS:Hw4})($,Z)).getResult()}catch(Q){return console.error("[task-board-github-read] throttled PR read failed",Q),$r0}}var Kw4=20,Fw4=4,Hw4=60000,KH$,eo0=null,$r0,Vw0=null;var At=D(()=>{_g();EZ();KH$={concurrency:Fw4,rateLimit:{limitPerPeriod:Kw4,periodSec:60}};$r0={state:null,merged:null,checksStatus:null,conflict:null}});import{createHash as Bw4}from"crypto";class aC{config;options;now;kv=null;codec=WO();revalidating=new Set;fallback;placeholderFallback=new Map;static MAX_PLACEHOLDER_FALLBACK_ENTRIES=1000;constructor($,Z,Q=()=>Date.now()){this.config=$;this.options=Z;this.now=Q;let X={revalidateAfterMs:$.revalidateAfterMs,maxStaleMs:$.maxStaleMs,maxValueBytes:NH$};this.fallback=new RZ0({"tools/call":X,"resources/read":X,"prompts/get":X})}async init($){if($){this.kv=$;return}let Z=this.options.getJetStream();if(!Z)return;this.kv=await new OH$.Kvm(Z).create(this.config.bucket,{storage:BH$.StorageType.Memory,ttl:this.config.maxStaleMs,maxValueSize:NH$})}storageKey($,Z){let Q=Bw4("sha256").update(Z).digest("hex").slice(0,32);return`${$}.${Q}`}async fetch($){let{namespace:Z,key:Q,fetchLive:X,onRevalidation:Y}=$,{cache:G,revalidateAfterMs:J,maxStaleMs:W}=this.config;if(!this.kv)return this.fallback.fetch({type:"tools/call",connectionId:Z,scope:{kind:"org"},params:{key:Q},fetchLive:X,onRevalidation:Y});let K=this.storageKey(Z,Q),F=await this.read(K),H=F?this.now()-F.storedAt:Number.POSITIVE_INFINITY;if(!F||H>W){FD.add(1,{cache:G,outcome:"miss"});let U=await X();return await this.write(K,U,G),U}if(H>J&&!this.revalidating.has(K))FD.add(1,{cache:G,outcome:"stale"}),this.revalidating.add(K),Y(X().then((U)=>this.write(K,U,G)).catch(()=>{FD.add(1,{cache:G,outcome:"error"})}).finally(()=>this.revalidating.delete(K)));else FD.add(1,{cache:G,outcome:"hit"});return F.value}async fetchOrPlaceholder($){let{namespace:Z,key:Q,fetchLive:X,placeholder:Y}=$,{cache:G,revalidateAfterMs:J,maxStaleMs:W}=this.config,K=this.storageKey(Z,Q),F=await this.read(K),H=F?this.now()-F.storedAt:Number.POSITIVE_INFINITY,U=F!=null&&H<=W;if(U&&H<=J)return FD.add(1,{cache:G,outcome:"hit"}),{value:F.value,live:!0};if(FD.add(1,{cache:G,outcome:U?"stale":"placeholder"}),!this.revalidating.has(K))this.revalidating.add(K),X().then((N)=>this.write(K,N,G)).catch(()=>{FD.add(1,{cache:G,outcome:"error"})}).finally(()=>this.revalidating.delete(K));return U?{value:F.value,live:!0}:{value:Y,live:!1}}async read($){if(!this.kv)return this.placeholderFallback.get($)??null;try{let Z=await this.kv?.get($);if(!Z?.value?.length)return null;if(Z.operation==="DEL"||Z.operation==="PURGE")return null;return this.codec.decode(Z.value)}catch{return null}}async write($,Z,Q){if(!this.kv){if(this.placeholderFallback.size>=aC.MAX_PLACEHOLDER_FALLBACK_ENTRIES){let X=this.placeholderFallback.keys().next().value;if(X!==void 0)this.placeholderFallback.delete(X)}this.placeholderFallback.set($,{storedAt:this.now(),value:Z});return}try{await this.kv?.put($,this.codec.encode({storedAt:this.now(),value:Z}))}catch{FD.add(1,{cache:Q,outcome:"store_rejected"})}}async invalidate($){if(this.fallback.invalidate($),!this.kv)return;try{let Z=await this.kv.keys(`${$}.*`);for await(let Q of Z)await this.kv.delete(Q).catch(()=>{})}catch{}}teardown(){this.kv=null}}function Yr0($){DH$=$?.reads??null,wH$=$?.cards??null}function Gr0(){return DH$??Ow4}function Jr0(){return wH$??Dw4}var BH$,OH$,FD,NH$=524288,Qr0,Xr0,DH$=null,wH$=null,Ow4,Dw4;var Wr0=D(()=>{Cp();Q6();BH$=V(nF(),1),OH$=V(Op(),1),FD=$$.createCounter("pr_read_cache.fetches",{description:"Task board PR cache outcomes (hit, stale, miss, placeholder, error, store_rejected)",unit:"{fetches}"}),Qr0={bucket:"DECOCMS_PR_READS",revalidateAfterMs:55000,maxStaleMs:1800000,cache:"reads"},Xr0={bucket:"DECOCMS_PR_CARDS",revalidateAfterMs:30000,maxStaleMs:86400000,cache:"cards"};Ow4=new aC(Qr0,{getJetStream:()=>null}),Dw4=new aC(Xr0,{getJetStream:()=>null})});import{z as Sw0}from"zod";function vw0($){let Q=($ instanceof Error?$.message:String($)).replace(/https?:\/\/\S+/gi," ");return/too many requests|rate limit|\b429\b/i.test(Q)}function LH$($){return Gr0().invalidate($)}function jJ($){return Jr0().invalidate($)}function ww4($){let Z=null,Q=null;return{get:()=>{return Q??=$().then((X)=>{return Z=X,X}).catch((X)=>{throw Q=null,X}),Q},current:()=>Z}}function EH$($,Z){let{get:Q,current:X}=ww4(()=>S5($,Z,!0));return{get:Q,closeWhenIdle:(Y)=>{Promise.allSettled(Y).then(()=>X()?.close().catch(()=>{}))}}}async function Rt($,Z,Q,X,Y,G){try{let J=await Gr0().fetch({namespace:Z,key:JSON.stringify({name:Q,args:X}),fetchLive:()=>Z6(async()=>{let W=await(await $()).callTool({name:Q,arguments:X},void 0,{timeout:_w0});if(W&&typeof W==="object"&&W.isError)throw Error(W.content?.[0]?.text??`${Q} returned isError`);return W},{maxAttempts:3,minTimeout:300,maxTimeout:3000,jitter:1,isRetriable:(W)=>!vw0(W)}),onRevalidation:(W)=>G.push(W)});return fw0(J)}catch(J){let W=J instanceof MQ?J.cause:J;return console.error(`[task-board] ${Q} failed for ${Y}:`,W),null}}async function zU($,Z,Q,X){if(Q){let G=await $.storage.connections.findById(Q,Z);if(G&&G.status==="active")return G}let{items:Y}=await $.storage.connections.list(Z,{slug:"mcp-github"});return Lw4(Y.filter((G)=>G.status==="active"),X)}function Lw4($,Z){let Q=$.find((Y)=>C5(Y)===null)??null;if(!Z)return Q??$[0]??null;return $.find((Y)=>{let G=C5(Y);return G?.owner===Z.owner&&G?.repo===Z.name})??Q}function fw0($){if(!$||typeof $!=="object")return null;let Z=$;if(Z.isError)return null;if(Z.structuredContent&&typeof Z.structuredContent==="object"&&Object.keys(Z.structuredContent).length>0)return Z.structuredContent;let Q=Z.content?.find((X)=>X.type==="text")?.text;if(!Q)return null;try{return JSON.parse(Q)}catch{return null}}function sC($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")||Z.endsWith(".vercel.app")||Z.endsWith(".vtex.app")}function Ew4($){if(!$||!Array.isArray($.statuses))return null;let Z=$.statuses.map((Q)=>Q&&typeof Q==="object"?Q:null).filter((Q)=>!!Q&&typeof Q.target_url==="string"&&sC(Q.target_url));if(Z.length===0)return null;return Z.find((Q)=>Q.state==="success")?.target_url??Z[0].target_url}function zw4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];for(let Q of Z){if(!Q||typeof Q!=="object")continue;let X=Q,Y=typeof X.name==="string"?/^Workers Builds:\s*([a-z0-9][a-z0-9-]*)\s*$/i.exec(X.name)?.[1]:null;if(!Y)continue;let G=X.output?.summary;if(typeof G!=="string")continue;let J=/Version ID:\s*([0-9a-f]{8})/i.exec(G)?.[1];if(!J)continue;let W=`https://${J}-${Y}.${jw4}.workers.dev`;if(sC(W))return W}return null}function Pw4($){let Z=Array.isArray($)?$:Array.isArray($?.comments)?$.comments:Array.isArray($?.items)?$.items:[],Q=(Y)=>{let G=Y;return Date.parse(G?.updated_at)||Date.parse(G?.created_at)},X=Z.map((Y,G)=>({c:Y,index:G})).sort((Y,G)=>{let J=Q(Y.c),W=Q(G.c);if(Number.isNaN(J)||Number.isNaN(W))return Y.index-G.index;return W-J}).map(({c:Y})=>Y);for(let Y of X){let G=Y&&typeof Y.body==="string"?Y.body:"";if(!G)continue;let J=G.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(J?.[1]&&sC(J[1]))return J[1];let W=(G.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((K)=>sC(K));if(W)return W}return null}function Aw4($){let Z=$&&typeof $.environmentUrl==="string"?$.environmentUrl:null;return Z&&sC(Z)?Z:null}function jH$($){return typeof $==="string"&&/^[0-9a-fA-F]{7,40}$/.test($)?$:null}function Tw4($){let Z=$?.head;return jH$(Z?.sha)}function Rw4($){return jH$($?.sha)}function zH$($){if(!$)return null;if((typeof $.total_count==="number"?$.total_count:null)===0)return null;switch($.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function AH$($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];if(Z.length===0)return null;let Q=!1,X=!1;for(let Y of Z){if(!Y||typeof Y!=="object")continue;let{status:G,conclusion:J}=Y;if(G!=="completed")X=!0;else if(typeof J==="string"&&PH$.has(J))Q=!0}if(Q)return"failing";if(X)return"pending";return"passing"}function TH$($,Z){if($==="failing"||Z==="failing")return"failing";if($==="pending"||Z==="pending")return"pending";if($==="passing"||Z==="passing")return"passing";return null}function Iw4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[],Q=[];for(let X of Z){if(!X||typeof X!=="object")continue;let Y=X;Q.push({id:typeof Y.id==="number"?Y.id:null,name:typeof Y.name==="string"?Y.name:"",status:typeof Y.status==="string"?Y.status:"completed",conclusion:typeof Y.conclusion==="string"?Y.conclusion:null,detailsUrl:typeof Y.html_url==="string"?Y.html_url:typeof Y.details_url==="string"?Y.details_url:null})}return Q}function qw4($){return $.status==="completed"&&$.conclusion!=null&&PH$.has($.conclusion)}async function Mw4($,Z,Q,X,Y){let J=(await Rt($,Z,"GET_CHECK_RUN",{owner:Q.repoOwner,repo:Q.repoName,checkRunId:X},`${Tt(Q)} check-run ${X}`,Y))?.output,W=typeof J?.summary==="string"?J.summary:null,K=typeof J?.text==="string"?J.text:null;return W??K??null}async function RH$($,Z,Q){let X=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!X)return null;let Y=await S5(X,$,!0),G=async(J)=>fw0(await Y.callTool({name:"pull_request_read",arguments:{method:J,owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number}},void 0,{timeout:_w0}));try{let J=null;try{J=zH$(await G("get_status"))}catch{}try{J=TH$(J,AH$(await G("get_check_runs")))}catch{}return J}finally{await Y.close().catch(()=>{})}}function bw0($){if(!$)return null;if($.state!=="open")return!1;if(typeof $.mergeable==="boolean")return!$.mergeable;let Z=$.mergeable_state;if(typeof Z!=="string"||Z===""||Z==="unknown")return null;return Z==="dirty"}async function HD($,Z,Q){let X=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!X)return null;let Y=await S5(X,$,!0);try{return bw0(fw0(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number}},void 0,{timeout:_w0})))}catch{return null}finally{await Y.close().catch(()=>{})}}async function kw4($,Z,Q,X,Y){let G=(N)=>Rt($,Z,"pull_request_read",{method:N,owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number},`${Tt(Q)} (${N})`,X),[J,W,K]=await Promise.all([G("get_status"),G("get_check_runs"),G("get_comments")]),F=TH$(zH$(J),AH$(W)),H=zw4(W)??Ew4(J)??Pw4(K);if(!H){let N=Tw4(await Y)??Rw4(J);if(N)H=Aw4(await Rt($,Z,"GET_PREVIEW_DEPLOYMENT",{owner:Q.repoOwner,repo:Q.repoName,sha:N},`${Tt(Q)} (deployment preview)`,X))}let U=await Promise.all(Iw4(W).map(async(N)=>({name:N.name,status:N.status,conclusion:N.conclusion,detailsUrl:N.detailsUrl,summary:qw4(N)&&N.id!=null?await Mw4($,Z,Q,N.id,X):null})));return{checksStatus:F,checks:U,previewUrl:H}}function Fr0($){return IH$($).every((Z)=>Z.checksStatus!=="failing"&&Z.checksStatus!=="pending")}async function Vw4($,Z,Q){let X=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!X)return Cw0;let{get:Y,closeWhenIdle:G}=EH$(X,$),J=[];try{let W=Rt(Y,X.id,"pull_request_read",{method:"get",owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number},`${Tt(Q)} (get)`,J),[K,F]=await Promise.all([W,kw4(Y,X.id,Q,J,W)]);if(!K)return Cw0;let H=K.state,U=H==="open",N=bw0(K);return{title:typeof K.title==="string"?K.title:null,body:typeof K.body==="string"?K.body:null,state:H==="closed"?"closed":U?"open":null,draft:typeof K.draft==="boolean"?K.draft:null,merged:typeof K.merged==="boolean"?K.merged:null,mergeable:U&&N!==null?!N:null,checksStatus:U?F.checksStatus:null,checks:U?F.checks:[],previewUrl:U?F.previewUrl:null}}catch{return Cw0}finally{G(J)}}async function qH$($,Z,Q,X){let Y=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!Y)return null;let{get:G,closeWhenIdle:J}=EH$(Y,$),W=[];try{return await Rt(G,Y.id,"pull_request_read",{method:"get",owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number},`${Tt(Q)} (${X})`,W)}catch{return null}finally{J(W)}}async function Aw0($,Z,Q){let X=await qH$($,Z,Q,"landing");return{state:X?.state==="closed"?"closed":X?.state==="open"?"open":null,merged:typeof X?.merged==="boolean"?X.merged:null}}async function UH$($,Z,Q){let X=await qH$($,Z,Q,"candidate");return{state:X?.state==="closed"?"closed":X?.state==="open"?"open":null,merged:typeof X?.merged==="boolean"?X.merged:null,checksStatus:Sw4(X?.mergeable_state),conflict:bw0(X)}}function Sw4($){if($==="clean")return"passing";if($==="unstable")return"failing";return null}function Cw4($){let Z=$.findIndex((Q)=>Q!=="closed");return Z===-1?0:Z}async function eC($,Z,Q){if(Q.length<=1)return Q[0];let X=[];for(let Y of Q){let{state:G}=await vg(Z,Y);if(X.push(G),G!=="closed")break}return Q[Cw4(X)]}async function MH$($,Z,Q){let X=await zU($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!X)return null;let Y=await S5(X,$,!0);try{let G=fw0(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number}},void 0,{timeout:_w0}));if(!G||G.state!=="open")return null;let J=G.head?.ref;return typeof J==="string"&&J.length>0?J:null}catch{return null}finally{await Y.close().catch(()=>{})}}var _w0=8000,Tt=($)=>`${$.repoOwner}/${$.repoName}#${$.number}`,Cw0,jw4="deco-cx",PH$,Kr0=($)=>IH$($).length>0,IH$=($)=>$.filter((Z)=>Z.state!=="closed"&&Z.merged!==!0),$_;var EZ=D(()=>{q0();gH();hX();D4();a8();BJ();Sg();UQ();QW();x5();ro0();Cg();At();Wr0();Cw0={title:null,body:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};PH$=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);$_=g({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Sw0.object({taskBoardItemId:Sw0.string()}),outputSchema:Sw0.object({prs:Sw0.array(k3$)}),handler:async({taskBoardItemId:$},Z)=>{t(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.taskBoard.getById($,Q),Y=await Z.storage.taskBoard.listPrs($,Q),G=()=>Promise.all(Y.map(async(U)=>{let N=await Vw4(Z,Q,U);return{url:U.url,number:U.number,repoOwner:U.repoOwner,repoName:U.repoName,createdAt:U.createdAt,...N}})),{value:J,live:W}=await Jr0().fetchOrPlaceholder({namespace:Q,key:$,fetchLive:G,placeholder:Y.map((U)=>({url:U.url,number:U.number,repoOwner:U.repoOwner,repoName:U.repoName,createdAt:U.createdAt,...Cw0}))});if(!W)return{prs:J};let K=j$.review,F=J.find((U)=>U.state==="open"&&!U.merged);if(X&&YY(X)&&X.assigneeId===m$&&Kr0(J))await kw0(Z,X,{previewMatchesHead:Fr0(J)}).catch((U)=>{console.error("[task-board] reviewer auto-handoff failed",U)});let H=F?bw0({state:F.state,mergeable:F.mergeable}):null;if(X&&X.status===K&&X.assigneeId===m$&&F&&H===!0)await JD(Z,Q,X,{pr:{number:F.number,url:F.url},conflict:!0}).catch((U)=>{console.error("[task-board] conflict auto-resolve failed",U)});if(oC(J))try{let U=await Z.storage.organizationSettings.get(Q),N=MK(U?.flags);if(X&&sF$(X.status,N)&&!await Z.storage.taskBoard.hasHumanRejectedDone($,Q)){let B=await Z.storage.taskBoard.update($,Q,{status:N},X.updatedBy);await I6(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:X.status,to:N}}),G8(Q,B)}}catch(U){console.error("[task-board] merged-PR reconcile failed",U)}return{prs:J}}})});function VH$($){if(kH$.has($.kind??""))return 0;return xw4($)?fw4:bw4}function xw4($){let Z=$.kind??"";if(kH$.has(Z))return!1;if(_w4.has(Z))return!0;let Q=$.errorText??"";if(!Q)return!1;if(Q.includes(VD0))return!0;let X=Q.replace(/https?:\/\/\S+/gi," ");return vw4.some((Y)=>Y.test(X))}var _w4,kH$,vw4,fw4=3,bw4=1;var SH$=D(()=>{rD0();_w4=new Set(["stall","liveness","projection","abandoned"]),kH$=new Set(["cancelled",...Ot]),vw4=[/sandbox did not become ready/i,/sandbox (?:provisioning|claim) failed/i,/mcp is unusable/i,/harness_crashed: unexpected eof/i,/too many clients already|timeout exceeded when trying to connect/i,/\b(?:429|503)\b|too many requests|service unavailable/i]});function xw0($,Z,Q,X){dY({event:$,organizationId:Z,properties:{task_id:Q.id,reports_task:cX(Q),...X}})}function G8($,Z){b5.emit($,{id:crypto.randomUUID(),type:J1$,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function CH$($,Z){b5.emit($,{id:crypto.randomUUID(),type:W1$,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function yw4($,Z){return $?[$]:Z}async function Z_($,Z,Q){let X=$.metadata?.runMetadata?.taskBoardItemId,Y=!X&&Q?await $.storage.taskBoard.linkedTaskIds(Q,Z):[];return yw4(X,Y)}async function _H$($,Z,Q){let X=$.organization?.id;if(!X)return;try{let Y=j$[Z];for(let G of await Z_($,X,Q)){let J=await $.storage.taskBoard.getById(G,X);if(!J)continue;if(J.status===Y||!Rw0(J.status,Y))continue;let W=await $.storage.taskBoard.update(G,X,{status:Y},$.auth?.user?.id??J.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:J.status,to:Y}}).catch((K)=>console.error("[task-board] activity log write failed",K)),G8(X,W),Z==="progress")xw0("task_run_started",X,W,{from:J.status})}}catch(Y){console.error("[task-board] run transition failed",Y)}}async function yw0($,Z){let Q=$.organization?.id;if(!Q)return;try{for(let X of await Z_($,Q,Z)){let Y=await $.storage.taskBoard.openReviewCycleIfInProgress(X,Q);if(!Y)continue;G8(Q,Y),xw0("task_run_completed",Q,Y,{from:"in_progress",via:"pr_open"})}}catch(X){console.error("[task-board] review-cycle open failed",X)}}async function gw0($,Z,Q,X){let Y=$.organization?.id;if(!Y)return;try{let G=jw0(Z);if(!G)return;let J=await Z_($,Y,X);for(let W of J)await $.storage.taskBoard.linkPr({taskBoardItemId:W,organizationId:Y,url:G.url,prNumber:G.number,repoOwner:G.owner,repoName:G.repo,connectionId:Q??null});if(J.length>0)await jJ(Y)}catch(G){console.error("[task-board] PR capture failed",G)}}async function fg($,Z,Q,X){try{let Y=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,Q);for(let G of Y)G8(Q,G),xw0("task_run_completed",Q,G,{from:"in_progress",via:"thread_finish"});for(let G of Y)await $.clearRunRetry(G.id,Q).catch(()=>{})}catch(Y){console.error("[task-board] thread-finish transition failed",Y)}await Hr0($,Z,Q),await Ur0($,X,Z,Q)}function vH$($){return(rC($.status)??-1)>=Tw0.in_review||Boolean($.reviewCycleStartedAt)}async function Hr0($,Z,Q){try{let X=await $.failedRunInfo(Z,Q);if(!X)return;let Y=VH$(X);for(let G of await $.linkedTaskIds(Z,Q)){let J=await $.getById(G,Q);if(!J)continue;if(vH$(J))await $.relabelDeliveredFailure(Z,Q,uw4).catch(()=>{});if(J.status!==j$.progress)continue;if(J.reviewCycleStartedAt)continue;if(J.threads.some((F)=>F.hasMessages&&F.status==="in_progress"))continue;let W=J.retryAttempts;if(W<Y){let F=Q7(hw4,gw4,W,2,0.5);if(!await $.scheduleRunRetry(G,Q,W+1,new Date(Date.now()+F)))continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:j$.progress,to:j$.progress,retry:W+1,of:Y,reason:X.errorText??X.kind}}).catch(()=>{});continue}let K=await $.returnToTodoAfterFailure(G,Q,J.updatedBy);if(!K)continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:j$.progress,to:j$.queue,reason:X.errorText??X.kind,retriesSpent:W}}).catch(()=>{}),G8(Q,K),xw0("task_run_failed",Q,J,{reason:X.kind??"error",retries_spent:W})}}catch(X){console.error("[task-board] failed-run reaction failed",X)}}async function Ur0($,Z,Q,X){try{for(let Y of await $.linkedTaskIds(Q,X)){let G=await $.getById(Y,X);if(!G)continue;if(vH$(G))continue;if(G.threads.some((W)=>W.hasMessages&&(W.status===null||!jt.has(W.status))))continue;if((await $.listPrs(Y,X)).length>0)continue;await N1$(Z,X,Y)}}catch(Y){console.error("[task-board] quota refund pass failed",Y)}}async function Nr0($,Z){if(Z.status!==j$.progress||!YY(Z))return;try{let Q=await $.storage.taskBoard.update(Z.id,Z.organizationId,{status:j$.review},Z.updatedBy);await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:j$.review}}).catch(()=>{}),G8(Z.organizationId,Q)}catch(Q){console.error(`[task-board] parking ${Z.id} for review failed`,Q)}}async function tK($,Z,Q){let X=Z.organizationId;if(Z.assigneeId!==m$)return!1;try{await Nr0($,Z).catch((G)=>console.warn(`[task-board] parking ${Z.id} before hand-off failed`,G));let Y=await $.storage.taskBoard.unassignSuperAgent(Z.id,X,Z.updatedBy);if(!Y)return!1;return await I6($,{taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:Z.assigneeId,to:null,reason:Q}}),console.warn(`[task-board] ${Z.id} handed to a human: ${Q}`),G8(X,Y),!0}catch(Y){return console.error(`[task-board] handing ${Z.id} to a human failed`,Y),!1}}async function WH$($,Z,Q){if(!(Q instanceof QX))return!1;if(Q.reason!=="runs_exhausted")return!1;return await tK($,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 fH$($,Z){let Q=$.organization?.id;if(!Q)return;try{let X=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,Q);for(let Y of X)G8(Q,Y)}catch(X){console.error("[task-board] thread-run reopen failed",X)}}function bH$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function xH$($){if(lw4.test($))return!0;return cw4.test($)&&dw4.test($)}var gw4=30000,hw4=120000,uw4="Run ended after it had already delivered \u2014 the task moved on without it",lw4,cw4,dw4;var x5=D(()=>{YJ();v4();jU();Vg();EZ();SH$();a8();Lt();D4();UQ();QW();lw4=/\bgh\s+pr\s+create\b/,cw4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,dw4=/(?:-X|--request)\s+POST/});function mw4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&($.harnessId==="decopilot"||$.harnessId==="claude-code"))return"nudge";return"none"}function iw4($){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(`
1403
1403
  `)}async function pw4($,Z,Q){await Ig($,Z,Q,{messageId:`stall-nudge-${Z.id}-${Q.id}`,prompt:iw4(Q.harness_id),workflowID:`stall-nudge:${Z.id}:${Q.id}`})}async function nw4($,Z){let Q=await $.storage.threads.get(Z);if(!Q)return{action:"none",thread:null};return{action:mw4({status:Q.status,messageStorageVersion:Q.message_storage_version,harnessId:Q.harness_id}),thread:Q}}function tw4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return Bt($,Z)}async function ow4($,Z){let Q=[];for(let X of Z.threads){if(X.status!=="in_progress")continue;let Y=await $.storage.threads.get(X.threadId);if(!Y||!tw4(Y))continue;if(await $.storage.threads.markRunFailed(X.threadId,Br0,"abandoned"))Q.push(X.threadId),console.warn(`[task-board] failed never-started thread ${X.threadId} on ${Z.id}`)}return Q}async function yH$($,Z){let Q=$.organization?.id;if(!Q)return;for(let X of Z){if(X.status==="in_progress")try{if((await ow4($,X)).length>0)continue}catch(J){console.error(`[task-board] reaping threads for ${X.id} failed`,J)}let Y;try{Y=X.repo!=null&&(await $.storage.taskBoard.listPrs(X.id,Q)).length>0}catch(J){console.error(`[task-board] listPrs for ${X.id} failed`,J);continue}if(!lo0(X,Y))continue;let G=X.threads.find((J)=>J.hasMessages);if(!G)continue;try{let{action:J,thread:W}=await nw4($,G.threadId);if(J==="none"||!W)continue;if(J==="advance")await fg($.storage.taskBoard,G.threadId,Q,$.storage.organizationBilling);else await pw4($,X,W)}catch(J){console.error(`[task-board] stall recovery failed for ${X.id}`,J)}}}var Br0="Run never started \u2014 no pod picked it up before the idle window elapsed";var Or0=D(()=>{Hw0();jU();x5()});import{z as aK}from"zod";var rw4,Q_;var Dr0=D(()=>{D4();q0();hX();BJ();Or0();rw4=aK.object({key:aK.string(),title:aK.string(),position:aK.number()}),Q_=g({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:aK.object({}),outputSchema:aK.object({items:aK.array(Lg),repos:aK.array(aK.string()),columns:aK.array(rw4)}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let[X,{items:Y}]=await Promise.all([Z.storage.taskBoard.list(Q),Z.storage.connections.list(Q,{slug:"mcp-github"})]),G=J0$(Y);return yH$(Z,X),{items:X,repos:G,columns:X1$}}})});async function gH$($,Z,Q){if(Z.assigneeId)return Z;let X=Z.organizationId,Y=await $.storage.columnAutomations.get(X,Z.status);if(!Y)return Z;let G=await $.storage.taskBoard.claimUnassignedForSuperAgent(Z.id,X,Q.assignedBy,Q.actor,Z.status);if(!G)return Z;await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:null,to:m$}});try{await UD($,G,{instruction:Y.prompt??void 0})}catch(J){return console.warn(`[task-board] column rule on ${Z.status} rejected for ${Z.id}, un-delegating:`,J instanceof Error?J.message:J),await $.storage.taskBoard.unassignSuperAgent(Z.id,X,Q.actor)??await $.storage.taskBoard.getById(Z.id,X)??G}return G}var hH$=D(()=>{D4();oK()});import{z as KG}from"zod";function ew4($){return sw4.some((Z)=>$[Z]!==void 0)}function $L4($,Z){let Q=[];for(let{field:G,action:J}of aw4){if(Z[G]===$[G])continue;Q.push({action:J,data:{from:$[G],to:Z[G]}})}if(Z.description!==$.description)Q.push({action:"description_changed"});let X=new Set($.tags.map((G)=>G.id));if(Z.tags.length!==$.tags.length||Z.tags.some((G)=>!X.has(G.id)))Q.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return Q}function ZL4($,Z){if($!==m$)return!1;if(!Z)return!1;return Z.assigneeId!==m$?!0:Z.status===j$.queue}function XL4($,Z,Q){let X=$!==void 0&&QL4.has($),Y=Z!==void 0&&YY(Z);return Q&&X&&Y}function wr0($,Z){return $!==void 0&&do0($)&&!Z}var aw4,sw4,QL4,X_;var hw0=D(()=>{D4();q0();i9();BJ();QW();Lt0();oK();UQ();dK();x5();hH$();Vg();EZ();YJ();aw4=[{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"}],sw4=["title","description","status","priority","type","assigneeId","repo","dueDate","sortOrder","tagIds"];QL4=new Set(["approved","merged","post_deploy_validation","done","archived"]);X_=g({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:KG.object({id:KG.string(),title:KG.string().min(1).max(PD0).optional(),description:KG.string().max(zD0).nullable().optional(),status:HU.optional(),priority:vC.optional(),type:sn.optional(),assigneeId:KG.string().nullable().optional(),repo:KG.string().max(AD0).nullable().optional(),dueDate:KG.string().datetime().nullable().optional(),sortOrder:KG.number().optional(),tagIds:KG.array(KG.string()).max(1000).optional(),linkThreadId:KG.string().optional(),prUrl:KG.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:KG.object({item:Lg}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=$.prUrl?GD($.prUrl):null;if($.prUrl&&!X)throw Error(`Not a GitHub pull request URL: ${$.prUrl} (expected https://github.com/<owner>/<repo>/pull/<number>)`);if($.assigneeId)await RD0(Z,Q,$.assigneeId);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,Q))throw Error(`Task board item not found: ${$.id}`);if(!await Z.storage.threads.get($.linkThreadId))throw Error(`Thread not found: ${$.linkThreadId}`);await Z.storage.taskBoard.linkThread($.id,$.linkThreadId,Q)}let Y=ew4($),G=Y?await Z.storage.taskBoard.getById($.id,Q):null;if(Y&&!G)throw Error(`Task board item not found: ${$.id}`);if($.status!==void 0&&do0($.status)){let N=await Z.storage.organizationSettings.get(Q);if(wr0($.status,ZX(N?.flags,"delivery_lanes_enabled")))throw Error("Delivery lanes are not enabled for this organization \u2014 enable "+"them in Settings before moving a task to Approved, Merged, or Post-deploy Validation.")}let J=e3.getStore()!==void 0;if(XL4($.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 W=$.assigneeId!==void 0&&$.assigneeId!==(G?.assigneeId??null),K=ZL4($.assigneeId,G),H=(K?j$.queue:void 0)??$.status;if(G&&cX(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(K)await _y(Z,G,TO())}if($.tagIds!==void 0){let N=await Z.storage.tags.listOrgTags(Q),B=new Set(N.map((O)=>O.id));for(let O of $.tagIds)if(!B.has(O))throw Error(`Tag not found: ${O}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,t0(Z))}let U;if(Y)U=await Z.storage.taskBoard.update($.id,Q,{title:$.title,description:$.description,status:H,priority:$.priority,type:$.type,assigneeId:$.assigneeId,assignedBy:W?$.assigneeId?t0(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder},t0(Z));else{let N=await Z.storage.taskBoard.getById($.id,Q);if(!N)throw Error(`Task board item not found: ${$.id}`);U=N}if(X)await Z.storage.taskBoard.linkPr({taskBoardItemId:U.id,organizationId:Q,url:X.url,prNumber:X.number,repoOwner:X.owner,repoName:X.repo,connectionId:null}),await jJ(Q).catch((N)=>{console.error("[task-board] PR card cache invalidation failed",N)});if(G){let N=t0(Z),B=$L4(G,U);if(B.length>0)await oF$(Z,B.map((O)=>({taskBoardItemId:U.id,actorId:N,...O,alsoSubscribe:O.action==="assignee_changed"&&U.assigneeId!==m$?[U.assigneeId]:void 0})))}if(G&&U.description!==G.description)await Z.storage.notifications.notifyMentions({taskBoardItemId:U.id,organizationId:Q,actorId:t0(Z),body:U.description??"",previousBody:G.description});if(Y||$.linkThreadId||X)G8(Q,U);if(K)return await UD(Z,U,{userInitiated:!0}),{item:U};if($.status!==void 0&&G!==null&&G.status!==U.status)U=await gH$(Z,U,{assignedBy:t0(Z),actor:t0(Z)});return{item:U}}})});import{z as uw0}from"zod";var Y_;var Lr0=D(()=>{q0();x5();Y_=g({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:uw0.object({id:uw0.string()}),outputSchema:uw0.object({success:uw0.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.taskBoard.delete($.id,Q,t0(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return CH$(Q,$.id),{success:!0}}})});function uH$($){return{TASK_BOARD_ITEM_LIST:V$({description:Q_.description,inputSchema:$0(Q_.inputSchema),execute:(Z)=>Q_.execute(Z,$)}),TASK_BOARD_ITEM_CREATE:V$({description:G_.description,inputSchema:$0(G_.inputSchema),execute:(Z)=>G_.execute(Z,$)}),TASK_BOARD_ITEM_UPDATE:V$({description:X_.description,inputSchema:$0(X_.inputSchema),execute:(Z)=>X_.execute(Z,$)}),TASK_BOARD_ITEM_DELETE:V$({description:Y_.description,inputSchema:$0(Y_.inputSchema),execute:(Z)=>Y_.execute(Z,$)}),TASK_BOARD_ITEM_PRS_GET:V$({description:$_.description,inputSchema:$0($_.inputSchema),execute:(Z)=>$_.execute(Z,$)})}}var lH$=D(()=>{g4();Er0();Dr0();hw0();Lr0();EZ()});async function GL4($,Z,Q){let{provider:X,imageProvider:Y,webSearchProvider:G,deepResearchProvider:J,organization:W,models:K,toolApprovalLevel:F="auto",isPlanMode:H=!1,toolOutputMap:U,pendingImages:N,passthroughClient:B,vmContext:O,htmlArtifactBuffer:w,taskId:L,agentId:E,onChildUsage:j,backgroundDispatcher:z}=Z,P={isPlanMode:H},A=Q.auth?.user?.id,I=fK$({writer:$,toolOutputMap:U,passthroughClient:B,toolApprovalLevel:F,isPlanMode:H,objectStorage:Q.objectStorage});if(A)I.update_interests=jK$({write:async(S)=>{await Q.storage.interests.setForAgent(S.orgId,S.agentId,S.userId,{interests:S.interests})},orgId:W.id,agentId:E,userId:A});Object.assign(I,lK$(Q)),Object.assign(I,await WL4(Q,L)?MF$(Q,L):uH$(Q));let k=Gt(F,!1,P)!==!1,M;if(O){let S=await Og(Q,{virtualMcpId:O.virtualMcpId,branch:O.branch,userId:O.userId,syncTools:O.syncTools,threadId:O.threadId}),m=LK$(S);M=DK$({fs:m.fs,htmlArtifactBuffer:w,toolOutputMap:U,needsApproval:k,pendingImages:N}),Object.assign(I,M);let f=await j3$({ctx:Q,orgId:W.id,virtualMcpId:O.virtualMcpId,userId:O.userId,threadId:O.threadId,writer:$,rebindFs:async(b)=>{m.swap(await Og(Q,{virtualMcpId:O.virtualMcpId,branch:b,userId:O.userId,syncTools:O.syncTools,threadId:O.threadId}))}});if(f)I.load_repo=f}if(X)I.subtask=Ut("subtask",zr0,Pr0($,{provider:X,organization:W,models:K,self:{id:E},currentThreadId:L,needsApproval:Gt(F,!1,P)!==!1,onChildUsage:j,vmTools:M,parentBuiltInParams:Z},Q),z,(S)=>kK$(L,S));if(Y&&K.image&&Q.objectStorage)I.generate_image=Ut("generate_image",Ft,IK$($,{provider:Y,imageModelInfo:K.image,objectStorage:Q.objectStorage,allowHttpExternalUrls:V0().localMode}),z);if(G&&K.webSearch){let S=et0({provider:G,modelInfo:K.webSearch,ctx:Q,mode:"quick",toolName:"web_search"});I.web_search=rt0($,{researchJob:S,toolOutputMap:U,taskId:L})}if(J&&K.deepResearch){let S=et0({provider:J,modelInfo:K.deepResearch,ctx:Q,mode:"deep",toolName:"deep_research"});I.deep_research=rt0($,{researchJob:S,toolOutputMap:U,taskId:L,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}return I}function JL4($,Z,Q){let X=Z.organization.id,Y=Q.auth?.user?.id,G={};for(let[J,W]of Object.entries($)){let K=W,F=K.execute;if(typeof F!=="function"){G[J]=W;continue}let H=YL4[J],U=F.constructor?.name==="AsyncGeneratorFunction",N=(O,w)=>{if(!X||!Y)return;_1.capture({distinctId:Y,event:"tool_called",groups:{organization:X},properties:{organization_id:X,tool_source:"builtin",tool_name:J,tool_safe_name:J,read_only:H?.readOnly??null,destructive:H?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(O),is_error:w}})},B=U?async function*(O,w){let L=performance.now(),E=!1;try{yield*F.call(K,O,w)}catch(j){throw E=!0,j}finally{N(performance.now()-L,E)}}:async(O,w)=>{let L=performance.now(),E=!1;try{return await F.call(K,O,w)}catch(j){throw E=!0,j}finally{N(performance.now()-L,E)}};G[J]={...K,execute:B}}return G}async function lw0($,Z,Q){let X=await GL4($,Z,Q),Y=JL4(X,Z,Q);if(!Z.isPlanMode){let{propose_plan:G,...J}=Y;return J}return Y}function cH$($){let{ctx:Z,writer:Q,toolOutputMap:X,subtaskParams:Y,planMode:G}=$,J={user_ask:cD0,todo_write:dD0,read_tool_output:hD0({toolOutputMap:X})};if(G)J.propose_plan=iD0;if(Y.provider)J.subtask=Pr0(Q,Y,Z);return J}async function WL4($,Z){try{return(await $.storage.threads.get(Z))?.metadata?.source==="jira"}catch{return!1}}var YL4;var jr0=D(()=>{v4();Jt();OU();wK$();ED0();jD0();Ar0();ct0();dt0();zK$();mt0();qK$();nt0();ot0();Ht();SK$();vK$();bK$();cK$();kF$();lH$();D$();YL4={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1},TASK_BOARD_ITEM_LIST:{readOnly:!0,destructive:!1},TASK_BOARD_ITEM_CREATE:{readOnly:!1,destructive:!1},TASK_BOARD_ITEM_UPDATE:{readOnly:!1,destructive:!1},TASK_BOARD_ITEM_DELETE:{readOnly:!1,destructive:!0},TASK_BOARD_ITEM_PRS_GET:{readOnly:!0,destructive:!1}}});async function dH$($){let Z=$.toolOutputMap??gD0(),{tools:Q,nameMap:X}=await lD0($.mcpClient,Z,$.writer,$.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:$.planMode,timeoutMs:yD0,resolveArgs:$.resolveArgs,onToolCalled:$.onToolCalled,onPrOpened:$.onPrOpened}),Y=$.fullBuiltInParams?await lw0($.writer,{...$.fullBuiltInParams,toolOutputMap:Z},$.ctx):cH$({ctx:$.ctx,writer:$.writer,toolOutputMap:Z,subtaskParams:$.subtaskParams,planMode:$.planMode}),G=$.kind==="subagent"?Object.fromEntries(Object.entries(Y).filter(([W])=>!KL4.includes(W))):Y;return{tools:{...Q,...G},toolOutputMap:Z,nameMap:X}}var KL4;var mH$=D(()=>{Jt();OU();jr0();KL4=["subtask","user_ask","propose_plan"]});var dw0={};j4(dw0,{waitForSeed:()=>EL4,seedLocalMode:()=>DL4,pruneUndecryptableJwks:()=>nH$,markSeedComplete:()=>LL4,isLocalMode:()=>PU,healLocalJwks:()=>NL4,getLocalAdminUser:()=>Tr0,getLocalAdminPassword:()=>cw0});import{symmetricDecrypt as FL4}from"better-auth/crypto";import{sql as iH$}from"kysely";import{userInfo as HL4}from"os";async function NL4(){let $=V0();if(!$.localMode)return 0;if(!$.betterAuthSecret)return 0;return nH$(B8().db,$.betterAuthSecret)}async function nH$($,Z){let Q;try{Q=(await iH$`
1404
1404
  select id, "privateKey" from jwks
1405
1405
  `.execute($)).rows}catch(Y){if(Y?.code==="42P01")return 0;return console.warn("[local-mode] JWKS heal skipped \u2014 could not read jwks:",Y),0}let X=0;for(let Y of Q){let G=!0;try{await FL4({key:Z,data:JSON.parse(Y.privateKey)})}catch{G=!1}if(G)continue;try{await iH$`delete from jwks where id = ${Y.id}`.execute($),X++}catch(J){console.warn(`[local-mode] JWKS heal could not delete stale key ${Y.id}:`,J)}}return X}async function cw0(){return"local-mode-default"}function tH$(){try{return HL4().username||"local"}catch{return"local"}}function BL4($){return $.charAt(0).toUpperCase()+$.slice(1)}async function OL4(){let $=B8(),Z=await $.db.selectFrom("user").select($.db.fn.countAll().as("count")).executeTakeFirst();return Number(Z?.count??0)===0}async function DL4(){if(!await OL4())return!1;let Z=tH$(),Q=`${Z}@${pH$}`,X=BL4(Z),Y=await cw0(),G=await $8.api.signUpEmail({body:{email:Q,password:Y,name:X}});if(!G?.user?.id)throw Error("Failed to create local admin user");let J=G.user.id,W=B8();await W.db.updateTable("user").set({role:"admin"}).where("id","=",J).execute();let K=`${Z}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),F=`${X} Local`;return await W.db.updateTable("organization").set({name:F,slug:K}).where("id","in",(H)=>H.selectFrom("member").select("organizationId").where("userId","=",J)).execute(),!0}async function Tr0(){let $=B8(),Z=tH$(),Q=await $.db.selectFrom("user").where("email","=",`${Z}@${pH$}`).selectAll().executeTakeFirst();if(Q)return Q;return $.db.selectFrom("user").where("email","=",`${Z}@${UL4}`).selectAll().executeTakeFirst()}function PU(){return V0().localMode}function LL4(){oH$()}function EL4(){return wL4}var pH$="localhost.studio",UL4="localhost.mesh",oH$,wL4;var J_=D(()=>{aG();D$();tY();wL4=new Promise(($)=>{if(oH$=$,!PU())$()})});var rH$=D(()=>{pD0()});function zL4($){return $.type==="file"&&"mediaType"in $&&typeof $.mediaType==="string"&&jL4.has($.mediaType)}function QU$($){let Z=$.match(/^data:([^;]+);base64,(.+)$/s);if(!Z)return null;let[,Q,X]=Z;try{let Y=atob(X),G=new Uint8Array(Y.length);for(let J=0;J<Y.length;J++)G[J]=Y.charCodeAt(J);return{mimeType:Q,bytes:G}}catch{return null}}function Rr0($){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[$]??"bin"}async function PL4($,Z,Q,X){if(!X.objectStorage)return null;try{return await X.objectStorage.put(Z,$,{contentType:Q}),Z}catch(Y){return console.error("[file-materializer] Failed to upload file:",Y),null}}async function It($,Z){if(!Z.objectStorage)return null;try{return await Z.objectStorage.presignedGetUrl($,AL4)}catch(Q){return console.error("[file-materializer] Failed to generate presigned URL:",Q),null}}function XU$($){try{return decodeURIComponent($)}catch{return $}}function sH$($,Z){let Q=typeof $.filename==="string"&&$.filename.trim()?$.filename:`attachment.${Rr0(Z)}`,X=Q.match(TL4);if(X?.[1])Q=XU$(X[1]);return[...Q.split(/[\\/]/).pop()??Q].filter((J)=>(J.codePointAt(0)??0)>=32).join("").trim()||`attachment.${Rr0(Z)}`}function eH$($,Z){if(!Z.has($))return Z.add($),$;let Q=$.lastIndexOf("."),X=Q>0?$.slice(0,Q):$,Y=Q>0?$.slice(Q):"";for(let G=2;;G++){let J=`${X} (${G})${Y}`;if(!Z.has(J))return Z.add(J),J}}async function $U$($,Z,Q,X,Y){if(!Y||!X.orgFs)return console.warn("[file-materializer] uploads-volume write skipped",{hasThreadId:Boolean(Y),hasOrgFs:Boolean(X.orgFs)}),null;try{let G=`${Y}/${Q}`;return await X.orgFs.write("uploads",G,$,{actor:X.auth?.user?.id??"unknown",contentType:Z}),{key:cW("uploads",G),sandboxPath:`org/upload/${Q}`}}catch(G){return console.error("[file-materializer] uploads-volume write failed:",G),null}}async function mw0($,Z,Q){if(!Z.organization)return $;let X=Z.organization.slug;if(!X)return $;let Y=$.findLastIndex((P)=>P.role==="user");if(Y===-1)return $;let G=$[Y],J=G.parts.filter((P)=>P.type==="file"&&("url"in P)&&typeof P.url==="string"&&P.url.startsWith("data:")),K=Boolean(Q?.threadId&&Z.orgFs)?G.parts.flatMap((P)=>{if(P.type!=="text"||!("text"in P)||typeof P.text!=="string")return[];let A=P.text.match(RL4);if(!A?.[1]||A[2]===void 0)return[];return[{name:XU$(A[1]),content:A[2]}]}):[];if(J.length===0&&K.length===0)return $;let F=new Set,H=J.flatMap((P)=>{if(P.type!=="file"||!("url"in P)||typeof P.url!=="string")return[];let A=QU$(P.url);if(!A)return[];let I=eH$(sH$(P,A.mimeType),F);return[{dataUrl:P.url,parsed:A,filename:I}]}),U=K.map(({name:P,content:A})=>({filename:eH$(sH$({filename:P},"text/plain"),F),content:A})),B=(await Promise.all([...H.map(async({dataUrl:P,parsed:A,filename:I})=>{let k=await $U$(A.bytes,A.mimeType,I,Z,Q?.threadId);if(!k)return null;return{dataUrl:P,studioStorageUrl:wU(k.key),redirectUrl:Kb(Z.baseUrl,X,k.key),filename:I,sandboxPath:k.sandboxPath}}),...U.map(async({filename:P,content:A})=>{let I=await $U$(new TextEncoder().encode(A),bZ(P),P,Z,Q?.threadId);if(!I)return null;return{dataUrl:null,studioStorageUrl:wU(I.key),redirectUrl:Kb(Z.baseUrl,X,I.key),filename:P,sandboxPath:I.sandboxPath}})])).filter((P)=>P!==null);if(B.length===0)return $;let O=B.map((P)=>P.sandboxPath?`- ${P.filename}: ${P.sandboxPath} (tool URL: ${P.studioStorageUrl})`:`- ${P.filename}: ${P.studioStorageUrl}`).join(`
@@ -2980,7 +2980,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
2980
2980
  ${G.join(`
2981
2981
  `)}`:Y}function zB6($){let Z=new Set;for(let Q of $)for(let X of Q.split(`
2982
2982
  `)){let Y=X.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Md$=200,HB6=12,NB6,OB6=300,XQ1=3;var YQ1=D(()=>{Zw();gT0();NB6={aheadBy:0,behindBy:0,files:[]}});function AB6($){if(!$||$.includes(".."))return!1;return PB6.test($)}function Vd$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!AB6(Z))return null;let{__resolveType:Q,...X}=$;return{resolveType:Z,payload:X}}function Sd$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var PB6;var Cd$=D(()=>{PB6=/^[\w./@-]+$/});function Cs($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function _d$($,Z,Q,X){if(!X.connectionId)throw new bv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new bv(H9);await uO({ctx:$,connectionId:X.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let U=H instanceof Error?H.message:H9;throw new bv(U)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await xK(X.connectionId,X.owner,X.name,$.db,$.vault).catch((H)=>{let{code:U,message:N}=S9$(H instanceof Error?H.message:String(H));throw U?new bv(N):H}),K=Gl($),F=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!F.ok){let H=await hO(F,TB6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var TB6=10485760,bv;var GQ1=D(()=>{FJ();MT0();Pn();pi0();oy();bv=class bv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function IB6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!RB6.test(Z))throw Error(`Invalid branch name: ${$}`)}function xv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(MB6)])}async function VB6($,Z){let Q=$.var.studioContext,X=WJ(Z.branch),Y=$.req.query("thread")??X,G=Y&&Y===X?Z.branchThread:Y?await Q.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=_C(J?.metadata?.runtime);if(W)return W;let K=OD0(Z.virtualMcpMetadata),F=K==="cms"?await h71(Q,{claimName:Z.claimName}):"alive",H=K==="cms"&&F!=="alive"?"cms":"sandbox",U=!!J&&(F==="gone"||F==="alive"&&K==="cms");if(U&&J)rn(Q,J.id,H);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:U});return H}async function SB6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await FX($.var.studioContext)}catch{return null}}function yv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Hl($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),X=$.var.studioContext,Y=Cs(Z,Q);if(!Y)throw new d4(404,"AUTH","repo","Project has no GitHub repository");let G=n(X);return kT0(X,G.id,Y)}function JQ1($,Z){if(Z instanceof SA0)return $.json({error:Z.message},429,{...R5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof d4){let X=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},X,R5)}let Q=Z instanceof Error?Z.message:String(Z);return $.json({error:Q},502,R5)}async function bd$($,Z,Q){let X;try{X=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await X.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:X.status,headers:{"content-type":X.headers.get("content-type")??"application/json"}})}async function xd$($){try{let Z=await Hl($),Q=await hT0(Z,$.get("vmClaim").branch);return $.json(Q,200,R5)}catch(Z){return JQ1($,Z)}}function _s($,Z){let X=(cT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=X.catch(()=>{});return cT0.set($,Y),Y.finally(()=>{if(cT0.get($)===Y)cT0.delete($)}),X}async function eZ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,R5);let X=Q?.runner??yv($);if(X instanceof Response)return X;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=Q?.method??"POST",K=null,F=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,F.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=Q?.signal,U={method:W,headers:F,body:K,...H?{signal:H}:{}},N=async()=>{let B=await X.proxyDaemonRequest(Y,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await X.adoptLiveClaim({userId:G,projectRef:J},Y))B=await X.proxyDaemonRequest(Y,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...R5}})}}let O=await B.text(),w=Q?.redactRepoDir?CB6(O):O,L=B.headers.get("content-type")??"application/json";return new Response(w,{status:B.status,headers:{"content-type":L,...R5}})};try{if(H){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((w,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function CB6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function dT0($,Z,Q,X="GET",Y){let G=await $.proxyDaemonRequest(Z,Q,{method:X,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,Q,{method:X,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function _B6($){return yd$.includes($)}var RB6,vd$=524288,qB6=65536,MB6=1e4,fd$=2000,kB6,cT0,R5,yd$,gd$=()=>{let $=new J1;$.use("/:virtualMcpId/:branch/*",kB6),$.post("/:virtualMcpId/:branch/write",(Q)=>eZ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:xv(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>eZ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:xv(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>eZ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:xv(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>eZ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:xv(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>eZ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:xv(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>eZ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:xv(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>eZ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:xv(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let X=Q.req.param("script");if(!X)return Q.json({error:"missing script name"},400);return eZ(Q,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let X=Q.req.param("script");if(!X)return Q.json({error:"missing script name"},400);return eZ(Q,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>eZ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>eZ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let X=Q.req.param("step");if(!X||!_B6(X))return Q.json({error:`step must be one of: ${yd$.join(", ")}`},400);let Y=Q.get("vmClaim"),G=await h71(Q.var.studioContext,{claimName:Y.claimName})==="gone"?null:await SB6(Q);if(!G)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,R5);if(X==="start"){let J=n(Q.var.studioContext),W=ny(Y.virtualMcpMetadata);try{await v70({ctx:Q.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let F=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${F}`},502)}}return eZ(Q,`/_sandbox/setup/${X}`,{signal:Q.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let X=Q.get("vmClaim");if(!X.runner)return QN(Q,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return gc$(Q,{ctx:Q.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return xd$(Q);return Z(Q)});let Z=(Q)=>eZ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(fd$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return xd$(Q);return eZ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(fd$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")try{let Y=await Q.req.json().catch(()=>({})),G=await Hl(Q),J=await uT0(G,X.branch,Y.base);return Q.json(J,200,R5)}catch(Y){return JQ1(Q,Y)}return eZ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,R5);let X=yv(Q);if(X instanceof Response)return X;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=Q.get("vmClaim"),W=Q.var.studioContext;return _s(Y,async()=>{try{await u71(W,X,Y);let K=Cs(G,J);if(K)await _d$(W,X,Y,K)}catch(K){if(K instanceof bv)return Q.json({error:K.message},403,R5);let F=K instanceof Error?K.message:String(K);return Q.json({error:F},502,R5)}return eZ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")return _s(X.claimName,async()=>{let Y=await Q.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return Q.json({error:"filepaths is required"},400,R5);try{let J=await Hl(Q);return await kd$(J,X.branch,G),Q.json({ok:!0},200,R5)}catch(J){let W=J instanceof d4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return Q.json({error:K},W,R5)}});return _s(X.claimName,()=>eZ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")return _s(X.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await Hl(Q),F=W.base??await K.getDefaultBranch();return await lT0(K,X.branch,F),Q.json({ok:!0},200,R5)}catch(W){return JQ1(Q,W)}});let Y=yv(Q);if(Y instanceof Response)return Y;let{claimName:G}=Q.get("vmClaim"),J=Q.var.studioContext;return _s(G,async()=>{try{await u71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,R5)}return eZ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",a5({maxSize:vd$,onError:(Q)=>Q.json({error:"Payload too large"},413,R5)}),async(Q)=>{let X=Q.get("vmClaim"),Y=null;if(X.runtime!=="cms"){let F=yv(Q);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=X,K=Q.var.studioContext;try{let F=await Q.req.json().catch(()=>({})),H=F.status,U=F.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=d71(H)&&N?[H,U]:Y?await Promise.all([dT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),dT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hl(Q);return Promise.all([hT0(L,X.branch),uT0(L,X.branch)])})(),w=await dc$(K,B,O);return Q.json(w,200,R5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return Q.json({error:H},502,R5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",a5({maxSize:vd$,onError:(Q)=>Q.json({error:"Payload too large"},413,R5)}),async(Q)=>{let X=Q.get("vmClaim"),Y=null;if(X.runtime!=="cms"){let F=yv(Q);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=X,K=Q.var.studioContext;try{let F=await Q.req.json().catch(()=>({})),H=F.status,U=F.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=d71(H)&&N?[H,U]:Y?await Promise.all([dT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),dT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hl(Q);return Promise.all([hT0(L,X.branch),uT0(L,X.branch)])})(),w=await ic$(K,B,O,typeof F.language==="string"?F.language:void 0);return Q.json(w,200,R5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return Q.json({error:H},502,R5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let X=yv(Q);if(X instanceof Response)return X;let{claimName:Y}=Q.get("vmClaim"),G=Q.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return Q.json({error:"Path not allowed"},403);let J;try{J=await X.getPreviewUrl(Y)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return bd$(Q,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",a5({maxSize:qB6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let X=yv(Q);if(X instanceof Response)return X;let{claimName:Y}=Q.get("vmClaim"),G;try{G=await X.getPreviewUrl(Y)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let J;try{J=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return Q.json({error:"Invalid JSON body"},400);let W=Vd$(J);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=Sd$(G,W.resolveType);return bd$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var hd$=D(()=>{d$();VF();Yl();g71();Dn();bc$();n3();Ng();xc$();s3();yc$();hc$();di0();jn();p71();pc$();t71();Zw();YQ1();Cd$();GQ1();RB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;kB6=qT0(async($,Z)=>{let Q=$.var.studioContext;try{t(Q)}catch{return $.json({error:"Unauthorized"},401)}let X=t0(Q);if(!X)return $.json({error:"Unauthorized"},401);let Y;try{Y=n(Q)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{IB6(J)}catch(w){let L=w instanceof Error?w.message:String(w);return $.json({error:L},400)}let W=await Q.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Bn({orgId:Y.id,virtualMcpId:G,branch:J}),F=await yi0(Q,J),H=gi0(F,X),U=fc$({userId:H,projectRef:K}),N=W.metadata??null,B=await VB6($,{claimName:U,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:N,branchThread:F});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:X,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:B}),Z();let O;try{O=await FX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:X,runner:O,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:B}),Z()});cT0=new Map;R5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};yd$=["clone","install","start"]});function ud$($,Z,Q){let X=WQ1.get($);if(!X)X={pending:null,running:!1},WQ1.set($,X);if(!X.pending)X.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=X.pending;Y.deps=Z;for(let[J,W]of Object.entries(Q.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of Q.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!X.running)fB6($,X);return G}async function fB6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let X=await bB6(Q);for(let Y of Q.resolvers)Y(X)}catch(X){for(let Y of Q.rejecters)Y(X)}}}finally{if(Z.running=!1,!Z.pending)WQ1.delete($)}}async function bB6($){let{client:Z,branch:Q,packagePath:X}=$.deps;for(let Y=0;;Y++){let G=await Fl(Z,Q),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,X),K=ZQ1(W,X),F=[],H=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,w]of $.set){let L=QQ1(K,O),E=`${JSON.stringify(w,null,2)}
2983
- `,j=await Z.createBlob(E);await Rd$(Z.owner,Z.repo,j,E);let z=L[0]??`${yT0(X)}/${r71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let P=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:P,sha:j,content:E});for(let A of L.slice(1))F.push({path:A,mode:"100644",type:"blob",sha:null}),H.delete(A)}for(let O of $.del)for(let w of QQ1(K,O))F.push({path:w,mode:"100644",type:"blob",sha:null}),H.delete(w);if(F.length===0)return G;let U=X?`${X}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===U)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:w,skipped:L}=Ms(O);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:Q,packagePath:X,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(w);F.push({path:U,mode:"100644",type:"blob",sha:E})}let N=await Z.createTree(J,F),B=await Z.createCommit({message:xB6($),treeSha:N,parentShas:[G]});try{return await Z.updateRef(Q,B),B}catch(O){if(!(O instanceof d4&&O.status===422)||Y>=vB6-1)throw O;await L$(Q7(2000,200,Y,2,0.5))}}}function xB6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let X=`chore(decofile): ${Q.join("; ")}`;return Mi0(X,$.deps.coAuthor)}var vB6=3,WQ1;var ld$=D(()=>{k70();ST0();a8();Zw();gT0();WQ1=new Map});import{createHmac as cd$,randomBytes as yB6,timingSafeEqual as gB6}from"crypto";function dd$(){if(mT0)return mT0;let $;try{let Z=V0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mT0=$?Buffer.from($):yB6(32),mT0}function KQ1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+hB6)/1000)},X=Buffer.from(JSON.stringify(Q)).toString("base64url"),Y=cd$("sha256",dd$()).update(X).digest("base64url");return`${X}.${Y}`}function md$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let X=$.slice(0,Q),Y=Buffer.from($.slice(Q+1)),G=Buffer.from(cd$("sha256",dd$()).update(X).digest("base64url"));if(Y.length!==G.length||!gB6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(X,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var hB6=21600000,mT0=null;var id$=D(()=>{D$()});import{z as Ul}from"zod";function lB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&uB6.test($)}function rd$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function vs($){let Z=$.get("decofileScope");return kT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function fs($,Z){if(Z instanceof d4){let X=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},X)}let Q=Z instanceof Error?Z.message:String(Z);return $.json({error:Q},500)}function ad$(){let $=new J1;return $.use("/:virtualMcpId/:branch",od$),$.use("/:virtualMcpId/:branch/*",od$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await vs(Z),Y=await Id$(X,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!Q.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=KQ1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(rd$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(X){return fs(Z,X)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),X=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await vs(Z),G=await Y.getFileTextAtRef(Q.branch,X);if(G===null){let J=await Y.getDefaultBranch();if(J!==Q.branch)G=await Y.getFileTextAtRef(J,X)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return fs(Z,Y)}}),$.patch("/:virtualMcpId/:branch",dB6,async(Z)=>{let Q=Z.get("decofileScope"),X=Z.var.studioContext,Y=mB6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{VT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(o71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await vs(Z),W=await ud$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:J,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Gl(X)},G),K=KQ1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:rd$(Z)})}catch(J){return fs(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await vs(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${Q.branch}`;try{let J;try{J=await X.mergeBranch(Y,Q.branch,G)}catch(W){if(!(W instanceof d4&&W.status===409))throw W;await lT0(X,Q.branch,Y),J=await X.mergeBranch(Y,Q.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof d4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof d4&&J.status===405){let K=await X.findOpenPullRequest(Y,Q.branch)??await X.createPullRequest({base:Y,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(X){return fs(Z,X)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await vs(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([X.compare(Y,Q.branch),X.getBranchHead(Q.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof d4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(X){return fs(Z,X)}}),$}var uB6,pd$=500,nd$=1048576,td$=1024,cB6=8388608,dB6,mB6,od$;var sd$=D(()=>{Ut0();ST0();d$();VF();g71();MT0();GQ1();t71();ld$();id$();YQ1();Zw();gT0();uB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;dB6=a5({maxSize:cB6,onError:($)=>$.json({error:"Payload too large"},413)}),mB6=Ul.object({set:Ul.record(Ul.string(),Ul.unknown()).optional(),delete:Ul.array(Ul.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=pd$,{message:`Patch cannot touch more than ${pd$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=nd$),{message:`Each block must be at most ${nd$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=td$),{message:`Each block key must be at most ${td$} characters`}),od$=qT0(async($,Z)=>{let Q=$.var.studioContext,X=Q.organization;if(!X)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!lB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=Q.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!md$(B,{organizationId:X.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await Q.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!BD0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],U=Cs(K,H);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:X.id,virtualMcpId:Y,branch:G,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:J}),Z()})});var ed$=($)=>{let Z=new J1;if(Z.use("*",Tv),Z.route("/",uA0()),Z.route("/",Dh$()),Z.route("/",Pc$()),Z.route("/",Ec$()),Z.route("/",TT0()),Z.route("/tools",kc$()),Z.route("/",Ic$()),Z.route("/",al$({kvStorage:$.kvStorage})),Z.route("/",ol$()),Z.route("/fs",Uc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",gd$()),Z.route("/decofile",ad$()),Z.route("/",Dc$()),Z.route("/deco-sites",cA0()),Z.route("/hosting",Yh$()),Z.route("/monitor",Uh$()),Z.route("/sso",fA0()),Z.route("/",RT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",eg$()),$.mountDevAssets)Z.route("/dev-assets",pA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Ax$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Bc$()),Z.route("/mcp",dL0()),Z.route("/mcp/self",AT0()),Z.route("/mcp",pL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var $m$=D(()=>{d$();kA0();$h$();KZ1();Gh$();Nh$();nA0();ea();XZ1();rl$();sl$();Nc$();$o();a91();nL0();C71();Oc$();wc$();jc$();Ac$();qc$();v71();Vc$();f71();mL0();hd$();sd$()});function iB6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var pB6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Zm$=()=>{let $=new J1;return $.use("*",pB6),$.get("/",async(Z)=>{let Q=V0(),X=Q.decoSupabaseUrl,Y=Q.decoSupabaseServiceKey;if(!X||!Y)return Z.json({apps:[]});try{let G=await PY(X,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:iB6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Qm$=D(()=>{d$();D$();yP0()});import{z as q1}from"zod";function bF($,Z="invalid_request_error",Q=null,X=null){return{error:{message:$,type:Z,param:Q,code:X}}}function QO6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),X=$.substring(Z+1);if(!Q||!X)return null;return{credentialId:Q,modelId:X}}function XO6($,Z,Q){try{return JSON.parse($)}catch{throw new Gm$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function YO6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let X of Q.tool_calls)Z[X.id]=X.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:XO6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let X=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:X,output:{type:"text",value:Q.content}}]}}})}function GO6($){let Z=$.map((Q)=>{let X=Q.function.parameters?sY(Q.function.parameters):sY({type:"object",properties:{}});return[Q.function.name,V$({description:Q.function.description,inputSchema:X})]});return Object.fromEntries(Z)}function JO6($){if(!$)return;return{openai:{response_format:$}}}function WO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Xm$($,Z,Q,X,Y,G){let J={model:$,messages:Z,tools:Q,temperature:X.temperature,maxTokens:X.max_tokens,topP:X.top_p,frequencyPenalty:X.frequency_penalty,presencePenalty:X.presence_penalty,stopSequences:X.stop?Array.isArray(X.stop)?X.stop:[X.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Ym$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var nB6=256,tB6,oB6,rB6,aB6,sB6,eB6,$O6,ZO6,Gm$,Jm$,Wm$;var Km$=D(()=>{g4();d$();Yl();fU();tB6=q1.object({type:q1.literal("function"),function:q1.object({name:q1.string(),description:q1.string().optional(),parameters:q1.record(q1.string(),q1.unknown()).optional()})}),oB6=q1.object({id:q1.string(),type:q1.literal("function"),function:q1.object({name:q1.string(),arguments:q1.string()})}),rB6=q1.discriminatedUnion("role",[q1.object({role:q1.literal("system"),content:q1.string(),name:q1.string().optional()}),q1.object({role:q1.literal("user"),content:q1.union([q1.string(),q1.array(q1.union([q1.object({type:q1.literal("text"),text:q1.string()}),q1.object({type:q1.literal("image_url"),image_url:q1.object({url:q1.string(),detail:q1.string().optional()})})]))]),name:q1.string().optional()}),q1.object({role:q1.literal("assistant"),content:q1.string().nullable().optional(),name:q1.string().optional(),tool_calls:q1.array(oB6).optional()}),q1.object({role:q1.literal("tool"),content:q1.string(),tool_call_id:q1.string()})]),aB6=q1.object({type:q1.literal("text")}),sB6=q1.object({type:q1.literal("json_object")}),eB6=q1.object({type:q1.literal("json_schema"),json_schema:q1.object({name:q1.string(),description:q1.string().optional(),schema:q1.record(q1.string(),q1.unknown()),strict:q1.boolean().optional()})}),$O6=q1.union([aB6,sB6,eB6]),ZO6=q1.object({model:q1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:q1.array(rB6),stream:q1.boolean().optional().default(!1),temperature:q1.number().min(0).max(2).optional(),max_tokens:q1.number().positive().optional(),top_p:q1.number().min(0).max(1).optional(),frequency_penalty:q1.number().min(-2).max(2).optional(),presence_penalty:q1.number().min(-2).max(2).optional(),stop:q1.union([q1.string(),q1.array(q1.string())]).optional(),tools:q1.array(tB6).optional(),tool_choice:q1.union([q1.literal("auto"),q1.literal("none"),q1.literal("required"),q1.object({type:q1.literal("function"),function:q1.object({name:q1.string()})})]).optional(),response_format:$O6.optional(),user:q1.string().optional()});Gm$=class Gm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Jm$=new J1;Jm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(bF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(bF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(bF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let X=await $.req.json(),Y=ZO6.safeParse(X);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(bF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=QO6(G.model);if(!J)return $.json(bF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>EL(j.providerId));if(!E)return $.json(bF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(bF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),U=YO6(G.messages),N=G.tools?GO6(G.tools):void 0,B=JO6(G.response_format),O=WO6(),w=Math.floor(Date.now()/1000);if(G.stream)return QN($,async(L)=>{let E=Xm$(H,U,N,G,B,$.req.raw.signal);try{let j=fO(E),z=!1,P=0,A="",I=async()=>{if(A.length===0)return;let k=A;A="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=nB6)await I()}else if(k.type==="tool-call"){await I();let M=P++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:Ym$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Xm$(H,U,N,G,B,$.req.raw.signal),E=await _O(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:Ym$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(X){let Y=X;if(Y.name==="AbortError")return $.json(bF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(bF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(bF(Y.message,"server_error"),500)}});Wm$=Jm$});function KO6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Fm$(){let $=new J1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),X=t0(Q);if(!X)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!sQ(G))return Z.json({error:"Invalid site slug"},400);let J=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",X).execute(),W=[];for(let F of J){if(!F.slug||m9(F))continue;let H=await Q.storage.virtualMcps.list(F.id);for(let U of H){if(ee1(U)!==G)continue;if(!KO6(U.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Hm$=D(()=>{d$();cH()});var Nm$;var Um$=D(()=>{Nm$={name:"decocms",version:"4.329.5",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function UO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??HO6}}var Bm$,HO6="https://ph.studio.decocms.com",Om$;var Dm$=D(()=>{d$();J90();J_();u5();D$();h91();Um$();Bm$=new J1;Bm$.get("/",($)=>{let Z={version:Nm$.version,theme:Dp1(),...bH().logo&&{logo:bH().logo},...PU()&&{internalUrl:l_1()},...V0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!V0().firecrawlApiKey,hostingEnabled:!!V0().controlplaneRestUrl&&!!V0().controlplaneServiceToken,hostingControlPlaneGa:V0().hostingControlPlaneGa,monitorEnabled:!!V0().clickhouseAnalyticsUrl&&!!V0().clickhouseAnalyticsPassword,monitorGa:V0().monitorGa,auth:Yg$(),posthog:UO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:cs()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Om$=Bm$});function Nl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function FQ1($){return(Nl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function Lm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Nl($))}&sz=${Z}`}function wm$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let X=Q.slice(0,Z-1),Y=X.lastIndexOf(" ");return`${(Y>Z*0.6?X.slice(0,Y):X).trimEnd()}\u2026`}function Em$($){let{brand:Z,domain:Q,score:X,verdict:Y}=$,G=typeof X==="number"?`${Z} commerce report \u2014 ${Math.round(X)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?wm$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):wm$(`How does ${Q} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var gv,NO6,BO6,OO6,DO6,jm$;var zm$=D(()=>{gv=l0.enum(["good","bad","neutral"]),NO6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:gv.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),BO6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(NO6)),OO6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},DO6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:gv.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:gv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:gv.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:gv.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(BO6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:gv.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:gv.optional()})).min(1)})]),jm$=l0.object({...OO6,template:DO6})});function iT0($){let Z=[],Q=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=jm$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),X=Q.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:X},slides:Q},drops:Z}}var HQ1=D(()=>{zm$()});import{join as Pm$}from"path";async function LO6($){try{let Z=await fetch(`${LK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(wO6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:X}=iT0(Q);if(!X.slides.length)return null;let Y=X.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:X.meta.brand?.trim()||FQ1($),score:X.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function TG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function EO6($,Z){let Q=Nl($),X=Z?.brand?.trim()||FQ1(Q),Y=Lm$(Q,128),J=`${(V0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=Em$({brand:X,domain:Q,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${X} commerce report by decocms`;return[`<title>${TG(W)}</title>`,`<meta name="description" content="${TG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${TG(W)}" />`,`<meta property="og:description" content="${TG(K)}" />`,`<meta property="og:url" content="${TG(J)}" />`,`<meta property="og:image" content="${TG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${TG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${TG(W)}" />`,`<meta name="twitter:description" content="${TG(K)}" />`,`<meta name="twitter:image" content="${TG(F)}" />`,`<meta name="twitter:image:alt" content="${TG(H)}" />`,`<link rel="canonical" href="${TG(J)}" />`,`<link rel="icon" href="${TG(Y)}" sizes="any" />`].join(`
2983
+ `,j=await Z.createBlob(E);await Rd$(Z.owner,Z.repo,j,E);let z=L[0]??`${yT0(X)}/${r71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let P=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:P,sha:j,content:E});for(let A of L.slice(1))F.push({path:A,mode:"100644",type:"blob",sha:null}),H.delete(A)}for(let O of $.del)for(let w of QQ1(K,O))F.push({path:w,mode:"100644",type:"blob",sha:null}),H.delete(w);if(F.length===0)return G;let U=X?`${X}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===U)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:w,skipped:L}=Ms(O);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:Q,packagePath:X,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(w);F.push({path:U,mode:"100644",type:"blob",sha:E})}let N=await Z.createTree(J,F),B=await Z.createCommit({message:xB6($),treeSha:N,parentShas:[G]});try{return await Z.updateRef(Q,B),B}catch(O){if(!(O instanceof d4&&O.status===422)||Y>=vB6-1)throw O;await L$(Q7(2000,200,Y,2,0.5))}}}function xB6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let X=`chore(decofile): ${Q.join("; ")}`;return Mi0(X,$.deps.coAuthor)}var vB6=3,WQ1;var ld$=D(()=>{k70();ST0();a8();Zw();gT0();WQ1=new Map});import{createHmac as cd$,randomBytes as yB6,timingSafeEqual as gB6}from"crypto";function dd$(){if(mT0)return mT0;let $;try{let Z=V0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mT0=$?Buffer.from($):yB6(32),mT0}function KQ1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+hB6)/1000)},X=Buffer.from(JSON.stringify(Q)).toString("base64url"),Y=cd$("sha256",dd$()).update(X).digest("base64url");return`${X}.${Y}`}function md$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let X=$.slice(0,Q),Y=Buffer.from($.slice(Q+1)),G=Buffer.from(cd$("sha256",dd$()).update(X).digest("base64url"));if(Y.length!==G.length||!gB6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(X,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var hB6=21600000,mT0=null;var id$=D(()=>{D$()});import{z as Ul}from"zod";function lB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&uB6.test($)}function rd$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function vs($){let Z=$.get("decofileScope");return kT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function fs($,Z){if(Z instanceof d4){let X=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},X)}let Q=Z instanceof Error?Z.message:String(Z);return $.json({error:Q},500)}function ad$(){let $=new J1;return $.use("/:virtualMcpId/:branch",od$),$.use("/:virtualMcpId/:branch/*",od$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await vs(Z),Y=await Id$(X,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!Q.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=KQ1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(rd$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(X){return fs(Z,X)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),X=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await vs(Z),G=await Y.getFileTextAtRef(Q.branch,X);if(G===null){let J=await Y.getDefaultBranch();if(J!==Q.branch)G=await Y.getFileTextAtRef(J,X)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return fs(Z,Y)}}),$.patch("/:virtualMcpId/:branch",dB6,async(Z)=>{let Q=Z.get("decofileScope"),X=Z.var.studioContext,Y=mB6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{VT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(o71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await vs(Z),W=await ud$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:J,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Gl(X)},G),K=KQ1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:rd$(Z)})}catch(J){return fs(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await vs(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${Q.branch}`;try{let J;try{J=await X.mergeBranch(Y,Q.branch,G)}catch(W){if(!(W instanceof d4&&W.status===409))throw W;await lT0(X,Q.branch,Y),J=await X.mergeBranch(Y,Q.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof d4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof d4&&J.status===405){let K=await X.findOpenPullRequest(Y,Q.branch)??await X.createPullRequest({base:Y,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(X){return fs(Z,X)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await vs(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([X.compare(Y,Q.branch),X.getBranchHead(Q.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof d4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(X){return fs(Z,X)}}),$}var uB6,pd$=500,nd$=1048576,td$=1024,cB6=8388608,dB6,mB6,od$;var sd$=D(()=>{Ut0();ST0();d$();VF();g71();MT0();GQ1();t71();ld$();id$();YQ1();Zw();gT0();uB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;dB6=a5({maxSize:cB6,onError:($)=>$.json({error:"Payload too large"},413)}),mB6=Ul.object({set:Ul.record(Ul.string(),Ul.unknown()).optional(),delete:Ul.array(Ul.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=pd$,{message:`Patch cannot touch more than ${pd$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=nd$),{message:`Each block must be at most ${nd$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=td$),{message:`Each block key must be at most ${td$} characters`}),od$=qT0(async($,Z)=>{let Q=$.var.studioContext,X=Q.organization;if(!X)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!lB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=Q.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!md$(B,{organizationId:X.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await Q.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!BD0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],U=Cs(K,H);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:X.id,virtualMcpId:Y,branch:G,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:J}),Z()})});var ed$=($)=>{let Z=new J1;if(Z.use("*",Tv),Z.route("/",uA0()),Z.route("/",Dh$()),Z.route("/",Pc$()),Z.route("/",Ec$()),Z.route("/",TT0()),Z.route("/tools",kc$()),Z.route("/",Ic$()),Z.route("/",al$({kvStorage:$.kvStorage})),Z.route("/",ol$()),Z.route("/fs",Uc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",gd$()),Z.route("/decofile",ad$()),Z.route("/",Dc$()),Z.route("/deco-sites",cA0()),Z.route("/hosting",Yh$()),Z.route("/monitor",Uh$()),Z.route("/sso",fA0()),Z.route("/",RT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",eg$()),$.mountDevAssets)Z.route("/dev-assets",pA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Ax$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Bc$()),Z.route("/mcp",dL0()),Z.route("/mcp/self",AT0()),Z.route("/mcp",pL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var $m$=D(()=>{d$();kA0();$h$();KZ1();Gh$();Nh$();nA0();ea();XZ1();rl$();sl$();Nc$();$o();a91();nL0();C71();Oc$();wc$();jc$();Ac$();qc$();v71();Vc$();f71();mL0();hd$();sd$()});function iB6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var pB6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Zm$=()=>{let $=new J1;return $.use("*",pB6),$.get("/",async(Z)=>{let Q=V0(),X=Q.decoSupabaseUrl,Y=Q.decoSupabaseServiceKey;if(!X||!Y)return Z.json({apps:[]});try{let G=await PY(X,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:iB6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Qm$=D(()=>{d$();D$();yP0()});import{z as q1}from"zod";function bF($,Z="invalid_request_error",Q=null,X=null){return{error:{message:$,type:Z,param:Q,code:X}}}function QO6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),X=$.substring(Z+1);if(!Q||!X)return null;return{credentialId:Q,modelId:X}}function XO6($,Z,Q){try{return JSON.parse($)}catch{throw new Gm$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function YO6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let X of Q.tool_calls)Z[X.id]=X.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:XO6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let X=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:X,output:{type:"text",value:Q.content}}]}}})}function GO6($){let Z=$.map((Q)=>{let X=Q.function.parameters?sY(Q.function.parameters):sY({type:"object",properties:{}});return[Q.function.name,V$({description:Q.function.description,inputSchema:X})]});return Object.fromEntries(Z)}function JO6($){if(!$)return;return{openai:{response_format:$}}}function WO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Xm$($,Z,Q,X,Y,G){let J={model:$,messages:Z,tools:Q,temperature:X.temperature,maxTokens:X.max_tokens,topP:X.top_p,frequencyPenalty:X.frequency_penalty,presencePenalty:X.presence_penalty,stopSequences:X.stop?Array.isArray(X.stop)?X.stop:[X.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Ym$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var nB6=256,tB6,oB6,rB6,aB6,sB6,eB6,$O6,ZO6,Gm$,Jm$,Wm$;var Km$=D(()=>{g4();d$();Yl();fU();tB6=q1.object({type:q1.literal("function"),function:q1.object({name:q1.string(),description:q1.string().optional(),parameters:q1.record(q1.string(),q1.unknown()).optional()})}),oB6=q1.object({id:q1.string(),type:q1.literal("function"),function:q1.object({name:q1.string(),arguments:q1.string()})}),rB6=q1.discriminatedUnion("role",[q1.object({role:q1.literal("system"),content:q1.string(),name:q1.string().optional()}),q1.object({role:q1.literal("user"),content:q1.union([q1.string(),q1.array(q1.union([q1.object({type:q1.literal("text"),text:q1.string()}),q1.object({type:q1.literal("image_url"),image_url:q1.object({url:q1.string(),detail:q1.string().optional()})})]))]),name:q1.string().optional()}),q1.object({role:q1.literal("assistant"),content:q1.string().nullable().optional(),name:q1.string().optional(),tool_calls:q1.array(oB6).optional()}),q1.object({role:q1.literal("tool"),content:q1.string(),tool_call_id:q1.string()})]),aB6=q1.object({type:q1.literal("text")}),sB6=q1.object({type:q1.literal("json_object")}),eB6=q1.object({type:q1.literal("json_schema"),json_schema:q1.object({name:q1.string(),description:q1.string().optional(),schema:q1.record(q1.string(),q1.unknown()),strict:q1.boolean().optional()})}),$O6=q1.union([aB6,sB6,eB6]),ZO6=q1.object({model:q1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:q1.array(rB6),stream:q1.boolean().optional().default(!1),temperature:q1.number().min(0).max(2).optional(),max_tokens:q1.number().positive().optional(),top_p:q1.number().min(0).max(1).optional(),frequency_penalty:q1.number().min(-2).max(2).optional(),presence_penalty:q1.number().min(-2).max(2).optional(),stop:q1.union([q1.string(),q1.array(q1.string())]).optional(),tools:q1.array(tB6).optional(),tool_choice:q1.union([q1.literal("auto"),q1.literal("none"),q1.literal("required"),q1.object({type:q1.literal("function"),function:q1.object({name:q1.string()})})]).optional(),response_format:$O6.optional(),user:q1.string().optional()});Gm$=class Gm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Jm$=new J1;Jm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(bF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(bF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(bF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let X=await $.req.json(),Y=ZO6.safeParse(X);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(bF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=QO6(G.model);if(!J)return $.json(bF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>EL(j.providerId));if(!E)return $.json(bF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(bF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),U=YO6(G.messages),N=G.tools?GO6(G.tools):void 0,B=JO6(G.response_format),O=WO6(),w=Math.floor(Date.now()/1000);if(G.stream)return QN($,async(L)=>{let E=Xm$(H,U,N,G,B,$.req.raw.signal);try{let j=fO(E),z=!1,P=0,A="",I=async()=>{if(A.length===0)return;let k=A;A="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=nB6)await I()}else if(k.type==="tool-call"){await I();let M=P++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:Ym$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Xm$(H,U,N,G,B,$.req.raw.signal),E=await _O(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:Ym$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(X){let Y=X;if(Y.name==="AbortError")return $.json(bF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(bF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(bF(Y.message,"server_error"),500)}});Wm$=Jm$});function KO6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Fm$(){let $=new J1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),X=t0(Q);if(!X)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!sQ(G))return Z.json({error:"Invalid site slug"},400);let J=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",X).execute(),W=[];for(let F of J){if(!F.slug||m9(F))continue;let H=await Q.storage.virtualMcps.list(F.id);for(let U of H){if(ee1(U)!==G)continue;if(!KO6(U.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Hm$=D(()=>{d$();cH()});var Nm$;var Um$=D(()=>{Nm$={name:"decocms",version:"4.329.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function UO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??HO6}}var Bm$,HO6="https://ph.studio.decocms.com",Om$;var Dm$=D(()=>{d$();J90();J_();u5();D$();h91();Um$();Bm$=new J1;Bm$.get("/",($)=>{let Z={version:Nm$.version,theme:Dp1(),...bH().logo&&{logo:bH().logo},...PU()&&{internalUrl:l_1()},...V0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!V0().firecrawlApiKey,hostingEnabled:!!V0().controlplaneRestUrl&&!!V0().controlplaneServiceToken,hostingControlPlaneGa:V0().hostingControlPlaneGa,monitorEnabled:!!V0().clickhouseAnalyticsUrl&&!!V0().clickhouseAnalyticsPassword,monitorGa:V0().monitorGa,auth:Yg$(),posthog:UO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:cs()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Om$=Bm$});function Nl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function FQ1($){return(Nl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function Lm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Nl($))}&sz=${Z}`}function wm$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let X=Q.slice(0,Z-1),Y=X.lastIndexOf(" ");return`${(Y>Z*0.6?X.slice(0,Y):X).trimEnd()}\u2026`}function Em$($){let{brand:Z,domain:Q,score:X,verdict:Y}=$,G=typeof X==="number"?`${Z} commerce report \u2014 ${Math.round(X)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?wm$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):wm$(`How does ${Q} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var gv,NO6,BO6,OO6,DO6,jm$;var zm$=D(()=>{gv=l0.enum(["good","bad","neutral"]),NO6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:gv.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),BO6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(NO6)),OO6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},DO6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:gv.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:gv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:gv.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:gv.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(BO6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:gv.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:gv.optional()})).min(1)})]),jm$=l0.object({...OO6,template:DO6})});function iT0($){let Z=[],Q=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=jm$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),X=Q.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:X},slides:Q},drops:Z}}var HQ1=D(()=>{zm$()});import{join as Pm$}from"path";async function LO6($){try{let Z=await fetch(`${LK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(wO6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:X}=iT0(Q);if(!X.slides.length)return null;let Y=X.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:X.meta.brand?.trim()||FQ1($),score:X.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function TG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function EO6($,Z){let Q=Nl($),X=Z?.brand?.trim()||FQ1(Q),Y=Lm$(Q,128),J=`${(V0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=Em$({brand:X,domain:Q,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${X} commerce report by decocms`;return[`<title>${TG(W)}</title>`,`<meta name="description" content="${TG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${TG(W)}" />`,`<meta property="og:description" content="${TG(K)}" />`,`<meta property="og:url" content="${TG(J)}" />`,`<meta property="og:image" content="${TG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${TG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${TG(W)}" />`,`<meta name="twitter:description" content="${TG(K)}" />`,`<meta name="twitter:image" content="${TG(F)}" />`,`<meta name="twitter:image:alt" content="${TG(H)}" />`,`<link rel="canonical" href="${TG(J)}" />`,`<link rel="icon" href="${TG(Y)}" sizes="any" />`].join(`
2984
2984
  `)}function jO6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
2985
2985
  </head>`)}function Am$($){let Z=new J1;return Z.get("/:domain/og.png",async(Q)=>{let X=Nl(Q.req.param("domain")),Y=async()=>{let G=$?Bun.file(Pm$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return Q.notFound();return Q.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${LK({})}/api/v2/public/diagnostics/${encodeURIComponent(X)}/og.png`,{signal:AbortSignal.timeout(zO6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return Q.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(Q)=>{let X=Q.req.param("domain"),Y=$?Pm$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return Q.notFound();let J=await G.text();try{let W=await LO6(Nl(X)),K=EO6(X,W);return Q.html(jO6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(J)}}),Z}var wO6=2500,zO6=1e4;var Tm$=D(()=>{d$();HQ1();TE();D$()});function bs($,Z){return fetch(`${LK({})}${$}`,Z)}async function PO6($,Z,Q){let X=new URLSearchParams;if(Z)X.set("pw",Z);if(Q)X.set("lang",Q);let Y=X.toString()?`?${X.toString()}`:"",G=await bs(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=iT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var AO6,YN,Rm$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Im$;var qm$=D(()=>{d$();tY();TE();HQ1();AO6=new Set(["complete","errored","terminated","unknown"]),YN=new J1;YN.use("*",async($,Z)=>{let Q=await $8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});YN.use("/link-token/*",Rm$);YN.use("/suggest",Rm$);YN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.get("reportUser"),X=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await PO6(Z,X,Y);if($.header("Cache-Control","private, no-store"),Q||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});YN.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let X=typeof Q.domain==="string"?Q.domain.trim():"";if(!X)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof Q.distinctId==="string"&&Q.distinctId.trim()&&Q.distinctId.length<=200?Q.distinctId.trim():void 0;try{let J=await bs("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${AE({})}`},body:JSON.stringify({url:X,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});YN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await bs(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${AE({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let Y=(await Q.json()).status??"unknown",G={done:AO6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});YN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await bs(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});YN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await bs(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let X=await Q.json();return $.json({suggestions:Array.isArray(X.suggestions)?X.suggestions:[]})}catch{return $.json({suggestions:[]})}});Im$=YN});import{createHmac as TO6,timingSafeEqual as RO6}from"crypto";function km$($,Z,Q,X=Date.now()){if(!Z||!Q)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let U=F.slice(0,H).trim(),N=F.slice(H+1).trim();if(U==="t")Y=N;else if(U==="v1")G.push(N)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(X/1000-J)>IO6)return!1;let W=TO6("sha256",Q).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&RO6(K,H)})}function Vm$($){let Z;try{Z=JSON.parse($)}catch{return null}let Q=mJ(Z),X=mJ(mJ(Q?.data)?.object);if(!Q||typeof Q.type!=="string"||!X)return null;return{id:xF(Q.id),type:Q.type,created:typeof Q.created==="number"?Q.created:void 0,livemode:typeof Q.livemode==="boolean"?Q.livemode:void 0,data:{object:X}}}function Sm$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function xF($){return typeof $==="string"?$:void 0}function mJ($){return typeof $==="object"&&$!==null?$:void 0}function pT0($){return typeof $==="number"?new Date($*1000):null}function BQ1($){return xF($)??xF(mJ($)?.id)}function qO6($){return BQ1($.subscription)??xF(mJ(mJ($.parent)?.subscription_details)?.subscription)}function MO6($){let Z=pT0($.current_period_end);if(Z)return Z;let Q=mJ($.items)?.data;if(!Array.isArray(Q))return null;let X=0;for(let Y of Q){let G=mJ(Y)?.current_period_end;if(typeof G==="number"&&G>X)X=G}return X>0?new Date(X*1000):null}function UQ1($,Z){let Q=pT0($.created);return!!Q&&!!Z.lastStripeEventAt&&Q<Z.lastStripeEventAt}function NQ1($,Z){let Q=pT0($.created);if(!Q)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>Q?void 0:Q}async function kO6($,Z){let Q=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let X=xF(mJ(Q.metadata)?.orgId);if(!X)return{handled:!1,reason:"no orgId"};if(xF(mJ(Q.metadata)?.kind)==="topup"){if(Q.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(xF(Q.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=xF(Q.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:X}),{handled:!1,reason:"topup session without id"};let W=Number(mJ(Q.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:X,creditCents:mJ(Q.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:X,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(Q.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(xF(Q.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(X);if(!Y)return{handled:!1,reason:"unknown org"};let G=BQ1(Q.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:X,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(UQ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(X,{stripeCustomerId:BQ1(Q.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:NQ1(Z,Y)}),{handled:!0,organizationId:X}}case"customer.subscription.updated":case"customer.subscription.deleted":{let X=xF(Q.id);if(!X)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(X);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&UQ1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Sm$(Q.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:MO6(Q),...G&&{stripeSubscriptionId:null},lastStripeEventAt:NQ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let X=qO6(Q);if(!X)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(X);if(!Y)return{handled:!1,reason:"unknown subscription"};if(UQ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:pT0(Q.period_end),lastStripeEventAt:NQ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function VO6($,Z){if(!Z.handled||$.livemode===!1)return null;let Q=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Sm$(Q.status),...typeof Q.cancel_at_period_end==="boolean"?{cancel_at_period_end:Q.cancel_at_period_end}:{}}};case"invoice.paid":if(Q.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function Mm$($,Z){let Q=VO6($,Z);if(!Q)return;dY({event:Q.name,organizationId:Q.organizationId,...$.id?{uuid:Tt1(`stripe:${$.id}:${Q.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:Q.properties})}async function Cm$($){let Z=new BK(B8().db),Q=await kO6(Z,$);if(!(Q.handled&&Q.topUp))Mm$($,Q);if(Q.handled&&Q.topUp)await tj$({organizationId:Q.organizationId,amountCents:Q.topUp.creditCents,referenceId:Q.topUp.referenceId}),Mm$($,Q);if(!Q.handled&&Q.orphanSubscriptionId)try{await e0$(Q.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:Q.orphanSubscriptionId,eventId:$.id})}catch(X){if(!(X instanceof oY&&(X.status===400||X.status===404)))throw X}return Q}var IO6=300;var _m$=D(()=>{aG();v4();h50();bE();P11()});var SO6=1048576,OQ1;var vm$=D(()=>{d$();VF();D$();_m$();OQ1=new J1;OQ1.post("/webhook",a5({maxSize:SO6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=V0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!km$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Vm$(Q);if(!Y)return $.json({error:"invalid payload"},400);let G=await Cm$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as CO6}from"crypto";function vO6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let X=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==X.length)return!1;return CO6(Buffer.from(Y),Buffer.from(X))}var _O6=5242880,DQ1;var fm$=D(()=>{d$();VF();s3();DQ1=new J1;DQ1.post("/webhook",a5({maxSize:_O6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let Q=await $.req.text();if(!vO6(Q,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let X;try{X=JSON.parse(Q)}catch{return $.json({error:"invalid payload"},400)}let Y=X.ref,G=X.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Ft0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function bm$($){let Z=new pU($.db,new hQ($.encryptionKey)),Q=new J1;return Q.get("/attachments/:token",async(X)=>{let Y=pK$(X.req.param("token"));if(!Y)return X.json({error:"Invalid or expired link"},404);let G=await Z.getByOrg(Y.organizationId);if(!G)return X.json({error:"Jira is not connected"},404);let W=await new JG(G.siteUrl,G.email,G.apiToken).downloadAttachment(Y.attachmentId);if(!W.ok||!W.body)return X.json({error:"Jira refused the download"},502);let K=new Headers;for(let F of["content-type","content-length","content-disposition"]){let H=W.headers.get(F);if(H)K.set(F,H)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var xm$=D(()=>{d$();tN();Jo0();dC()});function ym$($){if(typeof $!=="object"||$===null)return null;let Z=$;if(Z.webhookEvent!=="jira:issue_updated")return null;let Q=Z.issue?.id,X=Z.issue?.key,Y=Z.changelog?.id;if(typeof Q!=="string"&&typeof Q!=="number"||typeof X!=="string"||typeof Y!=="string"&&typeof Y!=="number")return null;let G=Z.changelog?.items?.find((J)=>J.field==="status");if(!G||typeof G.toString!=="string")return null;return{issueId:String(Q),issueKey:X,toStatus:G.toString,changelogId:String(Y)}}function gm$($,Z,Q){let X=[];for(let Y of Z){if(new Date(Y.created).getTime()<Q.getTime())continue;let G=Y.items.find((J)=>J.field==="status");if(!G||typeof G.toString!=="string")continue;X.push({issueId:$.id,issueKey:$.key,toStatus:G.toString,changelogId:Y.id})}return X.sort((Y,G)=>Number(Y.changelogId)-Number(G.changelogId))}function xO6($){return`Jira ${$.key}: ${$.summary}`}async function nT0($,Z,Q){if(!Z.enabled)return"disabled";let X=Z.organizationId,Y=await $.storage.jiraIntegrations.getAutomation(X,Q.toStatus);if(!Y)return"no_rule";let G=new JG(Z.siteUrl,Z.email,Z.apiToken),J=await Jw0(G,Z.siteUrl,Q.issueId),W=await yO6($,Z,Q,J);if(!await $.storage.jiraIntegrations.claimTrigger(X,Q.issueId,Q.changelogId))return"duplicate";let F=await $.storage.taskBoard.update(W.id,X,{assigneeId:m$,assignedBy:Z.createdBy},Z.createdBy);try{await XW($,F,{instruction:Y.prompt??fO6,source:{kind:"jira",issueKey:J.key,title:xO6(J),body:`${Ww0(J)}
2986
2986
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.329.5",
3
+ "version": "4.329.6",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c as o,j as r}from"./index-BPoFiAxf.js";import{O as m}from"./api-keys-BlbK2ztb.js";import{R as p}from"./require-capability-C5rDfjFm.js";import"./AlertCircle-mN_-o_mQ.js";import"./Copy01-BM0WPlp9.js";import"./Key01-3XmA_FLZ.js";import"./Plus-BiE4uFsT.js";import"./Trash01-Dp51yqnn.js";import"./alert-dialog-P0CuRl4b.js";import"./dialog-CwR2ZkB1.js";import"./input-LsHd3z5Z.js";import"./label-fGGyQxp5.js";import"./use-mcp-client-r4Xv9xDe.js";import"./constants-DNuUCxmW.js";import"./auth-BVp2xy53.js";import"./access-gate-CxbXElgc.js";import"./capability-load-error-DJ7cUT9Z.js";function A(){const t=o.c(1);let i;return t[0]===Symbol.for("react.memo_cache_sentinel")?(i=r.jsx(p,{capability:"api-keys:manage",area:"api-keys",children:r.jsx(m,{})}),t[0]=i):i=t[0],i}export{A as default};
@@ -1 +0,0 @@
1
- import{c as B,j as o,b as $,W as D,d as M,r as q,P as d,B as V,o as R}from"./index-BPoFiAxf.js";import{s as W}from"./Plus-BiE4uFsT.js";import{i as S}from"./Zap-Cff3TLsZ.js";import{S as F}from"./search-input-BizsLhvX.js";import{E as T}from"./empty-state-BObNah86.js";import{c as G}from"./use-automations-BHUwCHCu.js";import{u as H}from"./use-navigate-to-agent-BAFEWvwz.js";import{A as J}from"./automation-list-row-DlvHKPyj.js";import{h as K}from"./constants-DNuUCxmW.js";import{a as O}from"./use-virtual-mcp-zpAtwz7v.js";import{R as Q}from"./require-capability-C5rDfjFm.js";import"./SearchMd-D9B5PGY2.js";import"./use-mcp-client-r4Xv9xDe.js";import"./auth-BVp2xy53.js";import"./use-destination-route-BnzyxZK-.js";import"./hooks-Chtya12g.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-BJt1WWih.js";import"./task-board-CcPCmS8T.js";import"./schema-D2aEo9_j.js";import"./chat-context-CsVVImtr.js";import"./use-panel-navigate-Bqzu-m4-.js";import"./slugify-CEUa2lfQ.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-ai-providers-qSmDdlV5.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-BCTeDl9d.js";import"./use-organization-settings-BZpxVSP5.js";import"./github-repo-COLY3wWI.js";import"./alert-dialog-P0CuRl4b.js";import"./dropdown-menu-D1Dyu0Ie.js";import"./Check-DHPj8hLS.js";import"./ChevronRight-CNf6Y7s8.js";import"./DotsVertical-Bbr6RMTH.js";import"./agent-icon-D0nFNhxK.js";import"./AlertCircle-mN_-o_mQ.js";import"./Tool01-DO3tFwrT.js";import"./ArrowUp-D9BmQW3y.js";import"./ArrowLeft-TOd2y5eQ.js";import"./Tool02-BsbxtGm_.js";import"./XCircle-CPujy2uw.js";import"./TrendUp01-B5AMHutg.js";import"./ZoomOut-Cyr7GMp8.js";import"./Users03-CtT9PMQy.js";import"./CheckCircle-Bape6EQJ.js";import"./ChevronUp-DhEp0EVP.js";import"./ChevronSelectorVertical-BGG06THN.js";import"./UserSquare-BMU7ptkw.js";import"./Copy01-BM0WPlp9.js";import"./CreditCard01-BcxIFS9C.js";import"./Download01-BP8_5nMI.js";import"./Settings02-D20k8vab.js";import"./Eye-B0Pd_ezn.js";import"./Share07-mTYGTjnX.js";import"./GitBranch01-ITA5wAsb.js";import"./Globe01-CxD9oJyC.js";import"./XClose-ydonzdQx.js";import"./HardDrive-Bx3SgLl5.js";import"./Image01-DkeWoTxv.js";import"./Key01-3XmA_FLZ.js";import"./Link01-DBqTW3qG.js";import"./LinkExternal01-CDbttyHT.js";import"./Monitor01-DxoPQwl_.js";import"./Sun-CPXNGo67.js";import"./Package-BmmKpgLP.js";import"./Palette-PDnTmDZk.js";import"./Play-67XUCyKd.js";import"./Shield01-Dh1KVvty.js";import"./Stars01-PXW__m1z.js";import"./Trash01-Dp51yqnn.js";import"./Upload01-BNUtlGr4.js";import"./User01-Ct3vu-8e.js";import"./Users01-BiGPt9OV.js";import"./access-gate-CxbXElgc.js";import"./capability-load-error-DJ7cUT9Z.js";function U(){const t=B.c(20),i=$(),{org:l}=D(),{data:C}=G(void 0),g=C===void 0?[]:C,k=O(),P=H(),f=M(),[x,E]=q.useState(""),h=x.toLowerCase(),A=new Map(k.map(X)),b=g.filter(e=>{if(!h||e.name.toLowerCase().includes(h))return!0;if(e.virtual_mcp_id){const p=A.get(e.virtual_mcp_id);if(p&&p.title.toLowerCase().includes(h))return!0}return!1}),z=(e,p)=>{const N=p&&A.has(p)?p:K(l.id);R("automations_list_row_clicked",{automation_id:e,agent_id:N,source:"settings_automations"}),P(N,{panel:`automation:${e}`})};let c;t[0]!==f||t[1]!==l.slug?(c=()=>{R("automations_empty_state_browse_agents_clicked"),f({to:"/$org/settings/agents",params:{org:l.slug}})},t[0]=f,t[1]=l.slug,t[2]=c):c=t[2];const L=c,j=d,v=d,w=d;let s;t[3]!==i?(s=i("settings.automations.pageTitle"),t[3]=i,t[4]=s):s=t[4];let r;t[5]!==s?(r=o.jsx(d.Title,{children:s}),t[5]=s,t[6]=r):r=t[6];const _=g.length>0&&o.jsx(F,{value:x,onChange:E,placeholder:i("settings.automations.searchPlaceholder"),className:"w-full md:w-[375px]"});let m;t[7]!==r||t[8]!==_?(m=o.jsxs("div",{className:"flex flex-col gap-6",children:[r,_]}),t[7]=r,t[8]=_,t[9]=m):m=t[9];const y=g.length===0?o.jsx("div",{className:"flex items-center justify-center py-20",children:o.jsx(T,{image:o.jsx(S,{size:48,className:"text-muted-foreground"}),title:i("settings.automations.emptyTitle"),description:i("settings.automations.emptyDescription"),actions:o.jsxs(V,{size:"sm",onClick:L,children:[o.jsx(W,{size:14}),i("settings.automations.browseAgentsButton")]})})}):b.length===0?o.jsx("div",{className:"flex items-center justify-center py-20",children:o.jsx(T,{image:o.jsx(S,{size:48,className:"text-muted-foreground"}),title:i("settings.automations.noResultsTitle"),description:i("settings.automations.noResultsDescription",{search:x})})}):o.jsx("div",{className:"mt-6 rounded-xl border border-border overflow-hidden",children:b.map(e=>o.jsx(J,{automation:e,showAgent:!0,onClick:()=>z(e.id,e.virtual_mcp_id)},e.id))});let n;t[10]!==w.Body||t[11]!==m||t[12]!==y?(n=o.jsxs(w.Body,{children:[m,y]}),t[10]=w.Body,t[11]=m,t[12]=y,t[13]=n):n=t[13];let a;t[14]!==v.Content||t[15]!==n?(a=o.jsx(v.Content,{children:n}),t[14]=v.Content,t[15]=n,t[16]=a):a=t[16];let u;return t[17]!==j||t[18]!==a?(u=o.jsx(j,{children:a}),t[17]=j,t[18]=a,t[19]=u):u=t[19],u}function X(t){return[t.id,t]}function wo(){const t=B.c(1);let i;return t[0]===Symbol.for("react.memo_cache_sentinel")?(i=o.jsx(Q,{capability:"automations:manage",area:"automations",children:o.jsx(U,{})}),t[0]=i):i=t[0],i}export{wo as default};
@@ -1 +0,0 @@
1
- import{c as w,b as z,G as g,j as a,H as _,r as j,I as D,J as I,M as O,O as L,R as A,U as M}from"./index-BPoFiAxf.js";import{S as T}from"./index-C-iRRri3.js";import{u as H}from"./settings-sidebar-B8AwNjia.js";import"./task-route-C4sr5u2Y.js";import"./hooks-Chtya12g.js";import"./use-destination-route-BnzyxZK-.js";import"./constants-DNuUCxmW.js";import"./use-mcp-client-r4Xv9xDe.js";import"./auth-BVp2xy53.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-BJt1WWih.js";import"./task-board-CcPCmS8T.js";import"./schema-D2aEo9_j.js";import"./ChevronUp-DhEp0EVP.js";import"./agent-icon-D0nFNhxK.js";import"./AlertCircle-mN_-o_mQ.js";import"./Tool01-DO3tFwrT.js";import"./ArrowUp-D9BmQW3y.js";import"./ArrowLeft-TOd2y5eQ.js";import"./Tool02-BsbxtGm_.js";import"./XCircle-CPujy2uw.js";import"./TrendUp01-B5AMHutg.js";import"./ZoomOut-Cyr7GMp8.js";import"./Users03-CtT9PMQy.js";import"./CheckCircle-Bape6EQJ.js";import"./Check-DHPj8hLS.js";import"./ChevronRight-CNf6Y7s8.js";import"./ChevronSelectorVertical-BGG06THN.js";import"./DotsVertical-Bbr6RMTH.js";import"./UserSquare-BMU7ptkw.js";import"./Copy01-BM0WPlp9.js";import"./CreditCard01-BcxIFS9C.js";import"./Download01-BP8_5nMI.js";import"./Settings02-D20k8vab.js";import"./Eye-B0Pd_ezn.js";import"./Share07-mTYGTjnX.js";import"./GitBranch01-ITA5wAsb.js";import"./Globe01-CxD9oJyC.js";import"./XClose-ydonzdQx.js";import"./HardDrive-Bx3SgLl5.js";import"./Image01-DkeWoTxv.js";import"./Key01-3XmA_FLZ.js";import"./Link01-DBqTW3qG.js";import"./LinkExternal01-CDbttyHT.js";import"./Monitor01-DxoPQwl_.js";import"./Sun-CPXNGo67.js";import"./Package-BmmKpgLP.js";import"./Palette-PDnTmDZk.js";import"./Play-67XUCyKd.js";import"./Plus-BiE4uFsT.js";import"./SearchMd-D9B5PGY2.js";import"./Shield01-Dh1KVvty.js";import"./Stars01-PXW__m1z.js";import"./Trash01-Dp51yqnn.js";import"./Upload01-BNUtlGr4.js";import"./User01-Ct3vu-8e.js";import"./Users01-BiGPt9OV.js";import"./Zap-Cff3TLsZ.js";import"./use-virtual-mcp-zpAtwz7v.js";import"./github-repo-COLY3wWI.js";import"./use-navigate-to-agent-BAFEWvwz.js";import"./chat-context-CsVVImtr.js";import"./use-panel-navigate-Bqzu-m4-.js";import"./slugify-CEUa2lfQ.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-ai-providers-qSmDdlV5.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-BCTeDl9d.js";import"./use-organization-settings-BZpxVSP5.js";import"./toolbar-icon-button-j89gz31d.js";import"./popover-Q1deFKgp.js";import"./drawer-C4eE6wVo.js";import"./github-repo-picker-VVXQm56m.js";import"./dialog-CwR2ZkB1.js";import"./collection-search-Nx8I1VWD.js";import"./use-debounced-value-CfUze3fk.js";import"./use-connection-DssDxszT.js";import"./authenticate-and-persist-oauth-BAd7rGHc.js";import"./mcp-oauth-DTP_bedh.js";import"./extract-connection-data-TVNJHOmc.js";import"./metadata-dUsYcpuu.js";import"./connection-BKjGbuRp.js";import"./provision-repo-scoped-github-connection-WQFARyHG.js";import"./project-icon-CW7lG0f-.js";import"./shell-layout-OBmJcmOt.js";import"./avatar-b8hndRPx.js";import"./download-app-dialog-BSTfXNDN.js";import"./command-BQZNWnLl.js";import"./index-EMRlgytw.js";import"./required-auth-layout-Geu1OAEe.js";import"./use-org-sso-CxgCZrTk.js";import"./connection-card-CUDq88xM.js";import"./use-registry-connections-BZ-aHAcc.js";import"./useInfiniteQuery-BkZl1y7Z.js";import"./use-infinite-scroll--JAy1jrF.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./integration-icon-BukX17Ja.js";import"./form-R-ND42yQ.js";import"./label-fGGyQxp5.js";import"./input-LsHd3z5Z.js";import"./select-BPlqzUpB.js";import"./textarea-Cg093qVK.js";import"./connection-form-helpers-j54kv39E.js";import"./collection-tabs-DkuVrlwj.js";import"./badge-BStsm_lg.js";import"./useSuspenseInfiniteQuery-w4-apbuy.js";import"./use-file-configs-DbhqGRsz.js";import"./site-slug-uya6Wp4-.js";import"./dropdown-menu-D1Dyu0Ie.js";import"./get-initials-D-f_fDFw.js";import"./use-deployment-admin-i2vFl9gf.js";import"./invite-member-dialog-CnDi6qyS.js";import"./use-org-auth-client-BhrDbDSV.js";import"./use-organization-roles-CDQDzA2S.js";import"./scroll-area-D_zmdKz7.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./create-organization-dialog-C0dAeHRr.js";import"./alert-dialog-P0CuRl4b.js";import"./use-join-requests-BmM24zP-.js";function N(t){const e=w.c(11),{onPointerDown:o,onDoubleClick:l}=t,i=z(),{isMobile:b}=g(),c=H();if(b||c)return null;let s;e[0]!==i?(s=i("sidebar.sidebarResizeHandle.ariaLabel"),e[0]=i,e[1]=s):s=e[1];let r;e[2]!==i?(r=i("sidebar.sidebarResizeHandle.title"),e[2]=i,e[3]=r):r=e[3];let p,m;e[4]===Symbol.for("react.memo_cache_sentinel")?(p={left:"var(--sidebar-width)"},m=a.jsx("span",{className:"pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-colors duration-150 group-hover/resize:bg-border group-active/resize:bg-border"}),e[4]=p,e[5]=m):(p=e[4],m=e[5]);let n;return e[6]!==l||e[7]!==o||e[8]!==s||e[9]!==r?(n=a.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":s,title:r,onPointerDown:o,onDoubleClick:l,className:"group/resize absolute top-0 z-20 h-full w-2 -translate-x-1/2 cursor-col-resize",style:p,children:m}),e[6]=l,e[7]=o,e[8]=s,e[9]=r,e[10]=n):n=e[10],n}const v=240,W=400,C="sidebar.width";function S(t){return Math.max(v,Math.min(W,t))}function X(){const t=w.c(11),[e,o]=_(C,$),l=j.useRef(null);let i;t[0]!==o||t[1]!==e?(i=m=>{m.preventDefault();const n=m.clientX,d=S(e),f=l.current??(typeof document<"u"?document.querySelector('[data-slot="sidebar-wrapper"]'):null),u=f?Array.from(f.querySelectorAll('[data-slot="sidebar"], [data-slot="sidebar-container"]')):[];for(const y of u)y.style.transition="none";const h=y=>{const x=S(d+(y.clientX-n));f?.style.setProperty("--sidebar-width",`${x}px`)},R=y=>{const x=S(d+(y.clientX-n));o(x);for(const E of u)E.style.transition="";window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",R),document.body.style.userSelect="",document.body.style.cursor=""};document.body.style.userSelect="none",document.body.style.cursor="col-resize",window.addEventListener("pointermove",h),window.addEventListener("pointerup",R)},t[0]=o,t[1]=e,t[2]=i):i=t[2];const b=i;let c;t[3]!==o?(c=()=>{o(v)},t[3]=o,t[4]=c):c=t[4];const s=c;let r;t[5]!==e?(r=S(e),t[5]=e,t[6]=r):r=t[6];let p;return t[7]!==b||t[8]!==s||t[9]!==r?(p={width:r,wrapperRef:l,onStartResize:b,resetWidth:s},t[7]=b,t[8]=s,t[9]=r,t[10]=p):p=t[10],p}function $(t){return typeof t=="number"?S(t):v}const P="3.125rem";function rr(){const t=w.c(16),e=D();let o;t[0]===Symbol.for("react.memo_cache_sentinel")?(o=I.sidebarOpen(),t[0]=o):o=t[0];const[l,i]=_(o,!0),{width:b,wrapperRef:c,onStartResize:s,resetWidth:r}=X(),p=`${b}px`;let m;t[1]!==p?(m={"--sidebar-width":p,"--sidebar-width-icon":P},t[1]=p,t[2]=m):m=t[2];const n=m;let d;t[3]!==e||t[4]!==s||t[5]!==r?(d=!e&&a.jsxs(a.Fragment,{children:[a.jsx(T,{}),a.jsx(N,{onPointerDown:s,onDoubleClick:r})]}),t[3]=e,t[4]=s,t[5]=r,t[6]=d):d=t[6];let f;t[7]===Symbol.for("react.memo_cache_sentinel")?(f=a.jsx(O,{className:"flex flex-col min-h-0",style:{background:"transparent",containerType:"inline-size"},children:a.jsx(L,{})}),t[7]=f):f=t[7];let u;t[8]!==n||t[9]!==d||t[10]!==c?(u=a.jsx("div",{className:"app-shell-root flex flex-col h-dvh overflow-hidden",children:a.jsxs(A,{ref:c,className:"flex-1 bg-sidebar relative min-h-0",style:n,children:[d,f]})}),t[8]=n,t[9]=d,t[10]=c,t[11]=u):u=t[11];let h;return t[12]!==i||t[13]!==l||t[14]!==u?(h=a.jsx(M,{open:l,onOpenChange:i,children:u}),t[12]=i,t[13]=l,t[14]=u,t[15]=h):h=t[15],h}export{rr as default};
@@ -1 +0,0 @@
1
- import{c as B,b as L,j as r}from"./index-BPoFiAxf.js";import{I as A}from"./input-LsHd3z5Z.js";import{L as F}from"./label-fGGyQxp5.js";import{S as R,a as z,b as J,c as O,d as V}from"./select-BPlqzUpB.js";import{T as D}from"./textarea-Cg093qVK.js";import{e as M,w as $,j as q,y as G,J as H}from"./index-DFO8Hy2x.js";import{s as P}from"./primitives-0K9NGeUu.js";import{u as Q}from"./use-autosave-B6xJm16y.js";import"./Check-DHPj8hLS.js";import"./ChevronUp-DhEp0EVP.js";import"./ArrowUp-D9BmQW3y.js";import"./chat-context-CsVVImtr.js";import"./use-panel-navigate-Bqzu-m4-.js";import"./use-destination-route-BnzyxZK-.js";import"./hooks-Chtya12g.js";import"./constants-DNuUCxmW.js";import"./use-mcp-client-r4Xv9xDe.js";import"./auth-BVp2xy53.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-BJt1WWih.js";import"./task-board-CcPCmS8T.js";import"./schema-D2aEo9_j.js";import"./slugify-CEUa2lfQ.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-zpAtwz7v.js";import"./use-ai-providers-qSmDdlV5.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-BCTeDl9d.js";import"./use-organization-settings-BZpxVSP5.js";import"./automation-runs-CCVcrtR2.js";import"./agent-icon-D0nFNhxK.js";import"./AlertCircle-mN_-o_mQ.js";import"./Tool01-DO3tFwrT.js";import"./ArrowLeft-TOd2y5eQ.js";import"./Tool02-BsbxtGm_.js";import"./XCircle-CPujy2uw.js";import"./TrendUp01-B5AMHutg.js";import"./ZoomOut-Cyr7GMp8.js";import"./Users03-CtT9PMQy.js";import"./CheckCircle-Bape6EQJ.js";import"./ChevronRight-CNf6Y7s8.js";import"./ChevronSelectorVertical-BGG06THN.js";import"./DotsVertical-Bbr6RMTH.js";import"./UserSquare-BMU7ptkw.js";import"./Copy01-BM0WPlp9.js";import"./CreditCard01-BcxIFS9C.js";import"./Download01-BP8_5nMI.js";import"./Settings02-D20k8vab.js";import"./Eye-B0Pd_ezn.js";import"./Share07-mTYGTjnX.js";import"./GitBranch01-ITA5wAsb.js";import"./Globe01-CxD9oJyC.js";import"./XClose-ydonzdQx.js";import"./HardDrive-Bx3SgLl5.js";import"./Image01-DkeWoTxv.js";import"./Key01-3XmA_FLZ.js";import"./Link01-DBqTW3qG.js";import"./LinkExternal01-CDbttyHT.js";import"./Monitor01-DxoPQwl_.js";import"./Sun-CPXNGo67.js";import"./Package-BmmKpgLP.js";import"./Palette-PDnTmDZk.js";import"./Play-67XUCyKd.js";import"./Plus-BiE4uFsT.js";import"./SearchMd-D9B5PGY2.js";import"./Shield01-Dh1KVvty.js";import"./Stars01-PXW__m1z.js";import"./Trash01-Dp51yqnn.js";import"./Upload01-BNUtlGr4.js";import"./User01-Ct3vu-8e.js";import"./Users01-BiGPt9OV.js";import"./Zap-Cff3TLsZ.js";import"./useInfiniteQuery-BkZl1y7Z.js";import"./use-infinite-scroll--JAy1jrF.js";import"./use-connection-DssDxszT.js";import"./table-DOif7xTO.js";import"./empty-state-BObNah86.js";import"./use-members-BB0dVjBb.js";import"./use-org-auth-client-BhrDbDSV.js";import"./use-automations-BHUwCHCu.js";import"./useSuspenseInfiniteQuery-w4-apbuy.js";import"./avatar-b8hndRPx.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-DElZsO5o.js";import"./markdown-BKbOmMip.js";import"./dialog-CwR2ZkB1.js";import"./monaco-editor-BpbvUJwi.js";import"./editor-X_GwLxUe.js";import"./types-CvaupNP5.js";import"./shell-layout-OBmJcmOt.js";import"./download-app-dialog-BSTfXNDN.js";import"./project-icon-CW7lG0f-.js";import"./github-repo-COLY3wWI.js";import"./command-BQZNWnLl.js";import"./index-EMRlgytw.js";import"./required-auth-layout-Geu1OAEe.js";import"./use-org-sso-CxgCZrTk.js";import"./integration-icon-BukX17Ja.js";import"./use-navigate-to-agent-BAFEWvwz.js";import"./use-mcp-prompts-BDT2dqpH.js";import"./form-R-ND42yQ.js";import"./file-type-icon-DFeVbUcK.js";import"./drawer-C4eE6wVo.js";import"./collection-search-Nx8I1VWD.js";import"./tabs-B_MhFzq8.js";import"./toggle-group-DR2FN9bK.js";import"./task-route-C4sr5u2Y.js";import"./toolbar-icon-button-j89gz31d.js";import"./popover-Q1deFKgp.js";import"./github-repo-picker-VVXQm56m.js";import"./use-debounced-value-CfUze3fk.js";import"./authenticate-and-persist-oauth-BAd7rGHc.js";import"./mcp-oauth-DTP_bedh.js";import"./extract-connection-data-TVNJHOmc.js";import"./metadata-dUsYcpuu.js";import"./connection-BKjGbuRp.js";import"./provision-repo-scoped-github-connection-WQFARyHG.js";import"./connection-card-CUDq88xM.js";import"./use-registry-connections-BZ-aHAcc.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./connection-form-helpers-j54kv39E.js";import"./collection-tabs-DkuVrlwj.js";import"./badge-BStsm_lg.js";import"./use-file-configs-DbhqGRsz.js";import"./site-slug-uya6Wp4-.js";import"./dropdown-menu-D1Dyu0Ie.js";import"./get-initials-D-f_fDFw.js";import"./select-model-D5-IXAsH.js";import"./checkbox-BSJHTjoV.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-fliliFSE.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-CNPhXYst.js";import"./toolbar-BMJtXOZ8.js";import"./skill-preview-mwAW0EFc.js";import"./pt-BR-CLy76QW2.js";import"./alert-dialog-P0CuRl4b.js";import"./use-debounced-autosave-MHpLopBx.js";import"./scroll-area-D_zmdKz7.js";import"./search-input-BizsLhvX.js";import"./use-mcp-auth-status-BWBUcCX_.js";import"./switch-DbWQok_U.js";import"./use-secrets-Bh_QiR6h.js";import"./client-icons-Dbh16KTh.js";import"./connect-layout-LGbISPTt.js";import"./self-tool-result-CTIc9xGS.js";import"./track-CEYIUg92.js";import"./use-tags-CQrzK6kW.js";import"./breadcrumb-Bcg6Ab2L.js";import"./safe-image-url-D5z803Ot.js";import"./automation-list-row-DlvHKPyj.js";import"./site-error--i37Vnuw.js";import"./cards-DaQEzixK.js";const U={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},W={authors:"sandbox.recordEditor.titleAuthor"};function Gr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=M(h);let g;t[4]!==f||t[5]!==a?(g=$(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:G(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=Q(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=W[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=U[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(R,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(z,{id:o.key,className:"h-10 w-full",children:r.jsx(J,{placeholder:i(o.labelKey)})}),r.jsx(O,{children:(o.options??[]).map(m=>r.jsx(V,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:P(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Gr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BP7gmPI-.js","assets/index-BPoFiAxf.js","assets/index-DN9-7YC2.css","assets/Tool02-BsbxtGm_.js","assets/CheckCircle-Bape6EQJ.js","assets/Settings02-D20k8vab.js","assets/use-mcp-client-r4Xv9xDe.js","assets/constants-DNuUCxmW.js","assets/auth-BVp2xy53.js","assets/useInfiniteQuery-BkZl1y7Z.js","assets/use-infinite-scroll--JAy1jrF.js","assets/badge-BStsm_lg.js","assets/input-LsHd3z5Z.js","assets/dropdown-menu-D1Dyu0Ie.js","assets/Check-DHPj8hLS.js","assets/ChevronRight-CNf6Y7s8.js","assets/DotsVertical-Bbr6RMTH.js","assets/table-DOif7xTO.js","assets/toggle-group-DR2FN9bK.js","assets/use-view-mode-PLD7Z8Gt.js","assets/Globe01-CxD9oJyC.js","assets/SearchMd-D9B5PGY2.js","assets/dialog-CwR2ZkB1.js","assets/AlertCircle-mN_-o_mQ.js","assets/Download01-BP8_5nMI.js","assets/Upload01-BNUtlGr4.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-P0CuRl4b.js","assets/Trash01-Dp51yqnn.js","assets/label-fGGyQxp5.js","assets/select-BPlqzUpB.js","assets/ChevronUp-DhEp0EVP.js","assets/switch-DbWQok_U.js","assets/textarea-Cg093qVK.js","assets/ArrowLeft-TOd2y5eQ.js","assets/XCircle-CPujy2uw.js","assets/Link01-DBqTW3qG.js","assets/safe-image-url-D5z803Ot.js","assets/checkbox-BSJHTjoV.js","assets/Eye-B0Pd_ezn.js","assets/LinkExternal01-CDbttyHT.js","assets/use-copy-DElZsO5o.js","assets/Copy01-BM0WPlp9.js","assets/Key01-3XmA_FLZ.js","assets/Plus-BiE4uFsT.js","assets/mcp-oauth-DTP_bedh.js","assets/Play-67XUCyKd.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,h as a,bl as o}from"./index-BPoFiAxf.js";import{R as l}from"./require-capability-C5rDfjFm.js";import"./access-gate-CxbXElgc.js";import"./capability-load-error-DJ7cUT9Z.js";const n=s.lazy(()=>o(()=>import("./registry-layout-BP7gmPI-.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(l,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{className:"size-5 text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{u as default};
@@ -1 +0,0 @@
1
- import{c as n,I as a,j as o,W as c,l as d,Y as f,bW as x,O as h}from"./index-BPoFiAxf.js";import{h as u}from"./settings-sidebar-B8AwNjia.js";import{T as p}from"./toolbar-BMJtXOZ8.js";import{S as j,M as b}from"./shell-controls-DnZgBbdN.js";import{u as S}from"./use-status-sounds-CNPhXYst.js";import"./ChevronUp-DhEp0EVP.js";import"./ChevronRight-CNf6Y7s8.js";import"./TrendUp01-B5AMHutg.js";import"./toolbar-icon-button-j89gz31d.js";import"./Check-DHPj8hLS.js";import"./ChevronSelectorVertical-BGG06THN.js";import"./Plus-BiE4uFsT.js";import"./command-BQZNWnLl.js";import"./index-EMRlgytw.js";import"./dialog-CwR2ZkB1.js";import"./SearchMd-D9B5PGY2.js";import"./popover-Q1deFKgp.js";import"./agent-icon-D0nFNhxK.js";import"./AlertCircle-mN_-o_mQ.js";import"./Tool01-DO3tFwrT.js";import"./ArrowUp-D9BmQW3y.js";import"./ArrowLeft-TOd2y5eQ.js";import"./Tool02-BsbxtGm_.js";import"./XCircle-CPujy2uw.js";import"./ZoomOut-Cyr7GMp8.js";import"./Users03-CtT9PMQy.js";import"./CheckCircle-Bape6EQJ.js";import"./DotsVertical-Bbr6RMTH.js";import"./UserSquare-BMU7ptkw.js";import"./Copy01-BM0WPlp9.js";import"./CreditCard01-BcxIFS9C.js";import"./Download01-BP8_5nMI.js";import"./Settings02-D20k8vab.js";import"./Eye-B0Pd_ezn.js";import"./Share07-mTYGTjnX.js";import"./GitBranch01-ITA5wAsb.js";import"./Globe01-CxD9oJyC.js";import"./XClose-ydonzdQx.js";import"./HardDrive-Bx3SgLl5.js";import"./Image01-DkeWoTxv.js";import"./Key01-3XmA_FLZ.js";import"./Link01-DBqTW3qG.js";import"./LinkExternal01-CDbttyHT.js";import"./Monitor01-DxoPQwl_.js";import"./Sun-CPXNGo67.js";import"./Package-BmmKpgLP.js";import"./Palette-PDnTmDZk.js";import"./Play-67XUCyKd.js";import"./Shield01-Dh1KVvty.js";import"./Stars01-PXW__m1z.js";import"./Trash01-Dp51yqnn.js";import"./Upload01-BNUtlGr4.js";import"./User01-Ct3vu-8e.js";import"./Users01-BiGPt9OV.js";import"./Zap-Cff3TLsZ.js";import"./project-icon-CW7lG0f-.js";import"./constants-DNuUCxmW.js";import"./use-virtual-mcp-zpAtwz7v.js";import"./use-mcp-client-r4Xv9xDe.js";import"./auth-BVp2xy53.js";import"./github-repo-COLY3wWI.js";import"./create-organization-dialog-C0dAeHRr.js";import"./alert-dialog-P0CuRl4b.js";import"./form-R-ND42yQ.js";import"./label-fGGyQxp5.js";import"./input-LsHd3z5Z.js";import"./use-destination-route-BnzyxZK-.js";import"./use-join-requests-BmM24zP-.js";import"./question-004-sINsf4GQ.js";import"./use-decopilot-events-BCTeDl9d.js";import"./decopilot-sse-pool-BJt1WWih.js";import"./task-board-CcPCmS8T.js";import"./schema-D2aEo9_j.js";import"./backoff-CrEUbyZT.js";function g(){const t=n.c(3),r=a(),{org:l}=c();S(l.slug);let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=o.jsx(f,{children:o.jsx("div",{className:"flex flex-1 items-center overflow-hidden rounded-[inherit]",children:o.jsx(x,{value:"p-0",children:o.jsx("div",{className:"flex-1 min-w-0 overflow-hidden h-full",children:o.jsx(h,{})})})})}),t[0]=e):e=t[0];const m=e;if(r){let s;return t[1]===Symbol.for("react.memo_cache_sentinel")?(s=o.jsx("div",{className:"flex flex-col flex-1 bg-background min-h-0 overflow-hidden",children:m}),t[1]=s):s=t[1],s}let i;return t[2]===Symbol.for("react.memo_cache_sentinel")?(i=o.jsx("div",{className:"flex-1 min-h-0 p-1.5",children:o.jsx("div",{className:d("flex flex-col h-full min-h-0 bg-background overflow-hidden","card-shadow","rounded-[0.75rem]"),children:m})}),t[2]=i):i=t[2],i}function zt(){const t=n.c(10),r=a();let l;t[0]!==r?(l=r&&o.jsxs(p.Header,{children:[o.jsx(p.LeftColumn,{children:o.jsx(j,{})}),o.jsx(p.CenterSlot,{}),o.jsx(p.RightColumn,{children:o.jsx("span",{})})]}),t[0]=r,t[1]=l):l=t[1];let e;t[2]===Symbol.for("react.memo_cache_sentinel")?(e=o.jsx(g,{}),t[2]=e):e=t[2];let m;t[3]!==l?(m=o.jsxs("div",{className:"flex flex-col h-full min-h-0",children:[l,e]}),t[3]=l,t[4]=m):m=t[4];let i;t[5]!==r?(i=r&&o.jsx(b,{renderSidebar:v}),t[5]=r,t[6]=i):i=t[6];let s;return t[7]!==m||t[8]!==i?(s=o.jsxs(p.Provider,{children:[m,i]}),t[7]=m,t[8]=i,t[9]=s):s=t[9],s}function v(t){const{onClose:r}=t;return o.jsx(u,{onClose:r})}export{zt as default};