@ai-development-environment/server 0.0.63 → 0.0.64

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 (611) hide show
  1. package/package.json +1 -1
  2. package/standalone/.next/BUILD_ID +1 -1
  3. package/standalone/.next/app-path-routes-manifest.json +0 -1
  4. package/standalone/.next/build-manifest.json +3 -3
  5. package/standalone/.next/prerender-manifest.json +3 -3
  6. package/standalone/.next/routes-manifest.json +0 -8
  7. package/standalone/.next/server/app/[locale]/actions/page.js.nft.json +1 -1
  8. package/standalone/.next/server/app/[locale]/actions/page_client-reference-manifest.js +1 -1
  9. package/standalone/.next/server/app/[locale]/actions-cache/page.js.nft.json +1 -1
  10. package/standalone/.next/server/app/[locale]/actions-cache/page_client-reference-manifest.js +1 -1
  11. package/standalone/.next/server/app/[locale]/agents/[id]/page.js.nft.json +1 -1
  12. package/standalone/.next/server/app/[locale]/agents/[id]/page_client-reference-manifest.js +1 -1
  13. package/standalone/.next/server/app/[locale]/agents/page.js.nft.json +1 -1
  14. package/standalone/.next/server/app/[locale]/agents/page_client-reference-manifest.js +1 -1
  15. package/standalone/.next/server/app/[locale]/analytics-events/page.js.nft.json +1 -1
  16. package/standalone/.next/server/app/[locale]/analytics-events/page_client-reference-manifest.js +1 -1
  17. package/standalone/.next/server/app/[locale]/build-data/page.js.nft.json +1 -1
  18. package/standalone/.next/server/app/[locale]/build-data/page_client-reference-manifest.js +1 -1
  19. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page.js.nft.json +1 -1
  20. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page_client-reference-manifest.js +1 -1
  21. package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route.js +1 -1
  22. package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route.js.nft.json +1 -1
  23. package/standalone/.next/server/app/[locale]/builds/[buildId]/page.js.nft.json +1 -1
  24. package/standalone/.next/server/app/[locale]/builds/[buildId]/page_client-reference-manifest.js +1 -1
  25. package/standalone/.next/server/app/[locale]/builds/page.js.nft.json +1 -1
  26. package/standalone/.next/server/app/[locale]/builds/page_client-reference-manifest.js +1 -1
  27. package/standalone/.next/server/app/[locale]/codebases/[codebaseId]/page.js.nft.json +1 -1
  28. package/standalone/.next/server/app/[locale]/codebases/[codebaseId]/page_client-reference-manifest.js +1 -1
  29. package/standalone/.next/server/app/[locale]/codebases/page.js.nft.json +1 -1
  30. package/standalone/.next/server/app/[locale]/codebases/page_client-reference-manifest.js +1 -1
  31. package/standalone/.next/server/app/[locale]/codebases/repositories/[repositoryId]/page.js.nft.json +1 -1
  32. package/standalone/.next/server/app/[locale]/codebases/repositories/[repositoryId]/page_client-reference-manifest.js +1 -1
  33. package/standalone/.next/server/app/[locale]/commands/[commandId]/edit/page.js.nft.json +1 -1
  34. package/standalone/.next/server/app/[locale]/commands/[commandId]/edit/page_client-reference-manifest.js +1 -1
  35. package/standalone/.next/server/app/[locale]/commands/new/page.js.nft.json +1 -1
  36. package/standalone/.next/server/app/[locale]/commands/new/page_client-reference-manifest.js +1 -1
  37. package/standalone/.next/server/app/[locale]/commands/page.js.nft.json +1 -1
  38. package/standalone/.next/server/app/[locale]/commands/page_client-reference-manifest.js +1 -1
  39. package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route.js +1 -1
  40. package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route.js.nft.json +1 -1
  41. package/standalone/.next/server/app/[locale]/commands/runs/[runId]/page.js.nft.json +1 -1
  42. package/standalone/.next/server/app/[locale]/commands/runs/[runId]/page_client-reference-manifest.js +1 -1
  43. package/standalone/.next/server/app/[locale]/comments/page.js.nft.json +1 -1
  44. package/standalone/.next/server/app/[locale]/comments/page_client-reference-manifest.js +1 -1
  45. package/standalone/.next/server/app/[locale]/console-logs/page.js.nft.json +1 -1
  46. package/standalone/.next/server/app/[locale]/console-logs/page_client-reference-manifest.js +1 -1
  47. package/standalone/.next/server/app/[locale]/costs/page.js.nft.json +1 -1
  48. package/standalone/.next/server/app/[locale]/costs/page_client-reference-manifest.js +1 -1
  49. package/standalone/.next/server/app/[locale]/credentials/page.js.nft.json +1 -1
  50. package/standalone/.next/server/app/[locale]/credentials/page_client-reference-manifest.js +1 -1
  51. package/standalone/.next/server/app/[locale]/devices/[id]/page.js.nft.json +1 -1
  52. package/standalone/.next/server/app/[locale]/devices/[id]/page_client-reference-manifest.js +1 -1
  53. package/standalone/.next/server/app/[locale]/devices/enroll/page.js.nft.json +1 -1
  54. package/standalone/.next/server/app/[locale]/devices/enroll/page_client-reference-manifest.js +1 -1
  55. package/standalone/.next/server/app/[locale]/devices/page.js.nft.json +1 -1
  56. package/standalone/.next/server/app/[locale]/devices/page_client-reference-manifest.js +1 -1
  57. package/standalone/.next/server/app/[locale]/drafts/page.js.nft.json +1 -1
  58. package/standalone/.next/server/app/[locale]/drafts/page_client-reference-manifest.js +1 -1
  59. package/standalone/.next/server/app/[locale]/github-cache/entries/[id]/page.js.nft.json +1 -1
  60. package/standalone/.next/server/app/[locale]/github-cache/entries/[id]/page_client-reference-manifest.js +1 -1
  61. package/standalone/.next/server/app/[locale]/github-cache/page.js.nft.json +1 -1
  62. package/standalone/.next/server/app/[locale]/github-cache/page_client-reference-manifest.js +1 -1
  63. package/standalone/.next/server/app/[locale]/jira/tickets/[issueKey]/page.js.nft.json +1 -1
  64. package/standalone/.next/server/app/[locale]/jira/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
  65. package/standalone/.next/server/app/[locale]/jira/tickets/page.js.nft.json +1 -1
  66. package/standalone/.next/server/app/[locale]/jira/tickets/page_client-reference-manifest.js +1 -1
  67. package/standalone/.next/server/app/[locale]/jira-cache/page.js.nft.json +1 -1
  68. package/standalone/.next/server/app/[locale]/jira-cache/page_client-reference-manifest.js +1 -1
  69. package/standalone/.next/server/app/[locale]/jira-cache/tickets/[issueKey]/page.js.nft.json +1 -1
  70. package/standalone/.next/server/app/[locale]/jira-cache/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
  71. package/standalone/.next/server/app/[locale]/jobs/[jobId]/page.js.nft.json +1 -1
  72. package/standalone/.next/server/app/[locale]/jobs/[jobId]/page_client-reference-manifest.js +1 -1
  73. package/standalone/.next/server/app/[locale]/notifications/page.js.nft.json +1 -1
  74. package/standalone/.next/server/app/[locale]/notifications/page_client-reference-manifest.js +1 -1
  75. package/standalone/.next/server/app/[locale]/page.js +2 -3
  76. package/standalone/.next/server/app/[locale]/page.js.nft.json +1 -1
  77. package/standalone/.next/server/app/[locale]/page_client-reference-manifest.js +1 -1
  78. package/standalone/.next/server/app/[locale]/plans/[runId]/page.js.nft.json +1 -1
  79. package/standalone/.next/server/app/[locale]/plans/[runId]/page_client-reference-manifest.js +1 -1
  80. package/standalone/.next/server/app/[locale]/plans/page.js.nft.json +1 -1
  81. package/standalone/.next/server/app/[locale]/plans/page_client-reference-manifest.js +1 -1
  82. package/standalone/.next/server/app/[locale]/polling/page.js.nft.json +1 -1
  83. package/standalone/.next/server/app/[locale]/polling/page_client-reference-manifest.js +1 -1
  84. package/standalone/.next/server/app/[locale]/provisioning-profiles/[profileId]/page.js.nft.json +1 -1
  85. package/standalone/.next/server/app/[locale]/provisioning-profiles/[profileId]/page_client-reference-manifest.js +1 -1
  86. package/standalone/.next/server/app/[locale]/provisioning-profiles/page.js.nft.json +1 -1
  87. package/standalone/.next/server/app/[locale]/provisioning-profiles/page_client-reference-manifest.js +1 -1
  88. package/standalone/.next/server/app/[locale]/pull-requests/[owner]/[repository]/[number]/page.js.nft.json +1 -1
  89. package/standalone/.next/server/app/[locale]/pull-requests/[owner]/[repository]/[number]/page_client-reference-manifest.js +1 -1
  90. package/standalone/.next/server/app/[locale]/pull-requests/page.js.nft.json +1 -1
  91. package/standalone/.next/server/app/[locale]/pull-requests/page_client-reference-manifest.js +1 -1
  92. package/standalone/.next/server/app/[locale]/push-notifications/page.js.nft.json +1 -1
  93. package/standalone/.next/server/app/[locale]/push-notifications/page_client-reference-manifest.js +1 -1
  94. package/standalone/.next/server/app/[locale]/runs/new/page.js.nft.json +1 -1
  95. package/standalone/.next/server/app/[locale]/runs/new/page_client-reference-manifest.js +1 -1
  96. package/standalone/.next/server/app/[locale]/sessions/[runId]/page.js.nft.json +1 -1
  97. package/standalone/.next/server/app/[locale]/sessions/[runId]/page_client-reference-manifest.js +1 -1
  98. package/standalone/.next/server/app/[locale]/sessions/page.js.nft.json +1 -1
  99. package/standalone/.next/server/app/[locale]/sessions/page_client-reference-manifest.js +1 -1
  100. package/standalone/.next/server/app/[locale]/settings/page.js.nft.json +1 -1
  101. package/standalone/.next/server/app/[locale]/settings/page_client-reference-manifest.js +1 -1
  102. package/standalone/.next/server/app/[locale]/skills/[skillId]/page.js.nft.json +1 -1
  103. package/standalone/.next/server/app/[locale]/skills/[skillId]/page_client-reference-manifest.js +1 -1
  104. package/standalone/.next/server/app/[locale]/skills/groups/[groupId]/page.js.nft.json +1 -1
  105. package/standalone/.next/server/app/[locale]/skills/groups/[groupId]/page_client-reference-manifest.js +1 -1
  106. package/standalone/.next/server/app/[locale]/skills/groups/page.js.nft.json +1 -1
  107. package/standalone/.next/server/app/[locale]/skills/groups/page_client-reference-manifest.js +1 -1
  108. package/standalone/.next/server/app/[locale]/skills/page.js.nft.json +1 -1
  109. package/standalone/.next/server/app/[locale]/skills/page_client-reference-manifest.js +1 -1
  110. package/standalone/.next/server/app/[locale]/skills/sync/[runId]/page.js.nft.json +1 -1
  111. package/standalone/.next/server/app/[locale]/skills/sync/[runId]/page_client-reference-manifest.js +1 -1
  112. package/standalone/.next/server/app/[locale]/tools/page.js.nft.json +1 -1
  113. package/standalone/.next/server/app/[locale]/tools/page_client-reference-manifest.js +1 -1
  114. package/standalone/.next/server/app/[locale]/unified-events/page.js.nft.json +1 -1
  115. package/standalone/.next/server/app/[locale]/unified-events/page_client-reference-manifest.js +1 -1
  116. package/standalone/.next/server/app/[locale]/usage/page.js.nft.json +1 -1
  117. package/standalone/.next/server/app/[locale]/usage/page_client-reference-manifest.js +1 -1
  118. package/standalone/.next/server/app/[locale]/webhooks/page.js.nft.json +1 -1
  119. package/standalone/.next/server/app/[locale]/webhooks/page_client-reference-manifest.js +1 -1
  120. package/standalone/.next/server/app/[locale]/workflows/[workflowId]/edit/page.js.nft.json +1 -1
  121. package/standalone/.next/server/app/[locale]/workflows/[workflowId]/edit/page_client-reference-manifest.js +1 -1
  122. package/standalone/.next/server/app/[locale]/workflows/[workflowId]/page.js.nft.json +1 -1
  123. package/standalone/.next/server/app/[locale]/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
  124. package/standalone/.next/server/app/[locale]/workflows/new/page.js.nft.json +1 -1
  125. package/standalone/.next/server/app/[locale]/workflows/new/page_client-reference-manifest.js +1 -1
  126. package/standalone/.next/server/app/[locale]/workflows/page.js.nft.json +1 -1
  127. package/standalone/.next/server/app/[locale]/workflows/page_client-reference-manifest.js +1 -1
  128. package/standalone/.next/server/app/[locale]/workflows/runs/[runId]/page.js.nft.json +1 -1
  129. package/standalone/.next/server/app/[locale]/workflows/runs/[runId]/page_client-reference-manifest.js +1 -1
  130. package/standalone/.next/server/app/[locale]/worktrees/[worktreeId]/page.js.nft.json +1 -1
  131. package/standalone/.next/server/app/[locale]/worktrees/[worktreeId]/page_client-reference-manifest.js +1 -1
  132. package/standalone/.next/server/app/[locale]/worktrees/page.js.nft.json +1 -1
  133. package/standalone/.next/server/app/[locale]/worktrees/page_client-reference-manifest.js +1 -1
  134. package/standalone/.next/server/app/_global-error.html +1 -1
  135. package/standalone/.next/server/app/_global-error.rsc +1 -1
  136. package/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  137. package/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  138. package/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  139. package/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  140. package/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  141. package/standalone/.next/server/app/_not-found.html +1 -1
  142. package/standalone/.next/server/app/_not-found.rsc +1 -1
  143. package/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  144. package/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  145. package/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  146. package/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  147. package/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  148. package/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  149. package/standalone/.next/server/app/api/agent/run-attachments/[attachmentId]/route.js +1 -1
  150. package/standalone/.next/server/app/api/agent/run-attachments/[attachmentId]/route.js.nft.json +1 -1
  151. package/standalone/.next/server/app/api/build-artifact-uploads/[uploadId]/route.js +1 -1
  152. package/standalone/.next/server/app/api/build-artifact-uploads/[uploadId]/route.js.nft.json +1 -1
  153. package/standalone/.next/server/app/api/codebases/by-path/route.js +1 -1
  154. package/standalone/.next/server/app/api/codebases/by-path/route.js.nft.json +1 -1
  155. package/standalone/.next/server/app/api/codebases/route.js +1 -1
  156. package/standalone/.next/server/app/api/codebases/route.js.nft.json +1 -1
  157. package/standalone/.next/server/app/api/graphql/route.js +1 -1
  158. package/standalone/.next/server/app/api/graphql/route.js.nft.json +1 -1
  159. package/standalone/.next/server/app/api/ios/apns-devices/route.js +1 -1
  160. package/standalone/.next/server/app/api/ios/apns-devices/route.js.nft.json +1 -1
  161. package/standalone/.next/server/app/api/ios/devices/export.tsv/route.js +1 -1
  162. package/standalone/.next/server/app/api/ios/devices/export.tsv/route.js.nft.json +1 -1
  163. package/standalone/.next/server/app/api/ios/enrollment/start/route.js +1 -1
  164. package/standalone/.next/server/app/api/ios/enrollment/start/route.js.nft.json +1 -1
  165. package/standalone/.next/server/app/api/mcp/route.js +1 -1
  166. package/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  167. package/standalone/.next/server/app/api/public/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route.js +1 -1
  168. package/standalone/.next/server/app/api/public/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route.js.nft.json +1 -1
  169. package/standalone/.next/server/app/api/public/builds/[buildId]/artifacts/[artifactId]/route.js +1 -1
  170. package/standalone/.next/server/app/api/public/builds/[buildId]/artifacts/[artifactId]/route.js.nft.json +1 -1
  171. package/standalone/.next/server/app/api/public/github/webhook/route.js +1 -1
  172. package/standalone/.next/server/app/api/public/github/webhook/route.js.nft.json +1 -1
  173. package/standalone/.next/server/app/api/public/ios/enrollment-profile/route.js +1 -1
  174. package/standalone/.next/server/app/api/public/ios/enrollment-profile/route.js.nft.json +1 -1
  175. package/standalone/.next/server/app/api/public/ios/profile-response/route.js +1 -1
  176. package/standalone/.next/server/app/api/public/ios/profile-response/route.js.nft.json +1 -1
  177. package/standalone/.next/server/app/api/telemetry/analytics-events/route.js +1 -1
  178. package/standalone/.next/server/app/api/telemetry/analytics-events/route.js.nft.json +1 -1
  179. package/standalone/.next/server/app/api/telemetry/console-logs/route.js +1 -1
  180. package/standalone/.next/server/app/api/telemetry/console-logs/route.js.nft.json +1 -1
  181. package/standalone/.next/server/app/api/telemetry/export/route.js +1 -1
  182. package/standalone/.next/server/app/api/telemetry/export/route.js.nft.json +1 -1
  183. package/standalone/.next/server/app/api/tools/call/route.js +1 -1
  184. package/standalone/.next/server/app/api/tools/call/route.js.nft.json +1 -1
  185. package/standalone/.next/server/app/api/tools/catalog/route.js +1 -1
  186. package/standalone/.next/server/app/api/tools/catalog/route.js.nft.json +1 -1
  187. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route.js +1 -1
  188. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route.js.nft.json +1 -1
  189. package/standalone/.next/server/app-paths-manifest.json +0 -1
  190. package/standalone/.next/server/chunks/{[root-of-the-server]__06u4xcm._.js → [root-of-the-server]__0-b1prw._.js} +1 -1
  191. package/standalone/.next/server/chunks/{[root-of-the-server]__09am6v3._.js → [root-of-the-server]__0-irvqy._.js} +1 -1
  192. package/standalone/.next/server/chunks/{[root-of-the-server]__0191hj1._.js → [root-of-the-server]__004x00m._.js} +3 -3
  193. package/standalone/.next/server/chunks/{[root-of-the-server]__0-tmw39._.js → [root-of-the-server]__03ov9dn._.js} +1 -1
  194. package/standalone/.next/server/chunks/{[root-of-the-server]__0eyltex._.js → [root-of-the-server]__04x0a1c._.js} +1 -1
  195. package/standalone/.next/server/chunks/{[root-of-the-server]__0595xpp._.js → [root-of-the-server]__05k_3_s._.js} +1 -1
  196. package/standalone/.next/server/chunks/{[root-of-the-server]__0by5o61._.js → [root-of-the-server]__05nr3-b._.js} +2 -2
  197. package/standalone/.next/server/chunks/{[root-of-the-server]__09cczk9._.js → [root-of-the-server]__05rm8ki._.js} +1 -1
  198. package/standalone/.next/server/chunks/{[root-of-the-server]__05yutuh._.js → [root-of-the-server]__06dz512._.js} +1 -1
  199. package/standalone/.next/server/chunks/{[root-of-the-server]__0-upwch._.js → [root-of-the-server]__06h8dq4._.js} +1 -1
  200. package/standalone/.next/server/chunks/{[root-of-the-server]__21815pw._.js → [root-of-the-server]__07lj58j._.js} +2 -2
  201. package/standalone/.next/server/chunks/{[root-of-the-server]__01s4hkv._.js → [root-of-the-server]__082w26v._.js} +1 -1
  202. package/standalone/.next/server/chunks/{[root-of-the-server]__06dvajv._.js → [root-of-the-server]__092univ._.js} +1 -1
  203. package/standalone/.next/server/chunks/{[root-of-the-server]__03arvyv._.js → [root-of-the-server]__098thvo._.js} +2 -2
  204. package/standalone/.next/server/chunks/{[root-of-the-server]__09ormhu._.js → [root-of-the-server]__0_1h4vu._.js} +1 -1
  205. package/standalone/.next/server/chunks/{[root-of-the-server]__0l4juv1._.js → [root-of-the-server]__0_ftuni._.js} +1 -1
  206. package/standalone/.next/server/chunks/[root-of-the-server]__0b-lts3._.js +3 -0
  207. package/standalone/.next/server/chunks/[root-of-the-server]__0ckici0._.js +3 -0
  208. package/standalone/.next/server/chunks/{[root-of-the-server]__02chrc6._.js → [root-of-the-server]__0cqe8td._.js} +1 -1
  209. package/standalone/.next/server/chunks/[root-of-the-server]__0dsyjgc._.js +3 -0
  210. package/standalone/.next/server/chunks/{[root-of-the-server]__02z6ofq._.js → [root-of-the-server]__0e29qi2._.js} +1 -1
  211. package/standalone/.next/server/chunks/{[root-of-the-server]__0bcw4i1._.js → [root-of-the-server]__0efv9_l._.js} +1 -1
  212. package/standalone/.next/server/chunks/{[root-of-the-server]__0dsr079._.js → [root-of-the-server]__0eplbf8._.js} +2 -2
  213. package/standalone/.next/server/chunks/[root-of-the-server]__0fv-9n6._.js +3 -0
  214. package/standalone/.next/server/chunks/{[root-of-the-server]__0e1uxby._.js → [root-of-the-server]__0g-h70v._.js} +1 -1
  215. package/standalone/.next/server/chunks/{[root-of-the-server]__0fzwzem._.js → [root-of-the-server]__0gedsnc._.js} +2 -2
  216. package/standalone/.next/server/chunks/[root-of-the-server]__0gorac4._.js +3 -0
  217. package/standalone/.next/server/chunks/[root-of-the-server]__0hd0i41._.js +3 -0
  218. package/standalone/.next/server/chunks/[root-of-the-server]__0hyrrl3._.js +3 -0
  219. package/standalone/.next/server/chunks/[root-of-the-server]__0kxris6._.js +3 -0
  220. package/standalone/.next/server/chunks/[root-of-the-server]__0lbyvuf._.js +3 -0
  221. package/standalone/.next/server/chunks/[root-of-the-server]__0lmlzy2._.js +3 -0
  222. package/standalone/.next/server/chunks/[root-of-the-server]__0lpn3y3._.js +3 -0
  223. package/standalone/.next/server/chunks/{[root-of-the-server]__0deutn6._.js → [root-of-the-server]__0njzyae._.js} +2 -2
  224. package/standalone/.next/server/chunks/[root-of-the-server]__0o1f0q0._.js +3 -0
  225. package/standalone/.next/server/chunks/[root-of-the-server]__0o2vsff._.js +3 -0
  226. package/standalone/.next/server/chunks/[root-of-the-server]__0o__n8q._.js +3 -0
  227. package/standalone/.next/server/chunks/[root-of-the-server]__0r4layw._.js +3 -0
  228. package/standalone/.next/server/chunks/[root-of-the-server]__0r6qwbg._.js +3 -0
  229. package/standalone/.next/server/chunks/[root-of-the-server]__0r_1lyd._.js +3 -0
  230. package/standalone/.next/server/chunks/{[root-of-the-server]__1sgz5xe._.js → [root-of-the-server]__0rwzlp5._.js} +2 -2
  231. package/standalone/.next/server/chunks/{[root-of-the-server]__0n9n0wa._.js → [root-of-the-server]__0su5xbh._.js} +2 -2
  232. package/standalone/.next/server/chunks/{[root-of-the-server]__1g5ehjo._.js → [root-of-the-server]__0t_1g6x._.js} +2 -2
  233. package/standalone/.next/server/chunks/[root-of-the-server]__0umrmgu._.js +3 -0
  234. package/standalone/.next/server/chunks/{[root-of-the-server]__119lu0l._.js → [root-of-the-server]__0xl63a7._.js} +2 -2
  235. package/standalone/.next/server/chunks/[root-of-the-server]__0xxlq9f._.js +3 -0
  236. package/standalone/.next/server/chunks/[root-of-the-server]__0ynqgwd._.js +3 -0
  237. package/standalone/.next/server/chunks/[root-of-the-server]__0yo97yw._.js +3 -0
  238. package/standalone/.next/server/chunks/[root-of-the-server]__0yukdx0._.js +3 -0
  239. package/standalone/.next/server/chunks/{[root-of-the-server]__0m09s1f._.js → [root-of-the-server]__0yx69ig._.js} +2 -2
  240. package/standalone/.next/server/chunks/[root-of-the-server]__0zdquaj._.js +3 -0
  241. package/standalone/.next/server/chunks/[root-of-the-server]__0zl_7f0._.js +3 -0
  242. package/standalone/.next/server/chunks/[root-of-the-server]__1-6ac7x._.js +3 -0
  243. package/standalone/.next/server/chunks/[root-of-the-server]__10ax2y3._.js +3 -0
  244. package/standalone/.next/server/chunks/[root-of-the-server]__111axgx._.js +3 -0
  245. package/standalone/.next/server/chunks/[root-of-the-server]__112_ym-._.js +3 -0
  246. package/standalone/.next/server/chunks/{[root-of-the-server]__03lh83x._.js → [root-of-the-server]__11_l9kh._.js} +2 -2
  247. package/standalone/.next/server/chunks/[root-of-the-server]__13atbqs._.js +3 -0
  248. package/standalone/.next/server/chunks/[root-of-the-server]__13f0rv7._.js +3 -0
  249. package/standalone/.next/server/chunks/[root-of-the-server]__13ghplc._.js +3 -0
  250. package/standalone/.next/server/chunks/[root-of-the-server]__13y3ap6._.js +3 -0
  251. package/standalone/.next/server/chunks/[root-of-the-server]__145854p._.js +3 -0
  252. package/standalone/.next/server/chunks/[root-of-the-server]__156bqk6._.js +3 -0
  253. package/standalone/.next/server/chunks/[root-of-the-server]__15anbvu._.js +3 -0
  254. package/standalone/.next/server/chunks/[root-of-the-server]__15fe1ky._.js +3 -0
  255. package/standalone/.next/server/chunks/[root-of-the-server]__16gno9l._.js +3 -0
  256. package/standalone/.next/server/chunks/[root-of-the-server]__16y0jw6._.js +3 -0
  257. package/standalone/.next/server/chunks/{[root-of-the-server]__1inrvz6._.js → [root-of-the-server]__17v3iu3._.js} +2 -2
  258. package/standalone/.next/server/chunks/[root-of-the-server]__17xi013._.js +3 -0
  259. package/standalone/.next/server/chunks/[root-of-the-server]__19yjsxi._.js +3 -0
  260. package/standalone/.next/server/chunks/[root-of-the-server]__1__181r._.js +3 -0
  261. package/standalone/.next/server/chunks/[root-of-the-server]__1_j58hk._.js +3 -0
  262. package/standalone/.next/server/chunks/[root-of-the-server]__1_u7utj._.js +3 -0
  263. package/standalone/.next/server/chunks/[root-of-the-server]__1_xypu8._.js +3 -0
  264. package/standalone/.next/server/chunks/[root-of-the-server]__1a9n6nb._.js +3 -0
  265. package/standalone/.next/server/chunks/[root-of-the-server]__1ahn_s1._.js +3 -0
  266. package/standalone/.next/server/chunks/{[root-of-the-server]__1v9pr22._.js → [root-of-the-server]__1amrm18._.js} +2 -2
  267. package/standalone/.next/server/chunks/[root-of-the-server]__1c93he1._.js +3 -0
  268. package/standalone/.next/server/chunks/{[root-of-the-server]__1ghtk-u._.js → [root-of-the-server]__1ca92tw._.js} +2 -2
  269. package/standalone/.next/server/chunks/[root-of-the-server]__1d2p5s7._.js +3 -0
  270. package/standalone/.next/server/chunks/[root-of-the-server]__1e-y964._.js +3 -0
  271. package/standalone/.next/server/chunks/{[root-of-the-server]__0jin988._.js → [root-of-the-server]__1em0xu9._.js} +2 -2
  272. package/standalone/.next/server/chunks/{[root-of-the-server]__1yt6tih._.js → [root-of-the-server]__1f0zhzz._.js} +2 -2
  273. package/standalone/.next/server/chunks/[root-of-the-server]__1fjzpw8._.js +3 -0
  274. package/standalone/.next/server/chunks/{[root-of-the-server]__046c9w0._.js → [root-of-the-server]__1fnlj9e._.js} +2 -2
  275. package/standalone/.next/server/chunks/[root-of-the-server]__1gg0deb._.js +3 -0
  276. package/standalone/.next/server/chunks/[root-of-the-server]__1isy66r._.js +3 -0
  277. package/standalone/.next/server/chunks/[root-of-the-server]__1iueadp._.js +3 -0
  278. package/standalone/.next/server/chunks/[root-of-the-server]__1lgrdmb._.js +3 -0
  279. package/standalone/.next/server/chunks/[root-of-the-server]__1ltxl89._.js +3 -0
  280. package/standalone/.next/server/chunks/{[root-of-the-server]__0w9qwef._.js → [root-of-the-server]__1n2pfid._.js} +2 -2
  281. package/standalone/.next/server/chunks/[root-of-the-server]__1pchrv1._.js +3 -0
  282. package/standalone/.next/server/chunks/[root-of-the-server]__1q3qhn3._.js +3 -0
  283. package/standalone/.next/server/chunks/{[root-of-the-server]__1l0i6bt._.js → [root-of-the-server]__1r3djqb._.js} +2 -2
  284. package/standalone/.next/server/chunks/[root-of-the-server]__1r6cfp_._.js +3 -0
  285. package/standalone/.next/server/chunks/[root-of-the-server]__1rkrr9y._.js +3 -0
  286. package/standalone/.next/server/chunks/[root-of-the-server]__1s_oovo._.js +3 -0
  287. package/standalone/.next/server/chunks/[root-of-the-server]__1syfm5l._.js +3 -0
  288. package/standalone/.next/server/chunks/[root-of-the-server]__1t_2g9l._.js +3 -0
  289. package/standalone/.next/server/chunks/[root-of-the-server]__1ug9sy_._.js +3 -0
  290. package/standalone/.next/server/chunks/[root-of-the-server]__1v6-hkq._.js +3 -0
  291. package/standalone/.next/server/chunks/[root-of-the-server]__1va_ptf._.js +3 -0
  292. package/standalone/.next/server/chunks/[root-of-the-server]__1w83ks0._.js +3 -0
  293. package/standalone/.next/server/chunks/{[root-of-the-server]__04z6da6._.js → [root-of-the-server]__1w_r8ug._.js} +2 -2
  294. package/standalone/.next/server/chunks/[root-of-the-server]__1wgorxu._.js +3 -0
  295. package/standalone/.next/server/chunks/[root-of-the-server]__1xh8f1z._.js +3 -0
  296. package/standalone/.next/server/chunks/[root-of-the-server]__1xqq0j2._.js +3 -0
  297. package/standalone/.next/server/chunks/[root-of-the-server]__1z1b8w4._.js +3 -0
  298. package/standalone/.next/server/chunks/[root-of-the-server]__1z8eo0j._.js +3 -0
  299. package/standalone/.next/server/chunks/[root-of-the-server]__20zebdq._.js +3 -0
  300. package/standalone/.next/server/chunks/_0_3-lke._.js +70 -9
  301. package/standalone/.next/server/chunks/_0d87yp6._.js +2 -2
  302. package/standalone/.next/server/chunks/_0rjgtla._.js +2 -2
  303. package/standalone/.next/server/chunks/_1_sa5xl._.js +2 -2
  304. package/standalone/.next/server/chunks/_1hmzed-._.js +63 -2
  305. package/standalone/.next/server/chunks/_1pc6dt_._.js +2 -2
  306. package/standalone/.next/server/chunks/_1xuucni._.js +2 -2
  307. package/standalone/.next/server/chunks/_1ya6q3e._.js +2 -2
  308. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-guq-9._.js +3 -0
  309. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__064h18r._.js +3 -0
  310. package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0js6wx9._.js → [root-of-the-server]__07ll4k6._.js} +2 -2
  311. package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ljh3ky._.js → [root-of-the-server]__08m_tud._.js} +2 -2
  312. package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qvg807._.js → [root-of-the-server]__0iulojy._.js} +2 -2
  313. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0je1dve._.js +15 -0
  314. package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1vww3f6._.js → [root-of-the-server]__0mpg4qq._.js} +2 -2
  315. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__10rfw-t._.js +3 -0
  316. package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__08vwbx7._.js → [root-of-the-server]__1gemlo_._.js} +2 -2
  317. package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1bd2arr._.js → [root-of-the-server]__1kzbjl5._.js} +3 -3
  318. package/standalone/.next/server/chunks/ssr/{_14leuy3._.js → _0-o8qp9._.js} +2 -2
  319. package/standalone/.next/server/chunks/ssr/_0158tm3._.js +22 -0
  320. package/standalone/.next/server/chunks/ssr/_01qjv4h._.js +10 -0
  321. package/standalone/.next/server/chunks/ssr/_022u7lb._.js +15 -0
  322. package/standalone/.next/server/chunks/ssr/_08p6s05._.js +1 -1
  323. package/standalone/.next/server/chunks/ssr/_0_6-vje._.js +3 -0
  324. package/standalone/.next/server/chunks/ssr/{_16kl8gr._.js → _0ecoxf6._.js} +2 -2
  325. package/standalone/.next/server/chunks/ssr/{_08g6bix._.js → _0ibt6d5._.js} +3 -3
  326. package/standalone/.next/server/chunks/ssr/{_18xrhsg._.js → _0ixrbdr._.js} +2 -2
  327. package/standalone/.next/server/chunks/ssr/_0k-c9_2._.js +3 -0
  328. package/standalone/.next/server/chunks/ssr/_0kp37lj._.js +3 -0
  329. package/standalone/.next/server/chunks/ssr/_0mwg_m-._.js +3 -0
  330. package/standalone/.next/server/chunks/ssr/_0qi2sb7._.js +3 -0
  331. package/standalone/.next/server/chunks/ssr/_0rewrau._.js +3 -0
  332. package/standalone/.next/server/chunks/ssr/{_09bcjtq._.js → _0ro_o-3._.js} +2 -2
  333. package/standalone/.next/server/chunks/ssr/{_0n86f1m._.js → _0sbsue7._.js} +2 -2
  334. package/standalone/.next/server/chunks/ssr/_0u04ikp._.js +3 -0
  335. package/standalone/.next/server/chunks/ssr/_0wc8st5._.js +3 -0
  336. package/standalone/.next/server/chunks/ssr/_0wdqa08._.js +24 -0
  337. package/standalone/.next/server/chunks/ssr/_13c2e2e._.js +3 -0
  338. package/standalone/.next/server/chunks/ssr/{_16lbtbj._.js → _154hqy7._.js} +3 -3
  339. package/standalone/.next/server/chunks/ssr/_184gcf9._.js +3 -0
  340. package/standalone/.next/server/chunks/ssr/{_15l7ork._.js → _18ql1ra._.js} +2 -2
  341. package/standalone/.next/server/chunks/ssr/{_1oc_qeb._.js → _18y675s._.js} +2 -2
  342. package/standalone/.next/server/chunks/ssr/_19uhr89._.js +3 -0
  343. package/standalone/.next/server/chunks/ssr/_1at-ti0._.js +5 -0
  344. package/standalone/.next/server/chunks/ssr/_1b-tglm._.js +3 -0
  345. package/standalone/.next/server/chunks/ssr/_1boywnc._.js +9 -0
  346. package/standalone/.next/server/chunks/ssr/{_0u_x0oc._.js → _1btl6f6._.js} +2 -2
  347. package/standalone/.next/server/chunks/ssr/_1cbynbc._.js +21 -0
  348. package/standalone/.next/server/chunks/ssr/_1hjrtvv._.js +3 -0
  349. package/standalone/.next/server/chunks/ssr/_1i-_huq._.js +5 -0
  350. package/standalone/.next/server/chunks/ssr/_1j9bac7._.js +57 -0
  351. package/standalone/.next/server/chunks/ssr/{_13boc9b._.js → _1m3dqvf._.js} +2 -2
  352. package/standalone/.next/server/chunks/ssr/_1nbvse5._.js +3 -0
  353. package/standalone/.next/server/chunks/ssr/_1njj5e5._.js +25 -0
  354. package/standalone/.next/server/chunks/ssr/_1q_8hby._.js +3 -0
  355. package/standalone/.next/server/chunks/ssr/_1t1ka5b._.js +3 -0
  356. package/standalone/.next/server/chunks/ssr/_1unm3n-._.js +3 -0
  357. package/standalone/.next/server/chunks/ssr/_1vx8nbn._.js +3 -0
  358. package/standalone/.next/server/chunks/ssr/_1wpqpq_._.js +3 -0
  359. package/standalone/.next/server/chunks/ssr/{_0s-_f4k._.js → _1ws3tm8._.js} +3 -3
  360. package/standalone/.next/server/chunks/ssr/_1xoejuo._.js +3 -0
  361. package/standalone/.next/server/chunks/ssr/_1xwodxm._.js +26 -0
  362. package/standalone/.next/server/chunks/ssr/_1zgu74l._.js +24 -17
  363. package/standalone/.next/server/chunks/ssr/messages_de_json_[json]_cjs_1uig1ud._.js +1 -1
  364. package/standalone/.next/server/chunks/ssr/messages_en_json_[json]_cjs_206072-._.js +1 -1
  365. package/standalone/.next/server/chunks/ssr/messages_es_json_[json]_cjs_082yukd._.js +1 -1
  366. package/standalone/.next/server/chunks/ssr/messages_fr_json_[json]_cjs_0j6-w0i._.js +1 -1
  367. package/standalone/.next/server/chunks/ssr/node_modules_@radix-ui_1up2wai._.js +3 -0
  368. package/standalone/.next/server/chunks/ssr/node_modules_@radix-ui_react-menu_dist_index_mjs_0r8d9ly._.js +3 -0
  369. package/standalone/.next/server/chunks/ssr/src_components_runs_run-detail-page_tsx_0eje87-._.js +1 -1
  370. package/standalone/.next/server/chunks/ssr/src_components_ui_195oosa._.js +3 -0
  371. package/standalone/.next/server/chunks/ssr/src_components_ui_198y4_o._.js +3 -0
  372. package/standalone/.next/server/middleware-build-manifest.js +3 -3
  373. package/standalone/.next/server/next-font-manifest.js +1 -1
  374. package/standalone/.next/server/next-font-manifest.json +0 -4
  375. package/standalone/.next/server/pages/404.html +1 -1
  376. package/standalone/.next/server/pages/500.html +1 -1
  377. package/standalone/.next/server/server-reference-manifest.js +1 -1
  378. package/standalone/.next/server/server-reference-manifest.json +1 -1
  379. package/standalone/.next/static/chunks/{1_2kx7s8a2159.js → 06vdflmowpip6.js} +6 -6
  380. package/standalone/.next/static/chunks/07vuhvr-qtb7x.js +28 -0
  381. package/standalone/.next/static/chunks/{3z1isz179y8rv.js → 0_uexv6neli5u.js} +7 -7
  382. package/standalone/.next/static/chunks/0eo18i30uko5v.js +15 -0
  383. package/standalone/.next/static/chunks/0kmg7qlu8ytwf.js +59 -0
  384. package/standalone/.next/static/chunks/0knpwbhdkzti0.js +1 -0
  385. package/standalone/.next/static/chunks/{1jn5l9964tm_t.js → 0m5tuf_eivume.js} +5 -5
  386. package/standalone/.next/static/chunks/0mcuo36rz9j57.js +55 -0
  387. package/standalone/.next/static/chunks/0mpcmi3wv5r7o.js +53 -0
  388. package/standalone/.next/static/chunks/0n0dnronw8ezg.js +85 -0
  389. package/standalone/.next/static/chunks/0pn4p6w3w-j20.js +1 -0
  390. package/standalone/.next/static/chunks/{2yg_hcy-xlokr.js → 0pv0lqmzjn6ar.js} +11 -11
  391. package/standalone/.next/static/chunks/0wrm-zqne-dc8.js +9 -0
  392. package/standalone/.next/static/chunks/0xe08f4_etyy8.js +3 -0
  393. package/standalone/.next/static/chunks/1-byqle1eur_a.js +75 -0
  394. package/standalone/.next/static/chunks/127vn4wn5xo9p.js +49 -0
  395. package/standalone/.next/static/chunks/12te8dyw3x2bn.js +1 -0
  396. package/standalone/.next/static/chunks/17bq0x-xdn9o4.js +88 -0
  397. package/standalone/.next/static/chunks/19dkpj43f8v40.js +42 -0
  398. package/standalone/.next/static/chunks/1c42xu-oct3-l.js +1 -0
  399. package/standalone/.next/static/chunks/1g2nga-bvjlja.js +88 -0
  400. package/standalone/.next/static/chunks/1gkhfdfmj-oh0.js +43 -0
  401. package/standalone/.next/static/chunks/1k-_4gvcm-pyb.js +1 -0
  402. package/standalone/.next/static/chunks/1kjs_7sxvaxng.js +27 -0
  403. package/standalone/.next/static/chunks/1p730oe_-y1hj.js +1 -0
  404. package/standalone/.next/static/chunks/1pcc30ztgbtfp.js +34 -0
  405. package/standalone/.next/static/chunks/{0__52m82mb813.js → 1popvhaprqxtf.js} +1 -1
  406. package/standalone/.next/static/chunks/1rcjbru7lya3t.js +7 -0
  407. package/standalone/.next/static/chunks/1vgurgb3_kw0d.js +33 -0
  408. package/standalone/.next/static/chunks/{0s60he_e08soe.js → 1vhe4q0cd7aqp.js} +2 -2
  409. package/standalone/.next/static/chunks/1z4uktkhpz4vk.js +3 -0
  410. package/standalone/.next/static/chunks/21xk5pyunaike.js +120 -0
  411. package/standalone/.next/static/chunks/26nqjwc9aov2w.js +1 -0
  412. package/standalone/.next/static/chunks/28xkjksksnsd_.css +1 -0
  413. package/standalone/.next/static/chunks/299mqzsp8p9u8.js +1 -0
  414. package/standalone/.next/static/chunks/2aacfhrhmknxw.js +90 -0
  415. package/standalone/.next/static/chunks/2d6gk7-wy11nz.js +13 -0
  416. package/standalone/.next/static/chunks/2k5n-lawvi3o1.js +29 -0
  417. package/standalone/.next/static/chunks/{104wb_0lixxfp.js → 2lfmdc3eqlsl4.js} +17 -17
  418. package/standalone/.next/static/chunks/2m0zo09ce60t-.js +1 -0
  419. package/standalone/.next/static/chunks/2ouwnzrx0591e.js +54 -0
  420. package/standalone/.next/static/chunks/{24alljtl2n1j_.js → 2svylmgfm08d9.js} +6 -6
  421. package/standalone/.next/static/chunks/2ucnry1pj6sw1.js +64 -0
  422. package/standalone/.next/static/chunks/{0o8_x0u4fxie7.js → 2wgg-jr0osw4i.js} +2 -2
  423. package/standalone/.next/static/chunks/{3018mq1s5v8kz.js → 2wsr9efe8r8ng.js} +4 -4
  424. package/standalone/.next/static/chunks/2z1q99_-1kg93.js +3 -0
  425. package/standalone/.next/static/chunks/31809uzps9w9e.js +64 -0
  426. package/standalone/.next/static/chunks/31is47ulkcw19.js +37 -0
  427. package/standalone/.next/static/chunks/34_yps6ppoo5k.js +1 -0
  428. package/standalone/.next/static/chunks/34wlxu_g_2g1y.js +26 -0
  429. package/standalone/.next/static/chunks/3gsir-iueghp2.js +23 -0
  430. package/standalone/.next/static/chunks/3jkg8wqh5nnam.js +29 -0
  431. package/standalone/.next/static/chunks/3kly0o0iaeig-.js +24 -0
  432. package/standalone/.next/static/chunks/3nme8562ujl6t.js +1 -0
  433. package/standalone/.next/static/chunks/3sgrm30gdqnhj.js +1 -0
  434. package/standalone/.next/static/chunks/3txqwzevvzjhy.js +42 -0
  435. package/standalone/.next/static/chunks/3uhr-ha19zo61.js +23 -0
  436. package/standalone/.next/static/chunks/{1pjy8b30-wkw9.js → 3umkd0xpssc3q.js} +3 -3
  437. package/standalone/.next/static/chunks/43wopct538msd.js +1 -0
  438. package/standalone/.next/server/app/[locale]/action-center/page/app-paths-manifest.json +0 -3
  439. package/standalone/.next/server/app/[locale]/action-center/page/build-manifest.json +0 -16
  440. package/standalone/.next/server/app/[locale]/action-center/page/next-font-manifest.json +0 -11
  441. package/standalone/.next/server/app/[locale]/action-center/page/react-loadable-manifest.json +0 -1
  442. package/standalone/.next/server/app/[locale]/action-center/page/server-reference-manifest.json +0 -4
  443. package/standalone/.next/server/app/[locale]/action-center/page.js +0 -17
  444. package/standalone/.next/server/app/[locale]/action-center/page.js.map +0 -5
  445. package/standalone/.next/server/app/[locale]/action-center/page.js.nft.json +0 -1
  446. package/standalone/.next/server/app/[locale]/action-center/page_client-reference-manifest.js +0 -3
  447. package/standalone/.next/server/chunks/[root-of-the-server]__0d21gjd._.js +0 -3
  448. package/standalone/.next/server/chunks/[root-of-the-server]__0gq25kr._.js +0 -3
  449. package/standalone/.next/server/chunks/[root-of-the-server]__0h05dmh._.js +0 -3
  450. package/standalone/.next/server/chunks/[root-of-the-server]__0h1j7no._.js +0 -3
  451. package/standalone/.next/server/chunks/[root-of-the-server]__0kprqh4._.js +0 -3
  452. package/standalone/.next/server/chunks/[root-of-the-server]__0m0ckek._.js +0 -3
  453. package/standalone/.next/server/chunks/[root-of-the-server]__0m8pxlb._.js +0 -3
  454. package/standalone/.next/server/chunks/[root-of-the-server]__0nu8ev9._.js +0 -3
  455. package/standalone/.next/server/chunks/[root-of-the-server]__0p-zaud._.js +0 -3
  456. package/standalone/.next/server/chunks/[root-of-the-server]__0p0u8fq._.js +0 -3
  457. package/standalone/.next/server/chunks/[root-of-the-server]__0p6gqiv._.js +0 -3
  458. package/standalone/.next/server/chunks/[root-of-the-server]__0p7s2k3._.js +0 -3
  459. package/standalone/.next/server/chunks/[root-of-the-server]__0rq8991._.js +0 -3
  460. package/standalone/.next/server/chunks/[root-of-the-server]__0sogo1p._.js +0 -3
  461. package/standalone/.next/server/chunks/[root-of-the-server]__0to2fqa._.js +0 -3
  462. package/standalone/.next/server/chunks/[root-of-the-server]__0uhlj3h._.js +0 -3
  463. package/standalone/.next/server/chunks/[root-of-the-server]__0v6d64m._.js +0 -3
  464. package/standalone/.next/server/chunks/[root-of-the-server]__0vs241l._.js +0 -3
  465. package/standalone/.next/server/chunks/[root-of-the-server]__0wzgw0m._.js +0 -3
  466. package/standalone/.next/server/chunks/[root-of-the-server]__0x5d6lo._.js +0 -3
  467. package/standalone/.next/server/chunks/[root-of-the-server]__0xazzjb._.js +0 -3
  468. package/standalone/.next/server/chunks/[root-of-the-server]__0xqm3n9._.js +0 -3
  469. package/standalone/.next/server/chunks/[root-of-the-server]__0zorfix._.js +0 -3
  470. package/standalone/.next/server/chunks/[root-of-the-server]__1-ljnib._.js +0 -3
  471. package/standalone/.next/server/chunks/[root-of-the-server]__11-o845._.js +0 -3
  472. package/standalone/.next/server/chunks/[root-of-the-server]__13_u_ro._.js +0 -3
  473. package/standalone/.next/server/chunks/[root-of-the-server]__13qagj_._.js +0 -3
  474. package/standalone/.next/server/chunks/[root-of-the-server]__14yfzp0._.js +0 -3
  475. package/standalone/.next/server/chunks/[root-of-the-server]__15h5kmz._.js +0 -3
  476. package/standalone/.next/server/chunks/[root-of-the-server]__18eaxef._.js +0 -3
  477. package/standalone/.next/server/chunks/[root-of-the-server]__18fpgua._.js +0 -3
  478. package/standalone/.next/server/chunks/[root-of-the-server]__1_e5221._.js +0 -3
  479. package/standalone/.next/server/chunks/[root-of-the-server]__1_pozkw._.js +0 -3
  480. package/standalone/.next/server/chunks/[root-of-the-server]__1amawad._.js +0 -3
  481. package/standalone/.next/server/chunks/[root-of-the-server]__1b2duzg._.js +0 -3
  482. package/standalone/.next/server/chunks/[root-of-the-server]__1b5470b._.js +0 -3
  483. package/standalone/.next/server/chunks/[root-of-the-server]__1cvxm3-._.js +0 -3
  484. package/standalone/.next/server/chunks/[root-of-the-server]__1dhuc2g._.js +0 -3
  485. package/standalone/.next/server/chunks/[root-of-the-server]__1dx2vmk._.js +0 -3
  486. package/standalone/.next/server/chunks/[root-of-the-server]__1ekrk8d._.js +0 -3
  487. package/standalone/.next/server/chunks/[root-of-the-server]__1el0rwx._.js +0 -3
  488. package/standalone/.next/server/chunks/[root-of-the-server]__1ex9wz4._.js +0 -3
  489. package/standalone/.next/server/chunks/[root-of-the-server]__1ez1qjo._.js +0 -3
  490. package/standalone/.next/server/chunks/[root-of-the-server]__1flzhuq._.js +0 -3
  491. package/standalone/.next/server/chunks/[root-of-the-server]__1hgzt9m._.js +0 -3
  492. package/standalone/.next/server/chunks/[root-of-the-server]__1i48xcq._.js +0 -3
  493. package/standalone/.next/server/chunks/[root-of-the-server]__1im_7cr._.js +0 -3
  494. package/standalone/.next/server/chunks/[root-of-the-server]__1jypemo._.js +0 -3
  495. package/standalone/.next/server/chunks/[root-of-the-server]__1l9m5vm._.js +0 -3
  496. package/standalone/.next/server/chunks/[root-of-the-server]__1lc23sg._.js +0 -3
  497. package/standalone/.next/server/chunks/[root-of-the-server]__1m14-al._.js +0 -3
  498. package/standalone/.next/server/chunks/[root-of-the-server]__1m2x6-i._.js +0 -3
  499. package/standalone/.next/server/chunks/[root-of-the-server]__1mlmrbg._.js +0 -3
  500. package/standalone/.next/server/chunks/[root-of-the-server]__1mttyay._.js +0 -3
  501. package/standalone/.next/server/chunks/[root-of-the-server]__1obl6rm._.js +0 -3
  502. package/standalone/.next/server/chunks/[root-of-the-server]__1oh_afd._.js +0 -3
  503. package/standalone/.next/server/chunks/[root-of-the-server]__1ph5-o-._.js +0 -3
  504. package/standalone/.next/server/chunks/[root-of-the-server]__1qcqxk2._.js +0 -3
  505. package/standalone/.next/server/chunks/[root-of-the-server]__1qnaf-5._.js +0 -3
  506. package/standalone/.next/server/chunks/[root-of-the-server]__1s8pdh3._.js +0 -3
  507. package/standalone/.next/server/chunks/[root-of-the-server]__1sav-w6._.js +0 -3
  508. package/standalone/.next/server/chunks/[root-of-the-server]__1sb1p64._.js +0 -3
  509. package/standalone/.next/server/chunks/[root-of-the-server]__1trf87b._.js +0 -3
  510. package/standalone/.next/server/chunks/[root-of-the-server]__1v0kdi4._.js +0 -3
  511. package/standalone/.next/server/chunks/[root-of-the-server]__1vgd_cg._.js +0 -3
  512. package/standalone/.next/server/chunks/[root-of-the-server]__1w9gjd5._.js +0 -3
  513. package/standalone/.next/server/chunks/[root-of-the-server]__1wey7bg._.js +0 -3
  514. package/standalone/.next/server/chunks/[root-of-the-server]__1xcsuq_._.js +0 -3
  515. package/standalone/.next/server/chunks/[root-of-the-server]__1zo0vbv._.js +0 -3
  516. package/standalone/.next/server/chunks/[root-of-the-server]__1zshyzr._.js +0 -3
  517. package/standalone/.next/server/chunks/[root-of-the-server]__1zv9v9b._.js +0 -3
  518. package/standalone/.next/server/chunks/[root-of-the-server]__201fjv-._.js +0 -3
  519. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-_5urd._.js +0 -57
  520. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cej3c3._.js +0 -3
  521. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rxp26l._.js +0 -3
  522. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-mk318._.js +0 -15
  523. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ct2_y9._.js +0 -3
  524. package/standalone/.next/server/chunks/ssr/_02hx02h._.js +0 -25
  525. package/standalone/.next/server/chunks/ssr/_08_kyiv._.js +0 -15
  526. package/standalone/.next/server/chunks/ssr/_0cz9xwo._.js +0 -3
  527. package/standalone/.next/server/chunks/ssr/_0ec1szn._.js +0 -3
  528. package/standalone/.next/server/chunks/ssr/_0ix0h2m._.js +0 -3
  529. package/standalone/.next/server/chunks/ssr/_0j-5kz6._.js +0 -3
  530. package/standalone/.next/server/chunks/ssr/_0le21ue._.js +0 -3
  531. package/standalone/.next/server/chunks/ssr/_0uuh5ne._.js +0 -9
  532. package/standalone/.next/server/chunks/ssr/_0wo43jn._.js +0 -3
  533. package/standalone/.next/server/chunks/ssr/_0wt_-w_._.js +0 -3
  534. package/standalone/.next/server/chunks/ssr/_0y-bz5b._.js +0 -3
  535. package/standalone/.next/server/chunks/ssr/_0yk3h5c._.js +0 -3
  536. package/standalone/.next/server/chunks/ssr/_0zfjp5l._.js +0 -26
  537. package/standalone/.next/server/chunks/ssr/_1-3pbk9._.js +0 -3
  538. package/standalone/.next/server/chunks/ssr/_1-s8jib._.js +0 -10
  539. package/standalone/.next/server/chunks/ssr/_11-g9w5._.js +0 -3
  540. package/standalone/.next/server/chunks/ssr/_12ekas6._.js +0 -3
  541. package/standalone/.next/server/chunks/ssr/_16zlatv._.js +0 -21
  542. package/standalone/.next/server/chunks/ssr/_1a-x7w1._.js +0 -3
  543. package/standalone/.next/server/chunks/ssr/_1bgz3gf._.js +0 -29
  544. package/standalone/.next/server/chunks/ssr/_1c5bgm_._.js +0 -3
  545. package/standalone/.next/server/chunks/ssr/_1dwtoxe._.js +0 -3
  546. package/standalone/.next/server/chunks/ssr/_1fy4o1o._.js +0 -22
  547. package/standalone/.next/server/chunks/ssr/_1jqp1me._.js +0 -3
  548. package/standalone/.next/server/chunks/ssr/_1lcmi6f._.js +0 -3
  549. package/standalone/.next/server/chunks/ssr/_1lxr3mb._.js +0 -24
  550. package/standalone/.next/server/chunks/ssr/_1opkxfb._.js +0 -5
  551. package/standalone/.next/server/chunks/ssr/_1xbulhi._.js +0 -5
  552. package/standalone/.next/server/chunks/ssr/_1yctl8w._.js +0 -3
  553. package/standalone/.next/server/chunks/ssr/_210pgrk._.js +0 -3
  554. package/standalone/.next/server/chunks/ssr/_next-internal_server_app_[locale]_action-center_page_actions_13rr4o6.js +0 -3
  555. package/standalone/.next/server/chunks/ssr/node_modules_0k28hjd._.js +0 -3
  556. package/standalone/.next/server/chunks/ssr/node_modules_@radix-ui_0zzd3o1._.js +0 -3
  557. package/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1gjv--k.js +0 -4
  558. package/standalone/.next/server/chunks/ssr/src_app_[locale]_page_tsx_00h-a9t._.js +0 -3
  559. package/standalone/.next/server/chunks/ssr/src_components_ui_0wr97kq._.js +0 -3
  560. package/standalone/.next/static/chunks/01oxnu86_we4m.js +0 -27
  561. package/standalone/.next/static/chunks/04bs8b3m4jjfr.js +0 -1
  562. package/standalone/.next/static/chunks/0556n0z5a2tir.js +0 -75
  563. package/standalone/.next/static/chunks/05r79mew_ttoh.js +0 -3
  564. package/standalone/.next/static/chunks/09jeps1e4upyd.js +0 -27
  565. package/standalone/.next/static/chunks/0f01o_texfoo2.js +0 -3
  566. package/standalone/.next/static/chunks/0g6kioy8mgt7g.js +0 -1
  567. package/standalone/.next/static/chunks/0mv6tgkxvot06.css +0 -1
  568. package/standalone/.next/static/chunks/0o6ubiw38_cix.js +0 -1
  569. package/standalone/.next/static/chunks/0qj_41gt1wo57.js +0 -1
  570. package/standalone/.next/static/chunks/0qq_ney086s74.js +0 -26
  571. package/standalone/.next/static/chunks/0tpuj0br2ze72.js +0 -1
  572. package/standalone/.next/static/chunks/0vetr9kzsvj8y.js +0 -27
  573. package/standalone/.next/static/chunks/0wegc5r-um7u_.js +0 -49
  574. package/standalone/.next/static/chunks/0xcxze4dn_g4k.js +0 -1
  575. package/standalone/.next/static/chunks/0z9rkj63eff65.js +0 -98
  576. package/standalone/.next/static/chunks/1-c5wiq8svvl6.js +0 -1
  577. package/standalone/.next/static/chunks/16vhqh6nwwd7k.js +0 -92
  578. package/standalone/.next/static/chunks/17sqvm2t_n5w8.js +0 -71
  579. package/standalone/.next/static/chunks/1fgowguozghfx.js +0 -7
  580. package/standalone/.next/static/chunks/1fkbsex7h55uj.js +0 -26
  581. package/standalone/.next/static/chunks/1qd5oxoewa3-m.js +0 -23
  582. package/standalone/.next/static/chunks/1sd9kcg_rkzsu.js +0 -1
  583. package/standalone/.next/static/chunks/1vnglbvh2-2hk.js +0 -1
  584. package/standalone/.next/static/chunks/1zejpj9ig77ly.js +0 -3
  585. package/standalone/.next/static/chunks/26gi3xhwq--4r.js +0 -59
  586. package/standalone/.next/static/chunks/29xjwnfybrwxv.js +0 -1
  587. package/standalone/.next/static/chunks/2gepmmzvedd5t.js +0 -79
  588. package/standalone/.next/static/chunks/2ib66g1yoqcp0.js +0 -80
  589. package/standalone/.next/static/chunks/2kc9nohdlg9t0.js +0 -1
  590. package/standalone/.next/static/chunks/2pbe_7ml0_4a_.js +0 -24
  591. package/standalone/.next/static/chunks/2ratgipwpyy-4.js +0 -54
  592. package/standalone/.next/static/chunks/2vwr8tr2n27dp.js +0 -28
  593. package/standalone/.next/static/chunks/2w3pt99tr43fi.js +0 -1
  594. package/standalone/.next/static/chunks/2yf79r7q699-j.js +0 -29
  595. package/standalone/.next/static/chunks/2zx_h2f_a9r1j.js +0 -1
  596. package/standalone/.next/static/chunks/2zy-2tckw0276.js +0 -23
  597. package/standalone/.next/static/chunks/3-f9ycmnsbdq8.js +0 -55
  598. package/standalone/.next/static/chunks/34vrejlxl0pra.js +0 -59
  599. package/standalone/.next/static/chunks/3_6xtrl0kow9e.js +0 -1
  600. package/standalone/.next/static/chunks/3bn48ltoik3ze.js +0 -27
  601. package/standalone/.next/static/chunks/3c5mb2oebs86p.js +0 -53
  602. package/standalone/.next/static/chunks/3d7uu4x6cmams.js +0 -15
  603. package/standalone/.next/static/chunks/3g2-dbo8jvfd9.js +0 -1
  604. package/standalone/.next/static/chunks/3n4fg78e0htw8.js +0 -13
  605. package/standalone/.next/static/chunks/3r79mip8vpj0u.js +0 -88
  606. package/standalone/.next/static/chunks/3t347msjxauue.js +0 -42
  607. package/standalone/.next/static/chunks/3xme7jwjj_ntj.js +0 -157
  608. package/standalone/.next/static/chunks/44xkvdnq-prf1.js +0 -9
  609. /package/standalone/.next/static/{oamIXqlqBEvesdGgUx6UB → d77QrJpn4kUxmG3bXgnZw}/_buildManifest.js +0 -0
  610. /package/standalone/.next/static/{oamIXqlqBEvesdGgUx6UB → d77QrJpn4kUxmG3bXgnZw}/_clientMiddlewareManifest.js +0 -0
  611. /package/standalone/.next/static/{oamIXqlqBEvesdGgUx6UB → d77QrJpn4kUxmG3bXgnZw}/_ssgManifest.js +0 -0
@@ -2262,6 +2262,7 @@ type SidebarActivityCounts {
2262
2262
  sessions: Int!
2263
2263
  builds: Int!
2264
2264
  workflows: Int!
2265
+ commands: Int!
2265
2266
  }
2266
2267
 
2267
2268
  type SidebarUsageToday {
@@ -4599,6 +4600,66 @@ extend type Subscription {
4599
4600
  agentRunChanged(runId: ID!): AgentRun!
4600
4601
  runEventAdded(runId: ID!): RunEvent!
4601
4602
  runQuestionChanged(runId: ID!): RunQuestionBatch!
4603
+ }`,`enum GlobalSearchGroup {
4604
+ WORKTREES
4605
+ TICKETS
4606
+ PULL_REQUESTS
4607
+ REPOSITORIES
4608
+ CODEBASES
4609
+ WORKFLOWS
4610
+ GITHUB_ACTIONS
4611
+ BUILDS
4612
+ AGENTS_JOBS
4613
+ PLANS_SESSIONS
4614
+ COMMANDS_RUNS
4615
+ SKILLS
4616
+ DEVICES_PROFILES
4617
+ }
4618
+
4619
+ enum GlobalSearchKind {
4620
+ WORKTREE
4621
+ JIRA_TICKET
4622
+ GITHUB_PULL_REQUEST
4623
+ REPOSITORY
4624
+ CODEBASE
4625
+ WORKFLOW
4626
+ WORKFLOW_RUN
4627
+ GITHUB_ACTIONS_RUN
4628
+ BUILD
4629
+ AGENT
4630
+ AGENT_JOB
4631
+ PLAN
4632
+ SESSION
4633
+ COMMAND
4634
+ COMMAND_RUN
4635
+ SKILL
4636
+ SKILL_GROUP
4637
+ DEVICE
4638
+ PROVISIONING_PROFILE
4639
+ }
4640
+
4641
+ type GlobalSearchItem {
4642
+ key: ID!
4643
+ kind: GlobalSearchKind!
4644
+ group: GlobalSearchGroup!
4645
+ title: String!
4646
+ subtitle: String
4647
+ href: String!
4648
+ status: String
4649
+ updatedAt: String
4650
+ children: [GlobalSearchItem!]!
4651
+ }
4652
+
4653
+ type GlobalSearchPayload {
4654
+ items: [GlobalSearchItem!]!
4655
+ }
4656
+
4657
+ extend type Query {
4658
+ globalSearch(
4659
+ query: String!
4660
+ firstPerGroup: Int = 5
4661
+ relatedFirst: Int = 3
4662
+ ): GlobalSearchPayload!
4602
4663
  }`,`type SigningAgentSummary {
4603
4664
  id: ID!
4604
4665
  name: String!
@@ -6803,7 +6864,7 @@ ${a}`].join("\n\n").slice(0,2e6)),this.createInternal({...t,attachmentIds:n,kind
6803
6864
  ${e.prompt}`).join("\n\n"),n.run.events.filter(e=>null===n.eventSequence?e.createdAt<=n.createdAt:e.sequence<=n.eventSequence).map(e=>`[${e.type}] ${e.summary}${e.detailMarkdown?`
6804
6865
  ${e.detailMarkdown}`:""}`).join("\n\n"),`Questions:
6805
6866
  ${n.questions.map(e=>`- ${e.prompt}`).join("\n")}`,`Revised answer:
6806
- ${JSON.stringify(t,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),c=await ed3(i,"SESSION"),u=(0,AB.randomUUID)(),d=(0,AB.randomUUID)(),h=new Date,p=await i.agentRun.create({data:{id:u,kind:"SESSION",displayNumber:c,status:"IN_PROGRESS",phase:"ANSWER_REVISION_QUEUED",provider:n.run.provider,worktreeId:n.run.worktreeId,agentId:n.run.agentId,jiraIssueKey:n.run.jiraIssueKey,repositoryName:n.run.repositoryName,branch:n.run.branch,model:n.run.model,effort:n.run.effort,webSearchEnabled:n.run.webSearchEnabled,initialPrompt:l,parentRunId:n.runId,parentRunNumber:n.run.displayNumber,followUpMode:"ANSWER_REVISION",inputs:{create:{id:d,sequence:0,kind:"ANSWER_REVISION",prompt:l}}}});if(await i.worktreeRunLease.deleteMany({where:{worktreeId:n.run.worktreeId,runId:n.runId}}),await i.worktreeRunLease.findUnique({where:{worktreeId:n.run.worktreeId}}))throw Error("Another Session owns this worktree");await i.worktreeRunLease.create({data:{worktreeId:n.run.worktreeId,runId:u}}),await i.agentRun.update({where:{id:n.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:h}});let g=await ed7(i,{runId:u,agentId:n.run.agentId,type:"REVISE_ANSWER",payload:{batchId:e,revisionId:s,inputId:d,stash:!!A,rollback:r,checkpoint:n.checkpoint}});return{batch:n,run:p,command:g,sourceRunId:n.runId,sourceAgentId:n.run.agentId}});return ed8(n.sourceRunId),ed8(n.run.id),ed5(n.command,n.sourceAgentId),this.get(n.run.id)}async pendingCommands(e){return(await am()).runCommand.findMany({where:{agentId:e,status:{in:["QUEUED","RUNNING"]}},orderBy:[{createdAt:"asc"},{sequence:"asc"}],take:200,include:ed9})}async claimCommand(e,t){let A=await am(),r=await A.runCommand.findUnique({where:{id:t},select:{agentId:!0,status:!0,run:{select:{worktreeId:!0}}}});if(!r||r.agentId!==e)throw Error("Run command not found");"QUEUED"===r.status&&r.run.worktreeId&&await this.diskSpace?.assertWorktreeCanStart(r.run.worktreeId),await A.runCommand.updateMany({where:{id:t,agentId:e,status:"QUEUED"},data:{status:"RUNNING",claimedAt:new Date}});let i=await A.runCommand.findUnique({where:{id:t},include:ed9});if(!i||i.agentId!==e)throw Error("Run command not found");if("RUNNING"!==i.status)throw Error("Run command cannot be claimed");return i}async completeCommand(e,t,A,r){let i=await am(),n=await i.runCommand.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run command not found");let a=await i.runCommand.update({where:{id:t},data:{status:"SUCCEEDED"===A?"SUCCEEDED":"FAILED",error:ed0(r,2e4),finishedAt:new Date}});if("DELETE_NATIVE"===a.type&&"SUCCEEDED"===a.status){let e=await i.agentRun.findUnique({where:{id:a.runId},include:{inputs:{include:{attachments:!0}}}});if(e){let t=e.inputs.flatMap(e=>e.attachments.map(({storagePath:e})=>e));await i.agentRun.delete({where:{id:e.id}}),await edq(t)}}else if("FAILED"===a.status)await i.agentRun.updateMany({where:{id:a.runId,status:{notIn:[...edW]}},data:{error:a.error,phase:`${a.type}_FAILED`,...["START","PLAY_PLAN","CONTINUE"].includes(a.type)?{status:"FAILED",finishedAt:new Date}:{},...["PREPARE_ANSWER_REVISION","REVISE_ANSWER"].includes(a.type)?{status:"PAUSED",finishedAt:null}:{}}}),["START","PLAY_PLAN","CONTINUE"].includes(a.type)&&await i.worktreeRunLease.deleteMany({where:{runId:a.runId}});else if(["PAUSE","CANCEL"].includes(a.type)){let e="CANCEL"===a.type;await i.agentRun.updateMany({where:{id:a.runId,status:{notIn:[...edW]}},data:{status:e?"CANCELLED":"PAUSED",phase:e?"CANCELLED":"PAUSED",finishedAt:e?new Date:null}}),e&&await i.worktreeRunLease.deleteMany({where:{runId:a.runId}})}return ed8(a.runId),a}async beginAttempt(e,t,A){let r=await am(),i=await r.agentRun.findUnique({where:{id:t},include:{attempts:!0}});if(!i||i.agentId!==e)throw Error("Run not found for this agent");if(edW.has(i.status))throw Error("Run is already finished");let n=i.attempts.length,a=await r.runAttempt.create({data:{id:(0,AB.randomUUID)(),runId:t,generation:n,nativeId:A||null,nativeKey:A?`${e}:${i.provider}:${A}`:null,status:"RUNNING"}});return await r.agentRun.update({where:{id:t},data:{phase:"RUNNING",startedAt:i.startedAt??new Date}}),ed8(t),a}async updateAttemptNativeId(e,t,A,r){let i=await am(),n=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:t},include:{run:!0}});if(!n||n.run.agentId!==e)throw Error("Attempt not found");let a=`${e}:${n.run.provider}:${A}`,s=await i.runAttempt.findUnique({where:{nativeKey:a}});if(s&&s.id!==t){if(s.runId!==n.runId)throw Error("Native provider session belongs to another run");await i.runAttempt.update({where:{id:s.id},data:{nativeKey:null}})}let o=await i.runAttempt.update({where:{id:t},data:{nativeId:A,nativeKey:a}});return r&&await i.agentRun.update({where:{id:n.runId},data:{providerVersion:r}}),o});return ed8(n.runId),n}async appendEvents(e,t,A,r){let i=await am(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");let a=r.slice(0,500).map(e=>{let r=edX(e.summary,"Event summary",2e3);return{id:e.id,runId:t,attemptId:A,sequence:e.sequence,type:edX(e.type,"Event type",100).toUpperCase(),summary:r,searchText:ed0(e.searchText,1e5)??r,detailMarkdown:ed0(e.detailMarkdown,5e5),rawJson:void 0===e.raw?null:JSON.stringify(e.raw),createdAt:ed2(e.createdAt)}});if(!a.length)return[];let s=await i.$transaction(async e=>{let r=new Set((await e.runEvent.findMany({where:{id:{in:a.map(e=>e.id)}},select:{id:!0}})).map(({id:e})=>e)),i=a.filter(e=>!r.has(e.id));if(i.length){await e.runEvent.createMany({data:i});let r=i.filter(e=>e.type.includes("TOOL")&&!e.type.includes("QUESTION")).map(e=>({id:`event:${e.id}`,runId:t,attemptId:A,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}));r.length&&(await e.runToolCall.createMany({data:r}),await e.agentRun.update({where:{id:t},data:{toolCallCount:await e.runToolCall.count({where:{runId:t}})}}))}return e.runEvent.findMany({where:{id:{in:a.map(e=>e.id)}},orderBy:{sequence:"asc"}})});for(let e of s)aE.publish(aj(t),{runEventAdded:e});return ed8(t),s}async reportQuestion(e,t,A,r,i,n){if(!n.length||n.length>10)throw Error("Question batch is invalid");let a=await am(),s=await a.$transaction(async a=>{let s=await a.agentRun.findUnique({where:{id:t},include:{worktree:!0}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");if(r){let e=await a.runQuestionBatch.findUnique({where:{runId_nativeRequestId:{runId:t,nativeRequestId:r}},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}});if(e)return{batch:e,notification:null}}let o=(0,AB.randomUUID)(),l=await a.runQuestionBatch.create({data:{id:o,runId:t,attemptId:A,nativeRequestId:r,eventSequence:Number.isInteger(i)&&(i??-1)>=-1?i:null,questions:{create:n.map((e,t)=>({id:`${o}:${t}:${e.id||"question"}`,position:t,header:ed0(e.header,200),prompt:edX(e.prompt,"Question",1e4),multiSelect:!!e.multiSelect,allowCustom:!1!==e.allowCustom,options:{create:(e.options??[]).map((e,t)=>({id:(0,AB.randomUUID)(),position:t,label:edX(e.label,"Option label",500),description:ed0(e.description,2e3)}))}}))}},include:{questions:{include:{options:!0}}}});return await a.agentRun.update({where:{id:t},data:{phase:"WAITING_FOR_ANSWER"}}),{batch:l,notification:this.notifications?await this.notifications.recordInTransaction(a,{dedupeKey:`run:${t}:question:${o}`,typeKey:"RUN_NEEDS_ANSWER",title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} needs an answer`,body:n[0].prompt.slice(0,1e3),href:ed4(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:s.worktree?.highlightColor}):null}});return this.notifications?.created(s.notification),ed8(t),aE.publish(a$(t),{runQuestionChanged:{id:s.batch.id,runId:t}}),s.batch}async reportUsage(e,t,A,r){let i=await am(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");let a=e=>Number.isFinite(e)&&(e??0)>=0?Math.floor(e):0;return await i.$transaction(async e=>{let i=await e.runModelUsage.findFirst({where:{runId:t,attemptId:A,model:r.model}}),n={inputTokens:a(r.inputTokens),outputTokens:a(r.outputTokens),reasoningTokens:a(r.reasoningTokens),cacheReadTokens:a(r.cacheReadTokens),cacheWriteTokens:a(r.cacheWriteTokens),estimatedCost:r.estimatedCost??null};i?await e.runModelUsage.update({where:{id:i.id},data:n}):await e.runModelUsage.create({data:{id:(0,AB.randomUUID)(),runId:t,attemptId:A,model:r.model,...n}});let s=await e.runModelUsage.aggregate({where:{runId:t},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}}),o=await e.runModelUsage.findMany({where:{runId:t,estimatedCost:{not:null}},select:{model:!0,estimatedCost:!0}}),l=o.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,a(r.toolCallCount)),estimatedCost:l??(o.length?o.reduce((e,t)=>e+(t.estimatedCost??0),0):null),pricingSource:ed0(r.pricingSource,200),pricingUpdatedAt:new Date}})}),ed8(t),this.get(t)}async finishAttempt(e,t,A){let r=A.status.toUpperCase();if(!["PAUSED","COMPLETED","CANCELLED","FAILED"].includes(r))throw Error("Run completion status is invalid");let i=await am(),n=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:t},include:{run:{include:{worktree:!0}}}});if(!n||n.run.agentId!==e)throw Error("Attempt not found");let a=edW.has(n.run.status)?n.run.status:r;await i.runAttempt.update({where:{id:t},data:{status:a,finishedAt:new Date}}),await i.runQuestionBatch.updateMany({where:{runId:n.runId,status:"PENDING"},data:{status:"SUPERSEDED",supersededAt:new Date}});let s=edW.has(n.run.status)?n.run:await i.agentRun.update({where:{id:n.runId},data:{status:r,phase:A.phase?.trim().toUpperCase()||r,finalOutput:ed0(A.finalOutput,2e6),error:ed0(A.error,2e4),finishedAt:"PAUSED"===r?null:new Date}});edW.has(a)&&await i.worktreeRunLease.deleteMany({where:{runId:s.id}});let o="COMPLETED"===a?"RUN_COMPLETED":"FAILED"===a?"RUN_FAILED":"CANCELLED"===a?"RUN_CANCELLED":"RECOVERY_PAUSED"===A.phase?"RUN_RECOVERY_PAUSED":null,l=o&&this.notifications?await this.notifications.recordInTransaction(i,{dedupeKey:`run:${s.id}:status:${a}:${n.generation}`,typeKey:o,title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} ${a.toLowerCase()}`,body:A.error||A.finalOutput?.slice(0,1e3)||`The ${s.kind.toLowerCase()} is ${a.toLowerCase()}.`,href:ed4(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:n.run.worktree?.highlightColor}):null;return{run:s,notification:l}});return this.notifications?.created(n.notification),ed8(n.run.id),this.get(n.run.id)}async reportCheckpoint(e,t,A,r){let i=await am(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");if(r.questionBatchId){let e=await i.runQuestionBatch.findUnique({where:{id:r.questionBatchId}});if(!e||e.runId!==t)throw Error("Question batch not found")}let a=await i.runCheckpoint.create({data:{id:(0,AB.randomUUID)(),runId:t,attemptId:A,questionBatchId:r.questionBatchId??null,kind:edX(r.kind,"Checkpoint kind",100).toUpperCase(),headSha:ed0(r.headSha,100),branch:ed0(r.branch,500),upstreamSha:ed0(r.upstreamSha,100),indexTree:ed0(r.indexTree,100),worktreeTree:ed0(r.worktreeTree,100),refName:ed0(r.refName,1e3),manifestJson:ed0(r.manifestJson,2e6),diffSummary:ed0(r.diffSummary,5e5),diffPatch:ed0(r.diffPatch,2e6),stashRef:ed0(r.stashRef,1e3)}});return ed8(t),a}async reportAnswerRevisionPreview(e,t,A,r){let i=await am(),n=await i.runQuestionBatch.findUnique({where:{id:t},include:{run:!0}});if(!n?.runId||!n.run||n.run.agentId!==e||"MANAGED"!==n.run.origin)throw Error("Question batch not found for this agent");let a=await i.runQuestionBatch.update({where:{id:t},data:{revisionPreparedAt:new Date,rollbackPatch:A.slice(0,2e6),pushedCommitWarning:ed0(r,2e4)},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}}}});return ed8(n.runId),aE.publish(a$(n.runId),{runQuestionChanged:{id:t,runId:n.runId}}),a}async applyAnswerRevision(e,t,A,r){let i=await am(),n=await i.$transaction(async i=>{let n=await i.runQuestionBatch.findUnique({where:{id:t},include:{run:!0,attempt:!0}}),a=await i.runAttempt.findUnique({where:{id:r},include:{run:!0}}),s=await i.runAnswerRevision.findUnique({where:{id:A}});if(!n?.runId||!n.run||n.run.agentId!==e||!n.attempt||!a||a.run.parentRunId!==n.runId||"ANSWER_REVISION"!==a.run.followUpMode||!s||s.batchId!==t)throw Error("Answer revision cannot be applied");let o=new Date,l=(await i.runAttempt.findMany({where:{runId:n.runId,generation:{gte:n.attempt.generation}},select:{id:!0}})).map(({id:e})=>e);await i.runAttempt.updateMany({where:{id:{in:l}},data:{status:"SUPERSEDED",supersededAt:o,finishedAt:o}}),await i.runEvent.updateMany({where:{runId:n.runId,sequence:{gt:n.eventSequence??-1},supersededAt:null},data:{supersededAt:o}}),await i.runToolCall.updateMany({where:{attemptId:{in:l},supersededAt:null},data:{supersededAt:o}}),await i.runModelUsage.updateMany({where:{attemptId:{in:l}},data:{superseded:!0}});let c=(await i.runQuestionBatch.findMany({where:{runId:n.runId,createdAt:{gt:n.createdAt}},select:{id:!0}})).map(({id:e})=>e);return await i.runQuestionBatch.updateMany({where:{id:{in:c}},data:{status:"SUPERSEDED",supersededAt:o}}),await i.runAnswerRevision.updateMany({where:{OR:[{batchId:{in:c}},{batchId:t,id:{not:A}}],supersededAt:null},data:{supersededAt:o}}),await i.runAnswerRevision.update({where:{id:A},data:{replacementAttemptId:r}}),await i.agentRun.update({where:{id:n.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:o}}),await i.agentRun.update({where:{id:a.runId},data:{status:"IN_PROGRESS",phase:"RUNNING"}}),{sourceRunId:n.runId,replacementRunId:a.runId}});return ed8(n.sourceRunId),ed8(n.replacementRunId),this.get(n.replacementRunId)}async importRuns(e,t,A){let r=edZ(edK,t,"Provider"),i=await am(),n=0;for(let t of A){let A=`${e}:${r}:${edX(t.nativeId,"Native ID",500)}`,a=(()=>{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"===e||"ERROR"===e?"FAILED":"COMPLETED"})(),s=await i.runAttempt.findUnique({where:{nativeKey:A},include:{run:!0}});if(s){if("IMPORTED"===s.run.origin){let e="SESSION"===s.run.kind&&"IN_PROGRESS"===a?await i.worktreeRunLease.findUnique({where:{worktreeId:s.run.worktreeId??""}}):null;await i.$transaction([i.runAttempt.update({where:{id:s.id},data:{rawMetadataJson:JSON.stringify(t.rawMetadata??{})}}),i.agentRun.update({where:{id:s.runId},data:{status:a,phase:e?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",model:t.model||s.run.model,effort:ed0(t.effort,100),finalOutput:ed0(t.finalOutput,2e6),branch:t.branch??s.run.branch,jiraIssueKey:ed1(t.jiraIssueKey),nativeArchivedAt:t.archived?new Date:null,startedAt:ed2(t.createdAt)??s.run.startedAt,finishedAt:"IN_PROGRESS"===a?null:ed2(t.updatedAt)??s.run.finishedAt}})]),ed8(s.runId)}continue}let o=await i.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{repository:!0}}}});if(!o||o.codebase.agentId!==e)continue;let l=t.kind?.toUpperCase()==="PLAN"?"PLAN":"SESSION",c="SESSION"===l&&"IN_PROGRESS"===a?await i.worktreeRunLease.findUnique({where:{worktreeId:o.id}}):null,u=await i.$transaction(e=>ed3(e,l)),d=(0,AB.randomUUID)();await i.agentRun.create({data:{id:d,kind:l,displayNumber:u,status:a,phase:c?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",origin:"IMPORTED",provider:r,worktreeId:o.id,agentId:e,jiraIssueKey:ed1(t.jiraIssueKey),repositoryName:o.codebase.repository.name,branch:t.branch??o.branch,model:t.model||"unknown",effort:ed0(t.effort,100),initialPrompt:t.prompt?.trim()||"Imported provider history",finalOutput:ed0(t.finalOutput,2e6),archivedAt:t.archived?new Date:null,nativeArchivedAt:t.archived?new Date:null,startedAt:ed2(t.createdAt),finishedAt:ed2(t.updatedAt),createdAt:ed2(t.createdAt),attempts:{create:{id:(0,AB.randomUUID)(),generation:0,nativeId:t.nativeId,nativeKey:A,status:"IMPORTED",rawMetadataJson:JSON.stringify(t.rawMetadata??{})}},inputs:{create:{id:(0,AB.randomUUID)(),sequence:0,kind:"INITIAL",prompt:t.prompt?.trim()||"Imported provider history"}}}}),ed8(d),n+=1}return await i.runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:r}},create:{id:(0,AB.randomUUID)(),agentId:e,provider:r,status:"IDLE",lastCompletedAt:new Date,importedCount:n},update:{status:"IDLE",lastCompletedAt:new Date,lastError:null,importedCount:{increment:n}}}),n}async providerCatalog(e={}){let t=await am(),A=!!(e.runId||e.worktreeId),r=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,[i,n]=A&&!r?[[],[]]:await Promise.all([t.agent.findMany({where:r?{id:r}:void 0,select:{id:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),t.runProviderSync.findMany({where:r?{agentId:r}:void 0,orderBy:{updatedAt:"desc"}})]);return edK.map(e=>{let t=`runs.provider.${e.toLowerCase()}`,A=i.some(A=>{let r=n.find(t=>t.agentId===A.id&&t.provider===e);return!A.disconnectedAt&&!!A.lastSeenAt&&Date.now()-A.lastSeenAt.getTime()<=a8(A)&&JSON.parse(A.capabilitiesJson).includes(t)&&r?.status!=="FAILED"}),r=n.find(({provider:t})=>t===e)?.catalogJson,a=r?JSON.parse(r):null;return{key:e,label:"OPENCODE"===e?"OpenCode":"CLAUDE"===e?"Claude":"Codex",available:A,models:a?.models?.length?a.models:[{id:"default",label:"Provider default",efforts:["auto","low","medium","high"]}],supportsWebSearch:a?.capabilities?.webSearch??!0,supportsQuestions:a?.capabilities?.questions??!0,supportsImport:a?.capabilities?.import??!0,supportsPause:a?.capabilities?.pause??!0,supportsSteering:a?.capabilities?.steering??!0,supportsResume:a?.capabilities?.resume??!0,supportsNativeDelete:a?.capabilities?.nativeDelete??!0}})}async providerImportStatus(){return(await am()).runProviderSync.findMany({orderBy:[{agentId:"asc"},{provider:"asc"}]})}async reportProviderImportStatus(e,t,A,r,i){let n=edZ(edK,t,"Provider"),a=A.trim().toUpperCase();if(!["SYNCING","IDLE","FAILED"].includes(a))throw Error("Import status is invalid");return(await am()).runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:n}},create:{id:(0,AB.randomUUID)(),agentId:e,provider:n,status:a,lastStartedAt:"SYNCING"===a?new Date:void 0,lastCompletedAt:"IDLE"===a?new Date:void 0,lastError:ed0(r,2e4),catalogJson:void 0===i?void 0:JSON.stringify(i)},update:{status:a,lastStartedAt:"SYNCING"===a?new Date:void 0,lastCompletedAt:"IDLE"===a?new Date:void 0,lastError:"FAILED"===a?ed0(r,2e4):null,catalogJson:void 0===i?void 0:JSON.stringify(i)}})}subscribeRuns(){return aE.iterate(aO)}subscribeRun(e){return aE.iterate(aY(e))}subscribeEvents(e){return aE.iterate(aj(e))}subscribeQuestions(e){return aE.iterate(a$(e))}async requireWorktree(e,t){let A=await am(),r=await A.worktree.findUnique({where:{id:edX(e,"Worktree",500)},include:{codebase:{include:{repository:!0,agent:!0}}}});if(!r||"AVAILABLE"!==r.availability)throw Error("Worktree is unavailable");if(t){let e=r.codebase.agent,i=JSON.parse(e.capabilitiesJson);if(e.disconnectedAt||!e.lastSeenAt||Date.now()-e.lastSeenAt.getTime()>a8(e)||!i.includes(`runs.provider.${t.toLowerCase()}`))throw Error(`${t} is unavailable on this worktree's agent`);let n=await A.runProviderSync.findUnique({where:{agentId_provider:{agentId:r.codebase.agentId,provider:t}}});if(n?.status==="FAILED")throw Error(`${t} is unavailable: ${n.lastError??"provider capability check failed"}`)}return r}async requireAttachments(e,t){if(!e.length)return;if(e.length>100)throw Error("Too many attachments");let A=await am(),r=await A.runAttachment.findMany({where:{id:{in:e},inputId:null,...t?{OR:[{draftId:t},{draftId:null}]}:{draftId:null}}});if(r.length!==e.length)throw Error("One or more attachments are unavailable");if(r.reduce((e,t)=>e+t.size,0)>0x6400000)throw Error("Attachments exceed the 100 MB input limit")}}let ehA=["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME","ANY_WORKTREE","REPOSITORY_WORKTREE"],ehr=["NEVER","ON_FAILURE","ALWAYS"],ehi=["QUEUED","RUNNING","RESTARTING","CANCELLING"],ehn=["SUCCEEDED","FAILED","CANCELLED"];function eha(e,t,A){let r=t.trim().toUpperCase();if(!e.includes(r))throw Error(`${A} is not supported`);return r}function ehs(e,t,A){let r=e.trim();if(!r)throw Error(`${t} is required`);if(r.length>A)throw Error(`${t} is too long`);return r}function eho(e){aE.publish(aU,{commandsChanged:e})}function ehl(e){aE.publish(aF,{commandRunsChanged:e}),aE.publish(aP(e.id),{commandRunChanged:e})}class ehc{agentControl;notifications;timer;reconciliation;constructor(e,t){this.agentControl=e,this.notifications=t,this.timer=null,this.reconciliation=null,this.agentControl.registerCompletionHandler(Ay,e=>this.handleAttemptCompletion(e)),this.agentControl.registerConnectionHandler(e=>this.reconcileWithReporting({agentId:e}))}startRuntime(){this.timer||(this.reconcileWithReporting(),this.timer=setInterval(()=>void this.reconcileWithReporting(),1e3),this.timer.unref())}async reconcileWithReporting(e={}){if(this.reconciliation)return this.reconciliation;this.reconciliation=this.reconcile(e);try{await this.reconciliation}catch(e){console.error("Command runtime reconciliation failed:",e)}finally{this.reconciliation=null}}async listDefinitions(e=!1){return(await am()).commandDefinition.findMany({where:e?{}:{archivedAt:null},include:{targetAgent:!0,targetRepository:!0},orderBy:[{archivedAt:"asc"},{name:"asc"}]})}async getDefinition(e){return(await am()).commandDefinition.findUnique({where:{id:e},include:{targetAgent:!0,targetRepository:!0}})}normalizeDefinition(e){let t=eha(ehA,e.targetKind,"Target scope"),A=eha(ehr,e.restartPolicy??"NEVER","Restart policy"),r=void 0===e.restartLimit?3:e.restartLimit;if(null!==r&&(!Number.isInteger(r)||r<0||r>100))throw Error("Restart limit must be null or an integer from 0 to 100");let i="SPECIFIC_AGENT_HOME"===t,n="REPOSITORY_WORKTREE"===t;if(!!e.targetAgentId!==i)throw Error(i?"A specific-agent command requires an agent":"This target scope does not accept a specific agent");if(!!e.targetRepositoryId!==n)throw Error(n?"A repository-worktree command requires a repository":"This target scope does not accept a repository");return{name:ehs(e.name,"Name",120),description:(e.description??"").trim().slice(0,2e3),script:ehs(e.script,"Script",1e6),targetKind:t,targetAgentId:e.targetAgentId??null,targetRepositoryId:e.targetRepositoryId??null,restartPolicy:A,restartLimit:r,quickActionEnabled:e.quickActionEnabled??!1,quickActionIconKey:ehs(e.quickActionIconKey??"terminal","Quick action icon",40),quickActionButtonVariant:ehs(e.quickActionButtonVariant??"default","Quick action style",40),notificationsEnabled:e.notificationsEnabled??!0}}async createDefinition(e){let t=await am(),A=await t.commandDefinition.create({data:{id:(0,AB.randomUUID)(),...this.normalizeDefinition(e)},include:{targetAgent:!0,targetRepository:!0}});return eho(A),A}async updateDefinition(e,t){let A=await am(),r=await A.commandDefinition.update({where:{id:e},data:this.normalizeDefinition(t),include:{targetAgent:!0,targetRepository:!0}});return eho(r),r}async archiveDefinition(e,t){let A=await am(),r=await A.commandDefinition.update({where:{id:e},data:{archivedAt:t?new Date:null},include:{targetAgent:!0,targetRepository:!0}});return eho(r),r}async eligibleForAgent(e){return(await am()).commandDefinition.findMany({where:{archivedAt:null,OR:[{targetKind:"ANY_AGENT_HOME"},{targetKind:"SPECIFIC_AGENT_HOME",targetAgentId:e}]},include:{targetAgent:!0,targetRepository:!0},orderBy:{name:"asc"}})}async eligibleForWorktree(e){let t=await am(),A=await t.worktree.findUnique({where:{id:e},select:{codebase:{select:{repositoryId:!0}}}});if(!A)throw Error("Worktree not found");return t.commandDefinition.findMany({where:{archivedAt:null,OR:[{targetKind:"ANY_WORKTREE"},{targetKind:"REPOSITORY_WORKTREE",targetRepositoryId:A.codebase.repositoryId}]},include:{targetAgent:!0,targetRepository:!0},orderBy:{name:"asc"}})}async listRuns(e){let t=await am(),A=Math.max(1,Math.min(e.first??50,200)),r=e.search?.trim(),i={...e.includeArchived?{}:{archivedAt:null},...e.agentId?{agentId:e.agentId}:{},...e.worktreeId?{worktreeId:e.worktreeId}:{},...r?{OR:[{snapshotName:{contains:r}},{agentName:{contains:r}},{worktreePath:{contains:r}}]}:{}},[n,a]=await Promise.all([t.commandRun.findMany({where:i,include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{orderBy:{attempt:"asc"}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}}),t.commandRun.count({where:i})]),s=n.length>A,o=n.slice(0,A);return{nodes:o,totalCount:a,pageInfo:{hasNextPage:s,endCursor:o.at(-1)?.id??null}}}async getRun(e){return(await am()).commandRun.findUnique({where:{id:e},include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{include:{agentJob:!0},orderBy:{attempt:"asc"}},predecessor:!0,successor:!0}})}async listOutput(e,t=0,A=-1,r=1e3){let i=await am();return r<1?[]:i.commandRunOutputChunk.findMany({where:{OR:[{attempt:{runId:e,attempt:{gt:t}}},{attempt:{runId:e,attempt:t},sequence:{gt:A}}]},include:{attempt:{select:{attempt:!0,runId:!0}}},orderBy:[{attempt:{attempt:"asc"}},{sequence:"asc"}],take:Math.max(1,Math.min(r,5e3))})}async resolveTarget(e,t){let A=await am();if("ANY_AGENT_HOME"===e.targetKind||"SPECIFIC_AGENT_HOME"===e.targetKind){if(!t.agentId||t.worktreeId)throw Error("This command requires an agent-home target");if("SPECIFIC_AGENT_HOME"===e.targetKind&&e.targetAgentId!==t.agentId)throw Error("This command is not eligible for the selected agent");let r=await A.agent.findUnique({where:{id:t.agentId}});if(!r)throw Error("Agent not found");return this.requireCapability(r.capabilitiesJson),{agent:r,worktree:null}}if(!t.worktreeId||t.agentId)throw Error("This command requires a worktree target");let r=await A.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{agent:!0,repository:!0}}}});if(!r||r.missingAt)throw Error("Worktree is unavailable");if("REPOSITORY_WORKTREE"===e.targetKind&&e.targetRepositoryId!==r.codebase.repositoryId)throw Error("This command is not eligible for the selected repository");return this.requireCapability(r.codebase.agent.capabilitiesJson),{agent:r.codebase.agent,worktree:r}}requireCapability(e){if(!(function(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}})(e).includes(Ay))throw Error("The selected agent must be upgraded before it can run commands")}async startRun(e){let t,A=await am(),r=e.idempotencyKey?.trim()||(0,AB.randomUUID)(),i=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(i)return this.getRun(i.id);let n=await A.commandDefinition.findUnique({where:{id:e.commandId}});if(!n||n.archivedAt)throw Error("Command not found");let{agent:a,worktree:s}=await this.resolveTarget(n,e);try{t=await A.$transaction(async t=>{let A=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:A.nextValue,commandId:n.id,idempotencyKey:r,origin:(e.origin??"MANUAL").trim().toUpperCase(),snapshotName:n.name,snapshotDescription:n.description,snapshotScript:n.script,snapshotTargetKind:n.targetKind,snapshotRestartPolicy:n.restartPolicy,snapshotRestartLimit:n.restartLimit,snapshotNotificationsEnabled:n.notificationsEnabled,snapshotJson:JSON.stringify(n),agentId:a.id,worktreeId:s?.id??null,agentName:a.name,agentHostname:a.hostname,worktreePath:s?.folder??null,worktreeBranch:s?.branch??null}})})}catch(t){let e=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(!e)throw t;return this.getRun(e.id)}return ehl(t),await this.dispatch(t.id),this.getRun(t.id)}async startCustomRun(e){let t,A=await am(),r=e.idempotencyKey?.trim()||(0,AB.randomUUID)(),i=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(i)return this.getRun(i.id);let n=ehs(e.script,"Script",1e6),a=e.agentId&&!e.worktreeId?"ANY_AGENT_HOME":e.worktreeId&&!e.agentId?"ANY_WORKTREE":null;if(!a)throw Error("A custom command requires exactly one agent-home or worktree target");let{agent:s,worktree:o}=await this.resolveTarget({targetKind:a,targetAgentId:null,targetRepositoryId:null},e),l={name:"Custom command",description:"",script:n,targetKind:a,restartPolicy:"NEVER",restartLimit:null,notificationsEnabled:!0};try{t=await A.$transaction(async t=>{let A=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:A.nextValue,commandId:null,idempotencyKey:r,origin:(e.origin??"MANUAL").trim().toUpperCase(),status:"QUEUED",snapshotName:l.name,snapshotDescription:l.description,snapshotScript:l.script,snapshotTargetKind:l.targetKind,snapshotRestartPolicy:l.restartPolicy,snapshotRestartLimit:l.restartLimit,snapshotNotificationsEnabled:l.notificationsEnabled,snapshotJson:JSON.stringify(l),agentId:s.id,worktreeId:o?.id??null,agentName:s.name,agentHostname:s.hostname,worktreePath:o?.folder??null,worktreeBranch:o?.branch??null}})})}catch(t){let e=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(!e)throw t;return this.getRun(e.id)}ehl(t);try{await this.dispatch(t.id)}catch(e){throw await this.failDispatch(t.id,e instanceof Error?e.message:String(e)),e}return this.getRun(t.id)}async dispatch(e){let t=await am(),A=await t.commandRun.findUnique({where:{id:e},include:{agent:!0,worktree:{include:{codebase:!0}},attempts:!0}});if(!A||A.stopRequested)return;if(!A.agentId||!A.agent)return void await this.failDispatch(A.id,"The command agent is no longer available");if(A.predecessorRunId){let e=await t.commandRun.findUnique({where:{id:A.predecessorRunId},select:{status:!0}});if(e&&!ehn.includes(e.status))return}if(new Set(["ANY_WORKTREE","REPOSITORY_WORKTREE"]).has(A.snapshotTargetKind)&&(!A.worktreeId||!A.worktree||A.worktree.missingAt))return void await this.failDispatch(A.id,"The command worktree is no longer available");if(A.worktree&&A.worktree.codebase.agentId!==A.agentId)return void await this.failDispatch(A.id,"The worktree is no longer assigned to the command agent");try{this.requireCapability(A.agent.capabilitiesJson)}catch(e){await this.failDispatch(A.id,e instanceof Error?e.message:String(e));return}let r=A.attempts.reduce((e,t)=>!e||t.attempt>e.attempt?t:e,null),i=!r||r.agentJobId||r.completionProcessedAt||r.finishedAt?(r?.attempt??0)+1:r.attempt,n=r?.attempt===i?r:await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:i}}});if(!n)try{n=await t.commandRunAttempt.create({data:{id:(0,AB.randomUUID)(),runId:e,attempt:i}})}catch(A){if(!(n=await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:i}}})))throw A}if(!n.agentJobId){let e=await this.agentControl.createJob({agentId:A.agentId,kind:Ay,payload:{commandRunId:A.id,attemptId:n.id,targetKind:A.worktreeId?"WORKTREE":"AGENT_HOME",cwd:A.worktree?.folder??null,script:A.snapshotScript},idempotencyKey:`command-run:${A.id}:attempt:${i}`,timeoutSeconds:0,worktreeId:A.worktreeId,codebaseId:A.worktree?.codebaseId??null,visibility:"SYSTEM"});n=await t.commandRunAttempt.update({where:{id:n.id},data:{agentJobId:e.id,status:e.status}})}ehl(await t.commandRun.update({where:{id:A.id},data:{status:"RUNNING"===n.status?"RUNNING":"QUEUED",startedAt:"RUNNING"===n.status?A.startedAt??new Date:null,nextRestartAt:null,error:null}}))}async failDispatch(e,t){let A=await am(),r=await A.commandRun.update({where:{id:e},data:{status:"FAILED",error:t,finishedAt:new Date,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});ehl(r),await this.notifyFinishedRun(r)}async terminateRun(e){let t=await am(),A=await t.commandRun.findUnique({where:{id:e},include:{attempts:{orderBy:{attempt:"desc"},take:1}}});if(!A)throw Error("Command run not found");if(ehn.includes(A.status))return A;let r=await t.commandRun.update({where:{id:e},data:{stopRequested:!0,status:"CANCELLING",nextRestartAt:null}}),i=A.attempts[0]?.agentJobId;return i?await this.agentControl.cancelJob(i):await this.finishCancelled(e),ehl(r),this.getRun(e)}async rerun(e){let t=await am(),A=await t.commandRun.findUnique({where:{id:e}});if(!A)throw Error("Command run not found");let r=await t.commandRun.findUnique({where:{predecessorRunId:A.id}});if(r)return this.getRun(r.id);let i=await t.$transaction(async e=>{let t=await e.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return e.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:t.nextValue,commandId:A.commandId,idempotencyKey:`rerun:${A.id}:${(0,AB.randomUUID)()}`,origin:"RERUN",snapshotName:A.snapshotName,snapshotDescription:A.snapshotDescription,snapshotScript:A.snapshotScript,snapshotTargetKind:A.snapshotTargetKind,snapshotRestartPolicy:A.snapshotRestartPolicy,snapshotRestartLimit:A.snapshotRestartLimit,snapshotNotificationsEnabled:A.snapshotNotificationsEnabled,snapshotJson:A.snapshotJson,agentId:A.agentId,worktreeId:A.worktreeId,agentName:A.agentName,agentHostname:A.agentHostname,worktreePath:A.worktreePath,worktreeBranch:A.worktreeBranch,predecessorRunId:A.id}})});return ehl(i),ehn.includes(A.status)?await this.dispatch(i.id):await this.terminateRun(A.id),this.getRun(i.id)}async archiveRuns(e,t){let A=await am();for(let r of(await A.commandRun.updateMany({where:{id:{in:e},status:{in:[...ehn]}},data:{archivedAt:t?new Date:null}}),e)){let e=await A.commandRun.findUnique({where:{id:r}});e&&ehl(e)}return!0}async deleteRuns(e){let t=await am();return(await t.commandRun.deleteMany({where:{id:{in:e},status:{in:[...ehn]}}})).count}async appendOutput(e,t,A,r){if(!r.length||r.length>200)throw Error("Output batches must contain 1 to 200 chunks");let i=await am(),n=await i.commandRunAttempt.findUnique({where:{id:A},include:{run:!0}});if(!n||n.agentJobId!==t||n.run.agentId!==e)throw Error("Command attempt not found for this agent job");let a=r.map(e=>{if(!Number.isInteger(e.sequence)||e.sequence<0)throw Error("Output sequence must be a non-negative integer");if(!["STDOUT","STDERR","SYSTEM"].includes(e.stream))throw Error("Output stream is invalid");let t=Buffer.from(e.dataBase64,"base64");if(t.length!==e.byteLength||t.length>262144)throw Error("Output byte length is invalid");let A=new Date(e.createdAt);if(Number.isNaN(A.valueOf()))throw Error("Output date is invalid");return{...e,createdAt:A}});await Promise.all(a.map(e=>i.commandRunOutputChunk.upsert({where:{attemptId_sequence:{attemptId:A,sequence:e.sequence}},create:{id:(0,AB.randomUUID)(),attemptId:A,...e},update:{}})));let s=await i.commandRunOutputChunk.findMany({where:{attemptId:A,sequence:{in:a.map(e=>e.sequence)}},orderBy:{sequence:"asc"}});for(let e of s){let t={...e,runId:n.runId,attemptNumber:n.attempt};aE.publish(aJ(n.runId),{commandRunOutputAdded:t}),aE.publish(a_,{commandRunOutputAdded:t})}return s}async finishCancelled(e){let t=await am();ehl(await t.commandRun.update({where:{id:e},data:{status:"CANCELLED",finishedAt:new Date,nextRestartAt:null}}));let A=await t.commandRun.findUnique({where:{predecessorRunId:e}});A&&await this.dispatch(A.id)}async notifyFinishedRun(e){if(!this.notifications||!e.snapshotNotificationsEnabled||"SUCCEEDED"!==e.status&&"FAILED"!==e.status)return;let t=[e.worktreeBranch??e.worktreePath??`${e.agentName} \xb7 ${e.agentHostname}`,"FAILED"===e.status?e.error:null].filter(e=>!!e).join(" · ").slice(0,1e3);try{let A=await am(),r=await A.$transaction(A=>this.notifications.recordInTransaction(A,{dedupeKey:`command-run:${e.id}:${e.status}`,typeKey:"SUCCEEDED"===e.status?"COMMAND_RUN_SUCCEEDED":"COMMAND_RUN_FAILED",title:`${e.snapshotName} ${e.status.toLowerCase()}`,body:t,href:`/commands/runs/${e.id}`,resourceKind:"COMMAND_RUN",resourceId:e.id,worktreeId:e.worktreeId,highlightColor:e.worktree?.highlightColor??null}));this.notifications.created(r)}catch(e){console.error("Command run notification failed:",e)}}async handleAttemptCompletion(e){let t=await am(),A=await t.commandRunAttempt.findUnique({where:{agentJobId:e.id},include:{run:!0,agentJob:!0}});if(!A||A.completionProcessedAt)return;let r=new Date,i=function(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t?t:{}}catch{return{}}}(e.resultJson);if(1!==(await t.commandRunAttempt.updateMany({where:{id:A.id,completionProcessedAt:null},data:{status:e.status,exitCode:i.exitCode??null,signal:i.signal??null,error:e.error,startedAt:A.agentJob?.startedAt??A.startedAt,finishedAt:A.agentJob?.finishedAt??r,completionProcessedAt:r}})).count)return;if(A.run.stopRequested||"CANCELLED"===e.status)return void await this.finishCancelled(A.runId);let n="SUCCEEDED"===e.status&&0===i.exitCode,a=eha(ehr,A.run.snapshotRestartPolicy,"Restart policy"),s=A.agentJob?.startedAt??A.createdAt,o=function(e){if(e.manualStop||!("ALWAYS"===e.policy||"ON_FAILURE"===e.policy&&!e.clean))return{restart:!1,restartCount:e.restartCount,exhausted:!1};let t=(e.durationMs>=6e4?0:e.restartCount)+1,A=null!==e.limit&&t>e.limit;return{restart:!A,restartCount:t,exhausted:A}}({policy:a,limit:A.run.snapshotRestartLimit,restartCount:A.run.restartCount,durationMs:r.getTime()-s.getTime(),clean:n,manualStop:A.run.stopRequested});if(o.restart)return void ehl(await t.commandRun.update({where:{id:A.runId},data:{status:"RESTARTING",restartCount:o.restartCount,nextRestartAt:new Date(r.getTime()+1e3),exitCode:i.exitCode??null,signal:i.signal??null,error:e.error}}));let l=await t.commandRun.update({where:{id:A.runId},data:{status:n?"SUCCEEDED":"FAILED",exitCode:i.exitCode??null,signal:i.signal??null,error:e.error??(o.exhausted?"Restart limit reached":n?null:"Command failed"),finishedAt:r,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});ehl(l),await this.notifyFinishedRun(l)}async reconcile(e={}){let t=await am(),A=new Date;for(let r of(await t.commandRun.findMany({where:{status:{in:[...ehi]},...e.agentId?{agentId:e.agentId}:{}},include:{attempts:{include:{agentJob:!0},orderBy:{attempt:"desc"},take:1}}}))){let e=r.attempts[0];if(r.stopRequested){e?.agentJobId&&e.agentJob&&!["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(e.agentJob.status)?await this.agentControl.cancelJob(e.agentJobId):e&&e.agentJob?.status!=="CANCELLED"||await this.finishCancelled(r.id);continue}if("RESTARTING"===r.status&&(!r.nextRestartAt||r.nextRestartAt<=A)){await this.dispatch(r.id);continue}if(e?.agentJob&&["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(e.agentJob.status)){await this.handleAttemptCompletion(e.agentJob);continue}if(e?.agentJob&&["QUEUED","RUNNING"].includes(e.agentJob.status)){let i="RUNNING"===e.agentJob.status?"RUNNING":"QUEUED";e.status!==e.agentJob.status&&await t.commandRunAttempt.update({where:{id:e.id},data:{status:e.agentJob.status,startedAt:e.agentJob.startedAt}}),r.status!==i&&ehl(await t.commandRun.update({where:{id:r.id},data:{status:i,startedAt:"RUNNING"===i?r.startedAt??e.agentJob.startedAt??A:r.startedAt}}));continue}"QUEUED"!==r.status||e&&(e.agentJobId||e.completionProcessedAt||e.finishedAt)||await this.dispatch(r.id)}}}function ehu(e=new Date){let t=e.getFullYear(),A=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${A}-${r}`}class ehd{ccusage;diskSpace;polling;usageTimer;usageRunning;constructor(e,t,A){this.ccusage=e,this.diskSpace=t,this.polling=A,this.usageRunning=!1,this.ccusage.registerCompletionObserver(e=>this.recordCompletedUsage(e))}async recordCompletedUsage(e){if(0===e.progress.successfulCount)return;let t=ehu(),A=e.aggregate.days.find(e=>e.period===t);await this.persistUsage(t,A?.totalCost??0,new Date)}startRuntime(){this.polling.register({id:"sidebar-usage",kind:"SIDEBAR_USAGE",runtime:"SERVER",enabled:!0,cadenceSeconds:300,details:{}}),this.pruneInterruptedCollections().catch(e=>{console.error("Sidebar usage cleanup failed:",e instanceof Error?e.message:e)}).finally(()=>void this.runUsagePoll())}stopRuntime(){this.usageTimer&&clearTimeout(this.usageTimer),this.usageTimer=void 0}scheduleUsagePoll(){this.usageTimer&&clearTimeout(this.usageTimer);let e=new Date(Date.now()+3e5);this.polling.schedule("sidebar-usage",e),this.usageTimer=setTimeout(()=>void this.runUsagePoll(),3e5),this.usageTimer.unref()}async runUsagePoll(){if(!this.usageRunning){this.usageRunning=!0,this.polling.schedule("sidebar-usage",null);try{await this.polling.run("sidebar-usage",()=>this.collectUsage(),e=>({period:e.period,successfulAgents:e.successfulAgents}))}catch(e){console.error("Sidebar usage refresh failed:",e instanceof Error?e.message:e)}finally{this.usageRunning=!1,this.scheduleUsagePoll()}}}async collectUsage(){let e=`sidebar-usage:${(0,AB.randomUUID)()}`;try{let t=await this.ccusage.collect(e);return{period:ehu(),successfulAgents:t.progress.successfulCount}}finally{await this.removeCollection(e)}}async persistUsage(e,t,A){let r=await am();await r.sidebarUsageSummary.upsert({where:{id:"default"},create:{id:"default",period:e,totalCost:t,collectedAt:A},update:{period:e,totalCost:t,collectedAt:A}}),this.publish()}async latestSuccessfulUsage(e){let t=await am(),A=await t.agentJob.findMany({where:{kind:AD,status:"SUCCEEDED",resultJson:{not:null}},orderBy:[{finishedAt:"desc"},{createdAt:"desc"}],distinct:["agentId"],select:{resultJson:!0,finishedAt:!0,createdAt:!0,agent:{select:{id:!0,name:!0,hostname:!0}}}}),r=A.flatMap(e=>{try{let t=AT(JSON.parse(e.resultJson));return[{agent:e.agent,report:t.report}]}catch{return[]}});if(!r.length)return null;let i=sc(r).days.find(t=>t.period===e);return i?{totalCost:i.totalCost,collectedAt:A.reduce((e,t)=>{let A=t.finishedAt??t.createdAt;return A>e?A:e},new Date(0))}:null}async removeCollection(e){let t=await am();await t.agentJob.deleteMany({where:{ccusageCollectionId:e}}),await t.ccusageCollection.deleteMany({where:{id:e}})}async pruneInterruptedCollections(){let e=await am(),t=await e.ccusageCollection.findMany({where:{id:{startsWith:"sidebar-usage:"}},select:{id:!0}});if(!t.length)return;let A=t.map(({id:e})=>e);await e.agentJob.deleteMany({where:{ccusageCollectionId:{in:A}}}),await e.ccusageCollection.deleteMany({where:{id:{in:A}}})}async status(){let e=await am(),t=ehu(),[A,r,i,n,a,s]=await Promise.all([e.sidebarUsageSummary.findUnique({where:{id:"default"}}),e.agentRun.count({where:{kind:"PLAN",archivedAt:null,status:"IN_PROGRESS",attempts:{some:{status:{in:["STARTING","RUNNING"]},supersededAt:null}}}}),e.agentRun.count({where:{kind:"SESSION",archivedAt:null,status:"IN_PROGRESS",attempts:{some:{status:{in:["STARTING","RUNNING"]},supersededAt:null}}}}),e.build.count({where:{status:{in:["PREPARING","RUNNING"]}}}),e.workflowRun.count({where:{archivedAt:null,status:"RUNNING"}}),this.diskSpace.overview()]),o=A?.period===t?{totalCost:A.totalCost,collectedAt:A.collectedAt}:null;if(!o){let e=await this.latestSuccessfulUsage(t);e&&(o=e,this.persistUsage(t,e.totalCost,e.collectedAt)),this.runUsagePoll()}return{usageToday:{totalCost:o?.totalCost??null,collectedAt:o?.collectedAt.toISOString()??null},activity:{plans:r,sessions:i,builds:n,workflows:a},diskSpace:s}}subscribe(){return aE.iterate(aK)}publish(){aE.publish(aK,{sidebarStatusChanged:!0})}}let ehh=`
6867
+ ${JSON.stringify(t,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),c=await ed3(i,"SESSION"),u=(0,AB.randomUUID)(),d=(0,AB.randomUUID)(),h=new Date,p=await i.agentRun.create({data:{id:u,kind:"SESSION",displayNumber:c,status:"IN_PROGRESS",phase:"ANSWER_REVISION_QUEUED",provider:n.run.provider,worktreeId:n.run.worktreeId,agentId:n.run.agentId,jiraIssueKey:n.run.jiraIssueKey,repositoryName:n.run.repositoryName,branch:n.run.branch,model:n.run.model,effort:n.run.effort,webSearchEnabled:n.run.webSearchEnabled,initialPrompt:l,parentRunId:n.runId,parentRunNumber:n.run.displayNumber,followUpMode:"ANSWER_REVISION",inputs:{create:{id:d,sequence:0,kind:"ANSWER_REVISION",prompt:l}}}});if(await i.worktreeRunLease.deleteMany({where:{worktreeId:n.run.worktreeId,runId:n.runId}}),await i.worktreeRunLease.findUnique({where:{worktreeId:n.run.worktreeId}}))throw Error("Another Session owns this worktree");await i.worktreeRunLease.create({data:{worktreeId:n.run.worktreeId,runId:u}}),await i.agentRun.update({where:{id:n.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:h}});let g=await ed7(i,{runId:u,agentId:n.run.agentId,type:"REVISE_ANSWER",payload:{batchId:e,revisionId:s,inputId:d,stash:!!A,rollback:r,checkpoint:n.checkpoint}});return{batch:n,run:p,command:g,sourceRunId:n.runId,sourceAgentId:n.run.agentId}});return ed8(n.sourceRunId),ed8(n.run.id),ed5(n.command,n.sourceAgentId),this.get(n.run.id)}async pendingCommands(e){return(await am()).runCommand.findMany({where:{agentId:e,status:{in:["QUEUED","RUNNING"]}},orderBy:[{createdAt:"asc"},{sequence:"asc"}],take:200,include:ed9})}async claimCommand(e,t){let A=await am(),r=await A.runCommand.findUnique({where:{id:t},select:{agentId:!0,status:!0,run:{select:{worktreeId:!0}}}});if(!r||r.agentId!==e)throw Error("Run command not found");"QUEUED"===r.status&&r.run.worktreeId&&await this.diskSpace?.assertWorktreeCanStart(r.run.worktreeId),await A.runCommand.updateMany({where:{id:t,agentId:e,status:"QUEUED"},data:{status:"RUNNING",claimedAt:new Date}});let i=await A.runCommand.findUnique({where:{id:t},include:ed9});if(!i||i.agentId!==e)throw Error("Run command not found");if("RUNNING"!==i.status)throw Error("Run command cannot be claimed");return i}async completeCommand(e,t,A,r){let i=await am(),n=await i.runCommand.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run command not found");let a=await i.runCommand.update({where:{id:t},data:{status:"SUCCEEDED"===A?"SUCCEEDED":"FAILED",error:ed0(r,2e4),finishedAt:new Date}});if("DELETE_NATIVE"===a.type&&"SUCCEEDED"===a.status){let e=await i.agentRun.findUnique({where:{id:a.runId},include:{inputs:{include:{attachments:!0}}}});if(e){let t=e.inputs.flatMap(e=>e.attachments.map(({storagePath:e})=>e));await i.agentRun.delete({where:{id:e.id}}),await edq(t)}}else if("FAILED"===a.status)await i.agentRun.updateMany({where:{id:a.runId,status:{notIn:[...edW]}},data:{error:a.error,phase:`${a.type}_FAILED`,...["START","PLAY_PLAN","CONTINUE"].includes(a.type)?{status:"FAILED",finishedAt:new Date}:{},...["PREPARE_ANSWER_REVISION","REVISE_ANSWER"].includes(a.type)?{status:"PAUSED",finishedAt:null}:{}}}),["START","PLAY_PLAN","CONTINUE"].includes(a.type)&&await i.worktreeRunLease.deleteMany({where:{runId:a.runId}});else if(["PAUSE","CANCEL"].includes(a.type)){let e="CANCEL"===a.type;await i.agentRun.updateMany({where:{id:a.runId,status:{notIn:[...edW]}},data:{status:e?"CANCELLED":"PAUSED",phase:e?"CANCELLED":"PAUSED",finishedAt:e?new Date:null}}),e&&await i.worktreeRunLease.deleteMany({where:{runId:a.runId}})}return ed8(a.runId),a}async beginAttempt(e,t,A){let r=await am(),i=await r.agentRun.findUnique({where:{id:t},include:{attempts:!0}});if(!i||i.agentId!==e)throw Error("Run not found for this agent");if(edW.has(i.status))throw Error("Run is already finished");let n=i.attempts.length,a=await r.runAttempt.create({data:{id:(0,AB.randomUUID)(),runId:t,generation:n,nativeId:A||null,nativeKey:A?`${e}:${i.provider}:${A}`:null,status:"RUNNING"}});return await r.agentRun.update({where:{id:t},data:{phase:"RUNNING",startedAt:i.startedAt??new Date}}),ed8(t),a}async updateAttemptNativeId(e,t,A,r){let i=await am(),n=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:t},include:{run:!0}});if(!n||n.run.agentId!==e)throw Error("Attempt not found");let a=`${e}:${n.run.provider}:${A}`,s=await i.runAttempt.findUnique({where:{nativeKey:a}});if(s&&s.id!==t){if(s.runId!==n.runId)throw Error("Native provider session belongs to another run");await i.runAttempt.update({where:{id:s.id},data:{nativeKey:null}})}let o=await i.runAttempt.update({where:{id:t},data:{nativeId:A,nativeKey:a}});return r&&await i.agentRun.update({where:{id:n.runId},data:{providerVersion:r}}),o});return ed8(n.runId),n}async appendEvents(e,t,A,r){let i=await am(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");let a=r.slice(0,500).map(e=>{let r=edX(e.summary,"Event summary",2e3);return{id:e.id,runId:t,attemptId:A,sequence:e.sequence,type:edX(e.type,"Event type",100).toUpperCase(),summary:r,searchText:ed0(e.searchText,1e5)??r,detailMarkdown:ed0(e.detailMarkdown,5e5),rawJson:void 0===e.raw?null:JSON.stringify(e.raw),createdAt:ed2(e.createdAt)}});if(!a.length)return[];let s=await i.$transaction(async e=>{let r=new Set((await e.runEvent.findMany({where:{id:{in:a.map(e=>e.id)}},select:{id:!0}})).map(({id:e})=>e)),i=a.filter(e=>!r.has(e.id));if(i.length){await e.runEvent.createMany({data:i});let r=i.filter(e=>e.type.includes("TOOL")&&!e.type.includes("QUESTION")).map(e=>({id:`event:${e.id}`,runId:t,attemptId:A,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}));r.length&&(await e.runToolCall.createMany({data:r}),await e.agentRun.update({where:{id:t},data:{toolCallCount:await e.runToolCall.count({where:{runId:t}})}}))}return e.runEvent.findMany({where:{id:{in:a.map(e=>e.id)}},orderBy:{sequence:"asc"}})});for(let e of s)aE.publish(aj(t),{runEventAdded:e});return ed8(t),s}async reportQuestion(e,t,A,r,i,n){if(!n.length||n.length>10)throw Error("Question batch is invalid");let a=await am(),s=await a.$transaction(async a=>{let s=await a.agentRun.findUnique({where:{id:t},include:{worktree:!0}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");if(r){let e=await a.runQuestionBatch.findUnique({where:{runId_nativeRequestId:{runId:t,nativeRequestId:r}},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}});if(e)return{batch:e,notification:null}}let o=(0,AB.randomUUID)(),l=await a.runQuestionBatch.create({data:{id:o,runId:t,attemptId:A,nativeRequestId:r,eventSequence:Number.isInteger(i)&&(i??-1)>=-1?i:null,questions:{create:n.map((e,t)=>({id:`${o}:${t}:${e.id||"question"}`,position:t,header:ed0(e.header,200),prompt:edX(e.prompt,"Question",1e4),multiSelect:!!e.multiSelect,allowCustom:!1!==e.allowCustom,options:{create:(e.options??[]).map((e,t)=>({id:(0,AB.randomUUID)(),position:t,label:edX(e.label,"Option label",500),description:ed0(e.description,2e3)}))}}))}},include:{questions:{include:{options:!0}}}});return await a.agentRun.update({where:{id:t},data:{phase:"WAITING_FOR_ANSWER"}}),{batch:l,notification:this.notifications?await this.notifications.recordInTransaction(a,{dedupeKey:`run:${t}:question:${o}`,typeKey:"RUN_NEEDS_ANSWER",title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} needs an answer`,body:n[0].prompt.slice(0,1e3),href:ed4(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:s.worktree?.highlightColor}):null}});return this.notifications?.created(s.notification),ed8(t),aE.publish(a$(t),{runQuestionChanged:{id:s.batch.id,runId:t}}),s.batch}async reportUsage(e,t,A,r){let i=await am(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");let a=e=>Number.isFinite(e)&&(e??0)>=0?Math.floor(e):0;return await i.$transaction(async e=>{let i=await e.runModelUsage.findFirst({where:{runId:t,attemptId:A,model:r.model}}),n={inputTokens:a(r.inputTokens),outputTokens:a(r.outputTokens),reasoningTokens:a(r.reasoningTokens),cacheReadTokens:a(r.cacheReadTokens),cacheWriteTokens:a(r.cacheWriteTokens),estimatedCost:r.estimatedCost??null};i?await e.runModelUsage.update({where:{id:i.id},data:n}):await e.runModelUsage.create({data:{id:(0,AB.randomUUID)(),runId:t,attemptId:A,model:r.model,...n}});let s=await e.runModelUsage.aggregate({where:{runId:t},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}}),o=await e.runModelUsage.findMany({where:{runId:t,estimatedCost:{not:null}},select:{model:!0,estimatedCost:!0}}),l=o.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,a(r.toolCallCount)),estimatedCost:l??(o.length?o.reduce((e,t)=>e+(t.estimatedCost??0),0):null),pricingSource:ed0(r.pricingSource,200),pricingUpdatedAt:new Date}})}),ed8(t),this.get(t)}async finishAttempt(e,t,A){let r=A.status.toUpperCase();if(!["PAUSED","COMPLETED","CANCELLED","FAILED"].includes(r))throw Error("Run completion status is invalid");let i=await am(),n=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:t},include:{run:{include:{worktree:!0}}}});if(!n||n.run.agentId!==e)throw Error("Attempt not found");let a=edW.has(n.run.status)?n.run.status:r;await i.runAttempt.update({where:{id:t},data:{status:a,finishedAt:new Date}}),await i.runQuestionBatch.updateMany({where:{runId:n.runId,status:"PENDING"},data:{status:"SUPERSEDED",supersededAt:new Date}});let s=edW.has(n.run.status)?n.run:await i.agentRun.update({where:{id:n.runId},data:{status:r,phase:A.phase?.trim().toUpperCase()||r,finalOutput:ed0(A.finalOutput,2e6),error:ed0(A.error,2e4),finishedAt:"PAUSED"===r?null:new Date}});edW.has(a)&&await i.worktreeRunLease.deleteMany({where:{runId:s.id}});let o="COMPLETED"===a?"RUN_COMPLETED":"FAILED"===a?"RUN_FAILED":"CANCELLED"===a?"RUN_CANCELLED":"RECOVERY_PAUSED"===A.phase?"RUN_RECOVERY_PAUSED":null,l=o&&this.notifications?await this.notifications.recordInTransaction(i,{dedupeKey:`run:${s.id}:status:${a}:${n.generation}`,typeKey:o,title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} ${a.toLowerCase()}`,body:A.error||A.finalOutput?.slice(0,1e3)||`The ${s.kind.toLowerCase()} is ${a.toLowerCase()}.`,href:ed4(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:n.run.worktree?.highlightColor}):null;return{run:s,notification:l}});return this.notifications?.created(n.notification),ed8(n.run.id),this.get(n.run.id)}async reportCheckpoint(e,t,A,r){let i=await am(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");if(r.questionBatchId){let e=await i.runQuestionBatch.findUnique({where:{id:r.questionBatchId}});if(!e||e.runId!==t)throw Error("Question batch not found")}let a=await i.runCheckpoint.create({data:{id:(0,AB.randomUUID)(),runId:t,attemptId:A,questionBatchId:r.questionBatchId??null,kind:edX(r.kind,"Checkpoint kind",100).toUpperCase(),headSha:ed0(r.headSha,100),branch:ed0(r.branch,500),upstreamSha:ed0(r.upstreamSha,100),indexTree:ed0(r.indexTree,100),worktreeTree:ed0(r.worktreeTree,100),refName:ed0(r.refName,1e3),manifestJson:ed0(r.manifestJson,2e6),diffSummary:ed0(r.diffSummary,5e5),diffPatch:ed0(r.diffPatch,2e6),stashRef:ed0(r.stashRef,1e3)}});return ed8(t),a}async reportAnswerRevisionPreview(e,t,A,r){let i=await am(),n=await i.runQuestionBatch.findUnique({where:{id:t},include:{run:!0}});if(!n?.runId||!n.run||n.run.agentId!==e||"MANAGED"!==n.run.origin)throw Error("Question batch not found for this agent");let a=await i.runQuestionBatch.update({where:{id:t},data:{revisionPreparedAt:new Date,rollbackPatch:A.slice(0,2e6),pushedCommitWarning:ed0(r,2e4)},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}}}});return ed8(n.runId),aE.publish(a$(n.runId),{runQuestionChanged:{id:t,runId:n.runId}}),a}async applyAnswerRevision(e,t,A,r){let i=await am(),n=await i.$transaction(async i=>{let n=await i.runQuestionBatch.findUnique({where:{id:t},include:{run:!0,attempt:!0}}),a=await i.runAttempt.findUnique({where:{id:r},include:{run:!0}}),s=await i.runAnswerRevision.findUnique({where:{id:A}});if(!n?.runId||!n.run||n.run.agentId!==e||!n.attempt||!a||a.run.parentRunId!==n.runId||"ANSWER_REVISION"!==a.run.followUpMode||!s||s.batchId!==t)throw Error("Answer revision cannot be applied");let o=new Date,l=(await i.runAttempt.findMany({where:{runId:n.runId,generation:{gte:n.attempt.generation}},select:{id:!0}})).map(({id:e})=>e);await i.runAttempt.updateMany({where:{id:{in:l}},data:{status:"SUPERSEDED",supersededAt:o,finishedAt:o}}),await i.runEvent.updateMany({where:{runId:n.runId,sequence:{gt:n.eventSequence??-1},supersededAt:null},data:{supersededAt:o}}),await i.runToolCall.updateMany({where:{attemptId:{in:l},supersededAt:null},data:{supersededAt:o}}),await i.runModelUsage.updateMany({where:{attemptId:{in:l}},data:{superseded:!0}});let c=(await i.runQuestionBatch.findMany({where:{runId:n.runId,createdAt:{gt:n.createdAt}},select:{id:!0}})).map(({id:e})=>e);return await i.runQuestionBatch.updateMany({where:{id:{in:c}},data:{status:"SUPERSEDED",supersededAt:o}}),await i.runAnswerRevision.updateMany({where:{OR:[{batchId:{in:c}},{batchId:t,id:{not:A}}],supersededAt:null},data:{supersededAt:o}}),await i.runAnswerRevision.update({where:{id:A},data:{replacementAttemptId:r}}),await i.agentRun.update({where:{id:n.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:o}}),await i.agentRun.update({where:{id:a.runId},data:{status:"IN_PROGRESS",phase:"RUNNING"}}),{sourceRunId:n.runId,replacementRunId:a.runId}});return ed8(n.sourceRunId),ed8(n.replacementRunId),this.get(n.replacementRunId)}async importRuns(e,t,A){let r=edZ(edK,t,"Provider"),i=await am(),n=0;for(let t of A){let A=`${e}:${r}:${edX(t.nativeId,"Native ID",500)}`,a=(()=>{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"===e||"ERROR"===e?"FAILED":"COMPLETED"})(),s=await i.runAttempt.findUnique({where:{nativeKey:A},include:{run:!0}});if(s){if("IMPORTED"===s.run.origin){let e="SESSION"===s.run.kind&&"IN_PROGRESS"===a?await i.worktreeRunLease.findUnique({where:{worktreeId:s.run.worktreeId??""}}):null;await i.$transaction([i.runAttempt.update({where:{id:s.id},data:{rawMetadataJson:JSON.stringify(t.rawMetadata??{})}}),i.agentRun.update({where:{id:s.runId},data:{status:a,phase:e?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",model:t.model||s.run.model,effort:ed0(t.effort,100),finalOutput:ed0(t.finalOutput,2e6),branch:t.branch??s.run.branch,jiraIssueKey:ed1(t.jiraIssueKey),nativeArchivedAt:t.archived?new Date:null,startedAt:ed2(t.createdAt)??s.run.startedAt,finishedAt:"IN_PROGRESS"===a?null:ed2(t.updatedAt)??s.run.finishedAt}})]),ed8(s.runId)}continue}let o=await i.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{repository:!0}}}});if(!o||o.codebase.agentId!==e)continue;let l=t.kind?.toUpperCase()==="PLAN"?"PLAN":"SESSION",c="SESSION"===l&&"IN_PROGRESS"===a?await i.worktreeRunLease.findUnique({where:{worktreeId:o.id}}):null,u=await i.$transaction(e=>ed3(e,l)),d=(0,AB.randomUUID)();await i.agentRun.create({data:{id:d,kind:l,displayNumber:u,status:a,phase:c?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",origin:"IMPORTED",provider:r,worktreeId:o.id,agentId:e,jiraIssueKey:ed1(t.jiraIssueKey),repositoryName:o.codebase.repository.name,branch:t.branch??o.branch,model:t.model||"unknown",effort:ed0(t.effort,100),initialPrompt:t.prompt?.trim()||"Imported provider history",finalOutput:ed0(t.finalOutput,2e6),archivedAt:t.archived?new Date:null,nativeArchivedAt:t.archived?new Date:null,startedAt:ed2(t.createdAt),finishedAt:ed2(t.updatedAt),createdAt:ed2(t.createdAt),attempts:{create:{id:(0,AB.randomUUID)(),generation:0,nativeId:t.nativeId,nativeKey:A,status:"IMPORTED",rawMetadataJson:JSON.stringify(t.rawMetadata??{})}},inputs:{create:{id:(0,AB.randomUUID)(),sequence:0,kind:"INITIAL",prompt:t.prompt?.trim()||"Imported provider history"}}}}),ed8(d),n+=1}return await i.runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:r}},create:{id:(0,AB.randomUUID)(),agentId:e,provider:r,status:"IDLE",lastCompletedAt:new Date,importedCount:n},update:{status:"IDLE",lastCompletedAt:new Date,lastError:null,importedCount:{increment:n}}}),n}async providerCatalog(e={}){let t=await am(),A=!!(e.runId||e.worktreeId),r=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,[i,n]=A&&!r?[[],[]]:await Promise.all([t.agent.findMany({where:r?{id:r}:void 0,select:{id:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),t.runProviderSync.findMany({where:r?{agentId:r}:void 0,orderBy:{updatedAt:"desc"}})]);return edK.map(e=>{let t=`runs.provider.${e.toLowerCase()}`,A=i.some(A=>{let r=n.find(t=>t.agentId===A.id&&t.provider===e);return!A.disconnectedAt&&!!A.lastSeenAt&&Date.now()-A.lastSeenAt.getTime()<=a8(A)&&JSON.parse(A.capabilitiesJson).includes(t)&&r?.status!=="FAILED"}),r=n.find(({provider:t})=>t===e)?.catalogJson,a=r?JSON.parse(r):null;return{key:e,label:"OPENCODE"===e?"OpenCode":"CLAUDE"===e?"Claude":"Codex",available:A,models:a?.models?.length?a.models:[{id:"default",label:"Provider default",efforts:["auto","low","medium","high"]}],supportsWebSearch:a?.capabilities?.webSearch??!0,supportsQuestions:a?.capabilities?.questions??!0,supportsImport:a?.capabilities?.import??!0,supportsPause:a?.capabilities?.pause??!0,supportsSteering:a?.capabilities?.steering??!0,supportsResume:a?.capabilities?.resume??!0,supportsNativeDelete:a?.capabilities?.nativeDelete??!0}})}async providerImportStatus(){return(await am()).runProviderSync.findMany({orderBy:[{agentId:"asc"},{provider:"asc"}]})}async reportProviderImportStatus(e,t,A,r,i){let n=edZ(edK,t,"Provider"),a=A.trim().toUpperCase();if(!["SYNCING","IDLE","FAILED"].includes(a))throw Error("Import status is invalid");return(await am()).runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:n}},create:{id:(0,AB.randomUUID)(),agentId:e,provider:n,status:a,lastStartedAt:"SYNCING"===a?new Date:void 0,lastCompletedAt:"IDLE"===a?new Date:void 0,lastError:ed0(r,2e4),catalogJson:void 0===i?void 0:JSON.stringify(i)},update:{status:a,lastStartedAt:"SYNCING"===a?new Date:void 0,lastCompletedAt:"IDLE"===a?new Date:void 0,lastError:"FAILED"===a?ed0(r,2e4):null,catalogJson:void 0===i?void 0:JSON.stringify(i)}})}subscribeRuns(){return aE.iterate(aO)}subscribeRun(e){return aE.iterate(aY(e))}subscribeEvents(e){return aE.iterate(aj(e))}subscribeQuestions(e){return aE.iterate(a$(e))}async requireWorktree(e,t){let A=await am(),r=await A.worktree.findUnique({where:{id:edX(e,"Worktree",500)},include:{codebase:{include:{repository:!0,agent:!0}}}});if(!r||"AVAILABLE"!==r.availability)throw Error("Worktree is unavailable");if(t){let e=r.codebase.agent,i=JSON.parse(e.capabilitiesJson);if(e.disconnectedAt||!e.lastSeenAt||Date.now()-e.lastSeenAt.getTime()>a8(e)||!i.includes(`runs.provider.${t.toLowerCase()}`))throw Error(`${t} is unavailable on this worktree's agent`);let n=await A.runProviderSync.findUnique({where:{agentId_provider:{agentId:r.codebase.agentId,provider:t}}});if(n?.status==="FAILED")throw Error(`${t} is unavailable: ${n.lastError??"provider capability check failed"}`)}return r}async requireAttachments(e,t){if(!e.length)return;if(e.length>100)throw Error("Too many attachments");let A=await am(),r=await A.runAttachment.findMany({where:{id:{in:e},inputId:null,...t?{OR:[{draftId:t},{draftId:null}]}:{draftId:null}}});if(r.length!==e.length)throw Error("One or more attachments are unavailable");if(r.reduce((e,t)=>e+t.size,0)>0x6400000)throw Error("Attachments exceed the 100 MB input limit")}}let ehA=["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME","ANY_WORKTREE","REPOSITORY_WORKTREE"],ehr=["NEVER","ON_FAILURE","ALWAYS"],ehi=["QUEUED","RUNNING","RESTARTING","CANCELLING"],ehn=["SUCCEEDED","FAILED","CANCELLED"];function eha(e,t,A){let r=t.trim().toUpperCase();if(!e.includes(r))throw Error(`${A} is not supported`);return r}function ehs(e,t,A){let r=e.trim();if(!r)throw Error(`${t} is required`);if(r.length>A)throw Error(`${t} is too long`);return r}function eho(e){aE.publish(aU,{commandsChanged:e})}function ehl(e){aE.publish(aF,{commandRunsChanged:e}),aE.publish(aP(e.id),{commandRunChanged:e}),aE.publish(aK,{sidebarStatusChanged:!0})}class ehc{agentControl;notifications;timer;reconciliation;constructor(e,t){this.agentControl=e,this.notifications=t,this.timer=null,this.reconciliation=null,this.agentControl.registerCompletionHandler(Ay,e=>this.handleAttemptCompletion(e)),this.agentControl.registerConnectionHandler(e=>this.reconcileWithReporting({agentId:e}))}startRuntime(){this.timer||(this.reconcileWithReporting(),this.timer=setInterval(()=>void this.reconcileWithReporting(),1e3),this.timer.unref())}async reconcileWithReporting(e={}){if(this.reconciliation)return this.reconciliation;this.reconciliation=this.reconcile(e);try{await this.reconciliation}catch(e){console.error("Command runtime reconciliation failed:",e)}finally{this.reconciliation=null}}async listDefinitions(e=!1){return(await am()).commandDefinition.findMany({where:e?{}:{archivedAt:null},include:{targetAgent:!0,targetRepository:!0},orderBy:[{archivedAt:"asc"},{name:"asc"}]})}async getDefinition(e){return(await am()).commandDefinition.findUnique({where:{id:e},include:{targetAgent:!0,targetRepository:!0}})}normalizeDefinition(e){let t=eha(ehA,e.targetKind,"Target scope"),A=eha(ehr,e.restartPolicy??"NEVER","Restart policy"),r=void 0===e.restartLimit?3:e.restartLimit;if(null!==r&&(!Number.isInteger(r)||r<0||r>100))throw Error("Restart limit must be null or an integer from 0 to 100");let i="SPECIFIC_AGENT_HOME"===t,n="REPOSITORY_WORKTREE"===t;if(!!e.targetAgentId!==i)throw Error(i?"A specific-agent command requires an agent":"This target scope does not accept a specific agent");if(!!e.targetRepositoryId!==n)throw Error(n?"A repository-worktree command requires a repository":"This target scope does not accept a repository");return{name:ehs(e.name,"Name",120),description:(e.description??"").trim().slice(0,2e3),script:ehs(e.script,"Script",1e6),targetKind:t,targetAgentId:e.targetAgentId??null,targetRepositoryId:e.targetRepositoryId??null,restartPolicy:A,restartLimit:r,quickActionEnabled:e.quickActionEnabled??!1,quickActionIconKey:ehs(e.quickActionIconKey??"terminal","Quick action icon",40),quickActionButtonVariant:ehs(e.quickActionButtonVariant??"default","Quick action style",40),notificationsEnabled:e.notificationsEnabled??!0}}async createDefinition(e){let t=await am(),A=await t.commandDefinition.create({data:{id:(0,AB.randomUUID)(),...this.normalizeDefinition(e)},include:{targetAgent:!0,targetRepository:!0}});return eho(A),A}async updateDefinition(e,t){let A=await am(),r=await A.commandDefinition.update({where:{id:e},data:this.normalizeDefinition(t),include:{targetAgent:!0,targetRepository:!0}});return eho(r),r}async archiveDefinition(e,t){let A=await am(),r=await A.commandDefinition.update({where:{id:e},data:{archivedAt:t?new Date:null},include:{targetAgent:!0,targetRepository:!0}});return eho(r),r}async eligibleForAgent(e){return(await am()).commandDefinition.findMany({where:{archivedAt:null,OR:[{targetKind:"ANY_AGENT_HOME"},{targetKind:"SPECIFIC_AGENT_HOME",targetAgentId:e}]},include:{targetAgent:!0,targetRepository:!0},orderBy:{name:"asc"}})}async eligibleForWorktree(e){let t=await am(),A=await t.worktree.findUnique({where:{id:e},select:{codebase:{select:{repositoryId:!0}}}});if(!A)throw Error("Worktree not found");return t.commandDefinition.findMany({where:{archivedAt:null,OR:[{targetKind:"ANY_WORKTREE"},{targetKind:"REPOSITORY_WORKTREE",targetRepositoryId:A.codebase.repositoryId}]},include:{targetAgent:!0,targetRepository:!0},orderBy:{name:"asc"}})}async listRuns(e){let t=await am(),A=Math.max(1,Math.min(e.first??50,200)),r=e.search?.trim(),i={...e.includeArchived?{}:{archivedAt:null},...e.agentId?{agentId:e.agentId}:{},...e.worktreeId?{worktreeId:e.worktreeId}:{},...r?{OR:[{snapshotName:{contains:r}},{agentName:{contains:r}},{worktreePath:{contains:r}}]}:{}},[n,a]=await Promise.all([t.commandRun.findMany({where:i,include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{orderBy:{attempt:"asc"}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}}),t.commandRun.count({where:i})]),s=n.length>A,o=n.slice(0,A);return{nodes:o,totalCount:a,pageInfo:{hasNextPage:s,endCursor:o.at(-1)?.id??null}}}async getRun(e){return(await am()).commandRun.findUnique({where:{id:e},include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{include:{agentJob:!0},orderBy:{attempt:"asc"}},predecessor:!0,successor:!0}})}async listOutput(e,t=0,A=-1,r=1e3){let i=await am();return r<1?[]:i.commandRunOutputChunk.findMany({where:{OR:[{attempt:{runId:e,attempt:{gt:t}}},{attempt:{runId:e,attempt:t},sequence:{gt:A}}]},include:{attempt:{select:{attempt:!0,runId:!0}}},orderBy:[{attempt:{attempt:"asc"}},{sequence:"asc"}],take:Math.max(1,Math.min(r,5e3))})}async resolveTarget(e,t){let A=await am();if("ANY_AGENT_HOME"===e.targetKind||"SPECIFIC_AGENT_HOME"===e.targetKind){if(!t.agentId||t.worktreeId)throw Error("This command requires an agent-home target");if("SPECIFIC_AGENT_HOME"===e.targetKind&&e.targetAgentId!==t.agentId)throw Error("This command is not eligible for the selected agent");let r=await A.agent.findUnique({where:{id:t.agentId}});if(!r)throw Error("Agent not found");return this.requireCapability(r.capabilitiesJson),{agent:r,worktree:null}}if(!t.worktreeId||t.agentId)throw Error("This command requires a worktree target");let r=await A.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{agent:!0,repository:!0}}}});if(!r||r.missingAt)throw Error("Worktree is unavailable");if("REPOSITORY_WORKTREE"===e.targetKind&&e.targetRepositoryId!==r.codebase.repositoryId)throw Error("This command is not eligible for the selected repository");return this.requireCapability(r.codebase.agent.capabilitiesJson),{agent:r.codebase.agent,worktree:r}}requireCapability(e){if(!(function(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}})(e).includes(Ay))throw Error("The selected agent must be upgraded before it can run commands")}async startRun(e){let t,A=await am(),r=e.idempotencyKey?.trim()||(0,AB.randomUUID)(),i=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(i)return this.getRun(i.id);let n=await A.commandDefinition.findUnique({where:{id:e.commandId}});if(!n||n.archivedAt)throw Error("Command not found");let{agent:a,worktree:s}=await this.resolveTarget(n,e);try{t=await A.$transaction(async t=>{let A=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:A.nextValue,commandId:n.id,idempotencyKey:r,origin:(e.origin??"MANUAL").trim().toUpperCase(),snapshotName:n.name,snapshotDescription:n.description,snapshotScript:n.script,snapshotTargetKind:n.targetKind,snapshotRestartPolicy:n.restartPolicy,snapshotRestartLimit:n.restartLimit,snapshotNotificationsEnabled:n.notificationsEnabled,snapshotJson:JSON.stringify(n),agentId:a.id,worktreeId:s?.id??null,agentName:a.name,agentHostname:a.hostname,worktreePath:s?.folder??null,worktreeBranch:s?.branch??null}})})}catch(t){let e=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(!e)throw t;return this.getRun(e.id)}return ehl(t),await this.dispatch(t.id),this.getRun(t.id)}async startCustomRun(e){let t,A=await am(),r=e.idempotencyKey?.trim()||(0,AB.randomUUID)(),i=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(i)return this.getRun(i.id);let n=ehs(e.script,"Script",1e6),a=e.agentId&&!e.worktreeId?"ANY_AGENT_HOME":e.worktreeId&&!e.agentId?"ANY_WORKTREE":null;if(!a)throw Error("A custom command requires exactly one agent-home or worktree target");let{agent:s,worktree:o}=await this.resolveTarget({targetKind:a,targetAgentId:null,targetRepositoryId:null},e),l={name:"Custom command",description:"",script:n,targetKind:a,restartPolicy:"NEVER",restartLimit:null,notificationsEnabled:!0};try{t=await A.$transaction(async t=>{let A=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:A.nextValue,commandId:null,idempotencyKey:r,origin:(e.origin??"MANUAL").trim().toUpperCase(),status:"QUEUED",snapshotName:l.name,snapshotDescription:l.description,snapshotScript:l.script,snapshotTargetKind:l.targetKind,snapshotRestartPolicy:l.restartPolicy,snapshotRestartLimit:l.restartLimit,snapshotNotificationsEnabled:l.notificationsEnabled,snapshotJson:JSON.stringify(l),agentId:s.id,worktreeId:o?.id??null,agentName:s.name,agentHostname:s.hostname,worktreePath:o?.folder??null,worktreeBranch:o?.branch??null}})})}catch(t){let e=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(!e)throw t;return this.getRun(e.id)}ehl(t);try{await this.dispatch(t.id)}catch(e){throw await this.failDispatch(t.id,e instanceof Error?e.message:String(e)),e}return this.getRun(t.id)}async dispatch(e){let t=await am(),A=await t.commandRun.findUnique({where:{id:e},include:{agent:!0,worktree:{include:{codebase:!0}},attempts:!0}});if(!A||A.stopRequested)return;if(!A.agentId||!A.agent)return void await this.failDispatch(A.id,"The command agent is no longer available");if(A.predecessorRunId){let e=await t.commandRun.findUnique({where:{id:A.predecessorRunId},select:{status:!0}});if(e&&!ehn.includes(e.status))return}if(new Set(["ANY_WORKTREE","REPOSITORY_WORKTREE"]).has(A.snapshotTargetKind)&&(!A.worktreeId||!A.worktree||A.worktree.missingAt))return void await this.failDispatch(A.id,"The command worktree is no longer available");if(A.worktree&&A.worktree.codebase.agentId!==A.agentId)return void await this.failDispatch(A.id,"The worktree is no longer assigned to the command agent");try{this.requireCapability(A.agent.capabilitiesJson)}catch(e){await this.failDispatch(A.id,e instanceof Error?e.message:String(e));return}let r=A.attempts.reduce((e,t)=>!e||t.attempt>e.attempt?t:e,null),i=!r||r.agentJobId||r.completionProcessedAt||r.finishedAt?(r?.attempt??0)+1:r.attempt,n=r?.attempt===i?r:await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:i}}});if(!n)try{n=await t.commandRunAttempt.create({data:{id:(0,AB.randomUUID)(),runId:e,attempt:i}})}catch(A){if(!(n=await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:i}}})))throw A}if(!n.agentJobId){let e=await this.agentControl.createJob({agentId:A.agentId,kind:Ay,payload:{commandRunId:A.id,attemptId:n.id,targetKind:A.worktreeId?"WORKTREE":"AGENT_HOME",cwd:A.worktree?.folder??null,script:A.snapshotScript},idempotencyKey:`command-run:${A.id}:attempt:${i}`,timeoutSeconds:0,worktreeId:A.worktreeId,codebaseId:A.worktree?.codebaseId??null,visibility:"SYSTEM"});n=await t.commandRunAttempt.update({where:{id:n.id},data:{agentJobId:e.id,status:e.status}})}ehl(await t.commandRun.update({where:{id:A.id},data:{status:"RUNNING"===n.status?"RUNNING":"QUEUED",startedAt:"RUNNING"===n.status?A.startedAt??new Date:null,nextRestartAt:null,error:null}}))}async failDispatch(e,t){let A=await am(),r=await A.commandRun.update({where:{id:e},data:{status:"FAILED",error:t,finishedAt:new Date,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});ehl(r),await this.notifyFinishedRun(r)}async terminateRun(e){let t=await am(),A=await t.commandRun.findUnique({where:{id:e},include:{attempts:{orderBy:{attempt:"desc"},take:1}}});if(!A)throw Error("Command run not found");if(ehn.includes(A.status))return A;let r=await t.commandRun.update({where:{id:e},data:{stopRequested:!0,status:"CANCELLING",nextRestartAt:null}}),i=A.attempts[0]?.agentJobId;return i?await this.agentControl.cancelJob(i):await this.finishCancelled(e),ehl(r),this.getRun(e)}async rerun(e){let t=await am(),A=await t.commandRun.findUnique({where:{id:e}});if(!A)throw Error("Command run not found");let r=await t.commandRun.findUnique({where:{predecessorRunId:A.id}});if(r)return this.getRun(r.id);let i=await t.$transaction(async e=>{let t=await e.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return e.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:t.nextValue,commandId:A.commandId,idempotencyKey:`rerun:${A.id}:${(0,AB.randomUUID)()}`,origin:"RERUN",snapshotName:A.snapshotName,snapshotDescription:A.snapshotDescription,snapshotScript:A.snapshotScript,snapshotTargetKind:A.snapshotTargetKind,snapshotRestartPolicy:A.snapshotRestartPolicy,snapshotRestartLimit:A.snapshotRestartLimit,snapshotNotificationsEnabled:A.snapshotNotificationsEnabled,snapshotJson:A.snapshotJson,agentId:A.agentId,worktreeId:A.worktreeId,agentName:A.agentName,agentHostname:A.agentHostname,worktreePath:A.worktreePath,worktreeBranch:A.worktreeBranch,predecessorRunId:A.id}})});return ehl(i),ehn.includes(A.status)?await this.dispatch(i.id):await this.terminateRun(A.id),this.getRun(i.id)}async archiveRuns(e,t){let A=await am();for(let r of(await A.commandRun.updateMany({where:{id:{in:e},status:{in:[...ehn]}},data:{archivedAt:t?new Date:null}}),e)){let e=await A.commandRun.findUnique({where:{id:r}});e&&ehl(e)}return!0}async deleteRuns(e){let t=await am();return(await t.commandRun.deleteMany({where:{id:{in:e},status:{in:[...ehn]}}})).count}async appendOutput(e,t,A,r){if(!r.length||r.length>200)throw Error("Output batches must contain 1 to 200 chunks");let i=await am(),n=await i.commandRunAttempt.findUnique({where:{id:A},include:{run:!0}});if(!n||n.agentJobId!==t||n.run.agentId!==e)throw Error("Command attempt not found for this agent job");let a=r.map(e=>{if(!Number.isInteger(e.sequence)||e.sequence<0)throw Error("Output sequence must be a non-negative integer");if(!["STDOUT","STDERR","SYSTEM"].includes(e.stream))throw Error("Output stream is invalid");let t=Buffer.from(e.dataBase64,"base64");if(t.length!==e.byteLength||t.length>262144)throw Error("Output byte length is invalid");let A=new Date(e.createdAt);if(Number.isNaN(A.valueOf()))throw Error("Output date is invalid");return{...e,createdAt:A}});await Promise.all(a.map(e=>i.commandRunOutputChunk.upsert({where:{attemptId_sequence:{attemptId:A,sequence:e.sequence}},create:{id:(0,AB.randomUUID)(),attemptId:A,...e},update:{}})));let s=await i.commandRunOutputChunk.findMany({where:{attemptId:A,sequence:{in:a.map(e=>e.sequence)}},orderBy:{sequence:"asc"}});for(let e of s){let t={...e,runId:n.runId,attemptNumber:n.attempt};aE.publish(aJ(n.runId),{commandRunOutputAdded:t}),aE.publish(a_,{commandRunOutputAdded:t})}return s}async finishCancelled(e){let t=await am();ehl(await t.commandRun.update({where:{id:e},data:{status:"CANCELLED",finishedAt:new Date,nextRestartAt:null}}));let A=await t.commandRun.findUnique({where:{predecessorRunId:e}});A&&await this.dispatch(A.id)}async notifyFinishedRun(e){if(!this.notifications||!e.snapshotNotificationsEnabled||"SUCCEEDED"!==e.status&&"FAILED"!==e.status)return;let t=[e.worktreeBranch??e.worktreePath??`${e.agentName} \xb7 ${e.agentHostname}`,"FAILED"===e.status?e.error:null].filter(e=>!!e).join(" · ").slice(0,1e3);try{let A=await am(),r=await A.$transaction(A=>this.notifications.recordInTransaction(A,{dedupeKey:`command-run:${e.id}:${e.status}`,typeKey:"SUCCEEDED"===e.status?"COMMAND_RUN_SUCCEEDED":"COMMAND_RUN_FAILED",title:`${e.snapshotName} ${e.status.toLowerCase()}`,body:t,href:`/commands/runs/${e.id}`,resourceKind:"COMMAND_RUN",resourceId:e.id,worktreeId:e.worktreeId,highlightColor:e.worktree?.highlightColor??null}));this.notifications.created(r)}catch(e){console.error("Command run notification failed:",e)}}async handleAttemptCompletion(e){let t=await am(),A=await t.commandRunAttempt.findUnique({where:{agentJobId:e.id},include:{run:!0,agentJob:!0}});if(!A||A.completionProcessedAt)return;let r=new Date,i=function(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t?t:{}}catch{return{}}}(e.resultJson);if(1!==(await t.commandRunAttempt.updateMany({where:{id:A.id,completionProcessedAt:null},data:{status:e.status,exitCode:i.exitCode??null,signal:i.signal??null,error:e.error,startedAt:A.agentJob?.startedAt??A.startedAt,finishedAt:A.agentJob?.finishedAt??r,completionProcessedAt:r}})).count)return;if(A.run.stopRequested||"CANCELLED"===e.status)return void await this.finishCancelled(A.runId);let n="SUCCEEDED"===e.status&&0===i.exitCode,a=eha(ehr,A.run.snapshotRestartPolicy,"Restart policy"),s=A.agentJob?.startedAt??A.createdAt,o=function(e){if(e.manualStop||!("ALWAYS"===e.policy||"ON_FAILURE"===e.policy&&!e.clean))return{restart:!1,restartCount:e.restartCount,exhausted:!1};let t=(e.durationMs>=6e4?0:e.restartCount)+1,A=null!==e.limit&&t>e.limit;return{restart:!A,restartCount:t,exhausted:A}}({policy:a,limit:A.run.snapshotRestartLimit,restartCount:A.run.restartCount,durationMs:r.getTime()-s.getTime(),clean:n,manualStop:A.run.stopRequested});if(o.restart)return void ehl(await t.commandRun.update({where:{id:A.runId},data:{status:"RESTARTING",restartCount:o.restartCount,nextRestartAt:new Date(r.getTime()+1e3),exitCode:i.exitCode??null,signal:i.signal??null,error:e.error}}));let l=await t.commandRun.update({where:{id:A.runId},data:{status:n?"SUCCEEDED":"FAILED",exitCode:i.exitCode??null,signal:i.signal??null,error:e.error??(o.exhausted?"Restart limit reached":n?null:"Command failed"),finishedAt:r,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});ehl(l),await this.notifyFinishedRun(l)}async reconcile(e={}){let t=await am(),A=new Date;for(let r of(await t.commandRun.findMany({where:{status:{in:[...ehi]},...e.agentId?{agentId:e.agentId}:{}},include:{attempts:{include:{agentJob:!0},orderBy:{attempt:"desc"},take:1}}}))){let e=r.attempts[0];if(r.stopRequested){e?.agentJobId&&e.agentJob&&!["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(e.agentJob.status)?await this.agentControl.cancelJob(e.agentJobId):e&&e.agentJob?.status!=="CANCELLED"||await this.finishCancelled(r.id);continue}if("RESTARTING"===r.status&&(!r.nextRestartAt||r.nextRestartAt<=A)){await this.dispatch(r.id);continue}if(e?.agentJob&&["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(e.agentJob.status)){await this.handleAttemptCompletion(e.agentJob);continue}if(e?.agentJob&&["QUEUED","RUNNING"].includes(e.agentJob.status)){let i="RUNNING"===e.agentJob.status?"RUNNING":"QUEUED";e.status!==e.agentJob.status&&await t.commandRunAttempt.update({where:{id:e.id},data:{status:e.agentJob.status,startedAt:e.agentJob.startedAt}}),r.status!==i&&ehl(await t.commandRun.update({where:{id:r.id},data:{status:i,startedAt:"RUNNING"===i?r.startedAt??e.agentJob.startedAt??A:r.startedAt}}));continue}"QUEUED"!==r.status||e&&(e.agentJobId||e.completionProcessedAt||e.finishedAt)||await this.dispatch(r.id)}}}function ehu(e=new Date){let t=e.getFullYear(),A=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${A}-${r}`}class ehd{ccusage;diskSpace;polling;usageTimer;usageRunning;constructor(e,t,A){this.ccusage=e,this.diskSpace=t,this.polling=A,this.usageRunning=!1,this.ccusage.registerCompletionObserver(e=>this.recordCompletedUsage(e))}async recordCompletedUsage(e){if(0===e.progress.successfulCount)return;let t=ehu(),A=e.aggregate.days.find(e=>e.period===t);await this.persistUsage(t,A?.totalCost??0,new Date)}startRuntime(){this.polling.register({id:"sidebar-usage",kind:"SIDEBAR_USAGE",runtime:"SERVER",enabled:!0,cadenceSeconds:300,details:{}}),this.pruneInterruptedCollections().catch(e=>{console.error("Sidebar usage cleanup failed:",e instanceof Error?e.message:e)}).finally(()=>void this.runUsagePoll())}stopRuntime(){this.usageTimer&&clearTimeout(this.usageTimer),this.usageTimer=void 0}scheduleUsagePoll(){this.usageTimer&&clearTimeout(this.usageTimer);let e=new Date(Date.now()+3e5);this.polling.schedule("sidebar-usage",e),this.usageTimer=setTimeout(()=>void this.runUsagePoll(),3e5),this.usageTimer.unref()}async runUsagePoll(){if(!this.usageRunning){this.usageRunning=!0,this.polling.schedule("sidebar-usage",null);try{await this.polling.run("sidebar-usage",()=>this.collectUsage(),e=>({period:e.period,successfulAgents:e.successfulAgents}))}catch(e){console.error("Sidebar usage refresh failed:",e instanceof Error?e.message:e)}finally{this.usageRunning=!1,this.scheduleUsagePoll()}}}async collectUsage(){let e=`sidebar-usage:${(0,AB.randomUUID)()}`;try{let t=await this.ccusage.collect(e);return{period:ehu(),successfulAgents:t.progress.successfulCount}}finally{await this.removeCollection(e)}}async persistUsage(e,t,A){let r=await am();await r.sidebarUsageSummary.upsert({where:{id:"default"},create:{id:"default",period:e,totalCost:t,collectedAt:A},update:{period:e,totalCost:t,collectedAt:A}}),this.publish()}async latestSuccessfulUsage(e){let t=await am(),A=await t.agentJob.findMany({where:{kind:AD,status:"SUCCEEDED",resultJson:{not:null}},orderBy:[{finishedAt:"desc"},{createdAt:"desc"}],distinct:["agentId"],select:{resultJson:!0,finishedAt:!0,createdAt:!0,agent:{select:{id:!0,name:!0,hostname:!0}}}}),r=A.flatMap(e=>{try{let t=AT(JSON.parse(e.resultJson));return[{agent:e.agent,report:t.report}]}catch{return[]}});if(!r.length)return null;let i=sc(r).days.find(t=>t.period===e);return i?{totalCost:i.totalCost,collectedAt:A.reduce((e,t)=>{let A=t.finishedAt??t.createdAt;return A>e?A:e},new Date(0))}:null}async removeCollection(e){let t=await am();await t.agentJob.deleteMany({where:{ccusageCollectionId:e}}),await t.ccusageCollection.deleteMany({where:{id:e}})}async pruneInterruptedCollections(){let e=await am(),t=await e.ccusageCollection.findMany({where:{id:{startsWith:"sidebar-usage:"}},select:{id:!0}});if(!t.length)return;let A=t.map(({id:e})=>e);await e.agentJob.deleteMany({where:{ccusageCollectionId:{in:A}}}),await e.ccusageCollection.deleteMany({where:{id:{in:A}}})}async status(){let e=await am(),t=ehu(),[A,r,i,n,a,s,o]=await Promise.all([e.sidebarUsageSummary.findUnique({where:{id:"default"}}),e.agentRun.count({where:{kind:"PLAN",archivedAt:null,status:"IN_PROGRESS",attempts:{some:{status:{in:["STARTING","RUNNING"]},supersededAt:null}}}}),e.agentRun.count({where:{kind:"SESSION",archivedAt:null,status:"IN_PROGRESS",attempts:{some:{status:{in:["STARTING","RUNNING"]},supersededAt:null}}}}),e.build.count({where:{status:{in:["PREPARING","RUNNING"]}}}),e.workflowRun.count({where:{archivedAt:null,status:"RUNNING"}}),e.commandRun.count({where:{archivedAt:null,status:"RUNNING"}}),this.diskSpace.overview()]),l=A?.period===t?{totalCost:A.totalCost,collectedAt:A.collectedAt}:null;if(!l){let e=await this.latestSuccessfulUsage(t);e&&(l=e,this.persistUsage(t,e.totalCost,e.collectedAt)),this.runUsagePoll()}return{usageToday:{totalCost:l?.totalCost??null,collectedAt:l?.collectedAt.toISOString()??null},activity:{plans:r,sessions:i,builds:n,workflows:a,commands:s},diskSpace:o}}subscribe(){return aE.iterate(aK)}publish(){aE.publish(aK,{sidebarStatusChanged:!0})}}let ehh=`
6807
6868
  WITH agent_candidates AS (
6808
6869
  SELECT
6809
6870
  run.kind AS resourceKind,
@@ -6981,6 +7042,6 @@ ${JSON.stringify(t,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),c=await
6981
7042
  SUM(CASE WHEN reason <> 'ACTIVE' THEN 1 ELSE 0 END),
6982
7043
  0
6983
7044
  ) AS needsAttentionCount
6984
- FROM visible`)]),n=i[0],a=ehp(n?.totalCount),s=ehp(n?.needsAttentionCount);return{rows:r,totalCount:a,needsAttentionCount:s,activeCount:a-s}}let ehm=["PLAN","SESSION","BUILD","WORKFLOW"],ehf={questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}};function ehI(e){return e.toISOString()}function ehE(e){try{return JSON.parse(e)}catch{return{}}}function ehy(e,t,A,r){return[e,t,r??0,A.toISOString()].join(":")}function ehC(e,t){return{id:e.id,sourceKind:t,createdAt:ehI(e.createdAt),questions:e.questions}}function ehw(e){let t=CO(ehE(e),"worktree.id");return"string"==typeof t&&t?t:null}class ehQ{async list(e={}){var t,A,r,i,n;let a=await am(),s=Math.max(1,Math.min(e.first??50,200)),o=await ehg(a,{first:s,cursor:function(e){if(!e)return null;try{let t=JSON.parse(Buffer.from(e,"base64url").toString("utf8"));if("number"!=typeof t.priority||"string"!=typeof t.updatedAt||"string"!=typeof t.key)return null;return t}catch{return null}}(e.after)}),l=o.rows.slice(0,s),c=l.flatMap(e=>"PLAN"===e.resourceKind||"SESSION"===e.resourceKind?[e.resourceId]:[]),u=l.flatMap(e=>"WORKFLOW"===e.resourceKind?[e.resourceId]:[]),d=l.flatMap(e=>"BUILD"===e.resourceKind?[e.resourceId]:[]),[h,p,g]=await Promise.all([c.length?a.agentRun.findMany({where:{id:{in:c}},take:c.length,include:{worktree:!0,questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:ehf}}}):Promise.resolve([]),u.length?a.workflowRun.findMany({where:{id:{in:u}},take:u.length,include:{workflow:!0,attempts:{where:{supersededAt:null},include:{questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:ehf}}}}}):Promise.resolve([]),d.length?a.build.findMany({where:{id:{in:d}},take:d.length,include:{worktree:!0,codebase:{include:{repository:!0}},configuration:!0}}):Promise.resolve([])]),m=[...new Set(p.flatMap(e=>ehw(e.sessionDataJson)?[ehw(e.sessionDataJson)]:[]))],f=new Map((m.length?await a.worktree.findMany({where:{id:{in:m}},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):[]).map(e=>[e.id,e])),I=new Map(l.map(e=>[e.key,e.reason])),E=[];for(let e of h){let r=`${e.kind}:${e.id}`,i=I.get(r);if(!i)continue;let n=e.questionBatches.map(e=>ehC(e,null)),a="FAILED"===i?ehy(e.kind,e.id,e.finishedAt??e.updatedAt):null;E.push({key:r,resourceKind:e.kind,reason:i,resourceId:e.id,href:(t=e.kind,A=e.id,`/${"PLAN"===t?"plans":"sessions"}/${encodeURIComponent(A)}`),displayNumber:e.displayNumber,label:function(e,t=220){let A=e.replace(/\s+/g," ").trim();return A.length>t?`${A.slice(0,t-1)}…`:A}(e.initialPrompt),summary:[e.repositoryName,e.branch].filter(Boolean).join(" · ")||null,status:e.status,phase:e.phase,error:e.error,createdAt:ehI(e.createdAt),updatedAt:ehI(e.updatedAt),worktree:e.worktree,questionBatches:"QUESTION"===i?n:[],buildRun:null,failureFingerprint:a})}for(let e of p){let t=`WORKFLOW:${e.id}`,A=I.get(t);if(!A)continue;let i=ehw(e.sessionDataJson),n=e.attempts.flatMap(e=>e.questionBatches.map(t=>ehC(t,e.kind))),a="FAILED"===A?ehy("WORKFLOW",e.id,e.finishedAt??e.updatedAt,e.generation):null;E.push({key:t,resourceKind:"WORKFLOW",reason:A,resourceId:e.id,href:(r=e.id,`/workflows/runs/${encodeURIComponent(r)}`),displayNumber:e.displayNumber,label:e.workflow.name,summary:e.triggerSubjectKey||null,status:e.status,phase:e.phase,error:e.blockedReason??e.error,createdAt:ehI(e.createdAt),updatedAt:ehI(e.updatedAt),worktree:i?f.get(i)??null:null,questionBatches:"QUESTION"===A?n:[],buildRun:null,failureFingerprint:a})}for(let e of g){let t=`BUILD:${e.id}`,A=I.get(t);if(!A)continue;let r="FAILED"===A?ehy("BUILD",e.id,e.finishedAt??e.updatedAt):null,n=e.codebase?.repository.name??null,a=e.configuration?.name??null;E.push({key:t,resourceKind:"BUILD",reason:A,resourceId:e.id,href:(i=e.id,`/builds/${encodeURIComponent(i)}`),displayNumber:null,label:a??n??"iOS build",summary:[n,e.worktree?.branch].filter(Boolean).join(" · ")||null,status:e.status,phase:null,error:e.error,createdAt:ehI(e.createdAt),updatedAt:ehI(e.updatedAt),worktree:e.worktree,questionBatches:[],buildRun:"UNRUN_BUILD"===A?{buildId:e.id,destinationType:e.destinationType,preferredDestination:ehE(e.destinationJson)}:null,failureFingerprint:r})}let y=new Map(E.map(e=>[e.key,e])),C=l.flatMap(e=>y.has(e.key)?[y.get(e.key)]:[]);return{items:C,nextCursor:o.rows.length>s&&C.length?(n=C[C.length-1],Buffer.from(JSON.stringify({priority:function(e){switch(e){case"QUESTION":return 0;case"BLOCKED":return 1;case"FAILED":return 2;case"UNRUN_BUILD":return 3;case"ACTIVE":return 4}}(n.reason),updatedAt:n.updatedAt,key:n.key})).toString("base64url")):null,totalCount:o.totalCount,needsAttentionCount:o.needsAttentionCount,activeCount:o.activeCount}}async acknowledge(e){let t=e.resourceKind.trim().toUpperCase();if(!ehm.includes(t))throw Error("Action Center resource kind is invalid");let A=await am(),r=null;if("PLAN"===t||"SESSION"===t){let i=await A.agentRun.findUnique({where:{id:e.resourceId},select:{id:!0,kind:!0,status:!0,finishedAt:!0,updatedAt:!0}});i?.kind===t&&"FAILED"===i.status&&(r=ehy(t,i.id,i.finishedAt??i.updatedAt))}else if("WORKFLOW"===t){let t=await A.workflowRun.findUnique({where:{id:e.resourceId},select:{id:!0,status:!0,generation:!0,finishedAt:!0,updatedAt:!0}});t?.status==="FAILED"&&(r=ehy("WORKFLOW",t.id,t.finishedAt??t.updatedAt,t.generation))}else{let t=await A.build.findUnique({where:{id:e.resourceId},select:{id:!0,status:!0,finishedAt:!0,updatedAt:!0}});t?.status==="FAILED"&&(r=ehy("BUILD",t.id,t.finishedAt??t.updatedAt))}if(!r||r!==e.failureFingerprint)throw Error("Action Center failure is no longer current");return await A.actionCenterAcknowledgement.upsert({where:{resourceKind_resourceId_failureFingerprint:{resourceKind:t,resourceId:e.resourceId,failureFingerprint:r}},create:{id:(0,AB.randomUUID)(),resourceKind:t,resourceId:e.resourceId,failureFingerprint:r},update:{acknowledgedAt:new Date}}),aE.publish(aK,{sidebarStatusChanged:!0}),!0}subscribe(){return aE.iterate(aK)}}function ehB(e,t,A){let r=e.trim().toLowerCase(),i=t.trim().toLowerCase();if(!r||!i)throw Error("Pull request repository coordinates are required");if(!Number.isInteger(A)||A<1)throw Error("Pull request number must be a positive integer");return`${r}/${i}#${A}`}function ehD(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function ehk(e,t,A){return ehD(e[t])[A]}function ehS(e,t,A={}){if("string"!=typeof t&&"number"!=typeof t)return null;let r=String(t).trim();return r?{kind:e,resourceId:r,...A}:null}let ehb=new Set(["JIRA_STATUS","JIRA_LABEL","JIRA_ASSIGNED_SELF","JIRA_SOURCE_NEW_TICKET","JIRA_MENTION","JIRA_SPRINT_STARTED","JIRA_TICKET_UPDATED","JIRA_COMMENT_ADDED","JIRA_WORKLOG_ADDED","JIRA_SPRINT_ENDED"]),ehv=new Set(["RUN_STARTED","RUN_COMPLETED","RUN_QUESTION_NEEDED","RUN_QUESTION_ANSWERED","RUN_PAUSED","RUN_CONTINUED","RUN_FAILED","RUN_CANCELLED","RUN_PLAN_PLAYED","RUN_FOLLOW_UP","RUN_IMPORTED","RUN_USAGE_THRESHOLD","RUN_EVENT_MATCH"]),ehR=new Set(["BUILD_RESULT","BUILD_TEST_THRESHOLD","BUILD_COVERAGE_THRESHOLD","BUILD_HOOK_FAILED"]),ehT=new Set(["WORKTREE_CREATED","WORKTREE_BEHIND","WORKTREE_CONFLICT","WORKTREE_MISSING","WORKTREE_DIVERGED","WORKTREE_DIRTY_DURATION","WORKTREE_NEW_COMMIT","WORKTREE_SYNC_STATE_CHANGED","WORKTREE_AUTOMATION_RESULT","WORKTREE_CLEAN"]),ehM=new Set(["GITHUB_PR_STATE","GITHUB_REVIEW_CHANGES_REQUESTED","GITHUB_REVIEW_COMMENT","GITHUB_PR_CLOSED","GITHUB_ISSUE_COMMAND","GITHUB_PR_LABEL","GITHUB_PR_SYNCHRONIZED","GITHUB_REVIEW_APPROVED"]),ehN=new Set(["GITHUB_CHECK_FAILED","GITHUB_WORKFLOW_SUCCEEDED","GITHUB_ACTIONS_RESULT","GITHUB_PIPELINE_STATUS_CHANGED"]);function ehx(e,t){let A="string"==typeof e?Number(e.trim()):e;return"number"!=typeof A||!Number.isFinite(A)||A<=0?null:Math.min(31536e3,Math.max(t,A))}function ehO(e,t=null){let A=ehx(e.timeoutSeconds,10)??(null===t?null:ehx(t,10));return null===A?null:new Date(Date.now()+1e3*A)}function ehU(e,t){return ehx(e.cadenceSeconds,1)??Math.max(1,t)}function ehF(e,t=1){return new Date(Date.now()+1e3*ehU(e,t))}let eh_=(e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e},ehG=(e,t,A=2e4)=>{if("string"!=typeof e||!e.trim())throw Error(`${t} is required`);if(e.length>A)throw Error(`${t} is too long`);return e.trim()},ehL=(e,t=2e4)=>null==e||""===e?null:ehG(e,"Value",t),ehH=(e,t,A,r)=>ehG(e.node.config[t]??CO(e.sessionData,A),r,500),ehP=(e,t="operation")=>`${e.run.id}:${e.attempt.id}:${t}`,ehJ=(e,t,A=!1)=>({output:t,sessionPatch:{run:{[e.node.id]:t}},links:"string"==typeof t.id?[{kind:"AGENT_RUN",resourceId:t.id,label:"string"==typeof t.kind?t.kind:"Agent run",url:`/${"PLAN"===t.kind?"plans":"sessions"}/${t.id}`,metadata:{runKind:t.kind}}]:void 0,wait:A&&"string"==typeof t.id?{kind:"AGENT_RUN",externalKey:t.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}:void 0}),ehY=(e,t,A,r=[])=>({output:{jobId:t.id},sessionPatch:A,links:[...r,{kind:"AGENT_JOB",resourceId:t.id,label:"Agent job",url:`/jobs/${t.id}`}],wait:{kind:"AGENT_JOB",externalKey:t.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config,t.timeoutSeconds??3600)}}),ehj=(e,t,A,r,i)=>({kind:e,resourceId:t,label:A,url:r,metadata:i}),eh$=(e,t)=>ehj("JIRA_TICKET",e,t??e);function ehq(e,t,A){let r=ehZ(e);return ehj("PULL_REQUEST",ehB(r.owner,r.name,eh4(e)),t??"Pull request",A)}function ehV(e){let t=ehz(e),A=eh2(e);return t&&A?ehj("PULL_REQUEST",ehB(t.owner,t.name,A),"Pull request"):null}function ehK(e){let t=e.node.config.workflowRunId??CO(e.sessionData,"pipeline.runId"),A=CO(e.sessionData,"pipeline.url");return("string"==typeof t||"number"==typeof t)&&"string"==typeof A&&A?ehj("GITHUB_WORKFLOW_RUN",String(t),"Workflow run",A):null}function ehW(e){let t=CO(e.sessionData,"run.kind");if("PLAN"!==t&&"SESSION"!==t)return null;let A=function(e){try{return eh7(e)}catch{return null}}(e);return A?ehj("AGENT_RUN",A,t,`/${"PLAN"===t?"plans":"sessions"}/${A}`,{runKind:t}):null}function ehz(e){let t=e.node.config.owner,A=e.node.config.name;if("string"==typeof t&&t.trim()&&"string"==typeof A&&A.trim())return{owner:t.trim(),name:A.trim()};let r=e.sessionData.repo&&"object"==typeof e.sessionData.repo&&!Array.isArray(e.sessionData.repo)?e.sessionData.repo.displayOrigin:null,i="string"==typeof r?r.match(/(?:https?:\/\/)?github\.com[/:]([^/]+)\/([^/.]+)(?:\.git)?$/i):null,n=i?.[1]?.trim(),a=i?.[2]?.trim();return n&&a?{owner:n,name:a}:null}function ehZ(e){let t=ehz(e);if(!t)throw Error("GitHub owner and repository are required");return t}function ehX(e){let t=eh_(e,"Jira ticket"),A=t.issueType&&"object"==typeof t.issueType?t.issueType:{},r=t.status&&"object"==typeof t.status?t.status:{};return{...t,key:t.key,title:t.summary??t.title,type:A.name??t.type,status:r.name??t.status,statusCategory:r.category??t.statusCategory}}function eh0(e){let t=eh_(e,"Pull request"),A=Array.isArray(t.reviewThreads)?t.reviewThreads:[];return{...t,headBranch:t.headRefName,headSha:t.headRefOid,merged:"MERGED"===t.state,unresolvedThreads:A.filter(e=>e&&"object"==typeof e&&!Array.isArray(e)&&!0!==e.isResolved)}}function eh1(e){return ehG(e.node.config.issueKey??CO(e.sessionData,"ticket.key"),"Jira issue key",100)}function eh2(e){let t=e.node.config.number??CO(e.sessionData,"pr.number"),A="string"==typeof t?Number(t):t;return"number"==typeof A&&Number.isInteger(A)&&A>=1?A:null}function eh4(e){let t=eh2(e);if(!t)throw Error("Pull request number is required");return t}function eh8(e){return ehH(e,"worktreeId","worktree.id","Worktree ID")}function eh5(e){return ehH(e,"codebaseId","codebase.id","Codebase ID")}function eh3(e){let t=String(e.node.config.mode??"NEW").toUpperCase();if(!new Set(["NEW","EXISTING","TICKET"]).has(t))throw Error("Worktree branch mode must be NEW, EXISTING, or TICKET");return{mode:t,branchName:"TICKET"===t?null:ehL(e.node.config.branchName??CO(e.sessionData,"worktree.branch"),500),ticketKey:"TICKET"===t?ehL(e.node.config.ticketKey??CO(e.sessionData,"ticket.key"),100):null,baseBranch:ehG(e.node.config.baseBranch??CO(e.sessionData,"worktree.baseBranch")??CO(e.sessionData,"repo.defaultBranch"),"Base branch",500)}}function eh6(e){return ehH(e,"buildId","build.id","Build ID")}function eh9(e){return ehG(e.node.config.agentId??CO(e.sessionData,"agent.id")??CO(e.sessionData,"codebase.agentId"),"Agent ID",500)}function eh7(e){let t=e.node.config.runId;if("string"==typeof t&&t)return t;let A=e.node.config.sourceStepId;return"string"==typeof A?ehG(CO(e.sessionData,`run.${A}.id`),"Agent run ID",500):ehG(CO(e.sessionData,"run.id"),"Agent run ID",500)}function epe(e,t){let A,r;return{kind:t,worktreeId:(A=e.node.config.worktreeId,r=CO(e.sessionData,"worktree.id"),"string"==typeof A&&A===e.run.workflowId&&"string"==typeof r&&r!==A?ehG(r,"Worktree ID",500):eh8(e)),jiraIssueKey:ehL(e.node.config.jiraIssueKey??CO(e.sessionData,"ticket.key"),100),provider:ehG(e.node.config.provider??"CODEX","Provider",50),model:ehG(e.node.config.model,"Model",200),effort:ehL(e.node.config.effort,50),webSearchEnabled:!0===e.node.config.webSearchEnabled,prompt:ehG(e.node.config.prompt,"Prompt",2e5),attachmentIds:Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[],mcpPresetIds:Array.isArray(e.node.config.mcpPresetIds)?e.node.config.mcpPresetIds.map(String):[]}}class ept{nextMaintenanceAt=0;async record(e){let t=await am();return await t.workflowTrigger.findFirst({where:{kind:e.kind,version:{activeFor:{is:{enabled:!0,archivedAt:null}}}},select:{id:!0}})?this.recordInTransaction(t,e):null}async recordInTransaction(e,t){let A=await e.workflowTriggerEvent.findUnique({where:{dedupeKey:t.dedupeKey}});return A||e.workflowTriggerEvent.create({data:{id:(0,AB.randomUUID)(),kind:t.kind,subjectKey:t.subjectKey,dedupeKey:t.dedupeKey,payloadJson:JSON.stringify(t.payload)}})}async maintain(){let e=Date.now();if(e<this.nextMaintenanceAt)return;let t=await am(),A=await t.workflowTriggerEvent.findMany({where:{status:"FAILED",receivedAt:{lt:new Date(e-6048e5)}},select:{id:!0},orderBy:{receivedAt:"asc"},take:1e3});if(A.length){await t.workflowTriggerEvent.deleteMany({where:{id:{in:A.map(({id:e})=>e)}}}),this.nextMaintenanceAt=0;return}this.nextMaintenanceAt=e+36e5}}function epA(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function epr(e,t){return{id:e.id,name:e.name,url:e.displayOrigin,canonicalOrigin:e.canonicalOrigin,displayOrigin:e.displayOrigin,defaultBranch:t??null}}function epi(e){return{id:e.id,name:e.name,hostname:e.hostname,connected:null===e.disconnectedAt,diskFreeBytes:e.diskFreeBytes,memoryFreeBytes:e.memoryFreeBytes}}class epn{events;agentControl;worktrees;diskSpace;domains;started;running;diskAuditTimer;diskStateFingerprints;constructor(e,t,A,r,i={}){this.events=e,this.agentControl=t,this.worktrees=A,this.diskSpace=r,this.domains=i,this.started=!1,this.running=!1,this.diskStateFingerprints=new Map}start(){!this.started&&(this.started=!0,this.running=!0,this.agentControl.registerCompletionObserver(e=>this.observeAgentJob(e)),this.consumeRuns(),this.consumeBuilds(),this.consumeWorktrees(),this.consumeCodebases(),this.consumeAgents(),this.consumePipelineStatuses(),this.consumeCommandRuns(),this.consumeCommandOutput(),this.consumeSkillSyncs(),this.consumeIosDevices(),this.consumeSigningAssets(),this.consumePushNotifications(),this.consumeBuildData(),this.consumePollingOperations(),this.consumeModelCosts(),this.consumeToolCalls(),this.diskSpace&&(this.consumeDiskSpace(),this.auditDiskSpace(!0)))}stop(){this.running=!1,this.diskAuditTimer&&clearTimeout(this.diskAuditTimer),this.diskAuditTimer=void 0}async record(e,t,A,r,i={}){await this.events.record({kind:e,subjectKey:t,dedupeKey:A,payload:{...r,...i,sessionData:r}})}async worktreeSessionData(e,t=!1){return e&&this.worktrees?this.worktrees.workflowSessionDataForWorktree(e,{includeMissing:t}):{}}async observeAgentJob(e){if(e.kind===rz&&e.worktreeId){let t=await this.worktreeSessionData(e.worktreeId,!0);await this.record("WORKTREE_AUTOMATION_RESULT",e.worktreeId,`worktree-automation:${e.id}:${e.status}`,CF(t,{worktree:{id:e.worktreeId},automation:{jobId:e.id,status:e.status,error:e.error,result:epA(e.resultJson??"{}")}}),{cursorValue:`${e.id}:${e.status}`})}if("ccusage.report"===e.kind&&"SUCCEEDED"===e.status&&e.resultJson){let t=epA(e.resultJson),A=t.report&&"object"==typeof t.report&&!Array.isArray(t.report)?t.report:{},r=A.totals&&"object"==typeof A.totals&&!Array.isArray(A.totals)?A.totals:{};await this.record("CCUSAGE_THRESHOLD",e.agentId,`ccusage:${e.ccusageCollectionId??e.id}:${e.agentId}`,{run:{usage:r},agent:{id:e.agentId}},{cursorValue:e.ccusageCollectionId??e.id});return}if(!new Set(["FAILED","TIMED_OUT"]).has(e.status))return;let t=await this.worktreeSessionData(e.worktreeId,!0);await this.record("AGENT_JOB_FAILED",e.agentId,`agent-job:${e.id}:${e.status}`,CF(t,{agent:{id:e.agentId},codebase:{id:e.codebaseId,agentId:e.agentId},...e.worktreeId?{worktree:{id:e.worktreeId}}:{},steps:{trigger:{id:e.id,kind:e.kind,status:e.status,error:e.error}}}),{cursorValue:`${e.id}:${e.status}`})}async consumeRuns(){let e=aE.iterate(aO);try{for await(let t of e){if(!this.running)break;"drafts"!==t.runChanged.id&&await this.observeRun(t.runChanged.id).catch(e=>console.error("Could not record workflow run trigger:",e))}}finally{await e.return?.()}}async consumePipelineStatuses(){let e=aE.iterate(ab);try{for await(let t of e){if(!this.running)break;let e=t.githubPipelineStatusChanged,A=e.snapshot,r=e.changedPipeline??{status:A.pipelineStatus};await this.record("GITHUB_PIPELINE_STATUS_CHANGED",`${A.repositoryGithubId}:${A.headSha}`,`github-pipeline:${A.repositoryGithubId}:${A.headSha}:${A.revision}`,{repo:{githubId:A.repositoryGithubId,nameWithOwner:A.repositoryNameWithOwner,url:A.repositoryUrl},pipeline:{...r,headSha:A.headSha,aggregateStatus:A.pipelineStatus,revision:A.revision}},{cursorValue:A.revision}).catch(e=>console.error("Could not record GitHub pipeline trigger:",e))}}finally{await e.return?.()}}async consumeCommandRuns(){let e=aE.iterate(aF);try{for await(let t of e){if(!this.running)break;let e=this.domains.commands;if(!e)continue;let A=await e.getRun(t.commandRunsChanged.id);if(!A||!new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(A.status))continue;let r=await this.worktreeSessionData(A.worktreeId,!0),i=CF(r,{command:{id:A.id,commandId:A.commandId,name:A.snapshotName,status:A.status,exitCode:A.exitCode,signal:A.signal,error:A.error,finishedAt:A.finishedAt?.toISOString()??null},agent:{id:A.agentId,name:A.agentName},...A.worktreeId?{worktree:{id:A.worktreeId}}:{}}),n=A.finishedAt?.toISOString()??"terminal";await this.record("COMMAND_RUN_RESULT",A.id,`command-result:${A.id}:${A.status}:${n}`,i,{cursorValue:`${A.status}:${n}`}).catch(e=>console.error("Could not record command result trigger:",e))}}finally{await e.return?.()}}async consumeCommandOutput(){let e=aE.iterate(a_);try{for await(let t of e){if(!this.running)break;let e=t.commandRunOutputAdded,A=Buffer.from(e.dataBase64,"base64").toString("utf8");await this.record("COMMAND_OUTPUT_MATCH",e.runId,`command-output:${e.id}`,{command:{id:e.runId},output:{data:A,stream:e.stream,attempt:e.attemptNumber,sequence:e.sequence}},{cursorValue:e.id}).catch(e=>console.error("Could not record command output trigger:",e))}}finally{await e.return?.()}}async consumeSkillSyncs(){let e=aE.iterate(av);try{for await(let t of e){if(!this.running)break;let e=this.domains.skills;if(!e||!t.id)continue;let A=await e.getRun(t.id);if(!A)continue;let r=A.items.filter(e=>"BLOCKED"===e.status).map(e=>({id:e.id,skillId:e.skillId,skillName:e.skill?.name??null,direction:e.direction,error:e.error})),i={skillSync:{id:A.id,kind:A.kind,status:A.status,error:A.error,conflictCount:r.length,conflicts:r,updatedAt:A.updatedAt.toISOString(),finishedAt:A.finishedAt?.toISOString()??null},...A.groupId?{skill:{groupId:A.groupId}}:{}};("NEEDS_RESOLUTION"===A.status||r.length)&&await this.record("SKILL_SYNC_CONFLICT",A.id,`skill-conflict:${A.id}:${A.updatedAt.toISOString()}`,i,{cursorValue:A.updatedAt.toISOString()}),new Set(["READY","PARTIAL","SUCCEEDED"]).has(A.status)&&await this.record("SKILL_SYNC_RESULT",A.id,`skill-result:${A.id}:${A.status}:${A.updatedAt.toISOString()}`,i,{cursorValue:`${A.status}:${A.updatedAt.toISOString()}`})}}finally{await e.return?.()}}async consumeIosDevices(){let e=aE.iterate(aT);try{for await(let t of e){if(!this.running)break;let e=this.domains.iosDevices;if(!e||!t.id)continue;let A=await e.device(t.id);if(!A)continue;let r={device:{id:A.id,udid:A.udid,name:A.displayName,product:A.product,osVersion:A.osVersion,status:A.status,error:A.registrationError,updatedAt:A.updatedAt.toISOString()}};await this.record("IOS_DEVICE_ENROLLED",A.id,`ios-device-enrolled:${A.id}:${A.createdAt.toISOString()}`,r,{cursorValue:A.createdAt.toISOString()}),new Set(["REGISTERED","REGISTRATION_FAILED","REJECTED"]).has(A.status)&&await this.record("IOS_DEVICE_REGISTRATION_RESULT",A.id,`ios-device-registration:${A.id}:${A.status}:${A.updatedAt.toISOString()}`,r,{cursorValue:`${A.status}:${A.updatedAt.toISOString()}`})}}finally{await e.return?.()}}async consumeSigningAssets(){let e=aE.iterate(aM);try{for await(let t of e){if(!this.running)break;if(!t.changed)continue;let e=this.domains.signingAssets;if(!e)continue;let[A,r]=await Promise.all([e.operations(200),e.profiles()]);for(let e of A.filter(e=>e.finishedAt)){let t={signingOperation:{id:e.id,kind:e.kind,status:e.status,assetKey:e.assetKey,error:e.error,finishedAt:e.finishedAt?.toISOString()??null},...e.assetKey?{signingProfile:{id:e.assetKey}}:{}};await this.record("SIGNING_OPERATION_RESULT",e.id,`signing-operation:${e.id}:${e.status}:${e.updatedAt.toISOString()}`,t,{cursorValue:`${e.status}:${e.updatedAt.toISOString()}`})}for(let e of r.filter(e=>e.expiresAt)){let t=e.expiresAt;await this.record("SIGNING_ASSET_EXPIRING",e.id,`signing-expiry:${e.id}:${t}`,{signingProfile:{...e,id:e.id}},{cursorValue:t,expiresInDays:Math.ceil((new Date(t).getTime()-Date.now())/864e5)})}}}finally{await e.return?.()}}async consumePushNotifications(){let e=aE.iterate(aN);try{for await(let t of e){if(!this.running)break;if(!t.changed)continue;let e=this.domains.pushNotifications;if(e)for(let t of(await e.history(200)).filter(e=>!new Set(["DRAFT","QUEUED","SENDING"]).has(e.status))){let e=t.updatedAt.toISOString();await this.record("PUSH_NOTIFICATION_RESULT",t.id,`push-result:${t.id}:${t.status}:${e}`,{pushBatch:{id:t.id,status:t.status,targetMode:t.targetMode,deliveryCount:t.deliveries.length,updatedAt:e}},{cursorValue:`${t.status}:${e}`})}}}finally{await e.return?.()}}async consumeBuildData(){let e=aE.iterate(aG);try{for await(let t of e){if(!this.running)break;let e=this.domains.buildData;if(!e)continue;let A=await e.getCollection(t.buildDataCollectionChanged.id);if(!A||"COMPLETED"!==A.status)continue;let r=A.entries.reduce((e,t)=>e+(t.sizeBytes??0),0),i={buildData:{id:A.id,status:A.status,finishedAt:A.finishedAt,totalBytes:r,entryCount:A.entries.length,successfulAgentCount:A.progress.successfulCount}},n=A.finishedAt??A.deadlineAt;await this.record("BUILD_DATA_THRESHOLD",A.id,`build-data-threshold:${A.id}:${n}`,i,{cursorValue:r}),await this.record("BUILD_DATA_CLEANUP_RESULT",A.id,`build-data-result:${A.id}:${n}`,i,{cursorValue:n})}}finally{await e.return?.()}}async consumePollingOperations(){let e=aE.iterate(aq);try{for await(let t of e){if(!this.running)break;let e=this.domains.polling;if(!e)continue;let A=(await e.list()).find(e=>e.id===t.pollingOperationChanged);if(!A)continue;let r=A.lastCompletedAt??A.lastStartedAt??A.nextScheduledAt??A.status;await this.record("POLLING_OPERATION_STATE",A.id,`polling-state:${A.id}:${A.status}:${r}`,{polling:A},{cursorValue:`${A.status}:${r}`}).catch(e=>console.error("Could not record polling operation trigger:",e));let i=await this.domains.credentials?.status();if(i&&"READY"!==i.state){let e=i.warnings.map(({code:e})=>e);await this.record("CREDENTIAL_STORE_DEGRADED",i.storageType,`credential-store:${i.state}:${e.join(",")}`,{credentialStore:i},{cursorValue:{state:i.state,warningCodes:e,mismatchCount:i.mismatchCount}})}}}finally{await e.return?.()}}async consumeModelCosts(){let e=aE.iterate(aL);try{for await(let{catalog:t}of e){if(!this.running)break;let e=t.fetchedAt??`${t.url}:${t.error??"pending"}`;await this.record("MODEL_COST_CATALOG_CHANGED",t.url,`model-costs:${t.url}:${e}`,{modelCosts:t},{cursorValue:e})}}finally{await e.return?.()}}async consumeToolCalls(){let e=aE.iterate(aH);try{for await(let t of e){if(!this.running)break;let e=await am(),A=await e.toolCallAudit.findUnique({where:{id:t.toolCallAuditChanged.id}});if(!A||"RUNNING"===A.resultStatus)continue;let r=A.caller.startsWith("workflow:")?A.caller.slice(9):null,i=r?await e.workflowRun.findUnique({where:{id:r},select:{id:!0,workflowId:!0}}):null,n=i?null:await e.workflowStepAttempt.findUnique({where:{id:A.correlationId},select:{run:{select:{id:!0,workflowId:!0}}}}),a=i??n?.run??null,s=A.finishedAt?.toISOString()??"unfinished";await this.record("TOOL_CALL_RESULT",A.id,`tool-call:${A.id}:${A.resultStatus}:${s}`,{toolCall:{id:A.id,correlationId:A.correlationId,caller:A.caller,source:A.source,groupId:A.groupId,toolName:A.toolName,argumentsSha256:A.argumentsSha256,resultStatus:A.resultStatus,durationMs:A.durationMs,finishedAt:A.finishedAt?.toISOString()??null}},{cursorValue:`${A.resultStatus}:${s}`,...a?{workflowCorrelation:{workflowId:a.workflowId,runId:a.id}}:{}})}}finally{await e.return?.()}}async observeRun(e){let t=await am(),A=await t.agentRun.findUnique({where:{id:e},include:{worktree:{include:{codebase:{include:{repository:!0}}}},agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},questionBatches:{orderBy:{createdAt:"desc"},take:1,include:{questions:{include:{options:!0}}}},events:{orderBy:{sequence:"desc"},take:1},toolCalls:{orderBy:{sequence:"desc"},take:1}}});if(!A)return;let r=await t.workflowRunResourceLink.findFirst({where:{kind:"AGENT_RUN",resourceId:A.id},include:{run:!0},orderBy:{createdAt:"desc"}}),i=CF(await this.worktreeSessionData(A.worktree?.id??null),{run:{id:A.id,kind:A.kind,status:A.status,phase:A.phase,origin:A.origin,provider:A.provider,model:A.model,finalOutput:A.finalOutput,error:A.error,sourcePlanId:A.sourcePlanId,parentRunId:A.parentRunId,followUpMode:A.followUpMode,usage:{inputTokens:A.inputTokens,outputTokens:A.outputTokens,reasoningTokens:A.reasoningTokens,cacheReadTokens:A.cacheReadTokens,cacheWriteTokens:A.cacheWriteTokens,toolCallCount:A.toolCallCount,estimatedCost:A.estimatedCost}},...A.worktree?{worktree:{id:A.worktree.id,path:A.worktree.folder,branch:A.worktree.branch,headSha:A.worktree.headSha},codebase:{id:A.worktree.codebase.id,folder:A.worktree.codebase.folder,agentId:A.worktree.codebase.agentId},repo:epr(A.worktree.codebase.repository,A.worktree.codebase.defaultBranch)}:{},...A.agent?{agent:epi(A.agent)}:{},...A.jiraIssueKey?{ticket:{key:A.jiraIssueKey}}:{}}),n=r?{workflowId:r.run.workflowId,runId:r.runId,attemptId:r.attemptId}:null,a={cursorValue:`${A.status}:${A.phase}`,workflowCorrelation:n};A.startedAt&&await this.record("RUN_STARTED",A.id,`run-started:${A.id}:${A.startedAt.toISOString()}`,i,a);let s="COMPLETED"===A.status?"RUN_COMPLETED":"FAILED"===A.status?"RUN_FAILED":"CANCELLED"===A.status?"RUN_CANCELLED":"PAUSED"===A.status?"RUN_PAUSED":null;s&&await this.record(s,A.id,`run-status:${A.id}:${A.status}:${A.finishedAt?.toISOString()??A.updatedAt.toISOString()}`,i,a),"RUNNING"===A.phase&&A.startedAt&&A.updatedAt>A.startedAt&&await this.record("RUN_CONTINUED",A.id,`run-continued:${A.id}:${A.updatedAt.toISOString()}`,i,a),A.sourcePlanId&&await this.record("RUN_PLAN_PLAYED",A.id,`run-plan-played:${A.id}:${A.sourcePlanId}`,i,a),A.parentRunId&&"PLAN_PLAY"!==A.followUpMode&&await this.record("RUN_FOLLOW_UP",A.id,`run-follow-up:${A.id}:${A.parentRunId}`,i,a),"IMPORTED"===A.origin&&await this.record("RUN_IMPORTED",A.id,`run-imported:${A.id}:${A.updatedAt.toISOString()}`,i,a),await this.record("RUN_USAGE_THRESHOLD",A.id,`run-usage:${A.id}:${A.updatedAt.toISOString()}`,i,{...a,cursorValue:A.updatedAt.toISOString()});let o=A.questionBatches[0];if(o){let e={...i,run:{...i.run,questions:o.questions}};"PENDING"===o.status?await this.record("RUN_QUESTION_NEEDED",A.id,`run-question:${o.id}:pending`,e,a):"ANSWERED"===o.status&&await this.record("RUN_QUESTION_ANSWERED",A.id,`run-question:${o.id}:answered`,e,a)}let l=A.events[0];l&&await this.record("RUN_EVENT_MATCH",A.id,`run-event:${l.id}`,i,{...a,event:l});let c=A.toolCalls[0];c&&await this.record("RUN_EVENT_MATCH",A.id,`run-tool:${c.id}:${c.status}`,i,{...a,toolCall:c})}async consumeBuilds(){let e=aE.iterate(aR);try{for await(let t of e){if(!this.running)break;await this.observeBuild(t.buildsChanged.id).catch(e=>console.error("Could not record workflow build trigger:",e))}}finally{await e.return?.()}}async observeBuild(e){let t=await am(),A=await t.build.findUnique({where:{id:e},include:{codebase:{include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}}},worktree:!0,reports:!0,scriptExecutions:!0}});if(!A)return;let r=CF(await this.worktreeSessionData(A.worktree?.id??null),{build:{id:A.id,status:A.status,action:A.action,error:A.error},...A.codebase?{codebase:{id:A.codebase.id,folder:A.codebase.folder,agentId:A.codebase.agentId},repo:epr(A.codebase.repository,A.codebase.defaultBranch),agent:epi(A.codebase.agent)}:{},...A.worktree?{worktree:{id:A.worktree.id,path:A.worktree.folder,branch:A.worktree.branch,headSha:A.worktree.headSha}}:{}});for(let e of(new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(A.status)&&await this.record("BUILD_RESULT",A.id,`build-result:${A.id}:${A.status}`,r,{cursorValue:A.status}),A.reports.filter(({status:e})=>"READY"===e))){let t=epA(e.summaryJson),i={...r,build:{...r.build,..."TEST_RESULTS"===e.kind?{testSummary:t}:{coverageSummary:t}}};await this.record("TEST_RESULTS"===e.kind?"BUILD_TEST_THRESHOLD":"BUILD_COVERAGE_THRESHOLD",A.id,`build-report:${e.id}:${e.updatedAt.toISOString()}`,i,{cursorValue:e.updatedAt.toISOString()})}for(let e of A.scriptExecutions.filter(({causedBuildFailure:e})=>e))await this.record("BUILD_HOOK_FAILED",A.id,`build-hook:${e.id}:failed`,r,{cursorValue:e.id,script:{id:e.id,name:e.nameSnapshot,phase:e.phase}})}async consumeWorktrees(){let e=aE.iterate(aS);try{for await(let t of e){if(!this.running)break;let e=t.worktreeOverviewChanged,A=await am();for(let t of(await A.worktree.findMany({where:e.worktreeId?{id:e.worktreeId}:e.codebaseId?{codebaseId:e.codebaseId}:{},include:{codebase:{include:{repository:!0}}},take:e.worktreeId?1:500})))await this.observeWorktree(t).catch(e=>console.error("Could not record workflow worktree trigger:",e))}}finally{await e.return?.()}}async observeWorktree(e){let t=e.lastCheckedAt??e.updatedAt,A=e.hasStagedChanges||e.hasUnstagedChanges,r=CF(await this.worktreeSessionData(e.id,!0),{repo:epr(e.codebase.repository,e.codebase.defaultBranch),codebase:{id:e.codebase.id,folder:e.codebase.folder,agentId:e.codebase.agentId},worktree:{id:e.id,path:e.folder,branch:e.branch,headSha:e.headSha,syncState:e.syncState,pushStatus:e.pushStatus,statusError:e.statusError,baseBehind:e.baseBehind,dirty:A,missingAt:e.missingAt?.toISOString()??null,dirtySince:A?e.updatedAt.toISOString():null}}),i={cursorValue:t.toISOString()};await this.record("WORKTREE_SYNC_STATE_CHANGED",e.id,`worktree-sync:${e.id}:${e.syncState}:${t.toISOString()}`,r,{cursorValue:e.syncState}),await this.record("WORKTREE_CLEAN",e.id,`worktree-clean:${e.id}:${t.toISOString()}`,r,{cursorValue:A}),(e.baseBehind??0)>0&&await this.record("WORKTREE_BEHIND",e.id,`worktree-behind:${e.id}:${t.toISOString()}`,r,i),await this.record("WORKTREE_DIRTY_DURATION",e.id,`worktree-dirty:${e.id}:${t.toISOString()}`,r,i),await this.record("WORKTREE_MISSING",e.id,`worktree-missing:${e.id}:${t.toISOString()}`,r,{cursorValue:!!e.missingAt}),await this.record("WORKTREE_DIVERGED",e.id,`worktree-diverged:${e.id}:${t.toISOString()}`,r,{cursorValue:"DIVERGED"===e.pushStatus}),e.headSha&&await this.record("WORKTREE_NEW_COMMIT",e.id,`worktree-commit:${e.id}:${e.headSha}`,r,{cursorValue:e.headSha})}async consumeCodebases(){let e=aE.iterate(ak);try{for await(let t of e){if(!this.running)break;let e=await am(),A=t.codebaseOverviewChanged;for(let t of(await e.codebase.findMany({where:A.codebaseId?{id:A.codebaseId}:A.repositoryId?{repositoryId:A.repositoryId}:{},include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}},take:A.codebaseId?1:500}))){let e={repo:epr(t.repository,t.defaultBranch),agent:epi(t.agent),codebase:{id:t.id,folder:t.folder,agentId:t.agentId,branch:t.defaultBranch,syncState:t.syncState,availability:t.availability,statusError:t.statusError,lastFetchError:t.lastFetchError,remoteBranches:JSON.parse(t.remoteBranchesJson)}},A=(t.lastCheckedAt??t.updatedAt).toISOString();await this.record("CODEBASE_SYNC_STATE_CHANGED",t.id,`codebase-sync:${t.id}:${t.syncState}:${A}`,e,{cursorValue:t.syncState}),(t.statusError||t.lastFetchError)&&await this.record("CODEBASE_OPERATION_FAILED",t.id,`codebase-failed:${t.id}:${A}`,e,{cursorValue:A,error:t.statusError??t.lastFetchError});let r=e.codebase.remoteBranches;if(Array.isArray(r))for(let A of r.filter(e=>"string"==typeof e))await this.record("CODEBASE_REMOTE_BRANCH",t.id,`codebase-remote-branch:${t.id}:${A}`,e,{cursorValue:A,branch:A})}}}finally{await e.return?.()}}async emitDiskSnapshot(e,t){let A=e.agent.id;t.report&&await this.record("AGENT_DISK_REPORT",A,`agent-disk-report:${A}:${e.disk.lastReportedAt??t.changeId}`,e,{cursorValue:e.disk.lastReportedAt}),t.threshold&&await this.record("AGENT_DISK_THRESHOLD",A,`agent-disk-threshold:${A}:${t.changeId}`,e);let r=ecE(e);if(await this.record("AGENT_DISK_STATE_CHANGED",A,`agent-disk-state:${A}:${t.changeId}`,e,{cursorValue:r}),this.diskStateFingerprints.set(A,JSON.stringify(r)),t.cleanup){let r={...e,cleanup:t.cleanup};await this.record("AGENT_DISK_CLEANUP_RESULT",A,`agent-disk-cleanup:${t.cleanup.jobId}:${t.cleanup.status}`,r,{cleanup:t.cleanup})}}async observeDiskChange(e){if(!this.diskSpace)return;let{id:t,reason:A,cleanup:r}=e.diskSpaceChange;if("settings"===e.diskSpaceChanged){let e=await this.diskSpace.overview();for(let r of e.agents)await this.emitDiskSnapshot(ecI(e.settings,r,A),{changeId:t,report:!1,threshold:!0});return}let i=await this.diskSpace.snapshot(e.diskSpaceChanged,A);await this.emitDiskSnapshot(i,{changeId:t,report:"REPORT_RECEIVED"===A,threshold:!0,cleanup:r})}async consumeDiskSpace(){if(!this.diskSpace)return;let e=this.diskSpace.subscribe();try{for await(let t of e){if(!this.running)break;await this.observeDiskChange(t).catch(e=>console.error("Could not record disk-space workflow trigger:",e))}}finally{await e.return?.()}}async auditDiskSpace(e){if(this.diskSpace&&this.running)try{let t=await this.diskSpace.overview();for(let A of t.agents){let r=ecI(t.settings,A,e?"STARTUP_RECONCILE":"STATE_AUDIT"),i=JSON.stringify(ecE(r));(e||this.diskStateFingerprints.get(A.agent.id)!==i)&&await this.emitDiskSnapshot(r,{changeId:(0,AB.randomUUID)(),report:!1,threshold:e})}}catch(e){console.error("Could not audit disk-space workflow state:",e)}finally{this.running&&(this.diskAuditTimer=setTimeout(()=>void this.auditDiskSpace(!1),6e4),this.diskAuditTimer.unref?.())}}async consumeAgents(){let e=aE.iterate(ay);try{for await(let t of e){if(!this.running)break;let e=await am(),A=await e.agent.findUnique({where:{id:t.agentChanged.id}});if(!A)continue;let r=null===A.disconnectedAt,i={codebase:{agentId:A.id},agent:{id:A.id,name:A.name,connected:r,diskFreeBytes:A.diskFreeBytes,memoryFreeBytes:A.memoryFreeBytes}};await this.record("AGENT_CONNECTION",A.id,`agent-connection:${A.id}:${A.updatedAt.toISOString()}`,i,{cursorValue:r}),await this.record("AGENT_RESOURCE_THRESHOLD",A.id,`agent-resource:${A.id}:${A.updatedAt.toISOString()}`,i,{cursorValue:{diskFreeBytes:A.diskFreeBytes,memoryFreeBytes:A.memoryFreeBytes}}),await this.record("AGENT_VERSION_CHANGED",A.id,`agent-version:${A.id}:${A.version}`,{...i,agent:{...i.agent,version:A.version,osVersion:A.osVersion,architecture:A.architecture}},{cursorValue:A.version})}}finally{await e.return?.()}}}async function epa(e,t){let A=e.trim();if(!A||A.length>5e4)throw Error(`Workflow script must contain 1–${5e4.toLocaleString()} characters`);let r=await bQ(),i=Date.now()+250;try{return r.evalCode(`"use strict"; const session = Object.freeze(${JSON.stringify(t)}); (${A})(session);`,{memoryLimitBytes:8388608,maxStackSizeBytes:524288,shouldInterrupt:bC(i)})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Workflow script failed: ${"interrupted"===e?"execution timed out after 250ms":e}`)}}class eps{handlers=new Map;register(e,t){this.handlers.set(e,t)}has(e){return this.handlers.has(e)}execute(e){let t=this.handlers.get(e.node.kind);if(!t)throw Error(`Workflow step ${e.node.kind} is not registered`);return t(e)}}let epo="workflows:changed",epl=e=>`workflow-run:${e}`,epc=e=>`workflow-run:${e}:events`,epu=e=>`workflow-run:${e}:questions`,epd=["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED"],eph=new Set(["SUCCEEDED","FAILED","CANCELLED"]),epp=new Set(["SUCCEEDED","FAILED","CANCELLED","SKIPPED","SUPERSEDED"]),epg=new Set(["RUNNING","WAITING"]),epm=e=>JSON.parse(e);function epf(e){return{agent:{id:e.id,name:e.name,hostname:e.hostname,...void 0!==e.lastSeenAt&&void 0!==e.disconnectedAt?{connected:null!==e.lastSeenAt&&null===e.disconnectedAt&&Date.now()-e.lastSeenAt.getTime()<=a8(e)}:{},...void 0!==e.diskFreeBytes?{diskFreeBytes:e.diskFreeBytes}:{},...void 0!==e.memoryFreeBytes?{memoryFreeBytes:e.memoryFreeBytes}:{}}}}function epI(e){return CF(epf(e.agent),{codebase:{id:e.id,folder:e.folder,agentId:e.agentId,branch:e.branch,headSha:e.headSha},repo:{id:e.repository.id,name:e.repository.name,url:e.repository.displayOrigin,canonicalOrigin:e.repository.canonicalOrigin,displayOrigin:e.repository.displayOrigin,defaultBranch:e.defaultBranch}})}function epE(e,t,A){let r=e.trim();if(!r)throw Error(`${t} is required`);if(r.length>A)throw Error(`${t} is too long`);return r}function epy(e){let t=e?.trim().toUpperCase()||"QUEUE";if(!new Set(["QUEUE","CONCURRENT","COALESCE_LATEST"]).has(t))throw Error("Workflow overlap policy is not supported");return t}function epC(e,t){let A=e??("CONCURRENT"===t?4:1);if(!Number.isInteger(A)||A<1||A>32)throw Error("Maximum concurrent runs must be between 1 and 32");return A}function epw(e){return Array.isArray(e)?`[${e.map(epw).join(",")}]`:e&&"object"==typeof e?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${epw(t)}`).join(",")}}`:JSON.stringify(e)}function epQ(e,t,A){if(Buffer.byteLength(e,"utf8")>A)throw Error(`${t} is too large`)}function epB(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e}function epD(e){aE.publish(epo,{workflowChanged:{id:e}})}function epk(e){aE.publish(epl(e),{workflowRunChanged:{id:e}}),aE.publish(epo,{workflowChanged:{id:"runs",runId:e}}),aE.publish(aK,{sidebarStatusChanged:!0})}function epS(e){return[...wS.get(e.kind).requiredPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.requiredPaths,...wl(e.kind,"step",e.config)]}function epb(e){return[...wS.get(e.kind).providedPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.providedPaths,`steps.${e.id}.*`]}async function epv(e){return(await e.workflowRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:2},update:{nextValue:{increment:1}}})).nextValue-1}class epR{events;executor;checkpointRestorer;credentials;agentControl;notifications;runsService;worktrees;commandsService;jiraService;runtimeTimer;ticking;workerId;activeExecutions;claimedSecretJobs;waitPollers;constructor(e,t=new eps,A,r,i,n,a,s,o,l){this.events=e,this.executor=t,this.checkpointRestorer=A,this.credentials=r,this.agentControl=i,this.notifications=n,this.runsService=a,this.worktrees=s,this.commandsService=o,this.jiraService=l,this.ticking=!1,this.workerId=(0,AB.randomUUID)(),this.activeExecutions=new Map,this.claimedSecretJobs=new Set,this.waitPollers=new Map,this.agentControl&&(this.executor.register("TERMINAL_RUN",e=>this.startTerminalJob(e)),this.executor.register("WORKTREE_SNAPSHOT",e=>this.startCheckpointJob(e)),this.agentControl.registerCompletionHandler(iX,e=>this.workflowAgentJobCompleted(e)),this.agentControl.registerCompletionObserver(e=>this.genericAgentJobCompleted(e)),this.agentControl.registerCompletionHandler(i0,e=>this.workflowAgentJobCompleted(e)))}async controlLinkedAgentRuns(e,t){if(!this.runsService)return;let A=await am(),r=await A.workflowRunResourceLink.findMany({where:{runId:e,kind:"AGENT_RUN",attempt:{status:{in:["RUNNING","WAITING"]}}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(r.map(async({resourceId:e})=>{let A=await this.runsService.get(e);!A||"MANAGED"!==A.origin||"PAUSE"===t&&"IN_PROGRESS"!==A.status||"CONTINUE"===t&&"PAUSED"!==A.status||"CANCEL"===t&&new Set(["COMPLETED","FAILED","CANCELLED"]).has(A.status)||await this.runsService.lifecycle(e,t)}))}async cancelWaitingCommandRuns(e){if(!this.commandsService)return;let t=await am(),A=await t.workflowRunResourceLink.findMany({where:{runId:e,kind:"COMMAND_RUN",attempt:{status:"WAITING"}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(A.map(({resourceId:e})=>this.commandsService.terminateRun(e)))}async runWorktree(e){let t=CO(epm(e),"worktree.id");return"string"==typeof t&&t?(await am()).worktree.findUnique({where:{id:t},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):null}async notifyRun(e,t,A,r,i){if(!this.notifications)return;let n=await am(),a=await n.workflowRun.findUnique({where:{id:e},select:{sessionDataJson:!0}}),s=a?await this.runWorktree(a.sessionDataJson):null,o=await n.$transaction(n=>this.notifications.recordInTransaction(n,{dedupeKey:`workflow:${e}:${i}`,typeKey:t,title:A,body:r,href:`/workflows/runs/${e}`,resourceKind:"WORKFLOW_RUN",resourceId:e,worktreeId:s?.id??null,highlightColor:s?.highlightColor??null}));this.notifications.created(o)}startRuntime(){this.runtimeTimer||(this.runtimeTimer=setInterval(()=>{this.tick().catch(e=>{console.error("Workflow runtime tick failed:",e)})},1e3),this.runtimeTimer.unref?.(),this.tick().catch(e=>{console.error("Workflow runtime startup failed:",e)}))}stopRuntime(){for(let e of(this.runtimeTimer&&clearInterval(this.runtimeTimer),this.runtimeTimer=void 0,this.activeExecutions.values()))e.abort();this.activeExecutions.clear()}catalog(){return{schemaVersion:1,globalConcurrency:4,steps:wk,triggers:wG}}registerWaitPoller(e,t){this.waitPollers.set(e,t)}async list(e={}){let t=await am(),A=Math.min(Math.max(e.first??100,1),200),r=e.archive?.toUpperCase()??"ACTIVE",i=e.search?.trim(),n=await t.workflow.findMany({where:{..."ALL"===r?{}:"ARCHIVED"===r?{archivedAt:{not:null}}:{archivedAt:null},...null===e.enabled||void 0===e.enabled?{}:{enabled:e.enabled},...i?{OR:[{name:{contains:i}},{description:{contains:i}}]}:{}},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}},_count:{select:{versions:!0,runs:!0}}},orderBy:[{updatedAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:n.slice(0,A),nextCursor:n.length>A?n[A-1].id:null,totalCount:await t.workflow.count()}}async get(e){return(await am()).workflow.findUnique({where:{id:e},include:{activeVersion:!0,versions:{orderBy:{version:"desc"}},quickActionRepositories:{include:{repository:!0}},_count:{select:{runs:!0}}}})}async version(e){return(await am()).workflowVersion.findUnique({where:{id:e},include:{triggers:!0}})}async create(e){let t=epE(e.name,"Workflow name",200),A=wV(e.definition??function(e="Untitled workflow"){return wq.parse({format:wm,schemaVersion:1,name:e,description:"",triggers:[{id:"manual",kind:"MANUAL",position:{x:0,y:100},config:{}}],nodes:[],edges:[],editor:{}})}(t)),r=JSON.stringify({...A,name:t,description:e.description?.trim()??A.description});epQ(r,"Workflow definition",2097152);let i=epy(e.overlapPolicy),n=await am(),a=await n.workflow.create({data:{id:(0,AB.randomUUID)(),name:t,description:e.description?.trim()??A.description,draftDefinitionJson:r,draftSchemaVersion:1,overlapPolicy:i,maxConcurrentRuns:epC(e.maxConcurrentRuns,i)}});return epD(a.id),this.get(a.id)}async saveDraft(e){let t=wV(e.definition),A=JSON.stringify(t);epQ(A,"Workflow definition",2097152);let r=await this.get(e.id);if(!r)throw Error("Workflow not found");let i=epy(e.overlapPolicy??r.overlapPolicy),n=await am();return await n.workflow.update({where:{id:e.id},data:{name:t.name,description:t.description,draftDefinitionJson:A,draftSchemaVersion:t.schemaVersion,overlapPolicy:i,maxConcurrentRuns:epC(e.maxConcurrentRuns??r.maxConcurrentRuns,i)}}),epD(e.id),this.get(e.id)}async validateDraft(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let A=function(e){let t=wq.safeParse(e);if(!t.success)return{definition:null,diagnostics:t.error.issues.map(e=>({severity:"ERROR",code:"SCHEMA_INVALID",message:e.message,path:e.path.join(".")}))};let A=t.data,r=[],i=new Set;for(let e of[...A.triggers,...A.nodes])i.has(e.id)&&r.push({severity:"ERROR",code:"DUPLICATE_NODE_ID",message:`Duplicate graph id ${e.id}`,nodeId:e.id}),i.add(e.id);let n=new Set;for(let e of A.edges)n.has(e.id)&&r.push({severity:"ERROR",code:"DUPLICATE_EDGE_ID",message:`Duplicate edge id ${e.id}`}),n.add(e.id),i.has(e.source)&&i.has(e.target)||r.push({severity:"ERROR",code:"EDGE_ENDPOINT_MISSING",message:`Edge ${e.id} references a missing endpoint`}),A.triggers.some(({id:t})=>t===e.target)&&r.push({severity:"ERROR",code:"TRIGGER_HAS_INPUT",message:"Triggers cannot have incoming edges",triggerId:e.target});A.triggers.length||r.push({severity:"ERROR",code:"TRIGGER_REQUIRED",message:"At least one trigger is required"}),A.nodes.length||r.push({severity:"ERROR",code:"STEP_REQUIRED",message:"At least one step is required"});let a=new Set(A.nodes.map(({id:e})=>e)),s=new Map,o=new Map;for(let e of A.edges)s.set(e.source,[...s.get(e.source)??[],e.target]),o.set(e.target,[...o.get(e.target)??[],e.source]);for(let e of A.nodes)(o.get(e.id)??[]).filter(e=>a.has(e)).length>1&&"CONTROL_JOIN"!==e.kind&&r.push({severity:"ERROR",code:"EXPLICIT_JOIN_REQUIRED",message:"Nodes with multiple incoming branches must be explicit join nodes",nodeId:e.id});let l=new Map(A.nodes.map(e=>[e.id,0]));for(let e of A.edges)a.has(e.source)&&a.has(e.target)&&l.set(e.target,(l.get(e.target)??0)+1);let c=[...l].filter(([,e])=>0===e).map(([e])=>e),u=[];for(;c.length;){let e=c.shift();for(let t of(u.push(e),s.get(e)??[])){if(!a.has(t))continue;let e=(l.get(t)??0)-1;l.set(t,e),0===e&&c.push(t)}}u.length!==A.nodes.length&&r.push({severity:"ERROR",code:"DAG_CYCLE",message:"Workflow graphs cannot contain free-form cycles"});let d=new Map,h=e=>{let t=new Set,A=[...s.get(e)??[]];for(;A.length;){let e=A.shift();t.has(e)||(t.add(e),A.push(...s.get(e)??[]))}return t};for(let e of[...A.triggers,...A.nodes])d.set(e.id,h(e.id));for(let e of A.nodes){for(let t of(A.triggers.some(t=>d.get(t.id)?.has(e.id))||r.push({severity:"ERROR",code:"UNREACHABLE_STEP",message:"Step is not reachable from a trigger",nodeId:e.id}),w1(e.config)&&r.push({severity:"ERROR",code:"SECRET_LITERAL",message:"Store secrets as credential references, not workflow literals",nodeId:e.id}),w2(e.config)&&r.push({severity:"ERROR",code:"UNRESOLVED_REFERENCE",message:"Resolve imported references before publishing",nodeId:e.id}),new Set(CL(e.config))))r.push({severity:"ERROR",code:"SESSION_BINDING_INVALID",message:t,nodeId:e.id});"CONTROL_SUBWORKFLOW"===e.kind&&"string"!=typeof e.config.versionId&&r.push({severity:"ERROR",code:"SUBWORKFLOW_VERSION_REQUIRED",message:"Sub-workflows must pin a published version",nodeId:e.id})}for(let e of A.triggers){for(let t of((s.get(e.id)??[]).length||r.push({severity:"ERROR",code:"TRIGGER_DISCONNECTED",message:"Trigger is not connected to a step",triggerId:e.id}),w1(e.config)&&r.push({severity:"ERROR",code:"SECRET_LITERAL",message:"Store secrets as credential references, not trigger literals",triggerId:e.id}),w2(e.config)&&r.push({severity:"ERROR",code:"UNRESOLVED_REFERENCE",message:"Resolve imported references before publishing",triggerId:e.id}),new Set(CL(e.config))))r.push({severity:"ERROR",code:"SESSION_BINDING_INVALID",message:t,triggerId:e.id});if(CS(e.kind)&&!wE(e.config)&&r.push({severity:"ERROR",code:"RESOURCE_KIND_REQUIRED",message:"Resource triggers must target a single resource kind; add one trigger per kind",triggerId:e.id}),Ck(e.kind)){let t=wf(e.config),i=Array.isArray(e.config.choices)?e.config.choices.length:0;t.length&&t.length===i||r.push({severity:"ERROR",code:"TRIGGER_CHOICES_REQUIRED",message:"Choice triggers need at least one option, each with a unique key",triggerId:e.id});let n=new Set(t.map(({key:e})=>e));for(let t of A.edges)t.source===e.id&&(n.has(t.sourceHandle)||r.push({severity:"ERROR",code:"TRIGGER_CHOICE_HANDLE_UNKNOWN",message:`Connection ${t.id} leaves an option that no longer exists`,triggerId:e.id}))}if("GITHUB_ISSUE_COMMAND"===e.kind){let t=e.config.allowedLogins,A=e.config.commandPattern;(!Array.isArray(t)||!t.length||t.some(e=>"string"!=typeof e||!e.trim()))&&r.push({severity:"ERROR",code:"ISSUE_COMMAND_ALLOWLIST_REQUIRED",message:"Issue command triggers require an explicit GitHub login allow-list",triggerId:e.id}),"string"==typeof A&&A.startsWith("^")&&A.endsWith("$")||r.push({severity:"ERROR",code:"ISSUE_COMMAND_PATTERN_ANCHORED",message:"Issue command patterns must be anchored with ^ and $",triggerId:e.id})}}for(let e of w0(A).requirementViolations)r.push({severity:"ERROR",code:"REQUIREMENT_UNSATISFIED",message:`${e.path} is not guaranteed on the path from ${e.triggerName}`,nodeId:e.nodeId,triggerId:e.triggerId,path:e.path});for(let e=0;e<A.nodes.length;e+=1){let t=A.nodes[e],i=[...wK(t,wS.get(t.kind).providedPaths),...t.providedPaths].filter(e=>!e.startsWith(`steps.${t.id}.`));for(let n=e+1;n<A.nodes.length;n+=1){let e=A.nodes[n];if(d.get(t.id)?.has(e.id)||d.get(e.id)?.has(t.id))continue;let a=[...wK(e,wS.get(e.kind).providedPaths),...e.providedPaths].filter(t=>!t.startsWith(`steps.${e.id}.`));i.some(e=>a.some(t=>wW(e,t)||wW(t,e)))&&r.push({severity:"ERROR",code:"PARALLEL_WRITE_CONFLICT",message:`Parallel steps ${t.name??t.id} and ${e.name??e.id} can write the same session-data path`,nodeId:e.id})}}return{definition:A,diagnostics:r}}(epm(t.draftDefinitionJson)),r=[...A.diagnostics];return A.definition&&r.push(...await this.validateSubworkflows(t.id,A.definition)),{valid:!r.some(({severity:e})=>"ERROR"===e),diagnostics:r}}async validateSubworkflows(e,t){let A=t.nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(e=>({node:e,versionId:e.config.versionId})).filter(e=>"string"==typeof e.versionId);if(!A.length)return[];let r=await am(),i=new Map,n=new Map,a=new Set,s=new Set,o=A.map(({versionId:e})=>e);for(;o.length;){let e=[...new Set(o)].filter(e=>!s.has(e));if(!e.length)break;for(let t of(e.forEach(e=>s.add(e)),o=[],await r.workflowVersion.findMany({where:{id:{in:e}}}))){i.set(t.id,t);try{let e=wV(epm(t.definitionJson)).nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(({config:e})=>e.versionId).filter(e=>"string"==typeof e);n.set(t.id,e),o.push(...e)}catch{a.add(t.id)}}}let l=(e,t)=>{let A=i.get(e);if(!A)return"MISSING";if(a.has(e))return"INVALID";if(t.has(A.workflowId))return"RECURSIVE";let r=new Set(t).add(A.workflowId);for(let t of n.get(e)??[]){let e=l(t,r);if(e)return e}return null},c=[];for(let{node:t,versionId:r}of A){let A=l(r,new Set([e]));"MISSING"===A?c.push({severity:"ERROR",code:"SUBWORKFLOW_NOT_FOUND",message:"Pinned sub-workflow chain contains a missing version",nodeId:t.id}):"INVALID"===A?c.push({severity:"ERROR",code:"SUBWORKFLOW_INVALID",message:"Pinned sub-workflow chain contains an invalid definition",nodeId:t.id}):"RECURSIVE"===A&&c.push({severity:"ERROR",code:"SUBWORKFLOW_RECURSION",message:"Pinned sub-workflow calls cannot form a recursive chain",nodeId:t.id})}return c}async publish(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let A=wV(epm(t.draftDefinitionJson)),r=await this.validateDraft(e);if(!r.valid)throw Error(`Workflow cannot be published: ${r.diagnostics.filter(({severity:e})=>"ERROR"===e).map(({message:e})=>e).slice(0,5).join("; ")}`);let i=await am(),n=await i.$transaction(async t=>{let r=await t.workflowVersion.findFirst({where:{workflowId:e},orderBy:{version:"desc"}}),i=(0,AB.randomUUID)(),n=await t.workflowVersion.create({data:{id:i,workflowId:e,version:(r?.version??0)+1,name:A.name,description:A.description,schemaVersion:A.schemaVersion,definitionJson:JSON.stringify(A),contentHash:(0,AB.createHash)("sha256").update(epw(A)).digest("hex"),triggers:{create:A.triggers.map(e=>({id:(0,AB.randomUUID)(),nodeId:e.id,kind:e.kind,configJson:JSON.stringify(e.config)}))}},include:{triggers:!0}});return await t.workflow.update({where:{id:e},data:{activeVersionId:i}}),n});return epD(e),n}async setEnabled(e,t){let A=await am(),r=await A.workflow.findUnique({where:{id:e}});if(!r)throw Error("Workflow not found");if(t&&!r.activeVersionId)throw Error("Publish the workflow before enabling it");return await A.workflow.update({where:{id:e},data:{enabled:t}}),epD(e),this.get(e)}async setQuickAction(e){let t=await am(),A=[...new Set(e.repositoryIds.map(e=>e.trim()).filter(Boolean))],[r,i]=await Promise.all([t.workflow.findUnique({where:{id:e.id},select:{id:!0}}),t.codebaseRepository.count({where:{id:{in:A}}})]);if(!r)throw Error("Workflow not found");if(i!==A.length)throw Error("One or more repositories were not found");let n=e.quickActionIconKey.trim();if(!CQ.includes(e.kind))throw Error("Quick action kind is invalid");if("none"!==n&&!AV.includes(n))throw Error("Quick action icon is invalid");let a=e.quickActionButtonVariant.trim();if(!["default","outline","secondary","destructive"].includes(a))throw Error("Quick action button style is invalid");return await t.$transaction(async t=>{await t.workflow.update({where:{id:e.id},data:{quickActionKind:e.kind,quickActionIconKey:n,quickActionButtonVariant:a}}),await t.workflowQuickActionRepository.deleteMany({where:{workflowId:e.id}}),A.length&&await t.workflowQuickActionRepository.createMany({data:A.map(t=>({workflowId:e.id,repositoryId:t}))})}),epD(e.id),this.get(e.id)}async archive(e,t){let A=await am();return await A.workflow.update({where:{id:e},data:{archivedAt:t?new Date:null,...t?{enabled:!1}:{}}}),epD(e),this.get(e)}async delete(e){let t=await am();if(await t.workflowRun.count({where:{workflowId:e}}))throw Error("Archive workflows that have run history instead of deleting them");return await t.workflow.delete({where:{id:e}}),epD(e),!0}export(e,t){return this.exportInternal(e,t)}async exportInternal(e,t){let A,r=await this.get(e);if(!r)throw Error("Workflow not found");let i=t?r.versions.find(e=>e.id===t):null;if(t&&!i)throw Error("Workflow version not found");let n=wV(epm(i?.definitionJson??r.draftDefinitionJson));return{format:"aide.workflow.export",schemaVersion:1,exportedAt:new Date().toISOString(),workflow:{name:i?.name??r.name,description:i?.description??r.description,overlapPolicy:r.overlapPolicy,maxConcurrentRuns:r.maxConcurrentRuns,definition:(A=(e,t="")=>Array.isArray(e)?e.map(e=>A(e,t)):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,A(t,e)])):"string"==typeof e&&/(token|secret|password|passwd|private.?key|api.?key|authorization)/i.test(t)&&!/(credential.?id|credential.?ids)$/i.test(t)||"string"==typeof e&&/^(?:\/|[A-Za-z]:[\\/]|\\\\)/.test(e)&&/^(?:cwd|folder|path|directory)$/i.test(t)?null:e,wq.parse(A(n)))}}}async import(e){epQ("string"==typeof e.payload?e.payload:JSON.stringify(e.payload),"Workflow import",2097152);let t=epB("string"==typeof e.payload?JSON.parse(e.payload):e.payload,"Workflow import"),A="aide.workflow.export"===t.format,r=A?epB(t.workflow,"Exported workflow"):t,i=wV(A?r.definition:r);return this.create({name:e.name?.trim()||i.name,description:i.description,definition:{...i,name:e.name?.trim()||i.name},overlapPolicy:"string"==typeof r.overlapPolicy?r.overlapPolicy:"QUEUE",maxConcurrentRuns:"number"==typeof r.maxConcurrentRuns?r.maxConcurrentRuns:1})}async runs(e={}){let t=await am(),A=Math.min(Math.max(e.first??100,1),200),r=Number(e.search),i=e.archive?.toUpperCase()??"ACTIVE",n="ALL"===i?{}:"ARCHIVED"===i?{archivedAt:{not:null}}:{archivedAt:null},a=await t.workflowRun.findMany({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{},...e.status?{status:e.status.toUpperCase()}:{},...Number.isInteger(r)&&r>0?{displayNumber:r}:e.search?.trim()?{workflow:{name:{contains:e.search.trim()}}}:{}},include:{workflow:!0,version:!0,trigger:!0,_count:{select:{attempts:!0,events:!0}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:a.slice(0,A),nextCursor:a.length>A?a[A-1].id:null,totalCount:await t.workflowRun.count({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{}}})}}async archiveRuns(e,t){let A=await am(),r=[...new Set(e)],i=await A.workflowRun.updateMany({where:{id:{in:r}},data:{archivedAt:t?new Date:null}});for(let e of r)epk(e);return i.count}async deleteRuns(e){let t=await am(),A=[...new Set(e)];if(await t.workflowRun.count({where:{id:{in:A},status:{notIn:["SUCCEEDED","FAILED","CANCELLED"]}}}))throw Error("Cancel runs that have not finished before deleting them");let r=await t.workflowRun.deleteMany({where:{id:{in:A}}});for(let e of A)epk(e);return r.count}async run(e){return(await am()).workflowRun.findUnique({where:{id:e},include:{workflow:!0,version:!0,trigger:!0,parentRun:!0,childRuns:{orderBy:{createdAt:"asc"}},attempts:{orderBy:[{generation:"asc"},{nodeId:"asc"},{iterationKey:"asc"},{attempt:"asc"}],include:{waits:{orderBy:{createdAt:"asc"}},resourceLinks:{orderBy:{createdAt:"asc"}},questionBatches:{orderBy:{createdAt:"asc"},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}},checkpoints:{orderBy:{createdAt:"asc"}}}},waits:{orderBy:{createdAt:"asc"}},events:{orderBy:{sequence:"asc"}},resourceLinks:{orderBy:{createdAt:"asc"}}}})}async runEvents(e,t=-1,A=500){return(await am()).workflowRunEvent.findMany({where:{runId:e,sequence:{gt:t}},orderBy:{sequence:"asc"},take:Math.min(Math.max(A,1),1e3)})}async questionBatch(e){return(await am()).runQuestionBatch.findUnique({where:{id:e},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}})}async jobSecrets(e,t){if(!this.credentials||!this.agentControl)throw Error("Workflow credentials are unavailable");if(this.claimedSecretJobs.has(t))throw Error("Workflow job secrets were already claimed");let A=await this.agentControl.getJob(t);if(!A||A.agentId!==e||"workflow.terminal.run"!==A.kind||"RUNNING"!==A.status)throw Error("Workflow job is not eligible to claim secrets");let r=i5(epm(A.payloadJson)),i=new Set(Object.values(sN)),n=[];for(let e of r.credentialEnvironment){if(!i.has(e.credential.kind))throw Error("Workflow references an unsupported credential kind");let t=await this.credentials.getText(e.credential);if(null===t)throw Error(`Credential ${e.credential.id} is unavailable`);n.push({name:e.name,value:t})}return this.claimedSecretJobs.add(t),n}async workflowAgentContext(e){let t=await am(),A=CO(e,"worktree.id");if("string"==typeof A){let e=await t.worktree.findUnique({where:{id:A},include:{codebase:{include:{agent:!0}}}});if(!e)throw Error("Workflow worktree is unavailable");let r=JSON.parse(e.codebase.agent.capabilitiesJson);return{agentId:e.codebase.agentId,codebaseId:e.codebaseId,worktreeId:e.id,cwd:e.folder,capabilities:Array.isArray(r)?r.filter(e=>"string"==typeof e):[]}}let r=CO(e,"codebase.id");if("string"!=typeof r)throw Error("Workflow requires a codebase or worktree");let i=await t.codebase.findUnique({where:{id:r},include:{agent:!0}});if(!i)throw Error("Workflow codebase is unavailable");let n=JSON.parse(i.agent.capabilitiesJson);return{agentId:i.agentId,codebaseId:i.id,worktreeId:null,cwd:i.folder,capabilities:Array.isArray(n)?n.filter(e=>"string"==typeof e):[]}}async startTerminalJob(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await this.workflowAgentContext(e.sessionData);if(!t.capabilities.includes(iX))throw Error("The selected agent must be updated to run workflow terminal steps");let A={...e.node.config.environment&&"object"==typeof e.node.config.environment&&!Array.isArray(e.node.config.environment)?Object.fromEntries(Object.entries(e.node.config.environment).map(([e,t])=>[e,String(t)])):{},AIDE_TICKET_KEY:String(CO(e.sessionData,"ticket.key")??""),AIDE_TICKET_TITLE:String(CO(e.sessionData,"ticket.title")??""),AIDE_BRANCH:String(CO(e.sessionData,"worktree.branch")??""),AIDE_BASE_BRANCH:String(CO(e.sessionData,"worktree.baseBranch")??""),AIDE_WORKTREE_PATH:String(CO(e.sessionData,"worktree.path")??t.cwd),AIDE_CODEBASE_PATH:String(CO(e.sessionData,"codebase.folder")??t.cwd),AIDE_REPO_ORIGIN:String(CO(e.sessionData,"repo.displayOrigin")??"")},r=Array.isArray(e.node.config.credentials)?e.node.config.credentials:[],i=await this.agentControl.createJob({agentId:t.agentId,kind:iX,payload:{workflowRunId:e.run.id,stepAttemptId:e.attempt.id,stepId:e.node.id,codebaseId:t.codebaseId,worktreeId:t.worktreeId,cwd:t.cwd,script:epE(String(e.node.config.script??""),"Terminal script",1e6),interpreter:"NODE"===e.node.config.interpreter?"NODE":"SHELL",sessionData:e.sessionData,environment:A,credentialEnvironment:r},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:Number(e.node.config.timeoutSeconds??900),codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:i.id},links:[{kind:"AGENT_JOB",resourceId:i.id,label:"Workflow terminal job",url:`/jobs/${i.id}`}],wait:{kind:"AGENT_JOB",externalKey:i.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config,900)}}}async startCheckpointJob(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await this.workflowAgentContext(e.sessionData);if(!t.capabilities.includes(i0))throw Error("The selected agent must be updated to capture workflow checkpoints");let A=await this.agentControl.createJob({agentId:t.agentId,kind:i0,payload:{operation:"CAPTURE",workflowRunId:e.run.id,stepAttemptId:e.attempt.id,cwd:t.cwd,kind:String(e.node.config.kind??"STEP"),checkpoint:null,stash:!1},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:300,codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:A.id},links:[{kind:"AGENT_JOB",resourceId:A.id,label:"Workflow checkpoint job",url:`/jobs/${A.id}`}],wait:{kind:"AGENT_JOB",externalKey:A.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}}}async workflowAgentJobCompleted(e){if(e.kind===iX){let t=i5(epm(e.payloadJson));if("SUCCEEDED"!==e.status||!e.resultJson)return void await this.resolveExternalWait("AGENT_JOB",e.id,{jobId:e.id,status:e.status},e.error||`Workflow terminal job ${e.status.toLowerCase()}`);let A=epB(epm(e.resultJson),"Workflow terminal result");return void await this.resolveExternalWait("AGENT_JOB",e.id,{...A,jobId:e.id,stepAttemptId:t.stepAttemptId})}if(e.kind!==i0)return;let t=i3(epm(e.payloadJson));if("SUCCEEDED"!==e.status||!e.resultJson)return void await this.resolveExternalWait("AGENT_JOB",e.id,{jobId:e.id,status:e.status},e.error||`Workflow checkpoint job ${e.status.toLowerCase()}`);let A=epB(epm(e.resultJson),"Workflow checkpoint result"),r=null;if(A.checkpoint&&"object"==typeof A.checkpoint){let e=A.checkpoint,i=await am();r=(0,AB.randomUUID)(),await i.$transaction([i.runCheckpoint.create({data:{id:r,workflowStepAttemptId:t.stepAttemptId,kind:String(e.kind??t.kind),headSha:"string"==typeof e.headSha?e.headSha:null,branch:"string"==typeof e.branch?e.branch:null,upstreamSha:"string"==typeof e.upstreamSha?e.upstreamSha:null,indexTree:"string"==typeof e.indexTree?e.indexTree:null,worktreeTree:"string"==typeof e.worktreeTree?e.worktreeTree:null,refName:"string"==typeof e.refName?e.refName:null,manifestJson:"string"==typeof e.manifestJson?e.manifestJson:null,diffSummary:"string"==typeof e.diffSummary?e.diffSummary:null,diffPatch:"string"==typeof e.diffPatch?e.diffPatch:null,stashRef:"string"==typeof A.stashRef?A.stashRef:"string"==typeof e.stashRef?e.stashRef:null}}),i.workflowRunResourceLink.create({data:{id:(0,AB.randomUUID)(),runId:t.workflowRunId,attemptId:t.stepAttemptId,kind:"CHECKPOINT",resourceId:r,label:`${String(e.kind??t.kind)} checkpoint`}})])}await this.resolveExternalWait("AGENT_JOB",e.id,{...A,jobId:e.id,checkpointId:r})}async genericAgentJobCompleted(e){if(e.kind===iX||e.kind===i0)return;let t=e.resultJson?epB(epm(e.resultJson),"Agent job result"):{status:e.status};if("SUCCEEDED"===e.status){let A=await am(),r=t.worktree&&"object"==typeof t.worktree&&!Array.isArray(t.worktree)?t.worktree:null,i=r&&"string"==typeof r.gitDirectory?r.gitDirectory:null,n=e.codebaseId?await A.worktree.findFirst({where:{codebaseId:e.codebaseId,...e.worktreeId?{id:e.worktreeId}:i?{gitDirectory:i}:{id:"__missing__"}},include:{codebase:{include:{repository:!0,agent:!0}}}}):null,a=n?.codebase??(e.codebaseId?await A.codebase.findUnique({where:{id:e.codebaseId},include:{repository:!0,agent:!0}}):null),s={};if(n&&this.worktrees?.workflowSessionDataForWorktree)try{s=await this.worktrees.workflowSessionDataForWorktree(n.id,{includeMissing:!0})}catch{}if(a&&!s.codebase&&(s.repo={id:a.repository.id,name:a.repository.name,url:a.repository.displayOrigin,canonicalOrigin:a.repository.canonicalOrigin,displayOrigin:a.repository.displayOrigin,defaultBranch:a.defaultBranch},s.codebase={id:a.id,folder:a.folder,agentId:a.agentId,branch:a.defaultBranch,headSha:a.headSha},s.agent={id:a.agent.id,name:a.agent.name,hostname:a.agent.hostname}),n&&!s.worktree&&(s.worktree={id:n.id,path:n.folder,branch:n.branch,baseBranch:n.baseBranchOverride??n.codebase.defaultBranch,headSha:n.headSha,pushStatus:n.pushStatus,ahead:n.ahead,behind:n.behind,baseBehind:n.baseBehind,dirty:n.hasStagedChanges||n.hasUnstagedChanges}),Object.keys(s).length){let e=t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)?t.sessionPatch:{};t={...t,sessionPatch:CF(e,s)}}}await this.resolveExternalWait("AGENT_JOB",e.id,{...t,jobId:e.id,status:e.status},"SUCCEEDED"===e.status?null:e.error||`Agent job ${e.status.toLowerCase()}`)}async restoreCheckpointWithAgent(e,t){if(!this.agentControl)throw Error("Agent control is unavailable");let A=await am(),r=await A.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow checkpoint not found");let n=await this.workflowAgentContext(CJ(i.run.sessionDataJson)),a=await this.agentControl.createJob({agentId:n.agentId,kind:i0,payload:{operation:"RESTORE",workflowRunId:i.runId,stepAttemptId:i.id,cwd:n.cwd,kind:"REPLAY_RESTORE",checkpoint:{headSha:r.headSha,branch:r.branch,upstreamSha:r.upstreamSha,indexTree:r.indexTree,worktreeTree:r.worktreeTree,refName:r.refName},stash:t.stash},idempotencyKey:`workflow:restore:${e}:${(0,AB.randomUUID)()}`,timeoutSeconds:300,codebaseId:n.codebaseId,worktreeId:n.worktreeId,visibility:"SYSTEM"}),s=Date.now()+3e5;for(;Date.now()<s;){let e=await this.agentControl.getJob(a.id);if(!e)throw Error("Workflow restore job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(e.status)){if("SUCCEEDED"!==e.status)throw Error(e.error||`Workflow restore job ${e.status.toLowerCase()}`);return}await new Promise(e=>setTimeout(e,250))}throw await this.agentControl.cancelJob(a.id),Error("Workflow restore job timed out")}async compareCheckpointWithAgent(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await am(),A=await t.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),r=A?.workflowStepAttempt;if(!A||!r)throw Error("Workflow checkpoint not found");let i=await this.workflowAgentContext(CJ(r.run.sessionDataJson)),n=await this.agentControl.createJob({agentId:i.agentId,kind:i0,payload:{operation:"COMPARE",workflowRunId:r.runId,stepAttemptId:r.id,cwd:i.cwd,kind:"REPLAY_PREVIEW",checkpoint:{headSha:A.headSha,branch:A.branch,upstreamSha:A.upstreamSha,indexTree:A.indexTree,worktreeTree:A.worktreeTree,refName:A.refName},stash:!1},idempotencyKey:`workflow:compare:${e}:${(0,AB.randomUUID)()}`,timeoutSeconds:60,codebaseId:i.codebaseId,worktreeId:i.worktreeId,visibility:"SYSTEM"}),a=Date.now()+6e4;for(;Date.now()<a;){let e=await this.agentControl.getJob(n.id);if(!e)throw Error("Workflow comparison job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(e.status)){if("SUCCEEDED"!==e.status||!e.resultJson)throw Error(e.error||`Workflow comparison job ${e.status.toLowerCase()}`);let t=epB(epm(e.resultJson),"Workflow comparison result");return epB(t.comparison,"Git checkpoint comparison")}await new Promise(e=>setTimeout(e,250))}throw await this.agentControl.cancelJob(n.id),Error("Workflow comparison job timed out")}async runsForResource(e,t){let A=await am(),r=await A.workflowRunResourceLink.findMany({where:{kind:e.trim().toUpperCase(),resourceId:t.trim()},select:{runId:!0},distinct:["runId"],orderBy:{createdAt:"desc"}});return A.workflowRun.findMany({where:{id:{in:r.map(({runId:e})=>e)}},include:{workflow:!0,version:!0,trigger:!0,attempts:{orderBy:[{generation:"asc"},{createdAt:"asc"}],include:{resourceLinks:{orderBy:{createdAt:"asc"}},questionBatches:{orderBy:{createdAt:"asc"},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}}}},resourceLinks:{orderBy:{createdAt:"asc"}}},orderBy:{createdAt:"desc"}})}async acceptingResource(e){let t=e.trim().toUpperCase(),A=await am();return(await A.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:!0},orderBy:{name:"asc"}})).filter(e=>!!e.activeVersion&&wV(epm(e.activeVersion.definitionJson)).triggers.some(e=>CS(e.kind)&&wE(e.config)===t))}async quickActions(e){let t=await am();if(!CQ.includes(e.kind))throw Error("Quick action kind is invalid");let A=e.resourceKind.trim().toUpperCase(),r=e.repositoryId?.trim()||null;return(await t.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null},quickActionKind:e.kind,OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:r??""}}}]},include:{activeVersion:!0},orderBy:[{name:"asc"},{id:"asc"}]})).filter(e=>!!e.activeVersion&&wV(epm(e.activeVersion.definitionJson)).triggers.some(e=>CS(e.kind)&&wE(e.config)===A))}async recordEvent(e){return this.events.record(e)}async hydrateResourceSessionData(e,t,A){let r=e?.toUpperCase()??null,i=await am(),n={},a=null;if("CODEBASE"===r&&t){let e=await i.codebase.findUnique({where:{id:t},select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},repository:{select:{id:!0,name:!0,canonicalOrigin:!0,displayOrigin:!0}}}});e&&(n=epI(e))}if("BUILD"===r&&t){let e=await i.build.findUnique({where:{id:t},select:{id:!0,status:!0,action:!0,error:!0,artifactDirectory:!0,worktreeId:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},codebase:{select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},repository:{select:{id:!0,name:!0,canonicalOrigin:!0,displayOrigin:!0}}}},artifacts:{select:{id:!0,kind:!0,relativePath:!0,sizeBytes:!0,checksum:!0}},reports:{where:{status:"READY"},select:{kind:!0,summaryJson:!0}}}});if(e){a=e.worktreeId;let t=t=>{let A=e.reports.find(e=>e.kind===t);if(A)try{return CJ(A.summaryJson)}catch{return}},A=t("TEST_RESULTS"),r=t("CODE_COVERAGE");n=CF(e.codebase?epI(e.codebase):e.agent?epf(e.agent):{},{build:{id:e.id,status:e.status,action:e.action,error:e.error,artifactDirectory:e.artifactDirectory,artifacts:e.artifacts,...A?{testSummary:A}:{},...r?{coverageSummary:r}:{}}})}}if("AGENT_RUN"===r&&t){let e=await i.agentRun.findUnique({where:{id:t},select:{id:!0,kind:!0,status:!0,phase:!0,origin:!0,provider:!0,model:!0,branch:!0,finalOutput:!0,error:!0,jiraIssueKey:!0,worktreeId:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,toolCallCount:!0,estimatedCost:!0}});e&&(a=e.worktreeId,n=CF(e.agent?epf(e.agent):{},{run:{id:e.id,kind:e.kind,status:e.status,phase:e.phase,origin:e.origin,provider:e.provider,model:e.model,branch:e.branch,finalOutput:e.finalOutput,error:e.error,usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,reasoningTokens:e.reasoningTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,toolCallCount:e.toolCallCount,estimatedCost:e.estimatedCost}},...e.jiraIssueKey?{ticket:{key:e.jiraIssueKey}}:{}}))}if("PULL_REQUEST"===r&&t&&this.worktrees?.workflowSessionDataForPullRequest){let e=/^([^/]+)\/([^#]+)#([1-9]\d*)$/.exec(t);e&&(n=CF(n,await this.worktrees.workflowSessionDataForPullRequest(e[1],e[2],Number(e[3]))))}if("JIRA_TICKET"===r&&t&&this.jiraService)try{let e=await this.jiraService.ticket(t),A=e.comments.at(-1)??null;n=CF(n,{ticket:{...e,title:e.summary,type:e.issueType,url:e.jiraUrl},...A?{comment:{id:A.id,body:A.content?.rawText??"",author:A.author}}:{}})}catch{}let s=CO(A,"worktree.id"),o="WORKTREE"===r?t:"GITHUB_PIPELINE"===r||"GITHUB_JOB"===r?"string"==typeof s?s:null:a;if(o&&this.worktrees)if(this.worktrees.workflowSessionDataForWorktree)n=CF(await this.worktrees.workflowSessionDataForWorktree(o),n);else{let e=await this.worktrees.ticketKeyForWorktree(o);e&&(n=CF({ticket:{key:e}},n))}let l=CO(A,"pipeline.pullRequests");!CO(n,"pr")&&!CO(A,"pr")&&Array.isArray(l)&&l[0]&&"object"==typeof l[0]&&!Array.isArray(l[0])&&(n=CF(n,{pr:l[0]}));let c=CO(A,"pr.jiraKey")??CO(A,"pipeline.jiraKey");return"string"!=typeof CO(n,"ticket.key")&&"string"==typeof c&&c.trim()&&(n=CF(n,{ticket:{key:c}})),CF(n,A)}async trigger(e){let t=await am(),A=await t.workflow.findUnique({where:{id:e.workflowId},include:{activeVersion:{include:{triggers:!0}}}});if(!A?.activeVersion)throw Error("Published workflow not found");if(!A.enabled||A.archivedAt)throw Error("Workflow is paused");let r=e.resourceKind?.toUpperCase()??null,i=e.choice?.trim()||null,{triggers:n}=A.activeVersion,a=r?"RESOURCE_MANUAL":"MANUAL",s=r?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE",o=e=>n.find(t=>t.kind===e&&(!r||wE(epB(epm(t.configJson),"Trigger configuration"))===r))??null,l=o(s),c=o(a),u=i?l:c;if(i&&!l)throw Error(r?`No resource trigger offers choices for ${r} resources`:"This workflow has no manual trigger with choices");if(!i&&!c&&l){let e=wf(epB(epm(l.configJson),"Trigger configuration"));throw Error(`This workflow needs a choice: ${e.map(({key:e})=>e).join(", ")}`)}if(r&&!u)throw Error(`No resource trigger accepts ${e.resourceKind} resources`);if(i&&l&&!wf(epB(epm(l.configJson),"Trigger configuration")).some(({key:e})=>e===i))throw Error(`Unknown choice ${i}`);let d=e.subjectKey?.trim()||(r&&e.resourceId?`${r}:${e.resourceId}`:`manual:${(0,AB.randomUUID)()}`),h={sessionData:await this.hydrateResourceSessionData(e.resourceKind,e.resourceId,e.sessionData??{}),resourceKind:e.resourceKind??null,resourceId:e.resourceId??null,choice:i,manual:!0},p=await this.createRunForTrigger(A,A.activeVersion,u,null,i?s:a,d,h,`manual:${A.id}:${(0,AB.randomUUID)()}`);return epk(p.id),this.run(p.id)}async createRunForTrigger(e,t,A,r,i,n,a,s,o=null,l=null){return(await am()).$transaction(async c=>{if(l){let e=await c.workflowTriggerDelivery.findUnique({where:{id:l},include:{run:!0}});if(e)return e.run}let u=async e=>(l&&await c.workflowTriggerDelivery.create({data:{id:l,runId:e.id}}),e),d=await c.workflowRun.findUnique({where:{idempotencyKey:s}});if(d)return u(d);if("COALESCE_LATEST"===e.overlapPolicy){let t=await c.workflowRun.findFirst({where:{workflowId:e.id,triggerSubjectKey:n,status:"QUEUED"},orderBy:{queuedAt:"desc"}});if(t)return u(await c.workflowRun.update({where:{id:t.id},data:{triggerId:A?.id??null,triggerEventId:r,triggerKind:i,triggerPayloadJson:JSON.stringify(a),queuedAt:new Date}}))}let h=(0,AB.randomUUID)(),p=epB(a.sessionData??{},"Session data"),g=JSON.stringify(CF({workflow:{id:e.id,name:t.name,runId:h,startedAt:null,trigger:{id:A?.nodeId??null,kind:i,subjectKey:n,choice:"string"==typeof a.choice?a.choice:null}},steps:{}},p));epQ(g,"Workflow session data",2097152);let m=await c.workflowRun.create({data:{id:h,displayNumber:await epv(c),workflowId:e.id,versionId:t.id,triggerId:A?.id??null,triggerEventId:r,parentRunId:o,idempotencyKey:s,triggerKind:i,triggerSubjectKey:n,triggerPayloadJson:JSON.stringify(a),sessionDataJson:g}}),f=function(e,t){let A=e.trim().toUpperCase(),r=ehD(t.sessionData);if(CS(A)){let e=t.resourceKind,A="string"==typeof e?e.toUpperCase():null,i="GITHUB_JOB"===A?ehk(r,"job","url"):"GITHUB_PIPELINE"===A?ehk(r,"pipeline","url"):null;return"string"==typeof e?ehS(e.toUpperCase(),t.resourceId,{url:"string"==typeof i?i:null,metadata:"AGENT_RUN"===e.toUpperCase()?{runKind:ehk(r,"run","kind")}:null}):null}if(ehb.has(A))return ehS("JIRA_TICKET",ehk(r,"ticket","key"));if(ehv.has(A))return ehS("AGENT_RUN",ehk(r,"run","id"),{metadata:{runKind:ehk(r,"run","kind")}});if(ehR.has(A))return ehS("BUILD",ehk(r,"build","id"));if(ehT.has(A))return ehS("WORKTREE",ehk(r,"worktree","id"));if("CODEBASE_REMOTE_BRANCH"===A||"CODEBASE_SYNC_STATE_CHANGED"===A||"CODEBASE_OPERATION_FAILED"===A)return ehS("CODEBASE",ehk(r,"codebase","id"));if("COMMAND_RUN_RESULT"===A||"COMMAND_OUTPUT_MATCH"===A)return ehS("COMMAND_RUN",ehk(r,"command","id"));if("SKILL_SYNC_RESULT"===A||"SKILL_SYNC_CONFLICT"===A)return ehS("SKILL_SYNC",ehk(r,"skillSync","id"));if("IOS_DEVICE_ENROLLED"===A||"IOS_DEVICE_REGISTRATION_RESULT"===A)return ehS("IOS_DEVICE",ehk(r,"device","id"));if("SIGNING_OPERATION_RESULT"===A||"SIGNING_ASSET_EXPIRING"===A)return ehS("SIGNING_PROFILE",ehk(r,"signingProfile","id"));if("PUSH_NOTIFICATION_RESULT"===A)return ehS("PUSH_NOTIFICATION_BATCH",ehk(r,"pushBatch","id"));if("BUILD_DATA_THRESHOLD"===A||"BUILD_DATA_CLEANUP_RESULT"===A)return ehS("BUILD_DATA_COLLECTION",ehk(r,"buildData","id"));if("AGENT_JOB_FAILED"===A)return ehS("AGENT_JOB",ehk(ehD(r.steps),"trigger","id"));if("AGENT_CONNECTION"===A||"AGENT_DISK_REPORT"===A||"AGENT_DISK_THRESHOLD"===A||"AGENT_DISK_STATE_CHANGED"===A||"AGENT_DISK_CLEANUP_RESULT"===A||"CCUSAGE_THRESHOLD"===A)return ehS("AGENT",ehk(r,"agent","id")??ehk(r,"codebase","agentId"));if("WORKFLOW_FINISHED"===A)return ehS("WORKFLOW_RUN",ehk(t,"run","id"));if(ehM.has(A)){let e=function(e){if("string"!=typeof e)return null;let t=e.trim(),A=t.match(/(?:https?:\/\/|ssh:\/\/git@|git@)?github\.com[/:]([^/]+)\/([^/#]+?)(?:\.git)?$/i)??t.match(/^([^/:]+)\/([^/#]+?)(?:\.git)?$/);return A?.[1]&&A[2]?{owner:A[1],repository:A[2]}:null}(ehk(r,"repo","displayOrigin")),t=Number(ehk(r,"pr","number"));return e&&Number.isInteger(t)&&t>0?ehS("PULL_REQUEST",ehB(e.owner,e.repository,t)):null}if(ehN.has(A)){let e=ehk(r,"pipeline","url");return ehS("GITHUB_WORKFLOW_RUN",ehk(r,"pipeline","runId"),{url:"string"==typeof e?e:null})}return"GITHUB_PUSH_DEFAULT"===A?ehS("CODEBASE_REPOSITORY",ehk(r,"repo","id")):null}(i,a);return f&&await c.workflowRunResourceLink.create({data:{id:(0,AB.randomUUID)(),runId:m.id,kind:f.kind.toUpperCase(),resourceId:f.resourceId,label:f.label??null,url:f.url??null,metadataJson:f.metadata?JSON.stringify(f.metadata):null}}),u(m)})}async processTriggerEvents(){let e=await am(),t=await e.workflowTriggerEvent.findMany({where:{status:"PENDING"},orderBy:{receivedAt:"asc"},take:50});if(!t.length)return;let A=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:!0}}}});for(let a of t)try{let t=epB(epm(a.payloadJson),"Trigger payload");for(let s of A)if(s.activeVersion)for(let A of s.activeVersion.triggers.filter(({kind:e})=>e===a.kind)){var r,i,n;if(t.workflowCorrelation&&"object"==typeof t.workflowCorrelation&&t.workflowCorrelation.workflowId===s.id)continue;let o=(r=a.dedupeKey,i=s.id,n=A.nodeId,(0,AB.createHash)("sha256").update(JSON.stringify([r,i,n])).digest("hex"));if(await e.workflowTriggerDelivery.findUnique({where:{id:o},select:{id:!0}})||!await this.triggerMatches(A,a.subjectKey,t))continue;let l=await this.createRunForTrigger({...s,activeVersion:s.activeVersion},s.activeVersion,A,a.id,a.kind,a.subjectKey,t,o,null,o);epk(l.id)}await e.workflowTriggerEvent.delete({where:{id:a.id}})}catch(t){await e.workflowTriggerEvent.update({where:{id:a.id},data:{status:"FAILED",processedAt:new Date,error:t instanceof Error?t.message:String(t)}})}}async triggerMatches(e,t,A){let r,i=C_(epB(epm(e.configJson),"Trigger configuration"),A),n=null;if(void 0!==A.cursorValue&&("string"!=typeof i.thresholdPath||"string"!=typeof i.thresholdOperator)){let i=await am(),a=await i.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});if(n=epw(r=a?.cursorJson?epB(epm(a.cursorJson),"Trigger cursor").value:void 0)!==epw(A.cursorValue),"WORKTREE_CLEAN"===e.kind&&(n=!0===r&&!1===A.cursorValue),"JIRA_SPRINT_STARTED"===e.kind||"JIRA_SPRINT_ENDED"===e.kind){let e=Array.isArray(r)?r:null,t=Array.isArray(A.cursorValue)?A.cursorValue:null;n=null!==e&&null!==t&&t.some(t=>!e.some(e=>epw(e)===epw(t)))}await i.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,AB.randomUUID)(),triggerId:e.id,subjectKey:t,cursorJson:JSON.stringify({value:A.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}},update:{cursorJson:JSON.stringify({value:A.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}}})}if("GITHUB_ISSUE_COMMAND"===e.kind){let e=CO(A,"comment.author.login"),t=CO(A,"comment.body"),r=Array.isArray(i.allowedLogins)?i.allowedLogins:[];if("string"!=typeof e||!r.includes(e)||"string"!=typeof t||"string"!=typeof i.commandPattern||!new RegExp(i.commandPattern).test(t))return!1}if("COMMAND_OUTPUT_MATCH"===e.kind){let e=CO(A,"output.data");if("string"!=typeof e||"string"!=typeof i.outputPattern||!new RegExp(i.outputPattern).test(e))return!1}if("WORKTREE_CONFLICT"===e.kind&&!0!==CO(A,"worktree.conflicted")||"WORKTREE_MISSING"===e.kind&&null==CO(A,"worktree.missingAt")||"WORKTREE_DIVERGED"===e.kind&&"DIVERGED"!==CO(A,"worktree.pushStatus"))return!1;if(i.filters&&"object"==typeof i.filters)for(let[e,t]of Object.entries(i.filters)){let r=CO(A,e);if(Array.isArray(t)){if(!t.some(e=>epw(e)===epw(r)))return!1}else if(epw(t)!==epw(r))return!1}if("string"==typeof i.thresholdPath&&"string"==typeof i.thresholdOperator){let r=CP({op:i.thresholdOperator,left:{source:"SESSION",path:i.thresholdPath},right:i.thresholdValue},A),n=await am(),a=await n.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});return await n.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,AB.randomUUID)(),triggerId:e.id,subjectKey:t,lastMatched:r,cursorJson:JSON.stringify({value:CO(A,i.thresholdPath)}),...r?{lastFiredAt:new Date}:{}},update:{lastMatched:r,cursorJson:JSON.stringify({value:CO(A,i.thresholdPath)}),...r&&!a?.lastMatched?{lastFiredAt:new Date}:{}}}),r&&!a?.lastMatched}return n??!0}async processSchedules(){let e=await am(),t=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:{where:{kind:"SCHEDULE"},include:{states:!0}}}}}}),A=new Date;for(let r of t)for(let t of r.activeVersion?.triggers??[]){let i=epB(epm(t.configJson),"Schedule configuration"),n=Number(i.cadenceSeconds);if(!Number.isInteger(n)||n<1)continue;let a=r.id,s=t.states.find(e=>e.subjectKey===a);if(!s){let r="string"==typeof i.firstRunAt?new Date(i.firstRunAt):null,o=r&&Number.isFinite(r.getTime())?r:new Date(A.getTime()+1e3*n);s=await e.workflowTriggerState.create({data:{id:(0,AB.randomUUID)(),triggerId:t.id,subjectKey:a,nextScheduledAt:o}})}if(!s.nextScheduledAt||s.nextScheduledAt>A)continue;let o=s.nextScheduledAt,l=new Date(Math.max(A.getTime(),o.getTime())+1e3*n);await e.workflowTriggerState.update({where:{id:s.id},data:{lastFiredAt:A,nextScheduledAt:l}}),await this.events.record({kind:"SCHEDULE",subjectKey:a,dedupeKey:`schedule:${t.id}:${o.toISOString()}`,payload:{sessionData:{},scheduledFor:o.toISOString(),cadenceSeconds:n}})}}async lifecycle(e,t){let A=await am(),r=await A.workflowRun.findUnique({where:{id:e}});if(!r)throw Error("Workflow run not found");if("PAUSE"===t){if(!new Set(["RUNNING","WAITING","BLOCKED"]).has(r.status))throw Error("Only an active workflow run can be paused");if(!await A.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{in:["RUNNING","WAITING","BLOCKED"]}},data:{status:"PAUSING",phase:"DRAINING"}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}}),!0)))return this.run(e);await this.controlLinkedAgentRuns(e,"PAUSE"),await this.appendEvent(e,null,"RUN_PAUSING","Workflow pause requested")}else if("RESUME"===t){if("PAUSED"!==r.status)throw Error("Only a paused workflow run can be resumed");if(!(await A.workflowRun.updateMany({where:{id:e,status:"PAUSED"},data:{status:"RUNNING",phase:"SCHEDULING",pausedAt:null}})).count)return this.run(e);await this.controlLinkedAgentRuns(e,"CONTINUE"),await this.appendEvent(e,null,"RUN_RESUMED","Workflow resumed")}else{if(eph.has(r.status))return this.run(e);for(let[t,r]of(await this.controlLinkedAgentRuns(e,"CANCEL"),await this.cancelWaitingCommandRuns(e),this.activeExecutions)){let i=await A.workflowStepAttempt.findUnique({where:{id:t},select:{runId:!0}});i?.runId===e&&r.abort()}if(!await A.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{notIn:[...eph]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:{notIn:[...epp]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date,claimOwner:null,claimExpiresAt:null}}),await t.workflowWait.updateMany({where:{runId:e,status:"PENDING"},data:{status:"CANCELLED",resolvedAt:new Date}}),await t.workflowResourceLease.deleteMany({where:{runId:e}}),!0)))return this.run(e);await this.appendEvent(e,null,"RUN_CANCELLED","Workflow cancelled")}return epk(e),this.run(e)}async repairRunData(e,t){let A=epB(t,"Session data patch"),r=await am(),i=await r.workflowRun.findUnique({where:{id:e}});if(!i)throw Error("Workflow run not found");if(!new Set(["BLOCKED","PAUSED"]).has(i.status))throw Error("Only blocked or paused workflows accept repair data");let n=CJ(i.sessionDataJson),a=CO(n,"workflow"),s=CF(n,A);a&&"object"==typeof a&&(s=CU(s,"workflow",a));let o=JSON.stringify(s);return epQ(o,"Workflow session data",2097152),await r.$transaction([r.workflowRun.update({where:{id:e},data:{sessionDataJson:o,sessionRevision:{increment:1},status:"PAUSED"===i.status?"PAUSED":"RUNNING",phase:"PAUSED"===i.status?"PAUSED":"SCHEDULING",blockedReason:null}}),r.workflowStepAttempt.updateMany({where:{runId:e,status:"BLOCKED"},data:{status:"PENDING",phase:"PENDING",error:null}})]),await this.appendEvent(e,null,"RUN_DATA_REPAIRED","Workflow session data repaired"),epk(e),this.run(e)}async answerQuestion(e,t){let A=await am(),r=await A.$transaction(async A=>{let r=await A.runQuestionBatch.findUnique({where:{id:e},include:{workflowStepAttempt:!0,answerRevisions:!0}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow question not found");if("PENDING"!==r.status)throw Error("Question was already answered");return await A.runAnswerRevision.create({data:{id:(0,AB.randomUUID)(),batchId:e,revision:r.answerRevisions.length,answersJson:JSON.stringify(t)}}),await A.runQuestionBatch.update({where:{id:e},data:{status:"ANSWERED",answeredAt:new Date}}),await A.workflowWait.updateMany({where:{attemptId:i.id,status:"PENDING",kind:"HUMAN"},data:{status:"RESOLVED",resultJson:JSON.stringify({answers:t}),resolvedAt:new Date}}),i});return await this.completeWaitingAttempt(r.id,{answers:t}),aE.publish(epu(r.runId),{workflowQuestionChanged:{id:e,runId:r.runId}}),this.run(r.runId)}async tick(){if(!this.ticking){this.ticking=!0;try{await this.recoverExpiredClaims(),await this.processSchedules(),await this.processTriggerEvents(),await this.events.maintain(),await this.resolveDueWaits(),await this.startQueuedRuns();let e=await am();for(let{id:t}of(await e.workflowRun.findMany({where:{status:{in:["RUNNING","WAITING","PAUSING"]}},select:{id:!0},orderBy:{updatedAt:"asc"},take:100})))await this.progressRun(t);await this.dispatchReadyAttempts()}finally{this.ticking=!1}}}async recoverExpiredClaims(){let e=await am();for(let t of(await e.workflowStepAttempt.findMany({where:{status:"RUNNING",claimExpiresAt:{lt:new Date}},include:{run:!0},take:100})))await e.$transaction([e.workflowStepAttempt.update({where:{id:t.id},data:{status:"BLOCKED",phase:"RECOVERY_BLOCKED",error:"The workflow worker stopped while this step was running; verify external state before retrying.",claimOwner:null,claimExpiresAt:null}}),e.workflowRun.update({where:{id:t.runId},data:{status:"BLOCKED",phase:"RECOVERY_BLOCKED",blockedReason:`Step ${t.nodeId} needs recovery review`}}),e.workflowResourceLease.deleteMany({where:{attemptId:t.id}})]),await this.appendEvent(t.runId,t.id,"STEP_RECOVERY_BLOCKED","Step needs recovery review after its worker lease expired"),await this.notifyRun(t.runId,"WORKFLOW_RECOVERY_PAUSED","Workflow paused during recovery","An interrupted step requires external-state verification before replay.",`recovery:${t.id}`),epk(t.runId)}async startQueuedRuns(){let e=await am();for(let t of(await e.workflowRun.findMany({where:{status:"QUEUED"},include:{workflow:!0,version:!0},orderBy:{queuedAt:"asc"},take:50}))){let A="CONCURRENT"===t.workflow.overlapPolicy?t.workflow.maxConcurrentRuns:1;if(await e.workflowRun.count({where:{workflowId:t.workflowId,id:{not:t.id},status:{in:epd.filter(e=>"QUEUED"!==e)}}})>=A)continue;let r=wV(epm(t.version.definitionJson)),i=new Date,n=CU(CJ(t.sessionDataJson),"workflow.startedAt",i.toISOString());await e.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:t.id,status:"QUEUED"},data:{status:"RUNNING",phase:"SCHEDULING",startedAt:i,sessionDataJson:JSON.stringify(n),sessionRevision:{increment:1}}})).count&&(await e.workflowStepAttempt.createMany({data:r.nodes.map(e=>({id:(0,AB.randomUUID)(),runId:t.id,nodeId:e.id,kind:e.kind,generation:t.generation,iterationKey:"",attempt:0,requiredPathsJson:JSON.stringify(epS(e)),providedPathsJson:JSON.stringify(epb(e)),idempotencyKey:`${t.id}:${e.id}:${t.generation}::0`}))}),!0))&&(await this.appendEvent(t.id,null,"RUN_STARTED","Workflow started"),epk(t.id))}}selectedTrigger(e,t){let A=e.trigger?.nodeId??t.triggers.find(({kind:t})=>t===e.triggerKind)?.id??null;if(!Ck(e.triggerKind))return{id:A,choice:null};let r=epB(epm(e.triggerPayloadJson),"Trigger payload");return{id:A,choice:"string"==typeof r.choice?r.choice:null}}attemptOutput(e){if(!e.outputJson)return{};let t=epm(e.outputJson);return t&&"object"==typeof t&&!Array.isArray(t)?t:{value:t}}edgeState(e,t,A,r){if(!r.has(e.source))return e.source!==t.id||t.choice&&e.sourceHandle!==t.choice?"INACTIVE":"ACTIVE";let i=A.get(e.source);if(!i||!epp.has(i.status))return"PENDING";if(new Set(["SKIPPED","CANCELLED","SUPERSEDED"]).has(i.status))return"INACTIVE";let n=r.get(e.source);if("FAILED"===i.status)return"failure"===e.sourceHandle||"catch"===e.sourceHandle||"CONTINUE"===n.failurePolicy&&"success"===e.sourceHandle?"ACTIVE":"INACTIVE";let a=this.attemptOutput(i).selectedHandles;return a?.length?a.includes(e.sourceHandle)?"ACTIVE":"INACTIVE":"success"===e.sourceHandle||"output"===e.sourceHandle?"ACTIVE":"INACTIVE"}async progressRun(e){let t=await am(),A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}});if(!A||eph.has(A.status))return;if("PAUSING"===A.status){await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}});let r=new Set(["AGENT_JOB","BUILD","SKILL_RUN","WORKTREE_MOVE","GITHUB_CHECKS"]),i=new Set(A.waits.filter(({status:e,kind:t})=>"PENDING"===e&&r.has(t)).map(({attemptId:e})=>e));!A.attempts.some(({id:e,status:t})=>"RUNNING"===t||"WAITING"===t&&i.has(e))&&(await t.workflowRun.updateMany({where:{id:e,status:"PAUSING"},data:{status:"PAUSED",phase:"PAUSED",pausedAt:new Date}})).count&&(await this.appendEvent(e,null,"RUN_PAUSED","Workflow paused"),epk(e));return}if(!new Set(["RUNNING","WAITING"]).has(A.status))return;let r=wV(epm(A.version.definitionJson)),i=new Map(r.nodes.map(e=>[e.id,e])),n=new Map;for(let e of r.edges)n.set(e.target,[...n.get(e.target)??[],e]);let a=!0;for(;a;){if(a=!1,!(A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=A.attempts.filter(({generation:e,supersededAt:t})=>e===A.generation&&!t),o=new Map;for(let e of s){let t=`${e.nodeId}:${e.iterationKey}`,A=o.get(t);(!A||A.attempt<e.attempt)&&o.set(t,e)}let l=new Map([...o.values()].filter(({iterationKey:e})=>!e).map(e=>[e.nodeId,e])),c=this.selectedTrigger(A,r);for(let e of r.nodes){let A=l.get(e.id);if(!A||"PENDING"!==A.status)continue;let s=r.nodes.find(t=>"CONTROL_FOR_EACH"===t.kind&&t.config.joinNodeId===e.id);if(s){let e=l.get(s.id);if(!e||!epp.has(e.status)||[...o.values()].filter(({iterationKey:e})=>!!e).some(({status:e})=>!epp.has(e)))continue;await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"ITERATIONS_JOINED"}}),a=!0;continue}let u=n.get(e.id)??[];if(!u.length)continue;let d=u.map(e=>this.edgeState(e,c,l,i)),h=d.filter(e=>"ACTIVE"===e).length,p=d.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===e.kind&&"ANY"===e.config.mode?"ANY":"ALL")?h>0:0===p&&h>0)?(await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"READY"}}),a=!0):0===p&&0===h&&(await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"SKIPPED",phase:"INACTIVE_BRANCH",finishedAt:new Date}}),a=!0)}await this.progressIterationAttempts(r,A,c,i,n,o,l)&&(a=!0)}if(!(A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=new Map;for(let e of A.attempts.filter(({generation:e,supersededAt:t})=>e===A.generation&&!t)){let t=`${e.nodeId}:${e.iterationKey}`,A=s.get(t);(!A||A.attempt<e.attempt)&&s.set(t,e)}let o=[...s.values()],l=A.waits.some(({status:e})=>"PENDING"===e),c=o.some(({status:e})=>!epp.has(e));if(l||c){let r=l?"WAITING":"RUNNING";A.status!==r&&(await t.workflowRun.updateMany({where:{id:e,status:{in:[...epg]}},data:{status:r,phase:l?"WAITING":"SCHEDULING"}})).count&&epk(e);return}let u=wV(epm(A.version.definitionJson)),d=o.find(e=>{if("FAILED"!==e.status)return!1;let t=u.nodes.find(({id:t})=>t===e.nodeId);return!!t&&"CONTINUE"!==t.failurePolicy&&!u.edges.some(e=>e.source===t.id&&new Set(["failure","catch"]).has(e.sourceHandle))});await this.finishRun(A,d?"FAILED":"SUCCEEDED",d?.error??null)}async finishRun(e,t,A){let r=await am();await r.$transaction(async r=>!!(await r.workflowRun.updateMany({where:{id:e.id,status:{in:[...epg]}},data:{status:t,phase:t,error:A,finishedAt:new Date}})).count&&(await r.workflowResourceLease.deleteMany({where:{runId:e.id}}),!0))&&(await this.appendEvent(e.id,null,`RUN_${t}`,"SUCCEEDED"===t?"Workflow completed":"Workflow failed",A?{error:A}:null),await this.resolveExternalWait("WORKFLOW_RUN",e.id,{status:t,runId:e.id},"FAILED"===t?A||"Sub-workflow failed":null),await this.events.record({kind:"WORKFLOW_FINISHED",subjectKey:e.workflowId,dedupeKey:`workflow-finished:${e.id}`,payload:{sessionData:CJ(e.sessionDataJson),run:{id:e.id,status:t},workflowCorrelation:{workflowId:e.workflowId,runId:e.id}}}),await this.notifyRun(e.id,"SUCCEEDED"===t?"WORKFLOW_COMPLETED":"WORKFLOW_FAILED","SUCCEEDED"===t?"Workflow completed":"Workflow failed",A||`Workflow run ${e.displayNumber} ${t.toLowerCase()}`,t.toLowerCase()),epk(e.id))}async dispatchReadyAttempts(){let e=await am(),t=Math.max(0,4-await e.workflowStepAttempt.count({where:{status:"RUNNING"}}));if(t)for(let A of(await e.workflowStepAttempt.findMany({where:{status:"READY",run:{status:"RUNNING"}},orderBy:{createdAt:"asc"},take:2*t}))){if(t<=0)break;if(!(await e.workflowStepAttempt.updateMany({where:{id:A.id,status:"READY",run:{status:"RUNNING"}},data:{status:"RUNNING",phase:"RUNNING",claimOwner:this.workerId,claimExpiresAt:new Date(Date.now()+3e5),startedAt:A.startedAt??new Date}})).count)continue;t-=1;let r=new AbortController;this.activeExecutions.set(A.id,r),this.executeAttempt(A.id,r.signal).catch(e=>{console.error(`Workflow attempt ${A.id} failed unexpectedly:`,e)}).finally(()=>{this.activeExecutions.delete(A.id)})}}async acquireResourceLease(e,t,A){let r=wS.get(t.kind),i=null;if(r.mutatesWorktree){let e=CO(A,"worktree.id")??CO(A,"worktree.path")??CO(A,"codebase.id");e&&(i=`git:${String(e)}`)}else if(t.kind.startsWith("BUILD_")){let e=CO(A,"build.id");e&&(i=`build:${String(e)}`)}if(!i)return!0;let n=await am();await n.workflowResourceLease.deleteMany({where:{key:i,expiresAt:{lt:new Date}}});try{return await n.workflowResourceLease.create({data:{key:i,runId:e.runId,attemptId:e.id,expiresAt:new Date(Date.now()+3e5)}}),await n.workflowStepAttempt.update({where:{id:e.id},data:{resourceLockKey:i}}),!0}catch{return await n.workflowStepAttempt.update({where:{id:e.id},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",claimOwner:null,claimExpiresAt:null}}),!1}}async executeAttempt(e,t){let A=await am(),r=await A.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!r||"RUNNING"!==r.status)return;let i=wV(epm(r.run.version.definitionJson)),n=i.nodes.find(({id:e})=>e===r.nodeId);if(!n)return void await this.failAttempt(r,null,Error("Workflow step definition is missing"));let a=CJ(r.run.sessionDataJson);r.iterationKey&&(a=await this.iterationSessionData(r.run,r,a));let s=epS(n).filter(e=>void 0===CO(a,e));if(s.length){await A.$transaction([A.workflowStepAttempt.update({where:{id:r.id},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",error:`Missing required session data: ${s.join(", ")}`,claimOwner:null,claimExpiresAt:null}}),A.workflowRun.update({where:{id:r.runId},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",blockedReason:`Step ${n.name??n.id} needs ${s.join(", ")}`}}),A.workflowResourceLease.deleteMany({where:{attemptId:e}})]),await this.appendEvent(r.runId,r.id,"STEP_BLOCKED",`Step blocked by missing requirements: ${s.join(", ")}`),await this.notifyRun(r.runId,"WORKFLOW_NEEDS_ATTENTION","Workflow needs data",`Step ${n.name??n.id} needs ${s.join(", ")}`,`blocked:${r.id}`),epk(r.runId);return}if(await A.workflowStepAttempt.update({where:{id:r.id},data:{inputJson:JSON.stringify(a)}}),await this.acquireResourceLease(r,n,a))try{let e,A={...n,config:C_(n.config,a)};if(e=n.kind.startsWith("CONTROL_")||"HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind?await this.executeControl(r.run,r,A,a,i):await this.executor.execute({run:r.run,attempt:r,node:A,sessionData:a,signal:t}),t.aborted)throw Error("Workflow step was cancelled");e.wait?await this.parkAttempt(r,e):await this.completeAttempt(r,n,e)}catch(t){let e=t instanceof Error?t:Error(String(t));if(await this.holdForBusyCodebase(r,e))return;await this.failAttempt(r,n,e)}}async holdForBusyCodebase(e,t){if(!(t instanceof Error&&"CodebaseBusyError"===t.name))return!1;let A=e.startedAt??e.createdAt;if(Date.now()-A.getTime()>6e5)return!1;let r=await am();return!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING",claimOwner:this.workerId},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",error:t.message,claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),await r.workflowRunEvent.findFirst({where:{attemptId:e.id,type:"STEP_WAITING_FOR_RESOURCE"},select:{id:!0}})||await this.appendEvent(e.runId,e.id,"STEP_WAITING_FOR_RESOURCE","Step is waiting for the codebase to become available",{error:t.message}),epk(e.runId),!0)}async iterationSessionData(e,t,A){let r=await am(),i=await r.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,status:"SUCCEEDED"},orderBy:{finishedAt:"asc"}}),n=A;for(let e of(t.inputJson&&(n=CF(n,epB(epm(t.inputJson),"Iteration input"))),i)){let t=this.attemptOutput(e);t.sessionPatch&&(n=CF(n,t.sessionPatch))}return n}async executeControl(e,t,A,r,i){switch(A.kind){case"CONTROL_IF":{let e=A.config.condition;if(!e)throw Error("If steps require a condition");let t=CP(e,r);return{output:{matched:t},selectedHandles:[t?"true":"false"]}}case"CONTROL_JOIN":{let r=i.nodes.find(e=>"CONTROL_FOR_EACH"===e.kind&&e.config.joinNodeId===A.id);if(r){let A=await am(),i=await A.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:{not:""},status:"FAILED"}});if(i.length&&"COLLECT_ERRORS"!==r.config.errorMode)throw Error(`${i.length} for-each iteration step(s) failed`);return{output:{iterations:await A.workflowStepAttempt.count({where:{runId:e.id,generation:t.generation,iterationKey:{not:""}}}),failures:i.map(({nodeId:e,iterationKey:t,error:A})=>({nodeId:e,iterationKey:t,error:A}))}}}return{output:{joined:!0}}}case"CONTROL_TRY":return{output:{started:!0}};case"CONTROL_DELAY":{let e=Number(A.config.seconds??0);if(!Number.isFinite(e)||e<0||e>31536e3)throw Error("Delay must be between zero and 31,536,000 seconds");return{wait:{kind:"DELAY",resumeAfter:new Date(Date.now()+1e3*e)}}}case"CONTROL_WAIT_UNTIL":{let e=A.config.condition;if(!e)throw Error("Wait-until steps require a condition");if(CP(e,r))return{output:{matched:!0}};let t=ehU(A.config,15);return{wait:{kind:"PREDICATE",predicate:{condition:e,cadenceSeconds:t},resumeAfter:new Date(Date.now()+1e3*t),timeoutAt:ehO(A.config)}}}case"CONTROL_SET_VARIABLE":{if("string"!=typeof A.config.path)throw Error("Set-variable steps require an output path");let e="string"==typeof A.config.script?await epa(A.config.script,r):A.config.value;return{output:e,sessionPatch:CU({},A.config.path,e)}}case"CONTROL_FOR_EACH":{let n=Array.isArray(A.config.items)?A.config.items:"string"==typeof A.config.listPath?CO(r,A.config.listPath):null;if(!Array.isArray(n))throw Error("For-each source must be an array");if(n.length>1e3)throw Error("For-each is limited to 1,000 items");return await this.spawnForEach(e,t,A,i,n),{output:{itemCount:n.length},selectedHandles:n.length?["body"]:["empty"],sessionPatch:CU({},`steps.${A.id}.items`,n)}}case"CONTROL_SUBWORKFLOW":return this.startSubworkflow(e,t,A,r);case"HUMAN_CONFIRM":case"HUMAN_CHOICE":return this.createHumanQuestion(e,t,A);default:throw Error(`Unsupported control step ${A.kind}`)}}async progressIterationAttempts(e,t,A,r,i,n,a){let s=await am(),o=!1;for(let e of new Set([...n.values()].map(({iterationKey:e})=>e).filter(Boolean))){let t=new Map(a);for(let A of n.values())A.iterationKey===e&&t.set(A.nodeId,A);for(let n of t.values()){if(n.iterationKey!==e||"PENDING"!==n.status)continue;let a=r.get(n.nodeId);if(!a)continue;let l=(i.get(a.id)??[]).map(e=>this.edgeState(e,A,t,r)),c=l.filter(e=>"ACTIVE"===e).length,u=l.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===a.kind&&"ANY"===a.config.mode?"ANY":"ALL")?c>0:0===u&&c>0)?(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"READY",phase:"ITERATION_READY"}}),o=!0):0===u&&0===c&&(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"SKIPPED",phase:"INACTIVE_ITERATION_BRANCH",finishedAt:new Date}}),o=!0)}}return o}async spawnForEach(e,t,A,r,i){let n="string"==typeof A.config.joinNodeId?A.config.joinNodeId:null,a=r.nodes.find(({id:e})=>e===n);if(!a||"CONTROL_JOIN"!==a.kind)throw Error("For-each steps require an explicit joinNodeId");let s=new Map;for(let e of r.edges)s.set(e.source,[...s.get(e.source)??[],e]);let o=(s.get(A.id)??[]).filter(({sourceHandle:e})=>"body"===e).map(({target:e})=>e),l=new Set;for(;o.length;){let e=o.shift();e===n||l.has(e)||(l.add(e),o.push(...(s.get(e)??[]).map(({target:e})=>e)))}if(i.length&&!l.size)throw Error("For-each body is not connected to its body handle");let c=r.nodes.filter(({id:e})=>l.has(e)),u=await am();await u.$transaction(async r=>{await r.workflowStepAttempt.updateMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,nodeId:{in:[...l]},status:"PENDING"},data:{status:"SKIPPED",phase:"ITERATION_TEMPLATE",finishedAt:new Date}}),i.length&&c.length&&await r.workflowStepAttempt.createMany({data:i.flatMap((r,i)=>{let n=t.iterationKey?`${t.iterationKey}.${i}`:String(i),a=JSON.stringify({loop:{current:{forEachNodeId:A.id,index:i,item:r},[A.id]:{index:i,item:r}}});return c.map(A=>({id:(0,AB.randomUUID)(),runId:e.id,nodeId:A.id,kind:A.kind,generation:t.generation,iterationKey:n,attempt:0,status:"PENDING",phase:"ITERATION_PENDING",inputJson:a,requiredPathsJson:JSON.stringify(epS(A)),providedPathsJson:JSON.stringify(epb(A)),idempotencyKey:`${e.id}:${A.id}:${t.generation}:${n}:0`}))})})})}async startSubworkflow(e,t,A,r){let i="string"==typeof A.config.versionId?A.config.versionId:null;if(!i)throw Error("Sub-workflow version is required");let n=await am(),a=await n.workflowVersion.findUnique({where:{id:i},include:{workflow:{include:{activeVersion:!0}}}});if(!a)throw Error("Sub-workflow version not found");if(!a.workflow.enabled||a.workflow.archivedAt)throw Error("Sub-workflow is paused");let s=e,o=0;for(;s;){if(s.workflowId===a.workflowId)throw Error("Recursive sub-workflow invocation is not allowed");if((o+=1)>=10)throw Error("Sub-workflow depth is limited to 10");s=s.parentRunId?await n.workflowRun.findUnique({where:{id:s.parentRunId}}):null}let l={};if(A.config.inputMapping&&"object"==typeof A.config.inputMapping)for(let[e,t]of Object.entries(A.config.inputMapping))l=CU(l,e,C_(t,r));let c=await this.createRunForTrigger({...a.workflow,activeVersion:a},a,null,null,"SUBWORKFLOW",e.id,{sessionData:l,parentRunId:e.id},`${t.id}:subworkflow:${a.id}`,e.id);return epk(c.id),{output:{childRunId:c.id},links:[{kind:"WORKFLOW_RUN",resourceId:c.id,label:`Workflow run #${c.displayNumber}`,url:`/workflows/runs/${c.id}`}],wait:{kind:"WORKFLOW_RUN",externalKey:c.id,resumeAfter:ehF(A.config),timeoutAt:ehO(A.config)}}}async createHumanQuestion(e,t,A){let r=Array.isArray(A.config.questions)?A.config.questions:[{header:A.name??null,prompt:"string"==typeof A.config.prompt?A.config.prompt:"HUMAN_CONFIRM"===A.kind?"Continue this workflow?":"Choose an option",multiSelect:!!A.config.multiSelect,allowCustom:"HUMAN_CONFIRM"!==A.kind&&!1!==A.config.allowCustom,options:"HUMAN_CONFIRM"===A.kind?[{label:"Confirm",description:null},{label:"Cancel",description:null}]:Array.isArray(A.config.options)?A.config.options:[]}];if(!r.length||r.length>10)throw Error("Workflow questions must contain between one and ten questions");let i=await am(),n=(0,AB.randomUUID)();return await i.runQuestionBatch.create({data:{id:n,workflowStepAttemptId:t.id,nativeRequestId:`workflow:${t.id}`,questions:{create:r.map((e,t)=>{let A=epB(e,"Workflow question"),r=Array.isArray(A.options)?A.options:[];return{id:(0,AB.randomUUID)(),position:t,header:"string"==typeof A.header?A.header:null,prompt:epE(String(A.prompt??""),"Question prompt",1e4),multiSelect:!!A.multiSelect,allowCustom:!1!==A.allowCustom,options:{create:r.map((e,t)=>{let A=epB(e,"Question option");return{id:(0,AB.randomUUID)(),position:t,label:epE(String(A.label??""),"Option label",500),description:"string"==typeof A.description?A.description.slice(0,2e3):null}})}}})}}}),aE.publish(epu(e.id),{workflowQuestionChanged:{id:n,runId:e.id}}),{output:{questionBatchId:n},wait:{kind:"HUMAN",externalKey:n,timeoutAt:ehO(A.config)}}}async parkAttempt(e,t){let A=t.wait;if(!A)throw Error("Workflow wait is missing");let r=await am(),i=(0,AB.randomUUID)();await r.$transaction(async r=>{let n=await r.workflowRun.findUnique({where:{id:e.runId},select:{status:!0}});return!(!n||eph.has(n.status))&&!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING"},data:{status:"WAITING",phase:A.kind,outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:t.sessionPatch}),claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowWait.create({data:{id:i,runId:e.runId,attemptId:e.id,kind:A.kind,predicateJson:A.predicate?JSON.stringify(A.predicate):null,externalKey:A.externalKey??null,resumeAfter:A.resumeAfter??null,timeoutAt:A.timeoutAt??null}}),t.links?.length&&await r.workflowRunResourceLink.createMany({data:t.links.map(t=>({id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:t.kind.toUpperCase(),resourceId:t.resourceId,label:t.label??null,url:t.url??null,metadataJson:t.metadata?JSON.stringify(t.metadata):null}))}),await r.workflowRun.updateMany({where:{id:e.runId,status:{in:[...epg]}},data:{status:"WAITING",phase:A.kind}}),await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_WAITING",`Step is waiting for ${A.kind.toLowerCase().replaceAll("_"," ")}`,{waitId:i}),epk(e.runId))}async completeAttempt(e,t,A){let r=await am();await r.$transaction(async r=>{let i=await r.workflowRun.findUnique({where:{id:e.runId}});if(!i)throw Error("Workflow run disappeared");if(eph.has(i.status))return!1;let n=CJ(i.sessionDataJson);e.iterationKey?n=CU(n,`steps.${t.id}.iterations.${e.iterationKey.replaceAll(".","_")}`,{status:"SUCCEEDED",output:A.output??null,data:A.sessionPatch??null}):(A.sessionPatch&&(n=CF(n,A.sessionPatch)),n=CU(n,`steps.${t.id}`,{status:"SUCCEEDED",output:A.output??null,snapshotId:A.links?.find(({kind:e})=>"CHECKPOINT"===e)?.resourceId??null}));let a=JSON.stringify(n);return epQ(a,"Workflow session data",2097152),!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"SUCCEEDED",phase:"SUCCEEDED",outputJson:JSON.stringify({value:A.output,selectedHandles:A.selectedHandles,sessionPatch:A.sessionPatch}),error:null,finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(A.links?.length&&await r.workflowRunResourceLink.createMany({data:A.links.map(t=>({id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:t.kind.toUpperCase(),resourceId:t.resourceId,label:t.label??null,url:t.url??null,metadataJson:t.metadata?JSON.stringify(t.metadata):null}))}),await r.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:a,sessionRevision:{increment:1}}}),await r.workflowRun.updateMany({where:{id:e.runId,status:{in:[...epg]}},data:{status:"RUNNING",phase:"SCHEDULING"}}),await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_SUCCEEDED",`Step ${t.name??t.id} completed`),epk(e.runId))}async failAttempt(e,t,A){let r=await am(),i=t??(await r.workflowRun.findUnique({where:{id:e.runId},include:{version:!0}}))?.version.definitionJson,n="string"==typeof i?wV(epm(i)).nodes.find(({id:t})=>t===e.nodeId)??null:i,a=n?.retry,s=!!(a&&e.attempt+1<a.maxAttempts),o=a?Math.min(86400,"EXPONENTIAL"===a.strategy?a.delaySeconds*2**e.attempt:a.delaySeconds):0;await r.$transaction(async t=>{let r=await t.workflowRun.findUnique({where:{id:e.runId}});if(!r||eph.has(r.status))return!1;let i=CJ(r.sessionDataJson);return e.iterationKey||(i=CU(i,`steps.${e.nodeId}`,{status:"FAILED",error:A.message})),!!(await t.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"FAILED",phase:s?"RETRY_SCHEDULED":"FAILED",error:A.message.slice(0,2e4),finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(s&&await t.workflowWait.create({data:{id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:"RETRY",resumeAfter:new Date(Date.now()+1e3*o)}}),await t.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:JSON.stringify(i),sessionRevision:{increment:1}}}),await t.workflowRun.updateMany({where:{id:e.runId,status:{in:[...epg]}},data:{status:s?"WAITING":"RUNNING",phase:s?"RETRY_WAIT":"SCHEDULING"}}),await t.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,s?"STEP_RETRY_SCHEDULED":"STEP_FAILED",s?`Step failed and will retry in ${o} seconds`:`Step failed: ${A.message}`,{error:A.message,retry:s}),epk(e.runId))}async resolveDueWaits(){let e=await am(),t=new Date,A=(t,A)=>e.workflowWait.updateMany({where:{id:t,status:"PENDING",run:{status:{in:[...epg]}}},data:A});for(let r of(await e.workflowWait.findMany({where:{status:"PENDING",run:{status:{in:[...epg]}},OR:[{resumeAfter:{lte:t}},{timeoutAt:{lte:t}}]},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100}))){if(r.timeoutAt&&r.timeoutAt<=t&&"RETRY"!==r.kind&&"DELAY"!==r.kind){if(!(await A(r.id,{status:"TIMED_OUT",resolvedAt:t})).count)continue;await this.failAttempt(r.attempt,wV(epm(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId)??null,Error("Workflow wait timed out"));continue}if("RETRY"===r.kind){let A=r.attempt.attempt+1;await e.$transaction(async e=>{if(!(await e.workflowWait.updateMany({where:{id:r.id,status:"PENDING",run:{status:{in:[...epg]}}},data:{status:"RESOLVED",resolvedAt:t}})).count)return!1;if(await e.workflowStepAttempt.create({data:{id:(0,AB.randomUUID)(),runId:r.runId,nodeId:r.attempt.nodeId,kind:r.attempt.kind,generation:r.attempt.generation,iterationKey:r.attempt.iterationKey,attempt:A,status:"PENDING",phase:"RETRY_PENDING",inputJson:r.attempt.inputJson,requiredPathsJson:r.attempt.requiredPathsJson,providedPathsJson:r.attempt.providedPathsJson,idempotencyKey:`${r.runId}:${r.attempt.nodeId}:${r.attempt.generation}:${r.attempt.iterationKey}:${A}`,replayedFromId:r.attempt.id}}),!(await e.workflowRun.updateMany({where:{id:r.runId,status:{in:[...epg]}},data:{status:"RUNNING",phase:"SCHEDULING"}})).count)throw Error("Workflow lifecycle changed while resuming retry");return!0})&&epk(r.runId)}else if("DELAY"===r.kind){if(!(await A(r.id,{status:"RESOLVED",resolvedAt:t})).count)continue;await this.completeWaitingAttempt(r.attemptId,{delayed:!0})}else if("PREDICATE"===r.kind){let e=r.predicateJson?epB(epm(r.predicateJson),"Wait predicate"):{},i=e.condition,n=CJ(r.attempt.run.sessionDataJson);if(i&&CP(i,n)){if(!(await A(r.id,{status:"RESOLVED",resultJson:JSON.stringify({matched:!0}),resolvedAt:t})).count)continue;await this.completeWaitingAttempt(r.attemptId,{matched:!0})}else{let t=Math.max(1,Number(e.cadenceSeconds??15));await A(r.id,{resumeAfter:new Date(Date.now()+1e3*t)})}}else if(r.externalKey&&this.waitPollers.has(r.kind)){let e=await this.waitPollers.get(r.kind)(r.externalKey);if(e.pending){let t=wV(epm(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId)?.config??{};await A(r.id,{resumeAfter:new Date(Date.now()+1e3*ehU(t,e.pollAfterSeconds??15))})}else{if(!(await A(r.id,{status:e.error?"FAILED":"RESOLVED",resultJson:JSON.stringify(e.result??{}),resolvedAt:new Date})).count)continue;if(e.error){let t=wV(epm(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId);await this.failAttempt(r.attempt,t??null,Error(e.error))}else await this.completeWaitingAttempt(r.attemptId,e.result??{})}}}}async completeWaitingAttempt(e,t){let A=await am(),r=await A.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!r||"WAITING"!==r.status)return;let i=wV(epm(r.run.version.definitionJson)).nodes.find(({id:e})=>e===r.nodeId);if(!i)throw Error("Workflow step definition is missing");let n=this.attemptOutput(r),a=n.sessionPatch;if("TERMINAL_RUN"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionData&&"object"==typeof t.sessionData&&!Array.isArray(t.sessionData)){let e=structuredClone(t.sessionData),A=CO(CJ(r.run.sessionDataJson),"workflow");a=A?CU(e,"workflow",A):e}t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)&&(a=CF(a??{},t.sessionPatch)),i.kind.startsWith("RUN_")&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=CF(a??{},CU({},`run.${i.id}`,t))),"BUILD_START"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=CF(a??{},CU({},"build",t))),"WORKTREE_WAIT_PUSH_READY"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=CF(a??{},CU({},"worktree",{id:t.id,pushStatus:t.pushStatus}))),"SKILL_APPLY"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=CF(a??{},CU({},`steps.${i.id}`,t))),("HUMAN_CONFIRM"===i.kind||"HUMAN_CHOICE"===i.kind)&&(a=CF(a??{},CU({},`steps.${i.id}.answer`,t))),await this.completeAttempt(r,i,{output:t??n.value,selectedHandles:n.selectedHandles,sessionPatch:a})}async resolveExternalWait(e,t,A,r=null){let i=await am(),n=await i.workflowWait.findMany({where:{kind:e,externalKey:t,status:"PENDING"},include:{attempt:{include:{run:{include:{version:!0}}}}}});for(let e of n)if(await i.workflowWait.update({where:{id:e.id},data:{status:r?"FAILED":"RESOLVED",resultJson:JSON.stringify(A),resolvedAt:new Date}}),r){let t=wV(epm(e.attempt.run.version.definitionJson)).nodes.find(({id:t})=>t===e.attempt.nodeId);await this.failAttempt(e.attempt,t??null,Error(r))}else await this.completeWaitingAttempt(e.attemptId,A);return n.length}descendants(e,t){let A=new Map;for(let t of e.edges)A.set(t.source,[...A.get(t.source)??[],t.target]);let r=new Set([t]),i=[t];for(;i.length;){let e=i.shift();for(let t of A.get(e)??[])r.has(t)||(r.add(t),i.push(t))}return[...r]}async prepareReplay(e,t){let A=await am(),r=await A.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:{include:{checkpoints:!0,resourceLinks:!0}}}});if(!r)throw Error("Workflow run not found");if(!new Set(["PAUSED","BLOCKED","FAILED","SUCCEEDED","CANCELLED"]).has(r.status))throw Error("Pause the workflow before replaying a step");let i=wV(epm(r.version.definitionJson));if(!i.nodes.some(({id:e})=>e===t))throw Error("Workflow step not found");let n=this.descendants(i,t),a=r.attempts.filter(({generation:e,nodeId:t})=>e===r.generation&&n.includes(t)),s=a.filter(e=>e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0],o=s?.checkpoints.slice().sort((e,t)=>e.createdAt.getTime()-t.createdAt.getTime())[0],l=a.flatMap(e=>e.resourceLinks.filter(({kind:e})=>"CHECKPOINT"!==e).map(({kind:e,resourceId:t,label:A,url:r})=>({kind:e,resourceId:t,label:A,url:r}))),c=null,u=null;if(o&&this.agentControl)try{c=await this.compareCheckpointWithAgent(o.id)}catch(e){u=`Git comparison unavailable: ${e instanceof Error?e.message:String(e)}`}return{runId:e,nodeId:t,affectedNodeIds:n,affectedAttemptIds:a.map(({id:e})=>e),externalEffects:l,checkpointId:o?.id??null,gitComparison:c,warning:[l.length?"External Jira, GitHub, build, deployment, and notification effects will not be undone.":null,u].filter(Boolean).join(" ")||null}}async replay(e,t,A={}){let r=await this.prepareReplay(e,t);if(A.restore){if(!r.checkpointId)throw Error("No restorable Git checkpoint is available for this step");this.checkpointRestorer?await this.checkpointRestorer(r.checkpointId,{stash:!!A.stash}):await this.restoreCheckpointWithAgent(r.checkpointId,{stash:!!A.stash})}let i=await am(),n=await i.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:!0}});if(!n)throw Error("Workflow run not found");let a=wV(epm(n.version.definitionJson)),s=n.attempts.filter(e=>e.generation===n.generation&&e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0];if(!s)throw Error("Selected step has no execution history");let o=s.inputJson?epB(epm(s.inputJson),"Step input snapshot"):CJ(n.sessionDataJson),l=n.generation+1,c=new Map;for(let e of n.attempts.filter(({generation:e,iterationKey:t})=>e===n.generation&&!t)){let t=c.get(e.nodeId);(!t||t.attempt<e.attempt)&&c.set(e.nodeId,e)}let u=CU(o,"workflow.replay",{generation:l,fromNodeId:t,replayedAt:new Date().toISOString()});return await i.$transaction(async t=>{await t.workflowStepAttempt.updateMany({where:{runId:e,generation:n.generation,nodeId:{in:r.affectedNodeIds},supersededAt:null},data:{supersededAt:new Date}}),await t.workflowStepAttempt.createMany({data:a.nodes.map(t=>{let A=r.affectedNodeIds.includes(t.id),i=c.get(t.id);return{id:(0,AB.randomUUID)(),runId:e,nodeId:t.id,kind:t.kind,generation:l,iterationKey:"",attempt:0,status:A?"PENDING":i?.status==="SKIPPED"?"SKIPPED":"SUCCEEDED",phase:A?"REPLAY_PENDING":"REUSED_FROM_PRIOR_GENERATION",inputJson:A?null:i?.inputJson,outputJson:A?null:i?.outputJson,error:null,startedAt:A?null:i?.startedAt,finishedAt:A?null:new Date,requiredPathsJson:JSON.stringify(epS(t)),providedPathsJson:JSON.stringify(epb(t)),idempotencyKey:`${e}:${t.id}:${l}::0`,replayedFromId:i?.id??null}})}),await t.workflowWait.updateMany({where:{runId:e,status:"PENDING"},data:{status:"SUPERSEDED",resolvedAt:new Date}}),await t.workflowRun.update({where:{id:e},data:{generation:l,sessionDataJson:JSON.stringify(u),sessionRevision:{increment:1},status:"RUNNING",phase:"REPLAYING",blockedReason:null,error:null,pausedAt:null,finishedAt:null}})}),await this.appendEvent(e,null,"RUN_REPLAYED",`Replaying from step ${t}`,{generation:l,affectedNodeIds:r.affectedNodeIds}),epk(e),this.run(e)}async appendEvent(e,t,A,r,i=null){let n=await am(),a=await n.$transaction(async n=>{let a=await n.workflowRunEvent.findFirst({where:{runId:e},orderBy:{sequence:"desc"},select:{sequence:!0}});return n.workflowRunEvent.create({data:{id:(0,AB.randomUUID)(),runId:e,attemptId:t,sequence:(a?.sequence??-1)+1,type:A,message:r.slice(0,2e4),detailJson:i?JSON.stringify(i):null}})});return aE.publish(epc(e),{workflowRunEventAdded:a}),a}subscribeWorkflows(){return aE.iterate(epo)}subscribeRun(e){return aE.iterate(epl(e))}subscribeRunEvents(e){return aE.iterate(epc(e))}subscribeRunQuestions(e){return aE.iterate(epu(e))}}let epT=globalThis,epM=new Set(["localhost","::1","[::1]","0.0.0.0"]);function epN(e,t){var A=e.get(t);if(!A)return null;let r=A.split(",")[0].trim();return!r||/[\s/\\]/.test(r)?null:r}function epx(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"");return!!(epM.has(t)||"::1"===t||t.endsWith(".local")||t.endsWith(".localhost")||/^127\./.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t))}function epO(e,t,A){let r;try{r=new URL(`${e}//${t}`)}catch{return null}return"http:"!==r.protocol&&"https:"!==r.protocol?null:{origin:r.origin,secure:"https:"===r.protocol,loopback:epx(r.hostname),source:A}}function epU(e){if(e instanceof Headers)return e;let t=new Headers;for(let[A,r]of Object.entries(e))Array.isArray(r)?t.set(A,r.join(", ")):void 0!==r&&t.set(A,r);return t}let epF=new class{server=null;services=null;schema=null;initPromise=null;async initializeServer(){if(null===this.server)return this.initPromise||(this.initPromise=this.buildServer().finally(()=>{this.initPromise=null})),this.initPromise}async buildServer(){var e,t,A,r,i,n,a,s,o,l,c,u,d,h,p,g,m,f,I,E,y,C,w,Q,B,D,k,S,b,v,R,T,M,N,x,O,U,F,_,G,L,P,J,Y,j,$;let q,V,K,W,z,Z,X,ee,et,eA,er,ei,en,ea,es,eo,el,ec,eu,ed,eh,ep,eg,em,ef,eI,eE,ey,eC,ew,eQ,eB,eD,ek,eS,eb,ev,eR,eT,eM;this.services=epT.serverServices??(q=new etV,V=new sj,K=new ept,W=new a7,z=new edM(V),Z=new edO,X=new ecw(W),(ee=new ehc(W,z)).startRuntime(),et=new Qi(W),eA=new xy(W),er=new edm,ei=new edw(W,void 0,V),en=new edj,ea=new ud(void 0,V,Z),(es=new eht(z,W,X)).startReaper(),eo=new xx(W,er,z,X),el=new euP(W),eu=new Os(ec=new x2(W,el)),ed=new N4(V,K),eh=new etq(void 0,V),eg=new cR(V,z,Z,!0,K,void 0,ep=new l_),em=new cC(!0,V,Z,()=>eg.configurationChanged(),ep),ef=new Od(V),eI=new xo(W,ed,em,el,K,ep),eE=new ehd(et,X,Z),ey=new ehQ,eC=new euC(eu,eo,{codebases:ec,telemetry:er,pushNotifications:ea,agents:W,diskSpace:X,worktrees:eI,runs:es,commands:ee,jira:ed,github:em,buildData:eA,cacheServer:ef,ccusage:et,credentials:V,iosDevices:eh,modelCosts:en,notifications:z,polling:Z,signingAssets:ei,skills:el,systemStatus:eE,workflows:()=>eQ,worktreeAutomations:()=>eB},V),es.setMcpPresetResolver((e,t)=>eC.resolveRunMcpPresets(e,t)),eQ=new epR(K,ew=new eps,void 0,V,W,z,es,eI,ee,ed),eB=new eub(eI,em,ed,eQ,W,Z),b=eQ,v=e={agentControl:W,jira:ed,github:em,worktrees:eI,worktreeAutomations:eB,codebases:ec,builds:eo,skills:el,runs:es,commands:ee,notifications:z,pushNotifications:ea,tools:eC,diskSpace:X,buildData:eA,ccusage:et,iosDevices:eh,modelCosts:en,signingAssets:ei},b.registerWaitPoller("AGENT_JOB",async e=>{let t=await v.agentControl.getJob(e);return t?new Set(["QUEUED","RUNNING"]).has(t.status)?{pending:!0,pollAfterSeconds:2}:{pending:!1,result:t.resultJson?{...eh_(JSON.parse(t.resultJson),"Agent job result"),jobId:e}:{jobId:e,status:t.status},error:"SUCCEEDED"===t.status?null:t.error||`Agent job ${t.status.toLowerCase()}`}:{pending:!1,error:"Agent job disappeared"}}),b.registerWaitPoller("AGENT_JOBS",async e=>{let t=eh_(JSON.parse(e),"Agent jobs wait"),A=Array.isArray(t.ids)?t.ids.map(e=>ehG(e,"Agent job ID",500)):[];if(!A.length)return{pending:!1,result:{jobs:[]}};let r=await Promise.all(A.map(e=>v.agentControl.getJob(e)));if(r.some(e=>!e))return{pending:!1,error:"Agent job disappeared"};let i=r.filter(e=>!!e);if(i.some(e=>new Set(["QUEUED","RUNNING"]).has(e.status)))return{pending:!0,pollAfterSeconds:2};let n=i.map(e=>({id:e.id,status:e.status,error:e.error})),a=n.filter(({status:e})=>"SUCCEEDED"!==e);return{pending:!1,result:{jobs:n,sessionPatch:{signing:{jobs:n}}},error:a.length?a.map(({id:e,status:t,error:A})=>A?`${e}: ${A}`:`${e}: ${t.toLowerCase()}`).join("; "):null}}),b.registerWaitPoller("AGENT_RUN",async e=>{let t=await v.runs.get(e);return t?new Set(["IN_PROGRESS","PAUSED"]).has(t.status)?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:t.id,kind:t.kind,status:t.status,phase:t.phase,finalOutput:t.finalOutput,error:t.error,usage:{inputTokens:t.inputTokens,outputTokens:t.outputTokens,reasoningTokens:t.reasoningTokens,estimatedCost:t.estimatedCost}},error:"COMPLETED"===t.status?null:t.error||`Run ${t.status.toLowerCase()}`}:{pending:!1,error:"Plan or session disappeared"}}),b.registerWaitPoller("COMMAND_RUN",async e=>{let t=await v.commands.getRun(e);return t?new Set(["QUEUED","RUNNING","RESTARTING","CANCELLING"]).has(t.status)?{pending:!0,pollAfterSeconds:1}:{pending:!1,result:{id:t.id,displayNumber:t.displayNumber,status:t.status,exitCode:t.exitCode,signal:t.signal,error:t.error,sessionPatch:{command:{id:t.id,commandId:t.commandId,name:t.snapshotName,status:t.status,exitCode:t.exitCode,signal:t.signal,error:t.error,finishedAt:t.finishedAt?.toISOString()??null}}},error:"SUCCEEDED"===t.status?null:t.error||`Command run ${t.status.toLowerCase()}`}:{pending:!1,error:"Command run disappeared"}}),b.registerWaitPoller("BUILD",async e=>{let t=await v.builds.getBuild(e);return t?new Set(["QUEUED","PREPARING","RUNNING"]).has(t.status)?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:t.id,status:t.status,action:t.action,sessionPatch:{build:{id:t.id,status:t.status,action:t.action,error:t.error}}},error:"SUCCEEDED"===t.status?null:t.error||`Build ${t.status.toLowerCase()}`}:{pending:!1,error:"Build disappeared"}}),b.registerWaitPoller("BUILD_DATA_COLLECTION",async e=>{let t=await v.buildData.getCollection(e);return t?"COMPLETED"!==t.status?{pending:!0,pollAfterSeconds:2}:{pending:!1,result:{...t,sessionPatch:{buildData:t}}}:{pending:!1,error:"Build-data collection disappeared"}}),b.registerWaitPoller("SIGNING_OPERATIONS",async e=>{let t=eh_(JSON.parse(e),"Signing operations wait"),A=Array.isArray(t.ids)?t.ids.map(e=>ehG(e,"Signing operation ID",500)):[];if(!A.length)return{pending:!1,result:{operations:[]}};let r=(await v.signingAssets.operations(200)).filter(({id:e})=>A.includes(e));if(r.length!==A.length)return{pending:!1,error:"Signing operation disappeared"};let i=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]);if(r.some(({status:e})=>!i.has(e)))return{pending:!0,pollAfterSeconds:2};let n=r.filter(({status:e})=>"SUCCEEDED"!==e);return{pending:!1,result:{operations:r,sessionPatch:{signing:{operations:r}}},error:n.length?n.map(({id:e,error:t,status:A})=>t?`${e}: ${t}`:`${e}: ${A.toLowerCase()}`).join("; "):null}}),b.registerWaitPoller("SKILL_RUN",async e=>{let t=await v.skills.getRun(e);return t?("READY"===t.status&&(t=await v.skills.applyRun(e)),new Set(["PREPARING","READY","APPLYING"]).has(t?.status??""))?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:e,status:t?.status},error:t?.status==="SUCCEEDED"?null:t?.error||`Skill run ${t?.status?.toLowerCase()}`}:{pending:!1,error:"Skill run disappeared"}}),b.registerWaitPoller("WORKTREE_MOVE",async e=>{let t=await v.worktrees.getMove(e);if(!t)return{pending:!1,error:"Worktree move disappeared"};if(new Set(["PUSHING","CHECKING_OUT","DELETING_SOURCE"]).has(t.status))return{pending:!0,pollAfterSeconds:3};let A=t.targetWorktreeId?await v.worktrees.workflowSessionDataForWorktree(t.targetWorktreeId,{includeMissing:!0}):{};return{pending:!1,result:{id:t.id,status:t.status,targetWorktreeId:t.targetWorktreeId,sessionPatch:A},error:"SUCCEEDED"===t.status?null:t.error||`Worktree move ${t.status.toLowerCase()}`}}),b.registerWaitPoller("WORKTREE_PUSH_READY",async e=>{let t=await am(),A=await t.worktree.findUnique({where:{id:e}});if(!A)return{pending:!1,error:"Worktree disappeared"};if("READY"!==A.pushStatus)return{pending:!0,pollAfterSeconds:5};let r=await v.worktrees.workflowSessionDataForWorktree(A.id,{includeMissing:!0});return{pending:!1,result:{id:A.id,pushStatus:A.pushStatus,sessionPatch:r}}}),b.registerWaitPoller("WORKFLOW_RUN",async e=>{let t=await b.run(e);return t?new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(t.status)?{pending:!1,result:{id:t.id,status:t.status,sessionData:JSON.parse(t.sessionDataJson)},error:"SUCCEEDED"===t.status?null:t.error||`Sub-workflow ${t.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:3}:{pending:!1,error:"Sub-workflow disappeared"}}),b.registerWaitPoller("RUN_ANSWER_REVISION",async e=>{let t=eh_(JSON.parse(e),"Answer revision wait"),A=ehG(t.batchId,"Question batch ID",500),r=await v.runs.questionBatch(A);if(!r)return{pending:!1,error:"Question batch disappeared"};if(!r.revisionPreparedAt)return{pending:!0,pollAfterSeconds:2};let i=await v.runs.reviseAnswer(A,t.answers??{},!0===t.stash,!1!==t.rollback);return i?{pending:!1,result:{id:i.id,kind:i.kind,status:i.status,phase:i.phase,parentRunId:i.parentRunId,followUpMode:i.followUpMode}}:{pending:!1,error:"Answer revision failed"}}),b.registerWaitPoller("GITHUB_CHECKS",async e=>{let t=eh_(JSON.parse(e),"GitHub checks wait"),A=await v.github.autoRetryRun(ehG(t.repositoryId,"Repository ID"),ehG(t.workflowRunId,"Workflow run ID"),!0,"WORKFLOW_AUTOMATION");return new Set(["SUCCESS","FAILURE","CANCELLED","SKIPPED","TIMED_OUT","ACTION_REQUIRED","ERROR","NEUTRAL","STALE","STARTUP_FAILURE"]).has(A.status)?{pending:!1,result:{runId:A.id,status:A.status,jobs:A.jobs,sessionPatch:{pipeline:{runId:A.id,status:A.status,conclusion:A.status,jobs:A.jobs}}},error:"SUCCESS"===A.status?null:`GitHub checks concluded ${A.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:10}}),b.registerWaitPoller("DISK_SPACE_REPORT",async e=>{let t=eh_(JSON.parse(e),"Disk-space report wait"),A=ehG(t.agentId,"Agent ID",500),r=await v.diskSpace.snapshot(A);if(!r.disk.enabled)return{pending:!1,error:"Disk-space monitoring was disabled while awaiting a report"};let i=r.disk.lastReportedAt,n="string"==typeof t.previousReportedAt?t.previousReportedAt:null;return(ehG(t.requestedAt,"Requested timestamp",100),i&&(!n||Date.parse(i)>Date.parse(n)))?{pending:!1,result:{...r,sessionPatch:r}}:{pending:!0,pollAfterSeconds:2}}),R=ew,T=e,R.register("JIRA_LOAD_TICKET",async e=>{let t=ehX(await T.jira.ticket(eh1(e),!0===e.node.config.force));return{output:t,sessionPatch:{ticket:t},links:[eh$(String(t.key),String(t.title??t.key))]}}),R.register("JIRA_TRANSITION",async e=>{let t=ehX(await T.jira.transitionTicket(eh1(e),ehG(e.node.config.transitionId,"Jira transition ID",200)));return{output:t,sessionPatch:{ticket:t},links:[eh$(String(t.key),String(t.title??t.key))]}}),R.register("JIRA_COMMENT",async e=>{let t=ehX(await T.jira.addComment(eh1(e),{value:ehG(e.node.config.content,"Jira comment",1e5),format:"JIRA_WIKI"===e.node.config.format?"JIRA_WIKI":"MARKDOWN"}));return{output:t,sessionPatch:{ticket:t},links:[eh$(String(t.key),String(t.title??t.key))]}}),R.register("JIRA_ASSIGN",async e=>{let t=null===e.node.config.accountId?null:ehG(e.node.config.accountId,"Jira account ID",500),A=ehX(await T.jira.assignTicket(eh1(e),t));return{output:A,sessionPatch:{ticket:A},links:[eh$(String(A.key),String(A.title??A.key))]}}),R.register("JIRA_UPDATE_FIELDS",async e=>{let t=eh_(e.node.config.fields??{},"Jira fields"),A=ehX(await T.jira.updateTicket({issueKey:eh1(e),...t}));return{output:A,sessionPatch:{ticket:A},links:[eh$(String(A.key),String(A.title??A.key))]}}),R.register("JIRA_RESOLVE_BRANCH",async e=>{let t=await T.worktrees.previewTicketBranch({codebaseId:ehG(e.node.config.codebaseId??CO(e.sessionData,"codebase.id"),"Codebase ID",200),worktreeId:"string"==typeof CO(e.sessionData,"worktree.id")?String(CO(e.sessionData,"worktree.id")):null,ticketKey:eh1(e)});return{output:t,sessionPatch:{worktree:{branch:t.branchName},ticket:{key:t.ticketKey,title:t.ticketTitle,type:t.ticketType}},links:[eh$(t.ticketKey,t.ticketTitle)]}}),M=ew,N=e,M.register("GITHUB_LOAD_PR",async e=>{let t=ehZ(e),A=await N.github.pullRequest(t.owner,t.name,eh4(e),"WORKFLOW_AUTOMATION");if(!A)throw Error("Pull request was not found");let r=eh0(A);return{output:r,sessionPatch:{pr:r},links:[ehj("PULL_REQUEST",ehB(t.owner,t.name,A.number),A.title,A.url)]}}),M.register("GITHUB_MERGE_PR",async e=>{let t=ehZ(e),A=eh4(e),r=await N.github.pullRequestMergeOptions(t.owner,t.name,A,"WORKFLOW_AUTOMATION");if(!r.canMerge)throw Error(r.blockedReason||"Pull request cannot be merged");let i=await N.github.mergePullRequest({...t,number:A,method:"MERGE"===e.node.config.method||"REBASE"===e.node.config.method?e.node.config.method:"SQUASH",commitHeadline:"string"==typeof e.node.config.commitHeadline?e.node.config.commitHeadline:r.defaultCommitHeadline,commitBody:"string"==typeof e.node.config.commitBody?e.node.config.commitBody:r.defaultCommitBody,authorEmail:"string"==typeof e.node.config.authorEmail?e.node.config.authorEmail:null},"WORKFLOW_AUTOMATION");return{output:i,sessionPatch:{pr:{state:i.state}},links:[ehq(e)]}}),M.register("GITHUB_COLLECT_REVIEW_THREADS",async e=>{let t=ehZ(e),A=await N.github.pullRequest(t.owner,t.name,eh4(e),"WORKFLOW_AUTOMATION");if(!A)throw Error("Pull request was not found");let r=A.reviewThreads.filter(({isResolved:e})=>!e);return{output:r,sessionPatch:{pr:{unresolvedThreads:r}},links:[ehq(e,A.title,A.url)]}}),M.register("GITHUB_REPLY_REVIEW_THREAD",async e=>{let t=await N.github.replyToReviewThread(ehG(e.node.config.threadId,"Review thread ID",500),ehG(e.node.config.body,"Review reply",1e5),"WORKFLOW_AUTOMATION"),A=ehV(e);return{output:t,links:A?[A]:void 0}}),M.register("GITHUB_SET_REVIEW_THREAD_RESOLVED",async e=>{let t=await N.github.setReviewThreadResolved(ehG(e.node.config.threadId,"Review thread ID",500),!1!==e.node.config.resolved,"WORKFLOW_AUTOMATION"),A=ehV(e);return{output:t,links:A?[A]:void 0}}),M.register("GITHUB_CREATE_PR",async e=>{let t=ehZ(e),A=await N.github.createPullRequest({...t,baseRefName:ehG(e.node.config.baseRefName??CO(e.sessionData,"worktree.baseBranch"),"Base branch",500),headRefName:ehG(e.node.config.headRefName??CO(e.sessionData,"worktree.branch"),"Head branch",500),title:ehG(e.node.config.title??CO(e.sessionData,"ticket.title"),"Pull request title",500),body:"string"==typeof e.node.config.body?e.node.config.body:null,draft:!0===e.node.config.draft});await N.worktrees.attachPullRequestForBranch(`github.com/${t.owner}/${t.name}`,A.headRefName,A);let r=eh0(A);return{output:r,sessionPatch:{pr:r},links:[ehj("PULL_REQUEST",ehB(t.owner,t.name,A.number),A.title,A.url)]}}),M.register("GITHUB_SET_PR_LABELS",async e=>{let t=ehZ(e),A=Array.isArray(e.node.config.labels)?e.node.config.labels.map(String):[],r=await N.github.setPullRequestLabels({...t,number:eh4(e),labels:A});return{output:r.labels,sessionPatch:{pr:{labels:r.labels}},links:[ehq(e)]}}),M.register("GITHUB_RETRY_PIPELINE",async e=>{let t=await N.github.retryPipeline(ehG(e.node.config.repositoryId??CO(e.sessionData,"pr.repositoryGithubId"),"GitHub repository ID",500),ehG(e.node.config.checkSuiteId??CO(e.sessionData,"pipeline.checkSuiteId"),"Check suite ID",500),"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),A=ehK(e);return{output:t,sessionPatch:{pipeline:{status:t.status}},links:A?[A]:void 0}}),M.register("GITHUB_RETRY_JOB",async e=>{let t=await N.github.retryWorkflowJob(ehG(e.node.config.repositoryId,"GitHub repository ID",500),ehG(e.node.config.checkSuiteId,"Check suite ID",500),ehG(e.node.config.jobId,"Workflow job ID",500),"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),A=ehK(e);return{output:t,links:A?[A]:void 0}}),M.register("GITHUB_CANCEL_WORKFLOW_RUN",async e=>{let t=await N.github.cancelActionsWorkflowRun(ehG(e.node.config.codebaseRepositoryId??CO(e.sessionData,"repo.id"),"Codebase repository ID",500),ehG(e.node.config.workflowRunId??CO(e.sessionData,"pipeline.runId"),"Workflow run ID",500),!0===e.node.config.force,"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),A=ehK(e);return{output:t,sessionPatch:{pipeline:{status:"CANCELLED"}},links:A?[A]:void 0}}),M.register("GITHUB_SAVE_AUTO_RETRY",async e=>({output:await N.github.saveAutoRetryRule(eh_(e.node.config.input,"Auto-retry rule"))})),M.register("GITHUB_WAIT_CHECKS",async e=>{let t=ehG(e.node.config.repositoryId??CO(e.sessionData,"repo.id"),"Repository ID",500),A=ehG(e.node.config.workflowRunId??CO(e.sessionData,"pipeline.runId"),"Workflow run ID",500),r=ehK(e);return{links:r?[r]:void 0,wait:{kind:"GITHUB_CHECKS",externalKey:JSON.stringify({repositoryId:t,workflowRunId:A}),resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}}}),x=ew,O=e,x.register("WORKTREE_CREATE",async e=>{let t=eh3(e),A=await O.worktrees.createWorktree({codebaseId:eh5(e),selection:t,requestId:ehP(e,"create")});return ehY(e,A,{worktree:{branch:t.branchName,baseBranch:t.baseBranch}})}),x.register("WORKTREE_CHANGE_BRANCH",async e=>{let t=eh8(e),A=eh3(e),r=await O.worktrees.changeWorktreeBranch({worktreeId:t,selection:A,requestId:ehP(e,"change-branch"),stashOnFailure:!0===e.node.config.stashOnFailure});return ehY(e,r,{worktree:{branch:A.branchName,baseBranch:A.baseBranch}},[ehj("WORKTREE",t,"Worktree")])}),x.register("WORKTREE_REFRESH_PULL_REQUEST",async e=>{let t=eh8(e),A=(await O.worktrees.refreshPullRequest(t)).pullRequest,r=A?eh0(A):null,i=[ehj("WORKTREE",t,"Worktree")];if(A){let[e,t]=A.repositoryNameWithOwner.split("/");e&&t&&i.push(ehj("PULL_REQUEST",ehB(e,t,A.number),A.title,A.url))}return{output:{found:!!A,pullRequest:A},sessionPatch:{pr:r},links:i}}),x.register("WORKTREE_OPERATION",async e=>{let t=String(e.node.config.operation??"SYNC").toUpperCase();if("OPEN_EDITOR"===t||!ie.includes(t))throw Error("Worktree operation is invalid for workflow execution");let A=eh8(e),r=await O.worktrees.runOperation(A,t,ehP(e,t.toLowerCase()));return ehY(e,r,void 0,[ehj("WORKTREE",A,"Worktree")])}),x.register("WORKTREE_SET_AUTO_SYNC",async e=>{let t=eh8(e),A=String(e.node.config.action??"ENABLE").toUpperCase(),r="CANCEL"===A?{cancelled:await O.worktreeAutomations.cancelAutoSync(t)}:"RETRY"===A?await O.worktreeAutomations.retryAutoSync(t):"ENABLE"===A?await O.worktreeAutomations.configureAutoSync({worktreeId:t,conflictWorkflowId:ehL(e.node.config.conflictWorkflowId,500),conflictWorkflowChoice:ehL(e.node.config.conflictWorkflowChoice,500)}):null;if(!r)throw Error("Unknown Auto Sync action");return{output:r,sessionPatch:{worktree:{autoSync:r}},links:[ehj("WORKTREE",t,"Worktree")]}}),x.register("WORKTREE_SET_AUTO_MERGE",async e=>{let t,A=eh8(e),r=String(e.node.config.action??"ENABLE").toUpperCase();if("CANCEL"===r)t={cancelled:await O.worktreeAutomations.cancelAutoMerge(A)};else if("RETRY"===r)t=await O.worktreeAutomations.retryAutoMerge(A);else if("ENABLE"===r){let r=Number(e.node.config.pullRequestNumber??CO(e.sessionData,"pr.number"));if(!Number.isInteger(r)||r<1)throw Error("Pull request number must be a positive integer");let i=String(e.node.config.method??"SQUASH").toUpperCase();if(!["MERGE","REBASE","SQUASH"].includes(i))throw Error("Merge method is invalid");t=await O.worktreeAutomations.configureAutoMerge({worktreeId:A,repositoryNameWithOwner:ehG(e.node.config.repositoryNameWithOwner??CO(e.sessionData,"repo.nameWithOwner"),"Repository",500),pullRequestNumber:r,method:i,commitHeadline:ehG(e.node.config.commitHeadline??CO(e.sessionData,"pr.title"),"Commit headline",1e3),commitBody:String(e.node.config.commitBody??""),authorEmail:ehL(e.node.config.authorEmail,500),deleteWorktree:!0===e.node.config.deleteWorktree,moveTicketToDone:!0===e.node.config.moveTicketToDone})}else throw Error("Unknown Auto Merge action");return{output:t,sessionPatch:{worktree:{autoMerge:t}},links:[ehj("WORKTREE",A,"Worktree")]}}),x.register("WORKTREE_DELETE",async e=>{let t=await O.worktrees.deleteWorktree({worktreeId:eh8(e),deleteRemoteBranch:!0===e.node.config.deleteRemoteBranch,requestId:ehP(e,"delete")});return ehY(e,t)}),x.register("WORKTREE_MOVE",async e=>{let t=await O.worktrees.moveWorktree({sourceWorktreeId:eh8(e),targetCodebaseId:ehG(e.node.config.targetCodebaseId,"Target codebase ID",500),targetWorktreeId:ehL(e.node.config.targetWorktreeId,500),deleteSource:!0===e.node.config.deleteSource,requestId:ehP(e,"move")}),A=t.targetWorktreeId??(!0===e.node.config.deleteSource?null:eh8(e));return{output:t,links:[...A?[ehj("WORKTREE",A,"Worktree")]:[],{kind:"WORKTREE_MOVE",resourceId:t.id,label:"Worktree move"}],wait:{kind:"WORKTREE_MOVE",externalKey:t.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}}}),x.register("WORKTREE_INSPECT",async e=>{let t=eh8(e),A=await O.worktrees.inspect(t,ehP(e,"inspect"));return{output:A,sessionPatch:{worktree:{commits:A.commits,changes:A.changes,branchChanges:A.branchChanges}},links:[ehj("WORKTREE",t,"Worktree")]}}),x.register("WORKTREE_INSPECT_GIT",async e=>{let t=eh8(e),A=await O.worktrees.inspectGitState(t,ehP(e,"inspect-git"));return{output:A,sessionPatch:{worktree:{...A}},links:[ehj("WORKTREE",t,"Worktree")]}}),x.register("WORKTREE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!r9.includes(t))throw Error("Worktree Git operation is invalid");let A=eh8(e),r=await O.worktrees.runGitOperation({worktreeId:A,operation:t,branch:ehL(e.node.config.branch,500),stashOid:ehL(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:ehP(e,t.toLowerCase())});return ehY(e,r,void 0,[ehj("WORKTREE",A,"Worktree")])}),x.register("WORKTREE_WAIT_PUSH_READY",async e=>{let t=eh8(e);return{links:[ehj("WORKTREE",t,"Worktree")],wait:{kind:"WORKTREE_PUSH_READY",externalKey:t,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}}}),U=ew,F=e,U.register("CODEBASE_FETCH_REFRESH",async e=>{let t=eh5(e),A="REFRESH"===e.node.config.operation?rM:rN,r=await F.codebases.runOperation(A,[t],ehP(e,A)),i=r.jobs[0];if(!i)throw Error(r.skipped[0]?.reason??"Codebase operation was skipped");return ehY(e,i,void 0,[ehj("CODEBASE",t,"Codebase")])}),U.register("CODEBASE_INSPECT_GIT",async e=>{let t=eh5(e),A=await F.codebases.inspectGitState(t,ehP(e,"inspect-git"));return{output:A,sessionPatch:{codebase:{...A}},links:[ehj("CODEBASE",t,"Codebase")]}}),U.register("CODEBASE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!rU.includes(t))throw Error("Codebase Git operation is invalid");let A=eh5(e),r=await F.codebases.runGitOperation({codebaseId:A,operation:t,branch:ehL(e.node.config.branch,500),stashOid:ehL(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:ehP(e,t.toLowerCase())});return ehY(e,r,void 0,[ehj("CODEBASE",A,"Codebase")])}),_=ew,G=e,_.register("BUILD_START",async e=>{let t=String(e.node.config.action??"BUILD").toUpperCase();if(!Aj.includes(t))throw Error("Build action is invalid");let A=await G.builds.startBuild({worktreeId:eh8(e),configurationId:ehG(e.node.config.configurationId,"Build configuration ID",500),destination:e.node.config.destination,scriptIds:Array.isArray(e.node.config.scriptIds)?e.node.config.scriptIds.map(String):[],action:t,advancedSettings:e.node.config.advancedSettings,exportWhenComplete:!0===e.node.config.exportWhenComplete,exportSettings:e.node.config.exportSettings,worktreeCoverage:!0===e.node.config.worktreeCoverage,requestId:ehP(e,"build"),telemetryRequestOrigin:"workflow"});return{output:A,sessionPatch:{build:{id:A.id,status:A.status,action:A.action}},links:[{kind:"BUILD",resourceId:A.id,label:`${A.action} build`,url:`/builds/${A.id}`}],wait:{kind:"BUILD",externalKey:A.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}}}),_.register("BUILD_READ_TEST_RESULTS",async e=>{let t,A=eh6(e),r=(await G.builds.reportsForBuild(A)).filter(({kind:e,status:t})=>"TEST_RESULTS"===e&&"READY"===t).at(-1);if(!r)throw Error("Test results are not ready");let i=eh_(JSON.parse(r.summaryJson),"Test summary"),n=eh_(JSON.parse(r.dataJson),"Test results");return{output:{summary:i,tests:n.tests??[]},sessionPatch:{build:{testSummary:i,tests:n.tests??[]}},links:[ehj("BUILD",A,"Build",t)]}}),_.register("BUILD_READ_COVERAGE",async e=>{let t=eh6(e),A=(await G.builds.reportsForBuild(t)).filter(({kind:e,status:t})=>"CODE_COVERAGE"===e&&"READY"===t).at(-1);if(!A)throw Error("Coverage results are not ready");let r=eh_(JSON.parse(A.summaryJson),"Coverage summary"),i=eh_(JSON.parse(A.dataJson),"Coverage results");return{output:{summary:r,files:i.files??[],changedFiles:i.changedFiles??[]},sessionPatch:{build:{coverageSummary:r,coverageFiles:i.files??[],changedCoverageFiles:i.changedFiles??[]}},links:[ehj("BUILD",t,"Build",`/builds/${t}/coverage`)]}}),_.register("BUILD_EXPORT",async e=>{let t,A,r=eh6(e),i=await G.builds.exportArchive({buildId:r,requestId:ehP(e,"export"),settings:eh_(e.node.config.settings,"Export settings")});return i.jobId?ehY(e,{id:i.jobId,timeoutSeconds:3600},{build:{exportId:i.id}},[ehj("BUILD",r,"Build",t)]):{output:i,links:[ehj("BUILD",r,"Build",A)]}}),_.register("BUILD_DEPLOY",async e=>{let t,A,r=eh6(e),i=await G.builds.runBuild({buildId:r,destinations:Array.isArray(e.node.config.destinations)?e.node.config.destinations:[],requestId:ehP(e,"deploy")}),n=i.find(({jobId:e})=>!!e)?.jobId;return n?ehY(e,{id:n,timeoutSeconds:3600},void 0,[ehj("BUILD",r,"Build",t)]):{output:i,links:[ehj("BUILD",r,"Build",A)]}}),_.register("BUILD_CANCEL",async e=>{let t,A=eh6(e),r=await G.builds.cancelBuild(A);return{output:r,sessionPatch:{build:{id:r?.id,status:r?.status}},links:[ehj("BUILD",A,"Build",t)]}}),L=ew,P=e,eS=async e=>{let t=await P.diskSpace.snapshot(e);return{output:t,sessionPatch:t,links:[ehj("AGENT",e,t.agent.name,`/agents/${encodeURIComponent(e)}`)]}},L.register("DISK_SPACE_LOAD",async e=>eS(eh9(e))),L.register("DISK_SPACE_REFRESH",async e=>{let t=eh9(e),A=await P.diskSpace.requestRefresh(t);return{output:A,links:[ehj("AGENT",t,"Agent",`/agents/${encodeURIComponent(t)}`)],wait:{kind:"DISK_SPACE_REPORT",externalKey:JSON.stringify(A),resumeAfter:ehF(e.node.config,2),timeoutAt:ehO(e.node.config,180)}}}),L.register("DISK_SPACE_UPDATE_THRESHOLDS",async e=>{let t=await P.diskSpace.updateSettings({normalThresholdGiB:Number(e.node.config.normalThresholdGiB),pressureThresholdGiB:Number(e.node.config.pressureThresholdGiB)});return{output:t,sessionPatch:{disk:t}}}),L.register("DISK_SPACE_SET_MONITORING",async e=>{let t=eh9(e);return await P.diskSpace.setMonitoring(t,!0===e.node.config.enabled),eS(t)}),L.register("DISK_SPACE_SET_PRESSURE_MODE",async e=>{let t=eh9(e);return await P.diskSpace.setManualPressureMode(t,!0===e.node.config.enabled),eS(t)}),function(e,t){for(let[A,r]of(e.register("RUN_CREATE_PLAN",async e=>{let A=await t.runs.create(epe(e,"PLAN"));if(!A)throw Error("Plan could not be created");return ehJ(e,A,!0)}),e.register("RUN_CREATE_SESSION",async e=>{let A=await t.runs.create(epe(e,"SESSION"));if(!A)throw Error("Session could not be created");return ehJ(e,A,!0)}),e.register("RUN_PLAY_PLAN",async e=>{let A=await t.runs.playPlan(eh7(e),Array.isArray(e.node.config.mcpPresetIds)?e.node.config.mcpPresetIds.map(String):[]);if(!A)throw Error("Plan could not be played");return ehJ(e,A,!0)}),e.register("RUN_FOLLOW_UP",async e=>{let A=epe(e,"SESSION"),r=await t.runs.followUp(eh7(e),{...A,followUpMode:ehG(e.node.config.followUpMode??"RESUME","Follow-up mode",50),contextMode:ehL(e.node.config.contextMode,50)});if(!r)throw Error("Follow-up could not be created");return ehJ(e,r,!0)}),e.register("RUN_STEER",async e=>{let A=await t.runs.steer(eh7(e),ehG(e.node.config.prompt,"Steering prompt",2e5),Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[]);if(!A)throw Error("Run could not be steered");return ehJ(e,A)}),e.register("RUN_ANSWER",async e=>{let A=await t.runs.answerQuestion(ehG(e.node.config.batchId,"Question batch ID",500),e.node.config.answers??{});if(!A)throw Error("Question could not be answered");return ehJ(e,A)}),[["RUN_PAUSE","PAUSE"],["RUN_CONTINUE","CONTINUE"],["RUN_CANCEL","CANCEL"]]))e.register(A,async e=>{let A=await t.runs.lifecycle(eh7(e),r);if(!A)throw Error("Run lifecycle operation failed");return ehJ(e,A)});e.register("RUN_REVISE_ANSWER",async e=>{let A=ehG(e.node.config.batchId,"Question batch ID",500),r=await t.runs.questionBatch(A);if(!r)throw Error("Question batch was not found");if(r.revisionPreparedAt){let r=await t.runs.reviseAnswer(A,e.node.config.answers??{},!0===e.node.config.stash,!1!==e.node.config.rollback);if(!r)throw Error("Answer revision failed");return ehJ(e,r)}await t.runs.prepareAnswerRevision(A);let i=ehW(e);return{links:i?[i]:void 0,wait:{kind:"RUN_ANSWER_REVISION",externalKey:JSON.stringify({batchId:A,answers:e.node.config.answers??{},stash:!0===e.node.config.stash,rollback:!1!==e.node.config.rollback}),resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}}}),e.register("RUN_READ_RESULT",async e=>{let A=await t.runs.get(eh7(e));if(!A)throw Error("Run was not found");let[r,i,n,a]=await Promise.all([t.runs.events({runId:A.id,first:500}),t.runs.questions({runId:A.id,first:200}),t.runs.usage(A.id),t.runs.linkedItems(A.id)]);return ehJ(e,{...A,events:r,questions:i,usage:n,links:a})}),e.register("RUN_CAPTURE_CHECKPOINT",async e=>{let t=await am(),A=await t.runCheckpoint.findFirst({where:{runId:eh7(e)},orderBy:{createdAt:"desc"}});if(!A)throw Error("Run has no captured checkpoint");let r=ehW(e);return{output:A,sessionPatch:{steps:{[e.node.id]:{snapshotId:A.id}}},links:[...r?[r]:[],{kind:"CHECKPOINT",resourceId:A.id,label:`${A.kind} checkpoint`}]}}),e.register("RUN_ARCHIVE_DELETE",async e=>{let A=eh7(e),r=!0===e.node.config.delete,i=r?await t.runs.deleteRuns([A]):await t.runs.archive([A],!1!==e.node.config.archived),n=r?null:ehW(e);return{output:{id:A,affected:i},links:n?[n]:void 0}})}(ew,e),J=ew,Y=e,J.register("SAVED_COMMAND",async e=>{let t=ehG(e.node.config.commandId,"Saved command",500),A=await Y.commands.getDefinition(t);if(!A||A.archivedAt)throw Error("Saved command is unavailable");let r="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT";if("WAIT_FOR_EXIT"===r&&"ALWAYS"===A.restartPolicy)throw Error("Always-restart commands require fire and forget");let i=String(e.node.config.targetMode??"CONTEXT"),n=null,a=null,s=new Set(["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME"]).has(A.targetKind);if("FIXED_AGENT"===i)n=ehG(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===i)a=ehG(e.node.config.worktreeId,"Fixed worktree",500);else if(s){let t=CO(e.sessionData,"agent.id")??CO(e.sessionData,"codebase.agentId");if("string"==typeof t&&(n=t),!n){let t=CO(e.sessionData,"worktree.id");if("string"==typeof t){let e=await am(),A=await e.worktree.findUnique({where:{id:t},select:{codebase:{select:{agentId:!0}}}});n=A?.codebase.agentId??null}}}else{let t=CO(e.sessionData,"worktree.id");"string"==typeof t&&(a=t)}let o=await Y.commands.startRun({commandId:t,agentId:n,worktreeId:a,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!o)throw Error("Command run could not be created");return{output:{id:o.id,displayNumber:o.displayNumber,status:o.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:o.id,displayNumber:o.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:o.id,label:`Command #${o.displayNumber}`,url:`/commands/runs/${o.id}`}],wait:"WAIT_FOR_EXIT"===r?{kind:"COMMAND_RUN",externalKey:o.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}:void 0}}),J.register("CUSTOM_COMMAND",async e=>{let t=ehG(e.node.config.script,"Custom command",1e6),A="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT",r=String(e.node.config.targetMode??"CONTEXT"),i=null,n=null;if("FIXED_AGENT"===r)i=ehG(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===r)n=ehG(e.node.config.worktreeId,"Fixed worktree",500);else{let t=CO(e.sessionData,"worktree.id");if("string"==typeof t)n=t;else{let t=CO(e.sessionData,"agent.id")??CO(e.sessionData,"codebase.agentId");"string"==typeof t&&(i=t)}}if(!i&&!n)throw Error("Custom command context has no agent or worktree target");let a=await Y.commands.startCustomRun({script:t,agentId:i,worktreeId:n,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!a)throw Error("Custom command run could not be created");return{output:{id:a.id,displayNumber:a.displayNumber,status:a.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:a.id,displayNumber:a.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:a.id,label:`Command #${a.displayNumber}`,url:`/commands/runs/${a.id}`}],wait:"WAIT_FOR_EXIT"===A?{kind:"COMMAND_RUN",externalKey:a.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}:void 0}}),J.register("SKILL_APPLY",async e=>{let t=await Y.skills.prepareSync(e.node.config.groupId?"GROUP":"ALL",ehL(e.node.config.groupId,500),!1);if(!t)throw Error("Skill sync could not be prepared");return{output:t,links:[{kind:"SKILL_RUN",resourceId:t.id,label:"Skill sync",url:`/skills/sync/${t.id}`}],wait:{kind:"SKILL_RUN",externalKey:t.id,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config)}}}),J.register("NOTIFICATION_SEND",async e=>{let t=await am(),A=await t.$transaction(t=>Y.notifications.recordInTransaction(t,{dedupeKey:`${e.run.id}:${e.node.id}:${e.attempt.generation}`,typeKey:"WORKFLOW_MESSAGE",title:ehG(e.node.config.title,"Notification title",240),body:ehG(e.node.config.body,"Notification body",1e3),href:"string"==typeof e.node.config.href?e.node.config.href:`/workflows/runs/${e.run.id}`,resourceKind:"WORKFLOW_RUN",resourceId:e.run.id,worktreeId:"string"==typeof CO(e.sessionData,"worktree.id")?String(CO(e.sessionData,"worktree.id")):null}));return Y.notifications.created(A),{output:A}}),J.register("IOS_PUSH_SEND",async e=>({output:await Y.pushNotifications.send({requestId:ehP(e,"ios-push"),editor:e.node.config.editor,targetMode:ehG(e.node.config.targetMode??"ALL","Push target mode",50),registrationIds:Array.isArray(e.node.config.registrationIds)?e.node.config.registrationIds.map(String):[],channelId:ehL(e.node.config.channelId,500),directToken:ehL(e.node.config.directToken,2e4),directTokenEncoding:"BASE64"===e.node.config.directTokenEncoding?"BASE64":"HEX",directEnvironment:"PRODUCTION"===e.node.config.directEnvironment?"PRODUCTION":"SANDBOX"})})),J.register("MCP_CALL",async e=>{let t=await Y.tools.callTool({groupId:ehG(e.node.config.groupId,"MCP tool group",500),name:ehG(e.node.config.name,"MCP tool name",500),arguments:eh_(e.node.config.arguments??{},"MCP arguments")},{caller:`workflow:${e.run.id}`,correlationId:e.attempt.id,source:"WORKFLOW"});return{output:t,sessionPatch:{steps:{[e.node.id]:{output:t}}}}}),j=ew,$=e,eb=async(e,t,A,r,i={})=>{let n=eh_(await $.tools.callTool({groupId:t,name:A,arguments:r},{caller:`workflow:${e.run.id}`,correlationId:e.attempt.id,source:"WORKFLOW"}),`${A} tool result`),a=eh_(n.structuredContent,`${A} structured content`),s=i.sessionPatch?await i.sessionPatch(a):{};return{output:a,sessionPatch:{steps:{[e.node.id]:{output:a}},...s},wait:i.wait?.(a)}},ev=(e,t,A,r)=>({kind:t,externalKey:A,resumeAfter:ehF(e.node.config),timeoutAt:ehO(e.node.config,r)}),j.register("COMMAND_RERUN",async e=>{let t=ehH(e,"commandRunId","command.id","Command run ID");return eb(e,"builtin:commands","rerun_command",{id:t},{sessionPatch:e=>({command:eh_(e.run,"Command run output")}),wait:t=>ev(e,"COMMAND_RUN",ehG(eh_(t.run,"Command run output").id,"Command run ID",500))})}),j.register("COMMAND_TERMINATE",async e=>{let t=ehH(e,"commandRunId","command.id","Command run ID");return eb(e,"builtin:commands","terminate_command_run",{id:t},{sessionPatch:e=>({command:eh_(e.run,"Command run output")})})}),j.register("COMMAND_READ_OUTPUT",async e=>{let t=ehH(e,"commandRunId","command.id","Command run ID");return eb(e,"builtin:commands","get_command_run_output",{runId:t,first:Number(e.node.config.first??1e3)},{sessionPatch:e=>({command:{id:t,output:e.chunks}})})}),j.register("WORKTREE_INSPECT_DIFF",async e=>{let t=ehH(e,"worktreeId","worktree.id","Worktree ID");return eb(e,"builtin:worktrees","inspect_worktree_diff",{worktreeId:t,scope:ehG(e.node.config.scope,"Diff scope",100),path:e.node.config.path,previousPath:e.node.config.previousPath,commitSha:e.node.config.commitSha,requestId:ehP(e,"diff")},{sessionPatch:e=>({worktree:{id:t,diff:e.inspection}})})}),j.register("WORKTREE_UPDATE_METADATA",async e=>{let t=ehH(e,"worktreeId","worktree.id","Worktree ID");return eb(e,"builtin:worktrees","update_worktree_metadata",{id:t,baseBranch:e.node.config.baseBranch,highlightColor:e.node.config.highlightColor},{sessionPatch:async e=>CF(await $.worktrees.workflowSessionDataForWorktree(t,{includeMissing:!0}),{worktree:eh_(e.worktree,"Worktree output")})})}),j.register("WORKTREE_MOVE_CONTROL",e=>eb(e,"builtin:worktrees","CANCEL"===e.node.config.operation?"cancel_worktree_move":"retry_worktree_move_with_stash",{id:ehG(e.node.config.moveId,"Move ID",500)},{sessionPatch:async e=>{let t=eh_(e.move,"Worktree move output"),A="string"==typeof t.targetWorktreeId&&t.targetWorktreeId||"string"==typeof t.sourceWorktreeId&&t.sourceWorktreeId||null;return CF(A?await $.worktrees.workflowSessionDataForWorktree(A,{includeMissing:!0}):{},{worktree:{move:t}})}})),j.register("BUILD_REBUILD",async e=>{let t=ehH(e,"buildId","build.id","Build ID");return eb(e,"builtin:builds","rebuild_build",{buildId:t,requestId:ehP(e,"rebuild")},{sessionPatch:e=>({build:eh_(e.build,"Build output")}),wait:t=>ev(e,"BUILD",ehG(eh_(t.build,"Build output").id,"Build ID",500))})}),j.register("BUILD_GENERATE_REPORT",async e=>{let t=ehH(e,"buildId","build.id","Build ID");return eb(e,"builtin:builds","generate_build_report",{buildId:t,kind:"TEST_RESULTS"===e.node.config.reportKind?"TEST_RESULTS":"CODE_COVERAGE",requestId:ehP(e,"report")},{sessionPatch:e=>({build:{id:t,report:e.report}})})}),j.register("BUILD_DELETE",e=>{let t=Array.isArray(e.node.config.buildIds)?e.node.config.buildIds.map(String):[ehH(e,"buildId","build.id","Build ID")];return eb(e,"builtin:builds","delete_builds",{ids:t},{sessionPatch:e=>({build:{ids:t,deletedCount:e.count}})})}),j.register("SKILL_PREPARE_SYNC",e=>eb(e,"builtin:skills","prepare_skill_sync",{kind:String(e.node.config.syncKind??"ALL"),groupId:e.node.config.groupId},{sessionPatch:e=>({skillSync:eh_(e.run,"Skill sync output")})})),j.register("SKILL_RESOLVE_SYNC",e=>eb(e,"builtin:skills","resolve_skill_sync_conflict",{input:{runId:ehH(e,"runId","skillSync.id","Skill sync run ID"),itemId:ehG(e.node.config.itemId,"Conflict item ID",500),resolution:String(e.node.config.resolution??"SKIP")}},{sessionPatch:e=>({skillSync:eh_(e.run,"Skill sync output")})})),j.register("SKILL_SKIP_SYNC",e=>eb(e,"builtin:skills","skip_skill_sync",{runId:ehH(e,"runId","skillSync.id","Skill sync run ID")},{sessionPatch:e=>({skillSync:eh_(e.run,"Skill sync output")})})),j.register("BUILD_DATA_REFRESH",e=>eb(e,"builtin:build-data","refresh_build_data",{requestId:ehP(e,"build-data")},{sessionPatch:e=>({buildData:eh_(e.collection,"Build-data collection output")}),wait:t=>{let A=eh_(t.collection,"Build-data collection output");return"COMPLETED"===A.status?void 0:ev(e,"BUILD_DATA_COLLECTION",ehG(A.id,"Build-data collection ID",500),90)}})),j.register("BUILD_DATA_DELETE",e=>eb(e,"builtin:build-data","delete_build_data_entries",{collectionId:ehH(e,"collectionId","buildData.id","Build-data collection ID"),entryIds:Array.isArray(e.node.config.entryIds)?e.node.config.entryIds.map(String):[],requestId:ehP(e,"build-data-delete"),overrideProtection:!0===e.node.config.overrideProtection},{sessionPatch:e=>({buildData:eh_(e.collection,"Build-data collection output")})})),j.register("BUILD_DATA_SET_LOCK",e=>{let t=ehH(e,"collectionId","buildData.id","Build-data collection ID");return eb(e,"builtin:build-data","set_build_data_lock",{collectionId:t,entryId:ehG(e.node.config.entryId,"Entry ID",500),locked:!0===e.node.config.locked},{sessionPatch:e=>({buildData:{id:t,entry:e.entry}})})}),j.register("SIGNING_REFRESH",e=>eb(e,"builtin:signing-assets","refresh_signing_assets",{agentIds:Array.isArray(e.node.config.agentIds)?e.node.config.agentIds.map(String):void 0},{sessionPatch:e=>({signing:{jobs:e.operation}}),wait:t=>{let A=Array.isArray(t.operation)?t.operation.flatMap(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=e.id;return"string"==typeof t&&t?[t]:[]}):[];return A.length?ev(e,"AGENT_JOBS",JSON.stringify({ids:A}),90):void 0}})),j.register("SIGNING_SYNC_PROFILE",e=>eb(e,"builtin:signing-assets","sync_signing_profile",{uuid:ehH(e,"uuid","signingProfile.id","Profile UUID"),sourceAgentId:ehG(e.node.config.sourceAgentId,"Source agent ID",500),targetAgentIds:Array.isArray(e.node.config.targetAgentIds)?e.node.config.targetAgentIds.map(String):[]},{sessionPatch:e=>({signing:{operation:e.operation}}),wait:t=>ev(e,"SIGNING_OPERATIONS",JSON.stringify({ids:[ehG(eh_(t.operation,"Signing operation output").id,"Signing operation ID",500)]}),300)})),j.register("SIGNING_DELETE_EXPIRED",e=>eb(e,"builtin:signing-assets","delete_expired_signing_profiles",{agentIds:Array.isArray(e.node.config.agentIds)?e.node.config.agentIds.map(String):void 0},{sessionPatch:e=>({signing:{operations:e.operation}}),wait:t=>{let A=Array.isArray(t.operation)?t.operation.flatMap(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=e.id;return"string"==typeof t&&t?[t]:[]}):[];return A.length?ev(e,"SIGNING_OPERATIONS",JSON.stringify({ids:A}),300):void 0}})),j.register("IOS_DEVICE_REGISTER",e=>eb(e,"builtin:ios-devices","register_ios_device",{id:ehH(e,"deviceId","device.id","Device ID")},{sessionPatch:e=>({device:eh_(e.device,"iOS device output")})})),j.register("IOS_DEVICE_REJECT",e=>eb(e,"builtin:ios-devices","reject_ios_device",{id:ehH(e,"deviceId","device.id","Device ID")},{sessionPatch:e=>({device:eh_(e.device,"iOS device output")})})),j.register("AGENT_RECONCILE",async e=>{let t=Array.isArray(e.node.config.agentIds)?e.node.config.agentIds.map(String):(await $.agentControl.listAgents()).map(({id:e})=>e),A=await $.agentControl.requestCodebaseReconcile(t);return{output:{requested:A},sessionPatch:{agent:{requested:A}}}}),j.register("AGENT_UPDATE_CADENCE",async e=>{let t=await $.agentControl.updateCadenceSettings(ehH(e,"agentId","agent.id","Agent ID"),eh_(e.node.config.settings,"Cadence settings"));return{output:t,sessionPatch:{agent:eh_(t,"Agent output")}}}),j.register("CCUSAGE_COLLECT",async e=>{let t=await $.ccusage.collect(ehP(e,"ccusage"));return{output:t,sessionPatch:{usage:t}}}),j.register("MODEL_COST_REFRESH",async()=>{let e=await $.modelCosts.refresh();return{output:e,sessionPatch:{modelCosts:e}}}),eR=async(e,t,A)=>{let r=await eb(e,"builtin:github",t,A),i=eh_(r.output,"GitHub tool output"),n=eh0(eh_(i.pullRequest,"Pull request output"));return{...r,sessionPatch:{...r.sessionPatch,pr:n}}},eT=e=>({owner:ehG(e.node.config.owner??CO(e.sessionData,"repo.owner"),"Repository owner",200),name:ehG(e.node.config.name??CO(e.sessionData,"repo.name"),"Repository name",200),number:Number(e.node.config.number??CO(e.sessionData,"pr.number"))}),j.register("GITHUB_UPDATE_PR",e=>eR(e,"update_pull_request",{...eT(e),title:ehL(e.node.config.title),body:"string"==typeof e.node.config.body?e.node.config.body:void 0,draft:"boolean"==typeof e.node.config.draft?e.node.config.draft:void 0})),j.register("GITHUB_SUBMIT_REVIEW",e=>eR(e,"submit_pull_request_review",{...eT(e),event:String(e.node.config.event??"COMMENT"),body:"string"==typeof e.node.config.body?e.node.config.body:void 0})),j.register("GITHUB_REQUEST_REVIEWERS",e=>eR(e,"request_pull_request_reviewers",{...eT(e),reviewers:Array.isArray(e.node.config.reviewers)?e.node.config.reviewers.map(String):[],teamReviewers:Array.isArray(e.node.config.teamReviewers)?e.node.config.teamReviewers.map(String):[]})),j.register("GITHUB_DISPATCH_WORKFLOW",e=>eb(e,"builtin:github","dispatch_github_workflow",{repositoryId:ehH(e,"repositoryId","repo.id","Repository ID"),workflowId:ehG(e.node.config.workflowId,"Workflow ID",500),ref:ehG(e.node.config.ref,"Git ref",500),inputs:e.node.config.inputs?eh_(e.node.config.inputs,"Workflow inputs"):void 0},{sessionPatch:e=>({pipeline:e})})),eM=async(e,t,A)=>{let r=await eb(e,"builtin:jira",t,A),i=eh_(r.output,"Jira tool output"),n=ehX(eh_(i.ticket,"Jira ticket output"));return{...r,sessionPatch:{...r.sessionPatch,ticket:n}}},j.register("JIRA_CREATE_TICKET",e=>eM(e,"create_jira_ticket",{projectKey:ehG(e.node.config.projectKey,"Project key",100),issueTypeId:ehG(e.node.config.issueTypeId,"Issue type ID",100),summary:ehG(e.node.config.summary,"Summary"),description:"string"==typeof e.node.config.description?{format:"MARKDOWN",value:e.node.config.description}:void 0,fields:e.node.config.fields?eh_(e.node.config.fields,"Additional Jira fields"):void 0})),j.register("JIRA_ADD_WORKLOG",e=>eM(e,"add_jira_worklog",{issueKey:ehH(e,"issueKey","ticket.key","Issue key"),timeSpentSeconds:Number(e.node.config.timeSpentSeconds),startedAt:ehL(e.node.config.startedAt,100),comment:"string"==typeof e.node.config.comment?{format:"MARKDOWN",value:e.node.config.comment}:void 0})),j.register("JIRA_LINK_TICKETS",e=>eM(e,"link_jira_tickets",{inwardIssueKey:ehH(e,"inwardIssueKey","ticket.key","Inward issue key"),outwardIssueKey:ehG(e.node.config.outwardIssueKey,"Outward issue key",100),linkType:ehG(e.node.config.linkType,"Link type",100)})),(eD=new epn(K,W,eI,X,{buildData:eA,commands:ee,credentials:V,iosDevices:eh,polling:Z,pushNotifications:ea,signingAssets:ei,skills:el})).start(),eQ.startRuntime(),eB.startRuntime(),eE.startRuntime(),epT.serverServices={prismaService:q,credentialService:V,agentControlService:W,ccusageService:et,buildDataService:eA,buildsService:eo,codebasesService:ec,codebaseToolsService:eu,jiraService:ed,iosDevicesService:eh,gitHubService:em,gitHubPipelineStatusService:ep,gitHubActionsNotificationsService:eg,cacheServerService:ef,worktreesService:eI,worktreeAutomationService:eB,skillsService:el,telemetryService:er,signingAssetsService:ei,pushNotificationsService:ea,notificationsService:z,pollingService:Z,modelCostsService:en,runsService:es,commandsService:ee,diskSpaceService:X,systemStatusService:eE,actionCenterService:ey,toolsService:eC,workflowEventsService:K,workflowsService:eQ,workflowEventBridge:eD}),this.schema=(t=this.services.prismaService,A=this.services.agentControlService,r=this.services.jiraService,i=this.services.gitHubService,n=this.services.ccusageService,a=this.services.codebasesService,s=this.services.toolsService,o=this.services.worktreesService,l=this.services.worktreeAutomationService,c=this.services.buildDataService,u=this.services.skillsService,d=this.services.buildsService,h=this.services.iosDevicesService,p=this.services.telemetryService,g=this.services.signingAssetsService,m=this.services.pushNotificationsService,f=this.services.cacheServerService,I=this.services.credentialService,E=this.services.notificationsService,y=this.services.pollingService,C=this.services.modelCostsService,w=this.services.runsService,Q=this.services.workflowsService,B=this.services.commandsService,D=this.services.diskSpaceService,k=this.services.systemStatusService,S=this.services.actionCenterService,ek=H([{Query:{health:async()=>await t.healthCheck()?"ok":"degraded"}},{JSON:sn,Agent:{capabilities:e=>si(e.capabilitiesJson),connectionStatus:e=>null!==e.lastSeenAt&&Date.now()-e.lastSeenAt.getTime()<=a8(e)&&null===e.disconnectedAt?"ONLINE":"OFFLINE",effectiveBuildsDirectory:e=>AQ(e),lastSeenAt:e=>e.lastSeenAt?.toISOString()??null,disconnectedAt:e=>e.disconnectedAt?.toISOString()??null,createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},AgentJob:{payload:e=>si(e.payloadJson),result:e=>si(e.resultJson),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>e.startedAt?.toISOString()??null,finishedAt:e=>e.finishedAt?.toISOString()??null,updatedAt:e=>e.updatedAt.toISOString()},AgentJobLog:{createdAt:e=>e.createdAt.toISOString()},AgentEnrollmentToken:{expiresAt:e=>e.expiresAt.toISOString()},Query:{agents:(e,t,r)=>(st(r),A.listAgents()),agent:(e,{id:t},r)=>(sA(r,t),A.getAgent(t)),agentSelf:(e,t,r)=>{let i=se(r);return A.getAgent(i)},agentCadenceSettings:(e,{agentId:t},r)=>(sA(r,t),A.cadenceSettings(t)),agentJobs:(e,{agentId:t,limit:r},i)=>(sA(i,t),A.listJobs(t,r,!!i.agentId)),agentJob:async(e,{id:t},r)=>sr(r,A,t),agentJobLogs:async(e,{jobId:t,afterSequence:r},i)=>(await sr(i,A,t),A.listLogs(t,r))},Mutation:{createAgentEnrollmentToken:(e,{expiresInMinutes:t},r)=>(st(r),A.createEnrollmentToken(t)),enrollAgent:(e,{input:t},r)=>A.enroll({...t,ipAddress:r.ipAddress}),heartbeatAgent:(e,{input:t},r)=>A.heartbeat(se(r),{...t,ipAddress:r.ipAddress}),createAgentJob:(e,{input:t},r)=>{if(st(r),t.kind===Ay)throw Error("Saved commands must be launched through startCommandRun");return A.createJob(t)},claimAgentJob:(e,{jobId:t},r)=>A.claimJob(se(r),t),claimSigningSecretTransfer:(e,{transferId:t},r)=>A.claimSigningSecretTransfer(se(r),t),appendAgentJobLogs:(e,{jobId:t,logs:r},i)=>A.appendLogs(se(i),t,r),completeAgentJob:(e,t,r)=>A.completeJob(se(r),t.jobId,t.status,t.result,t.error??null),cancelAgentJob:(e,{jobId:t},r)=>(st(r),A.cancelJob(t)),requestAgentCodebaseReconcile:async(e,{agentId:t},r)=>(st(r),await A.requestCodebaseReconcile([t])===1),updateAgentBaseRepoDirectory:(e,{agentId:t,baseRepoDirectory:r},i)=>(st(i),A.updateBaseRepoDirectory(t,r??null)),updateAgentBuildsDirectory:(e,{agentId:t,buildsDirectory:r},i)=>(st(i),A.updateBuildsDirectory(t,r??null)),updateAgentDerivedDataSettings:(e,{agentId:t,input:r},i)=>(st(i),A.updateDerivedDataSettings(t,r.mode,r.path??null)),updateAgentCadenceSettings:(e,{agentId:t,input:r},i)=>(st(i),A.updateCadenceSettings(t,r)),deleteAgent:(e,{agentId:t},r)=>(st(r),A.deleteAgent(t))},Subscription:{agentEvents:{subscribe:(e,{agentId:t},A)=>{if(se(A)!==t)throw Error("An agent may only subscribe to its own events");return aE.iterate(aC(t))}},agentChanged:{subscribe:(e,{agentId:t},A)=>(t?sA(A,t):st(A),aE.iterate(ay,t?e=>e.agentChanged.id===t:void 0))},agentJobChanged:{subscribe:async(e,{jobId:t},r)=>(await sr(r,A,t),aE.iterate(aw(t)))},agentJobLogAdded:{subscribe:async(e,{jobId:t},r)=>(await sr(r,A,t),aE.iterate(aQ(t)))}}},{Query:{jiraSettings:(e,t,A)=>(sp(A),r.getSettings()),jiraAvailableProjects:(e,t,A)=>(sp(A),r.availableProjects()),jiraProjects:(e,t,A)=>(sp(A),r.listProjects()),jiraProjectStatuses:(e,{projectId:t},A)=>(sp(A),r.projectStatuses(t)),jiraTicketBoard:(e,{sourceId:t},A)=>(sp(A),r.ticketBoard(t)),jiraTicket:(e,{issueKey:t},A)=>(sp(A),r.ticket(t)),jiraAssignableUsers:(e,{issueKey:t,query:A},i)=>(sp(i),r.assignableUsers(t,A)),jiraTicketTransitions:(e,{issueKey:t},A)=>(sp(A),r.ticketTransitions(t)),jiraTicketEditFields:(e,{issueKey:t},A)=>(sp(A),r.ticketEditFields(t)),jiraTicketChanges:(e,{issueKey:t,limit:A,offset:i},n)=>(sp(n),r.ticketChanges(t,A,i)),jiraTicketWorklogs:(e,{issueKey:t,limit:A,offset:i},n)=>(sp(n),r.ticketWorklogs(t,A,i)),jiraCacheMetrics:(e,t,A)=>(sp(A),r.cacheMetrics()),jiraApiCalls:(e,{limit:t,offset:A},i)=>(sp(i),r.listApiCalls(t,A)),jiraCachedTickets:(e,{limit:t,offset:A},i)=>(sp(i),r.listCachedTickets(t,A)),jiraCachedTicket:(e,{issueKey:t},A)=>(sp(A),r.cachedTicket(t))},Mutation:{saveJiraSettings:(e,{input:t},A)=>(sp(A),r.saveSettings(t)),testJiraConnection:(e,t,A)=>(sp(A),r.testConnection()),clearJiraCredentials:(e,t,A)=>(sp(A),r.clearCredentials()),addJiraProject:(e,{jiraId:t},A)=>(sp(A),r.addProject(t)),removeJiraProject:(e,{projectId:t},A)=>(sp(A),r.removeProject(t)),createJiraSource:(e,{input:t},A)=>(sp(A),r.createSource(t)),updateJiraSource:(e,{input:t},A)=>(sp(A),r.updateSource(t)),deleteJiraSource:(e,{id:t},A)=>(sp(A),r.deleteSource(t)),updateJiraProjectDisplaySettings:(e,{input:t},A)=>(sp(A),r.updateProjectDisplaySettings(t)),updateJiraProjectBranchNaming:(e,{projectId:t,branchNamingScript:A},i)=>(sp(i),r.updateProjectBranchNaming(t,A)),refreshJiraSource:(e,{sourceId:t},A)=>(sp(A),r.ticketBoard(t,!0)),updateJiraCacheTtl:(e,{ttlMinutes:t},A)=>(sp(A),r.updateCacheTtl(t)),clearJiraCache:(e,t,A)=>(sp(A),r.clearCache()),clearJiraApiCalls:(e,t,A)=>(sp(A),r.clearApiCalls()),refreshJiraCachedTicket:(e,{issueKey:t},A)=>(sp(A),r.refreshCachedTicket(t)),deleteJiraCachedTicket:(e,{issueKey:t},A)=>(sp(A),r.deleteCachedTicket(t)),addJiraComment:(e,{issueKey:t,content:A},i)=>(sp(i),r.addComment(t,A)),assignJiraTicket:(e,{issueKey:t,accountId:A},i)=>(sp(i),r.assignTicket(t,A??null)),transitionJiraTicket:(e,{issueKey:t,transitionId:A},i)=>(sp(i),r.transitionTicket(t,A)),updateJiraTicket:(e,{input:t},A)=>(sp(A),r.updateTicket(t))}},{Query:{githubSettings:(e,t,A)=>(cT(A),i.getSettings()),githubRateLimitSnapshots:(e,t,A)=>(cT(A),i.rateLimitSnapshots()),githubCacheMetrics:(e,t,A)=>(cT(A),i.cacheMetrics()),githubApiCalls:(e,{limit:t,offset:A,apiType:r,requestSource:n,source:a},s)=>(cT(s),i.apiCalls(t,A,{apiType:r,requestSource:n,source:a})),githubCachedEntries:(e,{limit:t,offset:A},r)=>(cT(r),i.cachedEntries(t,A)),githubCachedEntry:(e,{id:t},A)=>(cT(A),i.cachedEntry(t)),githubCacheTtlOverrides:(e,t,A)=>(cT(A),i.cacheTtlOverrides()),githubCacheableGraphqlOperations:(e,t,A)=>(cT(A),i.cacheableGraphqlOperations()),githubAppSettings:(e,t,A)=>(cT(A),i.getAppSettings()),githubWebhooksEnabled:(e,t,A)=>(cT(A),i.webhooksEnabled()),githubWebhookDeliveries:(e,{limit:t,offset:A},r)=>(cT(r),i.webhookDeliveries(t??50,A??0)),githubRepositories:(e,t,A)=>(cT(A),i.listRepositories()),githubAvailableRepositories:(e,{after:t},A)=>(cT(A),i.availableRepositories(t)),githubActionsWorkflowRuns:(e,{source:t,codebaseRepositoryId:A,branch:r,workflowId:n,first:a,after:s},o)=>(cT(o),i.actionsWorkflowRuns(A,a??25,s,r,n,t)),githubActionsWorkflowJobs:(e,{source:t,codebaseRepositoryId:A,workflowRunId:r},n)=>(cT(n),i.actionsWorkflowJobs(A,r,t)),githubActionsWorkflowRunAttempt:(e,{source:t,repositoryId:A,workflowRunId:r,attempt:n},a,s)=>(cT(a),i.actionsWorkflowRunAttempt(A,r,n,cN(s),t)),githubWorktreeWorkflowRuns:(e,{worktreeId:t},A)=>(cT(A),i.worktreeWorkflowRuns(t)),githubRepositoryWorkflows:(e,{source:t,codebaseRepositoryId:A},r)=>(cT(r),i.repositoryWorkflows(A,t)),githubAutoRetryRules:(e,{codebaseRepositoryId:t,workflowRunId:A},r)=>(cT(r),i.autoRetryRules({codebaseRepositoryId:t,workflowRunId:A})),githubPullRequests:(e,{source:t,scope:A,repositoryId:r,state:n,first:a,after:s},o,l)=>(cT(o),i.pullRequests(A,r,{includePipelineJobs:cN(l),state:n??"OPEN",first:a??25,after:s,requestSource:t})),githubPullRequest:(e,{owner:t,name:A,number:r},n)=>(cT(n),i.pullRequest(t,A,r)),githubPullRequestMergeOptions:(e,{source:t,owner:A,name:r,number:n},a)=>(cT(a),i.pullRequestMergeOptions(A,r,n,t)),githubReviewThreads:(e,t,A)=>(cT(A),i.reviewThreads()),githubPipelineStatuses:(e,{keys:t},A)=>(cT(A),i.pipelineStatus.snapshots(t)),githubPipelineRecords:(e,{keys:t},A)=>(cT(A),i.pipelineStatus.records(t))},Mutation:{saveGitHubSettings:(e,{input:t},A)=>(cT(A),i.saveSettings(t)),updateGitHubCacheTtl:(e,{ttlMinutes:t},A)=>(cT(A),i.updateCacheTtl(t)),saveGitHubCacheTtlOverride:(e,{input:t},A)=>(cT(A),i.saveCacheTtlOverride(t.operation,t.ttlSeconds)),deleteGitHubCacheTtlOverride:(e,{operation:t},A)=>(cT(A),i.deleteCacheTtlOverride(t)),clearGitHubCache:(e,t,A)=>(cT(A),i.clearCache()),clearGitHubApiCalls:(e,t,A)=>(cT(A),i.clearApiCalls()),clearGitHubWebhookDeliveries:(e,t,A)=>(cT(A),i.clearWebhookDeliveries()),refreshGitHubCachedEntry:(e,{id:t},A)=>(cT(A),i.refreshCachedEntry(t)),deleteGitHubCachedEntry:(e,{id:t},A)=>(cT(A),i.deleteCachedEntry(t)),saveGitHubAppSettings:(e,{input:t},A)=>(cT(A),i.saveAppSettings(t,cM(A),A.requestOrigin)),testGitHubConnection:(e,t,A)=>(cT(A),i.testConnection()),testGitHubAppConnection:(e,t,A)=>(cT(A),i.testAppConnection(cM(A))),clearGitHubCredentials:(e,t,A)=>(cT(A),i.clearCredentials()),clearGitHubAppCredentials:(e,t,A)=>(cT(A),i.clearAppCredentials(cM(A))),addGitHubRepository:(e,{input:t},A)=>(cT(A),i.addRepository(t)),updateGitHubRepository:(e,{input:t},A)=>(cT(A),i.updateRepository(t)),removeGitHubRepository:(e,{id:t},A)=>(cT(A),i.removeRepository(t)),mergeGitHubPullRequest:async(e,{input:t,source:A},r)=>(cT(r),await i.mergePullRequest(t,A)),createGitHubPullRequest:async(e,{input:t},A)=>{cT(A);let r=await i.createPullRequest(t),{owner:n,name:a}=cu(`${t.owner}/${t.name}`);return await o.attachPullRequestForBranch(`github.com/${n}/${a}`,r.headRefName,r),r},setGitHubPullRequestLabels:(e,{input:t},A)=>(cT(A),i.setPullRequestLabels(t)),retryGitHubPipeline:(e,{repositoryId:t,checkSuiteId:A,source:r},n)=>(cT(n),i.retryPipeline(t,A,r,cM(n))),retryGitHubWorkflowJob:(e,{repositoryId:t,checkSuiteId:A,jobId:r,source:n},a)=>(cT(a),i.retryWorkflowJob(t,A,r,n,cM(a))),cancelGitHubActionsWorkflowRun:(e,{codebaseRepositoryId:t,workflowRunId:A,force:r,source:n},a)=>(cT(a),i.cancelActionsWorkflowRun(t,A,r,n,cM(a))),saveGitHubAutoRetryRule:(e,{input:t},A)=>(cT(A),i.saveAutoRetryRule(t)),setGitHubAutoRetryRuleEnabled:(e,{id:t,enabled:A},r)=>(cT(r),i.setAutoRetryRuleEnabled(t,A)),deleteGitHubAutoRetryRule:(e,{id:t},A)=>(cT(A),i.deleteAutoRetryRule(t)),replyToGitHubReviewThread:(e,{threadId:t,body:A},r)=>(cT(r),i.replyToReviewThread(t,A)),setGitHubReviewThreadResolved:(e,{threadId:t,resolved:A},r)=>(cT(r),i.setReviewThreadResolved(t,A))},Subscription:{githubPipelineStatusChanged:{subscribe:(e,t,A)=>(cT(A),i.pipelineStatus.subscribe())}}},{CcusageCollection:{aggregate:(e,{range:t="ALL"})=>(function(e,t,A=new Date){let r;if(null===t)return e;let i=new Date(A);i.setHours(0,0,0,0),i.setDate(i.getDate()-(t-1));let n=(r=e=>String(e).padStart(2,"0"),`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`),a=e.days.filter(e=>e.period>=n),s=ss();return a.forEach(e=>so(s,e)),{days:a,totals:s}})(e.aggregate,su[t])},CcusageModelUsage:{unattributed:e=>e.unattributed??!1},Query:{ccusageCollection:async(e,{id:t},A)=>(sd(A),await n.initialize(),n.getCollection(t))},Mutation:{collectCcusage:async(e,{requestId:t},A)=>(sd(A),await n.initialize(),n.collect(t))},Subscription:{ccusageCollectionChanged:{subscribe:async(e,{id:t},A)=>(sd(A),await n.initialize(),n.subscribe(t)),resolve:e=>e}}},{DerivedDataDeletionHistory:{deletedAt:e=>e.deletedAt.toISOString()},Query:{derivedDataCollection:(e,{id:t},A)=>(sh(A),c.getCollection(t)),derivedDataDeletionHistory:(e,{first:t,after:A},r)=>(sh(r),c.history(t,A))},Mutation:{refreshDerivedData:(e,{requestId:t},A)=>(sh(A),c.refresh(t)),calculateDerivedDataSizes:(e,{collectionId:t,entryIds:A,requestId:r},i)=>(sh(i),c.calculateSizes(t,A,r)),deleteDerivedDataEntries:(e,{collectionId:t,entryIds:A,requestId:r,overrideProtection:i},n)=>(sh(n),c.deleteEntries(t,A,r,i)),setDerivedDataEntryLocked:(e,{collectionId:t,entryId:A,locked:r},i)=>(sh(i),c.setEntryLocked(t,A,r)),clearDerivedDataDeletionHistory:(e,t,A)=>(sh(A),c.clearHistory())},Subscription:{derivedDataCollectionChanged:{subscribe:(e,{id:t},A)=>(sh(A),c.subscribe(t)),resolve:e=>e}}},{CodebaseOverview:{repositories:e=>Array.isArray(e)?e:e.repositories??[]},CodebaseRepository:{quickActionWorkflows:async e=>(await am()).workflow.findMany({where:{archivedAt:null,quickActionKind:{not:"NONE"},OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:e.id}}}]},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}}},orderBy:[{name:"asc"},{id:"asc"}]}),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},CodebaseSettings:{updatedAt:e=>e.updatedAt.toISOString()},Codebase:{lastCheckedAt:e=>cF(e.lastCheckedAt),lastFetchedAt:e=>cF(e.lastFetchedAt),lastFetchAttemptAt:e=>cF(e.lastFetchAttemptAt),localBranches:e=>{try{let t=JSON.parse(e.localBranchesJson);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}},remoteBranches:e=>{try{let t=JSON.parse(e.remoteBranchesJson);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}},createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),activeJob:e=>e.jobs?.[0]??null},AgentCodebaseRegistration:{canonicalOrigin:e=>e.repository.canonicalOrigin,keepBaseBranchUpToDate:e=>e.repository.keepBaseBranchUpToDate,worktrees:e=>e.worktrees??[],lastFetchedAt:e=>cF(e.lastFetchedAt),lastFetchAttemptAt:e=>cF(e.lastFetchAttemptAt)},Query:{codebaseOverview:async(e,t,A)=>(cU(A),a.overview()),codebaseRepository:(e,{id:t},A)=>(cU(A),a.repositoryDetail(t)),codebase:(e,{id:t},A)=>(cU(A),a.detail(t)),codebaseSettings:(e,t,A)=>(cU(A),a.settings()),agentCodebases:(e,t,A)=>a.agentCodebases(cO(A)),agentCodebaseConfiguration:(e,t,A)=>a.agentConfiguration(cO(A))},Mutation:{browseAgentDirectory:(e,{input:t},A)=>(cU(A),a.browse(t.agentId,t.path??null,t.requestId)),inspectAgentCodebase:(e,{input:t},A)=>(cU(A),a.inspect(t.agentId,t.folder,t.requestId)),confirmCodebase:(e,{input:t},A)=>(cU(A),a.confirm(t)),updateCodebaseRepository:(e,{input:t},A)=>(cU(A),a.updateRepository(t.id,t.name,t.description,t.jiraBranchRegex,t.keepBaseBranchUpToDate,t.skillGroupIds)),updateCodebaseSettings:(e,{input:t},A)=>(cU(A),a.updateSettings(t)),removeCodebase:(e,{id:t},A)=>(cU(A),a.removeCodebase(t)),refreshCodebases:(e,{input:t},A)=>(cU(A),a.runOperation(rM,t.codebaseIds,t.requestId)),fetchCodebases:(e,{input:t},A)=>(cU(A),a.runOperation(rN,t.codebaseIds,t.requestId)),inspectCodebaseGitState:(e,{input:t},A)=>(cU(A),a.inspectGitState(t.codebaseId,t.requestId)),inspectCodebaseStash:(e,{input:t},A)=>(cU(A),a.inspectStash(t.codebaseId,t.stashOid,t.requestId)),runCodebaseGitOperation:(e,{input:t},A)=>(cU(A),a.runGitOperation(t)),reportCodebaseStatuses:(e,{reports:t},A)=>a.report(cO(A),t)},Subscription:{codebaseOverviewChanged:{subscribe:(e,t,A)=>(cU(A),a.subscribe())}}},{Query:{externalMcpServers:(e,t,A)=>(c_(A),s.externalServers()),mcpToolPresets:(e,{kind:t},A)=>(c_(A),s.mcpToolPresets(t)),toolCallAudits:(e,{first:t,toolName:A,resultStatus:r},i)=>(c_(i),s.toolCallAudits({first:t,toolName:A,resultStatus:r}))},Mutation:{clearToolCallAudits:(e,t,A)=>(c_(A),s.clearToolCallAudits()),createExternalMcpServer:(e,{input:t},A)=>(c_(A),s.createExternalServer(t)),updateExternalMcpServer:(e,{id:t,input:A},r)=>(c_(r),s.updateExternalServer(t,A)),deleteExternalMcpServer:(e,{id:t},A)=>(c_(A),s.deleteExternalServer(t)),createMcpToolPreset:(e,{input:t},A)=>(c_(A),s.createMcpToolPreset(t)),updateMcpToolPreset:(e,{id:t,input:A},r)=>(c_(r),s.updateMcpToolPreset(t,A)),deleteMcpToolPreset:(e,{id:t},A)=>(c_(A),s.deleteMcpToolPreset(t))}},{WorktreeLatestBuild:{destination:e=>JSON.parse(e.destinationJson),createdAt:e=>e.createdAt.toISOString()},Worktree:{lastCheckedAt:e=>cH(e.lastCheckedAt),missingAt:e=>cH(e.missingAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),autoSync:e=>e.autoSync?{...e.autoSync,lastSyncedAt:cH(e.autoSync.lastSyncedAt),updatedAt:e.autoSync.updatedAt.toISOString()}:null,autoMerge:e=>e.autoMerge?{...e.autoMerge,updatedAt:e.autoMerge.updatedAt.toISOString()}:null},WorktreeTag:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorktreeSettings:{updatedAt:e=>e.updatedAt.toISOString()},WorktreeMove:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>cH(e.finishedAt)},Query:{worktreeOverview:(e,t,A)=>(cL(A),o.overview()),hiddenWorktrees:(e,t,A)=>(cL(A),o.hidden()),worktreeSettings:(e,t,A)=>(cL(A),o.settings()),previewWorktreeTicketBranch:(e,{input:t},A)=>(cL(A),o.previewTicketBranch(t)),worktreeMove:(e,{id:t},A)=>(cL(A),o.getMove(t)),worktreeAutoSync:(e,{worktreeId:t},A)=>(cL(A),l.autoSync(t)),worktreeAutoMerge:(e,{worktreeId:t},A)=>(cL(A),l.autoMerge(t))},Mutation:{refreshWorktreePullRequest:(e,{id:t},A)=>(cL(A),o.refreshPullRequest(t)),refreshWorktrees:(e,t,A)=>(cL(A),o.requestRefresh()),reportWorktrees:(e,{reports:t},A)=>o.report(cG(A),t),reportWorktreeActivity:(e,{input:t},A)=>o.reportActivity(cG(A),t),inspectWorktree:(e,{id:t,requestId:A},r)=>(cL(r),o.inspect(t,A)),inspectWorktreeDiff:(e,{input:t},A)=>(cL(A),o.inspectDiff(t.worktreeId,{scope:t.scope,path:t.path,previousPath:t.previousPath,commitSha:t.commitSha},t.requestId)),runWorktreeOperation:(e,{input:t},A)=>(cL(A),o.runOperation(t.worktreeId,t.operation,t.requestId)),createWorktree:(e,{input:t},A)=>(cL(A),o.createWorktree(t)),changeWorktreeBranch:(e,{input:t},A)=>(cL(A),o.changeWorktreeBranch(t)),moveWorktree:(e,{input:t},A)=>(cL(A),o.moveWorktree(t)),retryWorktreeMoveWithStash:(e,{id:t},A)=>(cL(A),o.retryWorktreeMoveWithStash(t)),cancelWorktreeMove:(e,{id:t},A)=>(cL(A),o.cancelWorktreeMove(t)),deleteWorktree:(e,{input:t},A)=>(cL(A),o.deleteWorktree(t)),updateWorktreeBaseBranch:(e,{id:t,baseBranch:A},r)=>(cL(r),o.updateBaseBranch(t,A??null)),updateWorktreeHighlight:(e,{id:t,color:A},r)=>(cL(r),o.updateHighlight(t,A??null)),setWorktreeTags:(e,{id:t,tagIds:A},r)=>(cL(r),o.setTags(t,A)),saveWorktreeTag:(e,{input:t},A)=>(cL(A),o.saveTag(t)),deleteWorktreeTag:(e,{id:t},A)=>(cL(A),o.deleteTag(t)),saveWorktreeSettings:(e,{editorVariant:t},A)=>(cL(A),o.saveSettings(t)),purgeHiddenWorktree:(e,{id:t},A)=>(cL(A),o.purge(t)),purgeAllHiddenWorktrees:(e,t,A)=>(cL(A),o.purgeAll()),configureWorktreeAutoSync:(e,{input:t},A)=>(cL(A),l.configureAutoSync(t)),cancelWorktreeAutoSync:(e,{worktreeId:t},A)=>(cL(A),l.cancelAutoSync(t)),retryWorktreeAutoSync:(e,{worktreeId:t},A)=>(cL(A),l.retryAutoSync(t)),configureWorktreeAutoMerge:(e,{input:t},A)=>(cL(A),l.configureAutoMerge(t)),cancelWorktreeAutoMerge:(e,{worktreeId:t},A)=>(cL(A),l.cancelAutoMerge(t)),retryWorktreeAutoMerge:(e,{worktreeId:t},A)=>(cL(A),l.retryAutoMerge(t))},Subscription:{worktreeOverviewChanged:{subscribe:(e,t,A)=>(cL(A),o.subscribe())},worktreeInspectionChanged:{subscribe:(e,{worktreeId:t},A)=>(cL(A),o.subscribeInspection(t))}}},{CodebaseRepository:{skillGroups:e=>u.groupsForRepository(e.id)},Skill:{groups:e=>e.groups?.map(e=>e.group)??[],createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillFile:{contentsBase64:e=>Buffer.from(e.contents).toString("base64"),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillGroup:{skills:e=>e.skills?.map(e=>e.skill)??[],repositories:e=>e.repositories?.map(e=>e.repository)??[],createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillSettings:{updatedAt:e=>e.updatedAt.toISOString()},SkillToolObservation:{checkedAt:e=>e.checkedAt.toISOString()},SkillInstallation:{consumers:e=>{try{return JSON.parse(e.consumersJson)}catch{return[]}},lastSeenAt:e=>e.lastSeenAt.toISOString()},SkillSyncItem:{candidatePackage:e=>{try{return e.candidatePackageJson?JSON.parse(e.candidatePackageJson):null}catch{return null}},createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillSyncRun:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>{let t;return t=e.finishedAt,t?.toISOString()??null}},Query:{skillsOverview:(e,{search:t},A)=>(cP(A),u.overview(t??"")),skill:(e,{id:t},A)=>(cP(A),u.getSkill(t)),skillSyncRun:(e,{id:t},A)=>(cP(A),u.getRun(t))},Mutation:{saveSkill:(e,{input:t},A)=>(cP(A),u.saveSkill(t)),deleteSkill:(e,{id:t},A)=>(cP(A),u.deleteSkill(t)),saveSkillGroup:(e,{input:t},A)=>(cP(A),u.saveGroup(t)),deleteSkillGroup:(e,{id:t},A)=>(cP(A),u.deleteGroup(t)),saveSkillSettings:(e,{input:t},A)=>(cP(A),u.saveSettings(t)),prepareSkillSync:(e,{kind:t,groupId:A},r)=>(cP(r),u.prepareSync(t,A??null)),skipPendingSkillSync:(e,{runId:t},A)=>(cP(A),u.skipPending(t)),resolveSkillSyncItem:(e,{input:t},A)=>{var r;return cP(A),u.resolveItem({...t,package:t.package?ix({...r=t.package,packageHash:r.packageHash||iS(r.files)}):null})},applySkillSync:(e,{runId:t},A)=>(cP(A),u.applyRun(t))},Subscription:{skillsChanged:{subscribe:(e,t,A)=>(cP(A),u.subscribe()),resolve:()=>u.overview()},skillSyncRunChanged:{subscribe:(e,{runId:t},A)=>(cP(A),u.subscribeRun(t)),resolve:(e,{runId:t})=>u.getRun(t)}}},{CodebaseProject:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildConfiguration:{advancedSettings:e=>cV(e.advancedSettingsJson,{}),exportSettings:e=>e.exportSettingsJson?cV(e.exportSettingsJson,null):null,observation:e=>e.source?.observations?.[0]??null,createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildSourceObservation:{schemes:e=>cV(e.schemesJson,[]),configurations:e=>cV(e.configurationsJson,[]),testPlans:e=>cV(e.testPlansJson,[]),lastParseAttemptAt:e=>e.lastParseAttemptAt.toISOString(),lastParsedAt:e=>cq(e.lastParsedAt)},BuildScript:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildArtifact:{metadata:e=>cV(e.metadataJson,{}),createdAt:e=>e.createdAt.toISOString()},BuildReport:{summary:e=>cV(e.summaryJson,{}),data:async e=>cV("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{}),testSummary:e=>"TEST_RESULTS"===e.kind&&"READY"===e.status?cV(e.summaryJson,{}):null,tests:async e=>{if("TEST_RESULTS"!==e.kind)return[];let t=cV("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.tests)?t.tests:[]},coverageSummary:e=>"CODE_COVERAGE"===e.kind&&"READY"===e.status?cV(e.summaryJson,{}):null,coverageFiles:async e=>{if("CODE_COVERAGE"!==e.kind)return[];let t=cV("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.files)?t.files:[]},changedCoverageFiles:async e=>{if("CODE_COVERAGE"!==e.kind)return[];let t=cV("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.changedFiles)?t.changedFiles:[]},build:e=>e.build??d.getBuild(e.buildId),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>cq(e.finishedAt)},BuildDeployment:{destination:e=>cV(e.destinationJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>cq(e.startedAt),finishedAt:e=>cq(e.finishedAt)},BuildExport:{settings:e=>cV(e.settingsSnapshotJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>cq(e.startedAt),finishedAt:e=>cq(e.finishedAt)},Build:{reports:e=>e.reports??d.reportsForBuild(e.id),destination:e=>cV(e.destinationJson,{}),snapshot:e=>cV(e.snapshotJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>cq(e.startedAt),finishedAt:e=>cq(e.finishedAt),updatedAt:e=>e.updatedAt.toISOString(),durationMs:e=>e.startedAt&&e.finishedAt?Math.max(0,e.finishedAt.getTime()-e.startedAt.getTime()):null,outOfDate:cY},BuildLogChunk:{createdAt:e=>e.createdAt instanceof Date?e.createdAt.toISOString():e.createdAt},Query:{iosAppProject:(e,{codebaseId:t},A)=>(cj(A),d.project(t)),buildSigningOptions:(e,{buildId:t},A)=>(cj(A),d.signingOptionsForBuild(t)),buildScripts:(e,t,A)=>(cj(A),d.scripts()),builds:(e,t,A)=>(cj(A),d.builds(t)),build:(e,{id:t},A)=>(cj(A),d.getBuild(t)),buildLogChunks:(e,t,A)=>(cj(A),d.logChunks(t.buildId,t.after,t.first)),worktreeCoverageReports:(e,{worktreeId:t},A)=>(cj(A),d.coverageHistory(t))},Mutation:{createIosAppProject:(e,{codebaseId:t},A)=>(cj(A),d.createProject(t)),saveBuildConfiguration:(e,{input:t},A)=>(cj(A),d.saveConfiguration(t)),deleteBuildConfiguration:(e,{id:t},A)=>(cj(A),d.deleteConfiguration(t)),discoverBuildSources:(e,t,A)=>(cj(A),d.discoverSources(t.worktreeId,t.requestId)),inspectBuildSource:(e,{input:t},A)=>(cj(A),d.inspectSource(t)),reparseBuildConfiguration:(e,t,A)=>(cj(A),d.reparse(t.configurationId,t.worktreeId,t.requestId)),inspectBuildDestinations:(e,{input:t},A)=>(cj(A),d.destinations(t)),inspectBuildRunDestinations:(e,t,A)=>(cj(A),d.destinationsForBuild(t.buildId,t.requestId)),saveBuildScript:(e,{input:t},A)=>(cj(A),d.saveScript(t)),deleteBuildScript:(e,{id:t},A)=>(cj(A),d.deleteScript(t)),setCodebaseBuildScripts:(e,t,A)=>(cj(A),d.setAllowedScripts(t.codebaseId,t.scriptIds)),startBuild:(e,{input:t},A)=>(cj(A),d.startBuild({...t,telemetryRequestOrigin:A.requestOrigin})),rebuildBuild:(e,{id:t,requestId:A},r)=>(cj(r),d.rebuildBuild(t,A,r.requestOrigin)),cancelBuild:(e,{id:t},A)=>(cj(A),d.cancelBuild(t)),deleteBuilds:(e,{ids:t},A)=>(cj(A),d.deleteBuilds(t)),runBuild:(e,{input:t},A)=>(cj(A),d.runBuild(t)),exportBuildArchive:(e,{input:t},A)=>(cj(A),d.exportArchive(t)),parseBuildTestResults:(e,t,A)=>(cj(A),d.generateReport(t.buildId,"TEST_RESULTS",t.requestId)),generateBuildCoverageReport:(e,t,A)=>(cj(A),d.generateReport(t.buildId,"CODE_COVERAGE",t.requestId)),startWorktreeCoverage:(e,{input:t},A)=>(cj(A),d.startWorktreeCoverage({...t,telemetryRequestOrigin:A.requestOrigin})),reportBuildProgress:(e,{input:t},A)=>d.reportProgress(c$(A),t),appendBuildLogChunks:(e,{buildId:t,chunks:A},r)=>d.appendLogChunks(c$(r),t,A)},Subscription:{buildsChanged:{subscribe:(e,t,A)=>(cj(A),aE.iterate(aR))},buildChanged:{subscribe:(e,{id:t},A)=>(cj(A),aE.iterate(aZ(t)))},buildLogChunkAdded:{subscribe:(e,{buildId:t},A)=>(cj(A),aE.iterate(aX(t)))}}},{IosDevice:cz,IosDeviceSummary:cz,IosDeviceEnrollment:{expiresAt:e=>e.expiresAt.toISOString(),downloadedAt:e=>cW(e.downloadedAt),consumedAt:e=>cW(e.consumedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},IosDeviceIpObservation:{observedAt:e=>e.observedAt.toISOString()},Query:{iosDevices:(e,{status:t},A)=>(cK(A),h.devices(t)),iosDevice:(e,{id:t},A)=>(cK(A),h.device(t)),iosDeviceFirmware:(e,{id:t},A)=>(cK(A),h.deviceFirmware(t)),iosDeviceSettings:(e,t,A)=>(cK(A),h.getSettings())},Mutation:{renameIosDevice:(e,{id:t,displayName:A},r)=>(cK(r),h.renameDevice(t,A)),rejectIosDevice:(e,{id:t},A)=>(cK(A),h.rejectDevice(t)),deleteIosDevice:(e,{id:t},A)=>(cK(A),h.deleteDevice(t)),registerIosDevice:(e,{id:t},A)=>(cK(A),h.registerDevice(t)),saveIosProfileSettings:(e,{input:t},A)=>(cK(A),h.saveProfileSettings(t)),regenerateIosProfileSigner:(e,t,A)=>(cK(A),h.regenerateProfileSignerView()),saveAppStoreConnectSettings:(e,{input:t},A)=>(cK(A),h.saveAppStoreConnectSettings(t)),testAppStoreConnectSettings:(e,t,A)=>(cK(A),h.testAppStoreConnectSettings()),clearAppStoreConnectSettings:(e,t,A)=>(cK(A),h.clearAppStoreConnectSettings())},Subscription:{iosDevicesChanged:{subscribe:(e,t,A)=>(cK(A),h.subscribe()),resolve:e=>e}}},{Query:{telemetryTimeline:(e,{input:t},A)=>(cZ(A),p.timeline(t)),telemetryEntries:(e,{ids:t},A)=>(cZ(A),p.entries(t)),telemetryFacets:(e,{view:t},A)=>(cZ(A),p.facets(t)),telemetryFields:(e,{view:t},A)=>(cZ(A),p.fields(t)),telemetrySettings:(e,{requestOrigin:t},A)=>(cZ(A),p.settings(cX(t))),telemetryViewSettings:(e,{view:t},A)=>(cZ(A),p.viewSettings(t)),telemetryColumnPresets:(e,{view:t},A)=>(cZ(A),p.columnPresets(t)),telemetrySavedFilters:(e,{view:t},A)=>(cZ(A),p.savedFilters(t))},Mutation:{saveTelemetrySettings:(e,{input:t,requestOrigin:A},r)=>(cZ(r),p.saveSettings(t,cX(A))),saveTelemetryViewSettings:(e,{input:t},A)=>(cZ(A),p.saveViewSettings(t)),saveTelemetryColumnPreset:(e,{input:t},A)=>(cZ(A),p.saveColumnPreset(t)),deleteTelemetryColumnPreset:(e,{id:t},A)=>(cZ(A),p.deleteColumnPreset(t)),saveTelemetryFilter:(e,{input:t},A)=>(cZ(A),p.saveFilter(t)),deleteTelemetryFilter:(e,{id:t},A)=>(cZ(A),p.deleteFilter(t)),addTelemetrySeparator:(e,{name:t},A)=>(cZ(A),p.addSeparator(t)),updateTelemetryHighlight:(e,{id:t,color:A},r)=>(cZ(r),p.highlight(t,A??null)),clearSelectedTelemetry:(e,{selection:t},A)=>(cZ(A),p.clearSelected(t)),clearTelemetry:(e,{view:t,includeSeparators:A},r)=>(cZ(r),p.clearAll(t,A)),clearTelemetryBeforeLatestSeparator:(e,{view:t},A)=>(cZ(A),p.clearBeforeLatestSeparator(t))},Subscription:{telemetryEntriesChanged:{subscribe:(e,t,A)=>(cZ(A),p.subscribe()),resolve:e=>e},telemetrySettingsChanged:{subscribe:(e,t,A)=>(cZ(A),p.subscribeSettings()),resolve:e=>e}}},{LocalSigningProfile:{provisionedDevices:e=>g.profileDevices(e.deviceUdids)},SigningOperation:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>c1(e.finishedAt)},SigningOperationItem:{createdAt:e=>e.createdAt.toISOString(),finishedAt:e=>c1(e.finishedAt)},Query:{signingAgents:(e,t,A)=>(c0(A),g.agents()),signingProfiles:(e,t,A)=>(c0(A),g.profiles()),signingProfile:(e,{id:t},A)=>(c0(A),g.profile(t)),signingCertificates:(e,t,A)=>(c0(A),g.certificates()),signingOperations:(e,{limit:t},A)=>(c0(A),g.operations(t)),appleDeveloperInventory:(e,t,A)=>(c0(A),g.portalInventory())},Mutation:{refreshSigningAssets:(e,{agentIds:t},A)=>(c0(A),g.refresh(t??void 0)),uploadSigningProfile:(e,t,A)=>(c0(A),g.uploadProfile(t.contentBase64,t.targetAgentIds)),downloadSigningProfile:(e,t,A)=>(c0(A),g.downloadProfile(t.uuid,t.agentId)),syncSigningProfile:(e,t,A)=>(c0(A),g.syncProfile(t.uuid,t.sourceAgentId,t.targetAgentIds)),deleteSigningProfile:(e,t,A)=>(c0(A),g.deleteProfile(t.uuid,t.agentIds)),deleteExpiredSigningProfiles:(e,{agentIds:t},A)=>(c0(A),g.deleteExpiredProfiles(t??void 0)),importSigningIdentity:(e,t,A)=>(c0(A),g.importIdentity(t)),deleteSigningIdentity:(e,t,A)=>(c0(A),g.deleteIdentity(t.sha1,t.agentIds)),createApplePortalProfile:(e,{input:t},A)=>(c0(A),g.createPortalProfile(t)),deleteApplePortalProfile:(e,{id:t},A)=>(c0(A),g.deletePortalProfile(t)),revokeApplePortalCertificate:(e,{id:t},A)=>(c0(A),g.revokePortalCertificate(t))},Subscription:{signingAssetsChanged:{subscribe:(e,t,A)=>(c0(A),g.subscribe()),resolve:()=>!0}}},{ApnsRegistration:{...ug,tokenMasked:e=>e.tokenMasked??(e.token?`${e.token.slice(0,8)}…${e.token.slice(-8)}`:"—"),supportedPushTypes:e=>e.supportedPushTypes??(e.pushTypesJson?JSON.parse(e.pushTypesJson):[]),pushMagicConfigured:e=>!!e.pushMagic,invalidatedAt:e=>up(e.invalidatedAt),lastFailureAt:e=>up(e.lastFailureAt),lastRegisteredAt:e=>e.lastRegisteredAt.toISOString(),lastSentAt:e=>up(e.lastSentAt)},ApnsCertificateCredential:{...ug,expiresAt:e=>up(e.expiresAt),lastTestedAt:e=>up(e.lastTestedAt)},PushNotificationSettings:{updatedAt:e=>e.updatedAt.toISOString(),tokenConfiguredAt:e=>up(e.tokenConfiguredAt),tokenLastUsedAt:e=>up(e.tokenLastUsedAt)},ApnsBroadcastChannel:ug,PushNotificationPreset:{...ug,editor:e=>JSON.parse(e.editorJson)},PushNotificationBatch:{...ug,editor:e=>JSON.parse(e.editorJson),payload:e=>JSON.parse(e.payloadJson),headers:e=>JSON.parse(e.headersJson),startedAt:e=>up(e.startedAt),finishedAt:e=>up(e.finishedAt)},PushNotificationDelivery:{createdAt:e=>e.createdAt.toISOString(),startedAt:e=>up(e.startedAt),finishedAt:e=>up(e.finishedAt),responseTimestamp:e=>up(e.responseTimestamp)},Query:{apnsRegistrations:(e,t,A)=>(uh(A),m.registrations()),pushNotificationSettings:(e,t,A)=>(uh(A),m.settings()),apnsBroadcastChannels:(e,t,A)=>(uh(A),m.channels()),pushNotificationPresets:(e,t,A)=>(uh(A),m.presets()),pushNotificationHistory:(e,{limit:t},A)=>(uh(A),m.history(t)),validatePushNotification:(e,{editor:t},A)=>(uh(A),ur(t))},Mutation:{renameApnsRegistration:(e,t,A)=>(uh(A),m.renameRegistration(t.id,t.displayName)),setApnsRegistrationActive:(e,t,A)=>(uh(A),m.setRegistrationActive(t.id,t.active)),deleteApnsRegistration:(e,{id:t},A)=>(uh(A),m.deleteRegistration(t)),saveApnsTokenSettings:(e,{input:t},A)=>(uh(A),m.saveTokenSettings(t)),clearApnsTokenSettings:(e,t,A)=>(uh(A),m.clearTokenSettings()),addApnsCertificateCredential:(e,{input:t},A)=>(uh(A),m.addCertificateCredential(t)),retestApnsCertificateCredential:(e,{id:t},A)=>(uh(A),m.retestCertificateCredential(t)),deleteApnsCertificateCredential:(e,{id:t},A)=>(uh(A),m.deleteCertificateCredential(t)),createApnsBroadcastChannel:(e,{input:t},A)=>(uh(A),m.createChannel(t)),deleteApnsBroadcastChannel:(e,{id:t},A)=>(uh(A),m.deleteChannel(t)),savePushNotificationPreset:(e,t,A)=>(uh(A),m.savePreset(t.name,t.editor,t.id)),deletePushNotificationPreset:(e,{id:t},A)=>(uh(A),m.deletePreset(t)),savePushNotificationDraft:(e,{editor:t},A)=>(uh(A),m.saveDraft(t)),sendPushNotification:(e,{input:t},A)=>(uh(A),m.send(t)),resendPushNotification:(e,t,A)=>(uh(A),m.resend(t.id,t.requestId)),deletePushNotificationHistory:(e,{id:t},A)=>(uh(A),m.deleteHistory(t)),clearPushNotificationHistory:(e,t,A)=>(uh(A),m.clearHistory())},Subscription:{pushNotificationsChanged:{subscribe:(e,t,A)=>(uh(A),m.subscribe()),resolve:()=>!0}}},{Query:{cacheServerSettings:(e,t,A)=>(cx(A),f.getSettings()),cacheEntries:(e,t,A)=>(cx(A),f.listCacheEntries(t)),cacheEntryDetail:(e,{id:t},A)=>(cx(A),f.getCacheEntryDetail(t)),cacheStorageLocation:(e,{id:t},A)=>(cx(A),f.getStorageLocation(t)),cacheEntryMatch:(e,t,A)=>(cx(A),f.matchCacheEntry(t))},Mutation:{saveCacheServerSettings:(e,{input:t},A)=>(cx(A),f.saveSettings(t)),testCacheServerConnection:(e,t,A)=>(cx(A),f.testConnection()),clearCacheServerSettings:(e,t,A)=>(cx(A),f.clearSettings()),deleteCacheEntry:(e,{id:t},A)=>(cx(A),f.deleteCacheEntry(t)),deleteCacheEntriesByIds:(e,{ids:t},A)=>(cx(A),f.deleteCacheEntriesByIds(t)),deleteCacheEntries:(e,t,A)=>(cx(A),f.deleteCacheEntries(t)),deleteCacheStorageLocation:(e,{id:t},A)=>(cx(A),f.deleteStorageLocation(t))}},{CredentialStorageType:{DATABASE:"database",VAULT:"vault",KEYCHAIN:"keychain",UNKNOWN:"unknown"},Query:{credentialStoreStatus:(e,t,A)=>(um(A),I.status()),credentials:(e,t,A)=>(um(A),I.list())}},{AppNotification:{sidebarDismissedAt:e=>uI(e.sidebarDismissedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},NotificationPreference:{updatedAt:e=>uI(e.updatedAt)},WebPushSubscription:{expirationTime:e=>uI(e.expirationTime),lastSeenAt:e=>e.lastSeenAt.toISOString(),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},Query:{notifications:(e,t,A)=>(uf(A),E.history(t)),sidebarNotifications:(e,{limit:t},A)=>(uf(A),E.sidebar(t??void 0)),notificationPreferences:(e,t,A)=>(uf(A),E.preferences()),webPushState:(e,t,A)=>(uf(A),E.webPushState()),webPushSubscriptions:(e,t,A)=>(uf(A),E.webPushSubscriptions())},Mutation:{saveNotificationPreference:(e,{input:t},A)=>(uf(A),E.savePreference(t)),dismissNotification:(e,{id:t},A)=>(uf(A),E.dismiss(t)),dismissAllSidebarNotifications:(e,t,A)=>(uf(A),E.dismissAll()),deleteNotifications:(e,{selection:t},A)=>(uf(A),E.deleteSelection(t)),deleteAllNotifications:(e,t,A)=>(uf(A),E.deleteAll()),prepareWebPush:async(e,t,A)=>(uf(A),await E.prepareWebPush(),E.webPushState()),registerWebPushSubscription:async(e,{input:t},A)=>(uf(A),await E.registerWebPush(t),E.webPushState()),unregisterWebPushSubscription:(e,{endpoint:t},A)=>(uf(A),E.unregisterWebPush(t)),deleteWebPushSubscription:(e,{id:t},A)=>(uf(A),E.deleteWebPushSubscription(t)),testWebPushSubscription:(e,{id:t},A)=>(uf(A),E.testWebPushSubscription(t))},Subscription:{notificationsChanged:{subscribe:(e,t,A)=>(uf(A),E.subscribe())}}},{Query:{pollingOperations:(e,t,A)=>(uE(A),y.list())},Subscription:{pollingOperationChanged:{subscribe:(e,t,A)=>(uE(A),y.subscribe())}}},{AgentRun:{catalogCost:async e=>{await C.ensureFresh();let t=e.modelUsage?.length?e.modelUsage:[e],A=await C.lookup(t.map(({model:e})=>e)),r=0,i=!1;for(let e of t){let t=C.estimate(A.get(e.model),e);null!==t&&(r+=t,i=!0)}return i?r:null}},RunModelUsage:{catalogCost:async e=>{await C.ensureFresh();let t=await C.lookup([e.model]);return C.estimate(t.get(e.model),e)}},Query:{modelCostCatalog:async(e,t,A)=>(uB(A),await C.ensureFresh(),C.getCatalog()),modelCostEntries:(e,t,A)=>(uB(A),C.listEntries(t))},Mutation:{saveModelCostSettings:(e,{catalogUrl:t},A)=>(uB(A),C.saveSettings(t??null)),refreshModelCosts:(e,t,A)=>(uB(A),C.refresh())}},{AgentRun:{mcpPresetIds:e=>e.mcpPresetIdsJson?JSON.parse(e.mcpPresetIdsJson):[],mcpToolNames:e=>e.mcpToolNamesJson?JSON.parse(e.mcpToolNamesJson):[],archivedAt:e=>uw(e.archivedAt),nativeArchivedAt:e=>uw(e.nativeArchivedAt),startedAt:e=>uw(e.startedAt),finishedAt:e=>uw(e.finishedAt),pricingUpdatedAt:e=>uw(e.pricingUpdatedAt),playedAt:e=>uw(e.playedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},RunAttempt:{startedAt:e=>e.startedAt.toISOString(),finishedAt:e=>uw(e.finishedAt),supersededAt:e=>uw(e.supersededAt)},RunInput:{createdAt:e=>e.createdAt.toISOString()},RunAttachment:{downloadPath:e=>`/api/run-attachments/${encodeURIComponent(e.id)}`,createdAt:e=>e.createdAt.toISOString()},RunEvent:{raw:e=>uQ(e.rawJson),createdAt:e=>e.createdAt.toISOString(),supersededAt:e=>uw(e.supersededAt)},RunToolCall:{input:e=>uQ(e.inputJson),output:e=>uQ(e.outputJson),startedAt:e=>e.startedAt.toISOString(),finishedAt:e=>uw(e.finishedAt),supersededAt:e=>uw(e.supersededAt)},RunAnswerRevision:{answers:e=>JSON.parse(e.answersJson),createdAt:e=>e.createdAt.toISOString(),supersededAt:e=>uw(e.supersededAt)},RunQuestionBatch:{createdAt:e=>e.createdAt.toISOString(),answeredAt:e=>uw(e.answeredAt),supersededAt:e=>uw(e.supersededAt),revisionPreparedAt:e=>uw(e.revisionPreparedAt)},RunCheckpoint:{createdAt:e=>e.createdAt.toISOString()},RunDraft:{mcpPresetIds:e=>e.mcpPresetIdsJson?JSON.parse(e.mcpPresetIdsJson):[],archivedAt:e=>uw(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},RunCommand:{payload:e=>JSON.parse(e.payloadJson),createdAt:e=>e.createdAt.toISOString(),claimedAt:e=>uw(e.claimedAt),finishedAt:e=>uw(e.finishedAt)},RunProviderImportStatus:{catalog:e=>uQ(e.catalogJson),lastStartedAt:e=>uw(e.lastStartedAt),lastCompletedAt:e=>uw(e.lastCompletedAt),updatedAt:e=>e.updatedAt.toISOString()},Query:{agentRuns:(e,t,A)=>(uy(A),w.list(t)),agentRun:(e,{id:t},A)=>(uy(A),w.get(t)),runEvents:(e,t,A)=>(uy(A),w.events(t)),runQuestionBatches:(e,t,A)=>(uy(A),w.questions(t)),runUsage:(e,{runId:t},A)=>(uy(A),w.usage(t)),runNativeSessionFile:(e,{runId:t},A)=>(uy(A),w.nativeSessionFile(t)),runLinkedItems:(e,{runId:t},A)=>(uy(A),w.linkedItems(t)),runDrafts:(e,t,A)=>(uy(A),w.drafts(t)),runDraft:(e,{id:t},A)=>(uy(A),w.draft(t)),runProviderCatalog:(e,t,A)=>(uy(A),w.providerCatalog(t)),runProviderImportStatus:(e,t,A)=>(uy(A),w.providerImportStatus()),pendingRunCommands:(e,t,A)=>w.pendingCommands(uC(A))},Mutation:{createAgentRun:(e,{input:t},A)=>(uy(A),w.create(t)),playPlan:(e,{planId:t,mcpPresetIds:A},r)=>(uy(r),w.playPlan(t,A??[])),createRunFollowUp:(e,{sourceId:t,input:A},r)=>(uy(r),w.followUp(t,A)),saveRunDraft:(e,{input:t},A)=>(uy(A),w.saveDraft(t)),archiveAgentRuns:(e,{ids:t,archived:A},r)=>(uy(r),w.archive(t,A)),deleteAgentRuns:(e,{ids:t},A)=>(uy(A),w.deleteRuns(t)),archiveRunDrafts:(e,{ids:t,archived:A},r)=>(uy(r),w.archiveDrafts(t,A)),deleteRunDrafts:(e,{ids:t},A)=>(uy(A),w.deleteDrafts(t)),pauseAgentRun:(e,{id:t},A)=>(uy(A),w.lifecycle(t,"PAUSE")),continueAgentRun:(e,{id:t},A)=>(uy(A),w.lifecycle(t,"CONTINUE")),cancelAgentRun:(e,{id:t},A)=>(uy(A),w.lifecycle(t,"CANCEL")),steerAgentRun:(e,{id:t,prompt:A,attachmentIds:r},i)=>(uy(i),w.steer(t,A,r)),answerRunQuestion:(e,{batchId:t,answers:A},r)=>(uy(r),w.answerQuestion(t,A)),prepareRunAnswerRevision:(e,{batchId:t},A)=>(uy(A),w.prepareAnswerRevision(t)),reviseRunAnswer:(e,{batchId:t,answers:A,stash:r,rollback:i},n)=>(uy(n),w.reviseAnswer(t,A,!!r,!1!==i)),claimRunCommand:(e,{id:t},A)=>w.claimCommand(uC(A),t),completeRunCommand:(e,{id:t,status:A,error:r},i)=>w.completeCommand(uC(i),t,A,r),beginRunAttempt:(e,{runId:t,nativeId:A},r)=>w.beginAttempt(uC(r),t,A),updateRunAttemptNativeId:(e,t,A)=>w.updateAttemptNativeId(uC(A),t.attemptId,t.nativeId,t.providerVersion),appendRunEvents:(e,t,A)=>w.appendEvents(uC(A),t.runId,t.attemptId??null,t.events),reportRunQuestion:(e,t,A)=>w.reportQuestion(uC(A),t.runId,t.attemptId??null,t.nativeRequestId??null,t.eventSequence??null,t.questions),reportRunUsage:(e,t,A)=>w.reportUsage(uC(A),t.runId,t.attemptId??null,t.input),finishRunAttempt:(e,t,A)=>w.finishAttempt(uC(A),t.attemptId,t.input),reportRunCheckpoint:(e,t,A)=>w.reportCheckpoint(uC(A),t.runId,t.attemptId??null,t.input),reportRunAnswerRevisionPreview:(e,t,A)=>w.reportAnswerRevisionPreview(uC(A),t.batchId,t.rollbackPatch,t.pushedCommitWarning),applyRunAnswerRevision:(e,t,A)=>w.applyAnswerRevision(uC(A),t.batchId,t.revisionId,t.replacementAttemptId),importProviderRuns:(e,{provider:t,runs:A},r)=>w.importRuns(uC(r),t,A),reportRunProviderImportStatus:(e,t,A)=>w.reportProviderImportStatus(uC(A),t.provider,t.status,t.error,t.catalog)},Subscription:{agentRunsChanged:{subscribe:(e,t,A)=>(uy(A),w.subscribeRuns()),resolve:e=>w.get(e.runChanged.id)},agentRunChanged:{subscribe:(e,{runId:t},A)=>(uy(A),w.subscribeRun(t)),resolve:e=>w.get(e.runChanged.id)},runEventAdded:{subscribe:(e,{runId:t},A)=>(uy(A),w.subscribeEvents(t))},runQuestionChanged:{subscribe:(e,{runId:t},A)=>(uy(A),w.subscribeQuestions(t)),resolve:e=>w.questionBatch(e.runQuestionChanged.id)}}},{Workflow:{draftDefinition:e=>JSON.parse(e.draftDefinitionJson),versionCount:e=>e._count?.versions??e.versions?.length??0,runCount:e=>e._count?.runs??0,quickActionRepositories:e=>e.quickActionRepositories?.map(({repository:e})=>e)??[],triggerChoices:(e,{resourceKind:t})=>{if(!e.activeVersion)return[];let A=t?.trim().toUpperCase()??null,r=wV(JSON.parse(e.activeVersion.definitionJson)).triggers.find(e=>e.kind===(A?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE")&&(!A||wE(e.config)===A));return r?wf(r.config):[]},hasPlainTrigger:(e,{resourceKind:t})=>{if(!e.activeVersion)return!1;let A=t?.trim().toUpperCase()??null;return wV(JSON.parse(e.activeVersion.definitionJson)).triggers.some(e=>e.kind===(A?"RESOURCE_MANUAL":"MANUAL")&&(!A||wE(e.config)===A))},archivedAt:e=>w8(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowVersion:{definition:e=>JSON.parse(e.definitionJson),publishedAt:e=>e.publishedAt.toISOString(),createdAt:e=>e.createdAt.toISOString()},WorkflowTrigger:{config:e=>JSON.parse(e.configJson),createdAt:e=>e.createdAt.toISOString()},WorkflowRun:{triggerPayload:e=>JSON.parse(e.triggerPayloadJson),sessionData:e=>JSON.parse(e.sessionDataJson),worktree:e=>Q.runWorktree(e.sessionDataJson),attemptCount:e=>e._count?.attempts??e.attempts?.length??0,eventCount:e=>e._count?.events??e.events?.length??0,queuedAt:e=>e.queuedAt.toISOString(),startedAt:e=>w8(e.startedAt),pausedAt:e=>w8(e.pausedAt),finishedAt:e=>w8(e.finishedAt),archivedAt:e=>w8(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowStepAttempt:{input:e=>w5(e.inputJson),output:e=>w5(e.outputJson),requiredPaths:e=>JSON.parse(e.requiredPathsJson),providedPaths:e=>JSON.parse(e.providedPathsJson),startedAt:e=>w8(e.startedAt),finishedAt:e=>w8(e.finishedAt),supersededAt:e=>w8(e.supersededAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowWait:{predicate:e=>w5(e.predicateJson),result:e=>w5(e.resultJson),resumeAfter:e=>w8(e.resumeAfter),timeoutAt:e=>w8(e.timeoutAt),createdAt:e=>e.createdAt.toISOString(),resolvedAt:e=>w8(e.resolvedAt),updatedAt:e=>e.updatedAt.toISOString()},WorkflowRunEvent:{detail:e=>w5(e.detailJson),createdAt:e=>e.createdAt.toISOString()},WorkflowRunResourceLink:{metadata:e=>w5(e.metadataJson),createdAt:e=>e.createdAt.toISOString()},Query:{workflows:(e,t,A)=>(w4(A),Q.list(t)),workflow:(e,{id:t},A)=>(w4(A),Q.get(t)),workflowVersion:(e,{id:t},A)=>(w4(A),Q.version(t)),workflowCatalog:(e,t,A)=>(w4(A),Q.catalog()),validateWorkflowDraft:(e,{id:t},A)=>(w4(A),Q.validateDraft(t)),workflowRuns:(e,t,A)=>(w4(A),Q.runs(t)),workflowRun:(e,{id:t},A)=>(w4(A),Q.run(t)),workflowRunEvents:(e,t,A)=>(w4(A),Q.runEvents(t.runId,t.afterSequence,t.first)),workflowRunsForResource:(e,t,A)=>(w4(A),Q.runsForResource(t.kind,t.resourceId)),workflowsAcceptingResource:(e,{kind:t},A)=>(w4(A),Q.acceptingResource(t)),workflowQuickActions:(e,t,A)=>(w4(A),Q.quickActions(t)),exportWorkflow:(e,{id:t,versionId:A},r)=>(w4(r),Q.export(t,A)),prepareWorkflowReplay:(e,t,A)=>(w4(A),Q.prepareReplay(t.runId,t.nodeId)),workflowJobSecrets:(e,{jobId:t},A)=>Q.jobSecrets(function(e){if(!e.agentId)throw Error("Agent authentication is required");return e.agentId}(A),t)},Mutation:{createWorkflow:(e,{input:t},A)=>(w4(A),Q.create(t)),saveWorkflowDraft:(e,{input:t},A)=>(w4(A),Q.saveDraft(t)),importWorkflow:(e,{input:t},A)=>(w4(A),Q.import(t)),publishWorkflow:(e,{id:t},A)=>(w4(A),Q.publish(t)),setWorkflowEnabled:(e,t,A)=>(w4(A),Q.setEnabled(t.id,t.enabled)),setWorkflowQuickAction:(e,{input:t},A)=>(w4(A),Q.setQuickAction(t)),archiveWorkflow:(e,t,A)=>(w4(A),Q.archive(t.id,t.archived)),deleteWorkflow:(e,{id:t},A)=>(w4(A),Q.delete(t)),archiveWorkflowRuns:(e,{ids:t,archived:A},r)=>(w4(r),Q.archiveRuns(t,A)),deleteWorkflowRuns:(e,{ids:t},A)=>(w4(A),Q.deleteRuns(t)),triggerWorkflow:(e,{input:t},A)=>(w4(A),Q.trigger(t)),pauseWorkflowRun:(e,{id:t},A)=>(w4(A),Q.lifecycle(t,"PAUSE")),resumeWorkflowRun:(e,{id:t},A)=>(w4(A),Q.lifecycle(t,"RESUME")),cancelWorkflowRun:(e,{id:t},A)=>(w4(A),Q.lifecycle(t,"CANCEL")),repairWorkflowRunData:(e,{id:t,patch:A},r)=>(w4(r),Q.repairRunData(t,A)),answerWorkflowQuestion:(e,{batchId:t,answers:A},r)=>(w4(r),Q.answerQuestion(t,A)),replayWorkflowRun:(e,t,A)=>(w4(A),Q.replay(t.runId,t.nodeId,t))},Subscription:{workflowsChanged:{subscribe:(e,t,A)=>(w4(A),Q.subscribeWorkflows()),resolve:e=>"runs"===e.workflowChanged.id?null:Q.get(e.workflowChanged.id)},workflowRunChanged:{subscribe:(e,{runId:t},A)=>(w4(A),Q.subscribeRun(t)),resolve:e=>Q.run(e.workflowRunChanged.id)},workflowRunEventAdded:{subscribe:(e,{runId:t},A)=>(w4(A),Q.subscribeRunEvents(t))},workflowQuestionChanged:{subscribe:(e,{runId:t},A)=>(w4(A),Q.subscribeRunQuestions(t)),resolve:e=>Q.questionBatch(e.workflowQuestionChanged.id)}}},{CommandDefinition:w9,CommandRun:{snapshot:e=>JSON.parse(e.snapshotJson),queuedAt:e=>e.queuedAt.toISOString(),startedAt:e=>w6(e.startedAt),finishedAt:e=>w6(e.finishedAt),nextRestartAt:e=>w6(e.nextRestartAt),...w9},CommandRunAttempt:{startedAt:e=>w6(e.startedAt),finishedAt:e=>w6(e.finishedAt),...w9},CommandRunOutputChunk:{attemptNumber:e=>e.attemptNumber??e.attempt?.attempt??1,createdAt:e=>"string"==typeof e.createdAt?e.createdAt:e.createdAt.toISOString()},Query:{commandDefinitions:(e,{includeArchived:t},A)=>(w3(A),B.listDefinitions(t)),commandDefinition:(e,{id:t},A)=>(w3(A),B.getDefinition(t)),commandRuns:(e,t,A)=>(w3(A),B.listRuns(t)),commandRun:(e,{id:t},A)=>(w3(A),B.getRun(t)),commandRunOutput:(e,t,A)=>(w3(A),B.listOutput(t.runId,t.afterAttempt,t.afterSequence,t.first)),eligibleCommandsForAgent:(e,{agentId:t},A)=>(w3(A),B.eligibleForAgent(t)),eligibleCommandsForWorktree:(e,{worktreeId:t},A)=>(w3(A),B.eligibleForWorktree(t))},Mutation:{createCommandDefinition:(e,{input:t},A)=>(w3(A),B.createDefinition(t)),updateCommandDefinition:(e,{id:t,input:A},r)=>(w3(r),B.updateDefinition(t,A)),archiveCommandDefinition:(e,t,A)=>(w3(A),B.archiveDefinition(t.id,t.archived)),startCommandRun:(e,{input:t},A)=>(w3(A),B.startRun(t)),startCustomCommandRun:(e,{input:t},A)=>(w3(A),B.startCustomRun(t)),terminateCommandRun:(e,{id:t},A)=>(w3(A),B.terminateRun(t)),rerunCommandRun:(e,{id:t},A)=>(w3(A),B.rerun(t)),archiveCommandRuns:(e,t,A)=>(w3(A),B.archiveRuns(t.ids,t.archived)),deleteCommandRuns:(e,{ids:t},A)=>(w3(A),B.deleteRuns(t)),appendCommandRunOutput:(e,t,A)=>B.appendOutput(function(e){if(!e.agentId)throw Error("Agent authentication is required");return e.agentId}(A),t.jobId,t.attemptId,t.chunks)},Subscription:{commandsChanged:{subscribe:(e,t,A)=>(w3(A),aE.iterate(aU))},commandRunsChanged:{subscribe:(e,t,A)=>(w3(A),aE.iterate(aF))},commandRunChanged:{subscribe:(e,{runId:t},A)=>(w3(A),aE.iterate(aP(t))),resolve:e=>B.getRun(e.commandRunChanged.id)},commandRunOutputAdded:{subscribe:(e,{runId:t},A)=>(w3(A),aE.iterate(aJ(t)))}}},{Query:{diskSpaceSettings:(e,t,A)=>(w7(A),D.settings()),diskSpaceOverview:(e,t,A)=>(w7(A),D.overview()),agentDiskSpace:(e,{agentId:t},A)=>(w7(A),D.agentView(t)),sidebarStatus:(e,t,A)=>(w7(A),k.status()),agentDiskSpaceConfiguration:(e,t,A)=>D.configuration(Qe(A))},Mutation:{updateDiskSpaceSettings:(e,{input:t},A)=>(w7(A),D.updateSettings(t)),setAgentDiskSpaceMonitoring:(e,{agentId:t,enabled:A},r)=>(w7(r),D.setMonitoring(t,A)),setAgentDiskSpacePressureMode:(e,{agentId:t,enabled:A},r)=>(w7(r),D.setManualPressureMode(t,A)),reportAgentDiskSpace:(e,{input:t},A)=>D.report(Qe(A),t).then(()=>!0)},Subscription:{diskSpaceChanged:{subscribe:(e,t,A)=>(w7(A),D.subscribe()),resolve:e=>e.diskSpaceChanged},sidebarStatusChanged:{subscribe:(e,t,A)=>(w7(A),k.subscribe()),resolve:()=>!0}}},{Query:{actionCenter:(e,t,A)=>(Qt(A),S.list(t))},Mutation:{acknowledgeActionCenterItem:(e,{input:t},A)=>(Qt(A),S.acknowledge(t))},Subscription:{actionCenterChanged:{subscribe:(e,t,A)=>(Qt(A),S.subscribe()),resolve:()=>!0}}}]),(0,As.buildSubgraphSchema)({typeDefs:QA,resolvers:ek}));let eN="true"===process.env.APOLLO_SANDBOX;this.server=new At({schema:this.schema,introspection:eN,plugins:eN?[(0,Aa.ApolloServerPluginLandingPageLocalDefault)({footer:!1})]:[(0,Aa.ApolloServerPluginLandingPageProductionDefault)({footer:!1})]})}async createContext(e=new Headers){let t;if(await this.initializeServer(),!this.services)throw Error("GraphQL services not initialized");let A=epU(e),r=await this.services.agentControlService.authenticate((t=A.get("authorization"),!t?.startsWith("Bearer ")?null:t.slice(7).trim()||null));return{prismaService:this.services.prismaService,agentControlService:this.services.agentControlService,agentId:r,ipAddress:A.get("x-forwarded-for")?.split(",")[0]?.trim()||null,requestOrigin:function(e,t=process.env){let A=t.PUBLIC_BASE_URL?.trim();if(A)try{let e=new URL(A);if("http:"===e.protocol||"https:"===e.protocol)return{origin:e.origin,secure:"https:"===e.protocol,loopback:epx(e.hostname),source:"env"}}catch{}let r=epN(e,"x-forwarded-proto"),i=epN(e,"x-forwarded-host"),n=epN(e,"host");if(r&&(i??n)){let e=epO(`${r}:`,i??n,"forwarded");if(e)return e}if(i){let e=epO("http:",i,"forwarded");if(e)return e}return n?epO("http:",n,"host"):null}(A)?.origin??null}}async getSchema(){if(await this.initializeServer(),!this.schema)throw Error("GraphQL schema not properly initialized");return this.schema}async getServer(){if(await this.initializeServer(),!this.server)throw Error("GraphQL server not properly initialized");return this.server}},ep_=globalThis;async function epG(){if(ep_.agentWebSocketServer)return;if(ep_.agentWebSocketStartPromise)return ep_.agentWebSocketStartPromise;let e=function(e){let t=Number(e?.trim()||"3091");if(!Number.isInteger(t)||t<1||t>65535)throw Error(`Invalid AGENT_WS_PORT: ${e}`);return t}(process.env.AGENT_WS_PORT),t=process.env.AGENT_WS_HOSTNAME??process.env.HOSTNAME??"127.0.0.1",A=(async()=>{let A=await epF.getSchema(),r=new v.default({host:t,port:e,path:"/graphql"}),i=function(e,t,A=12e3){let r=function(e){let{schema:t,context:A,roots:r,validate:i,execute:n,subscribe:a,connectionInitWaitTimeout:s=3e3,onConnect:o,onDisconnect:l,onClose:c,onSubscribe:p,onOperation:g,onNext:S,onError:b,onComplete:v,jsonMessageReviver:R,jsonMessageReplacer:T}=e;return{opened(e,M){let N={connectionInitReceived:!1,acknowledged:!1,subscriptions:{},extra:M};if(e.protocol!==h)return e.close(m.SubprotocolNotAcceptable,"Subprotocol not acceptable"),async(e,t)=>{await c?.(N,e,t)};let x=s>0&&isFinite(s)?setTimeout(()=>{N.connectionInitReceived||e.close(m.ConnectionInitialisationTimeout,"Connection initialisation timeout")},s):null;return e.onMessage(async function(s){var l,c;let h;try{h=I("string"==typeof s?JSON.parse(s,R):s)}catch(t){return e.close(m.BadRequest,"Invalid message received")}switch(h.type){case f.ConnectionInit:{if(N.connectionInitReceived)return e.close(m.TooManyInitialisationRequests,"Too many initialisation requests");N.connectionInitReceived=!0,u(h.payload)&&(N.connectionParams=h.payload);let t=await o?.(N);if(!1===t)return e.close(m.Forbidden,"Forbidden");N.acknowledged=!0,await e.send(E(u(t)?{type:f.ConnectionAck,payload:t}:{type:f.ConnectionAck},T));return}case f.Ping:if(e.onPing)return await e.onPing(h.payload);await e.send(E(h.payload?{type:f.Pong,payload:h.payload}:{type:f.Pong}));return;case f.Pong:return await e.onPong?.(h.payload);case f.Subscribe:{if(!N.acknowledged)return e.close(m.Unauthorized,"Unauthorized");let{id:s,payload:o}=h;if(s in N.subscriptions)return e.close(m.SubscriberAlreadyExists,`Subscriber for ${s} already exists`);N.subscriptions[s]=null;let u=async(t,{id:A,payload:r},i)=>{let{errors:n,...a}=t,s=await S?.(N,A,r,i,t);await e.send(E({id:A,type:f.Next,payload:s||{...a,...n?{errors:n.map(e=>e.toJSON())}:{}}},T))},I=async(t,{id:A,payload:r})=>{let i=await b?.(N,A,r,t);await e.send(E({id:A,type:f.Error,payload:i||t.map(e=>e.toJSON())},T))},R=async(t,{id:A,payload:r})=>{await v?.(N,A,r),t&&await e.send(E({id:A,type:f.Complete},T))};try{let e,m,f=await p?.(N,h.id,h.payload);if(f){if(c=f,Array.isArray(c)&&c.length>0&&c.every(e=>e instanceof Q.GraphQLError))return s in N.subscriptions?await I(f,h):void 0;if(Array.isArray(f))throw Error("Invalid return value from onSubscribe hook, expected an array of GraphQLError objects");e=f}else{if(!t)throw Error("The GraphQL schema is not provided");let A={operationName:o.operationName,document:(0,y.parse)(o.query),variableValues:o.variables};e={...A,schema:"function"==typeof t?await t(N,s,o,A):t};let r=(i??C.validate)(e.schema,e.document);if(r.length>0)return s in N.subscriptions?await I(r,h):void 0}let E=(0,w.getOperationAST)(e.document,e.operationName);if(!E)return s in N.subscriptions?await I([new Q.GraphQLError("Unable to identify operation")],h):void 0;"rootValue"in e||(e.rootValue=r?.[E.operation]),"contextValue"in e||(e.contextValue="function"==typeof A?await A(N,s,o,e):A),m="subscription"===E.operation?await (a??B.subscribe)(e):await (n??D.execute)(e);let S=await g?.(N,s,o,e,m);if(S&&(m=S),l=m,"function"==typeof Object(l)[Symbol.asyncIterator])if(s in N.subscriptions){N.subscriptions[s]=m;try{for await(let t of m)await u(t,h,e)}catch(t){let e=t instanceof Error?t:Error(String(t));await I([k.versionInfo.major>=17?new Q.GraphQLError(e.message,{cause:e}):k.versionInfo.major>=16?new Q.GraphQLError(e.message,{originalError:e}):new Q.GraphQLError(e.message,null,null,null,null,e)],h),delete N.subscriptions[s]}}else d(m)&&m.return(void 0);else s in N.subscriptions&&await u(m,h,e);await R(s in N.subscriptions,h)}finally{delete N.subscriptions[s]}return}case f.Complete:{let e=N.subscriptions[h.id];delete N.subscriptions[h.id],d(e)&&await e.return(void 0);return}default:throw Error(`Unexpected message of type ${h.type} received`)}}),async(e,t)=>{x&&clearTimeout(x);let A={...N.subscriptions};N.subscriptions={},await Promise.all(Object.values(A).filter(d).map(e=>e.return(void 0))),N.acknowledged&&await l?.(N,e,t),await c?.(N,e,t)}}}}(e);return t.options.handleProtocols=S,t.once("error",e=>{console.error("Internal error emitted on the WebSocket server. Please check your implementation.",e);let A=null;for(let e of t.clients)try{e.close(m.InternalServerError,"Internal server error")}catch(e){A=A??e}if(A)throw A}),t.on("connection",(e,t)=>{e.once("error",t=>{console.error("Internal error emitted on a WebSocket socket. Please check your implementation.",t),e.close(m.InternalServerError,"Internal server error")});let i=null,n=A>0&&isFinite(A)?setInterval(()=>{e.readyState===e.OPEN&&(i=setTimeout(()=>{e.terminate()},A),e.once("pong",()=>{i&&(clearTimeout(i),i=null)}),e.ping())},A):null,a=r.opened({protocol:e.protocol,send:t=>new Promise((A,r)=>{if(e.readyState!==e.OPEN)return A();e.send(t,e=>e?r(e):A())}),close:(t,A)=>e.close(t,A),onMessage:t=>e.on("message",async A=>{try{await t(String(A))}catch(t){console.error("Internal error occurred during message handling. Please check your implementation.",t),e.close(m.InternalServerError,"Internal server error")}})},{socket:e,request:t});e.once("close",(e,t)=>{i&&clearTimeout(i),n&&clearInterval(n),a(e,String(t))})}),{dispose:async()=>{for(let e of t.clients)e.close(1001,"Going away");t.removeAllListeners(),await new Promise((e,A)=>{t.close(t=>t?A(t):e())})}}}({schema:A,context:async e=>{let t=epU(e.extra.request.headers),A=e.extra.request.socket.remoteAddress;!t.has("x-forwarded-for")&&A&&t.set("x-forwarded-for",A);let r=function(e){if(!e||"object"!=typeof e)return null;let t=e.authorization??e.Authorization;return"string"==typeof t?t:null}(e.connectionParams);return r&&t.set("authorization",r),epF.createContext(t)}},r);try{await new Promise((e,t)=>{r.once("listening",e),r.once("error",t)})}catch(e){throw await i.dispose(),e}ep_.agentWebSocketServer=r,r.on("error",e=>{console.error("Agent GraphQL WebSocket server error:",e)}),console.log(`Agent GraphQL WebSocket listening on ws://${t}:${e}/graphql`)})();ep_.agentWebSocketStartPromise=A;try{await A}finally{ep_.agentWebSocketStartPromise=void 0}}e.s(["startAgentWebSocketServer",0,epG],544112)}];
7045
+ FROM visible`)]),n=i[0],a=ehp(n?.totalCount),s=ehp(n?.needsAttentionCount);return{rows:r,totalCount:a,needsAttentionCount:s,activeCount:a-s}}let ehm=["PLAN","SESSION","BUILD","WORKFLOW"],ehf={questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}};function ehI(e){return e.toISOString()}function ehE(e){try{return JSON.parse(e)}catch{return{}}}function ehy(e,t,A,r){return[e,t,r??0,A.toISOString()].join(":")}function ehC(e,t){return{id:e.id,sourceKind:t,createdAt:ehI(e.createdAt),questions:e.questions}}function ehw(e){let t=CO(ehE(e),"worktree.id");return"string"==typeof t&&t?t:null}class ehQ{async list(e={}){var t,A,r,i,n;let a=await am(),s=Math.max(1,Math.min(e.first??50,200)),o=await ehg(a,{first:s,cursor:function(e){if(!e)return null;try{let t=JSON.parse(Buffer.from(e,"base64url").toString("utf8"));if("number"!=typeof t.priority||"string"!=typeof t.updatedAt||"string"!=typeof t.key)return null;return t}catch{return null}}(e.after)}),l=o.rows.slice(0,s),c=l.flatMap(e=>"PLAN"===e.resourceKind||"SESSION"===e.resourceKind?[e.resourceId]:[]),u=l.flatMap(e=>"WORKFLOW"===e.resourceKind?[e.resourceId]:[]),d=l.flatMap(e=>"BUILD"===e.resourceKind?[e.resourceId]:[]),[h,p,g]=await Promise.all([c.length?a.agentRun.findMany({where:{id:{in:c}},take:c.length,include:{worktree:!0,questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:ehf}}}):Promise.resolve([]),u.length?a.workflowRun.findMany({where:{id:{in:u}},take:u.length,include:{workflow:!0,attempts:{where:{supersededAt:null},include:{questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:ehf}}}}}):Promise.resolve([]),d.length?a.build.findMany({where:{id:{in:d}},take:d.length,include:{worktree:!0,codebase:{include:{repository:!0}},configuration:!0}}):Promise.resolve([])]),m=[...new Set(p.flatMap(e=>ehw(e.sessionDataJson)?[ehw(e.sessionDataJson)]:[]))],f=new Map((m.length?await a.worktree.findMany({where:{id:{in:m}},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):[]).map(e=>[e.id,e])),I=new Map(l.map(e=>[e.key,e.reason])),E=[];for(let e of h){let r=`${e.kind}:${e.id}`,i=I.get(r);if(!i)continue;let n=e.questionBatches.map(e=>ehC(e,null)),a="FAILED"===i?ehy(e.kind,e.id,e.finishedAt??e.updatedAt):null;E.push({key:r,resourceKind:e.kind,reason:i,resourceId:e.id,href:(t=e.kind,A=e.id,`/${"PLAN"===t?"plans":"sessions"}/${encodeURIComponent(A)}`),displayNumber:e.displayNumber,label:function(e,t=220){let A=e.replace(/\s+/g," ").trim();return A.length>t?`${A.slice(0,t-1)}…`:A}(e.initialPrompt),summary:[e.repositoryName,e.branch].filter(Boolean).join(" · ")||null,status:e.status,phase:e.phase,error:e.error,createdAt:ehI(e.createdAt),updatedAt:ehI(e.updatedAt),worktree:e.worktree,questionBatches:"QUESTION"===i?n:[],buildRun:null,failureFingerprint:a})}for(let e of p){let t=`WORKFLOW:${e.id}`,A=I.get(t);if(!A)continue;let i=ehw(e.sessionDataJson),n=e.attempts.flatMap(e=>e.questionBatches.map(t=>ehC(t,e.kind))),a="FAILED"===A?ehy("WORKFLOW",e.id,e.finishedAt??e.updatedAt,e.generation):null;E.push({key:t,resourceKind:"WORKFLOW",reason:A,resourceId:e.id,href:(r=e.id,`/workflows/runs/${encodeURIComponent(r)}`),displayNumber:e.displayNumber,label:e.workflow.name,summary:e.triggerSubjectKey||null,status:e.status,phase:e.phase,error:e.blockedReason??e.error,createdAt:ehI(e.createdAt),updatedAt:ehI(e.updatedAt),worktree:i?f.get(i)??null:null,questionBatches:"QUESTION"===A?n:[],buildRun:null,failureFingerprint:a})}for(let e of g){let t=`BUILD:${e.id}`,A=I.get(t);if(!A)continue;let r="FAILED"===A?ehy("BUILD",e.id,e.finishedAt??e.updatedAt):null,n=e.codebase?.repository.name??null,a=e.configuration?.name??null;E.push({key:t,resourceKind:"BUILD",reason:A,resourceId:e.id,href:(i=e.id,`/builds/${encodeURIComponent(i)}`),displayNumber:null,label:a??n??"iOS build",summary:[n,e.worktree?.branch].filter(Boolean).join(" · ")||null,status:e.status,phase:null,error:e.error,createdAt:ehI(e.createdAt),updatedAt:ehI(e.updatedAt),worktree:e.worktree,questionBatches:[],buildRun:"UNRUN_BUILD"===A?{buildId:e.id,destinationType:e.destinationType,preferredDestination:ehE(e.destinationJson)}:null,failureFingerprint:r})}let y=new Map(E.map(e=>[e.key,e])),C=l.flatMap(e=>y.has(e.key)?[y.get(e.key)]:[]);return{items:C,nextCursor:o.rows.length>s&&C.length?(n=C[C.length-1],Buffer.from(JSON.stringify({priority:function(e){switch(e){case"QUESTION":return 0;case"BLOCKED":return 1;case"FAILED":return 2;case"UNRUN_BUILD":return 3;case"ACTIVE":return 4}}(n.reason),updatedAt:n.updatedAt,key:n.key})).toString("base64url")):null,totalCount:o.totalCount,needsAttentionCount:o.needsAttentionCount,activeCount:o.activeCount}}async acknowledge(e){let t=e.resourceKind.trim().toUpperCase();if(!ehm.includes(t))throw Error("Action Center resource kind is invalid");let A=await am(),r=null;if("PLAN"===t||"SESSION"===t){let i=await A.agentRun.findUnique({where:{id:e.resourceId},select:{id:!0,kind:!0,status:!0,finishedAt:!0,updatedAt:!0}});i?.kind===t&&"FAILED"===i.status&&(r=ehy(t,i.id,i.finishedAt??i.updatedAt))}else if("WORKFLOW"===t){let t=await A.workflowRun.findUnique({where:{id:e.resourceId},select:{id:!0,status:!0,generation:!0,finishedAt:!0,updatedAt:!0}});t?.status==="FAILED"&&(r=ehy("WORKFLOW",t.id,t.finishedAt??t.updatedAt,t.generation))}else{let t=await A.build.findUnique({where:{id:e.resourceId},select:{id:!0,status:!0,finishedAt:!0,updatedAt:!0}});t?.status==="FAILED"&&(r=ehy("BUILD",t.id,t.finishedAt??t.updatedAt))}if(!r||r!==e.failureFingerprint)throw Error("Action Center failure is no longer current");return await A.actionCenterAcknowledgement.upsert({where:{resourceKind_resourceId_failureFingerprint:{resourceKind:t,resourceId:e.resourceId,failureFingerprint:r}},create:{id:(0,AB.randomUUID)(),resourceKind:t,resourceId:e.resourceId,failureFingerprint:r},update:{acknowledgedAt:new Date}}),aE.publish(aK,{sidebarStatusChanged:!0}),!0}subscribe(){return aE.iterate(aK)}}let ehB=e=>encodeURIComponent(e),ehD=e=>e?.toISOString()??null;function ehk(e){return e.trim().toLocaleLowerCase().replace(/\s+/g," ")}function ehS(e){return ehk(e).split(" ").map(e=>e.replace(/^#/,"")).filter(Boolean)}function ehb(e,t,A,r=[],i=[]){let n=function(e,t,A=[],r=[]){let i=ehk(e).replace(/^#/,""),n=ehS(e);if(!i||0===n.length)return null;let a=ehk(t),s=A.filter(e=>null!=e).map(e=>ehk(String(e)).replace(/^#/,"")),o=r.filter(e=>null!=e).map(e=>ehk(String(e))),l=[a,...s,...o].join(" ");return n.every(e=>l.includes(e))?s.includes(i)?1e3:a===i?900:s.some(e=>e.startsWith(i))?800:a.startsWith(i)?700:a.includes(i)?600:o.some(e=>e.startsWith(i))?500:l.includes(i)?400:300+n.filter(e=>a.includes(e)).length:null}(t,A,r,i);return null===n?null:{...e,children:e.children??[],score:n}}function ehv(e){return e.filter(e=>null!==e).sort((e,t)=>e.score!==t.score?t.score-e.score:(t.updatedAt??"").localeCompare(e.updatedAt??"")||e.title.localeCompare(t.title))}function ehR(e,t){return ehv(e).slice(0,t)}function ehT(e){let{score:t,...A}=e;return A}function ehM(e){return`github.com/${e.toLocaleLowerCase()}`}function ehN(e){let t=e.filter(e=>!!e?.trim());return t.length?t.join(" · "):null}class ehx{async search(e,t=5,A=3){var r,i;let n,a=e.trim();if(!a)return{items:[]};if(a.length>200)throw Error("query must be at most 200 characters");if(!Number.isInteger(t)||t<1||t>10)throw Error("firstPerGroup must be an integer from 1 to 10");if(!Number.isInteger(A)||A<0||A>5)throw Error("relatedFirst must be an integer from 0 to 5");let s=await am(),o=[...ehS(a)].sort((e,t)=>t.length-e.length)[0]??a,l=Number(a.replace(/^#/,"")),c=Number.isInteger(l)&&l>=0,[u,d,h,p,g,m,f,I,E,y,C,w,Q,B,D,k,S,b]=await Promise.all([s.agent.findMany({where:{OR:[{id:{contains:o}},{name:{contains:o}},{hostname:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.agentJob.findMany({where:{visibility:"USER",OR:[{id:{contains:o}},{kind:{contains:o}},{status:{contains:o}},{agent:{name:{contains:o}}},{agent:{hostname:{contains:o}}}]},include:{agent:!0},orderBy:{updatedAt:"desc"},take:100}),s.codebaseRepository.findMany({where:{OR:[{id:{contains:o}},{name:{contains:o}},{description:{contains:o}},{canonicalOrigin:{contains:o}},{displayOrigin:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.codebase.findMany({where:{availability:{not:"MISSING"},OR:[{id:{contains:o}},{folder:{contains:o}},{branch:{contains:o}},{observedOrigin:{contains:o}},{repository:{name:{contains:o}}},{agent:{name:{contains:o}}}]},include:{repository:!0,agent:!0},orderBy:{updatedAt:"desc"},take:100}),s.worktree.findMany({where:{missingAt:null,availability:{not:"MISSING"},OR:[{id:{contains:o}},{folder:{contains:o}},{relativePath:{contains:o}},{branch:{contains:o}},{codebase:{repository:{name:{contains:o}}}},{codebase:{agent:{name:{contains:o}}}},{pullRequest:{title:{contains:o}}},...c?[{pullRequest:{number:l}}]:[]]},include:{codebase:{include:{repository:!0,agent:!0}},pullRequest:!0},orderBy:{updatedAt:"desc"},take:100}),s.build.findMany({where:{OR:[{id:{contains:o}},{requestId:{contains:o}},{status:{contains:o}},{action:{contains:o}},{commandSummary:{contains:o}},{configuration:{name:{contains:o}}},{worktree:{branch:{contains:o}}},{worktree:{folder:{contains:o}}},{codebase:{repository:{name:{contains:o}}}}]},include:{configuration:!0,worktree:{include:{codebase:{include:{repository:!0}}}},codebase:{include:{repository:!0}}},orderBy:{updatedAt:"desc"},take:100}),s.workflow.findMany({where:{OR:[{id:{contains:o}},{name:{contains:o}},{description:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.workflowRun.findMany({where:{OR:[{id:{contains:o}},...c?[{displayNumber:l}]:[],{status:{contains:o}},{triggerSubjectKey:{contains:o}},{workflow:{name:{contains:o}}}]},include:{workflow:!0},orderBy:{updatedAt:"desc"},take:100}),s.jiraCachedTicket.findMany({where:{OR:[{issueKey:{contains:o}},{projectKey:{contains:o}},{summaryJson:{contains:o}},{detailJson:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.worktreePullRequest.findMany({where:{worktree:{missingAt:null},OR:[{githubId:{contains:o}},...c?[{number:l}]:[],{title:{contains:o}},{repositoryNameWithOwner:{contains:o}},{headRefName:{contains:o}},{jiraKey:{contains:o}}]},include:{worktree:!0},orderBy:{updatedAt:"desc"},take:100}),s.gitHubPipelineRecord.findMany({where:{isCurrent:!0,workflowRunId:{not:null},OR:[{githubPipelineId:{contains:o}},{workflowRunId:{contains:o}},{workflowId:{contains:o}},...c?[{runNumber:l}]:[],{name:{contains:o}},{status:{contains:o}},{snapshot:{repositoryNameWithOwner:{contains:o}}}]},include:{snapshot:!0},orderBy:{updatedAt:"desc"},take:100}),s.agentRun.findMany({where:{kind:{in:["PLAN","SESSION"]},OR:[{id:{contains:o}},...c?[{displayNumber:l}]:[],{initialPrompt:{contains:o}},{repositoryName:{contains:o}},{branch:{contains:o}},{jiraIssueKey:{contains:o}},{model:{contains:o}},{status:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.commandDefinition.findMany({where:{OR:[{id:{contains:o}},{name:{contains:o}},{description:{contains:o}},{script:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.commandRun.findMany({where:{OR:[{id:{contains:o}},...c?[{displayNumber:l}]:[],{snapshotName:{contains:o}},{snapshotDescription:{contains:o}},{agentName:{contains:o}},{worktreeBranch:{contains:o}},{status:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.skill.findMany({where:{deletedAt:null,OR:[{id:{contains:o}},{name:{contains:o}},{description:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.skillGroup.findMany({where:{OR:[{id:{contains:o}},{name:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.iosDevice.findMany({where:{OR:[{id:{contains:o}},{udid:{contains:o}},{displayName:{contains:o}},{product:{contains:o}},{osVersion:{contains:o}},{status:{contains:o}}]},orderBy:{updatedAt:"desc"},take:100}),s.signingProfileAsset.findMany({where:{missingAt:null,OR:[{id:{contains:o}},{uuid:{contains:o}},{name:{contains:o}},{bundleId:{contains:o}},{teamName:{contains:o}},{profileType:{contains:o}}]},include:{agent:!0},orderBy:{observedAt:"desc"},take:100})]),v=[...new Set(C.map(e=>ehM(e.snapshot.repositoryNameWithOwner)))],R=new Map([...h,...v.length?await s.codebaseRepository.findMany({where:{canonicalOrigin:{in:v}}}):[]].map(e=>[e.canonicalOrigin.toLocaleLowerCase(),e])),T=ehR(g.map(e=>ehb({key:`worktree:${e.id}`,kind:"WORKTREE",group:"WORKTREES",title:e.branch??e.relativePath,subtitle:ehN([e.codebase.repository.name,e.relativePath,e.codebase.agent.name]),href:`/worktrees/${ehB(e.id)}`,status:e.availability,updatedAt:ehD(e.updatedAt)},a,e.branch??e.relativePath,[e.id,e.branch,e.pullRequest?.number],[e.folder,e.relativePath,e.codebase.repository.name,e.codebase.agent.name,e.pullRequest?.title])),t),M=ehR(f.map(e=>ehb({key:`workflow:${e.id}`,kind:"WORKFLOW",group:"WORKFLOWS",title:e.name,subtitle:e.description||null,href:`/workflows/${ehB(e.id)}`,status:e.archivedAt?"ARCHIVED":e.enabled?"ENABLED":"DISABLED",updatedAt:ehD(e.updatedAt)},a,e.name,[e.id],[e.description])),t);A>0&&(await this.attachWorktreeChildren(T,A),await this.attachWorkflowChildren(M,A));let N=new Set([...T,...M].flatMap(e=>e.children.map(e=>e.key))),x=ehR(E.map(e=>{let t,A,r,i=(r=(A=(t=function(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}(e.detailJson??e.summaryJson)).fields&&"object"==typeof t.fields&&!Array.isArray(t.fields)?t.fields:{}).status&&"object"==typeof A.status&&!Array.isArray(A.status)?A.status:{},{summary:"string"==typeof A.summary?A.summary:null,status:"string"==typeof r.name?r.name:null});return ehb({key:`ticket:${e.issueKey}`,kind:"JIRA_TICKET",group:"TICKETS",title:i.summary?`${e.issueKey} \xb7 ${i.summary}`:e.issueKey,subtitle:e.projectKey,href:`/jira/tickets/${ehB(e.issueKey)}`,status:i.status,updatedAt:ehD(e.updatedAt)},a,i.summary??e.issueKey,[e.issueKey],[e.projectKey,i.status])}),t),O=(r=y.map(e=>{let[t,...A]=e.repositoryNameWithOwner.split("/"),r=A.join("/");return t&&r?ehb({key:`pull-request:${e.repositoryNameWithOwner}:${e.number}`,kind:"GITHUB_PULL_REQUEST",group:"PULL_REQUESTS",title:`${e.repositoryNameWithOwner} #${e.number} \xb7 ${e.title}`,subtitle:ehN([e.headRefName,e.jiraKey]),href:`/pull-requests/${ehB(t)}/${ehB(r)}/${e.number}`,status:e.state,updatedAt:ehD(e.updatedAt)},a,e.title,[e.number,`#${e.number}`,e.githubId,e.jiraKey],[e.repositoryNameWithOwner,e.headRefName]):null}),i=e=>e.key.toLocaleLowerCase(),n=new Set,ehv(r).filter(e=>{let t=i(e);return!n.has(t)&&(n.add(t),!0)}).slice(0,t)),U=ehR(h.map(e=>ehb({key:`repository:${e.id}`,kind:"REPOSITORY",group:"REPOSITORIES",title:e.name,subtitle:e.displayOrigin,href:`/codebases/repositories/${ehB(e.id)}`,status:null,updatedAt:ehD(e.updatedAt)},a,e.name,[e.id],[e.displayOrigin,e.canonicalOrigin,e.description])),t),F=ehR(p.map(e=>ehb({key:`codebase:${e.id}`,kind:"CODEBASE",group:"CODEBASES",title:e.folder,subtitle:ehN([e.repository.name,e.branch,e.agent.name]),href:`/codebases/${ehB(e.id)}`,status:e.availability,updatedAt:ehD(e.updatedAt)},a,e.folder,[e.id,e.branch],[e.observedOrigin,e.repository.name,e.agent.name])),t),_=ehR(I.map(e=>ehb({key:`workflow-run:${e.id}`,kind:"WORKFLOW_RUN",group:"WORKFLOWS",title:`${e.workflow.name} #${e.displayNumber}`,subtitle:e.triggerSubjectKey||null,href:`/workflows/runs/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt)},a,e.workflow.name,[e.id,e.displayNumber,`#${e.displayNumber}`],[e.status,e.triggerSubjectKey])).filter(e=>!e||!N.has(e.key)),t),G=ehR(C.map(e=>{let t=R.get(ehM(e.snapshot.repositoryNameWithOwner)),A=new URLSearchParams;return t&&A.set("repository",t.id),e.workflowId&&A.set("pipeline",e.workflowId),ehb({key:`github-actions:${e.id}`,kind:"GITHUB_ACTIONS_RUN",group:"GITHUB_ACTIONS",title:`${e.name}${e.runNumber?` #${e.runNumber}`:""}`,subtitle:e.snapshot.repositoryNameWithOwner,href:`/actions${A.size?`?${A.toString()}`:""}`,status:e.status,updatedAt:ehD(e.updatedAt)},a,e.name,[e.githubPipelineId,e.workflowRunId,e.workflowId,e.runNumber],[e.snapshot.repositoryNameWithOwner,e.status])}),t),L=ehR(m.map(e=>{let t=e.worktree?.codebase.repository??e.codebase?.repository;return ehb({key:`build:${e.id}`,kind:"BUILD",group:"BUILDS",title:e.configuration?.name??`${e.action} build`,subtitle:ehN([t?.name,e.worktree?.branch,e.id.slice(0,8)]),href:`/builds/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt)},a,e.configuration?.name??`${e.action} build`,[e.id,e.requestId],[e.action,e.status,e.commandSummary,t?.name,e.worktree?.branch,e.worktree?.folder])}).filter(e=>!e||!N.has(e.key)),t),H=ehR(u.map(e=>ehb({key:`agent:${e.id}`,kind:"AGENT",group:"AGENTS_JOBS",title:e.name,subtitle:e.hostname,href:`/agents/${ehB(e.id)}`,status:e.disconnectedAt?"OFFLINE":null,updatedAt:ehD(e.updatedAt)},a,e.name,[e.id],[e.hostname])),t),P=ehR(d.map(e=>ehb({key:`agent-job:${e.id}`,kind:"AGENT_JOB",group:"AGENTS_JOBS",title:e.kind,subtitle:ehN([e.agent.name,e.id.slice(0,8)]),href:`/jobs/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt)},a,e.kind,[e.id],[e.status,e.agent.name,e.agent.hostname])),t),J=ehR(w.map(e=>{let t="PLAN"===e.kind?"PLAN":"SESSION";return ehb({key:`${t.toLocaleLowerCase()}:${e.id}`,kind:t,group:"PLANS_SESSIONS",title:`${"PLAN"===t?"Plan":"Session"} #${e.displayNumber}`,subtitle:ehN([e.repositoryName,e.branch,e.initialPrompt.slice(0,100)]),href:`/${"PLAN"===t?"plans":"sessions"}/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt)},a,e.initialPrompt,[e.id,e.displayNumber,`#${e.displayNumber}`,e.jiraIssueKey],[e.repositoryName,e.branch,e.model,e.status])}),t),Y=ehR(Q.map(e=>ehb({key:`command:${e.id}`,kind:"COMMAND",group:"COMMANDS_RUNS",title:e.name,subtitle:e.description||null,href:`/commands/${ehB(e.id)}/edit`,status:e.archivedAt?"ARCHIVED":null,updatedAt:ehD(e.updatedAt)},a,e.name,[e.id],[e.description,e.script])),t),j=ehR(B.map(e=>ehb({key:`command-run:${e.id}`,kind:"COMMAND_RUN",group:"COMMANDS_RUNS",title:`${e.snapshotName} #${e.displayNumber}`,subtitle:ehN([e.agentName,e.worktreeBranch]),href:`/commands/runs/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt)},a,e.snapshotName,[e.id,e.displayNumber,`#${e.displayNumber}`],[e.snapshotDescription,e.agentName,e.worktreeBranch,e.status])),t),$=ehR(D.map(e=>ehb({key:`skill:${e.id}`,kind:"SKILL",group:"SKILLS",title:e.name,subtitle:e.description,href:`/skills/${ehB(e.id)}`,status:null,updatedAt:ehD(e.updatedAt)},a,e.name,[e.id],[e.description])),t),q=ehR(k.map(e=>ehb({key:`skill-group:${e.id}`,kind:"SKILL_GROUP",group:"SKILLS",title:e.name,subtitle:null,href:`/skills/groups/${ehB(e.id)}`,status:null,updatedAt:ehD(e.updatedAt)},a,e.name,[e.id])),t),V=ehR(S.map(e=>ehb({key:`device:${e.id}`,kind:"DEVICE",group:"DEVICES_PROFILES",title:e.displayName,subtitle:ehN([e.product,e.osVersion]),href:`/devices/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt)},a,e.displayName,[e.id,e.udid],[e.product,e.osVersion,e.status])),t),K=ehR(b.map(e=>ehb({key:`profile:${e.id}`,kind:"PROVISIONING_PROFILE",group:"DEVICES_PROFILES",title:e.name,subtitle:ehN([e.bundleId,e.teamName,e.agent.name]),href:`/provisioning-profiles/${ehB(e.id)}`,status:e.expired?"EXPIRED":e.profileType,updatedAt:ehD(e.observedAt)},a,e.name,[e.id,e.uuid],[e.bundleId,e.teamName,e.profileType,e.agent.name])),t);return{items:[...T,...x,...O,...U,...F,...ehR([...M,..._],t),...G,...L,...ehR([...H,...P],t),...J,...ehR([...Y,...j],t),...ehR([...$,...q],t),...ehR([...V,...K],t)].map(ehT)}}async attachWorktreeChildren(e,t){if(!e.length)return;let A=await am(),r=e.map(e=>e.key.slice(9)),i=new Map(await Promise.all(r.map(async e=>{let[r,i]=await Promise.all([A.workflowRun.findMany({where:{resourceLinks:{some:{kind:"WORKTREE",resourceId:e}}},include:{workflow:!0},orderBy:{createdAt:"desc"},take:t}),A.build.findMany({where:{worktreeId:e},include:{configuration:!0},orderBy:{createdAt:"desc"},take:t})]);return[e,{runs:r,builds:i}]})));for(let A of e){let e=A.key.slice(9),r=i.get(e);A.children=[...(r?.runs??[]).slice(0,t).map(e=>({key:`workflow-run:${e.id}`,kind:"WORKFLOW_RUN",group:"WORKFLOWS",title:`${e.workflow.name} #${e.displayNumber}`,subtitle:null,href:`/workflows/runs/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt),children:[]})),...(r?.builds??[]).slice(0,t).map(e=>({key:`build:${e.id}`,kind:"BUILD",group:"BUILDS",title:e.configuration?.name??`${e.action} build`,subtitle:e.id.slice(0,8),href:`/builds/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt),children:[]}))]}}async attachWorkflowChildren(e,t){if(!e.length)return;let A=await am(),r=e.map(e=>e.key.slice(9)),i=new Map(await Promise.all(r.map(async e=>[e,await A.workflowRun.findMany({where:{workflowId:e},include:{workflow:!0},orderBy:{createdAt:"desc"},take:t})])));for(let A of e){let e=A.key.slice(9);A.children=(i.get(e)??[]).slice(0,t).map(e=>({key:`workflow-run:${e.id}`,kind:"WORKFLOW_RUN",group:"WORKFLOWS",title:`${e.workflow.name} #${e.displayNumber}`,subtitle:e.triggerSubjectKey||null,href:`/workflows/runs/${ehB(e.id)}`,status:e.status,updatedAt:ehD(e.updatedAt),children:[]}))}}}function ehO(e,t,A){let r=e.trim().toLowerCase(),i=t.trim().toLowerCase();if(!r||!i)throw Error("Pull request repository coordinates are required");if(!Number.isInteger(A)||A<1)throw Error("Pull request number must be a positive integer");return`${r}/${i}#${A}`}function ehU(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function ehF(e,t,A){return ehU(e[t])[A]}function eh_(e,t,A={}){if("string"!=typeof t&&"number"!=typeof t)return null;let r=String(t).trim();return r?{kind:e,resourceId:r,...A}:null}let ehG=new Set(["JIRA_STATUS","JIRA_LABEL","JIRA_ASSIGNED_SELF","JIRA_SOURCE_NEW_TICKET","JIRA_MENTION","JIRA_SPRINT_STARTED","JIRA_TICKET_UPDATED","JIRA_COMMENT_ADDED","JIRA_WORKLOG_ADDED","JIRA_SPRINT_ENDED"]),ehL=new Set(["RUN_STARTED","RUN_COMPLETED","RUN_QUESTION_NEEDED","RUN_QUESTION_ANSWERED","RUN_PAUSED","RUN_CONTINUED","RUN_FAILED","RUN_CANCELLED","RUN_PLAN_PLAYED","RUN_FOLLOW_UP","RUN_IMPORTED","RUN_USAGE_THRESHOLD","RUN_EVENT_MATCH"]),ehH=new Set(["BUILD_RESULT","BUILD_TEST_THRESHOLD","BUILD_COVERAGE_THRESHOLD","BUILD_HOOK_FAILED"]),ehP=new Set(["WORKTREE_CREATED","WORKTREE_BEHIND","WORKTREE_CONFLICT","WORKTREE_MISSING","WORKTREE_DIVERGED","WORKTREE_DIRTY_DURATION","WORKTREE_NEW_COMMIT","WORKTREE_SYNC_STATE_CHANGED","WORKTREE_AUTOMATION_RESULT","WORKTREE_CLEAN"]),ehJ=new Set(["GITHUB_PR_STATE","GITHUB_REVIEW_CHANGES_REQUESTED","GITHUB_REVIEW_COMMENT","GITHUB_PR_CLOSED","GITHUB_ISSUE_COMMAND","GITHUB_PR_LABEL","GITHUB_PR_SYNCHRONIZED","GITHUB_REVIEW_APPROVED"]),ehY=new Set(["GITHUB_CHECK_FAILED","GITHUB_WORKFLOW_SUCCEEDED","GITHUB_ACTIONS_RESULT","GITHUB_PIPELINE_STATUS_CHANGED"]);function ehj(e,t){let A="string"==typeof e?Number(e.trim()):e;return"number"!=typeof A||!Number.isFinite(A)||A<=0?null:Math.min(31536e3,Math.max(t,A))}function eh$(e,t=null){let A=ehj(e.timeoutSeconds,10)??(null===t?null:ehj(t,10));return null===A?null:new Date(Date.now()+1e3*A)}function ehq(e,t){return ehj(e.cadenceSeconds,1)??Math.max(1,t)}function ehV(e,t=1){return new Date(Date.now()+1e3*ehq(e,t))}let ehK=(e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e},ehW=(e,t,A=2e4)=>{if("string"!=typeof e||!e.trim())throw Error(`${t} is required`);if(e.length>A)throw Error(`${t} is too long`);return e.trim()},ehz=(e,t=2e4)=>null==e||""===e?null:ehW(e,"Value",t),ehZ=(e,t,A,r)=>ehW(e.node.config[t]??CO(e.sessionData,A),r,500),ehX=(e,t="operation")=>`${e.run.id}:${e.attempt.id}:${t}`,eh0=(e,t,A=!1)=>({output:t,sessionPatch:{run:{[e.node.id]:t}},links:"string"==typeof t.id?[{kind:"AGENT_RUN",resourceId:t.id,label:"string"==typeof t.kind?t.kind:"Agent run",url:`/${"PLAN"===t.kind?"plans":"sessions"}/${t.id}`,metadata:{runKind:t.kind}}]:void 0,wait:A&&"string"==typeof t.id?{kind:"AGENT_RUN",externalKey:t.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}:void 0}),eh1=(e,t,A,r=[])=>({output:{jobId:t.id},sessionPatch:A,links:[...r,{kind:"AGENT_JOB",resourceId:t.id,label:"Agent job",url:`/jobs/${t.id}`}],wait:{kind:"AGENT_JOB",externalKey:t.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config,t.timeoutSeconds??3600)}}),eh2=(e,t,A,r,i)=>({kind:e,resourceId:t,label:A,url:r,metadata:i}),eh4=(e,t)=>eh2("JIRA_TICKET",e,t??e);function eh8(e,t,A){let r=eh7(e);return eh2("PULL_REQUEST",ehO(r.owner,r.name,epi(e)),t??"Pull request",A)}function eh5(e){let t=eh9(e),A=epr(e);return t&&A?eh2("PULL_REQUEST",ehO(t.owner,t.name,A),"Pull request"):null}function eh3(e){let t=e.node.config.workflowRunId??CO(e.sessionData,"pipeline.runId"),A=CO(e.sessionData,"pipeline.url");return("string"==typeof t||"number"==typeof t)&&"string"==typeof A&&A?eh2("GITHUB_WORKFLOW_RUN",String(t),"Workflow run",A):null}function eh6(e){let t=CO(e.sessionData,"run.kind");if("PLAN"!==t&&"SESSION"!==t)return null;let A=function(e){try{return epc(e)}catch{return null}}(e);return A?eh2("AGENT_RUN",A,t,`/${"PLAN"===t?"plans":"sessions"}/${A}`,{runKind:t}):null}function eh9(e){let t=e.node.config.owner,A=e.node.config.name;if("string"==typeof t&&t.trim()&&"string"==typeof A&&A.trim())return{owner:t.trim(),name:A.trim()};let r=e.sessionData.repo&&"object"==typeof e.sessionData.repo&&!Array.isArray(e.sessionData.repo)?e.sessionData.repo.displayOrigin:null,i="string"==typeof r?r.match(/(?:https?:\/\/)?github\.com[/:]([^/]+)\/([^/.]+)(?:\.git)?$/i):null,n=i?.[1]?.trim(),a=i?.[2]?.trim();return n&&a?{owner:n,name:a}:null}function eh7(e){let t=eh9(e);if(!t)throw Error("GitHub owner and repository are required");return t}function epe(e){let t=ehK(e,"Jira ticket"),A=t.issueType&&"object"==typeof t.issueType?t.issueType:{},r=t.status&&"object"==typeof t.status?t.status:{};return{...t,key:t.key,title:t.summary??t.title,type:A.name??t.type,status:r.name??t.status,statusCategory:r.category??t.statusCategory}}function ept(e){let t=ehK(e,"Pull request"),A=Array.isArray(t.reviewThreads)?t.reviewThreads:[];return{...t,headBranch:t.headRefName,headSha:t.headRefOid,merged:"MERGED"===t.state,unresolvedThreads:A.filter(e=>e&&"object"==typeof e&&!Array.isArray(e)&&!0!==e.isResolved)}}function epA(e){return ehW(e.node.config.issueKey??CO(e.sessionData,"ticket.key"),"Jira issue key",100)}function epr(e){let t=e.node.config.number??CO(e.sessionData,"pr.number"),A="string"==typeof t?Number(t):t;return"number"==typeof A&&Number.isInteger(A)&&A>=1?A:null}function epi(e){let t=epr(e);if(!t)throw Error("Pull request number is required");return t}function epn(e){return ehZ(e,"worktreeId","worktree.id","Worktree ID")}function epa(e){return ehZ(e,"codebaseId","codebase.id","Codebase ID")}function eps(e){let t=String(e.node.config.mode??"NEW").toUpperCase();if(!new Set(["NEW","EXISTING","TICKET"]).has(t))throw Error("Worktree branch mode must be NEW, EXISTING, or TICKET");return{mode:t,branchName:"TICKET"===t?null:ehz(e.node.config.branchName??CO(e.sessionData,"worktree.branch"),500),ticketKey:"TICKET"===t?ehz(e.node.config.ticketKey??CO(e.sessionData,"ticket.key"),100):null,baseBranch:ehW(e.node.config.baseBranch??CO(e.sessionData,"worktree.baseBranch")??CO(e.sessionData,"repo.defaultBranch"),"Base branch",500)}}function epo(e){return ehZ(e,"buildId","build.id","Build ID")}function epl(e){return ehW(e.node.config.agentId??CO(e.sessionData,"agent.id")??CO(e.sessionData,"codebase.agentId"),"Agent ID",500)}function epc(e){let t=e.node.config.runId;if("string"==typeof t&&t)return t;let A=e.node.config.sourceStepId;return"string"==typeof A?ehW(CO(e.sessionData,`run.${A}.id`),"Agent run ID",500):ehW(CO(e.sessionData,"run.id"),"Agent run ID",500)}function epu(e,t){let A,r;return{kind:t,worktreeId:(A=e.node.config.worktreeId,r=CO(e.sessionData,"worktree.id"),"string"==typeof A&&A===e.run.workflowId&&"string"==typeof r&&r!==A?ehW(r,"Worktree ID",500):epn(e)),jiraIssueKey:ehz(e.node.config.jiraIssueKey??CO(e.sessionData,"ticket.key"),100),provider:ehW(e.node.config.provider??"CODEX","Provider",50),model:ehW(e.node.config.model,"Model",200),effort:ehz(e.node.config.effort,50),webSearchEnabled:!0===e.node.config.webSearchEnabled,prompt:ehW(e.node.config.prompt,"Prompt",2e5),attachmentIds:Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[],mcpPresetIds:Array.isArray(e.node.config.mcpPresetIds)?e.node.config.mcpPresetIds.map(String):[]}}class epd{nextMaintenanceAt=0;async record(e){let t=await am();return await t.workflowTrigger.findFirst({where:{kind:e.kind,version:{activeFor:{is:{enabled:!0,archivedAt:null}}}},select:{id:!0}})?this.recordInTransaction(t,e):null}async recordInTransaction(e,t){let A=await e.workflowTriggerEvent.findUnique({where:{dedupeKey:t.dedupeKey}});return A||e.workflowTriggerEvent.create({data:{id:(0,AB.randomUUID)(),kind:t.kind,subjectKey:t.subjectKey,dedupeKey:t.dedupeKey,payloadJson:JSON.stringify(t.payload)}})}async maintain(){let e=Date.now();if(e<this.nextMaintenanceAt)return;let t=await am(),A=await t.workflowTriggerEvent.findMany({where:{status:"FAILED",receivedAt:{lt:new Date(e-6048e5)}},select:{id:!0},orderBy:{receivedAt:"asc"},take:1e3});if(A.length){await t.workflowTriggerEvent.deleteMany({where:{id:{in:A.map(({id:e})=>e)}}}),this.nextMaintenanceAt=0;return}this.nextMaintenanceAt=e+36e5}}function eph(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function epp(e,t){return{id:e.id,name:e.name,url:e.displayOrigin,canonicalOrigin:e.canonicalOrigin,displayOrigin:e.displayOrigin,defaultBranch:t??null}}function epg(e){return{id:e.id,name:e.name,hostname:e.hostname,connected:null===e.disconnectedAt,diskFreeBytes:e.diskFreeBytes,memoryFreeBytes:e.memoryFreeBytes}}class epm{events;agentControl;worktrees;diskSpace;domains;started;running;diskAuditTimer;diskStateFingerprints;constructor(e,t,A,r,i={}){this.events=e,this.agentControl=t,this.worktrees=A,this.diskSpace=r,this.domains=i,this.started=!1,this.running=!1,this.diskStateFingerprints=new Map}start(){!this.started&&(this.started=!0,this.running=!0,this.agentControl.registerCompletionObserver(e=>this.observeAgentJob(e)),this.consumeRuns(),this.consumeBuilds(),this.consumeWorktrees(),this.consumeCodebases(),this.consumeAgents(),this.consumePipelineStatuses(),this.consumeCommandRuns(),this.consumeCommandOutput(),this.consumeSkillSyncs(),this.consumeIosDevices(),this.consumeSigningAssets(),this.consumePushNotifications(),this.consumeBuildData(),this.consumePollingOperations(),this.consumeModelCosts(),this.consumeToolCalls(),this.diskSpace&&(this.consumeDiskSpace(),this.auditDiskSpace(!0)))}stop(){this.running=!1,this.diskAuditTimer&&clearTimeout(this.diskAuditTimer),this.diskAuditTimer=void 0}async record(e,t,A,r,i={}){await this.events.record({kind:e,subjectKey:t,dedupeKey:A,payload:{...r,...i,sessionData:r}})}async worktreeSessionData(e,t=!1){return e&&this.worktrees?this.worktrees.workflowSessionDataForWorktree(e,{includeMissing:t}):{}}async observeAgentJob(e){if(e.kind===rz&&e.worktreeId){let t=await this.worktreeSessionData(e.worktreeId,!0);await this.record("WORKTREE_AUTOMATION_RESULT",e.worktreeId,`worktree-automation:${e.id}:${e.status}`,CF(t,{worktree:{id:e.worktreeId},automation:{jobId:e.id,status:e.status,error:e.error,result:eph(e.resultJson??"{}")}}),{cursorValue:`${e.id}:${e.status}`})}if("ccusage.report"===e.kind&&"SUCCEEDED"===e.status&&e.resultJson){let t=eph(e.resultJson),A=t.report&&"object"==typeof t.report&&!Array.isArray(t.report)?t.report:{},r=A.totals&&"object"==typeof A.totals&&!Array.isArray(A.totals)?A.totals:{};await this.record("CCUSAGE_THRESHOLD",e.agentId,`ccusage:${e.ccusageCollectionId??e.id}:${e.agentId}`,{run:{usage:r},agent:{id:e.agentId}},{cursorValue:e.ccusageCollectionId??e.id});return}if(!new Set(["FAILED","TIMED_OUT"]).has(e.status))return;let t=await this.worktreeSessionData(e.worktreeId,!0);await this.record("AGENT_JOB_FAILED",e.agentId,`agent-job:${e.id}:${e.status}`,CF(t,{agent:{id:e.agentId},codebase:{id:e.codebaseId,agentId:e.agentId},...e.worktreeId?{worktree:{id:e.worktreeId}}:{},steps:{trigger:{id:e.id,kind:e.kind,status:e.status,error:e.error}}}),{cursorValue:`${e.id}:${e.status}`})}async consumeRuns(){let e=aE.iterate(aO);try{for await(let t of e){if(!this.running)break;"drafts"!==t.runChanged.id&&await this.observeRun(t.runChanged.id).catch(e=>console.error("Could not record workflow run trigger:",e))}}finally{await e.return?.()}}async consumePipelineStatuses(){let e=aE.iterate(ab);try{for await(let t of e){if(!this.running)break;let e=t.githubPipelineStatusChanged,A=e.snapshot,r=e.changedPipeline??{status:A.pipelineStatus};await this.record("GITHUB_PIPELINE_STATUS_CHANGED",`${A.repositoryGithubId}:${A.headSha}`,`github-pipeline:${A.repositoryGithubId}:${A.headSha}:${A.revision}`,{repo:{githubId:A.repositoryGithubId,nameWithOwner:A.repositoryNameWithOwner,url:A.repositoryUrl},pipeline:{...r,headSha:A.headSha,aggregateStatus:A.pipelineStatus,revision:A.revision}},{cursorValue:A.revision}).catch(e=>console.error("Could not record GitHub pipeline trigger:",e))}}finally{await e.return?.()}}async consumeCommandRuns(){let e=aE.iterate(aF);try{for await(let t of e){if(!this.running)break;let e=this.domains.commands;if(!e)continue;let A=await e.getRun(t.commandRunsChanged.id);if(!A||!new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(A.status))continue;let r=await this.worktreeSessionData(A.worktreeId,!0),i=CF(r,{command:{id:A.id,commandId:A.commandId,name:A.snapshotName,status:A.status,exitCode:A.exitCode,signal:A.signal,error:A.error,finishedAt:A.finishedAt?.toISOString()??null},agent:{id:A.agentId,name:A.agentName},...A.worktreeId?{worktree:{id:A.worktreeId}}:{}}),n=A.finishedAt?.toISOString()??"terminal";await this.record("COMMAND_RUN_RESULT",A.id,`command-result:${A.id}:${A.status}:${n}`,i,{cursorValue:`${A.status}:${n}`}).catch(e=>console.error("Could not record command result trigger:",e))}}finally{await e.return?.()}}async consumeCommandOutput(){let e=aE.iterate(a_);try{for await(let t of e){if(!this.running)break;let e=t.commandRunOutputAdded,A=Buffer.from(e.dataBase64,"base64").toString("utf8");await this.record("COMMAND_OUTPUT_MATCH",e.runId,`command-output:${e.id}`,{command:{id:e.runId},output:{data:A,stream:e.stream,attempt:e.attemptNumber,sequence:e.sequence}},{cursorValue:e.id}).catch(e=>console.error("Could not record command output trigger:",e))}}finally{await e.return?.()}}async consumeSkillSyncs(){let e=aE.iterate(av);try{for await(let t of e){if(!this.running)break;let e=this.domains.skills;if(!e||!t.id)continue;let A=await e.getRun(t.id);if(!A)continue;let r=A.items.filter(e=>"BLOCKED"===e.status).map(e=>({id:e.id,skillId:e.skillId,skillName:e.skill?.name??null,direction:e.direction,error:e.error})),i={skillSync:{id:A.id,kind:A.kind,status:A.status,error:A.error,conflictCount:r.length,conflicts:r,updatedAt:A.updatedAt.toISOString(),finishedAt:A.finishedAt?.toISOString()??null},...A.groupId?{skill:{groupId:A.groupId}}:{}};("NEEDS_RESOLUTION"===A.status||r.length)&&await this.record("SKILL_SYNC_CONFLICT",A.id,`skill-conflict:${A.id}:${A.updatedAt.toISOString()}`,i,{cursorValue:A.updatedAt.toISOString()}),new Set(["READY","PARTIAL","SUCCEEDED"]).has(A.status)&&await this.record("SKILL_SYNC_RESULT",A.id,`skill-result:${A.id}:${A.status}:${A.updatedAt.toISOString()}`,i,{cursorValue:`${A.status}:${A.updatedAt.toISOString()}`})}}finally{await e.return?.()}}async consumeIosDevices(){let e=aE.iterate(aT);try{for await(let t of e){if(!this.running)break;let e=this.domains.iosDevices;if(!e||!t.id)continue;let A=await e.device(t.id);if(!A)continue;let r={device:{id:A.id,udid:A.udid,name:A.displayName,product:A.product,osVersion:A.osVersion,status:A.status,error:A.registrationError,updatedAt:A.updatedAt.toISOString()}};await this.record("IOS_DEVICE_ENROLLED",A.id,`ios-device-enrolled:${A.id}:${A.createdAt.toISOString()}`,r,{cursorValue:A.createdAt.toISOString()}),new Set(["REGISTERED","REGISTRATION_FAILED","REJECTED"]).has(A.status)&&await this.record("IOS_DEVICE_REGISTRATION_RESULT",A.id,`ios-device-registration:${A.id}:${A.status}:${A.updatedAt.toISOString()}`,r,{cursorValue:`${A.status}:${A.updatedAt.toISOString()}`})}}finally{await e.return?.()}}async consumeSigningAssets(){let e=aE.iterate(aM);try{for await(let t of e){if(!this.running)break;if(!t.changed)continue;let e=this.domains.signingAssets;if(!e)continue;let[A,r]=await Promise.all([e.operations(200),e.profiles()]);for(let e of A.filter(e=>e.finishedAt)){let t={signingOperation:{id:e.id,kind:e.kind,status:e.status,assetKey:e.assetKey,error:e.error,finishedAt:e.finishedAt?.toISOString()??null},...e.assetKey?{signingProfile:{id:e.assetKey}}:{}};await this.record("SIGNING_OPERATION_RESULT",e.id,`signing-operation:${e.id}:${e.status}:${e.updatedAt.toISOString()}`,t,{cursorValue:`${e.status}:${e.updatedAt.toISOString()}`})}for(let e of r.filter(e=>e.expiresAt)){let t=e.expiresAt;await this.record("SIGNING_ASSET_EXPIRING",e.id,`signing-expiry:${e.id}:${t}`,{signingProfile:{...e,id:e.id}},{cursorValue:t,expiresInDays:Math.ceil((new Date(t).getTime()-Date.now())/864e5)})}}}finally{await e.return?.()}}async consumePushNotifications(){let e=aE.iterate(aN);try{for await(let t of e){if(!this.running)break;if(!t.changed)continue;let e=this.domains.pushNotifications;if(e)for(let t of(await e.history(200)).filter(e=>!new Set(["DRAFT","QUEUED","SENDING"]).has(e.status))){let e=t.updatedAt.toISOString();await this.record("PUSH_NOTIFICATION_RESULT",t.id,`push-result:${t.id}:${t.status}:${e}`,{pushBatch:{id:t.id,status:t.status,targetMode:t.targetMode,deliveryCount:t.deliveries.length,updatedAt:e}},{cursorValue:`${t.status}:${e}`})}}}finally{await e.return?.()}}async consumeBuildData(){let e=aE.iterate(aG);try{for await(let t of e){if(!this.running)break;let e=this.domains.buildData;if(!e)continue;let A=await e.getCollection(t.buildDataCollectionChanged.id);if(!A||"COMPLETED"!==A.status)continue;let r=A.entries.reduce((e,t)=>e+(t.sizeBytes??0),0),i={buildData:{id:A.id,status:A.status,finishedAt:A.finishedAt,totalBytes:r,entryCount:A.entries.length,successfulAgentCount:A.progress.successfulCount}},n=A.finishedAt??A.deadlineAt;await this.record("BUILD_DATA_THRESHOLD",A.id,`build-data-threshold:${A.id}:${n}`,i,{cursorValue:r}),await this.record("BUILD_DATA_CLEANUP_RESULT",A.id,`build-data-result:${A.id}:${n}`,i,{cursorValue:n})}}finally{await e.return?.()}}async consumePollingOperations(){let e=aE.iterate(aq);try{for await(let t of e){if(!this.running)break;let e=this.domains.polling;if(!e)continue;let A=(await e.list()).find(e=>e.id===t.pollingOperationChanged);if(!A)continue;let r=A.lastCompletedAt??A.lastStartedAt??A.nextScheduledAt??A.status;await this.record("POLLING_OPERATION_STATE",A.id,`polling-state:${A.id}:${A.status}:${r}`,{polling:A},{cursorValue:`${A.status}:${r}`}).catch(e=>console.error("Could not record polling operation trigger:",e));let i=await this.domains.credentials?.status();if(i&&"READY"!==i.state){let e=i.warnings.map(({code:e})=>e);await this.record("CREDENTIAL_STORE_DEGRADED",i.storageType,`credential-store:${i.state}:${e.join(",")}`,{credentialStore:i},{cursorValue:{state:i.state,warningCodes:e,mismatchCount:i.mismatchCount}})}}}finally{await e.return?.()}}async consumeModelCosts(){let e=aE.iterate(aL);try{for await(let{catalog:t}of e){if(!this.running)break;let e=t.fetchedAt??`${t.url}:${t.error??"pending"}`;await this.record("MODEL_COST_CATALOG_CHANGED",t.url,`model-costs:${t.url}:${e}`,{modelCosts:t},{cursorValue:e})}}finally{await e.return?.()}}async consumeToolCalls(){let e=aE.iterate(aH);try{for await(let t of e){if(!this.running)break;let e=await am(),A=await e.toolCallAudit.findUnique({where:{id:t.toolCallAuditChanged.id}});if(!A||"RUNNING"===A.resultStatus)continue;let r=A.caller.startsWith("workflow:")?A.caller.slice(9):null,i=r?await e.workflowRun.findUnique({where:{id:r},select:{id:!0,workflowId:!0}}):null,n=i?null:await e.workflowStepAttempt.findUnique({where:{id:A.correlationId},select:{run:{select:{id:!0,workflowId:!0}}}}),a=i??n?.run??null,s=A.finishedAt?.toISOString()??"unfinished";await this.record("TOOL_CALL_RESULT",A.id,`tool-call:${A.id}:${A.resultStatus}:${s}`,{toolCall:{id:A.id,correlationId:A.correlationId,caller:A.caller,source:A.source,groupId:A.groupId,toolName:A.toolName,argumentsSha256:A.argumentsSha256,resultStatus:A.resultStatus,durationMs:A.durationMs,finishedAt:A.finishedAt?.toISOString()??null}},{cursorValue:`${A.resultStatus}:${s}`,...a?{workflowCorrelation:{workflowId:a.workflowId,runId:a.id}}:{}})}}finally{await e.return?.()}}async observeRun(e){let t=await am(),A=await t.agentRun.findUnique({where:{id:e},include:{worktree:{include:{codebase:{include:{repository:!0}}}},agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},questionBatches:{orderBy:{createdAt:"desc"},take:1,include:{questions:{include:{options:!0}}}},events:{orderBy:{sequence:"desc"},take:1},toolCalls:{orderBy:{sequence:"desc"},take:1}}});if(!A)return;let r=await t.workflowRunResourceLink.findFirst({where:{kind:"AGENT_RUN",resourceId:A.id},include:{run:!0},orderBy:{createdAt:"desc"}}),i=CF(await this.worktreeSessionData(A.worktree?.id??null),{run:{id:A.id,kind:A.kind,status:A.status,phase:A.phase,origin:A.origin,provider:A.provider,model:A.model,finalOutput:A.finalOutput,error:A.error,sourcePlanId:A.sourcePlanId,parentRunId:A.parentRunId,followUpMode:A.followUpMode,usage:{inputTokens:A.inputTokens,outputTokens:A.outputTokens,reasoningTokens:A.reasoningTokens,cacheReadTokens:A.cacheReadTokens,cacheWriteTokens:A.cacheWriteTokens,toolCallCount:A.toolCallCount,estimatedCost:A.estimatedCost}},...A.worktree?{worktree:{id:A.worktree.id,path:A.worktree.folder,branch:A.worktree.branch,headSha:A.worktree.headSha},codebase:{id:A.worktree.codebase.id,folder:A.worktree.codebase.folder,agentId:A.worktree.codebase.agentId},repo:epp(A.worktree.codebase.repository,A.worktree.codebase.defaultBranch)}:{},...A.agent?{agent:epg(A.agent)}:{},...A.jiraIssueKey?{ticket:{key:A.jiraIssueKey}}:{}}),n=r?{workflowId:r.run.workflowId,runId:r.runId,attemptId:r.attemptId}:null,a={cursorValue:`${A.status}:${A.phase}`,workflowCorrelation:n};A.startedAt&&await this.record("RUN_STARTED",A.id,`run-started:${A.id}:${A.startedAt.toISOString()}`,i,a);let s="COMPLETED"===A.status?"RUN_COMPLETED":"FAILED"===A.status?"RUN_FAILED":"CANCELLED"===A.status?"RUN_CANCELLED":"PAUSED"===A.status?"RUN_PAUSED":null;s&&await this.record(s,A.id,`run-status:${A.id}:${A.status}:${A.finishedAt?.toISOString()??A.updatedAt.toISOString()}`,i,a),"RUNNING"===A.phase&&A.startedAt&&A.updatedAt>A.startedAt&&await this.record("RUN_CONTINUED",A.id,`run-continued:${A.id}:${A.updatedAt.toISOString()}`,i,a),A.sourcePlanId&&await this.record("RUN_PLAN_PLAYED",A.id,`run-plan-played:${A.id}:${A.sourcePlanId}`,i,a),A.parentRunId&&"PLAN_PLAY"!==A.followUpMode&&await this.record("RUN_FOLLOW_UP",A.id,`run-follow-up:${A.id}:${A.parentRunId}`,i,a),"IMPORTED"===A.origin&&await this.record("RUN_IMPORTED",A.id,`run-imported:${A.id}:${A.updatedAt.toISOString()}`,i,a),await this.record("RUN_USAGE_THRESHOLD",A.id,`run-usage:${A.id}:${A.updatedAt.toISOString()}`,i,{...a,cursorValue:A.updatedAt.toISOString()});let o=A.questionBatches[0];if(o){let e={...i,run:{...i.run,questions:o.questions}};"PENDING"===o.status?await this.record("RUN_QUESTION_NEEDED",A.id,`run-question:${o.id}:pending`,e,a):"ANSWERED"===o.status&&await this.record("RUN_QUESTION_ANSWERED",A.id,`run-question:${o.id}:answered`,e,a)}let l=A.events[0];l&&await this.record("RUN_EVENT_MATCH",A.id,`run-event:${l.id}`,i,{...a,event:l});let c=A.toolCalls[0];c&&await this.record("RUN_EVENT_MATCH",A.id,`run-tool:${c.id}:${c.status}`,i,{...a,toolCall:c})}async consumeBuilds(){let e=aE.iterate(aR);try{for await(let t of e){if(!this.running)break;await this.observeBuild(t.buildsChanged.id).catch(e=>console.error("Could not record workflow build trigger:",e))}}finally{await e.return?.()}}async observeBuild(e){let t=await am(),A=await t.build.findUnique({where:{id:e},include:{codebase:{include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}}},worktree:!0,reports:!0,scriptExecutions:!0}});if(!A)return;let r=CF(await this.worktreeSessionData(A.worktree?.id??null),{build:{id:A.id,status:A.status,action:A.action,error:A.error},...A.codebase?{codebase:{id:A.codebase.id,folder:A.codebase.folder,agentId:A.codebase.agentId},repo:epp(A.codebase.repository,A.codebase.defaultBranch),agent:epg(A.codebase.agent)}:{},...A.worktree?{worktree:{id:A.worktree.id,path:A.worktree.folder,branch:A.worktree.branch,headSha:A.worktree.headSha}}:{}});for(let e of(new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(A.status)&&await this.record("BUILD_RESULT",A.id,`build-result:${A.id}:${A.status}`,r,{cursorValue:A.status}),A.reports.filter(({status:e})=>"READY"===e))){let t=eph(e.summaryJson),i={...r,build:{...r.build,..."TEST_RESULTS"===e.kind?{testSummary:t}:{coverageSummary:t}}};await this.record("TEST_RESULTS"===e.kind?"BUILD_TEST_THRESHOLD":"BUILD_COVERAGE_THRESHOLD",A.id,`build-report:${e.id}:${e.updatedAt.toISOString()}`,i,{cursorValue:e.updatedAt.toISOString()})}for(let e of A.scriptExecutions.filter(({causedBuildFailure:e})=>e))await this.record("BUILD_HOOK_FAILED",A.id,`build-hook:${e.id}:failed`,r,{cursorValue:e.id,script:{id:e.id,name:e.nameSnapshot,phase:e.phase}})}async consumeWorktrees(){let e=aE.iterate(aS);try{for await(let t of e){if(!this.running)break;let e=t.worktreeOverviewChanged,A=await am();for(let t of(await A.worktree.findMany({where:e.worktreeId?{id:e.worktreeId}:e.codebaseId?{codebaseId:e.codebaseId}:{},include:{codebase:{include:{repository:!0}}},take:e.worktreeId?1:500})))await this.observeWorktree(t).catch(e=>console.error("Could not record workflow worktree trigger:",e))}}finally{await e.return?.()}}async observeWorktree(e){let t=e.lastCheckedAt??e.updatedAt,A=e.hasStagedChanges||e.hasUnstagedChanges,r=CF(await this.worktreeSessionData(e.id,!0),{repo:epp(e.codebase.repository,e.codebase.defaultBranch),codebase:{id:e.codebase.id,folder:e.codebase.folder,agentId:e.codebase.agentId},worktree:{id:e.id,path:e.folder,branch:e.branch,headSha:e.headSha,syncState:e.syncState,pushStatus:e.pushStatus,statusError:e.statusError,baseBehind:e.baseBehind,dirty:A,missingAt:e.missingAt?.toISOString()??null,dirtySince:A?e.updatedAt.toISOString():null}}),i={cursorValue:t.toISOString()};await this.record("WORKTREE_SYNC_STATE_CHANGED",e.id,`worktree-sync:${e.id}:${e.syncState}:${t.toISOString()}`,r,{cursorValue:e.syncState}),await this.record("WORKTREE_CLEAN",e.id,`worktree-clean:${e.id}:${t.toISOString()}`,r,{cursorValue:A}),(e.baseBehind??0)>0&&await this.record("WORKTREE_BEHIND",e.id,`worktree-behind:${e.id}:${t.toISOString()}`,r,i),await this.record("WORKTREE_DIRTY_DURATION",e.id,`worktree-dirty:${e.id}:${t.toISOString()}`,r,i),await this.record("WORKTREE_MISSING",e.id,`worktree-missing:${e.id}:${t.toISOString()}`,r,{cursorValue:!!e.missingAt}),await this.record("WORKTREE_DIVERGED",e.id,`worktree-diverged:${e.id}:${t.toISOString()}`,r,{cursorValue:"DIVERGED"===e.pushStatus}),e.headSha&&await this.record("WORKTREE_NEW_COMMIT",e.id,`worktree-commit:${e.id}:${e.headSha}`,r,{cursorValue:e.headSha})}async consumeCodebases(){let e=aE.iterate(ak);try{for await(let t of e){if(!this.running)break;let e=await am(),A=t.codebaseOverviewChanged;for(let t of(await e.codebase.findMany({where:A.codebaseId?{id:A.codebaseId}:A.repositoryId?{repositoryId:A.repositoryId}:{},include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}},take:A.codebaseId?1:500}))){let e={repo:epp(t.repository,t.defaultBranch),agent:epg(t.agent),codebase:{id:t.id,folder:t.folder,agentId:t.agentId,branch:t.defaultBranch,syncState:t.syncState,availability:t.availability,statusError:t.statusError,lastFetchError:t.lastFetchError,remoteBranches:JSON.parse(t.remoteBranchesJson)}},A=(t.lastCheckedAt??t.updatedAt).toISOString();await this.record("CODEBASE_SYNC_STATE_CHANGED",t.id,`codebase-sync:${t.id}:${t.syncState}:${A}`,e,{cursorValue:t.syncState}),(t.statusError||t.lastFetchError)&&await this.record("CODEBASE_OPERATION_FAILED",t.id,`codebase-failed:${t.id}:${A}`,e,{cursorValue:A,error:t.statusError??t.lastFetchError});let r=e.codebase.remoteBranches;if(Array.isArray(r))for(let A of r.filter(e=>"string"==typeof e))await this.record("CODEBASE_REMOTE_BRANCH",t.id,`codebase-remote-branch:${t.id}:${A}`,e,{cursorValue:A,branch:A})}}}finally{await e.return?.()}}async emitDiskSnapshot(e,t){let A=e.agent.id;t.report&&await this.record("AGENT_DISK_REPORT",A,`agent-disk-report:${A}:${e.disk.lastReportedAt??t.changeId}`,e,{cursorValue:e.disk.lastReportedAt}),t.threshold&&await this.record("AGENT_DISK_THRESHOLD",A,`agent-disk-threshold:${A}:${t.changeId}`,e);let r=ecE(e);if(await this.record("AGENT_DISK_STATE_CHANGED",A,`agent-disk-state:${A}:${t.changeId}`,e,{cursorValue:r}),this.diskStateFingerprints.set(A,JSON.stringify(r)),t.cleanup){let r={...e,cleanup:t.cleanup};await this.record("AGENT_DISK_CLEANUP_RESULT",A,`agent-disk-cleanup:${t.cleanup.jobId}:${t.cleanup.status}`,r,{cleanup:t.cleanup})}}async observeDiskChange(e){if(!this.diskSpace)return;let{id:t,reason:A,cleanup:r}=e.diskSpaceChange;if("settings"===e.diskSpaceChanged){let e=await this.diskSpace.overview();for(let r of e.agents)await this.emitDiskSnapshot(ecI(e.settings,r,A),{changeId:t,report:!1,threshold:!0});return}let i=await this.diskSpace.snapshot(e.diskSpaceChanged,A);await this.emitDiskSnapshot(i,{changeId:t,report:"REPORT_RECEIVED"===A,threshold:!0,cleanup:r})}async consumeDiskSpace(){if(!this.diskSpace)return;let e=this.diskSpace.subscribe();try{for await(let t of e){if(!this.running)break;await this.observeDiskChange(t).catch(e=>console.error("Could not record disk-space workflow trigger:",e))}}finally{await e.return?.()}}async auditDiskSpace(e){if(this.diskSpace&&this.running)try{let t=await this.diskSpace.overview();for(let A of t.agents){let r=ecI(t.settings,A,e?"STARTUP_RECONCILE":"STATE_AUDIT"),i=JSON.stringify(ecE(r));(e||this.diskStateFingerprints.get(A.agent.id)!==i)&&await this.emitDiskSnapshot(r,{changeId:(0,AB.randomUUID)(),report:!1,threshold:e})}}catch(e){console.error("Could not audit disk-space workflow state:",e)}finally{this.running&&(this.diskAuditTimer=setTimeout(()=>void this.auditDiskSpace(!1),6e4),this.diskAuditTimer.unref?.())}}async consumeAgents(){let e=aE.iterate(ay);try{for await(let t of e){if(!this.running)break;let e=await am(),A=await e.agent.findUnique({where:{id:t.agentChanged.id}});if(!A)continue;let r=null===A.disconnectedAt,i={codebase:{agentId:A.id},agent:{id:A.id,name:A.name,connected:r,diskFreeBytes:A.diskFreeBytes,memoryFreeBytes:A.memoryFreeBytes}};await this.record("AGENT_CONNECTION",A.id,`agent-connection:${A.id}:${A.updatedAt.toISOString()}`,i,{cursorValue:r}),await this.record("AGENT_RESOURCE_THRESHOLD",A.id,`agent-resource:${A.id}:${A.updatedAt.toISOString()}`,i,{cursorValue:{diskFreeBytes:A.diskFreeBytes,memoryFreeBytes:A.memoryFreeBytes}}),await this.record("AGENT_VERSION_CHANGED",A.id,`agent-version:${A.id}:${A.version}`,{...i,agent:{...i.agent,version:A.version,osVersion:A.osVersion,architecture:A.architecture}},{cursorValue:A.version})}}finally{await e.return?.()}}}async function epf(e,t){let A=e.trim();if(!A||A.length>5e4)throw Error(`Workflow script must contain 1–${5e4.toLocaleString()} characters`);let r=await bQ(),i=Date.now()+250;try{return r.evalCode(`"use strict"; const session = Object.freeze(${JSON.stringify(t)}); (${A})(session);`,{memoryLimitBytes:8388608,maxStackSizeBytes:524288,shouldInterrupt:bC(i)})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Workflow script failed: ${"interrupted"===e?"execution timed out after 250ms":e}`)}}class epI{handlers=new Map;register(e,t){this.handlers.set(e,t)}has(e){return this.handlers.has(e)}execute(e){let t=this.handlers.get(e.node.kind);if(!t)throw Error(`Workflow step ${e.node.kind} is not registered`);return t(e)}}let epE="workflows:changed",epy=e=>`workflow-run:${e}`,epC=e=>`workflow-run:${e}:events`,epw=e=>`workflow-run:${e}:questions`,epQ=["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED"],epB=new Set(["SUCCEEDED","FAILED","CANCELLED"]),epD=new Set(["SUCCEEDED","FAILED","CANCELLED","SKIPPED","SUPERSEDED"]),epk=new Set(["RUNNING","WAITING"]),epS=e=>JSON.parse(e);function epb(e){return{agent:{id:e.id,name:e.name,hostname:e.hostname,...void 0!==e.lastSeenAt&&void 0!==e.disconnectedAt?{connected:null!==e.lastSeenAt&&null===e.disconnectedAt&&Date.now()-e.lastSeenAt.getTime()<=a8(e)}:{},...void 0!==e.diskFreeBytes?{diskFreeBytes:e.diskFreeBytes}:{},...void 0!==e.memoryFreeBytes?{memoryFreeBytes:e.memoryFreeBytes}:{}}}}function epv(e){return CF(epb(e.agent),{codebase:{id:e.id,folder:e.folder,agentId:e.agentId,branch:e.branch,headSha:e.headSha},repo:{id:e.repository.id,name:e.repository.name,url:e.repository.displayOrigin,canonicalOrigin:e.repository.canonicalOrigin,displayOrigin:e.repository.displayOrigin,defaultBranch:e.defaultBranch}})}function epR(e,t,A){let r=e.trim();if(!r)throw Error(`${t} is required`);if(r.length>A)throw Error(`${t} is too long`);return r}function epT(e){let t=e?.trim().toUpperCase()||"QUEUE";if(!new Set(["QUEUE","CONCURRENT","COALESCE_LATEST"]).has(t))throw Error("Workflow overlap policy is not supported");return t}function epM(e,t){let A=e??("CONCURRENT"===t?4:1);if(!Number.isInteger(A)||A<1||A>32)throw Error("Maximum concurrent runs must be between 1 and 32");return A}function epN(e){return Array.isArray(e)?`[${e.map(epN).join(",")}]`:e&&"object"==typeof e?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${epN(t)}`).join(",")}}`:JSON.stringify(e)}function epx(e,t,A){if(Buffer.byteLength(e,"utf8")>A)throw Error(`${t} is too large`)}function epO(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e}function epU(e){aE.publish(epE,{workflowChanged:{id:e}})}function epF(e){aE.publish(epy(e),{workflowRunChanged:{id:e}}),aE.publish(epE,{workflowChanged:{id:"runs",runId:e}}),aE.publish(aK,{sidebarStatusChanged:!0})}function ep_(e){return[...wS.get(e.kind).requiredPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.requiredPaths,...wl(e.kind,"step",e.config)]}function epG(e){return[...wS.get(e.kind).providedPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.providedPaths,`steps.${e.id}.*`]}async function epL(e){return(await e.workflowRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:2},update:{nextValue:{increment:1}}})).nextValue-1}class epH{events;executor;checkpointRestorer;credentials;agentControl;notifications;runsService;worktrees;commandsService;jiraService;runtimeTimer;ticking;workerId;activeExecutions;claimedSecretJobs;waitPollers;constructor(e,t=new epI,A,r,i,n,a,s,o,l){this.events=e,this.executor=t,this.checkpointRestorer=A,this.credentials=r,this.agentControl=i,this.notifications=n,this.runsService=a,this.worktrees=s,this.commandsService=o,this.jiraService=l,this.ticking=!1,this.workerId=(0,AB.randomUUID)(),this.activeExecutions=new Map,this.claimedSecretJobs=new Set,this.waitPollers=new Map,this.agentControl&&(this.executor.register("TERMINAL_RUN",e=>this.startTerminalJob(e)),this.executor.register("WORKTREE_SNAPSHOT",e=>this.startCheckpointJob(e)),this.agentControl.registerCompletionHandler(iX,e=>this.workflowAgentJobCompleted(e)),this.agentControl.registerCompletionObserver(e=>this.genericAgentJobCompleted(e)),this.agentControl.registerCompletionHandler(i0,e=>this.workflowAgentJobCompleted(e)))}async controlLinkedAgentRuns(e,t){if(!this.runsService)return;let A=await am(),r=await A.workflowRunResourceLink.findMany({where:{runId:e,kind:"AGENT_RUN",attempt:{status:{in:["RUNNING","WAITING"]}}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(r.map(async({resourceId:e})=>{let A=await this.runsService.get(e);!A||"MANAGED"!==A.origin||"PAUSE"===t&&"IN_PROGRESS"!==A.status||"CONTINUE"===t&&"PAUSED"!==A.status||"CANCEL"===t&&new Set(["COMPLETED","FAILED","CANCELLED"]).has(A.status)||await this.runsService.lifecycle(e,t)}))}async cancelWaitingCommandRuns(e){if(!this.commandsService)return;let t=await am(),A=await t.workflowRunResourceLink.findMany({where:{runId:e,kind:"COMMAND_RUN",attempt:{status:"WAITING"}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(A.map(({resourceId:e})=>this.commandsService.terminateRun(e)))}async runWorktree(e){let t=CO(epS(e),"worktree.id");return"string"==typeof t&&t?(await am()).worktree.findUnique({where:{id:t},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):null}async notifyRun(e,t,A,r,i){if(!this.notifications)return;let n=await am(),a=await n.workflowRun.findUnique({where:{id:e},select:{sessionDataJson:!0}}),s=a?await this.runWorktree(a.sessionDataJson):null,o=await n.$transaction(n=>this.notifications.recordInTransaction(n,{dedupeKey:`workflow:${e}:${i}`,typeKey:t,title:A,body:r,href:`/workflows/runs/${e}`,resourceKind:"WORKFLOW_RUN",resourceId:e,worktreeId:s?.id??null,highlightColor:s?.highlightColor??null}));this.notifications.created(o)}startRuntime(){this.runtimeTimer||(this.runtimeTimer=setInterval(()=>{this.tick().catch(e=>{console.error("Workflow runtime tick failed:",e)})},1e3),this.runtimeTimer.unref?.(),this.tick().catch(e=>{console.error("Workflow runtime startup failed:",e)}))}stopRuntime(){for(let e of(this.runtimeTimer&&clearInterval(this.runtimeTimer),this.runtimeTimer=void 0,this.activeExecutions.values()))e.abort();this.activeExecutions.clear()}catalog(){return{schemaVersion:1,globalConcurrency:4,steps:wk,triggers:wG}}registerWaitPoller(e,t){this.waitPollers.set(e,t)}async list(e={}){let t=await am(),A=Math.min(Math.max(e.first??100,1),200),r=e.archive?.toUpperCase()??"ACTIVE",i=e.search?.trim(),n=await t.workflow.findMany({where:{..."ALL"===r?{}:"ARCHIVED"===r?{archivedAt:{not:null}}:{archivedAt:null},...null===e.enabled||void 0===e.enabled?{}:{enabled:e.enabled},...i?{OR:[{name:{contains:i}},{description:{contains:i}}]}:{}},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}},_count:{select:{versions:!0,runs:!0}}},orderBy:[{updatedAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:n.slice(0,A),nextCursor:n.length>A?n[A-1].id:null,totalCount:await t.workflow.count()}}async get(e){return(await am()).workflow.findUnique({where:{id:e},include:{activeVersion:!0,versions:{orderBy:{version:"desc"}},quickActionRepositories:{include:{repository:!0}},_count:{select:{runs:!0}}}})}async version(e){return(await am()).workflowVersion.findUnique({where:{id:e},include:{triggers:!0}})}async create(e){let t=epR(e.name,"Workflow name",200),A=wV(e.definition??function(e="Untitled workflow"){return wq.parse({format:wm,schemaVersion:1,name:e,description:"",triggers:[{id:"manual",kind:"MANUAL",position:{x:0,y:100},config:{}}],nodes:[],edges:[],editor:{}})}(t)),r=JSON.stringify({...A,name:t,description:e.description?.trim()??A.description});epx(r,"Workflow definition",2097152);let i=epT(e.overlapPolicy),n=await am(),a=await n.workflow.create({data:{id:(0,AB.randomUUID)(),name:t,description:e.description?.trim()??A.description,draftDefinitionJson:r,draftSchemaVersion:1,overlapPolicy:i,maxConcurrentRuns:epM(e.maxConcurrentRuns,i)}});return epU(a.id),this.get(a.id)}async saveDraft(e){let t=wV(e.definition),A=JSON.stringify(t);epx(A,"Workflow definition",2097152);let r=await this.get(e.id);if(!r)throw Error("Workflow not found");let i=epT(e.overlapPolicy??r.overlapPolicy),n=await am();return await n.workflow.update({where:{id:e.id},data:{name:t.name,description:t.description,draftDefinitionJson:A,draftSchemaVersion:t.schemaVersion,overlapPolicy:i,maxConcurrentRuns:epM(e.maxConcurrentRuns??r.maxConcurrentRuns,i)}}),epU(e.id),this.get(e.id)}async validateDraft(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let A=function(e){let t=wq.safeParse(e);if(!t.success)return{definition:null,diagnostics:t.error.issues.map(e=>({severity:"ERROR",code:"SCHEMA_INVALID",message:e.message,path:e.path.join(".")}))};let A=t.data,r=[],i=new Set;for(let e of[...A.triggers,...A.nodes])i.has(e.id)&&r.push({severity:"ERROR",code:"DUPLICATE_NODE_ID",message:`Duplicate graph id ${e.id}`,nodeId:e.id}),i.add(e.id);let n=new Set;for(let e of A.edges)n.has(e.id)&&r.push({severity:"ERROR",code:"DUPLICATE_EDGE_ID",message:`Duplicate edge id ${e.id}`}),n.add(e.id),i.has(e.source)&&i.has(e.target)||r.push({severity:"ERROR",code:"EDGE_ENDPOINT_MISSING",message:`Edge ${e.id} references a missing endpoint`}),A.triggers.some(({id:t})=>t===e.target)&&r.push({severity:"ERROR",code:"TRIGGER_HAS_INPUT",message:"Triggers cannot have incoming edges",triggerId:e.target});A.triggers.length||r.push({severity:"ERROR",code:"TRIGGER_REQUIRED",message:"At least one trigger is required"}),A.nodes.length||r.push({severity:"ERROR",code:"STEP_REQUIRED",message:"At least one step is required"});let a=new Set(A.nodes.map(({id:e})=>e)),s=new Map,o=new Map;for(let e of A.edges)s.set(e.source,[...s.get(e.source)??[],e.target]),o.set(e.target,[...o.get(e.target)??[],e.source]);for(let e of A.nodes)(o.get(e.id)??[]).filter(e=>a.has(e)).length>1&&"CONTROL_JOIN"!==e.kind&&r.push({severity:"ERROR",code:"EXPLICIT_JOIN_REQUIRED",message:"Nodes with multiple incoming branches must be explicit join nodes",nodeId:e.id});let l=new Map(A.nodes.map(e=>[e.id,0]));for(let e of A.edges)a.has(e.source)&&a.has(e.target)&&l.set(e.target,(l.get(e.target)??0)+1);let c=[...l].filter(([,e])=>0===e).map(([e])=>e),u=[];for(;c.length;){let e=c.shift();for(let t of(u.push(e),s.get(e)??[])){if(!a.has(t))continue;let e=(l.get(t)??0)-1;l.set(t,e),0===e&&c.push(t)}}u.length!==A.nodes.length&&r.push({severity:"ERROR",code:"DAG_CYCLE",message:"Workflow graphs cannot contain free-form cycles"});let d=new Map,h=e=>{let t=new Set,A=[...s.get(e)??[]];for(;A.length;){let e=A.shift();t.has(e)||(t.add(e),A.push(...s.get(e)??[]))}return t};for(let e of[...A.triggers,...A.nodes])d.set(e.id,h(e.id));for(let e of A.nodes){for(let t of(A.triggers.some(t=>d.get(t.id)?.has(e.id))||r.push({severity:"ERROR",code:"UNREACHABLE_STEP",message:"Step is not reachable from a trigger",nodeId:e.id}),w1(e.config)&&r.push({severity:"ERROR",code:"SECRET_LITERAL",message:"Store secrets as credential references, not workflow literals",nodeId:e.id}),w2(e.config)&&r.push({severity:"ERROR",code:"UNRESOLVED_REFERENCE",message:"Resolve imported references before publishing",nodeId:e.id}),new Set(CL(e.config))))r.push({severity:"ERROR",code:"SESSION_BINDING_INVALID",message:t,nodeId:e.id});"CONTROL_SUBWORKFLOW"===e.kind&&"string"!=typeof e.config.versionId&&r.push({severity:"ERROR",code:"SUBWORKFLOW_VERSION_REQUIRED",message:"Sub-workflows must pin a published version",nodeId:e.id})}for(let e of A.triggers){for(let t of((s.get(e.id)??[]).length||r.push({severity:"ERROR",code:"TRIGGER_DISCONNECTED",message:"Trigger is not connected to a step",triggerId:e.id}),w1(e.config)&&r.push({severity:"ERROR",code:"SECRET_LITERAL",message:"Store secrets as credential references, not trigger literals",triggerId:e.id}),w2(e.config)&&r.push({severity:"ERROR",code:"UNRESOLVED_REFERENCE",message:"Resolve imported references before publishing",triggerId:e.id}),new Set(CL(e.config))))r.push({severity:"ERROR",code:"SESSION_BINDING_INVALID",message:t,triggerId:e.id});if(CS(e.kind)&&!wE(e.config)&&r.push({severity:"ERROR",code:"RESOURCE_KIND_REQUIRED",message:"Resource triggers must target a single resource kind; add one trigger per kind",triggerId:e.id}),Ck(e.kind)){let t=wf(e.config),i=Array.isArray(e.config.choices)?e.config.choices.length:0;t.length&&t.length===i||r.push({severity:"ERROR",code:"TRIGGER_CHOICES_REQUIRED",message:"Choice triggers need at least one option, each with a unique key",triggerId:e.id});let n=new Set(t.map(({key:e})=>e));for(let t of A.edges)t.source===e.id&&(n.has(t.sourceHandle)||r.push({severity:"ERROR",code:"TRIGGER_CHOICE_HANDLE_UNKNOWN",message:`Connection ${t.id} leaves an option that no longer exists`,triggerId:e.id}))}if("GITHUB_ISSUE_COMMAND"===e.kind){let t=e.config.allowedLogins,A=e.config.commandPattern;(!Array.isArray(t)||!t.length||t.some(e=>"string"!=typeof e||!e.trim()))&&r.push({severity:"ERROR",code:"ISSUE_COMMAND_ALLOWLIST_REQUIRED",message:"Issue command triggers require an explicit GitHub login allow-list",triggerId:e.id}),"string"==typeof A&&A.startsWith("^")&&A.endsWith("$")||r.push({severity:"ERROR",code:"ISSUE_COMMAND_PATTERN_ANCHORED",message:"Issue command patterns must be anchored with ^ and $",triggerId:e.id})}}for(let e of w0(A).requirementViolations)r.push({severity:"ERROR",code:"REQUIREMENT_UNSATISFIED",message:`${e.path} is not guaranteed on the path from ${e.triggerName}`,nodeId:e.nodeId,triggerId:e.triggerId,path:e.path});for(let e=0;e<A.nodes.length;e+=1){let t=A.nodes[e],i=[...wK(t,wS.get(t.kind).providedPaths),...t.providedPaths].filter(e=>!e.startsWith(`steps.${t.id}.`));for(let n=e+1;n<A.nodes.length;n+=1){let e=A.nodes[n];if(d.get(t.id)?.has(e.id)||d.get(e.id)?.has(t.id))continue;let a=[...wK(e,wS.get(e.kind).providedPaths),...e.providedPaths].filter(t=>!t.startsWith(`steps.${e.id}.`));i.some(e=>a.some(t=>wW(e,t)||wW(t,e)))&&r.push({severity:"ERROR",code:"PARALLEL_WRITE_CONFLICT",message:`Parallel steps ${t.name??t.id} and ${e.name??e.id} can write the same session-data path`,nodeId:e.id})}}return{definition:A,diagnostics:r}}(epS(t.draftDefinitionJson)),r=[...A.diagnostics];return A.definition&&r.push(...await this.validateSubworkflows(t.id,A.definition)),{valid:!r.some(({severity:e})=>"ERROR"===e),diagnostics:r}}async validateSubworkflows(e,t){let A=t.nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(e=>({node:e,versionId:e.config.versionId})).filter(e=>"string"==typeof e.versionId);if(!A.length)return[];let r=await am(),i=new Map,n=new Map,a=new Set,s=new Set,o=A.map(({versionId:e})=>e);for(;o.length;){let e=[...new Set(o)].filter(e=>!s.has(e));if(!e.length)break;for(let t of(e.forEach(e=>s.add(e)),o=[],await r.workflowVersion.findMany({where:{id:{in:e}}}))){i.set(t.id,t);try{let e=wV(epS(t.definitionJson)).nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(({config:e})=>e.versionId).filter(e=>"string"==typeof e);n.set(t.id,e),o.push(...e)}catch{a.add(t.id)}}}let l=(e,t)=>{let A=i.get(e);if(!A)return"MISSING";if(a.has(e))return"INVALID";if(t.has(A.workflowId))return"RECURSIVE";let r=new Set(t).add(A.workflowId);for(let t of n.get(e)??[]){let e=l(t,r);if(e)return e}return null},c=[];for(let{node:t,versionId:r}of A){let A=l(r,new Set([e]));"MISSING"===A?c.push({severity:"ERROR",code:"SUBWORKFLOW_NOT_FOUND",message:"Pinned sub-workflow chain contains a missing version",nodeId:t.id}):"INVALID"===A?c.push({severity:"ERROR",code:"SUBWORKFLOW_INVALID",message:"Pinned sub-workflow chain contains an invalid definition",nodeId:t.id}):"RECURSIVE"===A&&c.push({severity:"ERROR",code:"SUBWORKFLOW_RECURSION",message:"Pinned sub-workflow calls cannot form a recursive chain",nodeId:t.id})}return c}async publish(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let A=wV(epS(t.draftDefinitionJson)),r=await this.validateDraft(e);if(!r.valid)throw Error(`Workflow cannot be published: ${r.diagnostics.filter(({severity:e})=>"ERROR"===e).map(({message:e})=>e).slice(0,5).join("; ")}`);let i=await am(),n=await i.$transaction(async t=>{let r=await t.workflowVersion.findFirst({where:{workflowId:e},orderBy:{version:"desc"}}),i=(0,AB.randomUUID)(),n=await t.workflowVersion.create({data:{id:i,workflowId:e,version:(r?.version??0)+1,name:A.name,description:A.description,schemaVersion:A.schemaVersion,definitionJson:JSON.stringify(A),contentHash:(0,AB.createHash)("sha256").update(epN(A)).digest("hex"),triggers:{create:A.triggers.map(e=>({id:(0,AB.randomUUID)(),nodeId:e.id,kind:e.kind,configJson:JSON.stringify(e.config)}))}},include:{triggers:!0}});return await t.workflow.update({where:{id:e},data:{activeVersionId:i}}),n});return epU(e),n}async setEnabled(e,t){let A=await am(),r=await A.workflow.findUnique({where:{id:e}});if(!r)throw Error("Workflow not found");if(t&&!r.activeVersionId)throw Error("Publish the workflow before enabling it");return await A.workflow.update({where:{id:e},data:{enabled:t}}),epU(e),this.get(e)}async setQuickAction(e){let t=await am(),A=[...new Set(e.repositoryIds.map(e=>e.trim()).filter(Boolean))],[r,i]=await Promise.all([t.workflow.findUnique({where:{id:e.id},select:{id:!0}}),t.codebaseRepository.count({where:{id:{in:A}}})]);if(!r)throw Error("Workflow not found");if(i!==A.length)throw Error("One or more repositories were not found");let n=e.quickActionIconKey.trim();if(!CQ.includes(e.kind))throw Error("Quick action kind is invalid");if("none"!==n&&!AV.includes(n))throw Error("Quick action icon is invalid");let a=e.quickActionButtonVariant.trim();if(!["default","outline","secondary","destructive"].includes(a))throw Error("Quick action button style is invalid");return await t.$transaction(async t=>{await t.workflow.update({where:{id:e.id},data:{quickActionKind:e.kind,quickActionIconKey:n,quickActionButtonVariant:a}}),await t.workflowQuickActionRepository.deleteMany({where:{workflowId:e.id}}),A.length&&await t.workflowQuickActionRepository.createMany({data:A.map(t=>({workflowId:e.id,repositoryId:t}))})}),epU(e.id),this.get(e.id)}async archive(e,t){let A=await am();return await A.workflow.update({where:{id:e},data:{archivedAt:t?new Date:null,...t?{enabled:!1}:{}}}),epU(e),this.get(e)}async delete(e){let t=await am();if(await t.workflowRun.count({where:{workflowId:e}}))throw Error("Archive workflows that have run history instead of deleting them");return await t.workflow.delete({where:{id:e}}),epU(e),!0}export(e,t){return this.exportInternal(e,t)}async exportInternal(e,t){let A,r=await this.get(e);if(!r)throw Error("Workflow not found");let i=t?r.versions.find(e=>e.id===t):null;if(t&&!i)throw Error("Workflow version not found");let n=wV(epS(i?.definitionJson??r.draftDefinitionJson));return{format:"aide.workflow.export",schemaVersion:1,exportedAt:new Date().toISOString(),workflow:{name:i?.name??r.name,description:i?.description??r.description,overlapPolicy:r.overlapPolicy,maxConcurrentRuns:r.maxConcurrentRuns,definition:(A=(e,t="")=>Array.isArray(e)?e.map(e=>A(e,t)):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,A(t,e)])):"string"==typeof e&&/(token|secret|password|passwd|private.?key|api.?key|authorization)/i.test(t)&&!/(credential.?id|credential.?ids)$/i.test(t)||"string"==typeof e&&/^(?:\/|[A-Za-z]:[\\/]|\\\\)/.test(e)&&/^(?:cwd|folder|path|directory)$/i.test(t)?null:e,wq.parse(A(n)))}}}async import(e){epx("string"==typeof e.payload?e.payload:JSON.stringify(e.payload),"Workflow import",2097152);let t=epO("string"==typeof e.payload?JSON.parse(e.payload):e.payload,"Workflow import"),A="aide.workflow.export"===t.format,r=A?epO(t.workflow,"Exported workflow"):t,i=wV(A?r.definition:r);return this.create({name:e.name?.trim()||i.name,description:i.description,definition:{...i,name:e.name?.trim()||i.name},overlapPolicy:"string"==typeof r.overlapPolicy?r.overlapPolicy:"QUEUE",maxConcurrentRuns:"number"==typeof r.maxConcurrentRuns?r.maxConcurrentRuns:1})}async runs(e={}){let t=await am(),A=Math.min(Math.max(e.first??100,1),200),r=Number(e.search),i=e.archive?.toUpperCase()??"ACTIVE",n="ALL"===i?{}:"ARCHIVED"===i?{archivedAt:{not:null}}:{archivedAt:null},a=await t.workflowRun.findMany({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{},...e.status?{status:e.status.toUpperCase()}:{},...Number.isInteger(r)&&r>0?{displayNumber:r}:e.search?.trim()?{workflow:{name:{contains:e.search.trim()}}}:{}},include:{workflow:!0,version:!0,trigger:!0,_count:{select:{attempts:!0,events:!0}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:a.slice(0,A),nextCursor:a.length>A?a[A-1].id:null,totalCount:await t.workflowRun.count({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{}}})}}async archiveRuns(e,t){let A=await am(),r=[...new Set(e)],i=await A.workflowRun.updateMany({where:{id:{in:r}},data:{archivedAt:t?new Date:null}});for(let e of r)epF(e);return i.count}async deleteRuns(e){let t=await am(),A=[...new Set(e)];if(await t.workflowRun.count({where:{id:{in:A},status:{notIn:["SUCCEEDED","FAILED","CANCELLED"]}}}))throw Error("Cancel runs that have not finished before deleting them");let r=await t.workflowRun.deleteMany({where:{id:{in:A}}});for(let e of A)epF(e);return r.count}async run(e){return(await am()).workflowRun.findUnique({where:{id:e},include:{workflow:!0,version:!0,trigger:!0,parentRun:!0,childRuns:{orderBy:{createdAt:"asc"}},attempts:{orderBy:[{generation:"asc"},{nodeId:"asc"},{iterationKey:"asc"},{attempt:"asc"}],include:{waits:{orderBy:{createdAt:"asc"}},resourceLinks:{orderBy:{createdAt:"asc"}},questionBatches:{orderBy:{createdAt:"asc"},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}},checkpoints:{orderBy:{createdAt:"asc"}}}},waits:{orderBy:{createdAt:"asc"}},events:{orderBy:{sequence:"asc"}},resourceLinks:{orderBy:{createdAt:"asc"}}}})}async runEvents(e,t=-1,A=500){return(await am()).workflowRunEvent.findMany({where:{runId:e,sequence:{gt:t}},orderBy:{sequence:"asc"},take:Math.min(Math.max(A,1),1e3)})}async questionBatch(e){return(await am()).runQuestionBatch.findUnique({where:{id:e},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}})}async jobSecrets(e,t){if(!this.credentials||!this.agentControl)throw Error("Workflow credentials are unavailable");if(this.claimedSecretJobs.has(t))throw Error("Workflow job secrets were already claimed");let A=await this.agentControl.getJob(t);if(!A||A.agentId!==e||"workflow.terminal.run"!==A.kind||"RUNNING"!==A.status)throw Error("Workflow job is not eligible to claim secrets");let r=i5(epS(A.payloadJson)),i=new Set(Object.values(sN)),n=[];for(let e of r.credentialEnvironment){if(!i.has(e.credential.kind))throw Error("Workflow references an unsupported credential kind");let t=await this.credentials.getText(e.credential);if(null===t)throw Error(`Credential ${e.credential.id} is unavailable`);n.push({name:e.name,value:t})}return this.claimedSecretJobs.add(t),n}async workflowAgentContext(e){let t=await am(),A=CO(e,"worktree.id");if("string"==typeof A){let e=await t.worktree.findUnique({where:{id:A},include:{codebase:{include:{agent:!0}}}});if(!e)throw Error("Workflow worktree is unavailable");let r=JSON.parse(e.codebase.agent.capabilitiesJson);return{agentId:e.codebase.agentId,codebaseId:e.codebaseId,worktreeId:e.id,cwd:e.folder,capabilities:Array.isArray(r)?r.filter(e=>"string"==typeof e):[]}}let r=CO(e,"codebase.id");if("string"!=typeof r)throw Error("Workflow requires a codebase or worktree");let i=await t.codebase.findUnique({where:{id:r},include:{agent:!0}});if(!i)throw Error("Workflow codebase is unavailable");let n=JSON.parse(i.agent.capabilitiesJson);return{agentId:i.agentId,codebaseId:i.id,worktreeId:null,cwd:i.folder,capabilities:Array.isArray(n)?n.filter(e=>"string"==typeof e):[]}}async startTerminalJob(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await this.workflowAgentContext(e.sessionData);if(!t.capabilities.includes(iX))throw Error("The selected agent must be updated to run workflow terminal steps");let A={...e.node.config.environment&&"object"==typeof e.node.config.environment&&!Array.isArray(e.node.config.environment)?Object.fromEntries(Object.entries(e.node.config.environment).map(([e,t])=>[e,String(t)])):{},AIDE_TICKET_KEY:String(CO(e.sessionData,"ticket.key")??""),AIDE_TICKET_TITLE:String(CO(e.sessionData,"ticket.title")??""),AIDE_BRANCH:String(CO(e.sessionData,"worktree.branch")??""),AIDE_BASE_BRANCH:String(CO(e.sessionData,"worktree.baseBranch")??""),AIDE_WORKTREE_PATH:String(CO(e.sessionData,"worktree.path")??t.cwd),AIDE_CODEBASE_PATH:String(CO(e.sessionData,"codebase.folder")??t.cwd),AIDE_REPO_ORIGIN:String(CO(e.sessionData,"repo.displayOrigin")??"")},r=Array.isArray(e.node.config.credentials)?e.node.config.credentials:[],i=await this.agentControl.createJob({agentId:t.agentId,kind:iX,payload:{workflowRunId:e.run.id,stepAttemptId:e.attempt.id,stepId:e.node.id,codebaseId:t.codebaseId,worktreeId:t.worktreeId,cwd:t.cwd,script:epR(String(e.node.config.script??""),"Terminal script",1e6),interpreter:"NODE"===e.node.config.interpreter?"NODE":"SHELL",sessionData:e.sessionData,environment:A,credentialEnvironment:r},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:Number(e.node.config.timeoutSeconds??900),codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:i.id},links:[{kind:"AGENT_JOB",resourceId:i.id,label:"Workflow terminal job",url:`/jobs/${i.id}`}],wait:{kind:"AGENT_JOB",externalKey:i.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config,900)}}}async startCheckpointJob(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await this.workflowAgentContext(e.sessionData);if(!t.capabilities.includes(i0))throw Error("The selected agent must be updated to capture workflow checkpoints");let A=await this.agentControl.createJob({agentId:t.agentId,kind:i0,payload:{operation:"CAPTURE",workflowRunId:e.run.id,stepAttemptId:e.attempt.id,cwd:t.cwd,kind:String(e.node.config.kind??"STEP"),checkpoint:null,stash:!1},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:300,codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:A.id},links:[{kind:"AGENT_JOB",resourceId:A.id,label:"Workflow checkpoint job",url:`/jobs/${A.id}`}],wait:{kind:"AGENT_JOB",externalKey:A.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}}}async workflowAgentJobCompleted(e){if(e.kind===iX){let t=i5(epS(e.payloadJson));if("SUCCEEDED"!==e.status||!e.resultJson)return void await this.resolveExternalWait("AGENT_JOB",e.id,{jobId:e.id,status:e.status},e.error||`Workflow terminal job ${e.status.toLowerCase()}`);let A=epO(epS(e.resultJson),"Workflow terminal result");return void await this.resolveExternalWait("AGENT_JOB",e.id,{...A,jobId:e.id,stepAttemptId:t.stepAttemptId})}if(e.kind!==i0)return;let t=i3(epS(e.payloadJson));if("SUCCEEDED"!==e.status||!e.resultJson)return void await this.resolveExternalWait("AGENT_JOB",e.id,{jobId:e.id,status:e.status},e.error||`Workflow checkpoint job ${e.status.toLowerCase()}`);let A=epO(epS(e.resultJson),"Workflow checkpoint result"),r=null;if(A.checkpoint&&"object"==typeof A.checkpoint){let e=A.checkpoint,i=await am();r=(0,AB.randomUUID)(),await i.$transaction([i.runCheckpoint.create({data:{id:r,workflowStepAttemptId:t.stepAttemptId,kind:String(e.kind??t.kind),headSha:"string"==typeof e.headSha?e.headSha:null,branch:"string"==typeof e.branch?e.branch:null,upstreamSha:"string"==typeof e.upstreamSha?e.upstreamSha:null,indexTree:"string"==typeof e.indexTree?e.indexTree:null,worktreeTree:"string"==typeof e.worktreeTree?e.worktreeTree:null,refName:"string"==typeof e.refName?e.refName:null,manifestJson:"string"==typeof e.manifestJson?e.manifestJson:null,diffSummary:"string"==typeof e.diffSummary?e.diffSummary:null,diffPatch:"string"==typeof e.diffPatch?e.diffPatch:null,stashRef:"string"==typeof A.stashRef?A.stashRef:"string"==typeof e.stashRef?e.stashRef:null}}),i.workflowRunResourceLink.create({data:{id:(0,AB.randomUUID)(),runId:t.workflowRunId,attemptId:t.stepAttemptId,kind:"CHECKPOINT",resourceId:r,label:`${String(e.kind??t.kind)} checkpoint`}})])}await this.resolveExternalWait("AGENT_JOB",e.id,{...A,jobId:e.id,checkpointId:r})}async genericAgentJobCompleted(e){if(e.kind===iX||e.kind===i0)return;let t=e.resultJson?epO(epS(e.resultJson),"Agent job result"):{status:e.status};if("SUCCEEDED"===e.status){let A=await am(),r=t.worktree&&"object"==typeof t.worktree&&!Array.isArray(t.worktree)?t.worktree:null,i=r&&"string"==typeof r.gitDirectory?r.gitDirectory:null,n=e.codebaseId?await A.worktree.findFirst({where:{codebaseId:e.codebaseId,...e.worktreeId?{id:e.worktreeId}:i?{gitDirectory:i}:{id:"__missing__"}},include:{codebase:{include:{repository:!0,agent:!0}}}}):null,a=n?.codebase??(e.codebaseId?await A.codebase.findUnique({where:{id:e.codebaseId},include:{repository:!0,agent:!0}}):null),s={};if(n&&this.worktrees?.workflowSessionDataForWorktree)try{s=await this.worktrees.workflowSessionDataForWorktree(n.id,{includeMissing:!0})}catch{}if(a&&!s.codebase&&(s.repo={id:a.repository.id,name:a.repository.name,url:a.repository.displayOrigin,canonicalOrigin:a.repository.canonicalOrigin,displayOrigin:a.repository.displayOrigin,defaultBranch:a.defaultBranch},s.codebase={id:a.id,folder:a.folder,agentId:a.agentId,branch:a.defaultBranch,headSha:a.headSha},s.agent={id:a.agent.id,name:a.agent.name,hostname:a.agent.hostname}),n&&!s.worktree&&(s.worktree={id:n.id,path:n.folder,branch:n.branch,baseBranch:n.baseBranchOverride??n.codebase.defaultBranch,headSha:n.headSha,pushStatus:n.pushStatus,ahead:n.ahead,behind:n.behind,baseBehind:n.baseBehind,dirty:n.hasStagedChanges||n.hasUnstagedChanges}),Object.keys(s).length){let e=t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)?t.sessionPatch:{};t={...t,sessionPatch:CF(e,s)}}}await this.resolveExternalWait("AGENT_JOB",e.id,{...t,jobId:e.id,status:e.status},"SUCCEEDED"===e.status?null:e.error||`Agent job ${e.status.toLowerCase()}`)}async restoreCheckpointWithAgent(e,t){if(!this.agentControl)throw Error("Agent control is unavailable");let A=await am(),r=await A.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow checkpoint not found");let n=await this.workflowAgentContext(CJ(i.run.sessionDataJson)),a=await this.agentControl.createJob({agentId:n.agentId,kind:i0,payload:{operation:"RESTORE",workflowRunId:i.runId,stepAttemptId:i.id,cwd:n.cwd,kind:"REPLAY_RESTORE",checkpoint:{headSha:r.headSha,branch:r.branch,upstreamSha:r.upstreamSha,indexTree:r.indexTree,worktreeTree:r.worktreeTree,refName:r.refName},stash:t.stash},idempotencyKey:`workflow:restore:${e}:${(0,AB.randomUUID)()}`,timeoutSeconds:300,codebaseId:n.codebaseId,worktreeId:n.worktreeId,visibility:"SYSTEM"}),s=Date.now()+3e5;for(;Date.now()<s;){let e=await this.agentControl.getJob(a.id);if(!e)throw Error("Workflow restore job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(e.status)){if("SUCCEEDED"!==e.status)throw Error(e.error||`Workflow restore job ${e.status.toLowerCase()}`);return}await new Promise(e=>setTimeout(e,250))}throw await this.agentControl.cancelJob(a.id),Error("Workflow restore job timed out")}async compareCheckpointWithAgent(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await am(),A=await t.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),r=A?.workflowStepAttempt;if(!A||!r)throw Error("Workflow checkpoint not found");let i=await this.workflowAgentContext(CJ(r.run.sessionDataJson)),n=await this.agentControl.createJob({agentId:i.agentId,kind:i0,payload:{operation:"COMPARE",workflowRunId:r.runId,stepAttemptId:r.id,cwd:i.cwd,kind:"REPLAY_PREVIEW",checkpoint:{headSha:A.headSha,branch:A.branch,upstreamSha:A.upstreamSha,indexTree:A.indexTree,worktreeTree:A.worktreeTree,refName:A.refName},stash:!1},idempotencyKey:`workflow:compare:${e}:${(0,AB.randomUUID)()}`,timeoutSeconds:60,codebaseId:i.codebaseId,worktreeId:i.worktreeId,visibility:"SYSTEM"}),a=Date.now()+6e4;for(;Date.now()<a;){let e=await this.agentControl.getJob(n.id);if(!e)throw Error("Workflow comparison job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(e.status)){if("SUCCEEDED"!==e.status||!e.resultJson)throw Error(e.error||`Workflow comparison job ${e.status.toLowerCase()}`);let t=epO(epS(e.resultJson),"Workflow comparison result");return epO(t.comparison,"Git checkpoint comparison")}await new Promise(e=>setTimeout(e,250))}throw await this.agentControl.cancelJob(n.id),Error("Workflow comparison job timed out")}async runsForResource(e,t){let A=await am(),r=await A.workflowRunResourceLink.findMany({where:{kind:e.trim().toUpperCase(),resourceId:t.trim()},select:{runId:!0},distinct:["runId"],orderBy:{createdAt:"desc"}});return A.workflowRun.findMany({where:{id:{in:r.map(({runId:e})=>e)}},include:{workflow:!0,version:!0,trigger:!0,attempts:{orderBy:[{generation:"asc"},{createdAt:"asc"}],include:{resourceLinks:{orderBy:{createdAt:"asc"}},questionBatches:{orderBy:{createdAt:"asc"},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}}}},resourceLinks:{orderBy:{createdAt:"asc"}}},orderBy:{createdAt:"desc"}})}async acceptingResource(e){let t=e.trim().toUpperCase(),A=await am();return(await A.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:!0},orderBy:{name:"asc"}})).filter(e=>!!e.activeVersion&&wV(epS(e.activeVersion.definitionJson)).triggers.some(e=>CS(e.kind)&&wE(e.config)===t))}async quickActions(e){let t=await am();if(!CQ.includes(e.kind))throw Error("Quick action kind is invalid");let A=e.resourceKind.trim().toUpperCase(),r=e.repositoryId?.trim()||null;return(await t.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null},quickActionKind:e.kind,OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:r??""}}}]},include:{activeVersion:!0},orderBy:[{name:"asc"},{id:"asc"}]})).filter(e=>!!e.activeVersion&&wV(epS(e.activeVersion.definitionJson)).triggers.some(e=>CS(e.kind)&&wE(e.config)===A))}async recordEvent(e){return this.events.record(e)}async hydrateResourceSessionData(e,t,A){let r=e?.toUpperCase()??null,i=await am(),n={},a=null;if("CODEBASE"===r&&t){let e=await i.codebase.findUnique({where:{id:t},select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},repository:{select:{id:!0,name:!0,canonicalOrigin:!0,displayOrigin:!0}}}});e&&(n=epv(e))}if("BUILD"===r&&t){let e=await i.build.findUnique({where:{id:t},select:{id:!0,status:!0,action:!0,error:!0,artifactDirectory:!0,worktreeId:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},codebase:{select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},repository:{select:{id:!0,name:!0,canonicalOrigin:!0,displayOrigin:!0}}}},artifacts:{select:{id:!0,kind:!0,relativePath:!0,sizeBytes:!0,checksum:!0}},reports:{where:{status:"READY"},select:{kind:!0,summaryJson:!0}}}});if(e){a=e.worktreeId;let t=t=>{let A=e.reports.find(e=>e.kind===t);if(A)try{return CJ(A.summaryJson)}catch{return}},A=t("TEST_RESULTS"),r=t("CODE_COVERAGE");n=CF(e.codebase?epv(e.codebase):e.agent?epb(e.agent):{},{build:{id:e.id,status:e.status,action:e.action,error:e.error,artifactDirectory:e.artifactDirectory,artifacts:e.artifacts,...A?{testSummary:A}:{},...r?{coverageSummary:r}:{}}})}}if("AGENT_RUN"===r&&t){let e=await i.agentRun.findUnique({where:{id:t},select:{id:!0,kind:!0,status:!0,phase:!0,origin:!0,provider:!0,model:!0,branch:!0,finalOutput:!0,error:!0,jiraIssueKey:!0,worktreeId:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,toolCallCount:!0,estimatedCost:!0}});e&&(a=e.worktreeId,n=CF(e.agent?epb(e.agent):{},{run:{id:e.id,kind:e.kind,status:e.status,phase:e.phase,origin:e.origin,provider:e.provider,model:e.model,branch:e.branch,finalOutput:e.finalOutput,error:e.error,usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,reasoningTokens:e.reasoningTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,toolCallCount:e.toolCallCount,estimatedCost:e.estimatedCost}},...e.jiraIssueKey?{ticket:{key:e.jiraIssueKey}}:{}}))}if("PULL_REQUEST"===r&&t&&this.worktrees?.workflowSessionDataForPullRequest){let e=/^([^/]+)\/([^#]+)#([1-9]\d*)$/.exec(t);e&&(n=CF(n,await this.worktrees.workflowSessionDataForPullRequest(e[1],e[2],Number(e[3]))))}if("JIRA_TICKET"===r&&t&&this.jiraService)try{let e=await this.jiraService.ticket(t),A=e.comments.at(-1)??null;n=CF(n,{ticket:{...e,title:e.summary,type:e.issueType,url:e.jiraUrl},...A?{comment:{id:A.id,body:A.content?.rawText??"",author:A.author}}:{}})}catch{}let s=CO(A,"worktree.id"),o="WORKTREE"===r?t:"GITHUB_PIPELINE"===r||"GITHUB_JOB"===r?"string"==typeof s?s:null:a;if(o&&this.worktrees)if(this.worktrees.workflowSessionDataForWorktree)n=CF(await this.worktrees.workflowSessionDataForWorktree(o),n);else{let e=await this.worktrees.ticketKeyForWorktree(o);e&&(n=CF({ticket:{key:e}},n))}let l=CO(A,"pipeline.pullRequests");!CO(n,"pr")&&!CO(A,"pr")&&Array.isArray(l)&&l[0]&&"object"==typeof l[0]&&!Array.isArray(l[0])&&(n=CF(n,{pr:l[0]}));let c=CO(A,"pr.jiraKey")??CO(A,"pipeline.jiraKey");return"string"!=typeof CO(n,"ticket.key")&&"string"==typeof c&&c.trim()&&(n=CF(n,{ticket:{key:c}})),CF(n,A)}async trigger(e){let t=await am(),A=await t.workflow.findUnique({where:{id:e.workflowId},include:{activeVersion:{include:{triggers:!0}}}});if(!A?.activeVersion)throw Error("Published workflow not found");if(!A.enabled||A.archivedAt)throw Error("Workflow is paused");let r=e.resourceKind?.toUpperCase()??null,i=e.choice?.trim()||null,{triggers:n}=A.activeVersion,a=r?"RESOURCE_MANUAL":"MANUAL",s=r?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE",o=e=>n.find(t=>t.kind===e&&(!r||wE(epO(epS(t.configJson),"Trigger configuration"))===r))??null,l=o(s),c=o(a),u=i?l:c;if(i&&!l)throw Error(r?`No resource trigger offers choices for ${r} resources`:"This workflow has no manual trigger with choices");if(!i&&!c&&l){let e=wf(epO(epS(l.configJson),"Trigger configuration"));throw Error(`This workflow needs a choice: ${e.map(({key:e})=>e).join(", ")}`)}if(r&&!u)throw Error(`No resource trigger accepts ${e.resourceKind} resources`);if(i&&l&&!wf(epO(epS(l.configJson),"Trigger configuration")).some(({key:e})=>e===i))throw Error(`Unknown choice ${i}`);let d=e.subjectKey?.trim()||(r&&e.resourceId?`${r}:${e.resourceId}`:`manual:${(0,AB.randomUUID)()}`),h={sessionData:await this.hydrateResourceSessionData(e.resourceKind,e.resourceId,e.sessionData??{}),resourceKind:e.resourceKind??null,resourceId:e.resourceId??null,choice:i,manual:!0},p=await this.createRunForTrigger(A,A.activeVersion,u,null,i?s:a,d,h,`manual:${A.id}:${(0,AB.randomUUID)()}`);return epF(p.id),this.run(p.id)}async createRunForTrigger(e,t,A,r,i,n,a,s,o=null,l=null){return(await am()).$transaction(async c=>{if(l){let e=await c.workflowTriggerDelivery.findUnique({where:{id:l},include:{run:!0}});if(e)return e.run}let u=async e=>(l&&await c.workflowTriggerDelivery.create({data:{id:l,runId:e.id}}),e),d=await c.workflowRun.findUnique({where:{idempotencyKey:s}});if(d)return u(d);if("COALESCE_LATEST"===e.overlapPolicy){let t=await c.workflowRun.findFirst({where:{workflowId:e.id,triggerSubjectKey:n,status:"QUEUED"},orderBy:{queuedAt:"desc"}});if(t)return u(await c.workflowRun.update({where:{id:t.id},data:{triggerId:A?.id??null,triggerEventId:r,triggerKind:i,triggerPayloadJson:JSON.stringify(a),queuedAt:new Date}}))}let h=(0,AB.randomUUID)(),p=epO(a.sessionData??{},"Session data"),g=JSON.stringify(CF({workflow:{id:e.id,name:t.name,runId:h,startedAt:null,trigger:{id:A?.nodeId??null,kind:i,subjectKey:n,choice:"string"==typeof a.choice?a.choice:null}},steps:{}},p));epx(g,"Workflow session data",2097152);let m=await c.workflowRun.create({data:{id:h,displayNumber:await epL(c),workflowId:e.id,versionId:t.id,triggerId:A?.id??null,triggerEventId:r,parentRunId:o,idempotencyKey:s,triggerKind:i,triggerSubjectKey:n,triggerPayloadJson:JSON.stringify(a),sessionDataJson:g}}),f=function(e,t){let A=e.trim().toUpperCase(),r=ehU(t.sessionData);if(CS(A)){let e=t.resourceKind,A="string"==typeof e?e.toUpperCase():null,i="GITHUB_JOB"===A?ehF(r,"job","url"):"GITHUB_PIPELINE"===A?ehF(r,"pipeline","url"):null;return"string"==typeof e?eh_(e.toUpperCase(),t.resourceId,{url:"string"==typeof i?i:null,metadata:"AGENT_RUN"===e.toUpperCase()?{runKind:ehF(r,"run","kind")}:null}):null}if(ehG.has(A))return eh_("JIRA_TICKET",ehF(r,"ticket","key"));if(ehL.has(A))return eh_("AGENT_RUN",ehF(r,"run","id"),{metadata:{runKind:ehF(r,"run","kind")}});if(ehH.has(A))return eh_("BUILD",ehF(r,"build","id"));if(ehP.has(A))return eh_("WORKTREE",ehF(r,"worktree","id"));if("CODEBASE_REMOTE_BRANCH"===A||"CODEBASE_SYNC_STATE_CHANGED"===A||"CODEBASE_OPERATION_FAILED"===A)return eh_("CODEBASE",ehF(r,"codebase","id"));if("COMMAND_RUN_RESULT"===A||"COMMAND_OUTPUT_MATCH"===A)return eh_("COMMAND_RUN",ehF(r,"command","id"));if("SKILL_SYNC_RESULT"===A||"SKILL_SYNC_CONFLICT"===A)return eh_("SKILL_SYNC",ehF(r,"skillSync","id"));if("IOS_DEVICE_ENROLLED"===A||"IOS_DEVICE_REGISTRATION_RESULT"===A)return eh_("IOS_DEVICE",ehF(r,"device","id"));if("SIGNING_OPERATION_RESULT"===A||"SIGNING_ASSET_EXPIRING"===A)return eh_("SIGNING_PROFILE",ehF(r,"signingProfile","id"));if("PUSH_NOTIFICATION_RESULT"===A)return eh_("PUSH_NOTIFICATION_BATCH",ehF(r,"pushBatch","id"));if("BUILD_DATA_THRESHOLD"===A||"BUILD_DATA_CLEANUP_RESULT"===A)return eh_("BUILD_DATA_COLLECTION",ehF(r,"buildData","id"));if("AGENT_JOB_FAILED"===A)return eh_("AGENT_JOB",ehF(ehU(r.steps),"trigger","id"));if("AGENT_CONNECTION"===A||"AGENT_DISK_REPORT"===A||"AGENT_DISK_THRESHOLD"===A||"AGENT_DISK_STATE_CHANGED"===A||"AGENT_DISK_CLEANUP_RESULT"===A||"CCUSAGE_THRESHOLD"===A)return eh_("AGENT",ehF(r,"agent","id")??ehF(r,"codebase","agentId"));if("WORKFLOW_FINISHED"===A)return eh_("WORKFLOW_RUN",ehF(t,"run","id"));if(ehJ.has(A)){let e=function(e){if("string"!=typeof e)return null;let t=e.trim(),A=t.match(/(?:https?:\/\/|ssh:\/\/git@|git@)?github\.com[/:]([^/]+)\/([^/#]+?)(?:\.git)?$/i)??t.match(/^([^/:]+)\/([^/#]+?)(?:\.git)?$/);return A?.[1]&&A[2]?{owner:A[1],repository:A[2]}:null}(ehF(r,"repo","displayOrigin")),t=Number(ehF(r,"pr","number"));return e&&Number.isInteger(t)&&t>0?eh_("PULL_REQUEST",ehO(e.owner,e.repository,t)):null}if(ehY.has(A)){let e=ehF(r,"pipeline","url");return eh_("GITHUB_WORKFLOW_RUN",ehF(r,"pipeline","runId"),{url:"string"==typeof e?e:null})}return"GITHUB_PUSH_DEFAULT"===A?eh_("CODEBASE_REPOSITORY",ehF(r,"repo","id")):null}(i,a);return f&&await c.workflowRunResourceLink.create({data:{id:(0,AB.randomUUID)(),runId:m.id,kind:f.kind.toUpperCase(),resourceId:f.resourceId,label:f.label??null,url:f.url??null,metadataJson:f.metadata?JSON.stringify(f.metadata):null}}),u(m)})}async processTriggerEvents(){let e=await am(),t=await e.workflowTriggerEvent.findMany({where:{status:"PENDING"},orderBy:{receivedAt:"asc"},take:50});if(!t.length)return;let A=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:!0}}}});for(let a of t)try{let t=epO(epS(a.payloadJson),"Trigger payload");for(let s of A)if(s.activeVersion)for(let A of s.activeVersion.triggers.filter(({kind:e})=>e===a.kind)){var r,i,n;if(t.workflowCorrelation&&"object"==typeof t.workflowCorrelation&&t.workflowCorrelation.workflowId===s.id)continue;let o=(r=a.dedupeKey,i=s.id,n=A.nodeId,(0,AB.createHash)("sha256").update(JSON.stringify([r,i,n])).digest("hex"));if(await e.workflowTriggerDelivery.findUnique({where:{id:o},select:{id:!0}})||!await this.triggerMatches(A,a.subjectKey,t))continue;let l=await this.createRunForTrigger({...s,activeVersion:s.activeVersion},s.activeVersion,A,a.id,a.kind,a.subjectKey,t,o,null,o);epF(l.id)}await e.workflowTriggerEvent.delete({where:{id:a.id}})}catch(t){await e.workflowTriggerEvent.update({where:{id:a.id},data:{status:"FAILED",processedAt:new Date,error:t instanceof Error?t.message:String(t)}})}}async triggerMatches(e,t,A){let r,i=C_(epO(epS(e.configJson),"Trigger configuration"),A),n=null;if(void 0!==A.cursorValue&&("string"!=typeof i.thresholdPath||"string"!=typeof i.thresholdOperator)){let i=await am(),a=await i.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});if(n=epN(r=a?.cursorJson?epO(epS(a.cursorJson),"Trigger cursor").value:void 0)!==epN(A.cursorValue),"WORKTREE_CLEAN"===e.kind&&(n=!0===r&&!1===A.cursorValue),"JIRA_SPRINT_STARTED"===e.kind||"JIRA_SPRINT_ENDED"===e.kind){let e=Array.isArray(r)?r:null,t=Array.isArray(A.cursorValue)?A.cursorValue:null;n=null!==e&&null!==t&&t.some(t=>!e.some(e=>epN(e)===epN(t)))}await i.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,AB.randomUUID)(),triggerId:e.id,subjectKey:t,cursorJson:JSON.stringify({value:A.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}},update:{cursorJson:JSON.stringify({value:A.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}}})}if("GITHUB_ISSUE_COMMAND"===e.kind){let e=CO(A,"comment.author.login"),t=CO(A,"comment.body"),r=Array.isArray(i.allowedLogins)?i.allowedLogins:[];if("string"!=typeof e||!r.includes(e)||"string"!=typeof t||"string"!=typeof i.commandPattern||!new RegExp(i.commandPattern).test(t))return!1}if("COMMAND_OUTPUT_MATCH"===e.kind){let e=CO(A,"output.data");if("string"!=typeof e||"string"!=typeof i.outputPattern||!new RegExp(i.outputPattern).test(e))return!1}if("WORKTREE_CONFLICT"===e.kind&&!0!==CO(A,"worktree.conflicted")||"WORKTREE_MISSING"===e.kind&&null==CO(A,"worktree.missingAt")||"WORKTREE_DIVERGED"===e.kind&&"DIVERGED"!==CO(A,"worktree.pushStatus"))return!1;if(i.filters&&"object"==typeof i.filters)for(let[e,t]of Object.entries(i.filters)){let r=CO(A,e);if(Array.isArray(t)){if(!t.some(e=>epN(e)===epN(r)))return!1}else if(epN(t)!==epN(r))return!1}if("string"==typeof i.thresholdPath&&"string"==typeof i.thresholdOperator){let r=CP({op:i.thresholdOperator,left:{source:"SESSION",path:i.thresholdPath},right:i.thresholdValue},A),n=await am(),a=await n.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});return await n.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,AB.randomUUID)(),triggerId:e.id,subjectKey:t,lastMatched:r,cursorJson:JSON.stringify({value:CO(A,i.thresholdPath)}),...r?{lastFiredAt:new Date}:{}},update:{lastMatched:r,cursorJson:JSON.stringify({value:CO(A,i.thresholdPath)}),...r&&!a?.lastMatched?{lastFiredAt:new Date}:{}}}),r&&!a?.lastMatched}return n??!0}async processSchedules(){let e=await am(),t=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:{where:{kind:"SCHEDULE"},include:{states:!0}}}}}}),A=new Date;for(let r of t)for(let t of r.activeVersion?.triggers??[]){let i=epO(epS(t.configJson),"Schedule configuration"),n=Number(i.cadenceSeconds);if(!Number.isInteger(n)||n<1)continue;let a=r.id,s=t.states.find(e=>e.subjectKey===a);if(!s){let r="string"==typeof i.firstRunAt?new Date(i.firstRunAt):null,o=r&&Number.isFinite(r.getTime())?r:new Date(A.getTime()+1e3*n);s=await e.workflowTriggerState.create({data:{id:(0,AB.randomUUID)(),triggerId:t.id,subjectKey:a,nextScheduledAt:o}})}if(!s.nextScheduledAt||s.nextScheduledAt>A)continue;let o=s.nextScheduledAt,l=new Date(Math.max(A.getTime(),o.getTime())+1e3*n);await e.workflowTriggerState.update({where:{id:s.id},data:{lastFiredAt:A,nextScheduledAt:l}}),await this.events.record({kind:"SCHEDULE",subjectKey:a,dedupeKey:`schedule:${t.id}:${o.toISOString()}`,payload:{sessionData:{},scheduledFor:o.toISOString(),cadenceSeconds:n}})}}async lifecycle(e,t){let A=await am(),r=await A.workflowRun.findUnique({where:{id:e}});if(!r)throw Error("Workflow run not found");if("PAUSE"===t){if(!new Set(["RUNNING","WAITING","BLOCKED"]).has(r.status))throw Error("Only an active workflow run can be paused");if(!await A.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{in:["RUNNING","WAITING","BLOCKED"]}},data:{status:"PAUSING",phase:"DRAINING"}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}}),!0)))return this.run(e);await this.controlLinkedAgentRuns(e,"PAUSE"),await this.appendEvent(e,null,"RUN_PAUSING","Workflow pause requested")}else if("RESUME"===t){if("PAUSED"!==r.status)throw Error("Only a paused workflow run can be resumed");if(!(await A.workflowRun.updateMany({where:{id:e,status:"PAUSED"},data:{status:"RUNNING",phase:"SCHEDULING",pausedAt:null}})).count)return this.run(e);await this.controlLinkedAgentRuns(e,"CONTINUE"),await this.appendEvent(e,null,"RUN_RESUMED","Workflow resumed")}else{if(epB.has(r.status))return this.run(e);for(let[t,r]of(await this.controlLinkedAgentRuns(e,"CANCEL"),await this.cancelWaitingCommandRuns(e),this.activeExecutions)){let i=await A.workflowStepAttempt.findUnique({where:{id:t},select:{runId:!0}});i?.runId===e&&r.abort()}if(!await A.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{notIn:[...epB]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:{notIn:[...epD]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date,claimOwner:null,claimExpiresAt:null}}),await t.workflowWait.updateMany({where:{runId:e,status:"PENDING"},data:{status:"CANCELLED",resolvedAt:new Date}}),await t.workflowResourceLease.deleteMany({where:{runId:e}}),!0)))return this.run(e);await this.appendEvent(e,null,"RUN_CANCELLED","Workflow cancelled")}return epF(e),this.run(e)}async repairRunData(e,t){let A=epO(t,"Session data patch"),r=await am(),i=await r.workflowRun.findUnique({where:{id:e}});if(!i)throw Error("Workflow run not found");if(!new Set(["BLOCKED","PAUSED"]).has(i.status))throw Error("Only blocked or paused workflows accept repair data");let n=CJ(i.sessionDataJson),a=CO(n,"workflow"),s=CF(n,A);a&&"object"==typeof a&&(s=CU(s,"workflow",a));let o=JSON.stringify(s);return epx(o,"Workflow session data",2097152),await r.$transaction([r.workflowRun.update({where:{id:e},data:{sessionDataJson:o,sessionRevision:{increment:1},status:"PAUSED"===i.status?"PAUSED":"RUNNING",phase:"PAUSED"===i.status?"PAUSED":"SCHEDULING",blockedReason:null}}),r.workflowStepAttempt.updateMany({where:{runId:e,status:"BLOCKED"},data:{status:"PENDING",phase:"PENDING",error:null}})]),await this.appendEvent(e,null,"RUN_DATA_REPAIRED","Workflow session data repaired"),epF(e),this.run(e)}async answerQuestion(e,t){let A=await am(),r=await A.$transaction(async A=>{let r=await A.runQuestionBatch.findUnique({where:{id:e},include:{workflowStepAttempt:!0,answerRevisions:!0}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow question not found");if("PENDING"!==r.status)throw Error("Question was already answered");return await A.runAnswerRevision.create({data:{id:(0,AB.randomUUID)(),batchId:e,revision:r.answerRevisions.length,answersJson:JSON.stringify(t)}}),await A.runQuestionBatch.update({where:{id:e},data:{status:"ANSWERED",answeredAt:new Date}}),await A.workflowWait.updateMany({where:{attemptId:i.id,status:"PENDING",kind:"HUMAN"},data:{status:"RESOLVED",resultJson:JSON.stringify({answers:t}),resolvedAt:new Date}}),i});return await this.completeWaitingAttempt(r.id,{answers:t}),aE.publish(epw(r.runId),{workflowQuestionChanged:{id:e,runId:r.runId}}),this.run(r.runId)}async tick(){if(!this.ticking){this.ticking=!0;try{await this.recoverExpiredClaims(),await this.processSchedules(),await this.processTriggerEvents(),await this.events.maintain(),await this.resolveDueWaits(),await this.startQueuedRuns();let e=await am();for(let{id:t}of(await e.workflowRun.findMany({where:{status:{in:["RUNNING","WAITING","PAUSING"]}},select:{id:!0},orderBy:{updatedAt:"asc"},take:100})))await this.progressRun(t);await this.dispatchReadyAttempts()}finally{this.ticking=!1}}}async recoverExpiredClaims(){let e=await am();for(let t of(await e.workflowStepAttempt.findMany({where:{status:"RUNNING",claimExpiresAt:{lt:new Date}},include:{run:!0},take:100})))await e.$transaction([e.workflowStepAttempt.update({where:{id:t.id},data:{status:"BLOCKED",phase:"RECOVERY_BLOCKED",error:"The workflow worker stopped while this step was running; verify external state before retrying.",claimOwner:null,claimExpiresAt:null}}),e.workflowRun.update({where:{id:t.runId},data:{status:"BLOCKED",phase:"RECOVERY_BLOCKED",blockedReason:`Step ${t.nodeId} needs recovery review`}}),e.workflowResourceLease.deleteMany({where:{attemptId:t.id}})]),await this.appendEvent(t.runId,t.id,"STEP_RECOVERY_BLOCKED","Step needs recovery review after its worker lease expired"),await this.notifyRun(t.runId,"WORKFLOW_RECOVERY_PAUSED","Workflow paused during recovery","An interrupted step requires external-state verification before replay.",`recovery:${t.id}`),epF(t.runId)}async startQueuedRuns(){let e=await am();for(let t of(await e.workflowRun.findMany({where:{status:"QUEUED"},include:{workflow:!0,version:!0},orderBy:{queuedAt:"asc"},take:50}))){let A="CONCURRENT"===t.workflow.overlapPolicy?t.workflow.maxConcurrentRuns:1;if(await e.workflowRun.count({where:{workflowId:t.workflowId,id:{not:t.id},status:{in:epQ.filter(e=>"QUEUED"!==e)}}})>=A)continue;let r=wV(epS(t.version.definitionJson)),i=new Date,n=CU(CJ(t.sessionDataJson),"workflow.startedAt",i.toISOString());await e.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:t.id,status:"QUEUED"},data:{status:"RUNNING",phase:"SCHEDULING",startedAt:i,sessionDataJson:JSON.stringify(n),sessionRevision:{increment:1}}})).count&&(await e.workflowStepAttempt.createMany({data:r.nodes.map(e=>({id:(0,AB.randomUUID)(),runId:t.id,nodeId:e.id,kind:e.kind,generation:t.generation,iterationKey:"",attempt:0,requiredPathsJson:JSON.stringify(ep_(e)),providedPathsJson:JSON.stringify(epG(e)),idempotencyKey:`${t.id}:${e.id}:${t.generation}::0`}))}),!0))&&(await this.appendEvent(t.id,null,"RUN_STARTED","Workflow started"),epF(t.id))}}selectedTrigger(e,t){let A=e.trigger?.nodeId??t.triggers.find(({kind:t})=>t===e.triggerKind)?.id??null;if(!Ck(e.triggerKind))return{id:A,choice:null};let r=epO(epS(e.triggerPayloadJson),"Trigger payload");return{id:A,choice:"string"==typeof r.choice?r.choice:null}}attemptOutput(e){if(!e.outputJson)return{};let t=epS(e.outputJson);return t&&"object"==typeof t&&!Array.isArray(t)?t:{value:t}}edgeState(e,t,A,r){if(!r.has(e.source))return e.source!==t.id||t.choice&&e.sourceHandle!==t.choice?"INACTIVE":"ACTIVE";let i=A.get(e.source);if(!i||!epD.has(i.status))return"PENDING";if(new Set(["SKIPPED","CANCELLED","SUPERSEDED"]).has(i.status))return"INACTIVE";let n=r.get(e.source);if("FAILED"===i.status)return"failure"===e.sourceHandle||"catch"===e.sourceHandle||"CONTINUE"===n.failurePolicy&&"success"===e.sourceHandle?"ACTIVE":"INACTIVE";let a=this.attemptOutput(i).selectedHandles;return a?.length?a.includes(e.sourceHandle)?"ACTIVE":"INACTIVE":"success"===e.sourceHandle||"output"===e.sourceHandle?"ACTIVE":"INACTIVE"}async progressRun(e){let t=await am(),A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}});if(!A||epB.has(A.status))return;if("PAUSING"===A.status){await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}});let r=new Set(["AGENT_JOB","BUILD","SKILL_RUN","WORKTREE_MOVE","GITHUB_CHECKS"]),i=new Set(A.waits.filter(({status:e,kind:t})=>"PENDING"===e&&r.has(t)).map(({attemptId:e})=>e));!A.attempts.some(({id:e,status:t})=>"RUNNING"===t||"WAITING"===t&&i.has(e))&&(await t.workflowRun.updateMany({where:{id:e,status:"PAUSING"},data:{status:"PAUSED",phase:"PAUSED",pausedAt:new Date}})).count&&(await this.appendEvent(e,null,"RUN_PAUSED","Workflow paused"),epF(e));return}if(!new Set(["RUNNING","WAITING"]).has(A.status))return;let r=wV(epS(A.version.definitionJson)),i=new Map(r.nodes.map(e=>[e.id,e])),n=new Map;for(let e of r.edges)n.set(e.target,[...n.get(e.target)??[],e]);let a=!0;for(;a;){if(a=!1,!(A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=A.attempts.filter(({generation:e,supersededAt:t})=>e===A.generation&&!t),o=new Map;for(let e of s){let t=`${e.nodeId}:${e.iterationKey}`,A=o.get(t);(!A||A.attempt<e.attempt)&&o.set(t,e)}let l=new Map([...o.values()].filter(({iterationKey:e})=>!e).map(e=>[e.nodeId,e])),c=this.selectedTrigger(A,r);for(let e of r.nodes){let A=l.get(e.id);if(!A||"PENDING"!==A.status)continue;let s=r.nodes.find(t=>"CONTROL_FOR_EACH"===t.kind&&t.config.joinNodeId===e.id);if(s){let e=l.get(s.id);if(!e||!epD.has(e.status)||[...o.values()].filter(({iterationKey:e})=>!!e).some(({status:e})=>!epD.has(e)))continue;await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"ITERATIONS_JOINED"}}),a=!0;continue}let u=n.get(e.id)??[];if(!u.length)continue;let d=u.map(e=>this.edgeState(e,c,l,i)),h=d.filter(e=>"ACTIVE"===e).length,p=d.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===e.kind&&"ANY"===e.config.mode?"ANY":"ALL")?h>0:0===p&&h>0)?(await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"READY"}}),a=!0):0===p&&0===h&&(await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"SKIPPED",phase:"INACTIVE_BRANCH",finishedAt:new Date}}),a=!0)}await this.progressIterationAttempts(r,A,c,i,n,o,l)&&(a=!0)}if(!(A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=new Map;for(let e of A.attempts.filter(({generation:e,supersededAt:t})=>e===A.generation&&!t)){let t=`${e.nodeId}:${e.iterationKey}`,A=s.get(t);(!A||A.attempt<e.attempt)&&s.set(t,e)}let o=[...s.values()],l=A.waits.some(({status:e})=>"PENDING"===e),c=o.some(({status:e})=>!epD.has(e));if(l||c){let r=l?"WAITING":"RUNNING";A.status!==r&&(await t.workflowRun.updateMany({where:{id:e,status:{in:[...epk]}},data:{status:r,phase:l?"WAITING":"SCHEDULING"}})).count&&epF(e);return}let u=wV(epS(A.version.definitionJson)),d=o.find(e=>{if("FAILED"!==e.status)return!1;let t=u.nodes.find(({id:t})=>t===e.nodeId);return!!t&&"CONTINUE"!==t.failurePolicy&&!u.edges.some(e=>e.source===t.id&&new Set(["failure","catch"]).has(e.sourceHandle))});await this.finishRun(A,d?"FAILED":"SUCCEEDED",d?.error??null)}async finishRun(e,t,A){let r=await am();await r.$transaction(async r=>!!(await r.workflowRun.updateMany({where:{id:e.id,status:{in:[...epk]}},data:{status:t,phase:t,error:A,finishedAt:new Date}})).count&&(await r.workflowResourceLease.deleteMany({where:{runId:e.id}}),!0))&&(await this.appendEvent(e.id,null,`RUN_${t}`,"SUCCEEDED"===t?"Workflow completed":"Workflow failed",A?{error:A}:null),await this.resolveExternalWait("WORKFLOW_RUN",e.id,{status:t,runId:e.id},"FAILED"===t?A||"Sub-workflow failed":null),await this.events.record({kind:"WORKFLOW_FINISHED",subjectKey:e.workflowId,dedupeKey:`workflow-finished:${e.id}`,payload:{sessionData:CJ(e.sessionDataJson),run:{id:e.id,status:t},workflowCorrelation:{workflowId:e.workflowId,runId:e.id}}}),await this.notifyRun(e.id,"SUCCEEDED"===t?"WORKFLOW_COMPLETED":"WORKFLOW_FAILED","SUCCEEDED"===t?"Workflow completed":"Workflow failed",A||`Workflow run ${e.displayNumber} ${t.toLowerCase()}`,t.toLowerCase()),epF(e.id))}async dispatchReadyAttempts(){let e=await am(),t=Math.max(0,4-await e.workflowStepAttempt.count({where:{status:"RUNNING"}}));if(t)for(let A of(await e.workflowStepAttempt.findMany({where:{status:"READY",run:{status:"RUNNING"}},orderBy:{createdAt:"asc"},take:2*t}))){if(t<=0)break;if(!(await e.workflowStepAttempt.updateMany({where:{id:A.id,status:"READY",run:{status:"RUNNING"}},data:{status:"RUNNING",phase:"RUNNING",claimOwner:this.workerId,claimExpiresAt:new Date(Date.now()+3e5),startedAt:A.startedAt??new Date}})).count)continue;t-=1;let r=new AbortController;this.activeExecutions.set(A.id,r),this.executeAttempt(A.id,r.signal).catch(e=>{console.error(`Workflow attempt ${A.id} failed unexpectedly:`,e)}).finally(()=>{this.activeExecutions.delete(A.id)})}}async acquireResourceLease(e,t,A){let r=wS.get(t.kind),i=null;if(r.mutatesWorktree){let e=CO(A,"worktree.id")??CO(A,"worktree.path")??CO(A,"codebase.id");e&&(i=`git:${String(e)}`)}else if(t.kind.startsWith("BUILD_")){let e=CO(A,"build.id");e&&(i=`build:${String(e)}`)}if(!i)return!0;let n=await am();await n.workflowResourceLease.deleteMany({where:{key:i,expiresAt:{lt:new Date}}});try{return await n.workflowResourceLease.create({data:{key:i,runId:e.runId,attemptId:e.id,expiresAt:new Date(Date.now()+3e5)}}),await n.workflowStepAttempt.update({where:{id:e.id},data:{resourceLockKey:i}}),!0}catch{return await n.workflowStepAttempt.update({where:{id:e.id},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",claimOwner:null,claimExpiresAt:null}}),!1}}async executeAttempt(e,t){let A=await am(),r=await A.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!r||"RUNNING"!==r.status)return;let i=wV(epS(r.run.version.definitionJson)),n=i.nodes.find(({id:e})=>e===r.nodeId);if(!n)return void await this.failAttempt(r,null,Error("Workflow step definition is missing"));let a=CJ(r.run.sessionDataJson);r.iterationKey&&(a=await this.iterationSessionData(r.run,r,a));let s=ep_(n).filter(e=>void 0===CO(a,e));if(s.length){await A.$transaction([A.workflowStepAttempt.update({where:{id:r.id},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",error:`Missing required session data: ${s.join(", ")}`,claimOwner:null,claimExpiresAt:null}}),A.workflowRun.update({where:{id:r.runId},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",blockedReason:`Step ${n.name??n.id} needs ${s.join(", ")}`}}),A.workflowResourceLease.deleteMany({where:{attemptId:e}})]),await this.appendEvent(r.runId,r.id,"STEP_BLOCKED",`Step blocked by missing requirements: ${s.join(", ")}`),await this.notifyRun(r.runId,"WORKFLOW_NEEDS_ATTENTION","Workflow needs data",`Step ${n.name??n.id} needs ${s.join(", ")}`,`blocked:${r.id}`),epF(r.runId);return}if(await A.workflowStepAttempt.update({where:{id:r.id},data:{inputJson:JSON.stringify(a)}}),await this.acquireResourceLease(r,n,a))try{let e,A={...n,config:C_(n.config,a)};if(e=n.kind.startsWith("CONTROL_")||"HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind?await this.executeControl(r.run,r,A,a,i):await this.executor.execute({run:r.run,attempt:r,node:A,sessionData:a,signal:t}),t.aborted)throw Error("Workflow step was cancelled");e.wait?await this.parkAttempt(r,e):await this.completeAttempt(r,n,e)}catch(t){let e=t instanceof Error?t:Error(String(t));if(await this.holdForBusyCodebase(r,e))return;await this.failAttempt(r,n,e)}}async holdForBusyCodebase(e,t){if(!(t instanceof Error&&"CodebaseBusyError"===t.name))return!1;let A=e.startedAt??e.createdAt;if(Date.now()-A.getTime()>6e5)return!1;let r=await am();return!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING",claimOwner:this.workerId},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",error:t.message,claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),await r.workflowRunEvent.findFirst({where:{attemptId:e.id,type:"STEP_WAITING_FOR_RESOURCE"},select:{id:!0}})||await this.appendEvent(e.runId,e.id,"STEP_WAITING_FOR_RESOURCE","Step is waiting for the codebase to become available",{error:t.message}),epF(e.runId),!0)}async iterationSessionData(e,t,A){let r=await am(),i=await r.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,status:"SUCCEEDED"},orderBy:{finishedAt:"asc"}}),n=A;for(let e of(t.inputJson&&(n=CF(n,epO(epS(t.inputJson),"Iteration input"))),i)){let t=this.attemptOutput(e);t.sessionPatch&&(n=CF(n,t.sessionPatch))}return n}async executeControl(e,t,A,r,i){switch(A.kind){case"CONTROL_IF":{let e=A.config.condition;if(!e)throw Error("If steps require a condition");let t=CP(e,r);return{output:{matched:t},selectedHandles:[t?"true":"false"]}}case"CONTROL_JOIN":{let r=i.nodes.find(e=>"CONTROL_FOR_EACH"===e.kind&&e.config.joinNodeId===A.id);if(r){let A=await am(),i=await A.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:{not:""},status:"FAILED"}});if(i.length&&"COLLECT_ERRORS"!==r.config.errorMode)throw Error(`${i.length} for-each iteration step(s) failed`);return{output:{iterations:await A.workflowStepAttempt.count({where:{runId:e.id,generation:t.generation,iterationKey:{not:""}}}),failures:i.map(({nodeId:e,iterationKey:t,error:A})=>({nodeId:e,iterationKey:t,error:A}))}}}return{output:{joined:!0}}}case"CONTROL_TRY":return{output:{started:!0}};case"CONTROL_DELAY":{let e=Number(A.config.seconds??0);if(!Number.isFinite(e)||e<0||e>31536e3)throw Error("Delay must be between zero and 31,536,000 seconds");return{wait:{kind:"DELAY",resumeAfter:new Date(Date.now()+1e3*e)}}}case"CONTROL_WAIT_UNTIL":{let e=A.config.condition;if(!e)throw Error("Wait-until steps require a condition");if(CP(e,r))return{output:{matched:!0}};let t=ehq(A.config,15);return{wait:{kind:"PREDICATE",predicate:{condition:e,cadenceSeconds:t},resumeAfter:new Date(Date.now()+1e3*t),timeoutAt:eh$(A.config)}}}case"CONTROL_SET_VARIABLE":{if("string"!=typeof A.config.path)throw Error("Set-variable steps require an output path");let e="string"==typeof A.config.script?await epf(A.config.script,r):A.config.value;return{output:e,sessionPatch:CU({},A.config.path,e)}}case"CONTROL_FOR_EACH":{let n=Array.isArray(A.config.items)?A.config.items:"string"==typeof A.config.listPath?CO(r,A.config.listPath):null;if(!Array.isArray(n))throw Error("For-each source must be an array");if(n.length>1e3)throw Error("For-each is limited to 1,000 items");return await this.spawnForEach(e,t,A,i,n),{output:{itemCount:n.length},selectedHandles:n.length?["body"]:["empty"],sessionPatch:CU({},`steps.${A.id}.items`,n)}}case"CONTROL_SUBWORKFLOW":return this.startSubworkflow(e,t,A,r);case"HUMAN_CONFIRM":case"HUMAN_CHOICE":return this.createHumanQuestion(e,t,A);default:throw Error(`Unsupported control step ${A.kind}`)}}async progressIterationAttempts(e,t,A,r,i,n,a){let s=await am(),o=!1;for(let e of new Set([...n.values()].map(({iterationKey:e})=>e).filter(Boolean))){let t=new Map(a);for(let A of n.values())A.iterationKey===e&&t.set(A.nodeId,A);for(let n of t.values()){if(n.iterationKey!==e||"PENDING"!==n.status)continue;let a=r.get(n.nodeId);if(!a)continue;let l=(i.get(a.id)??[]).map(e=>this.edgeState(e,A,t,r)),c=l.filter(e=>"ACTIVE"===e).length,u=l.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===a.kind&&"ANY"===a.config.mode?"ANY":"ALL")?c>0:0===u&&c>0)?(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"READY",phase:"ITERATION_READY"}}),o=!0):0===u&&0===c&&(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"SKIPPED",phase:"INACTIVE_ITERATION_BRANCH",finishedAt:new Date}}),o=!0)}}return o}async spawnForEach(e,t,A,r,i){let n="string"==typeof A.config.joinNodeId?A.config.joinNodeId:null,a=r.nodes.find(({id:e})=>e===n);if(!a||"CONTROL_JOIN"!==a.kind)throw Error("For-each steps require an explicit joinNodeId");let s=new Map;for(let e of r.edges)s.set(e.source,[...s.get(e.source)??[],e]);let o=(s.get(A.id)??[]).filter(({sourceHandle:e})=>"body"===e).map(({target:e})=>e),l=new Set;for(;o.length;){let e=o.shift();e===n||l.has(e)||(l.add(e),o.push(...(s.get(e)??[]).map(({target:e})=>e)))}if(i.length&&!l.size)throw Error("For-each body is not connected to its body handle");let c=r.nodes.filter(({id:e})=>l.has(e)),u=await am();await u.$transaction(async r=>{await r.workflowStepAttempt.updateMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,nodeId:{in:[...l]},status:"PENDING"},data:{status:"SKIPPED",phase:"ITERATION_TEMPLATE",finishedAt:new Date}}),i.length&&c.length&&await r.workflowStepAttempt.createMany({data:i.flatMap((r,i)=>{let n=t.iterationKey?`${t.iterationKey}.${i}`:String(i),a=JSON.stringify({loop:{current:{forEachNodeId:A.id,index:i,item:r},[A.id]:{index:i,item:r}}});return c.map(A=>({id:(0,AB.randomUUID)(),runId:e.id,nodeId:A.id,kind:A.kind,generation:t.generation,iterationKey:n,attempt:0,status:"PENDING",phase:"ITERATION_PENDING",inputJson:a,requiredPathsJson:JSON.stringify(ep_(A)),providedPathsJson:JSON.stringify(epG(A)),idempotencyKey:`${e.id}:${A.id}:${t.generation}:${n}:0`}))})})})}async startSubworkflow(e,t,A,r){let i="string"==typeof A.config.versionId?A.config.versionId:null;if(!i)throw Error("Sub-workflow version is required");let n=await am(),a=await n.workflowVersion.findUnique({where:{id:i},include:{workflow:{include:{activeVersion:!0}}}});if(!a)throw Error("Sub-workflow version not found");if(!a.workflow.enabled||a.workflow.archivedAt)throw Error("Sub-workflow is paused");let s=e,o=0;for(;s;){if(s.workflowId===a.workflowId)throw Error("Recursive sub-workflow invocation is not allowed");if((o+=1)>=10)throw Error("Sub-workflow depth is limited to 10");s=s.parentRunId?await n.workflowRun.findUnique({where:{id:s.parentRunId}}):null}let l={};if(A.config.inputMapping&&"object"==typeof A.config.inputMapping)for(let[e,t]of Object.entries(A.config.inputMapping))l=CU(l,e,C_(t,r));let c=await this.createRunForTrigger({...a.workflow,activeVersion:a},a,null,null,"SUBWORKFLOW",e.id,{sessionData:l,parentRunId:e.id},`${t.id}:subworkflow:${a.id}`,e.id);return epF(c.id),{output:{childRunId:c.id},links:[{kind:"WORKFLOW_RUN",resourceId:c.id,label:`Workflow run #${c.displayNumber}`,url:`/workflows/runs/${c.id}`}],wait:{kind:"WORKFLOW_RUN",externalKey:c.id,resumeAfter:ehV(A.config),timeoutAt:eh$(A.config)}}}async createHumanQuestion(e,t,A){let r=Array.isArray(A.config.questions)?A.config.questions:[{header:A.name??null,prompt:"string"==typeof A.config.prompt?A.config.prompt:"HUMAN_CONFIRM"===A.kind?"Continue this workflow?":"Choose an option",multiSelect:!!A.config.multiSelect,allowCustom:"HUMAN_CONFIRM"!==A.kind&&!1!==A.config.allowCustom,options:"HUMAN_CONFIRM"===A.kind?[{label:"Confirm",description:null},{label:"Cancel",description:null}]:Array.isArray(A.config.options)?A.config.options:[]}];if(!r.length||r.length>10)throw Error("Workflow questions must contain between one and ten questions");let i=await am(),n=(0,AB.randomUUID)();return await i.runQuestionBatch.create({data:{id:n,workflowStepAttemptId:t.id,nativeRequestId:`workflow:${t.id}`,questions:{create:r.map((e,t)=>{let A=epO(e,"Workflow question"),r=Array.isArray(A.options)?A.options:[];return{id:(0,AB.randomUUID)(),position:t,header:"string"==typeof A.header?A.header:null,prompt:epR(String(A.prompt??""),"Question prompt",1e4),multiSelect:!!A.multiSelect,allowCustom:!1!==A.allowCustom,options:{create:r.map((e,t)=>{let A=epO(e,"Question option");return{id:(0,AB.randomUUID)(),position:t,label:epR(String(A.label??""),"Option label",500),description:"string"==typeof A.description?A.description.slice(0,2e3):null}})}}})}}}),aE.publish(epw(e.id),{workflowQuestionChanged:{id:n,runId:e.id}}),{output:{questionBatchId:n},wait:{kind:"HUMAN",externalKey:n,timeoutAt:eh$(A.config)}}}async parkAttempt(e,t){let A=t.wait;if(!A)throw Error("Workflow wait is missing");let r=await am(),i=(0,AB.randomUUID)();await r.$transaction(async r=>{let n=await r.workflowRun.findUnique({where:{id:e.runId},select:{status:!0}});return!(!n||epB.has(n.status))&&!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING"},data:{status:"WAITING",phase:A.kind,outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:t.sessionPatch}),claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowWait.create({data:{id:i,runId:e.runId,attemptId:e.id,kind:A.kind,predicateJson:A.predicate?JSON.stringify(A.predicate):null,externalKey:A.externalKey??null,resumeAfter:A.resumeAfter??null,timeoutAt:A.timeoutAt??null}}),t.links?.length&&await r.workflowRunResourceLink.createMany({data:t.links.map(t=>({id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:t.kind.toUpperCase(),resourceId:t.resourceId,label:t.label??null,url:t.url??null,metadataJson:t.metadata?JSON.stringify(t.metadata):null}))}),await r.workflowRun.updateMany({where:{id:e.runId,status:{in:[...epk]}},data:{status:"WAITING",phase:A.kind}}),await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_WAITING",`Step is waiting for ${A.kind.toLowerCase().replaceAll("_"," ")}`,{waitId:i}),epF(e.runId))}async completeAttempt(e,t,A){let r=await am();await r.$transaction(async r=>{let i=await r.workflowRun.findUnique({where:{id:e.runId}});if(!i)throw Error("Workflow run disappeared");if(epB.has(i.status))return!1;let n=CJ(i.sessionDataJson);e.iterationKey?n=CU(n,`steps.${t.id}.iterations.${e.iterationKey.replaceAll(".","_")}`,{status:"SUCCEEDED",output:A.output??null,data:A.sessionPatch??null}):(A.sessionPatch&&(n=CF(n,A.sessionPatch)),n=CU(n,`steps.${t.id}`,{status:"SUCCEEDED",output:A.output??null,snapshotId:A.links?.find(({kind:e})=>"CHECKPOINT"===e)?.resourceId??null}));let a=JSON.stringify(n);return epx(a,"Workflow session data",2097152),!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"SUCCEEDED",phase:"SUCCEEDED",outputJson:JSON.stringify({value:A.output,selectedHandles:A.selectedHandles,sessionPatch:A.sessionPatch}),error:null,finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(A.links?.length&&await r.workflowRunResourceLink.createMany({data:A.links.map(t=>({id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:t.kind.toUpperCase(),resourceId:t.resourceId,label:t.label??null,url:t.url??null,metadataJson:t.metadata?JSON.stringify(t.metadata):null}))}),await r.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:a,sessionRevision:{increment:1}}}),await r.workflowRun.updateMany({where:{id:e.runId,status:{in:[...epk]}},data:{status:"RUNNING",phase:"SCHEDULING"}}),await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_SUCCEEDED",`Step ${t.name??t.id} completed`),epF(e.runId))}async failAttempt(e,t,A){let r=await am(),i=t??(await r.workflowRun.findUnique({where:{id:e.runId},include:{version:!0}}))?.version.definitionJson,n="string"==typeof i?wV(epS(i)).nodes.find(({id:t})=>t===e.nodeId)??null:i,a=n?.retry,s=!!(a&&e.attempt+1<a.maxAttempts),o=a?Math.min(86400,"EXPONENTIAL"===a.strategy?a.delaySeconds*2**e.attempt:a.delaySeconds):0;await r.$transaction(async t=>{let r=await t.workflowRun.findUnique({where:{id:e.runId}});if(!r||epB.has(r.status))return!1;let i=CJ(r.sessionDataJson);return e.iterationKey||(i=CU(i,`steps.${e.nodeId}`,{status:"FAILED",error:A.message})),!!(await t.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"FAILED",phase:s?"RETRY_SCHEDULED":"FAILED",error:A.message.slice(0,2e4),finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(s&&await t.workflowWait.create({data:{id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:"RETRY",resumeAfter:new Date(Date.now()+1e3*o)}}),await t.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:JSON.stringify(i),sessionRevision:{increment:1}}}),await t.workflowRun.updateMany({where:{id:e.runId,status:{in:[...epk]}},data:{status:s?"WAITING":"RUNNING",phase:s?"RETRY_WAIT":"SCHEDULING"}}),await t.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,s?"STEP_RETRY_SCHEDULED":"STEP_FAILED",s?`Step failed and will retry in ${o} seconds`:`Step failed: ${A.message}`,{error:A.message,retry:s}),epF(e.runId))}async resolveDueWaits(){let e=await am(),t=new Date,A=(t,A)=>e.workflowWait.updateMany({where:{id:t,status:"PENDING",run:{status:{in:[...epk]}}},data:A});for(let r of(await e.workflowWait.findMany({where:{status:"PENDING",run:{status:{in:[...epk]}},OR:[{resumeAfter:{lte:t}},{timeoutAt:{lte:t}}]},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100}))){if(r.timeoutAt&&r.timeoutAt<=t&&"RETRY"!==r.kind&&"DELAY"!==r.kind){if(!(await A(r.id,{status:"TIMED_OUT",resolvedAt:t})).count)continue;await this.failAttempt(r.attempt,wV(epS(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId)??null,Error("Workflow wait timed out"));continue}if("RETRY"===r.kind){let A=r.attempt.attempt+1;await e.$transaction(async e=>{if(!(await e.workflowWait.updateMany({where:{id:r.id,status:"PENDING",run:{status:{in:[...epk]}}},data:{status:"RESOLVED",resolvedAt:t}})).count)return!1;if(await e.workflowStepAttempt.create({data:{id:(0,AB.randomUUID)(),runId:r.runId,nodeId:r.attempt.nodeId,kind:r.attempt.kind,generation:r.attempt.generation,iterationKey:r.attempt.iterationKey,attempt:A,status:"PENDING",phase:"RETRY_PENDING",inputJson:r.attempt.inputJson,requiredPathsJson:r.attempt.requiredPathsJson,providedPathsJson:r.attempt.providedPathsJson,idempotencyKey:`${r.runId}:${r.attempt.nodeId}:${r.attempt.generation}:${r.attempt.iterationKey}:${A}`,replayedFromId:r.attempt.id}}),!(await e.workflowRun.updateMany({where:{id:r.runId,status:{in:[...epk]}},data:{status:"RUNNING",phase:"SCHEDULING"}})).count)throw Error("Workflow lifecycle changed while resuming retry");return!0})&&epF(r.runId)}else if("DELAY"===r.kind){if(!(await A(r.id,{status:"RESOLVED",resolvedAt:t})).count)continue;await this.completeWaitingAttempt(r.attemptId,{delayed:!0})}else if("PREDICATE"===r.kind){let e=r.predicateJson?epO(epS(r.predicateJson),"Wait predicate"):{},i=e.condition,n=CJ(r.attempt.run.sessionDataJson);if(i&&CP(i,n)){if(!(await A(r.id,{status:"RESOLVED",resultJson:JSON.stringify({matched:!0}),resolvedAt:t})).count)continue;await this.completeWaitingAttempt(r.attemptId,{matched:!0})}else{let t=Math.max(1,Number(e.cadenceSeconds??15));await A(r.id,{resumeAfter:new Date(Date.now()+1e3*t)})}}else if(r.externalKey&&this.waitPollers.has(r.kind)){let e=await this.waitPollers.get(r.kind)(r.externalKey);if(e.pending){let t=wV(epS(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId)?.config??{};await A(r.id,{resumeAfter:new Date(Date.now()+1e3*ehq(t,e.pollAfterSeconds??15))})}else{if(!(await A(r.id,{status:e.error?"FAILED":"RESOLVED",resultJson:JSON.stringify(e.result??{}),resolvedAt:new Date})).count)continue;if(e.error){let t=wV(epS(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId);await this.failAttempt(r.attempt,t??null,Error(e.error))}else await this.completeWaitingAttempt(r.attemptId,e.result??{})}}}}async completeWaitingAttempt(e,t){let A=await am(),r=await A.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!r||"WAITING"!==r.status)return;let i=wV(epS(r.run.version.definitionJson)).nodes.find(({id:e})=>e===r.nodeId);if(!i)throw Error("Workflow step definition is missing");let n=this.attemptOutput(r),a=n.sessionPatch;if("TERMINAL_RUN"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionData&&"object"==typeof t.sessionData&&!Array.isArray(t.sessionData)){let e=structuredClone(t.sessionData),A=CO(CJ(r.run.sessionDataJson),"workflow");a=A?CU(e,"workflow",A):e}t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)&&(a=CF(a??{},t.sessionPatch)),i.kind.startsWith("RUN_")&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=CF(a??{},CU({},`run.${i.id}`,t))),"BUILD_START"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=CF(a??{},CU({},"build",t))),"WORKTREE_WAIT_PUSH_READY"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=CF(a??{},CU({},"worktree",{id:t.id,pushStatus:t.pushStatus}))),"SKILL_APPLY"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=CF(a??{},CU({},`steps.${i.id}`,t))),("HUMAN_CONFIRM"===i.kind||"HUMAN_CHOICE"===i.kind)&&(a=CF(a??{},CU({},`steps.${i.id}.answer`,t))),await this.completeAttempt(r,i,{output:t??n.value,selectedHandles:n.selectedHandles,sessionPatch:a})}async resolveExternalWait(e,t,A,r=null){let i=await am(),n=await i.workflowWait.findMany({where:{kind:e,externalKey:t,status:"PENDING"},include:{attempt:{include:{run:{include:{version:!0}}}}}});for(let e of n)if(await i.workflowWait.update({where:{id:e.id},data:{status:r?"FAILED":"RESOLVED",resultJson:JSON.stringify(A),resolvedAt:new Date}}),r){let t=wV(epS(e.attempt.run.version.definitionJson)).nodes.find(({id:t})=>t===e.attempt.nodeId);await this.failAttempt(e.attempt,t??null,Error(r))}else await this.completeWaitingAttempt(e.attemptId,A);return n.length}descendants(e,t){let A=new Map;for(let t of e.edges)A.set(t.source,[...A.get(t.source)??[],t.target]);let r=new Set([t]),i=[t];for(;i.length;){let e=i.shift();for(let t of A.get(e)??[])r.has(t)||(r.add(t),i.push(t))}return[...r]}async prepareReplay(e,t){let A=await am(),r=await A.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:{include:{checkpoints:!0,resourceLinks:!0}}}});if(!r)throw Error("Workflow run not found");if(!new Set(["PAUSED","BLOCKED","FAILED","SUCCEEDED","CANCELLED"]).has(r.status))throw Error("Pause the workflow before replaying a step");let i=wV(epS(r.version.definitionJson));if(!i.nodes.some(({id:e})=>e===t))throw Error("Workflow step not found");let n=this.descendants(i,t),a=r.attempts.filter(({generation:e,nodeId:t})=>e===r.generation&&n.includes(t)),s=a.filter(e=>e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0],o=s?.checkpoints.slice().sort((e,t)=>e.createdAt.getTime()-t.createdAt.getTime())[0],l=a.flatMap(e=>e.resourceLinks.filter(({kind:e})=>"CHECKPOINT"!==e).map(({kind:e,resourceId:t,label:A,url:r})=>({kind:e,resourceId:t,label:A,url:r}))),c=null,u=null;if(o&&this.agentControl)try{c=await this.compareCheckpointWithAgent(o.id)}catch(e){u=`Git comparison unavailable: ${e instanceof Error?e.message:String(e)}`}return{runId:e,nodeId:t,affectedNodeIds:n,affectedAttemptIds:a.map(({id:e})=>e),externalEffects:l,checkpointId:o?.id??null,gitComparison:c,warning:[l.length?"External Jira, GitHub, build, deployment, and notification effects will not be undone.":null,u].filter(Boolean).join(" ")||null}}async replay(e,t,A={}){let r=await this.prepareReplay(e,t);if(A.restore){if(!r.checkpointId)throw Error("No restorable Git checkpoint is available for this step");this.checkpointRestorer?await this.checkpointRestorer(r.checkpointId,{stash:!!A.stash}):await this.restoreCheckpointWithAgent(r.checkpointId,{stash:!!A.stash})}let i=await am(),n=await i.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:!0}});if(!n)throw Error("Workflow run not found");let a=wV(epS(n.version.definitionJson)),s=n.attempts.filter(e=>e.generation===n.generation&&e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0];if(!s)throw Error("Selected step has no execution history");let o=s.inputJson?epO(epS(s.inputJson),"Step input snapshot"):CJ(n.sessionDataJson),l=n.generation+1,c=new Map;for(let e of n.attempts.filter(({generation:e,iterationKey:t})=>e===n.generation&&!t)){let t=c.get(e.nodeId);(!t||t.attempt<e.attempt)&&c.set(e.nodeId,e)}let u=CU(o,"workflow.replay",{generation:l,fromNodeId:t,replayedAt:new Date().toISOString()});return await i.$transaction(async t=>{await t.workflowStepAttempt.updateMany({where:{runId:e,generation:n.generation,nodeId:{in:r.affectedNodeIds},supersededAt:null},data:{supersededAt:new Date}}),await t.workflowStepAttempt.createMany({data:a.nodes.map(t=>{let A=r.affectedNodeIds.includes(t.id),i=c.get(t.id);return{id:(0,AB.randomUUID)(),runId:e,nodeId:t.id,kind:t.kind,generation:l,iterationKey:"",attempt:0,status:A?"PENDING":i?.status==="SKIPPED"?"SKIPPED":"SUCCEEDED",phase:A?"REPLAY_PENDING":"REUSED_FROM_PRIOR_GENERATION",inputJson:A?null:i?.inputJson,outputJson:A?null:i?.outputJson,error:null,startedAt:A?null:i?.startedAt,finishedAt:A?null:new Date,requiredPathsJson:JSON.stringify(ep_(t)),providedPathsJson:JSON.stringify(epG(t)),idempotencyKey:`${e}:${t.id}:${l}::0`,replayedFromId:i?.id??null}})}),await t.workflowWait.updateMany({where:{runId:e,status:"PENDING"},data:{status:"SUPERSEDED",resolvedAt:new Date}}),await t.workflowRun.update({where:{id:e},data:{generation:l,sessionDataJson:JSON.stringify(u),sessionRevision:{increment:1},status:"RUNNING",phase:"REPLAYING",blockedReason:null,error:null,pausedAt:null,finishedAt:null}})}),await this.appendEvent(e,null,"RUN_REPLAYED",`Replaying from step ${t}`,{generation:l,affectedNodeIds:r.affectedNodeIds}),epF(e),this.run(e)}async appendEvent(e,t,A,r,i=null){let n=await am(),a=await n.$transaction(async n=>{let a=await n.workflowRunEvent.findFirst({where:{runId:e},orderBy:{sequence:"desc"},select:{sequence:!0}});return n.workflowRunEvent.create({data:{id:(0,AB.randomUUID)(),runId:e,attemptId:t,sequence:(a?.sequence??-1)+1,type:A,message:r.slice(0,2e4),detailJson:i?JSON.stringify(i):null}})});return aE.publish(epC(e),{workflowRunEventAdded:a}),a}subscribeWorkflows(){return aE.iterate(epE)}subscribeRun(e){return aE.iterate(epy(e))}subscribeRunEvents(e){return aE.iterate(epC(e))}subscribeRunQuestions(e){return aE.iterate(epw(e))}}let epP=globalThis,epJ=new Set(["localhost","::1","[::1]","0.0.0.0"]);function epY(e,t){var A=e.get(t);if(!A)return null;let r=A.split(",")[0].trim();return!r||/[\s/\\]/.test(r)?null:r}function epj(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"");return!!(epJ.has(t)||"::1"===t||t.endsWith(".local")||t.endsWith(".localhost")||/^127\./.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t))}function ep$(e,t,A){let r;try{r=new URL(`${e}//${t}`)}catch{return null}return"http:"!==r.protocol&&"https:"!==r.protocol?null:{origin:r.origin,secure:"https:"===r.protocol,loopback:epj(r.hostname),source:A}}function epq(e){if(e instanceof Headers)return e;let t=new Headers;for(let[A,r]of Object.entries(e))Array.isArray(r)?t.set(A,r.join(", ")):void 0!==r&&t.set(A,r);return t}let epV=new class{server=null;services=null;schema=null;initPromise=null;async initializeServer(){if(null===this.server)return this.initPromise||(this.initPromise=this.buildServer().finally(()=>{this.initPromise=null})),this.initPromise}async buildServer(){var e,t,A,r,i,n,a,s,o,l,c,u,d,h,p,g,m,f,I,E,y,C,w,Q,B,D,k,S,b,v,R,T,M,N,x,O,U,F,_,G,L,P,J,Y,j,$,q;let V,K,W,z,Z,X,ee,et,eA,er,ei,en,ea,es,eo,el,ec,eu,ed,eh,ep,eg,em,ef,eI,eE,ey,eC,ew,eQ,eB,eD,ek,eS,eb,ev,eR,eT,eM,eN,ex;this.services=epP.serverServices??(V=new etV,K=new sj,W=new epd,z=new a7,Z=new edM(K),X=new edO,ee=new ecw(z),(et=new ehc(z,Z)).startRuntime(),eA=new Qi(z),er=new xy(z),ei=new edm,en=new edw(z,void 0,K),ea=new edj,es=new ud(void 0,K,X),(eo=new eht(Z,z,ee)).startReaper(),el=new xx(z,ei,Z,ee),ec=new euP(z),ed=new Os(eu=new x2(z,ec)),eh=new N4(K,W),ep=new etq(void 0,K),em=new cR(K,Z,X,!0,W,void 0,eg=new l_),ef=new cC(!0,K,X,()=>em.configurationChanged(),eg),eI=new Od(K),eE=new xo(z,eh,ef,ec,W,eg),ey=new ehd(eA,ee,X),eC=new ehQ,ew=new ehx,eQ=new euC(ed,el,{codebases:eu,telemetry:ei,pushNotifications:es,agents:z,diskSpace:ee,worktrees:eE,runs:eo,commands:et,jira:eh,github:ef,buildData:er,cacheServer:eI,ccusage:eA,credentials:K,iosDevices:ep,modelCosts:ea,notifications:Z,polling:X,signingAssets:en,skills:ec,systemStatus:ey,workflows:()=>eD,worktreeAutomations:()=>ek},K),eo.setMcpPresetResolver((e,t)=>eQ.resolveRunMcpPresets(e,t)),eD=new epH(W,eB=new epI,void 0,K,z,Z,eo,eE,et,eh),ek=new eub(eE,ef,eh,eD,z,X),v=eD,R=e={agentControl:z,jira:eh,github:ef,worktrees:eE,worktreeAutomations:ek,codebases:eu,builds:el,skills:ec,runs:eo,commands:et,notifications:Z,pushNotifications:es,tools:eQ,diskSpace:ee,buildData:er,ccusage:eA,iosDevices:ep,modelCosts:ea,signingAssets:en},v.registerWaitPoller("AGENT_JOB",async e=>{let t=await R.agentControl.getJob(e);return t?new Set(["QUEUED","RUNNING"]).has(t.status)?{pending:!0,pollAfterSeconds:2}:{pending:!1,result:t.resultJson?{...ehK(JSON.parse(t.resultJson),"Agent job result"),jobId:e}:{jobId:e,status:t.status},error:"SUCCEEDED"===t.status?null:t.error||`Agent job ${t.status.toLowerCase()}`}:{pending:!1,error:"Agent job disappeared"}}),v.registerWaitPoller("AGENT_JOBS",async e=>{let t=ehK(JSON.parse(e),"Agent jobs wait"),A=Array.isArray(t.ids)?t.ids.map(e=>ehW(e,"Agent job ID",500)):[];if(!A.length)return{pending:!1,result:{jobs:[]}};let r=await Promise.all(A.map(e=>R.agentControl.getJob(e)));if(r.some(e=>!e))return{pending:!1,error:"Agent job disappeared"};let i=r.filter(e=>!!e);if(i.some(e=>new Set(["QUEUED","RUNNING"]).has(e.status)))return{pending:!0,pollAfterSeconds:2};let n=i.map(e=>({id:e.id,status:e.status,error:e.error})),a=n.filter(({status:e})=>"SUCCEEDED"!==e);return{pending:!1,result:{jobs:n,sessionPatch:{signing:{jobs:n}}},error:a.length?a.map(({id:e,status:t,error:A})=>A?`${e}: ${A}`:`${e}: ${t.toLowerCase()}`).join("; "):null}}),v.registerWaitPoller("AGENT_RUN",async e=>{let t=await R.runs.get(e);return t?new Set(["IN_PROGRESS","PAUSED"]).has(t.status)?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:t.id,kind:t.kind,status:t.status,phase:t.phase,finalOutput:t.finalOutput,error:t.error,usage:{inputTokens:t.inputTokens,outputTokens:t.outputTokens,reasoningTokens:t.reasoningTokens,estimatedCost:t.estimatedCost}},error:"COMPLETED"===t.status?null:t.error||`Run ${t.status.toLowerCase()}`}:{pending:!1,error:"Plan or session disappeared"}}),v.registerWaitPoller("COMMAND_RUN",async e=>{let t=await R.commands.getRun(e);return t?new Set(["QUEUED","RUNNING","RESTARTING","CANCELLING"]).has(t.status)?{pending:!0,pollAfterSeconds:1}:{pending:!1,result:{id:t.id,displayNumber:t.displayNumber,status:t.status,exitCode:t.exitCode,signal:t.signal,error:t.error,sessionPatch:{command:{id:t.id,commandId:t.commandId,name:t.snapshotName,status:t.status,exitCode:t.exitCode,signal:t.signal,error:t.error,finishedAt:t.finishedAt?.toISOString()??null}}},error:"SUCCEEDED"===t.status?null:t.error||`Command run ${t.status.toLowerCase()}`}:{pending:!1,error:"Command run disappeared"}}),v.registerWaitPoller("BUILD",async e=>{let t=await R.builds.getBuild(e);return t?new Set(["QUEUED","PREPARING","RUNNING"]).has(t.status)?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:t.id,status:t.status,action:t.action,sessionPatch:{build:{id:t.id,status:t.status,action:t.action,error:t.error}}},error:"SUCCEEDED"===t.status?null:t.error||`Build ${t.status.toLowerCase()}`}:{pending:!1,error:"Build disappeared"}}),v.registerWaitPoller("BUILD_DATA_COLLECTION",async e=>{let t=await R.buildData.getCollection(e);return t?"COMPLETED"!==t.status?{pending:!0,pollAfterSeconds:2}:{pending:!1,result:{...t,sessionPatch:{buildData:t}}}:{pending:!1,error:"Build-data collection disappeared"}}),v.registerWaitPoller("SIGNING_OPERATIONS",async e=>{let t=ehK(JSON.parse(e),"Signing operations wait"),A=Array.isArray(t.ids)?t.ids.map(e=>ehW(e,"Signing operation ID",500)):[];if(!A.length)return{pending:!1,result:{operations:[]}};let r=(await R.signingAssets.operations(200)).filter(({id:e})=>A.includes(e));if(r.length!==A.length)return{pending:!1,error:"Signing operation disappeared"};let i=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]);if(r.some(({status:e})=>!i.has(e)))return{pending:!0,pollAfterSeconds:2};let n=r.filter(({status:e})=>"SUCCEEDED"!==e);return{pending:!1,result:{operations:r,sessionPatch:{signing:{operations:r}}},error:n.length?n.map(({id:e,error:t,status:A})=>t?`${e}: ${t}`:`${e}: ${A.toLowerCase()}`).join("; "):null}}),v.registerWaitPoller("SKILL_RUN",async e=>{let t=await R.skills.getRun(e);return t?("READY"===t.status&&(t=await R.skills.applyRun(e)),new Set(["PREPARING","READY","APPLYING"]).has(t?.status??""))?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:e,status:t?.status},error:t?.status==="SUCCEEDED"?null:t?.error||`Skill run ${t?.status?.toLowerCase()}`}:{pending:!1,error:"Skill run disappeared"}}),v.registerWaitPoller("WORKTREE_MOVE",async e=>{let t=await R.worktrees.getMove(e);if(!t)return{pending:!1,error:"Worktree move disappeared"};if(new Set(["PUSHING","CHECKING_OUT","DELETING_SOURCE"]).has(t.status))return{pending:!0,pollAfterSeconds:3};let A=t.targetWorktreeId?await R.worktrees.workflowSessionDataForWorktree(t.targetWorktreeId,{includeMissing:!0}):{};return{pending:!1,result:{id:t.id,status:t.status,targetWorktreeId:t.targetWorktreeId,sessionPatch:A},error:"SUCCEEDED"===t.status?null:t.error||`Worktree move ${t.status.toLowerCase()}`}}),v.registerWaitPoller("WORKTREE_PUSH_READY",async e=>{let t=await am(),A=await t.worktree.findUnique({where:{id:e}});if(!A)return{pending:!1,error:"Worktree disappeared"};if("READY"!==A.pushStatus)return{pending:!0,pollAfterSeconds:5};let r=await R.worktrees.workflowSessionDataForWorktree(A.id,{includeMissing:!0});return{pending:!1,result:{id:A.id,pushStatus:A.pushStatus,sessionPatch:r}}}),v.registerWaitPoller("WORKFLOW_RUN",async e=>{let t=await v.run(e);return t?new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(t.status)?{pending:!1,result:{id:t.id,status:t.status,sessionData:JSON.parse(t.sessionDataJson)},error:"SUCCEEDED"===t.status?null:t.error||`Sub-workflow ${t.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:3}:{pending:!1,error:"Sub-workflow disappeared"}}),v.registerWaitPoller("RUN_ANSWER_REVISION",async e=>{let t=ehK(JSON.parse(e),"Answer revision wait"),A=ehW(t.batchId,"Question batch ID",500),r=await R.runs.questionBatch(A);if(!r)return{pending:!1,error:"Question batch disappeared"};if(!r.revisionPreparedAt)return{pending:!0,pollAfterSeconds:2};let i=await R.runs.reviseAnswer(A,t.answers??{},!0===t.stash,!1!==t.rollback);return i?{pending:!1,result:{id:i.id,kind:i.kind,status:i.status,phase:i.phase,parentRunId:i.parentRunId,followUpMode:i.followUpMode}}:{pending:!1,error:"Answer revision failed"}}),v.registerWaitPoller("GITHUB_CHECKS",async e=>{let t=ehK(JSON.parse(e),"GitHub checks wait"),A=await R.github.autoRetryRun(ehW(t.repositoryId,"Repository ID"),ehW(t.workflowRunId,"Workflow run ID"),!0,"WORKFLOW_AUTOMATION");return new Set(["SUCCESS","FAILURE","CANCELLED","SKIPPED","TIMED_OUT","ACTION_REQUIRED","ERROR","NEUTRAL","STALE","STARTUP_FAILURE"]).has(A.status)?{pending:!1,result:{runId:A.id,status:A.status,jobs:A.jobs,sessionPatch:{pipeline:{runId:A.id,status:A.status,conclusion:A.status,jobs:A.jobs}}},error:"SUCCESS"===A.status?null:`GitHub checks concluded ${A.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:10}}),v.registerWaitPoller("DISK_SPACE_REPORT",async e=>{let t=ehK(JSON.parse(e),"Disk-space report wait"),A=ehW(t.agentId,"Agent ID",500),r=await R.diskSpace.snapshot(A);if(!r.disk.enabled)return{pending:!1,error:"Disk-space monitoring was disabled while awaiting a report"};let i=r.disk.lastReportedAt,n="string"==typeof t.previousReportedAt?t.previousReportedAt:null;return(ehW(t.requestedAt,"Requested timestamp",100),i&&(!n||Date.parse(i)>Date.parse(n)))?{pending:!1,result:{...r,sessionPatch:r}}:{pending:!0,pollAfterSeconds:2}}),T=eB,M=e,T.register("JIRA_LOAD_TICKET",async e=>{let t=epe(await M.jira.ticket(epA(e),!0===e.node.config.force));return{output:t,sessionPatch:{ticket:t},links:[eh4(String(t.key),String(t.title??t.key))]}}),T.register("JIRA_TRANSITION",async e=>{let t=epe(await M.jira.transitionTicket(epA(e),ehW(e.node.config.transitionId,"Jira transition ID",200)));return{output:t,sessionPatch:{ticket:t},links:[eh4(String(t.key),String(t.title??t.key))]}}),T.register("JIRA_COMMENT",async e=>{let t=epe(await M.jira.addComment(epA(e),{value:ehW(e.node.config.content,"Jira comment",1e5),format:"JIRA_WIKI"===e.node.config.format?"JIRA_WIKI":"MARKDOWN"}));return{output:t,sessionPatch:{ticket:t},links:[eh4(String(t.key),String(t.title??t.key))]}}),T.register("JIRA_ASSIGN",async e=>{let t=null===e.node.config.accountId?null:ehW(e.node.config.accountId,"Jira account ID",500),A=epe(await M.jira.assignTicket(epA(e),t));return{output:A,sessionPatch:{ticket:A},links:[eh4(String(A.key),String(A.title??A.key))]}}),T.register("JIRA_UPDATE_FIELDS",async e=>{let t=ehK(e.node.config.fields??{},"Jira fields"),A=epe(await M.jira.updateTicket({issueKey:epA(e),...t}));return{output:A,sessionPatch:{ticket:A},links:[eh4(String(A.key),String(A.title??A.key))]}}),T.register("JIRA_RESOLVE_BRANCH",async e=>{let t=await M.worktrees.previewTicketBranch({codebaseId:ehW(e.node.config.codebaseId??CO(e.sessionData,"codebase.id"),"Codebase ID",200),worktreeId:"string"==typeof CO(e.sessionData,"worktree.id")?String(CO(e.sessionData,"worktree.id")):null,ticketKey:epA(e)});return{output:t,sessionPatch:{worktree:{branch:t.branchName},ticket:{key:t.ticketKey,title:t.ticketTitle,type:t.ticketType}},links:[eh4(t.ticketKey,t.ticketTitle)]}}),N=eB,x=e,N.register("GITHUB_LOAD_PR",async e=>{let t=eh7(e),A=await x.github.pullRequest(t.owner,t.name,epi(e),"WORKFLOW_AUTOMATION");if(!A)throw Error("Pull request was not found");let r=ept(A);return{output:r,sessionPatch:{pr:r},links:[eh2("PULL_REQUEST",ehO(t.owner,t.name,A.number),A.title,A.url)]}}),N.register("GITHUB_MERGE_PR",async e=>{let t=eh7(e),A=epi(e),r=await x.github.pullRequestMergeOptions(t.owner,t.name,A,"WORKFLOW_AUTOMATION");if(!r.canMerge)throw Error(r.blockedReason||"Pull request cannot be merged");let i=await x.github.mergePullRequest({...t,number:A,method:"MERGE"===e.node.config.method||"REBASE"===e.node.config.method?e.node.config.method:"SQUASH",commitHeadline:"string"==typeof e.node.config.commitHeadline?e.node.config.commitHeadline:r.defaultCommitHeadline,commitBody:"string"==typeof e.node.config.commitBody?e.node.config.commitBody:r.defaultCommitBody,authorEmail:"string"==typeof e.node.config.authorEmail?e.node.config.authorEmail:null},"WORKFLOW_AUTOMATION");return{output:i,sessionPatch:{pr:{state:i.state}},links:[eh8(e)]}}),N.register("GITHUB_COLLECT_REVIEW_THREADS",async e=>{let t=eh7(e),A=await x.github.pullRequest(t.owner,t.name,epi(e),"WORKFLOW_AUTOMATION");if(!A)throw Error("Pull request was not found");let r=A.reviewThreads.filter(({isResolved:e})=>!e);return{output:r,sessionPatch:{pr:{unresolvedThreads:r}},links:[eh8(e,A.title,A.url)]}}),N.register("GITHUB_REPLY_REVIEW_THREAD",async e=>{let t=await x.github.replyToReviewThread(ehW(e.node.config.threadId,"Review thread ID",500),ehW(e.node.config.body,"Review reply",1e5),"WORKFLOW_AUTOMATION"),A=eh5(e);return{output:t,links:A?[A]:void 0}}),N.register("GITHUB_SET_REVIEW_THREAD_RESOLVED",async e=>{let t=await x.github.setReviewThreadResolved(ehW(e.node.config.threadId,"Review thread ID",500),!1!==e.node.config.resolved,"WORKFLOW_AUTOMATION"),A=eh5(e);return{output:t,links:A?[A]:void 0}}),N.register("GITHUB_CREATE_PR",async e=>{let t=eh7(e),A=await x.github.createPullRequest({...t,baseRefName:ehW(e.node.config.baseRefName??CO(e.sessionData,"worktree.baseBranch"),"Base branch",500),headRefName:ehW(e.node.config.headRefName??CO(e.sessionData,"worktree.branch"),"Head branch",500),title:ehW(e.node.config.title??CO(e.sessionData,"ticket.title"),"Pull request title",500),body:"string"==typeof e.node.config.body?e.node.config.body:null,draft:!0===e.node.config.draft});await x.worktrees.attachPullRequestForBranch(`github.com/${t.owner}/${t.name}`,A.headRefName,A);let r=ept(A);return{output:r,sessionPatch:{pr:r},links:[eh2("PULL_REQUEST",ehO(t.owner,t.name,A.number),A.title,A.url)]}}),N.register("GITHUB_SET_PR_LABELS",async e=>{let t=eh7(e),A=Array.isArray(e.node.config.labels)?e.node.config.labels.map(String):[],r=await x.github.setPullRequestLabels({...t,number:epi(e),labels:A});return{output:r.labels,sessionPatch:{pr:{labels:r.labels}},links:[eh8(e)]}}),N.register("GITHUB_RETRY_PIPELINE",async e=>{let t=await x.github.retryPipeline(ehW(e.node.config.repositoryId??CO(e.sessionData,"pr.repositoryGithubId"),"GitHub repository ID",500),ehW(e.node.config.checkSuiteId??CO(e.sessionData,"pipeline.checkSuiteId"),"Check suite ID",500),"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),A=eh3(e);return{output:t,sessionPatch:{pipeline:{status:t.status}},links:A?[A]:void 0}}),N.register("GITHUB_RETRY_JOB",async e=>{let t=await x.github.retryWorkflowJob(ehW(e.node.config.repositoryId,"GitHub repository ID",500),ehW(e.node.config.checkSuiteId,"Check suite ID",500),ehW(e.node.config.jobId,"Workflow job ID",500),"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),A=eh3(e);return{output:t,links:A?[A]:void 0}}),N.register("GITHUB_CANCEL_WORKFLOW_RUN",async e=>{let t=await x.github.cancelActionsWorkflowRun(ehW(e.node.config.codebaseRepositoryId??CO(e.sessionData,"repo.id"),"Codebase repository ID",500),ehW(e.node.config.workflowRunId??CO(e.sessionData,"pipeline.runId"),"Workflow run ID",500),!0===e.node.config.force,"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),A=eh3(e);return{output:t,sessionPatch:{pipeline:{status:"CANCELLED"}},links:A?[A]:void 0}}),N.register("GITHUB_SAVE_AUTO_RETRY",async e=>({output:await x.github.saveAutoRetryRule(ehK(e.node.config.input,"Auto-retry rule"))})),N.register("GITHUB_WAIT_CHECKS",async e=>{let t=ehW(e.node.config.repositoryId??CO(e.sessionData,"repo.id"),"Repository ID",500),A=ehW(e.node.config.workflowRunId??CO(e.sessionData,"pipeline.runId"),"Workflow run ID",500),r=eh3(e);return{links:r?[r]:void 0,wait:{kind:"GITHUB_CHECKS",externalKey:JSON.stringify({repositoryId:t,workflowRunId:A}),resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}}}),O=eB,U=e,O.register("WORKTREE_CREATE",async e=>{let t=eps(e),A=await U.worktrees.createWorktree({codebaseId:epa(e),selection:t,requestId:ehX(e,"create")});return eh1(e,A,{worktree:{branch:t.branchName,baseBranch:t.baseBranch}})}),O.register("WORKTREE_CHANGE_BRANCH",async e=>{let t=epn(e),A=eps(e),r=await U.worktrees.changeWorktreeBranch({worktreeId:t,selection:A,requestId:ehX(e,"change-branch"),stashOnFailure:!0===e.node.config.stashOnFailure});return eh1(e,r,{worktree:{branch:A.branchName,baseBranch:A.baseBranch}},[eh2("WORKTREE",t,"Worktree")])}),O.register("WORKTREE_REFRESH_PULL_REQUEST",async e=>{let t=epn(e),A=(await U.worktrees.refreshPullRequest(t)).pullRequest,r=A?ept(A):null,i=[eh2("WORKTREE",t,"Worktree")];if(A){let[e,t]=A.repositoryNameWithOwner.split("/");e&&t&&i.push(eh2("PULL_REQUEST",ehO(e,t,A.number),A.title,A.url))}return{output:{found:!!A,pullRequest:A},sessionPatch:{pr:r},links:i}}),O.register("WORKTREE_OPERATION",async e=>{let t=String(e.node.config.operation??"SYNC").toUpperCase();if("OPEN_EDITOR"===t||!ie.includes(t))throw Error("Worktree operation is invalid for workflow execution");let A=epn(e),r=await U.worktrees.runOperation(A,t,ehX(e,t.toLowerCase()));return eh1(e,r,void 0,[eh2("WORKTREE",A,"Worktree")])}),O.register("WORKTREE_SET_AUTO_SYNC",async e=>{let t=epn(e),A=String(e.node.config.action??"ENABLE").toUpperCase(),r="CANCEL"===A?{cancelled:await U.worktreeAutomations.cancelAutoSync(t)}:"RETRY"===A?await U.worktreeAutomations.retryAutoSync(t):"ENABLE"===A?await U.worktreeAutomations.configureAutoSync({worktreeId:t,conflictWorkflowId:ehz(e.node.config.conflictWorkflowId,500),conflictWorkflowChoice:ehz(e.node.config.conflictWorkflowChoice,500)}):null;if(!r)throw Error("Unknown Auto Sync action");return{output:r,sessionPatch:{worktree:{autoSync:r}},links:[eh2("WORKTREE",t,"Worktree")]}}),O.register("WORKTREE_SET_AUTO_MERGE",async e=>{let t,A=epn(e),r=String(e.node.config.action??"ENABLE").toUpperCase();if("CANCEL"===r)t={cancelled:await U.worktreeAutomations.cancelAutoMerge(A)};else if("RETRY"===r)t=await U.worktreeAutomations.retryAutoMerge(A);else if("ENABLE"===r){let r=Number(e.node.config.pullRequestNumber??CO(e.sessionData,"pr.number"));if(!Number.isInteger(r)||r<1)throw Error("Pull request number must be a positive integer");let i=String(e.node.config.method??"SQUASH").toUpperCase();if(!["MERGE","REBASE","SQUASH"].includes(i))throw Error("Merge method is invalid");t=await U.worktreeAutomations.configureAutoMerge({worktreeId:A,repositoryNameWithOwner:ehW(e.node.config.repositoryNameWithOwner??CO(e.sessionData,"repo.nameWithOwner"),"Repository",500),pullRequestNumber:r,method:i,commitHeadline:ehW(e.node.config.commitHeadline??CO(e.sessionData,"pr.title"),"Commit headline",1e3),commitBody:String(e.node.config.commitBody??""),authorEmail:ehz(e.node.config.authorEmail,500),deleteWorktree:!0===e.node.config.deleteWorktree,moveTicketToDone:!0===e.node.config.moveTicketToDone})}else throw Error("Unknown Auto Merge action");return{output:t,sessionPatch:{worktree:{autoMerge:t}},links:[eh2("WORKTREE",A,"Worktree")]}}),O.register("WORKTREE_DELETE",async e=>{let t=await U.worktrees.deleteWorktree({worktreeId:epn(e),deleteRemoteBranch:!0===e.node.config.deleteRemoteBranch,requestId:ehX(e,"delete")});return eh1(e,t)}),O.register("WORKTREE_MOVE",async e=>{let t=await U.worktrees.moveWorktree({sourceWorktreeId:epn(e),targetCodebaseId:ehW(e.node.config.targetCodebaseId,"Target codebase ID",500),targetWorktreeId:ehz(e.node.config.targetWorktreeId,500),deleteSource:!0===e.node.config.deleteSource,requestId:ehX(e,"move")}),A=t.targetWorktreeId??(!0===e.node.config.deleteSource?null:epn(e));return{output:t,links:[...A?[eh2("WORKTREE",A,"Worktree")]:[],{kind:"WORKTREE_MOVE",resourceId:t.id,label:"Worktree move"}],wait:{kind:"WORKTREE_MOVE",externalKey:t.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}}}),O.register("WORKTREE_INSPECT",async e=>{let t=epn(e),A=await U.worktrees.inspect(t,ehX(e,"inspect"));return{output:A,sessionPatch:{worktree:{commits:A.commits,changes:A.changes,branchChanges:A.branchChanges}},links:[eh2("WORKTREE",t,"Worktree")]}}),O.register("WORKTREE_INSPECT_GIT",async e=>{let t=epn(e),A=await U.worktrees.inspectGitState(t,ehX(e,"inspect-git"));return{output:A,sessionPatch:{worktree:{...A}},links:[eh2("WORKTREE",t,"Worktree")]}}),O.register("WORKTREE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!r9.includes(t))throw Error("Worktree Git operation is invalid");let A=epn(e),r=await U.worktrees.runGitOperation({worktreeId:A,operation:t,branch:ehz(e.node.config.branch,500),stashOid:ehz(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:ehX(e,t.toLowerCase())});return eh1(e,r,void 0,[eh2("WORKTREE",A,"Worktree")])}),O.register("WORKTREE_WAIT_PUSH_READY",async e=>{let t=epn(e);return{links:[eh2("WORKTREE",t,"Worktree")],wait:{kind:"WORKTREE_PUSH_READY",externalKey:t,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}}}),F=eB,_=e,F.register("CODEBASE_FETCH_REFRESH",async e=>{let t=epa(e),A="REFRESH"===e.node.config.operation?rM:rN,r=await _.codebases.runOperation(A,[t],ehX(e,A)),i=r.jobs[0];if(!i)throw Error(r.skipped[0]?.reason??"Codebase operation was skipped");return eh1(e,i,void 0,[eh2("CODEBASE",t,"Codebase")])}),F.register("CODEBASE_INSPECT_GIT",async e=>{let t=epa(e),A=await _.codebases.inspectGitState(t,ehX(e,"inspect-git"));return{output:A,sessionPatch:{codebase:{...A}},links:[eh2("CODEBASE",t,"Codebase")]}}),F.register("CODEBASE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!rU.includes(t))throw Error("Codebase Git operation is invalid");let A=epa(e),r=await _.codebases.runGitOperation({codebaseId:A,operation:t,branch:ehz(e.node.config.branch,500),stashOid:ehz(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:ehX(e,t.toLowerCase())});return eh1(e,r,void 0,[eh2("CODEBASE",A,"Codebase")])}),G=eB,L=e,G.register("BUILD_START",async e=>{let t=String(e.node.config.action??"BUILD").toUpperCase();if(!Aj.includes(t))throw Error("Build action is invalid");let A=await L.builds.startBuild({worktreeId:epn(e),configurationId:ehW(e.node.config.configurationId,"Build configuration ID",500),destination:e.node.config.destination,scriptIds:Array.isArray(e.node.config.scriptIds)?e.node.config.scriptIds.map(String):[],action:t,advancedSettings:e.node.config.advancedSettings,exportWhenComplete:!0===e.node.config.exportWhenComplete,exportSettings:e.node.config.exportSettings,worktreeCoverage:!0===e.node.config.worktreeCoverage,requestId:ehX(e,"build"),telemetryRequestOrigin:"workflow"});return{output:A,sessionPatch:{build:{id:A.id,status:A.status,action:A.action}},links:[{kind:"BUILD",resourceId:A.id,label:`${A.action} build`,url:`/builds/${A.id}`}],wait:{kind:"BUILD",externalKey:A.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}}}),G.register("BUILD_READ_TEST_RESULTS",async e=>{let t,A=epo(e),r=(await L.builds.reportsForBuild(A)).filter(({kind:e,status:t})=>"TEST_RESULTS"===e&&"READY"===t).at(-1);if(!r)throw Error("Test results are not ready");let i=ehK(JSON.parse(r.summaryJson),"Test summary"),n=ehK(JSON.parse(r.dataJson),"Test results");return{output:{summary:i,tests:n.tests??[]},sessionPatch:{build:{testSummary:i,tests:n.tests??[]}},links:[eh2("BUILD",A,"Build",t)]}}),G.register("BUILD_READ_COVERAGE",async e=>{let t=epo(e),A=(await L.builds.reportsForBuild(t)).filter(({kind:e,status:t})=>"CODE_COVERAGE"===e&&"READY"===t).at(-1);if(!A)throw Error("Coverage results are not ready");let r=ehK(JSON.parse(A.summaryJson),"Coverage summary"),i=ehK(JSON.parse(A.dataJson),"Coverage results");return{output:{summary:r,files:i.files??[],changedFiles:i.changedFiles??[]},sessionPatch:{build:{coverageSummary:r,coverageFiles:i.files??[],changedCoverageFiles:i.changedFiles??[]}},links:[eh2("BUILD",t,"Build",`/builds/${t}/coverage`)]}}),G.register("BUILD_EXPORT",async e=>{let t,A,r=epo(e),i=await L.builds.exportArchive({buildId:r,requestId:ehX(e,"export"),settings:ehK(e.node.config.settings,"Export settings")});return i.jobId?eh1(e,{id:i.jobId,timeoutSeconds:3600},{build:{exportId:i.id}},[eh2("BUILD",r,"Build",t)]):{output:i,links:[eh2("BUILD",r,"Build",A)]}}),G.register("BUILD_DEPLOY",async e=>{let t,A,r=epo(e),i=await L.builds.runBuild({buildId:r,destinations:Array.isArray(e.node.config.destinations)?e.node.config.destinations:[],requestId:ehX(e,"deploy")}),n=i.find(({jobId:e})=>!!e)?.jobId;return n?eh1(e,{id:n,timeoutSeconds:3600},void 0,[eh2("BUILD",r,"Build",t)]):{output:i,links:[eh2("BUILD",r,"Build",A)]}}),G.register("BUILD_CANCEL",async e=>{let t,A=epo(e),r=await L.builds.cancelBuild(A);return{output:r,sessionPatch:{build:{id:r?.id,status:r?.status}},links:[eh2("BUILD",A,"Build",t)]}}),P=eB,J=e,ev=async e=>{let t=await J.diskSpace.snapshot(e);return{output:t,sessionPatch:t,links:[eh2("AGENT",e,t.agent.name,`/agents/${encodeURIComponent(e)}`)]}},P.register("DISK_SPACE_LOAD",async e=>ev(epl(e))),P.register("DISK_SPACE_REFRESH",async e=>{let t=epl(e),A=await J.diskSpace.requestRefresh(t);return{output:A,links:[eh2("AGENT",t,"Agent",`/agents/${encodeURIComponent(t)}`)],wait:{kind:"DISK_SPACE_REPORT",externalKey:JSON.stringify(A),resumeAfter:ehV(e.node.config,2),timeoutAt:eh$(e.node.config,180)}}}),P.register("DISK_SPACE_UPDATE_THRESHOLDS",async e=>{let t=await J.diskSpace.updateSettings({normalThresholdGiB:Number(e.node.config.normalThresholdGiB),pressureThresholdGiB:Number(e.node.config.pressureThresholdGiB)});return{output:t,sessionPatch:{disk:t}}}),P.register("DISK_SPACE_SET_MONITORING",async e=>{let t=epl(e);return await J.diskSpace.setMonitoring(t,!0===e.node.config.enabled),ev(t)}),P.register("DISK_SPACE_SET_PRESSURE_MODE",async e=>{let t=epl(e);return await J.diskSpace.setManualPressureMode(t,!0===e.node.config.enabled),ev(t)}),function(e,t){for(let[A,r]of(e.register("RUN_CREATE_PLAN",async e=>{let A=await t.runs.create(epu(e,"PLAN"));if(!A)throw Error("Plan could not be created");return eh0(e,A,!0)}),e.register("RUN_CREATE_SESSION",async e=>{let A=await t.runs.create(epu(e,"SESSION"));if(!A)throw Error("Session could not be created");return eh0(e,A,!0)}),e.register("RUN_PLAY_PLAN",async e=>{let A=await t.runs.playPlan(epc(e),Array.isArray(e.node.config.mcpPresetIds)?e.node.config.mcpPresetIds.map(String):[]);if(!A)throw Error("Plan could not be played");return eh0(e,A,!0)}),e.register("RUN_FOLLOW_UP",async e=>{let A=epu(e,"SESSION"),r=await t.runs.followUp(epc(e),{...A,followUpMode:ehW(e.node.config.followUpMode??"RESUME","Follow-up mode",50),contextMode:ehz(e.node.config.contextMode,50)});if(!r)throw Error("Follow-up could not be created");return eh0(e,r,!0)}),e.register("RUN_STEER",async e=>{let A=await t.runs.steer(epc(e),ehW(e.node.config.prompt,"Steering prompt",2e5),Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[]);if(!A)throw Error("Run could not be steered");return eh0(e,A)}),e.register("RUN_ANSWER",async e=>{let A=await t.runs.answerQuestion(ehW(e.node.config.batchId,"Question batch ID",500),e.node.config.answers??{});if(!A)throw Error("Question could not be answered");return eh0(e,A)}),[["RUN_PAUSE","PAUSE"],["RUN_CONTINUE","CONTINUE"],["RUN_CANCEL","CANCEL"]]))e.register(A,async e=>{let A=await t.runs.lifecycle(epc(e),r);if(!A)throw Error("Run lifecycle operation failed");return eh0(e,A)});e.register("RUN_REVISE_ANSWER",async e=>{let A=ehW(e.node.config.batchId,"Question batch ID",500),r=await t.runs.questionBatch(A);if(!r)throw Error("Question batch was not found");if(r.revisionPreparedAt){let r=await t.runs.reviseAnswer(A,e.node.config.answers??{},!0===e.node.config.stash,!1!==e.node.config.rollback);if(!r)throw Error("Answer revision failed");return eh0(e,r)}await t.runs.prepareAnswerRevision(A);let i=eh6(e);return{links:i?[i]:void 0,wait:{kind:"RUN_ANSWER_REVISION",externalKey:JSON.stringify({batchId:A,answers:e.node.config.answers??{},stash:!0===e.node.config.stash,rollback:!1!==e.node.config.rollback}),resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}}}),e.register("RUN_READ_RESULT",async e=>{let A=await t.runs.get(epc(e));if(!A)throw Error("Run was not found");let[r,i,n,a]=await Promise.all([t.runs.events({runId:A.id,first:500}),t.runs.questions({runId:A.id,first:200}),t.runs.usage(A.id),t.runs.linkedItems(A.id)]);return eh0(e,{...A,events:r,questions:i,usage:n,links:a})}),e.register("RUN_CAPTURE_CHECKPOINT",async e=>{let t=await am(),A=await t.runCheckpoint.findFirst({where:{runId:epc(e)},orderBy:{createdAt:"desc"}});if(!A)throw Error("Run has no captured checkpoint");let r=eh6(e);return{output:A,sessionPatch:{steps:{[e.node.id]:{snapshotId:A.id}}},links:[...r?[r]:[],{kind:"CHECKPOINT",resourceId:A.id,label:`${A.kind} checkpoint`}]}}),e.register("RUN_ARCHIVE_DELETE",async e=>{let A=epc(e),r=!0===e.node.config.delete,i=r?await t.runs.deleteRuns([A]):await t.runs.archive([A],!1!==e.node.config.archived),n=r?null:eh6(e);return{output:{id:A,affected:i},links:n?[n]:void 0}})}(eB,e),Y=eB,j=e,Y.register("SAVED_COMMAND",async e=>{let t=ehW(e.node.config.commandId,"Saved command",500),A=await j.commands.getDefinition(t);if(!A||A.archivedAt)throw Error("Saved command is unavailable");let r="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT";if("WAIT_FOR_EXIT"===r&&"ALWAYS"===A.restartPolicy)throw Error("Always-restart commands require fire and forget");let i=String(e.node.config.targetMode??"CONTEXT"),n=null,a=null,s=new Set(["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME"]).has(A.targetKind);if("FIXED_AGENT"===i)n=ehW(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===i)a=ehW(e.node.config.worktreeId,"Fixed worktree",500);else if(s){let t=CO(e.sessionData,"agent.id")??CO(e.sessionData,"codebase.agentId");if("string"==typeof t&&(n=t),!n){let t=CO(e.sessionData,"worktree.id");if("string"==typeof t){let e=await am(),A=await e.worktree.findUnique({where:{id:t},select:{codebase:{select:{agentId:!0}}}});n=A?.codebase.agentId??null}}}else{let t=CO(e.sessionData,"worktree.id");"string"==typeof t&&(a=t)}let o=await j.commands.startRun({commandId:t,agentId:n,worktreeId:a,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!o)throw Error("Command run could not be created");return{output:{id:o.id,displayNumber:o.displayNumber,status:o.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:o.id,displayNumber:o.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:o.id,label:`Command #${o.displayNumber}`,url:`/commands/runs/${o.id}`}],wait:"WAIT_FOR_EXIT"===r?{kind:"COMMAND_RUN",externalKey:o.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}:void 0}}),Y.register("CUSTOM_COMMAND",async e=>{let t=ehW(e.node.config.script,"Custom command",1e6),A="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT",r=String(e.node.config.targetMode??"CONTEXT"),i=null,n=null;if("FIXED_AGENT"===r)i=ehW(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===r)n=ehW(e.node.config.worktreeId,"Fixed worktree",500);else{let t=CO(e.sessionData,"worktree.id");if("string"==typeof t)n=t;else{let t=CO(e.sessionData,"agent.id")??CO(e.sessionData,"codebase.agentId");"string"==typeof t&&(i=t)}}if(!i&&!n)throw Error("Custom command context has no agent or worktree target");let a=await j.commands.startCustomRun({script:t,agentId:i,worktreeId:n,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!a)throw Error("Custom command run could not be created");return{output:{id:a.id,displayNumber:a.displayNumber,status:a.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:a.id,displayNumber:a.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:a.id,label:`Command #${a.displayNumber}`,url:`/commands/runs/${a.id}`}],wait:"WAIT_FOR_EXIT"===A?{kind:"COMMAND_RUN",externalKey:a.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}:void 0}}),Y.register("SKILL_APPLY",async e=>{let t=await j.skills.prepareSync(e.node.config.groupId?"GROUP":"ALL",ehz(e.node.config.groupId,500),!1);if(!t)throw Error("Skill sync could not be prepared");return{output:t,links:[{kind:"SKILL_RUN",resourceId:t.id,label:"Skill sync",url:`/skills/sync/${t.id}`}],wait:{kind:"SKILL_RUN",externalKey:t.id,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config)}}}),Y.register("NOTIFICATION_SEND",async e=>{let t=await am(),A=await t.$transaction(t=>j.notifications.recordInTransaction(t,{dedupeKey:`${e.run.id}:${e.node.id}:${e.attempt.generation}`,typeKey:"WORKFLOW_MESSAGE",title:ehW(e.node.config.title,"Notification title",240),body:ehW(e.node.config.body,"Notification body",1e3),href:"string"==typeof e.node.config.href?e.node.config.href:`/workflows/runs/${e.run.id}`,resourceKind:"WORKFLOW_RUN",resourceId:e.run.id,worktreeId:"string"==typeof CO(e.sessionData,"worktree.id")?String(CO(e.sessionData,"worktree.id")):null}));return j.notifications.created(A),{output:A}}),Y.register("IOS_PUSH_SEND",async e=>({output:await j.pushNotifications.send({requestId:ehX(e,"ios-push"),editor:e.node.config.editor,targetMode:ehW(e.node.config.targetMode??"ALL","Push target mode",50),registrationIds:Array.isArray(e.node.config.registrationIds)?e.node.config.registrationIds.map(String):[],channelId:ehz(e.node.config.channelId,500),directToken:ehz(e.node.config.directToken,2e4),directTokenEncoding:"BASE64"===e.node.config.directTokenEncoding?"BASE64":"HEX",directEnvironment:"PRODUCTION"===e.node.config.directEnvironment?"PRODUCTION":"SANDBOX"})})),Y.register("MCP_CALL",async e=>{let t=await j.tools.callTool({groupId:ehW(e.node.config.groupId,"MCP tool group",500),name:ehW(e.node.config.name,"MCP tool name",500),arguments:ehK(e.node.config.arguments??{},"MCP arguments")},{caller:`workflow:${e.run.id}`,correlationId:e.attempt.id,source:"WORKFLOW"});return{output:t,sessionPatch:{steps:{[e.node.id]:{output:t}}}}}),$=eB,q=e,eR=async(e,t,A,r,i={})=>{let n=ehK(await q.tools.callTool({groupId:t,name:A,arguments:r},{caller:`workflow:${e.run.id}`,correlationId:e.attempt.id,source:"WORKFLOW"}),`${A} tool result`),a=ehK(n.structuredContent,`${A} structured content`),s=i.sessionPatch?await i.sessionPatch(a):{};return{output:a,sessionPatch:{steps:{[e.node.id]:{output:a}},...s},wait:i.wait?.(a)}},eT=(e,t,A,r)=>({kind:t,externalKey:A,resumeAfter:ehV(e.node.config),timeoutAt:eh$(e.node.config,r)}),$.register("COMMAND_RERUN",async e=>{let t=ehZ(e,"commandRunId","command.id","Command run ID");return eR(e,"builtin:commands","rerun_command",{id:t},{sessionPatch:e=>({command:ehK(e.run,"Command run output")}),wait:t=>eT(e,"COMMAND_RUN",ehW(ehK(t.run,"Command run output").id,"Command run ID",500))})}),$.register("COMMAND_TERMINATE",async e=>{let t=ehZ(e,"commandRunId","command.id","Command run ID");return eR(e,"builtin:commands","terminate_command_run",{id:t},{sessionPatch:e=>({command:ehK(e.run,"Command run output")})})}),$.register("COMMAND_READ_OUTPUT",async e=>{let t=ehZ(e,"commandRunId","command.id","Command run ID");return eR(e,"builtin:commands","get_command_run_output",{runId:t,first:Number(e.node.config.first??1e3)},{sessionPatch:e=>({command:{id:t,output:e.chunks}})})}),$.register("WORKTREE_INSPECT_DIFF",async e=>{let t=ehZ(e,"worktreeId","worktree.id","Worktree ID");return eR(e,"builtin:worktrees","inspect_worktree_diff",{worktreeId:t,scope:ehW(e.node.config.scope,"Diff scope",100),path:e.node.config.path,previousPath:e.node.config.previousPath,commitSha:e.node.config.commitSha,requestId:ehX(e,"diff")},{sessionPatch:e=>({worktree:{id:t,diff:e.inspection}})})}),$.register("WORKTREE_UPDATE_METADATA",async e=>{let t=ehZ(e,"worktreeId","worktree.id","Worktree ID");return eR(e,"builtin:worktrees","update_worktree_metadata",{id:t,baseBranch:e.node.config.baseBranch,highlightColor:e.node.config.highlightColor},{sessionPatch:async e=>CF(await q.worktrees.workflowSessionDataForWorktree(t,{includeMissing:!0}),{worktree:ehK(e.worktree,"Worktree output")})})}),$.register("WORKTREE_MOVE_CONTROL",e=>eR(e,"builtin:worktrees","CANCEL"===e.node.config.operation?"cancel_worktree_move":"retry_worktree_move_with_stash",{id:ehW(e.node.config.moveId,"Move ID",500)},{sessionPatch:async e=>{let t=ehK(e.move,"Worktree move output"),A="string"==typeof t.targetWorktreeId&&t.targetWorktreeId||"string"==typeof t.sourceWorktreeId&&t.sourceWorktreeId||null;return CF(A?await q.worktrees.workflowSessionDataForWorktree(A,{includeMissing:!0}):{},{worktree:{move:t}})}})),$.register("BUILD_REBUILD",async e=>{let t=ehZ(e,"buildId","build.id","Build ID");return eR(e,"builtin:builds","rebuild_build",{buildId:t,requestId:ehX(e,"rebuild")},{sessionPatch:e=>({build:ehK(e.build,"Build output")}),wait:t=>eT(e,"BUILD",ehW(ehK(t.build,"Build output").id,"Build ID",500))})}),$.register("BUILD_GENERATE_REPORT",async e=>{let t=ehZ(e,"buildId","build.id","Build ID");return eR(e,"builtin:builds","generate_build_report",{buildId:t,kind:"TEST_RESULTS"===e.node.config.reportKind?"TEST_RESULTS":"CODE_COVERAGE",requestId:ehX(e,"report")},{sessionPatch:e=>({build:{id:t,report:e.report}})})}),$.register("BUILD_DELETE",e=>{let t=Array.isArray(e.node.config.buildIds)?e.node.config.buildIds.map(String):[ehZ(e,"buildId","build.id","Build ID")];return eR(e,"builtin:builds","delete_builds",{ids:t},{sessionPatch:e=>({build:{ids:t,deletedCount:e.count}})})}),$.register("SKILL_PREPARE_SYNC",e=>eR(e,"builtin:skills","prepare_skill_sync",{kind:String(e.node.config.syncKind??"ALL"),groupId:e.node.config.groupId},{sessionPatch:e=>({skillSync:ehK(e.run,"Skill sync output")})})),$.register("SKILL_RESOLVE_SYNC",e=>eR(e,"builtin:skills","resolve_skill_sync_conflict",{input:{runId:ehZ(e,"runId","skillSync.id","Skill sync run ID"),itemId:ehW(e.node.config.itemId,"Conflict item ID",500),resolution:String(e.node.config.resolution??"SKIP")}},{sessionPatch:e=>({skillSync:ehK(e.run,"Skill sync output")})})),$.register("SKILL_SKIP_SYNC",e=>eR(e,"builtin:skills","skip_skill_sync",{runId:ehZ(e,"runId","skillSync.id","Skill sync run ID")},{sessionPatch:e=>({skillSync:ehK(e.run,"Skill sync output")})})),$.register("BUILD_DATA_REFRESH",e=>eR(e,"builtin:build-data","refresh_build_data",{requestId:ehX(e,"build-data")},{sessionPatch:e=>({buildData:ehK(e.collection,"Build-data collection output")}),wait:t=>{let A=ehK(t.collection,"Build-data collection output");return"COMPLETED"===A.status?void 0:eT(e,"BUILD_DATA_COLLECTION",ehW(A.id,"Build-data collection ID",500),90)}})),$.register("BUILD_DATA_DELETE",e=>eR(e,"builtin:build-data","delete_build_data_entries",{collectionId:ehZ(e,"collectionId","buildData.id","Build-data collection ID"),entryIds:Array.isArray(e.node.config.entryIds)?e.node.config.entryIds.map(String):[],requestId:ehX(e,"build-data-delete"),overrideProtection:!0===e.node.config.overrideProtection},{sessionPatch:e=>({buildData:ehK(e.collection,"Build-data collection output")})})),$.register("BUILD_DATA_SET_LOCK",e=>{let t=ehZ(e,"collectionId","buildData.id","Build-data collection ID");return eR(e,"builtin:build-data","set_build_data_lock",{collectionId:t,entryId:ehW(e.node.config.entryId,"Entry ID",500),locked:!0===e.node.config.locked},{sessionPatch:e=>({buildData:{id:t,entry:e.entry}})})}),$.register("SIGNING_REFRESH",e=>eR(e,"builtin:signing-assets","refresh_signing_assets",{agentIds:Array.isArray(e.node.config.agentIds)?e.node.config.agentIds.map(String):void 0},{sessionPatch:e=>({signing:{jobs:e.operation}}),wait:t=>{let A=Array.isArray(t.operation)?t.operation.flatMap(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=e.id;return"string"==typeof t&&t?[t]:[]}):[];return A.length?eT(e,"AGENT_JOBS",JSON.stringify({ids:A}),90):void 0}})),$.register("SIGNING_SYNC_PROFILE",e=>eR(e,"builtin:signing-assets","sync_signing_profile",{uuid:ehZ(e,"uuid","signingProfile.id","Profile UUID"),sourceAgentId:ehW(e.node.config.sourceAgentId,"Source agent ID",500),targetAgentIds:Array.isArray(e.node.config.targetAgentIds)?e.node.config.targetAgentIds.map(String):[]},{sessionPatch:e=>({signing:{operation:e.operation}}),wait:t=>eT(e,"SIGNING_OPERATIONS",JSON.stringify({ids:[ehW(ehK(t.operation,"Signing operation output").id,"Signing operation ID",500)]}),300)})),$.register("SIGNING_DELETE_EXPIRED",e=>eR(e,"builtin:signing-assets","delete_expired_signing_profiles",{agentIds:Array.isArray(e.node.config.agentIds)?e.node.config.agentIds.map(String):void 0},{sessionPatch:e=>({signing:{operations:e.operation}}),wait:t=>{let A=Array.isArray(t.operation)?t.operation.flatMap(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=e.id;return"string"==typeof t&&t?[t]:[]}):[];return A.length?eT(e,"SIGNING_OPERATIONS",JSON.stringify({ids:A}),300):void 0}})),$.register("IOS_DEVICE_REGISTER",e=>eR(e,"builtin:ios-devices","register_ios_device",{id:ehZ(e,"deviceId","device.id","Device ID")},{sessionPatch:e=>({device:ehK(e.device,"iOS device output")})})),$.register("IOS_DEVICE_REJECT",e=>eR(e,"builtin:ios-devices","reject_ios_device",{id:ehZ(e,"deviceId","device.id","Device ID")},{sessionPatch:e=>({device:ehK(e.device,"iOS device output")})})),$.register("AGENT_RECONCILE",async e=>{let t=Array.isArray(e.node.config.agentIds)?e.node.config.agentIds.map(String):(await q.agentControl.listAgents()).map(({id:e})=>e),A=await q.agentControl.requestCodebaseReconcile(t);return{output:{requested:A},sessionPatch:{agent:{requested:A}}}}),$.register("AGENT_UPDATE_CADENCE",async e=>{let t=await q.agentControl.updateCadenceSettings(ehZ(e,"agentId","agent.id","Agent ID"),ehK(e.node.config.settings,"Cadence settings"));return{output:t,sessionPatch:{agent:ehK(t,"Agent output")}}}),$.register("CCUSAGE_COLLECT",async e=>{let t=await q.ccusage.collect(ehX(e,"ccusage"));return{output:t,sessionPatch:{usage:t}}}),$.register("MODEL_COST_REFRESH",async()=>{let e=await q.modelCosts.refresh();return{output:e,sessionPatch:{modelCosts:e}}}),eM=async(e,t,A)=>{let r=await eR(e,"builtin:github",t,A),i=ehK(r.output,"GitHub tool output"),n=ept(ehK(i.pullRequest,"Pull request output"));return{...r,sessionPatch:{...r.sessionPatch,pr:n}}},eN=e=>({owner:ehW(e.node.config.owner??CO(e.sessionData,"repo.owner"),"Repository owner",200),name:ehW(e.node.config.name??CO(e.sessionData,"repo.name"),"Repository name",200),number:Number(e.node.config.number??CO(e.sessionData,"pr.number"))}),$.register("GITHUB_UPDATE_PR",e=>eM(e,"update_pull_request",{...eN(e),title:ehz(e.node.config.title),body:"string"==typeof e.node.config.body?e.node.config.body:void 0,draft:"boolean"==typeof e.node.config.draft?e.node.config.draft:void 0})),$.register("GITHUB_SUBMIT_REVIEW",e=>eM(e,"submit_pull_request_review",{...eN(e),event:String(e.node.config.event??"COMMENT"),body:"string"==typeof e.node.config.body?e.node.config.body:void 0})),$.register("GITHUB_REQUEST_REVIEWERS",e=>eM(e,"request_pull_request_reviewers",{...eN(e),reviewers:Array.isArray(e.node.config.reviewers)?e.node.config.reviewers.map(String):[],teamReviewers:Array.isArray(e.node.config.teamReviewers)?e.node.config.teamReviewers.map(String):[]})),$.register("GITHUB_DISPATCH_WORKFLOW",e=>eR(e,"builtin:github","dispatch_github_workflow",{repositoryId:ehZ(e,"repositoryId","repo.id","Repository ID"),workflowId:ehW(e.node.config.workflowId,"Workflow ID",500),ref:ehW(e.node.config.ref,"Git ref",500),inputs:e.node.config.inputs?ehK(e.node.config.inputs,"Workflow inputs"):void 0},{sessionPatch:e=>({pipeline:e})})),ex=async(e,t,A)=>{let r=await eR(e,"builtin:jira",t,A),i=ehK(r.output,"Jira tool output"),n=epe(ehK(i.ticket,"Jira ticket output"));return{...r,sessionPatch:{...r.sessionPatch,ticket:n}}},$.register("JIRA_CREATE_TICKET",e=>ex(e,"create_jira_ticket",{projectKey:ehW(e.node.config.projectKey,"Project key",100),issueTypeId:ehW(e.node.config.issueTypeId,"Issue type ID",100),summary:ehW(e.node.config.summary,"Summary"),description:"string"==typeof e.node.config.description?{format:"MARKDOWN",value:e.node.config.description}:void 0,fields:e.node.config.fields?ehK(e.node.config.fields,"Additional Jira fields"):void 0})),$.register("JIRA_ADD_WORKLOG",e=>ex(e,"add_jira_worklog",{issueKey:ehZ(e,"issueKey","ticket.key","Issue key"),timeSpentSeconds:Number(e.node.config.timeSpentSeconds),startedAt:ehz(e.node.config.startedAt,100),comment:"string"==typeof e.node.config.comment?{format:"MARKDOWN",value:e.node.config.comment}:void 0})),$.register("JIRA_LINK_TICKETS",e=>ex(e,"link_jira_tickets",{inwardIssueKey:ehZ(e,"inwardIssueKey","ticket.key","Inward issue key"),outwardIssueKey:ehW(e.node.config.outwardIssueKey,"Outward issue key",100),linkType:ehW(e.node.config.linkType,"Link type",100)})),(eS=new epm(W,z,eE,ee,{buildData:er,commands:et,credentials:K,iosDevices:ep,polling:X,pushNotifications:es,signingAssets:en,skills:ec})).start(),eD.startRuntime(),ek.startRuntime(),ey.startRuntime(),epP.serverServices={prismaService:V,credentialService:K,agentControlService:z,ccusageService:eA,buildDataService:er,buildsService:el,codebasesService:eu,codebaseToolsService:ed,jiraService:eh,iosDevicesService:ep,gitHubService:ef,gitHubPipelineStatusService:eg,gitHubActionsNotificationsService:em,cacheServerService:eI,worktreesService:eE,worktreeAutomationService:ek,skillsService:ec,telemetryService:ei,signingAssetsService:en,pushNotificationsService:es,notificationsService:Z,pollingService:X,modelCostsService:ea,runsService:eo,commandsService:et,diskSpaceService:ee,systemStatusService:ey,actionCenterService:eC,globalSearchService:ew,toolsService:eQ,workflowEventsService:W,workflowsService:eD,workflowEventBridge:eS}),this.schema=(t=this.services.prismaService,A=this.services.agentControlService,r=this.services.jiraService,i=this.services.gitHubService,n=this.services.ccusageService,a=this.services.codebasesService,s=this.services.toolsService,o=this.services.worktreesService,l=this.services.worktreeAutomationService,c=this.services.buildDataService,u=this.services.skillsService,d=this.services.buildsService,h=this.services.iosDevicesService,p=this.services.telemetryService,g=this.services.signingAssetsService,m=this.services.pushNotificationsService,f=this.services.cacheServerService,I=this.services.credentialService,E=this.services.notificationsService,y=this.services.pollingService,C=this.services.modelCostsService,w=this.services.runsService,Q=this.services.workflowsService,B=this.services.commandsService,D=this.services.diskSpaceService,k=this.services.systemStatusService,S=this.services.actionCenterService,b=this.services.globalSearchService,eb=H([{Query:{health:async()=>await t.healthCheck()?"ok":"degraded"}},{JSON:sn,Agent:{capabilities:e=>si(e.capabilitiesJson),connectionStatus:e=>null!==e.lastSeenAt&&Date.now()-e.lastSeenAt.getTime()<=a8(e)&&null===e.disconnectedAt?"ONLINE":"OFFLINE",effectiveBuildsDirectory:e=>AQ(e),lastSeenAt:e=>e.lastSeenAt?.toISOString()??null,disconnectedAt:e=>e.disconnectedAt?.toISOString()??null,createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},AgentJob:{payload:e=>si(e.payloadJson),result:e=>si(e.resultJson),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>e.startedAt?.toISOString()??null,finishedAt:e=>e.finishedAt?.toISOString()??null,updatedAt:e=>e.updatedAt.toISOString()},AgentJobLog:{createdAt:e=>e.createdAt.toISOString()},AgentEnrollmentToken:{expiresAt:e=>e.expiresAt.toISOString()},Query:{agents:(e,t,r)=>(st(r),A.listAgents()),agent:(e,{id:t},r)=>(sA(r,t),A.getAgent(t)),agentSelf:(e,t,r)=>{let i=se(r);return A.getAgent(i)},agentCadenceSettings:(e,{agentId:t},r)=>(sA(r,t),A.cadenceSettings(t)),agentJobs:(e,{agentId:t,limit:r},i)=>(sA(i,t),A.listJobs(t,r,!!i.agentId)),agentJob:async(e,{id:t},r)=>sr(r,A,t),agentJobLogs:async(e,{jobId:t,afterSequence:r},i)=>(await sr(i,A,t),A.listLogs(t,r))},Mutation:{createAgentEnrollmentToken:(e,{expiresInMinutes:t},r)=>(st(r),A.createEnrollmentToken(t)),enrollAgent:(e,{input:t},r)=>A.enroll({...t,ipAddress:r.ipAddress}),heartbeatAgent:(e,{input:t},r)=>A.heartbeat(se(r),{...t,ipAddress:r.ipAddress}),createAgentJob:(e,{input:t},r)=>{if(st(r),t.kind===Ay)throw Error("Saved commands must be launched through startCommandRun");return A.createJob(t)},claimAgentJob:(e,{jobId:t},r)=>A.claimJob(se(r),t),claimSigningSecretTransfer:(e,{transferId:t},r)=>A.claimSigningSecretTransfer(se(r),t),appendAgentJobLogs:(e,{jobId:t,logs:r},i)=>A.appendLogs(se(i),t,r),completeAgentJob:(e,t,r)=>A.completeJob(se(r),t.jobId,t.status,t.result,t.error??null),cancelAgentJob:(e,{jobId:t},r)=>(st(r),A.cancelJob(t)),requestAgentCodebaseReconcile:async(e,{agentId:t},r)=>(st(r),await A.requestCodebaseReconcile([t])===1),updateAgentBaseRepoDirectory:(e,{agentId:t,baseRepoDirectory:r},i)=>(st(i),A.updateBaseRepoDirectory(t,r??null)),updateAgentBuildsDirectory:(e,{agentId:t,buildsDirectory:r},i)=>(st(i),A.updateBuildsDirectory(t,r??null)),updateAgentDerivedDataSettings:(e,{agentId:t,input:r},i)=>(st(i),A.updateDerivedDataSettings(t,r.mode,r.path??null)),updateAgentCadenceSettings:(e,{agentId:t,input:r},i)=>(st(i),A.updateCadenceSettings(t,r)),deleteAgent:(e,{agentId:t},r)=>(st(r),A.deleteAgent(t))},Subscription:{agentEvents:{subscribe:(e,{agentId:t},A)=>{if(se(A)!==t)throw Error("An agent may only subscribe to its own events");return aE.iterate(aC(t))}},agentChanged:{subscribe:(e,{agentId:t},A)=>(t?sA(A,t):st(A),aE.iterate(ay,t?e=>e.agentChanged.id===t:void 0))},agentJobChanged:{subscribe:async(e,{jobId:t},r)=>(await sr(r,A,t),aE.iterate(aw(t)))},agentJobLogAdded:{subscribe:async(e,{jobId:t},r)=>(await sr(r,A,t),aE.iterate(aQ(t)))}}},{Query:{jiraSettings:(e,t,A)=>(sp(A),r.getSettings()),jiraAvailableProjects:(e,t,A)=>(sp(A),r.availableProjects()),jiraProjects:(e,t,A)=>(sp(A),r.listProjects()),jiraProjectStatuses:(e,{projectId:t},A)=>(sp(A),r.projectStatuses(t)),jiraTicketBoard:(e,{sourceId:t},A)=>(sp(A),r.ticketBoard(t)),jiraTicket:(e,{issueKey:t},A)=>(sp(A),r.ticket(t)),jiraAssignableUsers:(e,{issueKey:t,query:A},i)=>(sp(i),r.assignableUsers(t,A)),jiraTicketTransitions:(e,{issueKey:t},A)=>(sp(A),r.ticketTransitions(t)),jiraTicketEditFields:(e,{issueKey:t},A)=>(sp(A),r.ticketEditFields(t)),jiraTicketChanges:(e,{issueKey:t,limit:A,offset:i},n)=>(sp(n),r.ticketChanges(t,A,i)),jiraTicketWorklogs:(e,{issueKey:t,limit:A,offset:i},n)=>(sp(n),r.ticketWorklogs(t,A,i)),jiraCacheMetrics:(e,t,A)=>(sp(A),r.cacheMetrics()),jiraApiCalls:(e,{limit:t,offset:A},i)=>(sp(i),r.listApiCalls(t,A)),jiraCachedTickets:(e,{limit:t,offset:A},i)=>(sp(i),r.listCachedTickets(t,A)),jiraCachedTicket:(e,{issueKey:t},A)=>(sp(A),r.cachedTicket(t))},Mutation:{saveJiraSettings:(e,{input:t},A)=>(sp(A),r.saveSettings(t)),testJiraConnection:(e,t,A)=>(sp(A),r.testConnection()),clearJiraCredentials:(e,t,A)=>(sp(A),r.clearCredentials()),addJiraProject:(e,{jiraId:t},A)=>(sp(A),r.addProject(t)),removeJiraProject:(e,{projectId:t},A)=>(sp(A),r.removeProject(t)),createJiraSource:(e,{input:t},A)=>(sp(A),r.createSource(t)),updateJiraSource:(e,{input:t},A)=>(sp(A),r.updateSource(t)),deleteJiraSource:(e,{id:t},A)=>(sp(A),r.deleteSource(t)),updateJiraProjectDisplaySettings:(e,{input:t},A)=>(sp(A),r.updateProjectDisplaySettings(t)),updateJiraProjectBranchNaming:(e,{projectId:t,branchNamingScript:A},i)=>(sp(i),r.updateProjectBranchNaming(t,A)),refreshJiraSource:(e,{sourceId:t},A)=>(sp(A),r.ticketBoard(t,!0)),updateJiraCacheTtl:(e,{ttlMinutes:t},A)=>(sp(A),r.updateCacheTtl(t)),clearJiraCache:(e,t,A)=>(sp(A),r.clearCache()),clearJiraApiCalls:(e,t,A)=>(sp(A),r.clearApiCalls()),refreshJiraCachedTicket:(e,{issueKey:t},A)=>(sp(A),r.refreshCachedTicket(t)),deleteJiraCachedTicket:(e,{issueKey:t},A)=>(sp(A),r.deleteCachedTicket(t)),addJiraComment:(e,{issueKey:t,content:A},i)=>(sp(i),r.addComment(t,A)),assignJiraTicket:(e,{issueKey:t,accountId:A},i)=>(sp(i),r.assignTicket(t,A??null)),transitionJiraTicket:(e,{issueKey:t,transitionId:A},i)=>(sp(i),r.transitionTicket(t,A)),updateJiraTicket:(e,{input:t},A)=>(sp(A),r.updateTicket(t))}},{Query:{githubSettings:(e,t,A)=>(cT(A),i.getSettings()),githubRateLimitSnapshots:(e,t,A)=>(cT(A),i.rateLimitSnapshots()),githubCacheMetrics:(e,t,A)=>(cT(A),i.cacheMetrics()),githubApiCalls:(e,{limit:t,offset:A,apiType:r,requestSource:n,source:a},s)=>(cT(s),i.apiCalls(t,A,{apiType:r,requestSource:n,source:a})),githubCachedEntries:(e,{limit:t,offset:A},r)=>(cT(r),i.cachedEntries(t,A)),githubCachedEntry:(e,{id:t},A)=>(cT(A),i.cachedEntry(t)),githubCacheTtlOverrides:(e,t,A)=>(cT(A),i.cacheTtlOverrides()),githubCacheableGraphqlOperations:(e,t,A)=>(cT(A),i.cacheableGraphqlOperations()),githubAppSettings:(e,t,A)=>(cT(A),i.getAppSettings()),githubWebhooksEnabled:(e,t,A)=>(cT(A),i.webhooksEnabled()),githubWebhookDeliveries:(e,{limit:t,offset:A},r)=>(cT(r),i.webhookDeliveries(t??50,A??0)),githubRepositories:(e,t,A)=>(cT(A),i.listRepositories()),githubAvailableRepositories:(e,{after:t},A)=>(cT(A),i.availableRepositories(t)),githubActionsWorkflowRuns:(e,{source:t,codebaseRepositoryId:A,branch:r,workflowId:n,first:a,after:s},o)=>(cT(o),i.actionsWorkflowRuns(A,a??25,s,r,n,t)),githubActionsWorkflowJobs:(e,{source:t,codebaseRepositoryId:A,workflowRunId:r},n)=>(cT(n),i.actionsWorkflowJobs(A,r,t)),githubActionsWorkflowRunAttempt:(e,{source:t,repositoryId:A,workflowRunId:r,attempt:n},a,s)=>(cT(a),i.actionsWorkflowRunAttempt(A,r,n,cN(s),t)),githubWorktreeWorkflowRuns:(e,{worktreeId:t},A)=>(cT(A),i.worktreeWorkflowRuns(t)),githubRepositoryWorkflows:(e,{source:t,codebaseRepositoryId:A},r)=>(cT(r),i.repositoryWorkflows(A,t)),githubAutoRetryRules:(e,{codebaseRepositoryId:t,workflowRunId:A},r)=>(cT(r),i.autoRetryRules({codebaseRepositoryId:t,workflowRunId:A})),githubPullRequests:(e,{source:t,scope:A,repositoryId:r,state:n,first:a,after:s},o,l)=>(cT(o),i.pullRequests(A,r,{includePipelineJobs:cN(l),state:n??"OPEN",first:a??25,after:s,requestSource:t})),githubPullRequest:(e,{owner:t,name:A,number:r},n)=>(cT(n),i.pullRequest(t,A,r)),githubPullRequestMergeOptions:(e,{source:t,owner:A,name:r,number:n},a)=>(cT(a),i.pullRequestMergeOptions(A,r,n,t)),githubReviewThreads:(e,t,A)=>(cT(A),i.reviewThreads()),githubPipelineStatuses:(e,{keys:t},A)=>(cT(A),i.pipelineStatus.snapshots(t)),githubPipelineRecords:(e,{keys:t},A)=>(cT(A),i.pipelineStatus.records(t))},Mutation:{saveGitHubSettings:(e,{input:t},A)=>(cT(A),i.saveSettings(t)),updateGitHubCacheTtl:(e,{ttlMinutes:t},A)=>(cT(A),i.updateCacheTtl(t)),saveGitHubCacheTtlOverride:(e,{input:t},A)=>(cT(A),i.saveCacheTtlOverride(t.operation,t.ttlSeconds)),deleteGitHubCacheTtlOverride:(e,{operation:t},A)=>(cT(A),i.deleteCacheTtlOverride(t)),clearGitHubCache:(e,t,A)=>(cT(A),i.clearCache()),clearGitHubApiCalls:(e,t,A)=>(cT(A),i.clearApiCalls()),clearGitHubWebhookDeliveries:(e,t,A)=>(cT(A),i.clearWebhookDeliveries()),refreshGitHubCachedEntry:(e,{id:t},A)=>(cT(A),i.refreshCachedEntry(t)),deleteGitHubCachedEntry:(e,{id:t},A)=>(cT(A),i.deleteCachedEntry(t)),saveGitHubAppSettings:(e,{input:t},A)=>(cT(A),i.saveAppSettings(t,cM(A),A.requestOrigin)),testGitHubConnection:(e,t,A)=>(cT(A),i.testConnection()),testGitHubAppConnection:(e,t,A)=>(cT(A),i.testAppConnection(cM(A))),clearGitHubCredentials:(e,t,A)=>(cT(A),i.clearCredentials()),clearGitHubAppCredentials:(e,t,A)=>(cT(A),i.clearAppCredentials(cM(A))),addGitHubRepository:(e,{input:t},A)=>(cT(A),i.addRepository(t)),updateGitHubRepository:(e,{input:t},A)=>(cT(A),i.updateRepository(t)),removeGitHubRepository:(e,{id:t},A)=>(cT(A),i.removeRepository(t)),mergeGitHubPullRequest:async(e,{input:t,source:A},r)=>(cT(r),await i.mergePullRequest(t,A)),createGitHubPullRequest:async(e,{input:t},A)=>{cT(A);let r=await i.createPullRequest(t),{owner:n,name:a}=cu(`${t.owner}/${t.name}`);return await o.attachPullRequestForBranch(`github.com/${n}/${a}`,r.headRefName,r),r},setGitHubPullRequestLabels:(e,{input:t},A)=>(cT(A),i.setPullRequestLabels(t)),retryGitHubPipeline:(e,{repositoryId:t,checkSuiteId:A,source:r},n)=>(cT(n),i.retryPipeline(t,A,r,cM(n))),retryGitHubWorkflowJob:(e,{repositoryId:t,checkSuiteId:A,jobId:r,source:n},a)=>(cT(a),i.retryWorkflowJob(t,A,r,n,cM(a))),cancelGitHubActionsWorkflowRun:(e,{codebaseRepositoryId:t,workflowRunId:A,force:r,source:n},a)=>(cT(a),i.cancelActionsWorkflowRun(t,A,r,n,cM(a))),saveGitHubAutoRetryRule:(e,{input:t},A)=>(cT(A),i.saveAutoRetryRule(t)),setGitHubAutoRetryRuleEnabled:(e,{id:t,enabled:A},r)=>(cT(r),i.setAutoRetryRuleEnabled(t,A)),deleteGitHubAutoRetryRule:(e,{id:t},A)=>(cT(A),i.deleteAutoRetryRule(t)),replyToGitHubReviewThread:(e,{threadId:t,body:A},r)=>(cT(r),i.replyToReviewThread(t,A)),setGitHubReviewThreadResolved:(e,{threadId:t,resolved:A},r)=>(cT(r),i.setReviewThreadResolved(t,A))},Subscription:{githubPipelineStatusChanged:{subscribe:(e,t,A)=>(cT(A),i.pipelineStatus.subscribe())}}},{CcusageCollection:{aggregate:(e,{range:t="ALL"})=>(function(e,t,A=new Date){let r;if(null===t)return e;let i=new Date(A);i.setHours(0,0,0,0),i.setDate(i.getDate()-(t-1));let n=(r=e=>String(e).padStart(2,"0"),`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`),a=e.days.filter(e=>e.period>=n),s=ss();return a.forEach(e=>so(s,e)),{days:a,totals:s}})(e.aggregate,su[t])},CcusageModelUsage:{unattributed:e=>e.unattributed??!1},Query:{ccusageCollection:async(e,{id:t},A)=>(sd(A),await n.initialize(),n.getCollection(t))},Mutation:{collectCcusage:async(e,{requestId:t},A)=>(sd(A),await n.initialize(),n.collect(t))},Subscription:{ccusageCollectionChanged:{subscribe:async(e,{id:t},A)=>(sd(A),await n.initialize(),n.subscribe(t)),resolve:e=>e}}},{DerivedDataDeletionHistory:{deletedAt:e=>e.deletedAt.toISOString()},Query:{derivedDataCollection:(e,{id:t},A)=>(sh(A),c.getCollection(t)),derivedDataDeletionHistory:(e,{first:t,after:A},r)=>(sh(r),c.history(t,A))},Mutation:{refreshDerivedData:(e,{requestId:t},A)=>(sh(A),c.refresh(t)),calculateDerivedDataSizes:(e,{collectionId:t,entryIds:A,requestId:r},i)=>(sh(i),c.calculateSizes(t,A,r)),deleteDerivedDataEntries:(e,{collectionId:t,entryIds:A,requestId:r,overrideProtection:i},n)=>(sh(n),c.deleteEntries(t,A,r,i)),setDerivedDataEntryLocked:(e,{collectionId:t,entryId:A,locked:r},i)=>(sh(i),c.setEntryLocked(t,A,r)),clearDerivedDataDeletionHistory:(e,t,A)=>(sh(A),c.clearHistory())},Subscription:{derivedDataCollectionChanged:{subscribe:(e,{id:t},A)=>(sh(A),c.subscribe(t)),resolve:e=>e}}},{CodebaseOverview:{repositories:e=>Array.isArray(e)?e:e.repositories??[]},CodebaseRepository:{quickActionWorkflows:async e=>(await am()).workflow.findMany({where:{archivedAt:null,quickActionKind:{not:"NONE"},OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:e.id}}}]},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}}},orderBy:[{name:"asc"},{id:"asc"}]}),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},CodebaseSettings:{updatedAt:e=>e.updatedAt.toISOString()},Codebase:{lastCheckedAt:e=>cF(e.lastCheckedAt),lastFetchedAt:e=>cF(e.lastFetchedAt),lastFetchAttemptAt:e=>cF(e.lastFetchAttemptAt),localBranches:e=>{try{let t=JSON.parse(e.localBranchesJson);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}},remoteBranches:e=>{try{let t=JSON.parse(e.remoteBranchesJson);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}},createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),activeJob:e=>e.jobs?.[0]??null},AgentCodebaseRegistration:{canonicalOrigin:e=>e.repository.canonicalOrigin,keepBaseBranchUpToDate:e=>e.repository.keepBaseBranchUpToDate,worktrees:e=>e.worktrees??[],lastFetchedAt:e=>cF(e.lastFetchedAt),lastFetchAttemptAt:e=>cF(e.lastFetchAttemptAt)},Query:{codebaseOverview:async(e,t,A)=>(cU(A),a.overview()),codebaseRepository:(e,{id:t},A)=>(cU(A),a.repositoryDetail(t)),codebase:(e,{id:t},A)=>(cU(A),a.detail(t)),codebaseSettings:(e,t,A)=>(cU(A),a.settings()),agentCodebases:(e,t,A)=>a.agentCodebases(cO(A)),agentCodebaseConfiguration:(e,t,A)=>a.agentConfiguration(cO(A))},Mutation:{browseAgentDirectory:(e,{input:t},A)=>(cU(A),a.browse(t.agentId,t.path??null,t.requestId)),inspectAgentCodebase:(e,{input:t},A)=>(cU(A),a.inspect(t.agentId,t.folder,t.requestId)),confirmCodebase:(e,{input:t},A)=>(cU(A),a.confirm(t)),updateCodebaseRepository:(e,{input:t},A)=>(cU(A),a.updateRepository(t.id,t.name,t.description,t.jiraBranchRegex,t.keepBaseBranchUpToDate,t.skillGroupIds)),updateCodebaseSettings:(e,{input:t},A)=>(cU(A),a.updateSettings(t)),removeCodebase:(e,{id:t},A)=>(cU(A),a.removeCodebase(t)),refreshCodebases:(e,{input:t},A)=>(cU(A),a.runOperation(rM,t.codebaseIds,t.requestId)),fetchCodebases:(e,{input:t},A)=>(cU(A),a.runOperation(rN,t.codebaseIds,t.requestId)),inspectCodebaseGitState:(e,{input:t},A)=>(cU(A),a.inspectGitState(t.codebaseId,t.requestId)),inspectCodebaseStash:(e,{input:t},A)=>(cU(A),a.inspectStash(t.codebaseId,t.stashOid,t.requestId)),runCodebaseGitOperation:(e,{input:t},A)=>(cU(A),a.runGitOperation(t)),reportCodebaseStatuses:(e,{reports:t},A)=>a.report(cO(A),t)},Subscription:{codebaseOverviewChanged:{subscribe:(e,t,A)=>(cU(A),a.subscribe())}}},{Query:{externalMcpServers:(e,t,A)=>(c_(A),s.externalServers()),mcpToolPresets:(e,{kind:t},A)=>(c_(A),s.mcpToolPresets(t)),toolCallAudits:(e,{first:t,toolName:A,resultStatus:r},i)=>(c_(i),s.toolCallAudits({first:t,toolName:A,resultStatus:r}))},Mutation:{clearToolCallAudits:(e,t,A)=>(c_(A),s.clearToolCallAudits()),createExternalMcpServer:(e,{input:t},A)=>(c_(A),s.createExternalServer(t)),updateExternalMcpServer:(e,{id:t,input:A},r)=>(c_(r),s.updateExternalServer(t,A)),deleteExternalMcpServer:(e,{id:t},A)=>(c_(A),s.deleteExternalServer(t)),createMcpToolPreset:(e,{input:t},A)=>(c_(A),s.createMcpToolPreset(t)),updateMcpToolPreset:(e,{id:t,input:A},r)=>(c_(r),s.updateMcpToolPreset(t,A)),deleteMcpToolPreset:(e,{id:t},A)=>(c_(A),s.deleteMcpToolPreset(t))}},{WorktreeLatestBuild:{destination:e=>JSON.parse(e.destinationJson),createdAt:e=>e.createdAt.toISOString()},Worktree:{lastCheckedAt:e=>cH(e.lastCheckedAt),missingAt:e=>cH(e.missingAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),autoSync:e=>e.autoSync?{...e.autoSync,lastSyncedAt:cH(e.autoSync.lastSyncedAt),updatedAt:e.autoSync.updatedAt.toISOString()}:null,autoMerge:e=>e.autoMerge?{...e.autoMerge,updatedAt:e.autoMerge.updatedAt.toISOString()}:null},WorktreeTag:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorktreeSettings:{updatedAt:e=>e.updatedAt.toISOString()},WorktreeMove:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>cH(e.finishedAt)},Query:{worktreeOverview:(e,t,A)=>(cL(A),o.overview()),hiddenWorktrees:(e,t,A)=>(cL(A),o.hidden()),worktreeSettings:(e,t,A)=>(cL(A),o.settings()),previewWorktreeTicketBranch:(e,{input:t},A)=>(cL(A),o.previewTicketBranch(t)),worktreeMove:(e,{id:t},A)=>(cL(A),o.getMove(t)),worktreeAutoSync:(e,{worktreeId:t},A)=>(cL(A),l.autoSync(t)),worktreeAutoMerge:(e,{worktreeId:t},A)=>(cL(A),l.autoMerge(t))},Mutation:{refreshWorktreePullRequest:(e,{id:t},A)=>(cL(A),o.refreshPullRequest(t)),refreshWorktrees:(e,t,A)=>(cL(A),o.requestRefresh()),reportWorktrees:(e,{reports:t},A)=>o.report(cG(A),t),reportWorktreeActivity:(e,{input:t},A)=>o.reportActivity(cG(A),t),inspectWorktree:(e,{id:t,requestId:A},r)=>(cL(r),o.inspect(t,A)),inspectWorktreeDiff:(e,{input:t},A)=>(cL(A),o.inspectDiff(t.worktreeId,{scope:t.scope,path:t.path,previousPath:t.previousPath,commitSha:t.commitSha},t.requestId)),runWorktreeOperation:(e,{input:t},A)=>(cL(A),o.runOperation(t.worktreeId,t.operation,t.requestId)),createWorktree:(e,{input:t},A)=>(cL(A),o.createWorktree(t)),changeWorktreeBranch:(e,{input:t},A)=>(cL(A),o.changeWorktreeBranch(t)),moveWorktree:(e,{input:t},A)=>(cL(A),o.moveWorktree(t)),retryWorktreeMoveWithStash:(e,{id:t},A)=>(cL(A),o.retryWorktreeMoveWithStash(t)),cancelWorktreeMove:(e,{id:t},A)=>(cL(A),o.cancelWorktreeMove(t)),deleteWorktree:(e,{input:t},A)=>(cL(A),o.deleteWorktree(t)),updateWorktreeBaseBranch:(e,{id:t,baseBranch:A},r)=>(cL(r),o.updateBaseBranch(t,A??null)),updateWorktreeHighlight:(e,{id:t,color:A},r)=>(cL(r),o.updateHighlight(t,A??null)),setWorktreeTags:(e,{id:t,tagIds:A},r)=>(cL(r),o.setTags(t,A)),saveWorktreeTag:(e,{input:t},A)=>(cL(A),o.saveTag(t)),deleteWorktreeTag:(e,{id:t},A)=>(cL(A),o.deleteTag(t)),saveWorktreeSettings:(e,{editorVariant:t},A)=>(cL(A),o.saveSettings(t)),purgeHiddenWorktree:(e,{id:t},A)=>(cL(A),o.purge(t)),purgeAllHiddenWorktrees:(e,t,A)=>(cL(A),o.purgeAll()),configureWorktreeAutoSync:(e,{input:t},A)=>(cL(A),l.configureAutoSync(t)),cancelWorktreeAutoSync:(e,{worktreeId:t},A)=>(cL(A),l.cancelAutoSync(t)),retryWorktreeAutoSync:(e,{worktreeId:t},A)=>(cL(A),l.retryAutoSync(t)),configureWorktreeAutoMerge:(e,{input:t},A)=>(cL(A),l.configureAutoMerge(t)),cancelWorktreeAutoMerge:(e,{worktreeId:t},A)=>(cL(A),l.cancelAutoMerge(t)),retryWorktreeAutoMerge:(e,{worktreeId:t},A)=>(cL(A),l.retryAutoMerge(t))},Subscription:{worktreeOverviewChanged:{subscribe:(e,t,A)=>(cL(A),o.subscribe())},worktreeInspectionChanged:{subscribe:(e,{worktreeId:t},A)=>(cL(A),o.subscribeInspection(t))}}},{CodebaseRepository:{skillGroups:e=>u.groupsForRepository(e.id)},Skill:{groups:e=>e.groups?.map(e=>e.group)??[],createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillFile:{contentsBase64:e=>Buffer.from(e.contents).toString("base64"),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillGroup:{skills:e=>e.skills?.map(e=>e.skill)??[],repositories:e=>e.repositories?.map(e=>e.repository)??[],createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillSettings:{updatedAt:e=>e.updatedAt.toISOString()},SkillToolObservation:{checkedAt:e=>e.checkedAt.toISOString()},SkillInstallation:{consumers:e=>{try{return JSON.parse(e.consumersJson)}catch{return[]}},lastSeenAt:e=>e.lastSeenAt.toISOString()},SkillSyncItem:{candidatePackage:e=>{try{return e.candidatePackageJson?JSON.parse(e.candidatePackageJson):null}catch{return null}},createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillSyncRun:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>{let t;return t=e.finishedAt,t?.toISOString()??null}},Query:{skillsOverview:(e,{search:t},A)=>(cP(A),u.overview(t??"")),skill:(e,{id:t},A)=>(cP(A),u.getSkill(t)),skillSyncRun:(e,{id:t},A)=>(cP(A),u.getRun(t))},Mutation:{saveSkill:(e,{input:t},A)=>(cP(A),u.saveSkill(t)),deleteSkill:(e,{id:t},A)=>(cP(A),u.deleteSkill(t)),saveSkillGroup:(e,{input:t},A)=>(cP(A),u.saveGroup(t)),deleteSkillGroup:(e,{id:t},A)=>(cP(A),u.deleteGroup(t)),saveSkillSettings:(e,{input:t},A)=>(cP(A),u.saveSettings(t)),prepareSkillSync:(e,{kind:t,groupId:A},r)=>(cP(r),u.prepareSync(t,A??null)),skipPendingSkillSync:(e,{runId:t},A)=>(cP(A),u.skipPending(t)),resolveSkillSyncItem:(e,{input:t},A)=>{var r;return cP(A),u.resolveItem({...t,package:t.package?ix({...r=t.package,packageHash:r.packageHash||iS(r.files)}):null})},applySkillSync:(e,{runId:t},A)=>(cP(A),u.applyRun(t))},Subscription:{skillsChanged:{subscribe:(e,t,A)=>(cP(A),u.subscribe()),resolve:()=>u.overview()},skillSyncRunChanged:{subscribe:(e,{runId:t},A)=>(cP(A),u.subscribeRun(t)),resolve:(e,{runId:t})=>u.getRun(t)}}},{CodebaseProject:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildConfiguration:{advancedSettings:e=>cV(e.advancedSettingsJson,{}),exportSettings:e=>e.exportSettingsJson?cV(e.exportSettingsJson,null):null,observation:e=>e.source?.observations?.[0]??null,createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildSourceObservation:{schemes:e=>cV(e.schemesJson,[]),configurations:e=>cV(e.configurationsJson,[]),testPlans:e=>cV(e.testPlansJson,[]),lastParseAttemptAt:e=>e.lastParseAttemptAt.toISOString(),lastParsedAt:e=>cq(e.lastParsedAt)},BuildScript:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildArtifact:{metadata:e=>cV(e.metadataJson,{}),createdAt:e=>e.createdAt.toISOString()},BuildReport:{summary:e=>cV(e.summaryJson,{}),data:async e=>cV("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{}),testSummary:e=>"TEST_RESULTS"===e.kind&&"READY"===e.status?cV(e.summaryJson,{}):null,tests:async e=>{if("TEST_RESULTS"!==e.kind)return[];let t=cV("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.tests)?t.tests:[]},coverageSummary:e=>"CODE_COVERAGE"===e.kind&&"READY"===e.status?cV(e.summaryJson,{}):null,coverageFiles:async e=>{if("CODE_COVERAGE"!==e.kind)return[];let t=cV("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.files)?t.files:[]},changedCoverageFiles:async e=>{if("CODE_COVERAGE"!==e.kind)return[];let t=cV("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.changedFiles)?t.changedFiles:[]},build:e=>e.build??d.getBuild(e.buildId),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>cq(e.finishedAt)},BuildDeployment:{destination:e=>cV(e.destinationJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>cq(e.startedAt),finishedAt:e=>cq(e.finishedAt)},BuildExport:{settings:e=>cV(e.settingsSnapshotJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>cq(e.startedAt),finishedAt:e=>cq(e.finishedAt)},Build:{reports:e=>e.reports??d.reportsForBuild(e.id),destination:e=>cV(e.destinationJson,{}),snapshot:e=>cV(e.snapshotJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>cq(e.startedAt),finishedAt:e=>cq(e.finishedAt),updatedAt:e=>e.updatedAt.toISOString(),durationMs:e=>e.startedAt&&e.finishedAt?Math.max(0,e.finishedAt.getTime()-e.startedAt.getTime()):null,outOfDate:cY},BuildLogChunk:{createdAt:e=>e.createdAt instanceof Date?e.createdAt.toISOString():e.createdAt},Query:{iosAppProject:(e,{codebaseId:t},A)=>(cj(A),d.project(t)),buildSigningOptions:(e,{buildId:t},A)=>(cj(A),d.signingOptionsForBuild(t)),buildScripts:(e,t,A)=>(cj(A),d.scripts()),builds:(e,t,A)=>(cj(A),d.builds(t)),build:(e,{id:t},A)=>(cj(A),d.getBuild(t)),buildLogChunks:(e,t,A)=>(cj(A),d.logChunks(t.buildId,t.after,t.first)),worktreeCoverageReports:(e,{worktreeId:t},A)=>(cj(A),d.coverageHistory(t))},Mutation:{createIosAppProject:(e,{codebaseId:t},A)=>(cj(A),d.createProject(t)),saveBuildConfiguration:(e,{input:t},A)=>(cj(A),d.saveConfiguration(t)),deleteBuildConfiguration:(e,{id:t},A)=>(cj(A),d.deleteConfiguration(t)),discoverBuildSources:(e,t,A)=>(cj(A),d.discoverSources(t.worktreeId,t.requestId)),inspectBuildSource:(e,{input:t},A)=>(cj(A),d.inspectSource(t)),reparseBuildConfiguration:(e,t,A)=>(cj(A),d.reparse(t.configurationId,t.worktreeId,t.requestId)),inspectBuildDestinations:(e,{input:t},A)=>(cj(A),d.destinations(t)),inspectBuildRunDestinations:(e,t,A)=>(cj(A),d.destinationsForBuild(t.buildId,t.requestId)),saveBuildScript:(e,{input:t},A)=>(cj(A),d.saveScript(t)),deleteBuildScript:(e,{id:t},A)=>(cj(A),d.deleteScript(t)),setCodebaseBuildScripts:(e,t,A)=>(cj(A),d.setAllowedScripts(t.codebaseId,t.scriptIds)),startBuild:(e,{input:t},A)=>(cj(A),d.startBuild({...t,telemetryRequestOrigin:A.requestOrigin})),rebuildBuild:(e,{id:t,requestId:A},r)=>(cj(r),d.rebuildBuild(t,A,r.requestOrigin)),cancelBuild:(e,{id:t},A)=>(cj(A),d.cancelBuild(t)),deleteBuilds:(e,{ids:t},A)=>(cj(A),d.deleteBuilds(t)),runBuild:(e,{input:t},A)=>(cj(A),d.runBuild(t)),exportBuildArchive:(e,{input:t},A)=>(cj(A),d.exportArchive(t)),parseBuildTestResults:(e,t,A)=>(cj(A),d.generateReport(t.buildId,"TEST_RESULTS",t.requestId)),generateBuildCoverageReport:(e,t,A)=>(cj(A),d.generateReport(t.buildId,"CODE_COVERAGE",t.requestId)),startWorktreeCoverage:(e,{input:t},A)=>(cj(A),d.startWorktreeCoverage({...t,telemetryRequestOrigin:A.requestOrigin})),reportBuildProgress:(e,{input:t},A)=>d.reportProgress(c$(A),t),appendBuildLogChunks:(e,{buildId:t,chunks:A},r)=>d.appendLogChunks(c$(r),t,A)},Subscription:{buildsChanged:{subscribe:(e,t,A)=>(cj(A),aE.iterate(aR))},buildChanged:{subscribe:(e,{id:t},A)=>(cj(A),aE.iterate(aZ(t)))},buildLogChunkAdded:{subscribe:(e,{buildId:t},A)=>(cj(A),aE.iterate(aX(t)))}}},{IosDevice:cz,IosDeviceSummary:cz,IosDeviceEnrollment:{expiresAt:e=>e.expiresAt.toISOString(),downloadedAt:e=>cW(e.downloadedAt),consumedAt:e=>cW(e.consumedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},IosDeviceIpObservation:{observedAt:e=>e.observedAt.toISOString()},Query:{iosDevices:(e,{status:t},A)=>(cK(A),h.devices(t)),iosDevice:(e,{id:t},A)=>(cK(A),h.device(t)),iosDeviceFirmware:(e,{id:t},A)=>(cK(A),h.deviceFirmware(t)),iosDeviceSettings:(e,t,A)=>(cK(A),h.getSettings())},Mutation:{renameIosDevice:(e,{id:t,displayName:A},r)=>(cK(r),h.renameDevice(t,A)),rejectIosDevice:(e,{id:t},A)=>(cK(A),h.rejectDevice(t)),deleteIosDevice:(e,{id:t},A)=>(cK(A),h.deleteDevice(t)),registerIosDevice:(e,{id:t},A)=>(cK(A),h.registerDevice(t)),saveIosProfileSettings:(e,{input:t},A)=>(cK(A),h.saveProfileSettings(t)),regenerateIosProfileSigner:(e,t,A)=>(cK(A),h.regenerateProfileSignerView()),saveAppStoreConnectSettings:(e,{input:t},A)=>(cK(A),h.saveAppStoreConnectSettings(t)),testAppStoreConnectSettings:(e,t,A)=>(cK(A),h.testAppStoreConnectSettings()),clearAppStoreConnectSettings:(e,t,A)=>(cK(A),h.clearAppStoreConnectSettings())},Subscription:{iosDevicesChanged:{subscribe:(e,t,A)=>(cK(A),h.subscribe()),resolve:e=>e}}},{Query:{telemetryTimeline:(e,{input:t},A)=>(cZ(A),p.timeline(t)),telemetryEntries:(e,{ids:t},A)=>(cZ(A),p.entries(t)),telemetryFacets:(e,{view:t},A)=>(cZ(A),p.facets(t)),telemetryFields:(e,{view:t},A)=>(cZ(A),p.fields(t)),telemetrySettings:(e,{requestOrigin:t},A)=>(cZ(A),p.settings(cX(t))),telemetryViewSettings:(e,{view:t},A)=>(cZ(A),p.viewSettings(t)),telemetryColumnPresets:(e,{view:t},A)=>(cZ(A),p.columnPresets(t)),telemetrySavedFilters:(e,{view:t},A)=>(cZ(A),p.savedFilters(t))},Mutation:{saveTelemetrySettings:(e,{input:t,requestOrigin:A},r)=>(cZ(r),p.saveSettings(t,cX(A))),saveTelemetryViewSettings:(e,{input:t},A)=>(cZ(A),p.saveViewSettings(t)),saveTelemetryColumnPreset:(e,{input:t},A)=>(cZ(A),p.saveColumnPreset(t)),deleteTelemetryColumnPreset:(e,{id:t},A)=>(cZ(A),p.deleteColumnPreset(t)),saveTelemetryFilter:(e,{input:t},A)=>(cZ(A),p.saveFilter(t)),deleteTelemetryFilter:(e,{id:t},A)=>(cZ(A),p.deleteFilter(t)),addTelemetrySeparator:(e,{name:t},A)=>(cZ(A),p.addSeparator(t)),updateTelemetryHighlight:(e,{id:t,color:A},r)=>(cZ(r),p.highlight(t,A??null)),clearSelectedTelemetry:(e,{selection:t},A)=>(cZ(A),p.clearSelected(t)),clearTelemetry:(e,{view:t,includeSeparators:A},r)=>(cZ(r),p.clearAll(t,A)),clearTelemetryBeforeLatestSeparator:(e,{view:t},A)=>(cZ(A),p.clearBeforeLatestSeparator(t))},Subscription:{telemetryEntriesChanged:{subscribe:(e,t,A)=>(cZ(A),p.subscribe()),resolve:e=>e},telemetrySettingsChanged:{subscribe:(e,t,A)=>(cZ(A),p.subscribeSettings()),resolve:e=>e}}},{LocalSigningProfile:{provisionedDevices:e=>g.profileDevices(e.deviceUdids)},SigningOperation:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>c1(e.finishedAt)},SigningOperationItem:{createdAt:e=>e.createdAt.toISOString(),finishedAt:e=>c1(e.finishedAt)},Query:{signingAgents:(e,t,A)=>(c0(A),g.agents()),signingProfiles:(e,t,A)=>(c0(A),g.profiles()),signingProfile:(e,{id:t},A)=>(c0(A),g.profile(t)),signingCertificates:(e,t,A)=>(c0(A),g.certificates()),signingOperations:(e,{limit:t},A)=>(c0(A),g.operations(t)),appleDeveloperInventory:(e,t,A)=>(c0(A),g.portalInventory())},Mutation:{refreshSigningAssets:(e,{agentIds:t},A)=>(c0(A),g.refresh(t??void 0)),uploadSigningProfile:(e,t,A)=>(c0(A),g.uploadProfile(t.contentBase64,t.targetAgentIds)),downloadSigningProfile:(e,t,A)=>(c0(A),g.downloadProfile(t.uuid,t.agentId)),syncSigningProfile:(e,t,A)=>(c0(A),g.syncProfile(t.uuid,t.sourceAgentId,t.targetAgentIds)),deleteSigningProfile:(e,t,A)=>(c0(A),g.deleteProfile(t.uuid,t.agentIds)),deleteExpiredSigningProfiles:(e,{agentIds:t},A)=>(c0(A),g.deleteExpiredProfiles(t??void 0)),importSigningIdentity:(e,t,A)=>(c0(A),g.importIdentity(t)),deleteSigningIdentity:(e,t,A)=>(c0(A),g.deleteIdentity(t.sha1,t.agentIds)),createApplePortalProfile:(e,{input:t},A)=>(c0(A),g.createPortalProfile(t)),deleteApplePortalProfile:(e,{id:t},A)=>(c0(A),g.deletePortalProfile(t)),revokeApplePortalCertificate:(e,{id:t},A)=>(c0(A),g.revokePortalCertificate(t))},Subscription:{signingAssetsChanged:{subscribe:(e,t,A)=>(c0(A),g.subscribe()),resolve:()=>!0}}},{ApnsRegistration:{...ug,tokenMasked:e=>e.tokenMasked??(e.token?`${e.token.slice(0,8)}…${e.token.slice(-8)}`:"—"),supportedPushTypes:e=>e.supportedPushTypes??(e.pushTypesJson?JSON.parse(e.pushTypesJson):[]),pushMagicConfigured:e=>!!e.pushMagic,invalidatedAt:e=>up(e.invalidatedAt),lastFailureAt:e=>up(e.lastFailureAt),lastRegisteredAt:e=>e.lastRegisteredAt.toISOString(),lastSentAt:e=>up(e.lastSentAt)},ApnsCertificateCredential:{...ug,expiresAt:e=>up(e.expiresAt),lastTestedAt:e=>up(e.lastTestedAt)},PushNotificationSettings:{updatedAt:e=>e.updatedAt.toISOString(),tokenConfiguredAt:e=>up(e.tokenConfiguredAt),tokenLastUsedAt:e=>up(e.tokenLastUsedAt)},ApnsBroadcastChannel:ug,PushNotificationPreset:{...ug,editor:e=>JSON.parse(e.editorJson)},PushNotificationBatch:{...ug,editor:e=>JSON.parse(e.editorJson),payload:e=>JSON.parse(e.payloadJson),headers:e=>JSON.parse(e.headersJson),startedAt:e=>up(e.startedAt),finishedAt:e=>up(e.finishedAt)},PushNotificationDelivery:{createdAt:e=>e.createdAt.toISOString(),startedAt:e=>up(e.startedAt),finishedAt:e=>up(e.finishedAt),responseTimestamp:e=>up(e.responseTimestamp)},Query:{apnsRegistrations:(e,t,A)=>(uh(A),m.registrations()),pushNotificationSettings:(e,t,A)=>(uh(A),m.settings()),apnsBroadcastChannels:(e,t,A)=>(uh(A),m.channels()),pushNotificationPresets:(e,t,A)=>(uh(A),m.presets()),pushNotificationHistory:(e,{limit:t},A)=>(uh(A),m.history(t)),validatePushNotification:(e,{editor:t},A)=>(uh(A),ur(t))},Mutation:{renameApnsRegistration:(e,t,A)=>(uh(A),m.renameRegistration(t.id,t.displayName)),setApnsRegistrationActive:(e,t,A)=>(uh(A),m.setRegistrationActive(t.id,t.active)),deleteApnsRegistration:(e,{id:t},A)=>(uh(A),m.deleteRegistration(t)),saveApnsTokenSettings:(e,{input:t},A)=>(uh(A),m.saveTokenSettings(t)),clearApnsTokenSettings:(e,t,A)=>(uh(A),m.clearTokenSettings()),addApnsCertificateCredential:(e,{input:t},A)=>(uh(A),m.addCertificateCredential(t)),retestApnsCertificateCredential:(e,{id:t},A)=>(uh(A),m.retestCertificateCredential(t)),deleteApnsCertificateCredential:(e,{id:t},A)=>(uh(A),m.deleteCertificateCredential(t)),createApnsBroadcastChannel:(e,{input:t},A)=>(uh(A),m.createChannel(t)),deleteApnsBroadcastChannel:(e,{id:t},A)=>(uh(A),m.deleteChannel(t)),savePushNotificationPreset:(e,t,A)=>(uh(A),m.savePreset(t.name,t.editor,t.id)),deletePushNotificationPreset:(e,{id:t},A)=>(uh(A),m.deletePreset(t)),savePushNotificationDraft:(e,{editor:t},A)=>(uh(A),m.saveDraft(t)),sendPushNotification:(e,{input:t},A)=>(uh(A),m.send(t)),resendPushNotification:(e,t,A)=>(uh(A),m.resend(t.id,t.requestId)),deletePushNotificationHistory:(e,{id:t},A)=>(uh(A),m.deleteHistory(t)),clearPushNotificationHistory:(e,t,A)=>(uh(A),m.clearHistory())},Subscription:{pushNotificationsChanged:{subscribe:(e,t,A)=>(uh(A),m.subscribe()),resolve:()=>!0}}},{Query:{cacheServerSettings:(e,t,A)=>(cx(A),f.getSettings()),cacheEntries:(e,t,A)=>(cx(A),f.listCacheEntries(t)),cacheEntryDetail:(e,{id:t},A)=>(cx(A),f.getCacheEntryDetail(t)),cacheStorageLocation:(e,{id:t},A)=>(cx(A),f.getStorageLocation(t)),cacheEntryMatch:(e,t,A)=>(cx(A),f.matchCacheEntry(t))},Mutation:{saveCacheServerSettings:(e,{input:t},A)=>(cx(A),f.saveSettings(t)),testCacheServerConnection:(e,t,A)=>(cx(A),f.testConnection()),clearCacheServerSettings:(e,t,A)=>(cx(A),f.clearSettings()),deleteCacheEntry:(e,{id:t},A)=>(cx(A),f.deleteCacheEntry(t)),deleteCacheEntriesByIds:(e,{ids:t},A)=>(cx(A),f.deleteCacheEntriesByIds(t)),deleteCacheEntries:(e,t,A)=>(cx(A),f.deleteCacheEntries(t)),deleteCacheStorageLocation:(e,{id:t},A)=>(cx(A),f.deleteStorageLocation(t))}},{CredentialStorageType:{DATABASE:"database",VAULT:"vault",KEYCHAIN:"keychain",UNKNOWN:"unknown"},Query:{credentialStoreStatus:(e,t,A)=>(um(A),I.status()),credentials:(e,t,A)=>(um(A),I.list())}},{AppNotification:{sidebarDismissedAt:e=>uI(e.sidebarDismissedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},NotificationPreference:{updatedAt:e=>uI(e.updatedAt)},WebPushSubscription:{expirationTime:e=>uI(e.expirationTime),lastSeenAt:e=>e.lastSeenAt.toISOString(),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},Query:{notifications:(e,t,A)=>(uf(A),E.history(t)),sidebarNotifications:(e,{limit:t},A)=>(uf(A),E.sidebar(t??void 0)),notificationPreferences:(e,t,A)=>(uf(A),E.preferences()),webPushState:(e,t,A)=>(uf(A),E.webPushState()),webPushSubscriptions:(e,t,A)=>(uf(A),E.webPushSubscriptions())},Mutation:{saveNotificationPreference:(e,{input:t},A)=>(uf(A),E.savePreference(t)),dismissNotification:(e,{id:t},A)=>(uf(A),E.dismiss(t)),dismissAllSidebarNotifications:(e,t,A)=>(uf(A),E.dismissAll()),deleteNotifications:(e,{selection:t},A)=>(uf(A),E.deleteSelection(t)),deleteAllNotifications:(e,t,A)=>(uf(A),E.deleteAll()),prepareWebPush:async(e,t,A)=>(uf(A),await E.prepareWebPush(),E.webPushState()),registerWebPushSubscription:async(e,{input:t},A)=>(uf(A),await E.registerWebPush(t),E.webPushState()),unregisterWebPushSubscription:(e,{endpoint:t},A)=>(uf(A),E.unregisterWebPush(t)),deleteWebPushSubscription:(e,{id:t},A)=>(uf(A),E.deleteWebPushSubscription(t)),testWebPushSubscription:(e,{id:t},A)=>(uf(A),E.testWebPushSubscription(t))},Subscription:{notificationsChanged:{subscribe:(e,t,A)=>(uf(A),E.subscribe())}}},{Query:{pollingOperations:(e,t,A)=>(uE(A),y.list())},Subscription:{pollingOperationChanged:{subscribe:(e,t,A)=>(uE(A),y.subscribe())}}},{AgentRun:{catalogCost:async e=>{await C.ensureFresh();let t=e.modelUsage?.length?e.modelUsage:[e],A=await C.lookup(t.map(({model:e})=>e)),r=0,i=!1;for(let e of t){let t=C.estimate(A.get(e.model),e);null!==t&&(r+=t,i=!0)}return i?r:null}},RunModelUsage:{catalogCost:async e=>{await C.ensureFresh();let t=await C.lookup([e.model]);return C.estimate(t.get(e.model),e)}},Query:{modelCostCatalog:async(e,t,A)=>(uB(A),await C.ensureFresh(),C.getCatalog()),modelCostEntries:(e,t,A)=>(uB(A),C.listEntries(t))},Mutation:{saveModelCostSettings:(e,{catalogUrl:t},A)=>(uB(A),C.saveSettings(t??null)),refreshModelCosts:(e,t,A)=>(uB(A),C.refresh())}},{AgentRun:{mcpPresetIds:e=>e.mcpPresetIdsJson?JSON.parse(e.mcpPresetIdsJson):[],mcpToolNames:e=>e.mcpToolNamesJson?JSON.parse(e.mcpToolNamesJson):[],archivedAt:e=>uw(e.archivedAt),nativeArchivedAt:e=>uw(e.nativeArchivedAt),startedAt:e=>uw(e.startedAt),finishedAt:e=>uw(e.finishedAt),pricingUpdatedAt:e=>uw(e.pricingUpdatedAt),playedAt:e=>uw(e.playedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},RunAttempt:{startedAt:e=>e.startedAt.toISOString(),finishedAt:e=>uw(e.finishedAt),supersededAt:e=>uw(e.supersededAt)},RunInput:{createdAt:e=>e.createdAt.toISOString()},RunAttachment:{downloadPath:e=>`/api/run-attachments/${encodeURIComponent(e.id)}`,createdAt:e=>e.createdAt.toISOString()},RunEvent:{raw:e=>uQ(e.rawJson),createdAt:e=>e.createdAt.toISOString(),supersededAt:e=>uw(e.supersededAt)},RunToolCall:{input:e=>uQ(e.inputJson),output:e=>uQ(e.outputJson),startedAt:e=>e.startedAt.toISOString(),finishedAt:e=>uw(e.finishedAt),supersededAt:e=>uw(e.supersededAt)},RunAnswerRevision:{answers:e=>JSON.parse(e.answersJson),createdAt:e=>e.createdAt.toISOString(),supersededAt:e=>uw(e.supersededAt)},RunQuestionBatch:{createdAt:e=>e.createdAt.toISOString(),answeredAt:e=>uw(e.answeredAt),supersededAt:e=>uw(e.supersededAt),revisionPreparedAt:e=>uw(e.revisionPreparedAt)},RunCheckpoint:{createdAt:e=>e.createdAt.toISOString()},RunDraft:{mcpPresetIds:e=>e.mcpPresetIdsJson?JSON.parse(e.mcpPresetIdsJson):[],archivedAt:e=>uw(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},RunCommand:{payload:e=>JSON.parse(e.payloadJson),createdAt:e=>e.createdAt.toISOString(),claimedAt:e=>uw(e.claimedAt),finishedAt:e=>uw(e.finishedAt)},RunProviderImportStatus:{catalog:e=>uQ(e.catalogJson),lastStartedAt:e=>uw(e.lastStartedAt),lastCompletedAt:e=>uw(e.lastCompletedAt),updatedAt:e=>e.updatedAt.toISOString()},Query:{agentRuns:(e,t,A)=>(uy(A),w.list(t)),agentRun:(e,{id:t},A)=>(uy(A),w.get(t)),runEvents:(e,t,A)=>(uy(A),w.events(t)),runQuestionBatches:(e,t,A)=>(uy(A),w.questions(t)),runUsage:(e,{runId:t},A)=>(uy(A),w.usage(t)),runNativeSessionFile:(e,{runId:t},A)=>(uy(A),w.nativeSessionFile(t)),runLinkedItems:(e,{runId:t},A)=>(uy(A),w.linkedItems(t)),runDrafts:(e,t,A)=>(uy(A),w.drafts(t)),runDraft:(e,{id:t},A)=>(uy(A),w.draft(t)),runProviderCatalog:(e,t,A)=>(uy(A),w.providerCatalog(t)),runProviderImportStatus:(e,t,A)=>(uy(A),w.providerImportStatus()),pendingRunCommands:(e,t,A)=>w.pendingCommands(uC(A))},Mutation:{createAgentRun:(e,{input:t},A)=>(uy(A),w.create(t)),playPlan:(e,{planId:t,mcpPresetIds:A},r)=>(uy(r),w.playPlan(t,A??[])),createRunFollowUp:(e,{sourceId:t,input:A},r)=>(uy(r),w.followUp(t,A)),saveRunDraft:(e,{input:t},A)=>(uy(A),w.saveDraft(t)),archiveAgentRuns:(e,{ids:t,archived:A},r)=>(uy(r),w.archive(t,A)),deleteAgentRuns:(e,{ids:t},A)=>(uy(A),w.deleteRuns(t)),archiveRunDrafts:(e,{ids:t,archived:A},r)=>(uy(r),w.archiveDrafts(t,A)),deleteRunDrafts:(e,{ids:t},A)=>(uy(A),w.deleteDrafts(t)),pauseAgentRun:(e,{id:t},A)=>(uy(A),w.lifecycle(t,"PAUSE")),continueAgentRun:(e,{id:t},A)=>(uy(A),w.lifecycle(t,"CONTINUE")),cancelAgentRun:(e,{id:t},A)=>(uy(A),w.lifecycle(t,"CANCEL")),steerAgentRun:(e,{id:t,prompt:A,attachmentIds:r},i)=>(uy(i),w.steer(t,A,r)),answerRunQuestion:(e,{batchId:t,answers:A},r)=>(uy(r),w.answerQuestion(t,A)),prepareRunAnswerRevision:(e,{batchId:t},A)=>(uy(A),w.prepareAnswerRevision(t)),reviseRunAnswer:(e,{batchId:t,answers:A,stash:r,rollback:i},n)=>(uy(n),w.reviseAnswer(t,A,!!r,!1!==i)),claimRunCommand:(e,{id:t},A)=>w.claimCommand(uC(A),t),completeRunCommand:(e,{id:t,status:A,error:r},i)=>w.completeCommand(uC(i),t,A,r),beginRunAttempt:(e,{runId:t,nativeId:A},r)=>w.beginAttempt(uC(r),t,A),updateRunAttemptNativeId:(e,t,A)=>w.updateAttemptNativeId(uC(A),t.attemptId,t.nativeId,t.providerVersion),appendRunEvents:(e,t,A)=>w.appendEvents(uC(A),t.runId,t.attemptId??null,t.events),reportRunQuestion:(e,t,A)=>w.reportQuestion(uC(A),t.runId,t.attemptId??null,t.nativeRequestId??null,t.eventSequence??null,t.questions),reportRunUsage:(e,t,A)=>w.reportUsage(uC(A),t.runId,t.attemptId??null,t.input),finishRunAttempt:(e,t,A)=>w.finishAttempt(uC(A),t.attemptId,t.input),reportRunCheckpoint:(e,t,A)=>w.reportCheckpoint(uC(A),t.runId,t.attemptId??null,t.input),reportRunAnswerRevisionPreview:(e,t,A)=>w.reportAnswerRevisionPreview(uC(A),t.batchId,t.rollbackPatch,t.pushedCommitWarning),applyRunAnswerRevision:(e,t,A)=>w.applyAnswerRevision(uC(A),t.batchId,t.revisionId,t.replacementAttemptId),importProviderRuns:(e,{provider:t,runs:A},r)=>w.importRuns(uC(r),t,A),reportRunProviderImportStatus:(e,t,A)=>w.reportProviderImportStatus(uC(A),t.provider,t.status,t.error,t.catalog)},Subscription:{agentRunsChanged:{subscribe:(e,t,A)=>(uy(A),w.subscribeRuns()),resolve:e=>w.get(e.runChanged.id)},agentRunChanged:{subscribe:(e,{runId:t},A)=>(uy(A),w.subscribeRun(t)),resolve:e=>w.get(e.runChanged.id)},runEventAdded:{subscribe:(e,{runId:t},A)=>(uy(A),w.subscribeEvents(t))},runQuestionChanged:{subscribe:(e,{runId:t},A)=>(uy(A),w.subscribeQuestions(t)),resolve:e=>w.questionBatch(e.runQuestionChanged.id)}}},{Workflow:{draftDefinition:e=>JSON.parse(e.draftDefinitionJson),versionCount:e=>e._count?.versions??e.versions?.length??0,runCount:e=>e._count?.runs??0,quickActionRepositories:e=>e.quickActionRepositories?.map(({repository:e})=>e)??[],triggerChoices:(e,{resourceKind:t})=>{if(!e.activeVersion)return[];let A=t?.trim().toUpperCase()??null,r=wV(JSON.parse(e.activeVersion.definitionJson)).triggers.find(e=>e.kind===(A?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE")&&(!A||wE(e.config)===A));return r?wf(r.config):[]},hasPlainTrigger:(e,{resourceKind:t})=>{if(!e.activeVersion)return!1;let A=t?.trim().toUpperCase()??null;return wV(JSON.parse(e.activeVersion.definitionJson)).triggers.some(e=>e.kind===(A?"RESOURCE_MANUAL":"MANUAL")&&(!A||wE(e.config)===A))},archivedAt:e=>w8(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowVersion:{definition:e=>JSON.parse(e.definitionJson),publishedAt:e=>e.publishedAt.toISOString(),createdAt:e=>e.createdAt.toISOString()},WorkflowTrigger:{config:e=>JSON.parse(e.configJson),createdAt:e=>e.createdAt.toISOString()},WorkflowRun:{triggerPayload:e=>JSON.parse(e.triggerPayloadJson),sessionData:e=>JSON.parse(e.sessionDataJson),worktree:e=>Q.runWorktree(e.sessionDataJson),attemptCount:e=>e._count?.attempts??e.attempts?.length??0,eventCount:e=>e._count?.events??e.events?.length??0,queuedAt:e=>e.queuedAt.toISOString(),startedAt:e=>w8(e.startedAt),pausedAt:e=>w8(e.pausedAt),finishedAt:e=>w8(e.finishedAt),archivedAt:e=>w8(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowStepAttempt:{input:e=>w5(e.inputJson),output:e=>w5(e.outputJson),requiredPaths:e=>JSON.parse(e.requiredPathsJson),providedPaths:e=>JSON.parse(e.providedPathsJson),startedAt:e=>w8(e.startedAt),finishedAt:e=>w8(e.finishedAt),supersededAt:e=>w8(e.supersededAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowWait:{predicate:e=>w5(e.predicateJson),result:e=>w5(e.resultJson),resumeAfter:e=>w8(e.resumeAfter),timeoutAt:e=>w8(e.timeoutAt),createdAt:e=>e.createdAt.toISOString(),resolvedAt:e=>w8(e.resolvedAt),updatedAt:e=>e.updatedAt.toISOString()},WorkflowRunEvent:{detail:e=>w5(e.detailJson),createdAt:e=>e.createdAt.toISOString()},WorkflowRunResourceLink:{metadata:e=>w5(e.metadataJson),createdAt:e=>e.createdAt.toISOString()},Query:{workflows:(e,t,A)=>(w4(A),Q.list(t)),workflow:(e,{id:t},A)=>(w4(A),Q.get(t)),workflowVersion:(e,{id:t},A)=>(w4(A),Q.version(t)),workflowCatalog:(e,t,A)=>(w4(A),Q.catalog()),validateWorkflowDraft:(e,{id:t},A)=>(w4(A),Q.validateDraft(t)),workflowRuns:(e,t,A)=>(w4(A),Q.runs(t)),workflowRun:(e,{id:t},A)=>(w4(A),Q.run(t)),workflowRunEvents:(e,t,A)=>(w4(A),Q.runEvents(t.runId,t.afterSequence,t.first)),workflowRunsForResource:(e,t,A)=>(w4(A),Q.runsForResource(t.kind,t.resourceId)),workflowsAcceptingResource:(e,{kind:t},A)=>(w4(A),Q.acceptingResource(t)),workflowQuickActions:(e,t,A)=>(w4(A),Q.quickActions(t)),exportWorkflow:(e,{id:t,versionId:A},r)=>(w4(r),Q.export(t,A)),prepareWorkflowReplay:(e,t,A)=>(w4(A),Q.prepareReplay(t.runId,t.nodeId)),workflowJobSecrets:(e,{jobId:t},A)=>Q.jobSecrets(function(e){if(!e.agentId)throw Error("Agent authentication is required");return e.agentId}(A),t)},Mutation:{createWorkflow:(e,{input:t},A)=>(w4(A),Q.create(t)),saveWorkflowDraft:(e,{input:t},A)=>(w4(A),Q.saveDraft(t)),importWorkflow:(e,{input:t},A)=>(w4(A),Q.import(t)),publishWorkflow:(e,{id:t},A)=>(w4(A),Q.publish(t)),setWorkflowEnabled:(e,t,A)=>(w4(A),Q.setEnabled(t.id,t.enabled)),setWorkflowQuickAction:(e,{input:t},A)=>(w4(A),Q.setQuickAction(t)),archiveWorkflow:(e,t,A)=>(w4(A),Q.archive(t.id,t.archived)),deleteWorkflow:(e,{id:t},A)=>(w4(A),Q.delete(t)),archiveWorkflowRuns:(e,{ids:t,archived:A},r)=>(w4(r),Q.archiveRuns(t,A)),deleteWorkflowRuns:(e,{ids:t},A)=>(w4(A),Q.deleteRuns(t)),triggerWorkflow:(e,{input:t},A)=>(w4(A),Q.trigger(t)),pauseWorkflowRun:(e,{id:t},A)=>(w4(A),Q.lifecycle(t,"PAUSE")),resumeWorkflowRun:(e,{id:t},A)=>(w4(A),Q.lifecycle(t,"RESUME")),cancelWorkflowRun:(e,{id:t},A)=>(w4(A),Q.lifecycle(t,"CANCEL")),repairWorkflowRunData:(e,{id:t,patch:A},r)=>(w4(r),Q.repairRunData(t,A)),answerWorkflowQuestion:(e,{batchId:t,answers:A},r)=>(w4(r),Q.answerQuestion(t,A)),replayWorkflowRun:(e,t,A)=>(w4(A),Q.replay(t.runId,t.nodeId,t))},Subscription:{workflowsChanged:{subscribe:(e,t,A)=>(w4(A),Q.subscribeWorkflows()),resolve:e=>"runs"===e.workflowChanged.id?null:Q.get(e.workflowChanged.id)},workflowRunChanged:{subscribe:(e,{runId:t},A)=>(w4(A),Q.subscribeRun(t)),resolve:e=>Q.run(e.workflowRunChanged.id)},workflowRunEventAdded:{subscribe:(e,{runId:t},A)=>(w4(A),Q.subscribeRunEvents(t))},workflowQuestionChanged:{subscribe:(e,{runId:t},A)=>(w4(A),Q.subscribeRunQuestions(t)),resolve:e=>Q.questionBatch(e.workflowQuestionChanged.id)}}},{CommandDefinition:w9,CommandRun:{snapshot:e=>JSON.parse(e.snapshotJson),queuedAt:e=>e.queuedAt.toISOString(),startedAt:e=>w6(e.startedAt),finishedAt:e=>w6(e.finishedAt),nextRestartAt:e=>w6(e.nextRestartAt),...w9},CommandRunAttempt:{startedAt:e=>w6(e.startedAt),finishedAt:e=>w6(e.finishedAt),...w9},CommandRunOutputChunk:{attemptNumber:e=>e.attemptNumber??e.attempt?.attempt??1,createdAt:e=>"string"==typeof e.createdAt?e.createdAt:e.createdAt.toISOString()},Query:{commandDefinitions:(e,{includeArchived:t},A)=>(w3(A),B.listDefinitions(t)),commandDefinition:(e,{id:t},A)=>(w3(A),B.getDefinition(t)),commandRuns:(e,t,A)=>(w3(A),B.listRuns(t)),commandRun:(e,{id:t},A)=>(w3(A),B.getRun(t)),commandRunOutput:(e,t,A)=>(w3(A),B.listOutput(t.runId,t.afterAttempt,t.afterSequence,t.first)),eligibleCommandsForAgent:(e,{agentId:t},A)=>(w3(A),B.eligibleForAgent(t)),eligibleCommandsForWorktree:(e,{worktreeId:t},A)=>(w3(A),B.eligibleForWorktree(t))},Mutation:{createCommandDefinition:(e,{input:t},A)=>(w3(A),B.createDefinition(t)),updateCommandDefinition:(e,{id:t,input:A},r)=>(w3(r),B.updateDefinition(t,A)),archiveCommandDefinition:(e,t,A)=>(w3(A),B.archiveDefinition(t.id,t.archived)),startCommandRun:(e,{input:t},A)=>(w3(A),B.startRun(t)),startCustomCommandRun:(e,{input:t},A)=>(w3(A),B.startCustomRun(t)),terminateCommandRun:(e,{id:t},A)=>(w3(A),B.terminateRun(t)),rerunCommandRun:(e,{id:t},A)=>(w3(A),B.rerun(t)),archiveCommandRuns:(e,t,A)=>(w3(A),B.archiveRuns(t.ids,t.archived)),deleteCommandRuns:(e,{ids:t},A)=>(w3(A),B.deleteRuns(t)),appendCommandRunOutput:(e,t,A)=>B.appendOutput(function(e){if(!e.agentId)throw Error("Agent authentication is required");return e.agentId}(A),t.jobId,t.attemptId,t.chunks)},Subscription:{commandsChanged:{subscribe:(e,t,A)=>(w3(A),aE.iterate(aU))},commandRunsChanged:{subscribe:(e,t,A)=>(w3(A),aE.iterate(aF))},commandRunChanged:{subscribe:(e,{runId:t},A)=>(w3(A),aE.iterate(aP(t))),resolve:e=>B.getRun(e.commandRunChanged.id)},commandRunOutputAdded:{subscribe:(e,{runId:t},A)=>(w3(A),aE.iterate(aJ(t)))}}},{Query:{diskSpaceSettings:(e,t,A)=>(w7(A),D.settings()),diskSpaceOverview:(e,t,A)=>(w7(A),D.overview()),agentDiskSpace:(e,{agentId:t},A)=>(w7(A),D.agentView(t)),sidebarStatus:(e,t,A)=>(w7(A),k.status()),agentDiskSpaceConfiguration:(e,t,A)=>D.configuration(Qe(A))},Mutation:{updateDiskSpaceSettings:(e,{input:t},A)=>(w7(A),D.updateSettings(t)),setAgentDiskSpaceMonitoring:(e,{agentId:t,enabled:A},r)=>(w7(r),D.setMonitoring(t,A)),setAgentDiskSpacePressureMode:(e,{agentId:t,enabled:A},r)=>(w7(r),D.setManualPressureMode(t,A)),reportAgentDiskSpace:(e,{input:t},A)=>D.report(Qe(A),t).then(()=>!0)},Subscription:{diskSpaceChanged:{subscribe:(e,t,A)=>(w7(A),D.subscribe()),resolve:e=>e.diskSpaceChanged},sidebarStatusChanged:{subscribe:(e,t,A)=>(w7(A),k.subscribe()),resolve:()=>!0}}},{Query:{actionCenter:(e,t,A)=>(Qt(A),S.list(t))},Mutation:{acknowledgeActionCenterItem:(e,{input:t},A)=>(Qt(A),S.acknowledge(t))},Subscription:{actionCenterChanged:{subscribe:(e,t,A)=>(Qt(A),S.subscribe()),resolve:()=>!0}}},{Query:{globalSearch:(e,{query:t,firstPerGroup:A,relatedFirst:r},i)=>{if(i.agentId)throw Error("Agent credentials cannot perform control-plane operations");return b.search(t,A??5,r??3)}}}]),(0,As.buildSubgraphSchema)({typeDefs:QA,resolvers:eb}));let eO="true"===process.env.APOLLO_SANDBOX;this.server=new At({schema:this.schema,introspection:eO,plugins:eO?[(0,Aa.ApolloServerPluginLandingPageLocalDefault)({footer:!1})]:[(0,Aa.ApolloServerPluginLandingPageProductionDefault)({footer:!1})]})}async createContext(e=new Headers){let t;if(await this.initializeServer(),!this.services)throw Error("GraphQL services not initialized");let A=epq(e),r=await this.services.agentControlService.authenticate((t=A.get("authorization"),!t?.startsWith("Bearer ")?null:t.slice(7).trim()||null));return{prismaService:this.services.prismaService,agentControlService:this.services.agentControlService,agentId:r,ipAddress:A.get("x-forwarded-for")?.split(",")[0]?.trim()||null,requestOrigin:function(e,t=process.env){let A=t.PUBLIC_BASE_URL?.trim();if(A)try{let e=new URL(A);if("http:"===e.protocol||"https:"===e.protocol)return{origin:e.origin,secure:"https:"===e.protocol,loopback:epj(e.hostname),source:"env"}}catch{}let r=epY(e,"x-forwarded-proto"),i=epY(e,"x-forwarded-host"),n=epY(e,"host");if(r&&(i??n)){let e=ep$(`${r}:`,i??n,"forwarded");if(e)return e}if(i){let e=ep$("http:",i,"forwarded");if(e)return e}return n?ep$("http:",n,"host"):null}(A)?.origin??null}}async getSchema(){if(await this.initializeServer(),!this.schema)throw Error("GraphQL schema not properly initialized");return this.schema}async getServer(){if(await this.initializeServer(),!this.server)throw Error("GraphQL server not properly initialized");return this.server}},epK=globalThis;async function epW(){if(epK.agentWebSocketServer)return;if(epK.agentWebSocketStartPromise)return epK.agentWebSocketStartPromise;let e=function(e){let t=Number(e?.trim()||"3091");if(!Number.isInteger(t)||t<1||t>65535)throw Error(`Invalid AGENT_WS_PORT: ${e}`);return t}(process.env.AGENT_WS_PORT),t=process.env.AGENT_WS_HOSTNAME??process.env.HOSTNAME??"127.0.0.1",A=(async()=>{let A=await epV.getSchema(),r=new v.default({host:t,port:e,path:"/graphql"}),i=function(e,t,A=12e3){let r=function(e){let{schema:t,context:A,roots:r,validate:i,execute:n,subscribe:a,connectionInitWaitTimeout:s=3e3,onConnect:o,onDisconnect:l,onClose:c,onSubscribe:p,onOperation:g,onNext:S,onError:b,onComplete:v,jsonMessageReviver:R,jsonMessageReplacer:T}=e;return{opened(e,M){let N={connectionInitReceived:!1,acknowledged:!1,subscriptions:{},extra:M};if(e.protocol!==h)return e.close(m.SubprotocolNotAcceptable,"Subprotocol not acceptable"),async(e,t)=>{await c?.(N,e,t)};let x=s>0&&isFinite(s)?setTimeout(()=>{N.connectionInitReceived||e.close(m.ConnectionInitialisationTimeout,"Connection initialisation timeout")},s):null;return e.onMessage(async function(s){var l,c;let h;try{h=I("string"==typeof s?JSON.parse(s,R):s)}catch(t){return e.close(m.BadRequest,"Invalid message received")}switch(h.type){case f.ConnectionInit:{if(N.connectionInitReceived)return e.close(m.TooManyInitialisationRequests,"Too many initialisation requests");N.connectionInitReceived=!0,u(h.payload)&&(N.connectionParams=h.payload);let t=await o?.(N);if(!1===t)return e.close(m.Forbidden,"Forbidden");N.acknowledged=!0,await e.send(E(u(t)?{type:f.ConnectionAck,payload:t}:{type:f.ConnectionAck},T));return}case f.Ping:if(e.onPing)return await e.onPing(h.payload);await e.send(E(h.payload?{type:f.Pong,payload:h.payload}:{type:f.Pong}));return;case f.Pong:return await e.onPong?.(h.payload);case f.Subscribe:{if(!N.acknowledged)return e.close(m.Unauthorized,"Unauthorized");let{id:s,payload:o}=h;if(s in N.subscriptions)return e.close(m.SubscriberAlreadyExists,`Subscriber for ${s} already exists`);N.subscriptions[s]=null;let u=async(t,{id:A,payload:r},i)=>{let{errors:n,...a}=t,s=await S?.(N,A,r,i,t);await e.send(E({id:A,type:f.Next,payload:s||{...a,...n?{errors:n.map(e=>e.toJSON())}:{}}},T))},I=async(t,{id:A,payload:r})=>{let i=await b?.(N,A,r,t);await e.send(E({id:A,type:f.Error,payload:i||t.map(e=>e.toJSON())},T))},R=async(t,{id:A,payload:r})=>{await v?.(N,A,r),t&&await e.send(E({id:A,type:f.Complete},T))};try{let e,m,f=await p?.(N,h.id,h.payload);if(f){if(c=f,Array.isArray(c)&&c.length>0&&c.every(e=>e instanceof Q.GraphQLError))return s in N.subscriptions?await I(f,h):void 0;if(Array.isArray(f))throw Error("Invalid return value from onSubscribe hook, expected an array of GraphQLError objects");e=f}else{if(!t)throw Error("The GraphQL schema is not provided");let A={operationName:o.operationName,document:(0,y.parse)(o.query),variableValues:o.variables};e={...A,schema:"function"==typeof t?await t(N,s,o,A):t};let r=(i??C.validate)(e.schema,e.document);if(r.length>0)return s in N.subscriptions?await I(r,h):void 0}let E=(0,w.getOperationAST)(e.document,e.operationName);if(!E)return s in N.subscriptions?await I([new Q.GraphQLError("Unable to identify operation")],h):void 0;"rootValue"in e||(e.rootValue=r?.[E.operation]),"contextValue"in e||(e.contextValue="function"==typeof A?await A(N,s,o,e):A),m="subscription"===E.operation?await (a??B.subscribe)(e):await (n??D.execute)(e);let S=await g?.(N,s,o,e,m);if(S&&(m=S),l=m,"function"==typeof Object(l)[Symbol.asyncIterator])if(s in N.subscriptions){N.subscriptions[s]=m;try{for await(let t of m)await u(t,h,e)}catch(t){let e=t instanceof Error?t:Error(String(t));await I([k.versionInfo.major>=17?new Q.GraphQLError(e.message,{cause:e}):k.versionInfo.major>=16?new Q.GraphQLError(e.message,{originalError:e}):new Q.GraphQLError(e.message,null,null,null,null,e)],h),delete N.subscriptions[s]}}else d(m)&&m.return(void 0);else s in N.subscriptions&&await u(m,h,e);await R(s in N.subscriptions,h)}finally{delete N.subscriptions[s]}return}case f.Complete:{let e=N.subscriptions[h.id];delete N.subscriptions[h.id],d(e)&&await e.return(void 0);return}default:throw Error(`Unexpected message of type ${h.type} received`)}}),async(e,t)=>{x&&clearTimeout(x);let A={...N.subscriptions};N.subscriptions={},await Promise.all(Object.values(A).filter(d).map(e=>e.return(void 0))),N.acknowledged&&await l?.(N,e,t),await c?.(N,e,t)}}}}(e);return t.options.handleProtocols=S,t.once("error",e=>{console.error("Internal error emitted on the WebSocket server. Please check your implementation.",e);let A=null;for(let e of t.clients)try{e.close(m.InternalServerError,"Internal server error")}catch(e){A=A??e}if(A)throw A}),t.on("connection",(e,t)=>{e.once("error",t=>{console.error("Internal error emitted on a WebSocket socket. Please check your implementation.",t),e.close(m.InternalServerError,"Internal server error")});let i=null,n=A>0&&isFinite(A)?setInterval(()=>{e.readyState===e.OPEN&&(i=setTimeout(()=>{e.terminate()},A),e.once("pong",()=>{i&&(clearTimeout(i),i=null)}),e.ping())},A):null,a=r.opened({protocol:e.protocol,send:t=>new Promise((A,r)=>{if(e.readyState!==e.OPEN)return A();e.send(t,e=>e?r(e):A())}),close:(t,A)=>e.close(t,A),onMessage:t=>e.on("message",async A=>{try{await t(String(A))}catch(t){console.error("Internal error occurred during message handling. Please check your implementation.",t),e.close(m.InternalServerError,"Internal server error")}})},{socket:e,request:t});e.once("close",(e,t)=>{i&&clearTimeout(i),n&&clearInterval(n),a(e,String(t))})}),{dispose:async()=>{for(let e of t.clients)e.close(1001,"Going away");t.removeAllListeners(),await new Promise((e,A)=>{t.close(t=>t?A(t):e())})}}}({schema:A,context:async e=>{let t=epq(e.extra.request.headers),A=e.extra.request.socket.remoteAddress;!t.has("x-forwarded-for")&&A&&t.set("x-forwarded-for",A);let r=function(e){if(!e||"object"!=typeof e)return null;let t=e.authorization??e.Authorization;return"string"==typeof t?t:null}(e.connectionParams);return r&&t.set("authorization",r),epV.createContext(t)}},r);try{await new Promise((e,t)=>{r.once("listening",e),r.once("error",t)})}catch(e){throw await i.dispose(),e}epK.agentWebSocketServer=r,r.on("error",e=>{console.error("Agent GraphQL WebSocket server error:",e)}),console.log(`Agent GraphQL WebSocket listening on ws://${t}:${e}/graphql`)})();epK.agentWebSocketStartPromise=A;try{await A}finally{epK.agentWebSocketStartPromise=void 0}}e.s(["startAgentWebSocketServer",0,epW],544112)}];
6985
7046
 
6986
7047
  //# sourceMappingURL=_1hmzed-._.js.map