@ai-development-environment/server 0.0.130 → 0.0.131

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 (369) hide show
  1. package/package.json +1 -1
  2. package/standalone/.next/BUILD_ID +1 -1
  3. package/standalone/.next/build-manifest.json +3 -3
  4. package/standalone/.next/prerender-manifest.json +3 -3
  5. package/standalone/.next/server/app/[locale]/(auth)/register/page.js.nft.json +1 -1
  6. package/standalone/.next/server/app/[locale]/(auth)/register/page_client-reference-manifest.js +1 -1
  7. package/standalone/.next/server/app/[locale]/(auth)/sign-in/page.js.nft.json +1 -1
  8. package/standalone/.next/server/app/[locale]/(auth)/sign-in/page_client-reference-manifest.js +1 -1
  9. package/standalone/.next/server/app/[locale]/(dashboard)/ai/costs/page.js.nft.json +1 -1
  10. package/standalone/.next/server/app/[locale]/(dashboard)/ai/costs/page_client-reference-manifest.js +1 -1
  11. package/standalone/.next/server/app/[locale]/(dashboard)/ai/drafts/new/page.js.nft.json +1 -1
  12. package/standalone/.next/server/app/[locale]/(dashboard)/ai/drafts/new/page_client-reference-manifest.js +1 -1
  13. package/standalone/.next/server/app/[locale]/(dashboard)/ai/drafts/page.js.nft.json +1 -1
  14. package/standalone/.next/server/app/[locale]/(dashboard)/ai/drafts/page_client-reference-manifest.js +1 -1
  15. package/standalone/.next/server/app/[locale]/(dashboard)/ai/plans/[runId]/page.js.nft.json +1 -1
  16. package/standalone/.next/server/app/[locale]/(dashboard)/ai/plans/[runId]/page_client-reference-manifest.js +1 -1
  17. package/standalone/.next/server/app/[locale]/(dashboard)/ai/plans/page.js.nft.json +1 -1
  18. package/standalone/.next/server/app/[locale]/(dashboard)/ai/plans/page_client-reference-manifest.js +1 -1
  19. package/standalone/.next/server/app/[locale]/(dashboard)/ai/sessions/[runId]/page.js.nft.json +1 -1
  20. package/standalone/.next/server/app/[locale]/(dashboard)/ai/sessions/[runId]/page_client-reference-manifest.js +1 -1
  21. package/standalone/.next/server/app/[locale]/(dashboard)/ai/sessions/page.js.nft.json +1 -1
  22. package/standalone/.next/server/app/[locale]/(dashboard)/ai/sessions/page_client-reference-manifest.js +1 -1
  23. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/[skillId]/page.js.nft.json +1 -1
  24. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/[skillId]/page_client-reference-manifest.js +1 -1
  25. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/groups/[groupId]/page.js.nft.json +1 -1
  26. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/groups/[groupId]/page_client-reference-manifest.js +1 -1
  27. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/groups/page.js.nft.json +1 -1
  28. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/groups/page_client-reference-manifest.js +1 -1
  29. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/page.js.nft.json +1 -1
  30. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/page_client-reference-manifest.js +1 -1
  31. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/sync/[runId]/page.js.nft.json +1 -1
  32. package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/sync/[runId]/page_client-reference-manifest.js +1 -1
  33. package/standalone/.next/server/app/[locale]/(dashboard)/ai/usage/page.js.nft.json +1 -1
  34. package/standalone/.next/server/app/[locale]/(dashboard)/ai/usage/page_client-reference-manifest.js +1 -1
  35. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/action-center/page.js.nft.json +1 -1
  36. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/action-center/page_client-reference-manifest.js +1 -1
  37. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/agents/[id]/page.js.nft.json +1 -1
  38. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/agents/[id]/page_client-reference-manifest.js +1 -1
  39. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/agents/page.js.nft.json +1 -1
  40. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  41. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/apps/[appId]/page.js.nft.json +1 -1
  42. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/apps/[appId]/page_client-reference-manifest.js +1 -1
  43. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/apps/page.js.nft.json +1 -1
  44. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/apps/page_client-reference-manifest.js +1 -1
  45. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/coverage/page.js.nft.json +1 -1
  46. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/coverage/page_client-reference-manifest.js +1 -1
  47. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/output/route.js.nft.json +1 -1
  48. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/page.js.nft.json +1 -1
  49. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/page_client-reference-manifest.js +1 -1
  50. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/configurations/[configurationId]/page.js.nft.json +1 -1
  51. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/configurations/[configurationId]/page_client-reference-manifest.js +1 -1
  52. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/page.js.nft.json +1 -1
  53. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/page_client-reference-manifest.js +1 -1
  54. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/changes/page.js.nft.json +1 -1
  55. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/changes/page_client-reference-manifest.js +1 -1
  56. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/[codebaseId]/page.js.nft.json +1 -1
  57. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/[codebaseId]/page_client-reference-manifest.js +1 -1
  58. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/page.js.nft.json +1 -1
  59. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/page_client-reference-manifest.js +1 -1
  60. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/repositories/[repositoryId]/page.js.nft.json +1 -1
  61. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/repositories/[repositoryId]/page_client-reference-manifest.js +1 -1
  62. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/[commandId]/edit/page.js.nft.json +1 -1
  63. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/[commandId]/edit/page_client-reference-manifest.js +1 -1
  64. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/new/page.js.nft.json +1 -1
  65. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/new/page_client-reference-manifest.js +1 -1
  66. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/page.js.nft.json +1 -1
  67. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/page_client-reference-manifest.js +1 -1
  68. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/runs/[runId]/output/route.js.nft.json +1 -1
  69. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/runs/[runId]/page.js.nft.json +1 -1
  70. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/runs/[runId]/page_client-reference-manifest.js +1 -1
  71. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/jobs/[jobId]/page.js.nft.json +1 -1
  72. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/jobs/[jobId]/page_client-reference-manifest.js +1 -1
  73. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/notifications/page.js.nft.json +1 -1
  74. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/notifications/page_client-reference-manifest.js +1 -1
  75. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/[workflowId]/edit/page.js.nft.json +1 -1
  76. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/[workflowId]/edit/page_client-reference-manifest.js +1 -1
  77. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/[workflowId]/page.js.nft.json +1 -1
  78. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
  79. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/new/page.js.nft.json +1 -1
  80. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/new/page_client-reference-manifest.js +1 -1
  81. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/page.js.nft.json +1 -1
  82. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/page_client-reference-manifest.js +1 -1
  83. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/runs/[runId]/page.js.nft.json +1 -1
  84. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/runs/[runId]/page_client-reference-manifest.js +1 -1
  85. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/worktrees/[worktreeId]/page.js.nft.json +1 -1
  86. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/worktrees/[worktreeId]/page_client-reference-manifest.js +1 -1
  87. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/worktrees/page.js.nft.json +1 -1
  88. package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/worktrees/page_client-reference-manifest.js +1 -1
  89. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/analytics-events/page.js.nft.json +1 -1
  90. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/analytics-events/page_client-reference-manifest.js +1 -1
  91. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/console-logs/page.js.nft.json +1 -1
  92. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/console-logs/page_client-reference-manifest.js +1 -1
  93. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/[crashId]/page.js.nft.json +1 -1
  94. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/[crashId]/page_client-reference-manifest.js +1 -1
  95. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/dsyms/[dsymId]/page.js.nft.json +1 -1
  96. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/dsyms/[dsymId]/page_client-reference-manifest.js +1 -1
  97. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/dsyms/page.js.nft.json +1 -1
  98. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/dsyms/page_client-reference-manifest.js +1 -1
  99. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/page.js.nft.json +1 -1
  100. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/page_client-reference-manifest.js +1 -1
  101. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/push-notifications/page.js.nft.json +1 -1
  102. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/push-notifications/page_client-reference-manifest.js +1 -1
  103. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/[endpointId]/mocks/page.js.nft.json +1 -1
  104. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/[endpointId]/mocks/page_client-reference-manifest.js +1 -1
  105. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/[endpointId]/page.js.nft.json +1 -1
  106. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/[endpointId]/page_client-reference-manifest.js +1 -1
  107. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/breakpoints/page.js.nft.json +1 -1
  108. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/breakpoints/page_client-reference-manifest.js +1 -1
  109. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/history/[requestId]/page.js.nft.json +1 -1
  110. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/history/[requestId]/page_client-reference-manifest.js +1 -1
  111. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/history/page.js.nft.json +1 -1
  112. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/history/page_client-reference-manifest.js +1 -1
  113. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/new/page.js.nft.json +1 -1
  114. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/new/page_client-reference-manifest.js +1 -1
  115. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/page.js.nft.json +1 -1
  116. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/page_client-reference-manifest.js +1 -1
  117. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/storage/page.js.nft.json +1 -1
  118. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/storage/page_client-reference-manifest.js +1 -1
  119. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/unified-events/page.js.nft.json +1 -1
  120. package/standalone/.next/server/app/[locale]/(dashboard)/debugging/unified-events/page_client-reference-manifest.js +1 -1
  121. package/standalone/.next/server/app/[locale]/(dashboard)/github/actions/page.js.nft.json +1 -1
  122. package/standalone/.next/server/app/[locale]/(dashboard)/github/actions/page_client-reference-manifest.js +1 -1
  123. package/standalone/.next/server/app/[locale]/(dashboard)/github/actions-cache/page.js.nft.json +1 -1
  124. package/standalone/.next/server/app/[locale]/(dashboard)/github/actions-cache/page_client-reference-manifest.js +1 -1
  125. package/standalone/.next/server/app/[locale]/(dashboard)/github/cache/entries/[id]/page.js.nft.json +1 -1
  126. package/standalone/.next/server/app/[locale]/(dashboard)/github/cache/entries/[id]/page_client-reference-manifest.js +1 -1
  127. package/standalone/.next/server/app/[locale]/(dashboard)/github/cache/page.js.nft.json +1 -1
  128. package/standalone/.next/server/app/[locale]/(dashboard)/github/cache/page_client-reference-manifest.js +1 -1
  129. package/standalone/.next/server/app/[locale]/(dashboard)/github/comments/page.js.nft.json +1 -1
  130. package/standalone/.next/server/app/[locale]/(dashboard)/github/comments/page_client-reference-manifest.js +1 -1
  131. package/standalone/.next/server/app/[locale]/(dashboard)/github/pull-requests/[owner]/[repository]/[number]/page.js.nft.json +1 -1
  132. package/standalone/.next/server/app/[locale]/(dashboard)/github/pull-requests/[owner]/[repository]/[number]/page_client-reference-manifest.js +1 -1
  133. package/standalone/.next/server/app/[locale]/(dashboard)/github/pull-requests/page.js.nft.json +1 -1
  134. package/standalone/.next/server/app/[locale]/(dashboard)/github/pull-requests/page_client-reference-manifest.js +1 -1
  135. package/standalone/.next/server/app/[locale]/(dashboard)/github/webhooks/page.js.nft.json +1 -1
  136. package/standalone/.next/server/app/[locale]/(dashboard)/github/webhooks/page_client-reference-manifest.js +1 -1
  137. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/cache/page.js.nft.json +1 -1
  138. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/cache/page_client-reference-manifest.js +1 -1
  139. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/comments/page.js.nft.json +1 -1
  140. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/comments/page_client-reference-manifest.js +1 -1
  141. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/merge-requests/[projectId]/[iid]/page.js.nft.json +1 -1
  142. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/merge-requests/[projectId]/[iid]/page_client-reference-manifest.js +1 -1
  143. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/merge-requests/page.js.nft.json +1 -1
  144. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/merge-requests/page_client-reference-manifest.js +1 -1
  145. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/pipelines/page.js.nft.json +1 -1
  146. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/pipelines/page_client-reference-manifest.js +1 -1
  147. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/webhooks/page.js.nft.json +1 -1
  148. package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/webhooks/page_client-reference-manifest.js +1 -1
  149. package/standalone/.next/server/app/[locale]/(dashboard)/jira/cache/page.js.nft.json +1 -1
  150. package/standalone/.next/server/app/[locale]/(dashboard)/jira/cache/page_client-reference-manifest.js +1 -1
  151. package/standalone/.next/server/app/[locale]/(dashboard)/jira/cache/tickets/[issueKey]/page.js.nft.json +1 -1
  152. package/standalone/.next/server/app/[locale]/(dashboard)/jira/cache/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
  153. package/standalone/.next/server/app/[locale]/(dashboard)/jira/tickets/[issueKey]/page.js.nft.json +1 -1
  154. package/standalone/.next/server/app/[locale]/(dashboard)/jira/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
  155. package/standalone/.next/server/app/[locale]/(dashboard)/jira/tickets/page.js.nft.json +1 -1
  156. package/standalone/.next/server/app/[locale]/(dashboard)/jira/tickets/page_client-reference-manifest.js +1 -1
  157. package/standalone/.next/server/app/[locale]/(dashboard)/jira/webhooks/page.js.nft.json +1 -1
  158. package/standalone/.next/server/app/[locale]/(dashboard)/jira/webhooks/page_client-reference-manifest.js +1 -1
  159. package/standalone/.next/server/app/[locale]/(dashboard)/system/api-keys/page.js.nft.json +1 -1
  160. package/standalone/.next/server/app/[locale]/(dashboard)/system/api-keys/page_client-reference-manifest.js +1 -1
  161. package/standalone/.next/server/app/[locale]/(dashboard)/system/build-data/page.js.nft.json +1 -1
  162. package/standalone/.next/server/app/[locale]/(dashboard)/system/build-data/page_client-reference-manifest.js +1 -1
  163. package/standalone/.next/server/app/[locale]/(dashboard)/system/connected-applications/page.js.nft.json +1 -1
  164. package/standalone/.next/server/app/[locale]/(dashboard)/system/connected-applications/page_client-reference-manifest.js +1 -1
  165. package/standalone/.next/server/app/[locale]/(dashboard)/system/credentials/page.js.nft.json +1 -1
  166. package/standalone/.next/server/app/[locale]/(dashboard)/system/credentials/page_client-reference-manifest.js +1 -1
  167. package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/[id]/page.js.nft.json +1 -1
  168. package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/[id]/page_client-reference-manifest.js +1 -1
  169. package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/enroll/page.js.nft.json +1 -1
  170. package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/enroll/page_client-reference-manifest.js +1 -1
  171. package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/page.js.nft.json +1 -1
  172. package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/page_client-reference-manifest.js +1 -1
  173. package/standalone/.next/server/app/[locale]/(dashboard)/system/polling/page.js.nft.json +1 -1
  174. package/standalone/.next/server/app/[locale]/(dashboard)/system/polling/page_client-reference-manifest.js +1 -1
  175. package/standalone/.next/server/app/[locale]/(dashboard)/system/prepare/page.js.nft.json +1 -1
  176. package/standalone/.next/server/app/[locale]/(dashboard)/system/prepare/page_client-reference-manifest.js +1 -1
  177. package/standalone/.next/server/app/[locale]/(dashboard)/system/provisioning-profiles/[profileId]/page.js.nft.json +1 -1
  178. package/standalone/.next/server/app/[locale]/(dashboard)/system/provisioning-profiles/[profileId]/page_client-reference-manifest.js +1 -1
  179. package/standalone/.next/server/app/[locale]/(dashboard)/system/provisioning-profiles/page.js.nft.json +1 -1
  180. package/standalone/.next/server/app/[locale]/(dashboard)/system/provisioning-profiles/page_client-reference-manifest.js +1 -1
  181. package/standalone/.next/server/app/[locale]/(dashboard)/system/settings/page.js.nft.json +1 -1
  182. package/standalone/.next/server/app/[locale]/(dashboard)/system/settings/page_client-reference-manifest.js +1 -1
  183. package/standalone/.next/server/app/[locale]/(dashboard)/system/status/page.js.nft.json +1 -1
  184. package/standalone/.next/server/app/[locale]/(dashboard)/system/status/page_client-reference-manifest.js +1 -1
  185. package/standalone/.next/server/app/[locale]/(dashboard)/system/tailscale/page.js.nft.json +1 -1
  186. package/standalone/.next/server/app/[locale]/(dashboard)/system/tailscale/page_client-reference-manifest.js +1 -1
  187. package/standalone/.next/server/app/[locale]/(dashboard)/system/tools/page.js.nft.json +1 -1
  188. package/standalone/.next/server/app/[locale]/(dashboard)/system/tools/page_client-reference-manifest.js +1 -1
  189. package/standalone/.next/server/app/[locale]/(dashboard)/system/users/page.js.nft.json +1 -1
  190. package/standalone/.next/server/app/[locale]/(dashboard)/system/users/page_client-reference-manifest.js +1 -1
  191. package/standalone/.next/server/app/[locale]/(mcp)/mcp/consent/page.js.nft.json +1 -1
  192. package/standalone/.next/server/app/[locale]/(mcp)/mcp/consent/page_client-reference-manifest.js +1 -1
  193. package/standalone/.next/server/app/[locale]/(mcp)/mcp/sign-in/page.js.nft.json +1 -1
  194. package/standalone/.next/server/app/[locale]/(mcp)/mcp/sign-in/page_client-reference-manifest.js +1 -1
  195. package/standalone/.next/server/app/[locale]/page.js.nft.json +1 -1
  196. package/standalone/.next/server/app/[locale]/page_client-reference-manifest.js +1 -1
  197. package/standalone/.next/server/app/_global-error.html +1 -1
  198. package/standalone/.next/server/app/_global-error.rsc +1 -1
  199. package/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  200. package/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  201. package/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  202. package/standalone/.next/server/app/_not-found.html +1 -1
  203. package/standalone/.next/server/app/_not-found.rsc +1 -1
  204. package/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  205. package/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  206. package/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  207. package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/complete/route.js +1 -1
  208. package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/complete/route.js.nft.json +1 -1
  209. package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/download/route.js +1 -1
  210. package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/download/route.js.nft.json +1 -1
  211. package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/route.js +1 -1
  212. package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/route.js.nft.json +1 -1
  213. package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/upload/route.js +1 -1
  214. package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/upload/route.js.nft.json +1 -1
  215. package/standalone/.next/server/app/api/agent/dsyms/[dsymId]/dwarf/route.js.nft.json +1 -1
  216. package/standalone/.next/server/app/api/agent/run-attachments/[attachmentId]/route.js +1 -1
  217. package/standalone/.next/server/app/api/agent/run-attachments/[attachmentId]/route.js.nft.json +1 -1
  218. package/standalone/.next/server/app/api/build-artifact-uploads/[uploadId]/route.js +1 -1
  219. package/standalone/.next/server/app/api/build-artifact-uploads/[uploadId]/route.js.nft.json +1 -1
  220. package/standalone/.next/server/app/api/codebases/by-path/route.js.nft.json +1 -1
  221. package/standalone/.next/server/app/api/codebases/route.js.nft.json +1 -1
  222. package/standalone/.next/server/app/api/crash-files/dsyms/[dsymId]/route.js.nft.json +1 -1
  223. package/standalone/.next/server/app/api/crash-files/reports/[crashId]/route.js.nft.json +1 -1
  224. package/standalone/.next/server/app/api/dsyms/route.js.nft.json +1 -1
  225. package/standalone/.next/server/app/api/dsyms/uploads/[uploadId]/complete/route.js.nft.json +1 -1
  226. package/standalone/.next/server/app/api/dsyms/uploads/[uploadId]/route.js.nft.json +1 -1
  227. package/standalone/.next/server/app/api/dsyms/uploads/route.js.nft.json +1 -1
  228. package/standalone/.next/server/app/api/graphql/route.js +1 -1
  229. package/standalone/.next/server/app/api/graphql/route.js.nft.json +1 -1
  230. package/standalone/.next/server/app/api/ios/apns-devices/route.js.nft.json +1 -1
  231. package/standalone/.next/server/app/api/ios/devices/export.tsv/route.js.nft.json +1 -1
  232. package/standalone/.next/server/app/api/ios/enrollment/start/route.js.nft.json +1 -1
  233. package/standalone/.next/server/app/api/ios/notification-devices/route.js.nft.json +1 -1
  234. package/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  235. package/standalone/.next/server/app/api/public/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route.js.nft.json +1 -1
  236. package/standalone/.next/server/app/api/public/builds/[buildId]/artifacts/[artifactId]/route.js.nft.json +1 -1
  237. package/standalone/.next/server/app/api/public/crashes/route.js.nft.json +1 -1
  238. package/standalone/.next/server/app/api/public/github/webhook/route.js.nft.json +1 -1
  239. package/standalone/.next/server/app/api/public/gitlab/webhook/route.js.nft.json +1 -1
  240. package/standalone/.next/server/app/api/public/ios/enrollment-profile/route.js.nft.json +1 -1
  241. package/standalone/.next/server/app/api/public/ios/profile-response/route.js.nft.json +1 -1
  242. package/standalone/.next/server/app/api/public/jira/webhook/route.js.nft.json +1 -1
  243. package/standalone/.next/server/app/api/public/sse/[token]/route.js.nft.json +1 -1
  244. package/standalone/.next/server/app/api/run-attachments/[attachmentId]/route.js.nft.json +1 -1
  245. package/standalone/.next/server/app/api/run-attachments/route.js.nft.json +1 -1
  246. package/standalone/.next/server/app/api/sse/history/export/route.js.nft.json +1 -1
  247. package/standalone/.next/server/app/api/telemetry/analytics-events/route.js.nft.json +1 -1
  248. package/standalone/.next/server/app/api/telemetry/console-logs/route.js.nft.json +1 -1
  249. package/standalone/.next/server/app/api/telemetry/export/route.js.nft.json +1 -1
  250. package/standalone/.next/server/app/api/tools/call/route.js.nft.json +1 -1
  251. package/standalone/.next/server/app/api/tools/catalog/route.js.nft.json +1 -1
  252. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route.js.nft.json +1 -1
  253. package/standalone/.next/server/chunks/{[root-of-the-server]__0hjegpvurx-qp._.js → [root-of-the-server]__01yq1kxt3tcs5._.js} +1 -1
  254. package/standalone/.next/server/chunks/{[root-of-the-server]__0jt869r42yzkz._.js → [root-of-the-server]__03ybdczxg_r56._.js} +1 -1
  255. package/standalone/.next/server/chunks/{[root-of-the-server]__0-w9hau1wg6x5._.js → [root-of-the-server]__08liq7hjy8jkd._.js} +1 -1
  256. package/standalone/.next/server/chunks/{[root-of-the-server]__0i9dbzy7vmjvf._.js → [root-of-the-server]__0axkrpt5jvo9a._.js} +1 -1
  257. package/standalone/.next/server/chunks/{[root-of-the-server]__06m2gjiyrca2o._.js → [root-of-the-server]__0cf7tu_v4i5j5._.js} +1 -1
  258. package/standalone/.next/server/chunks/{[root-of-the-server]__0_ksvmf449oku._.js → [root-of-the-server]__0d31pdi_y1ygv._.js} +2 -2
  259. package/standalone/.next/server/chunks/{[root-of-the-server]__06s9z4voulm-7._.js → [root-of-the-server]__0d4btvbueeds8._.js} +1 -1
  260. package/standalone/.next/server/chunks/{[root-of-the-server]__07uncdie_3fqz._.js → [root-of-the-server]__0h374zchua6u5._.js} +1 -1
  261. package/standalone/.next/server/chunks/{[root-of-the-server]__0s5kgn705_xrt._.js → [root-of-the-server]__0jbflrhpa5dzs._.js} +1 -1
  262. package/standalone/.next/server/chunks/{[root-of-the-server]__00aamhqamrwhq._.js → [root-of-the-server]__0ksbjlakayjeg._.js} +1 -1
  263. package/standalone/.next/server/chunks/{[root-of-the-server]__09-xatwq-ud3p._.js → [root-of-the-server]__0l1cpvoby8l9z._.js} +1 -1
  264. package/standalone/.next/server/chunks/{[root-of-the-server]__1f-ybvd_fhf-2._.js → [root-of-the-server]__0p10jubmns5pq._.js} +1 -1
  265. package/standalone/.next/server/chunks/{[root-of-the-server]__0tnhbz9uikd7p._.js → [root-of-the-server]__0vneehawylqdb._.js} +1 -1
  266. package/standalone/.next/server/chunks/{[root-of-the-server]__0xgsj7g8ww_t6._.js → [root-of-the-server]__0vnunsj1tqxhs._.js} +2 -2
  267. package/standalone/.next/server/chunks/{[root-of-the-server]__0e39hkkur4tdq._.js → [root-of-the-server]__0z_4chwbw4ivu._.js} +2 -2
  268. package/standalone/.next/server/chunks/{[root-of-the-server]__0a4uce2kn3f18._.js → [root-of-the-server]__1-hzfko3529pb._.js} +1 -1
  269. package/standalone/.next/server/chunks/{[root-of-the-server]__0z1y-zgh7bupn._.js → [root-of-the-server]__10qxafo8vhitg._.js} +1 -1
  270. package/standalone/.next/server/chunks/{[root-of-the-server]__0f8-5blroj8l4._.js → [root-of-the-server]__16fb5l-iz58fr._.js} +2 -2
  271. package/standalone/.next/server/chunks/{[root-of-the-server]__0vpjsl35ie7o9._.js → [root-of-the-server]__1bgml5ria00_k._.js} +1 -1
  272. package/standalone/.next/server/chunks/[root-of-the-server]__1c62psuih4_k9._.js +3 -0
  273. package/standalone/.next/server/chunks/{[root-of-the-server]__0569g2n-iqtqj._.js → [root-of-the-server]__1coqpqjqxmhrb._.js} +1 -1
  274. package/standalone/.next/server/chunks/[root-of-the-server]__1fsgcggwi0snx._.js +3 -0
  275. package/standalone/.next/server/chunks/[root-of-the-server]__1fyf_moef6p8l._.js +3 -0
  276. package/standalone/.next/server/chunks/[root-of-the-server]__1hj1mebpn4mih._.js +3 -0
  277. package/standalone/.next/server/chunks/[root-of-the-server]__1o9xlhi4bgklz._.js +3 -0
  278. package/standalone/.next/server/chunks/[root-of-the-server]__1p089st69lou0._.js +3 -0
  279. package/standalone/.next/server/chunks/[root-of-the-server]__1phofmej0zr1s._.js +3 -0
  280. package/standalone/.next/server/chunks/[root-of-the-server]__1qtcmyz3cocuh._.js +3 -0
  281. package/standalone/.next/server/chunks/{[root-of-the-server]__0sr3mpfw4r8gc._.js → [root-of-the-server]__1ri8d3qvfyvec._.js} +2 -2
  282. package/standalone/.next/server/chunks/{[root-of-the-server]__03f5b6bkl6aix._.js → [root-of-the-server]__1rj3o65kiko3b._.js} +2 -2
  283. package/standalone/.next/server/chunks/[root-of-the-server]__1sor2nihj-gu9._.js +3 -0
  284. package/standalone/.next/server/chunks/[root-of-the-server]__1tdosp26vh-cm._.js +3 -0
  285. package/standalone/.next/server/chunks/[root-of-the-server]__1ts9z7hmp0x0v._.js +3 -0
  286. package/standalone/.next/server/chunks/[root-of-the-server]__1w0t_x3ytpo4c._.js +3 -0
  287. package/standalone/.next/server/chunks/[root-of-the-server]__1z7ya5ehncn-c._.js +3 -0
  288. package/standalone/.next/server/chunks/_02mipoz3yx326._.js +108 -14
  289. package/standalone/.next/server/chunks/_05-0fg3-6nxfz._.js +2 -2
  290. package/standalone/.next/server/chunks/_09yoi7vle8-p8._.js +2 -2
  291. package/standalone/.next/server/chunks/_0e09pfc4ngmjt._.js +2 -2
  292. package/standalone/.next/server/chunks/_0s9ju0jh3bjvv._.js +2 -2
  293. package/standalone/.next/server/chunks/_0wf0plgfred1s._.js +108 -14
  294. package/standalone/.next/server/chunks/_0yt0ag8ogzkpo._.js +2 -2
  295. package/standalone/.next/server/chunks/_159jskugflhe1._.js +3 -3
  296. package/standalone/.next/server/chunks/_16mi1fdjv-ttu._.js +2 -2
  297. package/standalone/.next/server/chunks/_16tl-jjvokalw._.js +2 -2
  298. package/standalone/.next/server/chunks/_1_2y0u7fotnj9._.js +2 -2
  299. package/standalone/.next/server/chunks/{_1tjxax0udpzpp._.js → _1_wh1ec-2o48m._.js} +96 -2
  300. package/standalone/.next/server/chunks/_1dvaeoxy6mi-5._.js +3 -3
  301. package/standalone/.next/server/chunks/_1k1f9a5th4_mf._.js +2 -2
  302. package/standalone/.next/server/chunks/_1uk_t2708atwy._.js +2 -2
  303. package/standalone/.next/server/chunks/_1wycw9ka35xs9._.js +3 -3
  304. package/standalone/.next/server/chunks/_1xmq6bnjsnu8v._.js +2 -2
  305. package/standalone/.next/server/chunks/src_06620x_9xof19._.js +1 -1
  306. package/standalone/.next/server/chunks/src_services_0shipcub2yhy6._.js +1 -1
  307. package/standalone/.next/server/chunks/ssr/_003c9h921os5x._.js +11 -2
  308. package/standalone/.next/server/chunks/ssr/_09frr_x9sj064._.js +22 -20
  309. package/standalone/.next/server/chunks/ssr/_0wpoapzcyfgyq._.js +22 -20
  310. package/standalone/.next/server/chunks/ssr/_0x-yk4-j0jzr_._.js +22 -20
  311. package/standalone/.next/server/chunks/ssr/{_0vju6f-hf9vvn._.js → _1ar2yl573rmcg._.js} +1 -1
  312. package/standalone/.next/server/chunks/ssr/_1c2l10eipkbhb._.js +11 -2
  313. package/standalone/.next/server/chunks/ssr/_1j4th2umomnn-._.js +11 -2
  314. package/standalone/.next/server/chunks/ssr/_1jjtult-x-57z._.js +11 -2
  315. package/standalone/.next/server/chunks/ssr/_1nq6rrkcdihtp._.js +3 -0
  316. package/standalone/.next/server/chunks/ssr/_1sxiiw_mgqyi0._.js +11 -2
  317. package/standalone/.next/server/chunks/ssr/_1ujnuzin3idis._.js +3 -0
  318. package/standalone/.next/server/chunks/ssr/messages_de_json_[json]_cjs_1uig1ud36h5oz._.js +1 -1
  319. package/standalone/.next/server/chunks/ssr/messages_en_json_[json]_cjs_206072-e4clp3._.js +1 -1
  320. package/standalone/.next/server/chunks/ssr/messages_es_json_[json]_cjs_082yukd_h99n8._.js +1 -1
  321. package/standalone/.next/server/chunks/ssr/messages_fr_json_[json]_cjs_0j6-w0ix_w_ac._.js +1 -1
  322. package/standalone/.next/server/chunks/ssr/{node_modules_124_-_72356a1._.js → node_modules_1gzler2prpvuu._.js} +1 -1
  323. package/standalone/.next/server/chunks/ssr/src_components_agents_1h2c2ip6jqvl0._.js +5 -0
  324. package/standalone/.next/server/chunks/ssr/src_components_agents_1tuxa3sue04gs._.js +5 -0
  325. package/standalone/.next/server/chunks/ssr/src_components_agents_agent-detail_tsx_0lfa4uiys5oxb._.js +22 -22
  326. package/standalone/.next/server/chunks/ssr/src_components_agents_agents-list_tsx_0hz7m22l4--2j._.js +1 -1
  327. package/standalone/.next/server/chunks/ssr/src_lib_control-plane-client_ts_1ovfa4nqxphuc._.js +1 -1
  328. package/standalone/.next/server/middleware-build-manifest.js +3 -3
  329. package/standalone/.next/server/pages/404.html +1 -1
  330. package/standalone/.next/server/pages/500.html +1 -1
  331. package/standalone/.next/server/preview-props.json +3 -3
  332. package/standalone/.next/server/server-reference-manifest.js +1 -1
  333. package/standalone/.next/server/server-reference-manifest.json +1 -1
  334. package/standalone/.next/static/chunks/{0yyibsmc1x0fk.js → 03ul-f7fkx6-m.js} +18 -9
  335. package/standalone/.next/static/chunks/06i8z2n00eta3.js +173 -0
  336. package/standalone/.next/static/chunks/{2e-ygqo0s_u13.js → 0nd5w69eookzq.js} +18 -9
  337. package/standalone/.next/static/chunks/1v3l2hnge_w44.js +1 -0
  338. package/standalone/.next/static/chunks/1vohvf2mi4wbp.js +46 -0
  339. package/standalone/.next/static/chunks/{39xqauhnlx-3n.js → 26gh6vsm1kt0w.js} +23 -14
  340. package/standalone/.next/static/chunks/2h15blliw-aid.js +54 -0
  341. package/standalone/.next/static/chunks/2kblq31r4mka3.js +7 -0
  342. package/standalone/.next/static/chunks/2m96kfrw0imb4.js +24 -0
  343. package/standalone/.next/static/chunks/{1pipry6ng09bb.css → 2n--68blak0tt.css} +1 -1
  344. package/standalone/.next/static/chunks/{13623d3jab6vm.js → 2y99aa6snk535.js} +17 -8
  345. package/standalone/.next/server/chunks/[root-of-the-server]__11adibsl0kbap._.js +0 -3
  346. package/standalone/.next/server/chunks/[root-of-the-server]__1_e1dwxjxs7t-._.js +0 -3
  347. package/standalone/.next/server/chunks/[root-of-the-server]__1ari69u0znx5n._.js +0 -3
  348. package/standalone/.next/server/chunks/[root-of-the-server]__1j4iu2f41p-yo._.js +0 -3
  349. package/standalone/.next/server/chunks/[root-of-the-server]__1krmyi73tn6ow._.js +0 -3
  350. package/standalone/.next/server/chunks/[root-of-the-server]__1nyz09_tss7yf._.js +0 -3
  351. package/standalone/.next/server/chunks/[root-of-the-server]__1o4t76d95ijtz._.js +0 -3
  352. package/standalone/.next/server/chunks/[root-of-the-server]__1okr1gcw9fgal._.js +0 -3
  353. package/standalone/.next/server/chunks/[root-of-the-server]__1q84qtcvzi1g9._.js +0 -3
  354. package/standalone/.next/server/chunks/[root-of-the-server]__1r1o47_vtjr_-._.js +0 -3
  355. package/standalone/.next/server/chunks/[root-of-the-server]__1sok4i2j1u-1v._.js +0 -3
  356. package/standalone/.next/server/chunks/[root-of-the-server]__20bjknlxmt1ci._.js +0 -3
  357. package/standalone/.next/server/chunks/[root-of-the-server]__211wb05m63g37._.js +0 -3
  358. package/standalone/.next/server/chunks/ssr/_0ens5u1l-_vah._.js +0 -3
  359. package/standalone/.next/server/chunks/ssr/_17xtkxgta8j84._.js +0 -3
  360. package/standalone/.next/server/chunks/ssr/src_components_agents_0gz1a35-7zct2._.js +0 -3
  361. package/standalone/.next/static/chunks/0iuc4fye_mkuc.js +0 -52
  362. package/standalone/.next/static/chunks/1isxygn8ix7sp.js +0 -171
  363. package/standalone/.next/static/chunks/1qqmiyzd071fl.js +0 -1
  364. package/standalone/.next/static/chunks/1xrrl3ex_ybkf.js +0 -46
  365. package/standalone/.next/static/chunks/3j25esleqxt4a.js +0 -15
  366. package/standalone/.next/static/chunks/3ueflsd9w92bi.js +0 -5
  367. /package/standalone/.next/static/{RUNUd01nvm8SEzNBz3axk → 1I2pKdbSCeykSYjiSoyzQ}/_buildManifest.js +0 -0
  368. /package/standalone/.next/static/{RUNUd01nvm8SEzNBz3axk → 1I2pKdbSCeykSYjiSoyzQ}/_clientMiddlewareManifest.js +0 -0
  369. /package/standalone/.next/static/{RUNUd01nvm8SEzNBz3axk → 1I2pKdbSCeykSYjiSoyzQ}/_ssgManifest.js +0 -0
@@ -875,14 +875,14 @@ ${t}`}splitMarkdownIntoSections(e){let t=e.split(/(?=^#{1,6}\s)|(?:\n\s*\n)/m).f
875
875
  id requiresApprovingReviews requiredApprovingReviewCount requiresCodeOwnerReviews requireLastPushApproval
876
876
  } }
877
877
  }
878
- }`,{owner:w,name:b,ref:`refs/heads/${T}`},!!i,a).then(e=>e.repository?.ref?.branchProtectionRule??null).catch(e=>(R("GitHub branch protection could not be loaded",e),null))]),j=[],M=[],B=[];if(C){let[e,t,r]=await Promise.all([E(`${v}/pulls/${C.number}/files`),S(`${v}/pulls/${C.number}/requested_reviewers`),E(`${v}/pulls/${C.number}/reviews`)]);j=[...new Set(e.flatMap(e=>[e.filename,...e.previous_filename?[e.previous_filename]:[]]))],e.length<C.changed_files&&R("GitHub changed files are incomplete",Error("The pull request exceeds the provider file-list limit")),M=p((t.users??[]).map(c));let i=new Map;for(let e of[...r].sort((e,t)=>e.id-t.id))["APPROVED","CHANGES_REQUESTED","DISMISSED"].includes(e.state)&&i.set(String(e.user.id),e);B=p([...i.values()].filter(e=>"APPROVED"===e.state).map(e=>c(e.user)))}let q=B.map(e=>e.id),G=[],H=$.filter(e=>"pull_request"===e.type),z=Math.max(L?.requiresApprovingReviews?L.requiredApprovingReviewCount:0,0,...H.map(e=>e.parameters?.required_approving_review_count??0)),F=!!(L?.requiresCodeOwnerReviews||H.some(e=>e.parameters?.require_code_owner_review));C&&(L?.requireLastPushApproval||H.some(e=>e.parameters?.require_last_push_approval))&&R("Latest-push approval cannot be fully verified",Error("GitHub requires approval after the latest push from someone other than its pusher. Check this requirement in GitHub before merging.")),C&&z>0&&G.push({id:"github:required-approvals",name:"Required approvals",poolKeys:[x],eligibleReviewerIds:O.map(e=>e.id),requiredApprovals:z,approvedReviewerIds:q});let V=new Map,K=(e,t,r)=>{let i=`${e.toLowerCase()}/${t.toLowerCase()}/${r}`,a=V.get(i);return a||(a=(async()=>{let i=`/orgs/${encodeURIComponent(e)}/teams/${encodeURIComponent(t)}`,a=await S(i);if(r){let r=await S(`${i}/repos/${encodeURIComponent(w)}/${encodeURIComponent(b)}`);if(!r.permissions?.push&&!["push","write","maintain","admin"].includes(r.permission??""))return{principal:`team:${a.id}`,label:`@${e}/${t}`,people:[]}}let n=await E(`${i}/members`);return{principal:`team:${a.id}`,label:`@${e}/${t}`,people:n.filter(d).map(c).filter(e=>D.has(e.id))}})(),V.set(i,a)),a};for(let e of H)for(let t of e.parameters?.required_reviewers??[])try{if("Team"!==t.reviewer.type)throw Error("Unsupported required-reviewer type");s??=E(`/orgs/${encodeURIComponent(w)}/teams`);let r=(await s).find(e=>e.id===t.reviewer.id);if(!r)throw Error(`Team ${t.reviewer.id} is not visible to the configured token`);let i=await K(w,r.slug,!1),a=`${k}:ruleset:${e.ruleset_source_type}:${e.ruleset_id}:team:${r.id}`;m(P,{key:a,name:`Rule ${e.ruleset_id} \xb7 ${r.name}`,kind:"APPROVAL_RULE",candidates:i.people}),C&&function(e,t){return t.some(t=>{let r=!1;for(let i of e)o(i.replace(/^!/,""),t,{characterClasses:!0})&&(r=!i.startsWith("!"));return r})}(t.file_patterns,j)&&G.push({id:`${a}:${G.length}`,name:`${r.name}${t.minimum_approvals?" approval rule":" (optional review)"}`,poolKeys:[a],eligibleReviewerIds:i.people.map(e=>e.id),requiredApprovals:t.minimum_approvals,approvedReviewerIds:q})}catch(e){R("GitHub required-reviewer team could not be loaded",e)}for(let e of[".github/CODEOWNERS","CODEOWNERS","docs/CODEOWNERS"])try{let t=await S(`${v}/contents/${e}?ref=${encodeURIComponent(T)}`);if(t.size>=3145728)throw Error("GitHub ignores CODEOWNERS files of 3 MB or larger");if("base64"!==t.encoding||"string"!=typeof t.content)throw Error("GitHub CODEOWNERS contents were not returned");u=Buffer.from(t.content,"base64").toString("utf8");break}catch(e){if(f(e,404))continue;R("GitHub CODEOWNERS could not be loaded",e);break}if(void 0!==u){let e=n(u,"GITHUB"),r=new Set(C?l(e,j):[]),i=new Map,a=e=>{let t=i.get(e.toLowerCase());return t||(t=(async()=>{if(e.startsWith("@")&&e.includes("/")){let[t,r]=e.slice(1).split("/");return K(t,r,!0)}if(e.startsWith("@")){let t=await S(`/users/${encodeURIComponent(e.slice(1))}`),r=D.get(String(t.id));return{principal:`user:${t.id}`,label:`@${t.login}`,people:r?[r]:[]}}let t=N.find(t=>(t.email??t.public_email)?.toLowerCase()===e.toLowerCase());if(!t)throw Error(`Email owner ${e} cannot be resolved with the configured token; use a visible username or team`);return{principal:`user:${t.id}`,label:`@${t.login}`,people:[c(t)]}})(),i.set(e.toLowerCase(),t)),t};await (0,t.f)(e.filter(e=>e.owners.length>0),async e=>{try{let i=await (0,t.f)(e.owners,a),n=h(k,i.map(e=>e.principal)),s=p(i.flatMap(e=>e.people)),o=i.map(e=>e.label).join(" or ");m(P,{key:n,name:o,kind:"CODEOWNERS",candidates:s}),C&&r.has(e)&&G.push({id:`github:codeowners:${e.pattern}`,name:`${F?"Code owners":"Suggested code owners"} \xb7 ${e.pattern}`,poolKeys:[n],eligibleReviewerIds:s.map(e=>e.id),requiredApprovals:1,approvedReviewerIds:q})}catch(t){R(`GitHub owners for ${e.pattern} could not be resolved`,t)}})}return{provider:"GITHUB",repositoryIdentity:k,ref:T,defaultRef:I.default_branch,refs:[...new Set([I.default_branch,T,...U])],pools:[...P.values()],requirements:G,issues:[...new Set(_)],discoveryComplete:A,...C?{request:{id:i.id,number:C.number,url:C.html_url,open:"open"===C.state&&!C.merged,authorId:String(C.user.id),baseRef:C.base.ref,headSha:C.head.sha,currentReviewers:M,approvedReviewers:B}}:{}}}async assign(e,t,r){let{owner:i,name:a}=this.parts(e);await this.service.addPullRequestReviewers({owner:i,name:a,number:t.number,expectedId:t.id,reviewers:r.map(({id:e,username:t})=>({id:e,username:t}))})}}let b=e=>e.split("/").pop();class v{service;constructor(e){this.service=e}async discover(e,r,i,a=!1){let s,o,u=await this.service.projectForCanonicalOrigin(e.canonicalOrigin);if(!u)throw Error("Configure this GitLab project in integration settings before setting up reviewers");if(i?.projectId&&i.projectId!==String(u.id))throw Error("Merge request project does not match reviewer settings");let w=`/projects/${encodeURIComponent(u.id)}`,v=(e,t={})=>this.service.reviewerRest(e,t,a||!!i,!!i),S=(e,t={})=>y(r=>v(e,{...t,per_page:100,page:r})),[E,I]=await Promise.all([this.service.getSettings(),v(w)]),k=`GITLAB:${E.baseUrl.replace(/\/+$/,"").toLowerCase()}:${I.id}`,_=[],A=!0,R=(e,t)=>{A=!1,_.push(`${e}: ${g(t)}`)},C=i?await v(`${w}/merge_requests/${i.number}`):void 0;if(C&&i&&String(C.id)!==b(i.id))throw Error("The merge request changed. Refresh before assigning reviewers.");if(C&&C.target_project_id!==I.id)throw Error("Merge request target project does not match reviewer settings");let T=C?.target_branch??r??I.default_branch,[N,O,D,P]=await Promise.all([S(`${w}/members/all`).catch(e=>(R("GitLab project membership could not be loaded",e),[])),S(`${w}/members`).catch(e=>(R("GitLab direct project membership could not be loaded",e),[])),S(`${w}/repository/branches`).then(e=>e.map(e=>e.name)).catch(()=>[I.default_branch]),S(`${w}/approval_rules`).catch(e=>(i||(A=!1),_.push(`GitLab project approval rules are unavailable (Premium/Ultimate and suitable permissions are required): ${g(e)}`),[]))]),x=N.filter(e=>d(e)&&(e.access_level??0)>=30),U=p(x.map(c)),$=new Map(U.map(e=>[e.id,e])),L=new Map,j=`${k}:general`;for(let e of(L.set(j,{key:j,name:"General reviewers",kind:"GENERAL",candidates:U}),P)){let t="any_approver"===e.rule_type?U:(e.eligible_approvers??[]).filter(d).map(c);m(L,{key:`${k}:rule:${e.id}`,name:e.name,kind:"APPROVAL_RULE",candidates:t})}for(let e of["CODEOWNERS","docs/CODEOWNERS",".gitlab/CODEOWNERS"])try{let t=await v(`${w}/repository/files/${encodeURIComponent(e)}`,{ref:T});if("base64"!==t.encoding||"string"!=typeof t.content)throw Error("GitLab CODEOWNERS contents were not returned");s=Buffer.from(t.content,"base64").toString("utf8");break}catch(e){if(f(e,404))continue;R("GitLab CODEOWNERS could not be loaded",e);break}let M=void 0===s?[]:n(s,"GITLAB"),B=new Map,q=new Map,G=e=>{let t=q.get(e.toLowerCase());return t||(t=(async()=>{if(e.startsWith("@@")){let t=e.slice(2).toLowerCase().replace(/s$/,""),r={developer:30,maintainer:40,owner:50}[t];if(!r)throw Error(`Unsupported GitLab CODEOWNERS role: ${e}`);return{principal:`role:${r}`,label:`@@${t}`,people:O.filter(e=>d(e)&&e.access_level===r).map(c)}}let t=e.startsWith("@")?e.slice(1):null,r=x.find(r=>t?r.username?.toLowerCase()===t.toLowerCase():(r.email??r.public_email)?.toLowerCase()===e.toLowerCase());if(r)return{principal:`user:${r.id}`,label:`@${r.username}`,people:[c(r)]};if(!t)throw Error(`Email owner ${e} is not visible to the configured token; use a visible username or group`);let i=(t.includes("/")?[]:await v("/users",{username:t})).find(e=>e.username?.toLowerCase()===t.toLowerCase());if(i)return{principal:`user:${i.id}`,label:`@${i.username}`,people:$.has(String(i.id))?[c(i)]:[]};let a=await v(`/groups/${encodeURIComponent(t)}`,{with_projects:"false"});if(!(await (o??=(async()=>{let e=new Set((I.shared_with_groups??[]).filter(e=>e.group_access_level>=30).map(e=>e.group_id)),t="group"===I.namespace.kind?I.namespace.id:null,r=new Set;for(;null!==t&&!r.has(t);){r.add(t),e.add(t);let i=await v(`/groups/${t}`,{with_projects:"false"});for(let t of i.shared_with_groups??[])t.group_access_level>=30&&e.add(t.group_id);t=i.parent_id}return e})())).has(a.id))return{principal:`group:${a.id}`,label:`@${a.full_path}`,people:[]};let n=await S(`/groups/${a.id}/members`);return{principal:`group:${a.id}`,label:`@${a.full_path}`,people:n.filter(d).map(c).filter(e=>$.has(e.id))}})(),q.set(e.toLowerCase(),t)),t};for(let e of(await (0,t.f)(M.filter(e=>!e.exclusion&&e.owners.length),async e=>{try{let r=await (0,t.f)(e.owners,G);return{entry:e,resolved:r}}catch(t){return{entry:e,error:t}}}))){if(!e.resolved){R(`GitLab owners for ${e.entry.pattern} could not be resolved`,e.error);continue}let t=h(k,e.resolved.map(e=>e.principal));m(L,{key:t,name:e.resolved.map(e=>e.label).join(" or "),kind:"CODEOWNERS",candidates:e.resolved.flatMap(e=>e.people)}),B.set(`${e.entry.section}\0${e.entry.pattern}`,t)}let H=[],z=[],[F,V]=(E.version??"19.2").split(".").map(Number),K=F>19||19===F&&V>=4,W=async e=>{let t=await this.service.reviewerGraphql(`query CodeReviewerApprovalRules($path: ID!, $iid: String!) {
878
+ }`,{owner:w,name:b,ref:`refs/heads/${T}`},!!i,a).then(e=>e.repository?.ref?.branchProtectionRule??null).catch(e=>(R("GitHub branch protection could not be loaded",e),null))]),j=[],M=[],B=[];if(C){let[e,t,r]=await Promise.all([E(`${v}/pulls/${C.number}/files`).catch(e=>(R("GitHub changed files could not be loaded",e),[])),S(`${v}/pulls/${C.number}/requested_reviewers`).catch(e=>(R("GitHub requested reviewers could not be loaded",e),{users:[]})),E(`${v}/pulls/${C.number}/reviews`).catch(e=>(R("GitHub current approvals could not be loaded",e),[]))]);j=[...new Set(e.flatMap(e=>[e.filename,...e.previous_filename?[e.previous_filename]:[]]))],e.length<C.changed_files&&R("GitHub changed files are incomplete",Error("The pull request exceeds the provider file-list limit")),M=p((t.users??[]).map(c));let i=new Map;for(let e of[...r].sort((e,t)=>e.id-t.id))["APPROVED","CHANGES_REQUESTED","DISMISSED"].includes(e.state)&&i.set(String(e.user.id),e);B=p([...i.values()].filter(e=>"APPROVED"===e.state).map(e=>c(e.user)))}let q=B.map(e=>e.id),G=[],H=$.filter(e=>"pull_request"===e.type),z=Math.max(L?.requiresApprovingReviews?L.requiredApprovingReviewCount:0,0,...H.map(e=>e.parameters?.required_approving_review_count??0)),F=!!(L?.requiresCodeOwnerReviews||H.some(e=>e.parameters?.require_code_owner_review));C&&(L?.requireLastPushApproval||H.some(e=>e.parameters?.require_last_push_approval))&&R("Latest-push approval cannot be fully verified",Error("GitHub requires approval after the latest push from someone other than its pusher. Check this requirement in GitHub before merging.")),C&&z>0&&G.push({id:"github:required-approvals",name:"Required approvals",isRequired:!0,patterns:[],poolKeys:[x],eligibleReviewerIds:O.map(e=>e.id),requiredApprovals:z,approvedReviewerIds:q});let V=new Map,K=(e,t,r)=>{let i=`${e.toLowerCase()}/${t.toLowerCase()}/${r}`,a=V.get(i);return a||(a=(async()=>{let i=`/orgs/${encodeURIComponent(e)}/teams/${encodeURIComponent(t)}`,a=await S(i);if(r){let r=await S(`${i}/repos/${encodeURIComponent(w)}/${encodeURIComponent(b)}`);if(!r.permissions?.push&&!["push","write","maintain","admin"].includes(r.permission??""))return{principal:`team:${a.id}`,label:`@${e}/${t}`,people:[]}}let n=await E(`${i}/members`);return{principal:`team:${a.id}`,label:`@${e}/${t}`,people:n.filter(d).map(c).filter(e=>D.has(e.id))}})(),V.set(i,a)),a};for(let e of H)for(let t of e.parameters?.required_reviewers??[])try{if("Team"!==t.reviewer.type)throw Error("Unsupported required-reviewer type");s??=E(`/orgs/${encodeURIComponent(w)}/teams`);let r=(await s).find(e=>e.id===t.reviewer.id);if(!r)throw Error(`Team ${t.reviewer.id} is not visible to the configured token`);let i=await K(w,r.slug,!1),a=`${k}:ruleset:${e.ruleset_source_type}:${e.ruleset_id}:team:${r.id}`;m(P,{key:a,name:`Rule ${e.ruleset_id} \xb7 ${r.name}`,kind:"APPROVAL_RULE",candidates:i.people}),C&&function(e,t){return t.some(t=>{let r=!1;for(let i of e)o(i.replace(/^!/,""),t,{characterClasses:!0})&&(r=!i.startsWith("!"));return r})}(t.file_patterns,j)&&G.push({id:`${a}:${G.length}`,name:`${r.name}${t.minimum_approvals?" approval rule":" (optional review)"}`,isRequired:t.minimum_approvals>0,patterns:t.file_patterns,poolKeys:[a],eligibleReviewerIds:i.people.map(e=>e.id),requiredApprovals:t.minimum_approvals,approvedReviewerIds:q})}catch(e){R("GitHub required-reviewer team could not be loaded",e)}for(let e of[".github/CODEOWNERS","CODEOWNERS","docs/CODEOWNERS"])try{let t=await S(`${v}/contents/${e}?ref=${encodeURIComponent(T)}`);if(t.size>=3145728)throw Error("GitHub ignores CODEOWNERS files of 3 MB or larger");if("base64"!==t.encoding||"string"!=typeof t.content)throw Error("GitHub CODEOWNERS contents were not returned");u=Buffer.from(t.content,"base64").toString("utf8");break}catch(e){if(f(e,404))continue;R("GitHub CODEOWNERS could not be loaded",e);break}if(void 0!==u){let e=n(u,"GITHUB"),r=new Set(C?l(e,j):[]),i=new Map,a=e=>{let t=i.get(e.toLowerCase());return t||(t=(async()=>{if(e.startsWith("@")&&e.includes("/")){let[t,r]=e.slice(1).split("/");return K(t,r,!0)}if(e.startsWith("@")){let t=await S(`/users/${encodeURIComponent(e.slice(1))}`),r=D.get(String(t.id));return{principal:`user:${t.id}`,label:`@${t.login}`,people:r?[r]:[]}}let t=N.find(t=>(t.email??t.public_email)?.toLowerCase()===e.toLowerCase());if(!t)throw Error(`Email owner ${e} cannot be resolved with the configured token; use a visible username or team`);return{principal:`user:${t.id}`,label:`@${t.login}`,people:[c(t)]}})(),i.set(e.toLowerCase(),t)),t};await (0,t.f)(e.filter(e=>e.owners.length>0),async e=>{try{let i=await (0,t.f)(e.owners,a),n=h(k,i.map(e=>e.principal)),s=p(i.flatMap(e=>e.people)),o=i.map(e=>e.label).join(" or ");m(P,{key:n,name:o,kind:"CODEOWNERS",candidates:s}),C&&r.has(e)&&G.push({id:`github:codeowners:${e.pattern}`,name:`${F?"Code owners":"Suggested code owners"} \xb7 ${e.pattern}`,isRequired:F,patterns:[e.pattern],poolKeys:[n],eligibleReviewerIds:s.map(e=>e.id),requiredApprovals:1,approvedReviewerIds:q})}catch(t){R(`GitHub owners for ${e.pattern} could not be resolved`,t)}})}return{provider:"GITHUB",repositoryIdentity:k,ref:T,defaultRef:I.default_branch,refs:[...new Set([I.default_branch,T,...U])],pools:[...P.values()],requirements:G,issues:[...new Set(_)],discoveryComplete:A,...C?{request:{id:i.id,number:C.number,url:C.html_url,open:"open"===C.state&&!C.merged,authorId:String(C.user.id),baseRef:C.base.ref,headSha:C.head.sha,currentReviewers:M,approvedReviewers:B}}:{}}}async assign(e,t,r){let{owner:i,name:a}=this.parts(e);await this.service.addPullRequestReviewers({owner:i,name:a,number:t.number,expectedId:t.id,reviewers:r.map(({id:e,username:t})=>({id:e,username:t}))})}}let b=e=>e.split("/").pop();class v{service;constructor(e){this.service=e}async discover(e,r,i,a=!1){let s,o,u=await this.service.projectForCanonicalOrigin(e.canonicalOrigin);if(!u)throw Error("Configure this GitLab project in integration settings before setting up reviewers");if(i?.projectId&&i.projectId!==String(u.id))throw Error("Merge request project does not match reviewer settings");let w=`/projects/${encodeURIComponent(u.id)}`,v=(e,t={})=>this.service.reviewerRest(e,t,a||!!i,!!i),S=(e,t={})=>y(r=>v(e,{...t,per_page:100,page:r})),[E,I]=await Promise.all([this.service.getSettings(),v(w)]),k=`GITLAB:${E.baseUrl.replace(/\/+$/,"").toLowerCase()}:${I.id}`,_=[],A=!0,R=(e,t)=>{A=!1,_.push(`${e}: ${g(t)}`)},C=i?await v(`${w}/merge_requests/${i.number}`):void 0;if(C&&i&&String(C.id)!==b(i.id))throw Error("The merge request changed. Refresh before assigning reviewers.");if(C&&C.target_project_id!==I.id)throw Error("Merge request target project does not match reviewer settings");let T=C?.target_branch??r??I.default_branch,[N,O,D,P]=await Promise.all([S(`${w}/members/all`).catch(e=>(R("GitLab project membership could not be loaded",e),[])),S(`${w}/members`).catch(e=>(R("GitLab direct project membership could not be loaded",e),[])),S(`${w}/repository/branches`).then(e=>e.map(e=>e.name)).catch(()=>[I.default_branch]),S(`${w}/approval_rules`).catch(e=>(i||(A=!1),_.push(`GitLab project approval rules are unavailable (Premium/Ultimate and suitable permissions are required): ${g(e)}`),[]))]),x=N.filter(e=>d(e)&&(e.access_level??0)>=30),U=p(x.map(c)),$=new Map(U.map(e=>[e.id,e])),L=new Map,j=`${k}:general`;for(let e of(L.set(j,{key:j,name:"General reviewers",kind:"GENERAL",candidates:U}),P)){let t="any_approver"===e.rule_type?U:(e.eligible_approvers??[]).filter(d).map(c);m(L,{key:`${k}:rule:${e.id}`,name:e.name,kind:"APPROVAL_RULE",candidates:t})}for(let e of["CODEOWNERS","docs/CODEOWNERS",".gitlab/CODEOWNERS"])try{let t=await v(`${w}/repository/files/${encodeURIComponent(e)}`,{ref:T});if("base64"!==t.encoding||"string"!=typeof t.content)throw Error("GitLab CODEOWNERS contents were not returned");s=Buffer.from(t.content,"base64").toString("utf8");break}catch(e){if(f(e,404))continue;R("GitLab CODEOWNERS could not be loaded",e);break}let M=void 0===s?[]:n(s,"GITLAB"),B=new Map,q=new Map,G=e=>{let t=q.get(e.toLowerCase());return t||(t=(async()=>{if(e.startsWith("@@")){let t=e.slice(2).toLowerCase().replace(/s$/,""),r={developer:30,maintainer:40,owner:50}[t];if(!r)throw Error(`Unsupported GitLab CODEOWNERS role: ${e}`);return{principal:`role:${r}`,label:`@@${t}`,people:O.filter(e=>d(e)&&e.access_level===r).map(c)}}let t=e.startsWith("@")?e.slice(1):null,r=x.find(r=>t?r.username?.toLowerCase()===t.toLowerCase():(r.email??r.public_email)?.toLowerCase()===e.toLowerCase());if(r)return{principal:`user:${r.id}`,label:`@${r.username}`,people:[c(r)]};if(!t)throw Error(`Email owner ${e} is not visible to the configured token; use a visible username or group`);let i=(t.includes("/")?[]:await v("/users",{username:t})).find(e=>e.username?.toLowerCase()===t.toLowerCase());if(i)return{principal:`user:${i.id}`,label:`@${i.username}`,people:$.has(String(i.id))?[c(i)]:[]};let a=await v(`/groups/${encodeURIComponent(t)}`,{with_projects:"false"});if(!(await (o??=(async()=>{let e=new Set((I.shared_with_groups??[]).filter(e=>e.group_access_level>=30).map(e=>e.group_id)),t="group"===I.namespace.kind?I.namespace.id:null,r=new Set;for(;null!==t&&!r.has(t);){r.add(t),e.add(t);let i=await v(`/groups/${t}`,{with_projects:"false"});for(let t of i.shared_with_groups??[])t.group_access_level>=30&&e.add(t.group_id);t=i.parent_id}return e})())).has(a.id))return{principal:`group:${a.id}`,label:`@${a.full_path}`,people:[]};let n=await S(`/groups/${a.id}/members`);return{principal:`group:${a.id}`,label:`@${a.full_path}`,people:n.filter(d).map(c).filter(e=>$.has(e.id))}})(),q.set(e.toLowerCase(),t)),t};for(let e of(await (0,t.f)(M.filter(e=>!e.exclusion&&e.owners.length),async e=>{try{let r=await (0,t.f)(e.owners,G);return{entry:e,resolved:r}}catch(t){return{entry:e,error:t}}}))){if(!e.resolved){R(`GitLab owners for ${e.entry.pattern} could not be resolved`,e.error);continue}let t=h(k,e.resolved.map(e=>e.principal));m(L,{key:t,name:e.resolved.map(e=>e.label).join(" or "),kind:"CODEOWNERS",candidates:e.resolved.flatMap(e=>e.people)}),B.set(`${e.entry.section}\0${e.entry.pattern}`,t)}let H=[],z=[],[F,V]=(E.version??"19.2").split(".").map(Number),K=F>19||19===F&&V>=4,W=async e=>{let t=await this.service.reviewerGraphql(`query CodeReviewerApprovalRules($path: ID!, $iid: String!) {
879
879
  project(fullPath: $path) { mergeRequest(iid: $iid) { approvalState { rules {
880
880
  id name type section ${K?"patterns":""} approvalsRequired approved
881
881
  sourceRule { id }
882
882
  eligibleApprovers { id username name avatarUrl webUrl bot state }
883
883
  approvedBy(first: 100) { nodes { id username name avatarUrl webUrl } pageInfo { hasNextPage } }
884
884
  } } } }
885
- }`,{path:I.path_with_namespace,iid:String(e)}),r=t.project?.mergeRequest?.approvalState.rules;if(!r)throw Error("GitLab did not return the merge request approval rules");return r},J=(e,t)=>{let r=e.sourceRule?.id??e.id;return e.sourceRule||r.includes("ApprovalProjectRule/")?`${k}:rule:${b(r)}`:`${k}:mr:${t}:rule:${b(e.id)}`};if(C){let e=new Set;try{for(let t of(await W(C.iid))){let r,i=t.type.toLowerCase(),a="any_approver"===i?U:(t.eligibleApprovers??[]).filter(d).map(c),n=(t.approvedBy?.nodes??[]).map(c);z.push(...n),t.approvedBy?.pageInfo?.hasNextPage&&R(`Approvals for ${t.name} are incomplete`,Error("GitLab returned more than 100 approving users"));let s=t.approvalsRequired,o=t.name;if("code_owner"===i){let i=t.patterns?.length?t.patterns:[t.name];r=[...new Set(i.flatMap(r=>{let i=`${(t.section??"codeowners").toLowerCase()}\0${r}`;e.add(i);let a=B.get(i);return a?[a]:[]}))],0===r.length&&R(`Code owner rule ${t.name} cannot be mapped`,Error("Refresh the target branch CODEOWNERS configuration")),0===s&&(s=1,o=`Suggested code owners \xb7 ${t.name}`)}else{let e=J(t,C.id);m(L,{key:e,name:t.name,kind:"APPROVAL_RULE",candidates:a}),r=[e]}H.push({id:t.id,name:o,poolKeys:r,eligibleReviewerIds:a.map(e=>e.id),requiredApprovals:s,approvedReviewerIds:n.map(e=>e.id)})}}catch(e){R("GitLab merge request approval rules could not be loaded",e)}try{let e=await v(`${w}/merge_requests/${C.iid}/approvals`);z.push(...(e.approved_by??[]).map(e=>c(e.user)))}catch(e){R("GitLab current approvals could not be loaded",e)}if(M.length)try{let t=await S(`${w}/merge_requests/${C.iid}/diffs`);C.changes_count&&/^\d+$/.test(C.changes_count)&&Number(C.changes_count)>t.length&&R("GitLab changed files are incomplete",Error("The merge request exceeds the provider diff-list limit"));let r=[...new Set(t.flatMap(e=>[e.new_path,e.old_path]).filter(Boolean))];for(let t of l(M,r)){let r=`${t.section}\0${t.pattern}`;if(e.has(r))continue;let i=B.get(r),a=i?L.get(i):null;i&&a?.candidates.length&&H.push({id:`gitlab:suggested:${r}`,name:`Suggested code owners \xb7 ${t.pattern}`,poolKeys:[i],eligibleReviewerIds:a.candidates.map(e=>e.id),requiredApprovals:1,approvedReviewerIds:z.map(e=>e.id)})}}catch(e){R("GitLab changed files for ownership suggestions could not be loaded",e)}}else try{let e=await S(`${w}/merge_requests`,{state:"opened",scope:"all"});await (0,t.f)(e,async e=>{try{for(let t of(await W(e.iid))){if("code_owner"===t.type.toLowerCase())continue;let r=J(t,e.id);if(!r.includes(`:mr:${e.id}:`))continue;let i="any_approver"===t.type.toLowerCase()?U:(t.eligibleApprovers??[]).filter(d).map(c);m(L,{key:r,name:`!${e.iid} \xb7 ${t.name}`,kind:"APPROVAL_RULE",candidates:i})}}catch(t){R(`GitLab approval groups for !${e.iid} could not be loaded`,t)}})}catch(e){R("GitLab open merge request approval groups could not be loaded",e)}return{provider:"GITLAB",repositoryIdentity:k,ref:T,defaultRef:I.default_branch,refs:[...new Set([I.default_branch,T,...D])],pools:[...L.values()],requirements:H,issues:[...new Set(_)],discoveryComplete:A,...C?{request:{id:i.id,number:C.iid,url:C.web_url,open:"opened"===C.state,authorId:String(C.author.id),baseRef:C.target_branch,headSha:C.sha,currentReviewers:p((C.reviewers??[]).map(c)),approvedReviewers:p(z)}}:{}}}async assign(e,t,r){let i=await this.service.projectForCanonicalOrigin(e.canonicalOrigin);if(!i||t.projectId&&t.projectId!==i.id)throw Error("Merge request project does not match reviewer settings");await this.service.addMergeRequestReviewers({projectId:i.id,iid:t.number,expectedId:b(t.id),reviewerIds:r.map(e=>e.id)})}}e.s(["f",0,class{github;gitlab;constructor(e,t){this.github=new w(e),this.gitlab=new v(t)}discover(e,t,r,i=!1){return/^github\.com\//i.test(e.canonicalOrigin)?this.github.discover(e,t,r,i):this.gitlab.discover(e,t,r,i)}assign(e,t,r){return/^github\.com\//i.test(e.canonicalOrigin)?this.github.assign(e,t,r):this.gitlab.assign(e,t,r)}}],65899)},806098,e=>{var t=e.i(666680),r=e.i(243783),i=e.i(971724),a=e.i(105954),n=e.i(455744),s=e.i(604147);e.i(805422);var o=e.i(661983);let l=e=>[...new Set(e)],u=i.z.object({id:a.z.string().min(1).max(500),username:a.z.string().max(500),name:a.z.string().max(500),avatarUrl:a.z.string().max(4e3).nullable(),url:a.z.string().max(4e3).nullable()}).strict(),c=n.z.array(i.z.object({key:a.z.string().min(1).max(2e3),name:a.z.string().max(2e3),kind:s.z.enum(["GENERAL","CODEOWNERS","APPROVAL_RULE"]),provider:s.z.enum(["GITHUB","GITLAB"]),repositoryIdentity:a.z.string().min(1).max(2e3),ref:a.z.string().max(1e3),reviewers:n.z.array(u).max(1e3)}).strict()).max(500),d=e=>({id:e.userId,username:e.username,name:e.name,avatarUrl:e.avatarUrl,url:e.url});e.s(["w",0,class{providers;refreshWorktree;assignments;constructor(e,t){this.providers=e,this.refreshWorktree=t,this.assignments=new Map}async repository(e){let t=await (0,r.U)(),i=await t.codebaseRepository.findUnique({where:{id:e}});if(!i)throw Error("Repository not found");return i}async saved(e){return(await (0,r.U)()).repositoryReviewerPool.findMany({where:{repositoryId:e},include:{members:!0},orderBy:{key:"asc"}})}async repositoryCodeReviewers(e,t,r=!1){let i=await this.repository(e),[a,n]=await Promise.all([this.providers.discover(i,t??void 0,void 0,r),this.saved(e)]),s=new Map(n.map(e=>[e.key,e])),o=a.pools.map(e=>{let t=s.get(e.key);s.delete(e.key);let r=new Set(e.candidates.map(e=>e.id)),i=t?.members.map(e=>e.userId)??[];return{...e,selectedReviewerIds:i,unavailableReviewerIds:i.filter(e=>t?.repositoryIdentity!==a.repositoryIdentity||!r.has(e))}});for(let e of s.values())o.push({key:e.key,name:e.name,kind:e.kind,candidates:[],selectedReviewerIds:e.members.map(e=>e.userId),unavailableReviewerIds:e.members.map(e=>e.userId)});return{repositoryId:e,...a,pools:o}}async saveRepositoryCodeReviewers(e){if(e.pools.length>500)throw Error("At most 500 reviewer pools can be saved at once");let t=await this.repository(e.repositoryId),[i,a]=await Promise.all([this.providers.discover(t,e.ref??void 0,void 0,!0),this.saved(t.id)]),n=this.validatePools(e.pools,i,a),s=await (0,r.U)();return await s.$transaction(async e=>{await this.writePools(e,t.id,i,n),await this.updateConfiguredFlag(e,t.id)}),this.publish(t.id),this.repositoryCodeReviewers(t.id,e.ref)}validatePools(e,t,r=[]){let i=new Map(t.pools.map(e=>[e.key,e])),a=new Map(r.map(e=>[e.key,e])),n=new Set;return e.map(e=>{if(!e.key||e.key.length>2e3||n.has(e.key))throw Error("Reviewer pool keys must be unique");if(n.add(e.key),e.reviewerIds.length>1e3)throw Error("At most 1,000 reviewers can be selected per pool");let r=i.get(e.key),s=a.get(e.key);if(!r&&!s&&e.reviewerIds.length)throw Error("Reviewer group is no longer available; refresh repository settings");let o=new Map(r?.candidates.map(e=>[e.id,e])??[]);if(s?.repositoryIdentity===t.repositoryIdentity)for(let e of s.members)o.has(e.userId)||o.set(e.userId,d(e));let u=l(e.reviewerIds).map(e=>{let t=o.get(e);if(!t)throw Error("A selected reviewer is no longer eligible; refresh repository settings");return t});return{key:e.key,name:r?.name??s?.name??e.key,kind:r?.kind??s?.kind??"GENERAL",discoveryRef:r?t.ref:s?.discoveryRef??t.ref,members:u}})}async writePools(e,r,i,a){for(let n of a){if(!n.members.length){await e.repositoryReviewerPool.deleteMany({where:{repositoryId:r,key:n.key}});continue}let a=await e.repositoryReviewerPool.upsert({where:{repositoryId_key:{repositoryId:r,key:n.key}},create:{id:(0,t.randomUUID)(),repositoryId:r,key:n.key,name:n.name,kind:n.kind,provider:i.provider,repositoryIdentity:i.repositoryIdentity,discoveryRef:n.discoveryRef},update:{name:n.name,kind:n.kind,provider:i.provider,repositoryIdentity:i.repositoryIdentity,discoveryRef:n.discoveryRef}});await e.repositoryReviewerMember.deleteMany({where:{poolId:a.id}}),await e.repositoryReviewerMember.createMany({data:n.members.map(({id:e,...t})=>({poolId:a.id,userId:e,...t}))})}}async updateConfiguredFlag(e,t){let r=await e.repositoryReviewerMember.count({where:{pool:{repositoryId:t}}});await e.codebaseRepository.update({where:{id:t},data:{hasConfiguredCodeReviewers:r>0,updatedAt:new Date}})}async exportPools(e){return(await this.saved(e)).map(e=>({key:e.key,name:e.name,kind:e.kind,provider:e.provider,repositoryIdentity:e.repositoryIdentity,ref:e.discoveryRef,reviewers:e.members.map(d)}))}async validateTransferredPools(e,t){let r=c.parse(t),i=new Map,a=[];for(let t of r){let r=i.get(t.ref);r||(r=await this.providers.discover(e,t.ref||void 0,void 0,!0),i.set(t.ref,r));let n=e=>e.slice(0,e.lastIndexOf(":"));if(t.provider!==r.provider||n(t.repositoryIdentity)!==n(r.repositoryIdentity)||!t.key.startsWith(`${t.repositoryIdentity}:`))throw Error("Reviewer pools belong to a different provider instance. Deselect Code reviewers in this import and configure reviewers in the destination repository.");let s=`${r.repositoryIdentity}${t.key.slice(t.repositoryIdentity.length)}`,o=r.pools.find(e=>e.key===s),l=new Map(o?.candidates.map(e=>[e.id,e])??[]);if(!o||t.reviewers.some(e=>!l.has(e.id)))throw Error(`Reviewer group ${t.name} or one of its people cannot be resolved at the destination. Deselect Code reviewers in this import and configure reviewers in the destination repository.`);a.push({key:s,name:o.name,kind:o.kind,provider:r.provider,repositoryIdentity:r.repositoryIdentity,ref:r.ref,reviewers:t.reviewers.map(e=>l.get(e.id))})}if(new Set(a.map(e=>e.key)).size!==a.length)throw Error("Imported reviewer pools contain duplicate groups");return a}async applyTransferredPools(e,t,r){for(let i of(await e.repositoryReviewerPool.deleteMany({where:{repositoryId:t}}),r))await this.writePools(e,t,{provider:i.provider,repositoryIdentity:i.repositoryIdentity},[{...i,discoveryRef:i.ref,members:i.reviewers}]);await this.updateConfiguredFlag(e,t)}async context(e){let t=await (0,r.U)(),i=await t.worktree.findUnique({where:{id:e},include:{codebase:{include:{repository:!0}},pullRequest:!0,gitLabMergeRequest:!0}});if(!i)throw Error("Worktree not found");let a=i.codebase.repository;if(!a.hasConfiguredCodeReviewers)throw Error("Configure code reviewers in repository settings first");let n=i.gitLabMergeRequest,s=i.pullRequest,o=n?.sourceBranch??s?.headRefName;if(!i.branch||o!==i.branch||i.pullRequestLookupBranch!==i.branch||i.pullRequestLookupOrigin?.toLowerCase()!==a.canonicalOrigin.toLowerCase())throw Error("The worktree branch or repository has changed; refresh the linked pull or merge request before assigning reviewers");let l=n?{id:n.gitlabId,number:n.iid,projectId:n.projectId}:s?{id:s.githubId,number:s.number}:null;if(!l)throw Error("Worktree does not have an open pull or merge request");return{worktree:i,repository:a,locator:l}}async live(e){let t=await this.context(e),r=await this.providers.discover(t.repository,void 0,t.locator,!0),i=await this.context(e);if(i.locator.id!==t.locator.id||i.repository.id!==t.repository.id||i.worktree.branch!==t.worktree.branch)throw Error("The linked pull or merge request has changed; reload reviewer options before assigning");let a=function(e,t,r){let i=t.request;if(!i)throw Error("Pull or merge request was not found");let a=l(i.currentReviewers.map(e=>e.id)),n=l(i.approvedReviewers.map(e=>e.id)),s=new Set(a),o=new Set(n),u=new Map(t.pools.map(e=>[e.key,new Set(e.candidates.map(e=>e.id))])),c=new Map(r.filter(e=>e.repositoryIdentity===t.repositoryIdentity).map(e=>[e.key,new Set(e.members.map(e=>e.userId).filter(t=>u.get(e.key)?.has(t)))])),d=new Map([...t.pools.flatMap(e=>e.candidates),...i.currentReviewers,...i.approvedReviewers].map(e=>[e.id,e])),p=t.requirements;if(!p.length){let e=t.pools.find(e=>"GENERAL"===e.kind);e&&(p=[{id:"general-reviewers",name:"General reviewers",poolKeys:[e.key],eligibleReviewerIds:e.candidates.map(e=>e.id),approvedReviewerIds:n,requiredApprovals:1}])}let h=p.map(e=>{let t=new Set(e.eligibleReviewerIds.filter(e=>e!==i.authorId)),r=new Set(e.poolKeys.flatMap(e=>[...c.get(e)??[]]));return{...e,eligibleReviewerIds:[...t],candidateReviewerIds:[...r].filter(e=>t.has(e)&&d.has(e)&&!s.has(e)&&!o.has(e)),approvedReviewerIds:l(e.approvedReviewerIds.filter(e=>t.has(e))),requestedReviewerIds:a.filter(e=>t.has(e))}}),m=new Set([...a,...n,...h.flatMap(e=>[...e.candidateReviewerIds,...e.approvedReviewerIds,...e.requestedReviewerIds])]);return{worktreeId:e,requestId:i.id,requestUrl:i.url,provider:t.provider,requestOpen:i.open,authorId:i.authorId,reviewers:[...d.values()].filter(e=>m.has(e.id)),requirements:h,currentReviewerIds:a,approvedReviewerIds:n,selectedReviewerIds:[],issues:[...t.issues,...t.discoveryComplete||t.requirements.length?[]:["General reviewer selection is available, but provider approval requirements could not be verified."]],discoveryComplete:t.discoveryComplete}}(e,r,await this.saved(i.repository.id));if(!a.requestOpen)throw Error("Pull or merge request is no longer open; refresh this worktree");return{...i,discovery:r,assignment:a}}async worktreeReviewerAssignment(e){return(await this.live(e)).assignment}async previewRandomWorktreeReviewers(e,t,r){let{assignment:i}=await this.live(e);return this.requireRequest(i,t),function(e,t=[],r=Math.random){let i=l(e.requirements.flatMap(e=>e.candidateReviewerIds)),a=new Set(i),n=new Set(t.filter(e=>a.has(e))),s=e=>new Set([...e.approvedReviewerIds,...e.requestedReviewerIds,...[...n].filter(t=>e.eligibleReviewerIds.includes(t))]).size;for(let e=i.length-1;e>0;e--){let t=Math.floor(r()*(e+1));[i[e],i[t]]=[i[t],i[e]]}for(let t of i)e.requirements.some(e=>s(e)<e.requiredApprovals&&e.candidateReviewerIds.includes(t))&&n.add(t);let o=e.requirements.flatMap(e=>{let t=Math.max(0,e.requiredApprovals-s(e));return t?[`${e.name}: ${t} more eligible reviewer${1===t?"":"s"} needed. Configure additional reviewers in repository settings.`]:[]});return{...e,selectedReviewerIds:[...n],issues:[...e.issues,...o]}}(i,r??[])}requireRequest(e,t){if(e.requestId!==t)throw Error("The pull or merge request has changed; reload reviewer options before assigning")}async assignWorktreeReviewers(e){let t=(this.assignments.get(e.worktreeId)??Promise.resolve()).catch(()=>void 0).then(async()=>{let{repository:t,locator:r,assignment:i}=await this.live(e.worktreeId);this.requireRequest(i,e.requestId);let a=l(e.reviewerIds);if(!a.length||a.length>1e3)throw Error("Select between 1 and 1,000 reviewers");let n=new Set(i.requirements.flatMap(e=>e.candidateReviewerIds)),s=new Set(i.currentReviewerIds);if(a.some(e=>!n.has(e)&&!s.has(e)))throw Error("A selected reviewer is no longer eligible; reload reviewer options before assigning");let o=a.filter(e=>!s.has(e));o.length&&await this.providers.assign(t,r,i.reviewers.filter(e=>o.includes(e.id))),await this.refreshWorktree?.(e.worktreeId).catch(()=>void 0),this.publish(t.id,e.worktreeId);try{return await this.worktreeReviewerAssignment(e.worktreeId)}catch{let e=l([...i.currentReviewerIds,...o]);return{...i,currentReviewerIds:e,requirements:i.requirements.map(t=>({...t,candidateReviewerIds:t.candidateReviewerIds.filter(e=>!o.includes(e)),requestedReviewerIds:e.filter(e=>t.eligibleReviewerIds.includes(e))})),issues:[...i.issues,"Review requests were sent. Reload reviewer options to refresh provider status."]}}});this.assignments.set(e.worktreeId,t);try{return await t}finally{this.assignments.get(e.worktreeId)===t&&this.assignments.delete(e.worktreeId)}}publish(e,t=null){o._H.publish(o.aA,{codebaseOverviewChanged:{repositoryId:e,codebaseId:null}}),o._H.publish(o.MA,{worktreeOverviewChanged:{worktreeId:t,codebaseId:null}})}},"k",0,c])},180201,e=>{var t=e.i(53803),r=e.i(264977);function i(e){return e&&"object"==typeof e&&"message"in e&&"string"==typeof e.message?e.message:String(e)}function a(e,t,r,a){e.newFunction(r,r=>{let n=r?JSON.parse(e.getString(r)):null,s=e.newPromise();return t.add(s),Promise.resolve().then(()=>a(n)).then(e=>({ok:!0,value:e}),e=>({ok:!1,error:i(e)})).then(r=>{s.alive&&e.alive&&(e.newString(JSON.stringify(r)).consume(e=>s.resolve(e)),t.delete(s),s.dispose(),e.runtime.executePendingJobs().dispose())}).catch(()=>{}),s.handle}).consume(t=>e.setProp(e.global,r,t))}async function n(e){if(!e.body)return"";let t=e.body.getReader(),r=[],i=0;for(;;){let{done:e,value:a}=await t.read();if(e)break;if((i+=a.byteLength)>0xa00000)throw await t.cancel(),Error("Script fetch response exceeded 10 MiB");r.push(a)}let a=new Uint8Array(i),n=0;for(let e of r)a.set(e,n),n+=e.byteLength;return new TextDecoder().decode(a)}let s=String.raw`
885
+ }`,{path:I.path_with_namespace,iid:String(e)}),r=t.project?.mergeRequest?.approvalState.rules;if(!r)throw Error("GitLab did not return the merge request approval rules");return r},J=(e,t)=>{let r=e.sourceRule?.id??e.id;return e.sourceRule||r.includes("ApprovalProjectRule/")?`${k}:rule:${b(r)}`:`${k}:mr:${t}:rule:${b(e.id)}`};if(C){let e=new Set;try{for(let t of(await W(C.iid))){let r,i=t.type.toLowerCase(),a="any_approver"===i?U:(t.eligibleApprovers??[]).filter(d).map(c),n=(t.approvedBy?.nodes??[]).map(c);z.push(...n),t.approvedBy?.pageInfo?.hasNextPage&&R(`Approvals for ${t.name} are incomplete`,Error("GitLab returned more than 100 approving users"));let s=t.approvalsRequired,o=t.name,l="code_owner"===i?t.patterns?.length?t.patterns:[t.name]:[];if("code_owner"===i)r=[...new Set(l.flatMap(r=>{let i=`${(t.section??"codeowners").toLowerCase()}\0${r}`;e.add(i);let a=B.get(i);return a?[a]:[]}))],0===r.length&&R(`Code owner rule ${t.name} cannot be mapped`,Error("Refresh the target branch CODEOWNERS configuration")),0===s&&(s=1,o=`Suggested code owners \xb7 ${t.name}`);else{let e=J(t,C.id);m(L,{key:e,name:t.name,kind:"APPROVAL_RULE",candidates:a}),r=[e]}H.push({id:t.id,name:o,isRequired:t.approvalsRequired>0,patterns:l,poolKeys:r,eligibleReviewerIds:a.map(e=>e.id),requiredApprovals:s,approvedReviewerIds:n.map(e=>e.id)})}}catch(e){R("GitLab merge request approval rules could not be loaded",e)}try{let e=await v(`${w}/merge_requests/${C.iid}/approvals`);z.push(...(e.approved_by??[]).map(e=>c(e.user)))}catch(e){R("GitLab current approvals could not be loaded",e)}if(M.length)try{let t=await S(`${w}/merge_requests/${C.iid}/diffs`);C.changes_count&&/^\d+$/.test(C.changes_count)&&Number(C.changes_count)>t.length&&R("GitLab changed files are incomplete",Error("The merge request exceeds the provider diff-list limit"));let r=[...new Set(t.flatMap(e=>[e.new_path,e.old_path]).filter(Boolean))];for(let t of l(M,r)){let r=`${t.section}\0${t.pattern}`;if(e.has(r))continue;let i=B.get(r),a=i?L.get(i):null;i&&a?.candidates.length&&H.push({id:`gitlab:suggested:${r}`,name:`Suggested code owners \xb7 ${t.pattern}`,isRequired:!1,patterns:[t.pattern],poolKeys:[i],eligibleReviewerIds:a.candidates.map(e=>e.id),requiredApprovals:1,approvedReviewerIds:z.map(e=>e.id)})}}catch(e){R("GitLab changed files for ownership suggestions could not be loaded",e)}}else try{let e=await S(`${w}/merge_requests`,{state:"opened",scope:"all"});await (0,t.f)(e,async e=>{try{for(let t of(await W(e.iid))){if("code_owner"===t.type.toLowerCase())continue;let r=J(t,e.id);if(!r.includes(`:mr:${e.id}:`))continue;let i="any_approver"===t.type.toLowerCase()?U:(t.eligibleApprovers??[]).filter(d).map(c);m(L,{key:r,name:`!${e.iid} \xb7 ${t.name}`,kind:"APPROVAL_RULE",candidates:i})}}catch(t){R(`GitLab approval groups for !${e.iid} could not be loaded`,t)}})}catch(e){R("GitLab open merge request approval groups could not be loaded",e)}return{provider:"GITLAB",repositoryIdentity:k,ref:T,defaultRef:I.default_branch,refs:[...new Set([I.default_branch,T,...D])],pools:[...L.values()],requirements:H,issues:[...new Set(_)],discoveryComplete:A,...C?{request:{id:i.id,number:C.iid,url:C.web_url,open:"opened"===C.state,authorId:String(C.author.id),baseRef:C.target_branch,headSha:C.sha,currentReviewers:p((C.reviewers??[]).map(c)),approvedReviewers:p(z)}}:{}}}async assign(e,t,r){let i=await this.service.projectForCanonicalOrigin(e.canonicalOrigin);if(!i||t.projectId&&t.projectId!==i.id)throw Error("Merge request project does not match reviewer settings");await this.service.addMergeRequestReviewers({projectId:i.id,iid:t.number,expectedId:b(t.id),reviewerIds:r.map(e=>e.id)})}}e.s(["f",0,class{github;gitlab;constructor(e,t){this.github=new w(e),this.gitlab=new v(t)}discover(e,t,r,i=!1){return/^github\.com\//i.test(e.canonicalOrigin)?this.github.discover(e,t,r,i):this.gitlab.discover(e,t,r,i)}assign(e,t,r){return/^github\.com\//i.test(e.canonicalOrigin)?this.github.assign(e,t,r):this.gitlab.assign(e,t,r)}}],65899)},806098,e=>{var t=e.i(666680),r=e.i(243783),i=e.i(971724),a=e.i(105954),n=e.i(455744),s=e.i(604147);e.i(805422);var o=e.i(661983);let l=e=>[...new Set(e)],u=i.z.object({id:a.z.string().min(1).max(500),username:a.z.string().max(500),name:a.z.string().max(500),avatarUrl:a.z.string().max(4e3).nullable(),url:a.z.string().max(4e3).nullable()}).strict(),c=n.z.array(i.z.object({key:a.z.string().min(1).max(2e3),name:a.z.string().max(2e3),kind:s.z.enum(["GENERAL","CODEOWNERS","APPROVAL_RULE"]),provider:s.z.enum(["GITHUB","GITLAB"]),repositoryIdentity:a.z.string().min(1).max(2e3),ref:a.z.string().max(1e3),reviewers:n.z.array(u).max(1e3)}).strict()).max(500),d=e=>({id:e.userId,username:e.username,name:e.name,avatarUrl:e.avatarUrl,url:e.url});e.s(["w",0,class{providers;refreshWorktree;assignments;constructor(e,t){this.providers=e,this.refreshWorktree=t,this.assignments=new Map}async repository(e){let t=await (0,r.U)(),i=await t.codebaseRepository.findUnique({where:{id:e}});if(!i)throw Error("Repository not found");return i}async saved(e){return(await (0,r.U)()).repositoryReviewerPool.findMany({where:{repositoryId:e},include:{members:!0},orderBy:{key:"asc"}})}async repositoryCodeReviewers(e,t,r=!1){let i=await this.repository(e),[a,n]=await Promise.all([this.providers.discover(i,t??void 0,void 0,r),this.saved(e)]),s=new Map(n.map(e=>[e.key,e])),o=a.pools.map(e=>{let t=s.get(e.key);s.delete(e.key);let r=new Set(e.candidates.map(e=>e.id)),i=t?.members.map(e=>e.userId)??[];return{...e,selectedReviewerIds:i,unavailableReviewerIds:i.filter(e=>t?.repositoryIdentity!==a.repositoryIdentity||!r.has(e))}});for(let e of s.values())o.push({key:e.key,name:e.name,kind:e.kind,candidates:[],selectedReviewerIds:e.members.map(e=>e.userId),unavailableReviewerIds:e.members.map(e=>e.userId)});return{repositoryId:e,...a,pools:o}}async saveRepositoryCodeReviewers(e){if(e.pools.length>500)throw Error("At most 500 reviewer pools can be saved at once");let t=await this.repository(e.repositoryId),[i,a]=await Promise.all([this.providers.discover(t,e.ref??void 0,void 0,!0),this.saved(t.id)]),n=this.validatePools(e.pools,i,a),s=await (0,r.U)();return await s.$transaction(async e=>{await this.writePools(e,t.id,i,n),await this.updateConfiguredFlag(e,t.id)}),this.publish(t.id),this.repositoryCodeReviewers(t.id,e.ref)}validatePools(e,t,r=[]){let i=new Map(t.pools.map(e=>[e.key,e])),a=new Map(r.map(e=>[e.key,e])),n=new Set;return e.map(e=>{if(!e.key||e.key.length>2e3||n.has(e.key))throw Error("Reviewer pool keys must be unique");if(n.add(e.key),e.reviewerIds.length>1e3)throw Error("At most 1,000 reviewers can be selected per pool");let r=i.get(e.key),s=a.get(e.key);if(!r&&!s&&e.reviewerIds.length)throw Error("Reviewer group is no longer available; refresh repository settings");let o=new Map(r?.candidates.map(e=>[e.id,e])??[]);if(s?.repositoryIdentity===t.repositoryIdentity)for(let e of s.members)o.has(e.userId)||o.set(e.userId,d(e));let u=l(e.reviewerIds).map(e=>{let t=o.get(e);if(!t)throw Error("A selected reviewer is no longer eligible; refresh repository settings");return t});return{key:e.key,name:r?.name??s?.name??e.key,kind:r?.kind??s?.kind??"GENERAL",discoveryRef:r?t.ref:s?.discoveryRef??t.ref,members:u}})}async writePools(e,r,i,a){for(let n of a){if(!n.members.length){await e.repositoryReviewerPool.deleteMany({where:{repositoryId:r,key:n.key}});continue}let a=await e.repositoryReviewerPool.upsert({where:{repositoryId_key:{repositoryId:r,key:n.key}},create:{id:(0,t.randomUUID)(),repositoryId:r,key:n.key,name:n.name,kind:n.kind,provider:i.provider,repositoryIdentity:i.repositoryIdentity,discoveryRef:n.discoveryRef},update:{name:n.name,kind:n.kind,provider:i.provider,repositoryIdentity:i.repositoryIdentity,discoveryRef:n.discoveryRef}});await e.repositoryReviewerMember.deleteMany({where:{poolId:a.id}}),await e.repositoryReviewerMember.createMany({data:n.members.map(({id:e,...t})=>({poolId:a.id,userId:e,...t}))})}}async updateConfiguredFlag(e,t){let r=await e.repositoryReviewerMember.count({where:{pool:{repositoryId:t}}});await e.codebaseRepository.update({where:{id:t},data:{hasConfiguredCodeReviewers:r>0,updatedAt:new Date}})}async exportPools(e){return(await this.saved(e)).map(e=>({key:e.key,name:e.name,kind:e.kind,provider:e.provider,repositoryIdentity:e.repositoryIdentity,ref:e.discoveryRef,reviewers:e.members.map(d)}))}async validateTransferredPools(e,t){let r=c.parse(t),i=new Map,a=[];for(let t of r){let r=i.get(t.ref);r||(r=await this.providers.discover(e,t.ref||void 0,void 0,!0),i.set(t.ref,r));let n=e=>e.slice(0,e.lastIndexOf(":"));if(t.provider!==r.provider||n(t.repositoryIdentity)!==n(r.repositoryIdentity)||!t.key.startsWith(`${t.repositoryIdentity}:`))throw Error("Reviewer pools belong to a different provider instance. Deselect Code reviewers in this import and configure reviewers in the destination repository.");let s=`${r.repositoryIdentity}${t.key.slice(t.repositoryIdentity.length)}`,o=r.pools.find(e=>e.key===s),l=new Map(o?.candidates.map(e=>[e.id,e])??[]);if(!o||t.reviewers.some(e=>!l.has(e.id)))throw Error(`Reviewer group ${t.name} or one of its people cannot be resolved at the destination. Deselect Code reviewers in this import and configure reviewers in the destination repository.`);a.push({key:s,name:o.name,kind:o.kind,provider:r.provider,repositoryIdentity:r.repositoryIdentity,ref:r.ref,reviewers:t.reviewers.map(e=>l.get(e.id))})}if(new Set(a.map(e=>e.key)).size!==a.length)throw Error("Imported reviewer pools contain duplicate groups");return a}async applyTransferredPools(e,t,r){for(let i of(await e.repositoryReviewerPool.deleteMany({where:{repositoryId:t}}),r))await this.writePools(e,t,{provider:i.provider,repositoryIdentity:i.repositoryIdentity},[{...i,discoveryRef:i.ref,members:i.reviewers}]);await this.updateConfiguredFlag(e,t)}async context(e,t=!0){let i=await (0,r.U)(),a=await i.worktree.findUnique({where:{id:e},include:{codebase:{include:{repository:!0}},pullRequest:!0,gitLabMergeRequest:!0}});if(!a)throw Error("Worktree not found");let n=a.codebase.repository;if(t&&!n.hasConfiguredCodeReviewers)throw Error("Configure code reviewers in repository settings first");let s=a.gitLabMergeRequest,o=a.pullRequest,l=s?.sourceBranch??o?.headRefName;if(!a.branch||l!==a.branch||a.pullRequestLookupBranch!==a.branch||a.pullRequestLookupOrigin?.toLowerCase()!==n.canonicalOrigin.toLowerCase())throw Error("The worktree branch or repository has changed; refresh the linked pull or merge request");let u=s?{id:s.gitlabId,number:s.iid,projectId:s.projectId}:o?{id:o.githubId,number:o.number}:null;if(!u)throw Error("Worktree does not have a linked pull or merge request");return{worktree:a,repository:n,locator:u}}async discoverRequest(e,t=!0){let r=await this.context(e,t),i=await this.providers.discover(r.repository,void 0,r.locator,!0),a=await this.context(e,t);if(a.locator.id!==r.locator.id||a.locator.number!==r.locator.number||a.locator.projectId!==r.locator.projectId||a.repository.id!==r.repository.id||a.repository.canonicalOrigin.toLowerCase()!==r.repository.canonicalOrigin.toLowerCase()||a.worktree.branch!==r.worktree.branch)throw Error("The linked pull or merge request has changed; reload review details");return{...a,discovery:i}}async worktreeReviewStatus(e){let{discovery:t}=await this.discoverRequest(e,!1);return function(e,t){let r=t.request;if(!r)throw Error("Pull or merge request was not found");let i=l(r.currentReviewers.map(e=>e.id)),a=l(r.approvedReviewers.map(e=>e.id)),n=new Map(t.pools.map(e=>[e.key,e])),s=new Map([...t.pools.flatMap(e=>e.candidates),...r.currentReviewers,...r.approvedReviewers].map(e=>[e.id,e])),o=t.requirements.map(e=>{let a=new Set(e.eligibleReviewerIds.filter(e=>"GITHUB"!==t.provider||e!==r.authorId));return{id:e.id,name:e.name,isRequired:e.isRequired,patterns:e.patterns,requiredApprovals:e.isRequired?e.requiredApprovals:0,groups:l(e.poolKeys).flatMap(e=>{let t=n.get(e);return t?[{key:e,name:t.name,kind:t.kind}]:[]}),eligibleReviewerIds:[...a],approvedReviewerIds:l(e.approvedReviewerIds.filter(e=>a.has(e))),requestedReviewerIds:i.filter(e=>a.has(e))}}),u=new Set([...i,...a,...o.flatMap(e=>e.eligibleReviewerIds)]);return{worktreeId:e,requestId:r.id,requestUrl:r.url,provider:t.provider,requestOpen:r.open,reviewers:[...s.values()].filter(e=>u.has(e.id)),currentReviewerIds:i,approvedReviewerIds:a,requirements:o,issues:t.issues,discoveryComplete:t.discoveryComplete}}(e,t)}async live(e){let t=await this.discoverRequest(e),{discovery:r}=t,i=function(e,t,r){let i=t.request;if(!i)throw Error("Pull or merge request was not found");let a=l(i.currentReviewers.map(e=>e.id)),n=l(i.approvedReviewers.map(e=>e.id)),s=new Set(a),o=new Set(n),u=new Map(t.pools.map(e=>[e.key,new Set(e.candidates.map(e=>e.id))])),c=new Map(r.filter(e=>e.repositoryIdentity===t.repositoryIdentity).map(e=>[e.key,new Set(e.members.map(e=>e.userId).filter(t=>u.get(e.key)?.has(t)))])),d=new Map([...t.pools.flatMap(e=>e.candidates),...i.currentReviewers,...i.approvedReviewers].map(e=>[e.id,e])),p=t.requirements;if(!p.length){let e=t.pools.find(e=>"GENERAL"===e.kind);e&&(p=[{id:"general-reviewers",name:"General reviewers",isRequired:!1,patterns:[],poolKeys:[e.key],eligibleReviewerIds:e.candidates.map(e=>e.id),approvedReviewerIds:n,requiredApprovals:1}])}let h=p.map(e=>{let t=new Set(e.eligibleReviewerIds.filter(e=>e!==i.authorId)),r=new Set(e.poolKeys.flatMap(e=>[...c.get(e)??[]]));return{...e,eligibleReviewerIds:[...t],candidateReviewerIds:[...r].filter(e=>t.has(e)&&d.has(e)&&!s.has(e)&&!o.has(e)),approvedReviewerIds:l(e.approvedReviewerIds.filter(e=>t.has(e))),requestedReviewerIds:a.filter(e=>t.has(e))}}),m=new Set([...a,...n,...h.flatMap(e=>[...e.candidateReviewerIds,...e.approvedReviewerIds,...e.requestedReviewerIds])]);return{worktreeId:e,requestId:i.id,requestUrl:i.url,provider:t.provider,requestOpen:i.open,authorId:i.authorId,reviewers:[...d.values()].filter(e=>m.has(e.id)),requirements:h,currentReviewerIds:a,approvedReviewerIds:n,selectedReviewerIds:[],issues:[...t.issues,...t.discoveryComplete||t.requirements.length?[]:["General reviewer selection is available, but provider approval requirements could not be verified."]],discoveryComplete:t.discoveryComplete}}(e,r,await this.saved(t.repository.id));if(!i.requestOpen)throw Error("Pull or merge request is no longer open; refresh this worktree");return{...t,assignment:i}}async worktreeReviewerAssignment(e){return(await this.live(e)).assignment}async previewRandomWorktreeReviewers(e,t,r){let{assignment:i}=await this.live(e);return this.requireRequest(i,t),function(e,t=[],r=Math.random){let i=l(e.requirements.flatMap(e=>e.candidateReviewerIds)),a=new Set(i),n=new Set(t.filter(e=>a.has(e))),s=e=>new Set([...e.approvedReviewerIds,...e.requestedReviewerIds,...[...n].filter(t=>e.eligibleReviewerIds.includes(t))]).size;for(let e=i.length-1;e>0;e--){let t=Math.floor(r()*(e+1));[i[e],i[t]]=[i[t],i[e]]}for(let t of i)e.requirements.some(e=>s(e)<e.requiredApprovals&&e.candidateReviewerIds.includes(t))&&n.add(t);let o=e.requirements.flatMap(e=>{let t=Math.max(0,e.requiredApprovals-s(e));return t?[`${e.name}: ${t} more eligible reviewer${1===t?"":"s"} needed. Configure additional reviewers in repository settings.`]:[]});return{...e,selectedReviewerIds:[...n],issues:[...e.issues,...o]}}(i,r??[])}requireRequest(e,t){if(e.requestId!==t)throw Error("The pull or merge request has changed; reload reviewer options before assigning")}async assignWorktreeReviewers(e){let t=(this.assignments.get(e.worktreeId)??Promise.resolve()).catch(()=>void 0).then(async()=>{let{repository:t,locator:r,assignment:i}=await this.live(e.worktreeId);this.requireRequest(i,e.requestId);let a=l(e.reviewerIds);if(!a.length||a.length>1e3)throw Error("Select between 1 and 1,000 reviewers");let n=new Set(i.requirements.flatMap(e=>e.candidateReviewerIds)),s=new Set(i.currentReviewerIds);if(a.some(e=>!n.has(e)&&!s.has(e)))throw Error("A selected reviewer is no longer eligible; reload reviewer options before assigning");let o=a.filter(e=>!s.has(e));o.length&&await this.providers.assign(t,r,i.reviewers.filter(e=>o.includes(e.id))),await this.refreshWorktree?.(e.worktreeId).catch(()=>void 0),this.publish(t.id,e.worktreeId);try{return await this.worktreeReviewerAssignment(e.worktreeId)}catch{let e=l([...i.currentReviewerIds,...o]);return{...i,currentReviewerIds:e,requirements:i.requirements.map(t=>({...t,candidateReviewerIds:t.candidateReviewerIds.filter(e=>!o.includes(e)),requestedReviewerIds:e.filter(e=>t.eligibleReviewerIds.includes(e))})),issues:[...i.issues,"Review requests were sent. Reload reviewer options to refresh provider status."]}}});this.assignments.set(e.worktreeId,t);try{return await t}finally{this.assignments.get(e.worktreeId)===t&&this.assignments.delete(e.worktreeId)}}publish(e,t=null){o._H.publish(o.aA,{codebaseOverviewChanged:{repositoryId:e,codebaseId:null}}),o._H.publish(o.MA,{worktreeOverviewChanged:{worktreeId:t,codebaseId:null}})}},"k",0,c])},180201,e=>{var t=e.i(53803),r=e.i(264977);function i(e){return e&&"object"==typeof e&&"message"in e&&"string"==typeof e.message?e.message:String(e)}function a(e,t,r,a){e.newFunction(r,r=>{let n=r?JSON.parse(e.getString(r)):null,s=e.newPromise();return t.add(s),Promise.resolve().then(()=>a(n)).then(e=>({ok:!0,value:e}),e=>({ok:!1,error:i(e)})).then(r=>{s.alive&&e.alive&&(e.newString(JSON.stringify(r)).consume(e=>s.resolve(e)),t.delete(s),s.dispose(),e.runtime.executePendingJobs().dispose())}).catch(()=>{}),s.handle}).consume(t=>e.setProp(e.global,r,t))}async function n(e){if(!e.body)return"";let t=e.body.getReader(),r=[],i=0;for(;;){let{done:e,value:a}=await t.read();if(e)break;if((i+=a.byteLength)>0xa00000)throw await t.cancel(),Error("Script fetch response exceeded 10 MiB");r.push(a)}let a=new Uint8Array(i),n=0;for(let e of r)a.set(e,n),n+=e.byteLength;return new TextDecoder().decode(a)}let s=String.raw`
886
886
  class HeaderBag {
887
887
  constructor(values = [], readOnly = false) { this.values = Array.isArray(values) ? values.map(({name, value}) => ({name: String(name), value: String(value)})) : []; this.readOnly = readOnly; }
888
888
  assertMutable() { if (this.readOnly) throw new TypeError("Original request headers are read-only"); }
@@ -1,3 +1,3 @@
1
- module.exports=[888304,e=>{e.v(s=>Promise.all(["server/chunks/node_modules_jose_dist_webapi_jwks_remote_0f5hq6bzjk72-.js","server/chunks/src_lib_app-secret_ts_03wwbibnlzc3r._.js","server/chunks/node_modules_0drssdz1nr7oa._.js","server/chunks/node_modules_@better-auth_core_dist_db_adapter_157o1-ounll_1._.js","server/chunks/1q96_modules_@apollo_server_dist_esm_plugin_landingPage_default_index_1xpw_clbdb35e.js","server/chunks/[root-of-the-server]__0jz2fvfz1cvpt._.js","server/chunks/src_03obs9yg_q3al._.js","server/chunks/node_modules_jose_dist_webapi_1c-ghz_70myaq._.js","server/chunks/node_modules_quickjs-emscripten-core_dist_chunk-V2S4ZYJR_mjs_11joabg5mtsj7._.js","server/chunks/node_modules_graphql_1bek7n2vwzyob._.js","server/chunks/node_modules_graphql_language_0qd44237_jgx6._.js","server/chunks/node_modules_better-auth_dist_0tk0aop-dp_fp._.js","server/chunks/[externals]__0_f21oowarasb._.js","server/chunks/node_modules_graphql_0h_8z-jmfw1vc._.js","server/chunks/node_modules_149wmz_bph6gb._.js","server/chunks/node_modules_0q0jrpgffdvvz._.js","server/chunks/node_modules_@better-auth_kysely-adapter_dist_index_mjs_0ztlh08ldnif1._.js","server/chunks/node_modules_05qz3_x8ee0ve._.js","server/chunks/node_modules_1p3ngyfxqfgl-._.js","server/chunks/node_modules_0cwx2ysnlw_pr._.js","server/chunks/_1tjxax0udpzpp._.js","server/chunks/_1wycw9ka35xs9._.js","server/chunks/node_modules_graphql_1ytemyuyfafue._.js","server/chunks/node_modules_graphql_0g47m7m2rf4k4._.js","server/chunks/node_modules_jose_dist_webapi_1q56y4as7ko62._.js","server/chunks/node_modules_@better-auth_core_dist_db_schema-check_mjs_00-xp1rwxo05f._.js","server/chunks/node_modules_0e5o_ychtva4p._.js"].map(s=>e.l(s))).then(()=>s(544112)))},397998,e=>{"use strict";async function s(){{let{initializeAppSecret:s}=await e.A(251407);await s();let{getMcpOAuthConfig:_}=await e.A(404719);_();let{startAgentWebSocketServer:r}=await e.A(888304);await r()}}e.s(["register",0,s])},251407,e=>{e.v(s=>Promise.all(["server/chunks/[externals]__0ocw9xby-_f-n._.js","server/chunks/[root-of-the-server]__15g9tgikmqbbr._.js","server/chunks/src_lib_app-secret_ts_03wwbibnlzc3r._.js"].map(s=>e.l(s))).then(()=>s(853809)))},404719,e=>{e.v(s=>Promise.all(["server/chunks/src_03obs9yg_q3al._.js"].map(s=>e.l(s))).then(()=>s(160501)))}];
1
+ module.exports=[888304,e=>{e.v(s=>Promise.all(["server/chunks/node_modules_jose_dist_webapi_jwks_remote_0f5hq6bzjk72-.js","server/chunks/src_lib_app-secret_ts_03wwbibnlzc3r._.js","server/chunks/node_modules_0drssdz1nr7oa._.js","server/chunks/1q96_modules_@apollo_server_dist_esm_plugin_landingPage_default_index_1xpw_clbdb35e.js","server/chunks/[root-of-the-server]__0jz2fvfz1cvpt._.js","server/chunks/[externals]__0_f21oowarasb._.js","server/chunks/src_03obs9yg_q3al._.js","server/chunks/node_modules_graphql_1ytemyuyfafue._.js","server/chunks/node_modules_quickjs-emscripten-core_dist_chunk-V2S4ZYJR_mjs_11joabg5mtsj7._.js","server/chunks/node_modules_149wmz_bph6gb._.js","server/chunks/node_modules_graphql_0h_8z-jmfw1vc._.js","server/chunks/node_modules_@better-auth_core_dist_db_schema-check_mjs_00-xp1rwxo05f._.js","server/chunks/node_modules_better-auth_dist_0tk0aop-dp_fp._.js","server/chunks/node_modules_jose_dist_webapi_1c-ghz_70myaq._.js","server/chunks/node_modules_graphql_0g47m7m2rf4k4._.js","server/chunks/node_modules_0q0jrpgffdvvz._.js","server/chunks/node_modules_1p3ngyfxqfgl-._.js","server/chunks/_1_wh1ec-2o48m._.js","server/chunks/_1wycw9ka35xs9._.js","server/chunks/node_modules_05qz3_x8ee0ve._.js","server/chunks/node_modules_@better-auth_kysely-adapter_dist_index_mjs_0ztlh08ldnif1._.js","server/chunks/node_modules_0cwx2ysnlw_pr._.js","server/chunks/node_modules_graphql_language_0qd44237_jgx6._.js","server/chunks/node_modules_graphql_1bek7n2vwzyob._.js","server/chunks/node_modules_jose_dist_webapi_1q56y4as7ko62._.js","server/chunks/node_modules_@better-auth_core_dist_db_adapter_157o1-ounll_1._.js","server/chunks/node_modules_0e5o_ychtva4p._.js"].map(s=>e.l(s))).then(()=>s(544112)))},397998,e=>{"use strict";async function s(){{let{initializeAppSecret:s}=await e.A(251407);await s();let{getMcpOAuthConfig:_}=await e.A(404719);_();let{startAgentWebSocketServer:r}=await e.A(888304);await r()}}e.s(["register",0,s])},251407,e=>{e.v(s=>Promise.all(["server/chunks/[externals]__0ocw9xby-_f-n._.js","server/chunks/[root-of-the-server]__15g9tgikmqbbr._.js","server/chunks/src_lib_app-secret_ts_03wwbibnlzc3r._.js"].map(s=>e.l(s))).then(()=>s(853809)))},404719,e=>{e.v(s=>Promise.all(["server/chunks/src_03obs9yg_q3al._.js"].map(s=>e.l(s))).then(()=>s(160501)))}];
2
2
 
3
3
  //# sourceMappingURL=src_06620x_9xof19._.js.map
@@ -7,6 +7,6 @@ ${o}`].join("\n\n").slice(0,2e6)),this.createInternal({...t,attachmentIds:i,kind
7
7
  ${e.prompt}`).join("\n\n"),o.run.events.filter(e=>null===o.eventSequence?e.createdAt<=o.createdAt:e.sequence<=o.eventSequence).map(e=>`[${e.type}] ${e.summary}${e.detailMarkdown?`
8
8
  ${e.detailMarkdown}`:""}`).join("\n\n"),`Questions:
9
9
  ${o.questions.map(e=>`- ${e.prompt}`).join("\n")}`,`Revised answer:
10
- ${JSON.stringify(t,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),f=await C(i,"SESSION"),m=(0,n.randomUUID)(),I=(0,n.randomUUID)(),E=new Date,y=await i.agentRun.create({data:{id:m,kind:"SESSION",displayNumber:f,status:d?"IN_PROGRESS":"QUEUED",phase:d?"ANSWER_REVISION_QUEUED":"WAITING_FOR_WORKTREE",provider:o.run.provider,worktreeId:o.run.worktreeId,repositoryId:o.run.repositoryId,agentId:o.run.agentId,jiraIssueKey:o.run.jiraIssueKey,repositoryName:o.run.repositoryName,branch:o.run.branch,model:o.run.model,effort:o.run.effort,webSearchEnabled:o.run.webSearchEnabled,worktreeConcurrencyLimit:"SESSION"===o.run.kind?o.run.worktreeConcurrencyLimit:k("SESSION",void 0),initialPrompt:h,parentRunId:o.runId,parentRunNumber:o.run.displayNumber,followUpMode:"ANSWER_REVISION",inputs:{create:{id:I,sequence:0,kind:"ANSWER_REVISION",prompt:h}}}});d&&await i.worktreeRunLease.update({where:{runId:o.runId},data:{runId:m,purpose:"RUN",reservationKey:null,acquiredAt:new Date}}),await i.agentRun.update({where:{id:o.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:E}});let g=await O(i,{runId:m,agentId:o.run.agentId,type:"REVISE_ANSWER",payload:{batchId:e,revisionId:u,inputId:I,stash:!!r,rollback:a,checkpoint:o.checkpoint}});return{batch:o,run:y,command:g,sourceRunId:o.runId,sourceAgentId:o.run.agentId,transfersSlot:d}});return D(s.sourceRunId),D(s.run.id),s.transfersSlot&&v(s.command,s.sourceAgentId),await this.promoteQueuedLaneSafely(s.run.worktreeId,"SESSION"),this.get(s.run.id)}async pendingCommands(e){return await this.reconcileQueuedRuns(e),(await (0,i.U)()).runCommand.findMany({where:{agentId:e,OR:[{status:"RUNNING"},{status:"QUEUED",run:{status:{not:"QUEUED"}}}]},orderBy:[{createdAt:"asc"},{sequence:"asc"}],take:200,include:b})}async claimCommand(e,t){let r=await (0,i.U)(),n=await r.runCommand.findUnique({where:{id:t},select:{agentId:!0,status:!0,type:!0,run:{select:{worktreeId:!0,status:!0}}}});if(!n||n.agentId!==e)throw Error("Run command not found");if("QUEUED"===n.status&&"QUEUED"===n.run.status&&new Set(["START","PLAY_PLAN","CONTINUE","REVISE_ANSWER"]).has(n.type))throw Error("Run command is waiting for the worktree");"QUEUED"===n.status&&n.run.worktreeId&&await this.diskSpace?.assertWorktreeCanStart(n.run.worktreeId),await r.runCommand.updateMany({where:{id:t,agentId:e,status:"QUEUED"},data:{status:"RUNNING",claimedAt:new Date}});let a=await r.runCommand.findUnique({where:{id:t},include:b});if(!a||a.agentId!==e)throw Error("Run command not found");if("RUNNING"!==a.status)throw Error("Run command cannot be claimed");return a}async completeCommand(e,t,r,n){let a=await (0,i.U)(),o=await a.runCommand.findUnique({where:{id:t},include:{run:{select:{worktreeId:!0,kind:!0}}}});if(!o||o.agentId!==e)throw Error("Run command not found");let s=await a.runCommand.update({where:{id:t},data:{status:"SUCCEEDED"===r?"SUCCEEDED":"FAILED",error:R(n,2e4),finishedAt:new Date}});if("DELETE_NATIVE"===s.type&&"SUCCEEDED"===s.status){let e=await a.agentRun.findUnique({where:{id:s.runId},include:{inputs:{include:{attachments:!0}}}});if(e){let t=e.inputs.flatMap(e=>e.attachments.map(({storagePath:e})=>e));await a.agentRun.delete({where:{id:e.id}}),await (0,h.l)(t)}}else if("FAILED"===s.status){"PREPARE_ANSWER_REVISION"===s.type&&await a.worktreeRunLease.deleteMany({where:{runId:s.runId,purpose:E}});let e="ANSWER"===s.type&&await a.runQuestionBatch.count({where:{runId:s.runId,status:"PENDING"}});await a.agentRun.updateMany({where:{id:s.runId,status:{notIn:[...I]}},data:{error:s.error,phase:e?"WAITING_FOR_ANSWER":`${s.type}_FAILED`,...["START","PLAY_PLAN","CONTINUE"].includes(s.type)?{status:"FAILED",finishedAt:new Date}:{},...["PREPARE_ANSWER_REVISION","REVISE_ANSWER"].includes(s.type)?{status:"PAUSED",finishedAt:null}:{}}}),["START","PLAY_PLAN","CONTINUE"].includes(s.type)&&await a.worktreeRunLease.deleteMany({where:{runId:s.runId}})}else if(["PAUSE","CANCEL"].includes(s.type)){let e="CANCEL"===s.type;await a.agentRun.updateMany({where:{id:s.runId,status:{notIn:[...I]}},data:{status:e?"CANCELLED":"PAUSED",phase:e?"CANCELLED":"PAUSED",finishedAt:e?new Date:null}}),e&&await a.worktreeRunLease.deleteMany({where:{runId:s.runId}})}return D(s.runId),o.run.worktreeId&&("PLAN"===o.run.kind||"SESSION"===o.run.kind)&&await this.promoteQueuedLaneSafely(o.run.worktreeId,o.run.kind),s}async beginAttempt(e,t,r){let a=await (0,i.U)(),o=await a.agentRun.findUnique({where:{id:t},include:{attempts:!0}});if(!o||o.agentId!==e)throw Error("Run not found for this agent");if("QUEUED"===o.status)throw Error("Run is waiting for the worktree");if(I.has(o.status))throw Error("Run is already finished");let s=o.attempts.length,d=await a.runAttempt.create({data:{id:(0,n.randomUUID)(),runId:t,generation:s,nativeId:r||null,nativeKey:r?`${e}:${o.provider}:${r}`:null,status:"RUNNING"}});return await a.agentRun.update({where:{id:t},data:{phase:"RUNNING",startedAt:o.startedAt??new Date}}),D(t),d}async updateAttemptNativeId(e,t,r,n){let a=await (0,i.U)(),o=await a.$transaction(async a=>{let i=await a.runAttempt.findUnique({where:{id:t},include:{run:!0}});if(!i||i.run.agentId!==e)throw Error("Attempt not found");let o=`${e}:${i.run.provider}:${r}`,s=await a.runAttempt.findUnique({where:{nativeKey:o}});if(s&&s.id!==t){if(s.runId!==i.runId)throw Error("Native provider session belongs to another run");await a.runAttempt.update({where:{id:s.id},data:{nativeKey:null}})}let d=await a.runAttempt.update({where:{id:t},data:{nativeId:r,nativeKey:o}});return n&&await a.agentRun.update({where:{id:i.runId},data:{providerVersion:n}}),d});return D(o.runId),o}async appendEvents(e,t,r,n){let a=await (0,i.U)(),s=await a.agentRun.findUnique({where:{id:t}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");let d=n.slice(0,500).map(e=>{let n=A(e.summary,"Event summary",2e3);return{id:e.id,runId:t,attemptId:r,sequence:e.sequence,type:A(e.type,"Event type",100).toUpperCase(),summary:n,searchText:R(e.searchText,1e5)??n,detailMarkdown:R(e.detailMarkdown,5e5),rawJson:void 0===e.raw?null:JSON.stringify(e.raw),createdAt:N(e.createdAt)}});if(!d.length)return[];let u=await a.$transaction(async e=>{let n=new Set((await e.runEvent.findMany({where:{id:{in:d.map(e=>e.id)}},select:{id:!0}})).map(({id:e})=>e)),a=d.filter(e=>!n.has(e.id));if(a.length){await e.runEvent.createMany({data:a});let n=a.filter(e=>e.type.includes("TOOL")&&!e.type.includes("QUESTION")).map(e=>({id:`event:${e.id}`,runId:t,attemptId:r,sequence:e.sequence,name:e.summary.split(/[\s:(]/,1)[0]||e.type,status:e.type.includes("FAIL")||e.type.includes("ERROR")?"FAILED":e.type.includes("COMPLETE")||e.type.includes("RESULT")?"COMPLETED":"OBSERVED",inputJson:e.rawJson,error:e.type.includes("FAIL")||e.type.includes("ERROR")?e.summary:null,finishedAt:e.createdAt}));n.length&&(await e.runToolCall.createMany({data:n}),await e.agentRun.update({where:{id:t},data:{toolCallCount:await e.runToolCall.count({where:{runId:t}})}}))}return e.runEvent.findMany({where:{id:{in:d.map(e=>e.id)}},orderBy:{sequence:"asc"}})});for(let e of u)o._H.publish((0,o.zP)(t),{runEventAdded:e});return D(t),u}async reportQuestion(e,t,r,a,s,d){if(!d.length||d.some(e=>!e.field)&&d.length>10||d.length>200)throw Error("Question batch is invalid");let u=await (0,i.U)(),l=await u.$transaction(async i=>{let o=await i.agentRun.findUnique({where:{id:t},include:{worktree:!0}});if(!o||o.agentId!==e)throw Error("Run not found for this agent");if(a){let e=await i.runQuestionBatch.findUnique({where:{runId_nativeRequestId:{runId:t,nativeRequestId:a}},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}});if(e)return{batch:e,notification:null}}let u=(0,n.randomUUID)(),l=await i.runQuestionBatch.create({data:{id:u,runId:t,attemptId:r,nativeRequestId:a,eventSequence:Number.isInteger(s)&&(s??-1)>=-1?s:null,questions:{create:d.map((e,t)=>({id:`${u}:${t}:${e.id||"question"}`,position:t,header:R(e.header,200),prompt:A(e.prompt,"Question",1e4),multiSelect:!!e.multiSelect,allowCustom:!1!==e.allowCustom,fieldJson:e.field?JSON.stringify(c(e.field)):null,options:{create:(e.options??[]).map((e,t)=>({id:(0,n.randomUUID)(),position:t,label:A(e.label,"Option label",500),description:R(e.description,2e3)}))}}))}},include:{questions:{include:{options:!0}}}});return await i.agentRun.update({where:{id:t},data:{phase:"WAITING_FOR_ANSWER"}}),{batch:l,notification:this.notifications?await this.notifications.recordInTransaction(i,{dedupeKey:`run:${t}:question:${u}`,typeKey:"RUN_NEEDS_ANSWER",title:`${"PLAN"===o.kind?"Plan":"Session"} #${o.displayNumber} needs an answer`,body:d[0].prompt.slice(0,1e3),href:U(o),resourceKind:o.kind,resourceId:o.id,worktreeId:o.worktreeId,highlightColor:o.worktree?.highlightColor}):null}});return this.notifications?.created(l.notification),D(t),o._H.publish((0,o.hn)(t),{runQuestionChanged:{id:l.batch.id,runId:t}}),l.batch}async reportUsage(e,t,r,a){let o=await (0,i.U)(),s=await o.agentRun.findUnique({where:{id:t}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");let d=e=>Number.isFinite(e)&&(e??0)>=0?Math.floor(e):0;return await o.$transaction(async e=>{let i=await e.runModelUsage.findFirst({where:{runId:t,attemptId:r,model:a.model}}),o={inputTokens:d(a.inputTokens),outputTokens:d(a.outputTokens),reasoningTokens:d(a.reasoningTokens),cacheReadTokens:d(a.cacheReadTokens),cacheWriteTokens:d(a.cacheWriteTokens),estimatedCost:a.estimatedCost??null};i?await e.runModelUsage.update({where:{id:i.id},data:o}):await e.runModelUsage.create({data:{id:(0,n.randomUUID)(),runId:t,attemptId:r,model:a.model,...o}});let s=await e.runModelUsage.aggregate({where:{runId:t},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}}),u=await e.runModelUsage.findMany({where:{runId:t,estimatedCost:{not:null}},select:{model:!0,estimatedCost:!0}}),l=u.find(({model:e})=>"estimated-total"===e)?.estimatedCost,c=await e.runToolCall.count({where:{runId:t}});await e.agentRun.update({where:{id:t},data:{inputTokens:s._sum.inputTokens??0,outputTokens:s._sum.outputTokens??0,reasoningTokens:s._sum.reasoningTokens??0,cacheReadTokens:s._sum.cacheReadTokens??0,cacheWriteTokens:s._sum.cacheWriteTokens??0,toolCallCount:Math.max(c,d(a.toolCallCount)),estimatedCost:l??(u.length?u.reduce((e,t)=>e+(t.estimatedCost??0),0):null),pricingSource:R(a.pricingSource,200),pricingUpdatedAt:new Date}})}),D(t),this.get(t)}async finishAttempt(e,t,r){let n=r.status.toUpperCase();if(!["PAUSED","COMPLETED","CANCELLED","FAILED"].includes(n))throw Error("Run completion status is invalid");let a=await (0,i.U)(),o=await a.$transaction(async a=>{let i=await a.runAttempt.findUnique({where:{id:t},include:{run:{include:{worktree:!0}}}});if(!i||i.run.agentId!==e)throw Error("Attempt not found");let o=I.has(i.run.status)?i.run.status:n;await a.runAttempt.update({where:{id:t},data:{status:o,finishedAt:new Date}}),await a.runQuestionBatch.updateMany({where:{runId:i.runId,status:"PENDING"},data:{status:"SUPERSEDED",supersededAt:new Date}});let s=I.has(i.run.status)?i.run:await a.agentRun.update({where:{id:i.runId},data:{status:n,phase:r.phase?.trim().toUpperCase()||n,finalOutput:R(r.finalOutput,2e6),error:R(r.error,2e4),finishedAt:"PAUSED"===n?null:new Date}});I.has(o)&&await a.worktreeRunLease.deleteMany({where:{runId:s.id,purpose:{not:E}}});let d="COMPLETED"===o?"RUN_COMPLETED":"FAILED"===o?"RUN_FAILED":"CANCELLED"===o?"RUN_CANCELLED":"RECOVERY_PAUSED"===r.phase?"RUN_RECOVERY_PAUSED":null,u=d&&this.notifications?await this.notifications.recordInTransaction(a,{dedupeKey:`run:${s.id}:status:${o}:${i.generation}`,typeKey:d,title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} ${o.toLowerCase()}`,body:r.error||r.finalOutput?.slice(0,1e3)||`The ${s.kind.toLowerCase()} is ${o.toLowerCase()}.`,href:U(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:i.run.worktree?.highlightColor}):null;return{run:s,notification:u}});return this.notifications?.created(o.notification),D(o.run.id),I.has(o.run.status)&&o.run.worktreeId&&("PLAN"===o.run.kind||"SESSION"===o.run.kind)&&await this.promoteQueuedLaneSafely(o.run.worktreeId,o.run.kind),this.get(o.run.id)}async reportCheckpoint(e,t,r,a){let o=await (0,i.U)(),s=await o.agentRun.findUnique({where:{id:t}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");if(a.questionBatchId){let e=await o.runQuestionBatch.findUnique({where:{id:a.questionBatchId}});if(!e||e.runId!==t)throw Error("Question batch not found")}let d=await o.runCheckpoint.create({data:{id:(0,n.randomUUID)(),runId:t,attemptId:r,questionBatchId:a.questionBatchId??null,kind:A(a.kind,"Checkpoint kind",100).toUpperCase(),headSha:R(a.headSha,100),branch:R(a.branch,500),upstreamSha:R(a.upstreamSha,100),indexTree:R(a.indexTree,100),worktreeTree:R(a.worktreeTree,100),refName:R(a.refName,1e3),manifestJson:R(a.manifestJson,2e6),diffSummary:R(a.diffSummary,5e5),diffPatch:R(a.diffPatch,2e6),stashRef:R(a.stashRef,1e3)}});return D(t),d}async reportAnswerRevisionPreview(e,t,r,n){let a=await (0,i.U)(),s=await a.runQuestionBatch.findUnique({where:{id:t},include:{run:!0}});if(!s?.runId||!s.run||s.run.agentId!==e||"MANAGED"!==s.run.origin)throw Error("Question batch not found for this agent");let d=await a.runQuestionBatch.update({where:{id:t},data:{revisionPreparedAt:new Date,rollbackPatch:r.slice(0,2e6),pushedCommitWarning:R(n,2e4)},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}}}});return D(s.runId),o._H.publish((0,o.hn)(s.runId),{runQuestionChanged:{id:t,runId:s.runId}}),d}async applyAnswerRevision(e,t,r,n){let a=await (0,i.U)(),o=await a.$transaction(async a=>{let i=await a.runQuestionBatch.findUnique({where:{id:t},include:{run:!0,attempt:!0}}),o=await a.runAttempt.findUnique({where:{id:n},include:{run:!0}}),s=await a.runAnswerRevision.findUnique({where:{id:r}});if(!i?.runId||!i.run||i.run.agentId!==e||!i.attempt||!o||o.run.parentRunId!==i.runId||"ANSWER_REVISION"!==o.run.followUpMode||!s||s.batchId!==t)throw Error("Answer revision cannot be applied");let d=new Date,u=(await a.runAttempt.findMany({where:{runId:i.runId,generation:{gte:i.attempt.generation}},select:{id:!0}})).map(({id:e})=>e);await a.runAttempt.updateMany({where:{id:{in:u}},data:{status:"SUPERSEDED",supersededAt:d,finishedAt:d}}),await a.runEvent.updateMany({where:{runId:i.runId,sequence:{gt:i.eventSequence??-1},supersededAt:null},data:{supersededAt:d}}),await a.runToolCall.updateMany({where:{attemptId:{in:u},supersededAt:null},data:{supersededAt:d}}),await a.runModelUsage.updateMany({where:{attemptId:{in:u}},data:{superseded:!0}});let l=(await a.runQuestionBatch.findMany({where:{runId:i.runId,createdAt:{gt:i.createdAt}},select:{id:!0}})).map(({id:e})=>e);return await a.runQuestionBatch.updateMany({where:{id:{in:l}},data:{status:"SUPERSEDED",supersededAt:d}}),await a.runAnswerRevision.updateMany({where:{OR:[{batchId:{in:l}},{batchId:t,id:{not:r}}],supersededAt:null},data:{supersededAt:d}}),await a.runAnswerRevision.update({where:{id:r},data:{replacementAttemptId:n}}),await a.agentRun.update({where:{id:i.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:d}}),await a.agentRun.update({where:{id:o.runId},data:{status:"IN_PROGRESS",phase:"RUNNING"}}),{sourceRunId:i.runId,replacementRunId:o.runId}});return D(o.sourceRunId),D(o.replacementRunId),this.get(o.replacementRunId)}async importHistory(e,t,r){let a=await (0,i.U)();await a.$transaction(async a=>{if(r.events){let n=r.events.map((n,a)=>({id:`${t}:import:${n.id}`,runId:e,attemptId:t,sequence:a,type:A(n.type,"Event type",100).toUpperCase(),summary:A(n.summary,"Event summary",2e3),searchText:(n.searchText??JSON.stringify(n.raw??n.summary)).slice(0,1e5),detailMarkdown:n.detailMarkdown?.slice(0,5e5)??null,rawJson:void 0===n.raw?null:JSON.stringify(n.raw),createdAt:N(n.createdAt)??N(r.createdAt)??new Date}));await a.runToolCall.deleteMany({where:{runId:e,attemptId:t}}),await a.runEvent.deleteMany({where:{runId:e,attemptId:t}});for(let e=0;e<n.length;e+=500)await a.runEvent.createMany({data:n.slice(e,e+500)});let i=new Map;for(let e of n){let t=e.rawJson?JSON.parse(e.rawJson):{};if("user"===t.type&&Array.isArray(t.message?.content))for(let r of t.message.content)"tool_result"===r.type&&"string"==typeof r.tool_use_id&&i.set(r.tool_use_id,{content:r.content??t.tool_use_result??null,isError:!0===r.is_error,createdAt:e.createdAt})}let o=n.flatMap(r=>{let n=r.rawJson?JSON.parse(r.rawJson):{},a="assistant"===n.type&&Array.isArray(n.message?.content)?n.message.content.find(e=>"tool_use"===e.type):void 0;if(a){let n=i.get(String(a.id));return[{id:`event:${r.id}`,runId:e,attemptId:t,sequence:r.sequence,name:String(a.name??"Tool"),status:n?n.isError?"FAILED":"COMPLETED":"OBSERVED",inputJson:r.rawJson,outputJson:JSON.stringify(n?.content??null),error:n?.isError?"string"==typeof n.content?n.content:JSON.stringify(n.content):null,startedAt:r.createdAt,finishedAt:n?.createdAt??null}]}let o=n.params?.item,s=n.properties?.part,d=o&&["commandExecution","fileChange","mcpToolCall","dynamicToolCall","webSearch"].includes(o.type),u="message.part.updated"===n.type&&s?.type==="tool";if(!d&&!u)return[];let l=u?s.state??{}:o,c=String(l.status??"COMPLETED").toUpperCase(),w=u&&"number"==typeof l.time?.start?new Date(l.time.start):r.createdAt,p=u?"number"==typeof l.time?.end?new Date(l.time.end):null:["INPROGRESS","IN_PROGRESS","RUNNING","PENDING"].includes(c)?null:r.createdAt;return[{id:`event:${r.id}`,runId:e,attemptId:t,sequence:r.sequence,name:u?s.tool??s.name??"tool":o.tool??o.command??o.type,status:"ERROR"===c?"FAILED":"INPROGRESS"===c?"IN_PROGRESS":c,inputJson:r.rawJson,outputJson:JSON.stringify(u?l.result??l.output??null:o.result??o.aggregatedOutput??null),error:l.error?"string"==typeof l.error?l.error:JSON.stringify(l.error):null,startedAt:w,finishedAt:p}]});for(let e=0;e<o.length;e+=500)await a.runToolCall.createMany({data:o.slice(e,e+500)});await a.agentRun.update({where:{id:e},data:{toolCallCount:await a.runToolCall.count({where:{runId:e}})}})}if(r.usage){for(let i of(await a.runModelUsage.deleteMany({where:{runId:e,attemptId:t}}),r.usage)){let r=e=>Number.isFinite(e)&&(e??0)>=0?Math.floor(e):0;await a.runModelUsage.create({data:{id:(0,n.randomUUID)(),runId:e,attemptId:t,model:A(i.model,"Model",500),inputTokens:r(i.inputTokens),outputTokens:r(i.outputTokens),reasoningTokens:r(i.reasoningTokens),cacheReadTokens:r(i.cacheReadTokens),cacheWriteTokens:r(i.cacheWriteTokens),estimatedCost:i.estimatedCost??null}})}let i=await a.runModelUsage.aggregate({where:{runId:e},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}});await a.agentRun.update({where:{id:e},data:{inputTokens:i._sum.inputTokens??0,outputTokens:i._sum.outputTokens??0,reasoningTokens:i._sum.reasoningTokens??0,cacheReadTokens:i._sum.cacheReadTokens??0,cacheWriteTokens:i._sum.cacheWriteTokens??0,estimatedCost:r.estimatedCost??(r.usage.length&&r.usage.every(e=>null!=e.estimatedCost)?i._sum.estimatedCost??null:null),pricingSource:R(r.pricingSource??[...new Set(r.usage.map(e=>e.pricingSource).filter(Boolean))].join(", "),200),pricingUpdatedAt:new Date}})}else void 0!==r.estimatedCost&&await a.agentRun.update({where:{id:e},data:{estimatedCost:r.estimatedCost,pricingSource:R(r.pricingSource,200),pricingUpdatedAt:new Date}})})}async importRuns(e,t,r){let a=g(m,t,"Provider"),o=await (0,i.U)(),s=0;for(let t of r){let r=t.prompt?.trim()||void 0,i=`${e}:${a}:${A(t.nativeId,"Native ID",500)}`,d=t.events||t.usage||void 0!==t.estimatedCost?(0,n.createHash)("sha256").update(JSON.stringify([t.events,t.usage,t.estimatedCost,t.pricingSource])).digest("hex"):void 0,u=t.rawMetadata&&"object"==typeof t.rawMetadata?t.rawMetadata:{},l=JSON.stringify({...u,...d?{importedHistoryDigest:d}:{}}),c=(()=>{let e=t.status?.toUpperCase()??"COMPLETED";return["ACTIVE","RUNNING","STARTING","IN_PROGRESS","WAITING_FOR_ANSWER"].includes(e)?"IN_PROGRESS":"PAUSED"===e?"PAUSED":"CANCELLED"===e||"CANCELED"===e?"CANCELLED":["FAILED","ERROR","SYSTEMERROR"].includes(e)?"FAILED":"COMPLETED"})(),w=await o.runAttempt.findUnique({where:{nativeKey:i},include:{run:!0}});if(w){if("IMPORTED"===w.run.origin){let e=JSON.parse(w.rawMetadataJson??"{}"),n="SESSION"===w.run.kind&&"IN_PROGRESS"===c?await o.worktreeRunLease.findFirst({where:{worktreeId:w.run.worktreeId??"",run:{kind:"SESSION",origin:"MANAGED",status:{in:["IN_PROGRESS","PAUSED"]}}}}):null;await o.$transaction([o.runAttempt.update({where:{id:w.id},data:{rawMetadataJson:d?JSON.stringify(u):l}}),o.agentRun.update({where:{id:w.runId},data:{status:c,phase:n?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",...r?{initialPrompt:r,inputs:{updateMany:{where:{kind:"INITIAL",sequence:0},data:{prompt:r}}}}:{},model:t.model||w.run.model,effort:void 0===t.effort?w.run.effort:R(t.effort,100),finalOutput:void 0===t.finalOutput?w.run.finalOutput:R(t.finalOutput,2e6),branch:t.branch??w.run.branch,jiraIssueKey:S(t.jiraIssueKey),nativeArchivedAt:t.archived?new Date:null,startedAt:N(t.createdAt)??w.run.startedAt,finishedAt:"IN_PROGRESS"===c?null:N(t.updatedAt)??w.run.finishedAt}})]),d&&e.importedHistoryDigest!==d&&await this.importHistory(w.runId,w.id,t),d&&await o.runAttempt.update({where:{id:w.id},data:{rawMetadataJson:l}}),D(w.runId)}continue}let p=await o.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{repository:!0}}}});if(!p||p.codebase.agentId!==e)continue;let h=t.kind?.toUpperCase()==="PLAN"?"PLAN":"SESSION",f="SESSION"===h&&"IN_PROGRESS"===c?await o.worktreeRunLease.findFirst({where:{worktreeId:p.id,run:{kind:"SESSION",origin:"MANAGED",status:{in:["IN_PROGRESS","PAUSED"]}}}}):null,m=await o.$transaction(e=>C(e,h)),I=(0,n.randomUUID)(),E=(0,n.randomUUID)();await o.agentRun.create({data:{id:I,kind:h,displayNumber:m,status:c,phase:f?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",origin:"IMPORTED",provider:a,worktreeId:p.id,repositoryId:p.codebase.repository.id,agentId:e,jiraIssueKey:S(t.jiraIssueKey),repositoryName:p.codebase.repository.name,branch:t.branch??p.branch,model:t.model||"unknown",effort:R(t.effort,100),worktreeConcurrencyLimit:k(h,void 0),initialPrompt:r??"Imported provider history",finalOutput:R(t.finalOutput,2e6),archivedAt:t.archived?new Date:null,nativeArchivedAt:t.archived?new Date:null,startedAt:N(t.createdAt),finishedAt:N(t.updatedAt),createdAt:N(t.createdAt),attempts:{create:{id:E,generation:0,nativeId:t.nativeId,nativeKey:i,status:"IMPORTED",rawMetadataJson:JSON.stringify(u)}},inputs:{create:{id:(0,n.randomUUID)(),sequence:0,kind:"INITIAL",prompt:r??"Imported provider history"}}}}),d&&(await this.importHistory(I,E,t),await o.runAttempt.update({where:{id:E},data:{rawMetadataJson:l}})),D(I),s+=1}return await o.runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:a}},create:{id:(0,n.randomUUID)(),agentId:e,provider:a,status:"IDLE",lastCompletedAt:new Date,importedCount:s},update:{status:"IDLE",lastCompletedAt:new Date,lastError:null,importedCount:{increment:s}}}),s}async providerCatalog(e={}){let t=await (0,i.U)(),r=!!(e.runId||e.worktreeId),n=e.worktreeId??(e.runId?(await t.agentRun.findUnique({where:{id:e.runId},select:{worktreeId:!0}}))?.worktreeId:null),a=e.runId?(await t.agentRun.findUnique({where:{id:e.runId},select:{agentId:!0}}))?.agentId:e.worktreeId?(await t.worktree.findUnique({where:{id:e.worktreeId},select:{codebase:{select:{agentId:!0}}}}))?.codebase.agentId:null,[o,d]=r&&!a?[[],[]]:await Promise.all([t.agent.findMany({where:a?{id:a}:void 0,select:{id:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),t.runProviderSync.findMany({where:a?{agentId:a}:void 0,orderBy:{updatedAt:"desc"}})]);return m.map(e=>{let t=`runs.provider.${e.toLowerCase()}`,r=o.some(r=>{let n=d.find(t=>t.agentId===r.id&&t.provider===e);return!r.disconnectedAt&&!!r.lastSeenAt&&Date.now()-r.lastSeenAt.getTime()<=(0,s.z)(r)&&JSON.parse(r.capabilitiesJson).includes(t)&&n?.status!=="FAILED"}),a=d.find(({provider:t})=>t===e)?.catalogJson,i=a?JSON.parse(a):null,u=n&&i?.worktrees?i.worktrees[n]?.models??[]:i?.models;return{key:e,label:"OPENCODE"===e?"OpenCode":"CLAUDE"===e?"Claude":"Codex",available:r,models:u?.length?u:[{id:"default",label:"Provider default",efforts:["auto","low","medium","high"]}],supportsWebSearch:i?.capabilities?.webSearch??!0,supportsQuestions:i?.capabilities?.questions??!0,supportsImport:i?.capabilities?.import??!0,supportsPause:i?.capabilities?.pause??!0,supportsSteering:i?.capabilities?.steering??!0,supportsResume:i?.capabilities?.resume??!0,supportsNativeDelete:i?.capabilities?.nativeDelete??!0}})}async providerImportStatus(){return(await (0,i.U)()).runProviderSync.findMany({orderBy:[{agentId:"asc"},{provider:"asc"}]})}async reportProviderImportStatus(e,t,r,a,o){let s=g(m,t,"Provider"),d=r.trim().toUpperCase();if(!["SYNCING","IDLE","FAILED"].includes(d))throw Error("Import status is invalid");return(await (0,i.U)()).runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:s}},create:{id:(0,n.randomUUID)(),agentId:e,provider:s,status:d,lastStartedAt:"SYNCING"===d?new Date:void 0,lastCompletedAt:"IDLE"===d?new Date:void 0,lastError:R(a,2e4),catalogJson:void 0===o?void 0:JSON.stringify(o)},update:{status:d,lastStartedAt:"SYNCING"===d?new Date:void 0,lastCompletedAt:"IDLE"===d?new Date:void 0,lastError:"FAILED"===d?R(a,2e4):null,catalogJson:void 0===o?void 0:JSON.stringify(o)}})}subscribeRunList(e){let n=o._H.iterate(o.hu);return(0,r.G)(n,async r=>{if("drafts"===r.runChanged.id)return!1;if(!e.kind&&!e.appId&&!e.provider&&!e.origin&&!e.worktreeId&&!e.workflowId)return!0;let n=await (0,i.U)(),a=await n.agentRun.findUnique({where:{id:r.runChanged.id},select:{worktreeId:!0,workflowRun:{select:{workflowId:!0}},kind:!0,provider:!0,origin:!0,repositoryId:!0}});return!a||(!e.workflowId||a.workflowRun?.workflowId===e.workflowId||!!await (0,t.f)(e.workflowId,a.worktreeId))&&(!e.worktreeId||a.worktreeId===e.worktreeId)&&(!e.kind||a.kind===e.kind)&&(!e.provider||a.provider===e.provider.trim().toUpperCase())&&(!e.origin||a.origin===e.origin)&&(!e.appId||!!a.repositoryId&&!!await n.appRepository.findFirst({where:{appId:e.appId,repositoryId:a.repositoryId},select:{appId:!0}}))})}subscribeRuns(){return o._H.iterate(o.hu)}subscribeRun(e){return o._H.iterate((0,o.k_)(e))}subscribeEvents(e){return o._H.iterate((0,o.zP)(e))}subscribeQuestions(e){return o._H.iterate((0,o.hn)(e))}async requireWorktree(e,t){let r=await (0,i.U)(),n=await r.worktree.findUnique({where:{id:A(e,"Worktree",500)},include:{codebase:{include:{repository:!0,agent:!0}}}});if(!n||"AVAILABLE"!==n.availability)throw Error("Worktree is unavailable");if(t){let e=n.codebase.agent,a=JSON.parse(e.capabilitiesJson);if(e.disconnectedAt||!e.lastSeenAt||Date.now()-e.lastSeenAt.getTime()>(0,s.z)(e)||!a.includes(`runs.provider.${t.toLowerCase()}`))throw Error(`${t} is unavailable on this worktree's agent`);let i=await r.runProviderSync.findUnique({where:{agentId_provider:{agentId:n.codebase.agentId,provider:t}}});if(i?.status==="FAILED")throw Error(`${t} is unavailable: ${i.lastError??"provider capability check failed"}`)}return n}async requireAttachments(e,t){if(!e.length)return;if(e.length>100)throw Error("Too many attachments");let r=await (0,i.U)(),n=await r.runAttachment.findMany({where:{id:{in:e},inputId:null,...t?{OR:[{draftId:t},{draftId:null}]}:{draftId:null}}});if(n.length!==e.length)throw Error("One or more attachments are unavailable");if(n.reduce((e,t)=>e+t.size,0)>h.r)throw Error("Attachments exceed the 100 MB input limit")}}],594875)},489947,e=>{var t=e.i(243783);async function r(e,r){if(!r)return!1;let n=await (0,t.U)();return!!await n.workflowRun.findFirst({where:{workflowId:e,OR:[{status:"QUEUED",worktreeId:r},{agentRuns:{some:{status:"QUEUED",origin:"MANAGED",worktreeId:r}}}]},select:{id:!0}})}e.s(["f",0,r])}]})();
10
+ ${JSON.stringify(t,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),f=await C(i,"SESSION"),m=(0,n.randomUUID)(),I=(0,n.randomUUID)(),E=new Date,y=await i.agentRun.create({data:{id:m,kind:"SESSION",displayNumber:f,status:d?"IN_PROGRESS":"QUEUED",phase:d?"ANSWER_REVISION_QUEUED":"WAITING_FOR_WORKTREE",provider:o.run.provider,worktreeId:o.run.worktreeId,repositoryId:o.run.repositoryId,agentId:o.run.agentId,jiraIssueKey:o.run.jiraIssueKey,repositoryName:o.run.repositoryName,branch:o.run.branch,model:o.run.model,effort:o.run.effort,webSearchEnabled:o.run.webSearchEnabled,worktreeConcurrencyLimit:"SESSION"===o.run.kind?o.run.worktreeConcurrencyLimit:k("SESSION",void 0),initialPrompt:h,parentRunId:o.runId,parentRunNumber:o.run.displayNumber,followUpMode:"ANSWER_REVISION",inputs:{create:{id:I,sequence:0,kind:"ANSWER_REVISION",prompt:h}}}});d&&await i.worktreeRunLease.update({where:{runId:o.runId},data:{runId:m,purpose:"RUN",reservationKey:null,acquiredAt:new Date}}),await i.agentRun.update({where:{id:o.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:E}});let g=await O(i,{runId:m,agentId:o.run.agentId,type:"REVISE_ANSWER",payload:{batchId:e,revisionId:u,inputId:I,stash:!!r,rollback:a,checkpoint:o.checkpoint}});return{batch:o,run:y,command:g,sourceRunId:o.runId,sourceAgentId:o.run.agentId,transfersSlot:d}});return D(s.sourceRunId),D(s.run.id),s.transfersSlot&&v(s.command,s.sourceAgentId),await this.promoteQueuedLaneSafely(s.run.worktreeId,"SESSION"),this.get(s.run.id)}async pendingCommands(e){return await this.reconcileQueuedRuns(e),(await (0,i.U)()).runCommand.findMany({where:{agentId:e,OR:[{status:"RUNNING"},{status:"QUEUED",run:{status:{not:"QUEUED"}}}]},orderBy:[{createdAt:"asc"},{sequence:"asc"}],take:200,include:b})}async claimCommand(e,t){let r=await (0,i.U)(),n=await r.runCommand.findUnique({where:{id:t},select:{agentId:!0,status:!0,type:!0,run:{select:{worktreeId:!0,status:!0}}}});if(!n||n.agentId!==e)throw Error("Run command not found");if("QUEUED"===n.status&&"QUEUED"===n.run.status&&new Set(["START","PLAY_PLAN","CONTINUE","REVISE_ANSWER"]).has(n.type))throw Error("Run command is waiting for the worktree");"QUEUED"===n.status&&n.run.worktreeId&&await this.diskSpace?.assertWorktreeCanStart(n.run.worktreeId),await r.runCommand.updateMany({where:{id:t,agentId:e,status:"QUEUED"},data:{status:"RUNNING",claimedAt:new Date}});let a=await r.runCommand.findUnique({where:{id:t},include:b});if(!a||a.agentId!==e)throw Error("Run command not found");if("RUNNING"!==a.status)throw Error("Run command cannot be claimed");return a}async completeCommand(e,t,r,n){let a=await (0,i.U)(),o=await a.runCommand.findUnique({where:{id:t},include:{run:{select:{worktreeId:!0,kind:!0}}}});if(!o||o.agentId!==e)throw Error("Run command not found");let s=await a.runCommand.update({where:{id:t},data:{status:"SUCCEEDED"===r?"SUCCEEDED":"FAILED",error:R(n,2e4),finishedAt:new Date}});if("DELETE_NATIVE"===s.type&&"SUCCEEDED"===s.status){let e=await a.agentRun.findUnique({where:{id:s.runId},include:{inputs:{include:{attachments:!0}}}});if(e){let t=e.inputs.flatMap(e=>e.attachments.map(({storagePath:e})=>e));await a.agentRun.delete({where:{id:e.id}}),await (0,h.l)(t)}}else if("FAILED"===s.status){"PREPARE_ANSWER_REVISION"===s.type&&await a.worktreeRunLease.deleteMany({where:{runId:s.runId,purpose:E}});let e="ANSWER"===s.type&&await a.runQuestionBatch.count({where:{runId:s.runId,status:"PENDING"}});await a.agentRun.updateMany({where:{id:s.runId,status:{notIn:[...I]}},data:{error:s.error,phase:e?"WAITING_FOR_ANSWER":`${s.type}_FAILED`,...["START","PLAY_PLAN","CONTINUE"].includes(s.type)?{status:"FAILED",finishedAt:new Date}:{},...["PREPARE_ANSWER_REVISION","REVISE_ANSWER"].includes(s.type)?{status:"PAUSED",finishedAt:null}:{}}}),["START","PLAY_PLAN","CONTINUE"].includes(s.type)&&await a.worktreeRunLease.deleteMany({where:{runId:s.runId}})}else if(["PAUSE","CANCEL"].includes(s.type)){let e="CANCEL"===s.type;await a.agentRun.updateMany({where:{id:s.runId,status:{notIn:[...I]}},data:{status:e?"CANCELLED":"PAUSED",phase:e?"CANCELLED":"PAUSED",finishedAt:e?new Date:null}}),e&&await a.worktreeRunLease.deleteMany({where:{runId:s.runId}})}return D(s.runId),o.run.worktreeId&&("PLAN"===o.run.kind||"SESSION"===o.run.kind)&&await this.promoteQueuedLaneSafely(o.run.worktreeId,o.run.kind),s}async beginAttempt(e,t,r){let a=await (0,i.U)(),o=await a.agentRun.findUnique({where:{id:t},include:{attempts:!0}});if(!o||o.agentId!==e)throw Error("Run not found for this agent");if("QUEUED"===o.status)throw Error("Run is waiting for the worktree");if(I.has(o.status))throw Error("Run is already finished");let s=o.attempts.length,d=await a.runAttempt.create({data:{id:(0,n.randomUUID)(),runId:t,generation:s,nativeId:r||null,nativeKey:r?`${e}:${o.provider}:${r}`:null,status:"RUNNING"}});return await a.agentRun.update({where:{id:t},data:{phase:"RUNNING",startedAt:o.startedAt??new Date}}),D(t),d}async updateAttemptNativeId(e,t,r,n){let a=await (0,i.U)(),o=await a.$transaction(async a=>{let i=await a.runAttempt.findUnique({where:{id:t},include:{run:!0}});if(!i||i.run.agentId!==e)throw Error("Attempt not found");let o=`${e}:${i.run.provider}:${r}`,s=await a.runAttempt.findUnique({where:{nativeKey:o}});if(s&&s.id!==t){if(s.runId!==i.runId)throw Error("Native provider session belongs to another run");await a.runAttempt.update({where:{id:s.id},data:{nativeKey:null}})}let d=await a.runAttempt.update({where:{id:t},data:{nativeId:r,nativeKey:o}});return n&&await a.agentRun.update({where:{id:i.runId},data:{providerVersion:n}}),d});return D(o.runId),o}async appendEvents(e,t,r,n){let a=await (0,i.U)(),s=await a.agentRun.findUnique({where:{id:t}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");let d=n.slice(0,500).map(e=>{let n=A(e.summary,"Event summary",2e3);return{id:e.id,runId:t,attemptId:r,sequence:e.sequence,type:A(e.type,"Event type",100).toUpperCase(),summary:n,searchText:R(e.searchText,1e5)??n,detailMarkdown:R(e.detailMarkdown,5e5),rawJson:void 0===e.raw?null:JSON.stringify(e.raw),createdAt:N(e.createdAt)}});if(!d.length)return[];let u=await a.$transaction(async e=>{let n=new Set((await e.runEvent.findMany({where:{id:{in:d.map(e=>e.id)}},select:{id:!0}})).map(({id:e})=>e)),a=d.filter(e=>!n.has(e.id));if(a.length){await e.runEvent.createMany({data:a});let n=a.filter(e=>e.type.includes("TOOL")&&!e.type.includes("QUESTION")).map(e=>({id:`event:${e.id}`,runId:t,attemptId:r,sequence:e.sequence,name:e.summary.split(/[\s:(]/,1)[0]||e.type,status:e.type.includes("FAIL")||e.type.includes("ERROR")?"FAILED":e.type.includes("COMPLETE")||e.type.includes("RESULT")?"COMPLETED":"OBSERVED",inputJson:e.rawJson,error:e.type.includes("FAIL")||e.type.includes("ERROR")?e.summary:null,finishedAt:e.createdAt}));n.length&&(await e.runToolCall.createMany({data:n}),await e.agentRun.update({where:{id:t},data:{toolCallCount:await e.runToolCall.count({where:{runId:t}})}}))}return e.runEvent.findMany({where:{id:{in:d.map(e=>e.id)}},orderBy:{sequence:"asc"}})});for(let e of u)o._H.publish((0,o.zP)(t),{runEventAdded:e});return D(t),u}async reportQuestion(e,t,r,a,s,d){if(!d.length||d.some(e=>!e.field)&&d.length>10||d.length>200)throw Error("Question batch is invalid");let u=await (0,i.U)(),l=await u.$transaction(async i=>{let o=await i.agentRun.findUnique({where:{id:t},include:{worktree:!0}});if(!o||o.agentId!==e)throw Error("Run not found for this agent");if(a){let e=await i.runQuestionBatch.findUnique({where:{runId_nativeRequestId:{runId:t,nativeRequestId:a}},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}});if(e)return{batch:e,notification:null}}let u=(0,n.randomUUID)(),l=await i.runQuestionBatch.create({data:{id:u,runId:t,attemptId:r,nativeRequestId:a,eventSequence:Number.isInteger(s)&&(s??-1)>=-1?s:null,questions:{create:d.map((e,t)=>({id:`${u}:${t}:${e.id||"question"}`,position:t,header:R(e.header,200),prompt:A(e.prompt,"Question",1e4),multiSelect:!!e.multiSelect,allowCustom:!1!==e.allowCustom,fieldJson:e.field?JSON.stringify(c(e.field)):null,options:{create:(e.options??[]).map((e,t)=>({id:(0,n.randomUUID)(),position:t,label:A(e.label,"Option label",500),description:R(e.description,2e3)}))}}))}},include:{questions:{include:{options:!0}}}});return await i.agentRun.update({where:{id:t},data:{phase:"WAITING_FOR_ANSWER"}}),{batch:l,notification:this.notifications?await this.notifications.recordInTransaction(i,{dedupeKey:`run:${t}:question:${u}`,typeKey:"RUN_NEEDS_ANSWER",title:`${"PLAN"===o.kind?"Plan":"Session"} #${o.displayNumber} needs an answer`,body:d[0].prompt.slice(0,1e3),href:U(o),resourceKind:o.kind,resourceId:o.id,worktreeId:o.worktreeId,highlightColor:o.worktree?.highlightColor}):null}});return this.notifications?.created(l.notification),D(t),o._H.publish((0,o.hn)(t),{runQuestionChanged:{id:l.batch.id,runId:t}}),l.batch}async reportUsage(e,t,r,a){let o=await (0,i.U)(),s=await o.agentRun.findUnique({where:{id:t}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");let d=e=>Number.isFinite(e)&&(e??0)>=0?Math.floor(e):0;return await o.$transaction(async e=>{let i=await e.runModelUsage.findFirst({where:{runId:t,attemptId:r,model:a.model}}),o={inputTokens:d(a.inputTokens),outputTokens:d(a.outputTokens),reasoningTokens:d(a.reasoningTokens),cacheReadTokens:d(a.cacheReadTokens),cacheWriteTokens:d(a.cacheWriteTokens),estimatedCost:a.estimatedCost??null};i?await e.runModelUsage.update({where:{id:i.id},data:o}):await e.runModelUsage.create({data:{id:(0,n.randomUUID)(),runId:t,attemptId:r,model:a.model,...o}});let s=await e.runModelUsage.aggregate({where:{runId:t},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}}),u=await e.runModelUsage.findMany({where:{runId:t,estimatedCost:{not:null}},select:{model:!0,estimatedCost:!0}}),l=u.find(({model:e})=>"estimated-total"===e)?.estimatedCost,c=await e.runToolCall.count({where:{runId:t}});await e.agentRun.update({where:{id:t},data:{inputTokens:s._sum.inputTokens??0,outputTokens:s._sum.outputTokens??0,reasoningTokens:s._sum.reasoningTokens??0,cacheReadTokens:s._sum.cacheReadTokens??0,cacheWriteTokens:s._sum.cacheWriteTokens??0,toolCallCount:Math.max(c,d(a.toolCallCount)),estimatedCost:l??(u.length?u.reduce((e,t)=>e+(t.estimatedCost??0),0):null),pricingSource:R(a.pricingSource,200),pricingUpdatedAt:new Date}})}),D(t),this.get(t)}async finishAttempt(e,t,r){let n=r.status.toUpperCase();if(!["PAUSED","COMPLETED","CANCELLED","FAILED"].includes(n))throw Error("Run completion status is invalid");let a=await (0,i.U)(),o=await a.$transaction(async a=>{let i=await a.runAttempt.findUnique({where:{id:t},include:{run:{include:{worktree:!0}}}});if(!i||i.run.agentId!==e)throw Error("Attempt not found");let o=I.has(i.run.status)?i.run.status:n;await a.runAttempt.update({where:{id:t},data:{status:o,finishedAt:new Date}}),await a.runQuestionBatch.updateMany({where:{runId:i.runId,status:"PENDING"},data:{status:"SUPERSEDED",supersededAt:new Date}});let s=I.has(i.run.status)?i.run:await a.agentRun.update({where:{id:i.runId},data:{status:n,phase:r.phase?.trim().toUpperCase()||n,finalOutput:R(r.finalOutput,2e6),error:R(r.error,2e4),finishedAt:"PAUSED"===n?null:new Date}});I.has(o)&&await a.worktreeRunLease.deleteMany({where:{runId:s.id,purpose:{not:E}}});let d="COMPLETED"===o?"RUN_COMPLETED":"FAILED"===o?"RUN_FAILED":"CANCELLED"===o?"RUN_CANCELLED":"RECOVERY_PAUSED"===r.phase?"RUN_RECOVERY_PAUSED":null,u=d&&this.notifications?await this.notifications.recordInTransaction(a,{dedupeKey:`run:${s.id}:status:${o}:${i.generation}`,typeKey:d,title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} ${o.toLowerCase()}`,body:r.error||r.finalOutput?.slice(0,1e3)||`The ${s.kind.toLowerCase()} is ${o.toLowerCase()}.`,href:U(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:i.run.worktree?.highlightColor}):null;return{run:s,notification:u}});return this.notifications?.created(o.notification),D(o.run.id),I.has(o.run.status)&&o.run.worktreeId&&("PLAN"===o.run.kind||"SESSION"===o.run.kind)&&await this.promoteQueuedLaneSafely(o.run.worktreeId,o.run.kind),this.get(o.run.id)}async reportCheckpoint(e,t,r,a){let o=await (0,i.U)(),s=await o.agentRun.findUnique({where:{id:t}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");if(a.questionBatchId){let e=await o.runQuestionBatch.findUnique({where:{id:a.questionBatchId}});if(!e||e.runId!==t)throw Error("Question batch not found")}let d=await o.runCheckpoint.create({data:{id:(0,n.randomUUID)(),runId:t,attemptId:r,questionBatchId:a.questionBatchId??null,kind:A(a.kind,"Checkpoint kind",100).toUpperCase(),headSha:R(a.headSha,100),branch:R(a.branch,500),upstreamSha:R(a.upstreamSha,100),indexTree:R(a.indexTree,100),worktreeTree:R(a.worktreeTree,100),refName:R(a.refName,1e3),manifestJson:R(a.manifestJson,2e6),diffSummary:R(a.diffSummary,5e5),diffPatch:R(a.diffPatch,2e6),stashRef:R(a.stashRef,1e3)}});return D(t),d}async reportAnswerRevisionPreview(e,t,r,n){let a=await (0,i.U)(),s=await a.runQuestionBatch.findUnique({where:{id:t},include:{run:!0}});if(!s?.runId||!s.run||s.run.agentId!==e||"MANAGED"!==s.run.origin)throw Error("Question batch not found for this agent");let d=await a.runQuestionBatch.update({where:{id:t},data:{revisionPreparedAt:new Date,rollbackPatch:r.slice(0,2e6),pushedCommitWarning:R(n,2e4)},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}}}});return D(s.runId),o._H.publish((0,o.hn)(s.runId),{runQuestionChanged:{id:t,runId:s.runId}}),d}async applyAnswerRevision(e,t,r,n){let a=await (0,i.U)(),o=await a.$transaction(async a=>{let i=await a.runQuestionBatch.findUnique({where:{id:t},include:{run:!0,attempt:!0}}),o=await a.runAttempt.findUnique({where:{id:n},include:{run:!0}}),s=await a.runAnswerRevision.findUnique({where:{id:r}});if(!i?.runId||!i.run||i.run.agentId!==e||!i.attempt||!o||o.run.parentRunId!==i.runId||"ANSWER_REVISION"!==o.run.followUpMode||!s||s.batchId!==t)throw Error("Answer revision cannot be applied");let d=new Date,u=(await a.runAttempt.findMany({where:{runId:i.runId,generation:{gte:i.attempt.generation}},select:{id:!0}})).map(({id:e})=>e);await a.runAttempt.updateMany({where:{id:{in:u}},data:{status:"SUPERSEDED",supersededAt:d,finishedAt:d}}),await a.runEvent.updateMany({where:{runId:i.runId,sequence:{gt:i.eventSequence??-1},supersededAt:null},data:{supersededAt:d}}),await a.runToolCall.updateMany({where:{attemptId:{in:u},supersededAt:null},data:{supersededAt:d}}),await a.runModelUsage.updateMany({where:{attemptId:{in:u}},data:{superseded:!0}});let l=(await a.runQuestionBatch.findMany({where:{runId:i.runId,createdAt:{gt:i.createdAt}},select:{id:!0}})).map(({id:e})=>e);return await a.runQuestionBatch.updateMany({where:{id:{in:l}},data:{status:"SUPERSEDED",supersededAt:d}}),await a.runAnswerRevision.updateMany({where:{OR:[{batchId:{in:l}},{batchId:t,id:{not:r}}],supersededAt:null},data:{supersededAt:d}}),await a.runAnswerRevision.update({where:{id:r},data:{replacementAttemptId:n}}),await a.agentRun.update({where:{id:i.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:d}}),await a.agentRun.update({where:{id:o.runId},data:{status:"IN_PROGRESS",phase:"RUNNING"}}),{sourceRunId:i.runId,replacementRunId:o.runId}});return D(o.sourceRunId),D(o.replacementRunId),this.get(o.replacementRunId)}async importHistory(e,t,r){let a=await (0,i.U)();await a.$transaction(async a=>{if(r.events){let n=r.events.map((n,a)=>({id:`${t}:import:${n.id}`,runId:e,attemptId:t,sequence:a,type:A(n.type,"Event type",100).toUpperCase(),summary:A(n.summary,"Event summary",2e3),searchText:(n.searchText??JSON.stringify(n.raw??n.summary)).slice(0,1e5),detailMarkdown:n.detailMarkdown?.slice(0,5e5)??null,rawJson:void 0===n.raw?null:JSON.stringify(n.raw),createdAt:N(n.createdAt)??N(r.createdAt)??new Date}));await a.runToolCall.deleteMany({where:{runId:e,attemptId:t}}),await a.runEvent.deleteMany({where:{runId:e,attemptId:t}});for(let e=0;e<n.length;e+=500)await a.runEvent.createMany({data:n.slice(e,e+500)});let i=new Map;for(let e of n){let t=e.rawJson?JSON.parse(e.rawJson):{};if("user"===t.type&&Array.isArray(t.message?.content))for(let r of t.message.content)"tool_result"===r.type&&"string"==typeof r.tool_use_id&&i.set(r.tool_use_id,{content:r.content??t.tool_use_result??null,isError:!0===r.is_error,createdAt:e.createdAt})}let o=n.flatMap(r=>{let n=r.rawJson?JSON.parse(r.rawJson):{},a="assistant"===n.type&&Array.isArray(n.message?.content)?n.message.content.find(e=>"tool_use"===e.type):void 0;if(a){let n=i.get(String(a.id));return[{id:`event:${r.id}`,runId:e,attemptId:t,sequence:r.sequence,name:String(a.name??"Tool"),status:n?n.isError?"FAILED":"COMPLETED":"OBSERVED",inputJson:r.rawJson,outputJson:JSON.stringify(n?.content??null),error:n?.isError?"string"==typeof n.content?n.content:JSON.stringify(n.content):null,startedAt:r.createdAt,finishedAt:n?.createdAt??null}]}let o=n.params?.item,s=n.properties?.part,d=o&&["commandExecution","fileChange","mcpToolCall","dynamicToolCall","webSearch"].includes(o.type),u="message.part.updated"===n.type&&s?.type==="tool";if(!d&&!u)return[];let l=u?s.state??{}:o,c=String(l.status??"COMPLETED").toUpperCase(),w=u&&"number"==typeof l.time?.start?new Date(l.time.start):r.createdAt,p=u?"number"==typeof l.time?.end?new Date(l.time.end):null:["INPROGRESS","IN_PROGRESS","RUNNING","PENDING"].includes(c)?null:r.createdAt;return[{id:`event:${r.id}`,runId:e,attemptId:t,sequence:r.sequence,name:u?s.tool??s.name??"tool":o.tool??o.command??o.type,status:"ERROR"===c?"FAILED":"INPROGRESS"===c?"IN_PROGRESS":c,inputJson:r.rawJson,outputJson:JSON.stringify(u?l.result??l.output??null:o.result??o.aggregatedOutput??null),error:l.error?"string"==typeof l.error?l.error:JSON.stringify(l.error):null,startedAt:w,finishedAt:p}]});for(let e=0;e<o.length;e+=500)await a.runToolCall.createMany({data:o.slice(e,e+500)});await a.agentRun.update({where:{id:e},data:{toolCallCount:await a.runToolCall.count({where:{runId:e}})}})}if(r.usage){for(let i of(await a.runModelUsage.deleteMany({where:{runId:e,attemptId:t}}),r.usage)){let r=e=>Number.isFinite(e)&&(e??0)>=0?Math.floor(e):0;await a.runModelUsage.create({data:{id:(0,n.randomUUID)(),runId:e,attemptId:t,model:A(i.model,"Model",500),inputTokens:r(i.inputTokens),outputTokens:r(i.outputTokens),reasoningTokens:r(i.reasoningTokens),cacheReadTokens:r(i.cacheReadTokens),cacheWriteTokens:r(i.cacheWriteTokens),estimatedCost:i.estimatedCost??null}})}let i=await a.runModelUsage.aggregate({where:{runId:e},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}});await a.agentRun.update({where:{id:e},data:{inputTokens:i._sum.inputTokens??0,outputTokens:i._sum.outputTokens??0,reasoningTokens:i._sum.reasoningTokens??0,cacheReadTokens:i._sum.cacheReadTokens??0,cacheWriteTokens:i._sum.cacheWriteTokens??0,estimatedCost:r.estimatedCost??(r.usage.length&&r.usage.every(e=>null!=e.estimatedCost)?i._sum.estimatedCost??null:null),pricingSource:R(r.pricingSource??[...new Set(r.usage.map(e=>e.pricingSource).filter(Boolean))].join(", "),200),pricingUpdatedAt:new Date}})}else void 0!==r.estimatedCost&&await a.agentRun.update({where:{id:e},data:{estimatedCost:r.estimatedCost,pricingSource:R(r.pricingSource,200),pricingUpdatedAt:new Date}})})}async importRuns(e,t,r){let a=g(m,t,"Provider"),o=await (0,i.U)(),s=0;for(let t of r){let r=t.prompt?.trim()||void 0,i=`${e}:${a}:${A(t.nativeId,"Native ID",500)}`,d=t.events||t.usage||void 0!==t.estimatedCost?(0,n.createHash)("sha256").update(JSON.stringify([t.events,t.usage,t.estimatedCost,t.pricingSource])).digest("hex"):void 0,u=t.rawMetadata&&"object"==typeof t.rawMetadata?t.rawMetadata:{},l=(0,n.createHash)("sha256").update(JSON.stringify({...t,events:d,usage:void 0})).digest("hex"),c=JSON.stringify({...u,...d?{importedHistoryDigest:d}:{},importedSnapshotDigest:l}),w=(()=>{let e=t.status?.toUpperCase()??"COMPLETED";return["ACTIVE","RUNNING","STARTING","IN_PROGRESS","WAITING_FOR_ANSWER"].includes(e)?"IN_PROGRESS":"PAUSED"===e?"PAUSED":"CANCELLED"===e||"CANCELED"===e?"CANCELLED":["FAILED","ERROR","SYSTEMERROR"].includes(e)?"FAILED":"COMPLETED"})(),p=await o.runAttempt.findUnique({where:{nativeKey:i},include:{run:!0}});if(p){if("IMPORTED"===p.run.origin){let e=JSON.parse(p.rawMetadataJson??"{}"),n=("SESSION"===p.run.kind&&"IN_PROGRESS"===w?await o.worktreeRunLease.findFirst({where:{worktreeId:p.run.worktreeId??"",run:{kind:"SESSION",origin:"MANAGED",status:{in:["IN_PROGRESS","PAUSED"]}}}}):null)?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED";if(e.importedSnapshotDigest===l&&p.run.phase===n)continue;let a=d&&e.importedHistoryDigest!==d;await o.$transaction([o.runAttempt.update({where:{id:p.id},data:{rawMetadataJson:a?JSON.stringify(u):c}}),o.agentRun.update({where:{id:p.runId},data:{status:w,phase:n,...r?{initialPrompt:r,inputs:{updateMany:{where:{kind:"INITIAL",sequence:0},data:{prompt:r}}}}:{},model:t.model||p.run.model,effort:void 0===t.effort?p.run.effort:R(t.effort,100),finalOutput:void 0===t.finalOutput?p.run.finalOutput:R(t.finalOutput,2e6),branch:t.branch??p.run.branch,jiraIssueKey:S(t.jiraIssueKey),nativeArchivedAt:t.archived?p.run.nativeArchivedAt??new Date:null,startedAt:N(t.createdAt)??p.run.startedAt,finishedAt:"IN_PROGRESS"===w?null:N(t.updatedAt)??p.run.finishedAt}})]),a&&(await this.importHistory(p.runId,p.id,t),await o.runAttempt.update({where:{id:p.id},data:{rawMetadataJson:c}})),D(p.runId)}continue}let h=await o.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{repository:!0}}}});if(!h||h.codebase.agentId!==e)continue;let f=t.kind?.toUpperCase()==="PLAN"?"PLAN":"SESSION",m="SESSION"===f&&"IN_PROGRESS"===w?await o.worktreeRunLease.findFirst({where:{worktreeId:h.id,run:{kind:"SESSION",origin:"MANAGED",status:{in:["IN_PROGRESS","PAUSED"]}}}}):null,I=await o.$transaction(e=>C(e,f)),E=(0,n.randomUUID)(),y=(0,n.randomUUID)();await o.agentRun.create({data:{id:E,kind:f,displayNumber:I,status:w,phase:m?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",origin:"IMPORTED",provider:a,worktreeId:h.id,repositoryId:h.codebase.repository.id,agentId:e,jiraIssueKey:S(t.jiraIssueKey),repositoryName:h.codebase.repository.name,branch:t.branch??h.branch,model:t.model||"unknown",effort:R(t.effort,100),worktreeConcurrencyLimit:k(f,void 0),initialPrompt:r??"Imported provider history",finalOutput:R(t.finalOutput,2e6),archivedAt:t.archived?new Date:null,nativeArchivedAt:t.archived?new Date:null,startedAt:N(t.createdAt),finishedAt:N(t.updatedAt),createdAt:N(t.createdAt),attempts:{create:{id:y,generation:0,nativeId:t.nativeId,nativeKey:i,status:"IMPORTED",rawMetadataJson:d?JSON.stringify(u):c}},inputs:{create:{id:(0,n.randomUUID)(),sequence:0,kind:"INITIAL",prompt:r??"Imported provider history"}}}}),d&&(await this.importHistory(E,y,t),await o.runAttempt.update({where:{id:y},data:{rawMetadataJson:c}})),D(E),s+=1}return await o.runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:a}},create:{id:(0,n.randomUUID)(),agentId:e,provider:a,status:"IDLE",lastCompletedAt:new Date,importedCount:s},update:{status:"IDLE",lastCompletedAt:new Date,lastError:null,importedCount:{increment:s}}}),s}async providerCatalog(e={}){let t=await (0,i.U)(),r=!!(e.runId||e.worktreeId),n=e.worktreeId??(e.runId?(await t.agentRun.findUnique({where:{id:e.runId},select:{worktreeId:!0}}))?.worktreeId:null),a=e.runId?(await t.agentRun.findUnique({where:{id:e.runId},select:{agentId:!0}}))?.agentId:e.worktreeId?(await t.worktree.findUnique({where:{id:e.worktreeId},select:{codebase:{select:{agentId:!0}}}}))?.codebase.agentId:null,[o,d]=r&&!a?[[],[]]:await Promise.all([t.agent.findMany({where:a?{id:a}:void 0,select:{id:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),t.runProviderSync.findMany({where:a?{agentId:a}:void 0,orderBy:{updatedAt:"desc"}})]);return m.map(e=>{let t=`runs.provider.${e.toLowerCase()}`,r=o.some(r=>{let n=d.find(t=>t.agentId===r.id&&t.provider===e);return!r.disconnectedAt&&!!r.lastSeenAt&&Date.now()-r.lastSeenAt.getTime()<=(0,s.z)(r)&&JSON.parse(r.capabilitiesJson).includes(t)&&n?.status!=="FAILED"}),a=d.find(({provider:t})=>t===e)?.catalogJson,i=a?JSON.parse(a):null,u=n&&i?.worktrees?i.worktrees[n]?.models??[]:i?.models;return{key:e,label:"OPENCODE"===e?"OpenCode":"CLAUDE"===e?"Claude":"Codex",available:r,models:u?.length?u:[{id:"default",label:"Provider default",efforts:["auto","low","medium","high"]}],supportsWebSearch:i?.capabilities?.webSearch??!0,supportsQuestions:i?.capabilities?.questions??!0,supportsImport:i?.capabilities?.import??!0,supportsPause:i?.capabilities?.pause??!0,supportsSteering:i?.capabilities?.steering??!0,supportsResume:i?.capabilities?.resume??!0,supportsNativeDelete:i?.capabilities?.nativeDelete??!0}})}async providerImportStatus(){return(await (0,i.U)()).runProviderSync.findMany({orderBy:[{agentId:"asc"},{provider:"asc"}]})}async reportProviderImportStatus(e,t,r,a,o){let s=g(m,t,"Provider"),d=r.trim().toUpperCase();if(!["SYNCING","IDLE","FAILED"].includes(d))throw Error("Import status is invalid");return(await (0,i.U)()).runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:s}},create:{id:(0,n.randomUUID)(),agentId:e,provider:s,status:d,lastStartedAt:"SYNCING"===d?new Date:void 0,lastCompletedAt:"IDLE"===d?new Date:void 0,lastError:R(a,2e4),catalogJson:void 0===o?void 0:JSON.stringify(o)},update:{status:d,lastStartedAt:"SYNCING"===d?new Date:void 0,lastCompletedAt:"IDLE"===d?new Date:void 0,lastError:"FAILED"===d?R(a,2e4):null,catalogJson:void 0===o?void 0:JSON.stringify(o)}})}subscribeRunList(e){let n=o._H.iterate(o.hu);return(0,r.G)(n,async r=>{if("drafts"===r.runChanged.id)return!1;if(!e.kind&&!e.appId&&!e.provider&&!e.origin&&!e.worktreeId&&!e.workflowId)return!0;let n=await (0,i.U)(),a=await n.agentRun.findUnique({where:{id:r.runChanged.id},select:{worktreeId:!0,workflowRun:{select:{workflowId:!0}},kind:!0,provider:!0,origin:!0,repositoryId:!0}});return!a||(!e.workflowId||a.workflowRun?.workflowId===e.workflowId||!!await (0,t.f)(e.workflowId,a.worktreeId))&&(!e.worktreeId||a.worktreeId===e.worktreeId)&&(!e.kind||a.kind===e.kind)&&(!e.provider||a.provider===e.provider.trim().toUpperCase())&&(!e.origin||a.origin===e.origin)&&(!e.appId||!!a.repositoryId&&!!await n.appRepository.findFirst({where:{appId:e.appId,repositoryId:a.repositoryId},select:{appId:!0}}))})}subscribeRuns(){return o._H.iterate(o.hu)}subscribeRun(e){return o._H.iterate((0,o.k_)(e))}subscribeEvents(e){return o._H.iterate((0,o.zP)(e))}subscribeQuestions(e){return o._H.iterate((0,o.hn)(e))}async requireWorktree(e,t){let r=await (0,i.U)(),n=await r.worktree.findUnique({where:{id:A(e,"Worktree",500)},include:{codebase:{include:{repository:!0,agent:!0}}}});if(!n||"AVAILABLE"!==n.availability)throw Error("Worktree is unavailable");if(t){let e=n.codebase.agent,a=JSON.parse(e.capabilitiesJson);if(e.disconnectedAt||!e.lastSeenAt||Date.now()-e.lastSeenAt.getTime()>(0,s.z)(e)||!a.includes(`runs.provider.${t.toLowerCase()}`))throw Error(`${t} is unavailable on this worktree's agent`);let i=await r.runProviderSync.findUnique({where:{agentId_provider:{agentId:n.codebase.agentId,provider:t}}});if(i?.status==="FAILED")throw Error(`${t} is unavailable: ${i.lastError??"provider capability check failed"}`)}return n}async requireAttachments(e,t){if(!e.length)return;if(e.length>100)throw Error("Too many attachments");let r=await (0,i.U)(),n=await r.runAttachment.findMany({where:{id:{in:e},inputId:null,...t?{OR:[{draftId:t},{draftId:null}]}:{draftId:null}}});if(n.length!==e.length)throw Error("One or more attachments are unavailable");if(n.reduce((e,t)=>e+t.size,0)>h.r)throw Error("Attachments exceed the 100 MB input limit")}}],594875)},489947,e=>{var t=e.i(243783);async function r(e,r){if(!r)return!1;let n=await (0,t.U)();return!!await n.workflowRun.findFirst({where:{workflowId:e,OR:[{status:"QUEUED",worktreeId:r},{agentRuns:{some:{status:"QUEUED",origin:"MANAGED",worktreeId:r}}}]},select:{id:!0}})}e.s(["f",0,r])}]})();
11
11
 
12
12
  //# sourceMappingURL=src_services_0shipcub2yhy6._.js.map
@@ -1,10 +1,19 @@
1
1
  (()=>{"use strict";module.exports=[707656,a=>{var b=a.i(164831);let c={name:"circle-off",size:24,node:[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M8.35 2.69A10 10 0 0 1 21.3 15.65",key:"1pfsoa"}],["path",{d:"M19.08 19.08A10 10 0 1 1 4.92 4.92",key:"1ablyi"}]]};c.node;let d=(0,b.f)(c);a.s(["f",0,d],707656)},536670,a=>{var b=a.i(164831);let c={name:"download",size:24,node:[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]};c.node;let d=(0,b.f)(c);a.s(["f",0,d],536670)},879675,a=>{var b=a.i(164831);let c={name:"save",size:24,node:[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]};c.node;let d=(0,b.f)(c);a.s(["f",0,d],879675)},639466,a=>{var b=a.i(164831);let c={name:"settings-2",size:24,node:[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]};c.node;let d=(0,b.f)(c);a.s(["f",0,d],639466)},988146,774573,a=>{var b=a.i(187924),c=a.i(872233);a.s(["f",0,function({person:a}){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(c.E,{size:"sm",children:[a.avatarUrl&&(0,b.jsx)(c.Z,{alt:"",src:a.avatarUrl}),(0,b.jsx)(c.b,{children:(a.name||a.username).slice(0,2).toUpperCase()})]}),(0,b.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,b.jsx)("span",{className:"block truncate text-sm font-medium",children:a.name||a.username}),(0,b.jsxs)("span",{className:"block truncate text-xs text-muted-foreground",children:["@",a.username]})]})]})}],988146);let d="id username name avatarUrl url",e=`
2
+ worktreeId requestId requestUrl provider requestOpen
3
+ currentReviewerIds approvedReviewerIds issues discoveryComplete
4
+ reviewers { ${d} }
5
+ requirements {
6
+ id name isRequired patterns requiredApprovals
7
+ groups { key name kind }
8
+ eligibleReviewerIds approvedReviewerIds requestedReviewerIds
9
+ }
10
+ `,f=`
2
11
  repositoryId provider ref defaultRef refs discoveryComplete issues
3
12
  pools {
4
13
  key name kind selectedReviewerIds unavailableReviewerIds
5
14
  candidates { ${d} }
6
15
  }
7
- `,f=`
16
+ `,g=`
8
17
  worktreeId requestId requestUrl provider requestOpen authorId
9
18
  currentReviewerIds approvedReviewerIds selectedReviewerIds issues discoveryComplete
10
19
  reviewers { ${d} }
@@ -12,6 +21,6 @@
12
21
  id name poolKeys requiredApprovals eligibleReviewerIds candidateReviewerIds
13
22
  approvedReviewerIds requestedReviewerIds
14
23
  }
15
- `;a.s(["E",0,e,"J",0,f,"x",0,function(a,b){return a.includes(b)?a.filter(a=>a!==b):[...a,b]}],774573)}]})();
24
+ `;a.s(["E",0,f,"J",0,g,"o",0,e,"x",0,function(a,b){return a.includes(b)?a.filter(a=>a!==b):[...a,b]}],774573)}]})();
16
25
 
17
26
  //# sourceMappingURL=_003c9h921os5x._.js.map