@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
@@ -629,7 +629,7 @@ ${n}`,d++}else ey(e,r,a)?p=e.slice(32===e.charCodeAt(r+6)?r+7:r+6,i)||void 0:g(e
629
629
  `,r),a=-1;if(-1!==t&&-1!==i?a=t<i?t:i:-1!==t?a=t===e.length-1?-1:t:-1!==i&&(a=i),-1===a)break;g(e,r,a),r=a+1,13===e.charCodeAt(r-1)&&10===e.charCodeAt(r)&&r++}return e.slice(r)}function g(e,r,i){if(r===i)return void(d>0&&t({id:u,event:p,data:c}),u=void 0,c="",d=0,p=void 0);let n=e.charCodeAt(r);if(eg(e,r,n)){let t=32===e.charCodeAt(r+5)?r+6:r+5,a=e.slice(t,i);c=0===d?a:`${c}
630
630
  ${a}`,d++;return}if(ey(e,r,n)){p=e.slice(32===e.charCodeAt(r+6)?r+7:r+6,i)||void 0;return}if(105===n&&100===e.charCodeAt(r+1)&&58===e.charCodeAt(r+2)){let t=e.slice(32===e.charCodeAt(r+3)?r+4:r+3,i);u=t.includes("\0")?void 0:t;return}if(58===n){a&&a(e.slice(r,i).slice(32===e.charCodeAt(r+1)?2:1));return}let s=e.slice(r,i),o=s.indexOf(":");if(-1===o)return void y(s,"",s);let l=s.slice(0,o),h=32===s.charCodeAt(o+1)?2:1;y(l,s.slice(o+h),s)}function y(e,t,a){switch(e){case"event":p=t||void 0;break;case"data":c=0===d?t:`${c}
631
631
  ${t}`,d++;break;case"id":u=t.includes("\0")?void 0:t;break;case"retry":/^\d+$/.test(t)?i(parseInt(t,10)):r(new eh(`Invalid \`retry\` value: "${t}"`,{type:"invalid-retry",value:t,line:a}));break;default:r(new eh(`Unknown field "${e.length>20?`${e.slice(0,20)}\u2026`:e}"`,{type:"unknown-field",field:e,value:t,line:a}))}}return{feed:function(e){if(h)throw Error("Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.");if(l&&(l=!1,239===e.charCodeAt(0)&&187===e.charCodeAt(1)&&191===e.charCodeAt(2)&&(e=e.slice(3))),0===s.length){let t=f(e);""!==t&&(s.push(t),o=t.length),m();return}if(-1===e.indexOf(`
632
- `)&&-1===e.indexOf("\r")){s.push(e),o+=e.length,m();return}s.push(e);let t=s.join("");s.length=0,o=0;let r=f(t);""!==r&&(s.push(r),o=r.length),m()},reset:function(e={}){if(e.consume&&s.length>0){let e=s.join("");g(e,0,e.length)}l=!0,u=void 0,c="",d=0,p=void 0,s.length=0,o=0,h=!1}}}function eg(e,t,r){return 100===r&&97===e.charCodeAt(t+1)&&116===e.charCodeAt(t+2)&&97===e.charCodeAt(t+3)&&58===e.charCodeAt(t+4)}function ey(e,t,r){return 101===r&&118===e.charCodeAt(t+1)&&101===e.charCodeAt(t+2)&&110===e.charCodeAt(t+3)&&116===e.charCodeAt(t+4)&&58===e.charCodeAt(t+5)}class ew extends Event{constructor(e,t){var r,i;super(e),this.code=null!=(r=null==t?void 0:t.code)?r:void 0,this.message=null!=(i=null==t?void 0:t.message)?i:void 0}[Symbol.for("nodejs.util.inspect.custom")](e,t,r){return r(eb(this),t)}[Symbol.for("Deno.customInspect")](e,t){return e(eb(this),t)}}function eb(e){return{type:e.type,message:e.message,code:e.code,defaultPrevented:e.defaultPrevented,cancelable:e.cancelable,timeStamp:e.timeStamp}}var ev,ek,eS,eE,eI,ex,eA,e_,eC,eR,eT,eD,eN,eO,eP,e$,eU,eB,ej,eL,eq,eM,eF,eK=e=>{throw TypeError(e)},eV=(e,t,r)=>t.has(e)||eK("Cannot "+r),eH=(e,t,r)=>(eV(e,t,"read from private field"),r?r.call(e):t.get(e)),eG=(e,t,r)=>t.has(e)?eK("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),eW=(e,t,r,i)=>(eV(e,t,"write to private field"),t.set(e,r),r),eJ=(e,t,r)=>(eV(e,t,"access private method"),r);class ez extends EventTarget{constructor(e,t){var r,i;super(),eG(this,eO),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,eG(this,ev),eG(this,ek),eG(this,eS),eG(this,eE),eG(this,eI),eG(this,ex),eG(this,eA),eG(this,e_,null),eG(this,eC),eG(this,eR),eG(this,eT,null),eG(this,eD,null),eG(this,eN,null),eG(this,e$,async e=>{var t;eH(this,eR).reset();let{body:r,redirected:i,status:a,headers:n}=e;if(204===a){eJ(this,eO,eq).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(i?eW(this,eS,new URL(e.url)):eW(this,eS,void 0),200!==a)return void eJ(this,eO,eq).call(this,`Non-200 status code (${a})`,a);if(!(n.get("content-type")||"").startsWith("text/event-stream"))return void eJ(this,eO,eq).call(this,'Invalid content type, expected "text/event-stream"',a);if(eH(this,ev)===this.CLOSED)return;eW(this,ev,this.OPEN);let s=new Event("open");if(null==(t=eH(this,eN))||t.call(this,s),this.dispatchEvent(s),"object"!=typeof r||!r||!("getReader"in r)){eJ(this,eO,eq).call(this,"Invalid response body, expected a web ReadableStream",a),this.close();return}let o=new TextDecoder,l=r.getReader(),u=!0;do{let{done:e,value:t}=await l.read();t&&eH(this,eR).feed(o.decode(t,{stream:!e})),e&&(u=!1,eH(this,eR).reset(),eJ(this,eO,eM).call(this))}while(u)}),eG(this,eU,e=>{eW(this,eC,void 0),"AbortError"!==e.name&&"aborted"!==e.type&&eJ(this,eO,eM).call(this,function e(t){return t instanceof Error?"errors"in t&&Array.isArray(t.errors)?t.errors.map(e).join(", "):"cause"in t&&t.cause instanceof Error?`${t}: ${e(t.cause)}`:t.message:`${t}`}(e))}),eG(this,ej,e=>{"string"==typeof e.id&&eW(this,e_,e.id);let t=new MessageEvent(e.event||"message",{data:e.data,origin:eH(this,eS)?eH(this,eS).origin:eH(this,ek).origin,lastEventId:e.id||""});eH(this,eD)&&(!e.event||"message"===e.event)&&eH(this,eD).call(this,t),this.dispatchEvent(t)}),eG(this,eL,e=>{eW(this,ex,e)}),eG(this,eF,()=>{eW(this,eA,void 0),eH(this,ev)===this.CONNECTING&&eJ(this,eO,eP).call(this)});try{if(e instanceof URL)eW(this,ek,e);else if("string"==typeof e)eW(this,ek,new URL(e,function(){let e="document"in globalThis?globalThis.document:void 0;return e&&"object"==typeof e&&"baseURI"in e&&"string"==typeof e.baseURI?e.baseURI:void 0}()));else throw Error("Invalid URL")}catch{throw function(e){let t=globalThis.DOMException;return"function"==typeof t?new t(e,"SyntaxError"):SyntaxError(e)}("An invalid or illegal string was specified")}eW(this,eR,ef({onEvent:eH(this,ej),onRetry:eH(this,eL)})),eW(this,ev,this.CONNECTING),eW(this,ex,3e3),eW(this,eI,null!=(r=null==t?void 0:t.fetch)?r:globalThis.fetch),eW(this,eE,null!=(i=null==t?void 0:t.withCredentials)&&i),eJ(this,eO,eP).call(this)}get readyState(){return eH(this,ev)}get url(){return eH(this,ek).href}get withCredentials(){return eH(this,eE)}get onerror(){return eH(this,eT)}set onerror(e){eW(this,eT,e)}get onmessage(){return eH(this,eD)}set onmessage(e){eW(this,eD,e)}get onopen(){return eH(this,eN)}set onopen(e){eW(this,eN,e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){eH(this,eA)&&clearTimeout(eH(this,eA)),eH(this,ev)!==this.CLOSED&&(eH(this,eC)&&eH(this,eC).abort(),eW(this,ev,this.CLOSED),eW(this,eC,void 0))}}function eZ(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}function eY(e=fetch,t){return t?async(r,i)=>e(r,{...t,...i,headers:i?.headers?{...eZ(t.headers),...eZ(i.headers)}:t.headers}):e}async function eQ(e){return(await t).getRandomValues(new Uint8Array(e))}async function eX(e){let t="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r=256-256%t.length,i="";for(;i.length<e;)for(let a of(await eQ(e-i.length)))a<r&&(i+=t[a%t.length]);return i}async function e0(e){return await eX(e)}async function e1(e){return btoa(String.fromCharCode(...new Uint8Array(await (await t).subtle.digest("SHA-256",new TextEncoder().encode(e))))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function e2(e){if(e||(e=43),e<43||e>128)throw`Expected a length between 43 and 128. Received ${e}.`;let t=await e0(e),r=await e1(t);return{code_verifier:t,code_challenge:r}}ev=new WeakMap,ek=new WeakMap,eS=new WeakMap,eE=new WeakMap,eI=new WeakMap,ex=new WeakMap,eA=new WeakMap,e_=new WeakMap,eC=new WeakMap,eR=new WeakMap,eT=new WeakMap,eD=new WeakMap,eN=new WeakMap,eO=new WeakSet,eP=function(){eW(this,ev,this.CONNECTING),eW(this,eC,new AbortController),eH(this,eI)(eH(this,ek),eJ(this,eO,eB).call(this)).then(eH(this,e$)).catch(eH(this,eU))},e$=new WeakMap,eU=new WeakMap,eB=function(){var e;let t={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...eH(this,e_)?{"Last-Event-ID":eH(this,e_)}:void 0},cache:"no-store",signal:null==(e=eH(this,eC))?void 0:e.signal};return"window"in globalThis&&(t.credentials=this.withCredentials?"include":"same-origin"),t},ej=new WeakMap,eL=new WeakMap,eq=function(e,t){var r;eH(this,ev)!==this.CLOSED&&eW(this,ev,this.CLOSED);let i=new ew("error",{code:t,message:e});null==(r=eH(this,eT))||r.call(this,i),this.dispatchEvent(i)},eM=function(e,t){var r;if(eH(this,ev)===this.CLOSED)return;eW(this,ev,this.CONNECTING);let i=new ew("error",{code:t,message:e});null==(r=eH(this,eT))||r.call(this,i),this.dispatchEvent(i),eW(this,eA,setTimeout(eH(this,eF),eH(this,ex)))},eF=new WeakMap,ez.CONNECTING=0,ez.OPEN=1,ez.CLOSED=2,t=globalThis.crypto?.webcrypto??globalThis.crypto??e.A(70729).then(e=>e.webcrypto);var e3=e.i(907855),e4=e.i(733137),e6=e.i(127438),e8=e.i(334512),e8=e8;let e5=e3.url().superRefine((e,t)=>{if(!URL.canParse(e))return t.addIssue({code:e4.ZodIssueCode.custom,message:"URL must be parseable",fatal:!0}),e6.NEVER}).refine(e=>{let t=new URL(e);return"javascript:"!==t.protocol&&"data:"!==t.protocol&&"vbscript:"!==t.protocol},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),e9=e3.looseObject({resource:e3.string().url(),authorization_servers:e3.array(e5).optional(),jwks_uri:e3.string().url().optional(),scopes_supported:e3.array(e3.string()).optional(),bearer_methods_supported:e3.array(e3.string()).optional(),resource_signing_alg_values_supported:e3.array(e3.string()).optional(),resource_name:e3.string().optional(),resource_documentation:e3.string().optional(),resource_policy_uri:e3.string().url().optional(),resource_tos_uri:e3.string().url().optional(),tls_client_certificate_bound_access_tokens:e3.boolean().optional(),authorization_details_types_supported:e3.array(e3.string()).optional(),dpop_signing_alg_values_supported:e3.array(e3.string()).optional(),dpop_bound_access_tokens_required:e3.boolean().optional()}),e7=e3.looseObject({issuer:e3.string(),authorization_endpoint:e5,token_endpoint:e5,registration_endpoint:e5.optional(),scopes_supported:e3.array(e3.string()).optional(),response_types_supported:e3.array(e3.string()),response_modes_supported:e3.array(e3.string()).optional(),grant_types_supported:e3.array(e3.string()).optional(),token_endpoint_auth_methods_supported:e3.array(e3.string()).optional(),token_endpoint_auth_signing_alg_values_supported:e3.array(e3.string()).optional(),service_documentation:e5.optional(),revocation_endpoint:e5.optional(),revocation_endpoint_auth_methods_supported:e3.array(e3.string()).optional(),revocation_endpoint_auth_signing_alg_values_supported:e3.array(e3.string()).optional(),introspection_endpoint:e3.string().optional(),introspection_endpoint_auth_methods_supported:e3.array(e3.string()).optional(),introspection_endpoint_auth_signing_alg_values_supported:e3.array(e3.string()).optional(),code_challenge_methods_supported:e3.array(e3.string()).optional(),client_id_metadata_document_supported:e3.boolean().optional()}),te=e3.looseObject({issuer:e3.string(),authorization_endpoint:e5,token_endpoint:e5,userinfo_endpoint:e5.optional(),jwks_uri:e5,registration_endpoint:e5.optional(),scopes_supported:e3.array(e3.string()).optional(),response_types_supported:e3.array(e3.string()),response_modes_supported:e3.array(e3.string()).optional(),grant_types_supported:e3.array(e3.string()).optional(),acr_values_supported:e3.array(e3.string()).optional(),subject_types_supported:e3.array(e3.string()),id_token_signing_alg_values_supported:e3.array(e3.string()),id_token_encryption_alg_values_supported:e3.array(e3.string()).optional(),id_token_encryption_enc_values_supported:e3.array(e3.string()).optional(),userinfo_signing_alg_values_supported:e3.array(e3.string()).optional(),userinfo_encryption_alg_values_supported:e3.array(e3.string()).optional(),userinfo_encryption_enc_values_supported:e3.array(e3.string()).optional(),request_object_signing_alg_values_supported:e3.array(e3.string()).optional(),request_object_encryption_alg_values_supported:e3.array(e3.string()).optional(),request_object_encryption_enc_values_supported:e3.array(e3.string()).optional(),token_endpoint_auth_methods_supported:e3.array(e3.string()).optional(),token_endpoint_auth_signing_alg_values_supported:e3.array(e3.string()).optional(),display_values_supported:e3.array(e3.string()).optional(),claim_types_supported:e3.array(e3.string()).optional(),claims_supported:e3.array(e3.string()).optional(),service_documentation:e3.string().optional(),claims_locales_supported:e3.array(e3.string()).optional(),ui_locales_supported:e3.array(e3.string()).optional(),claims_parameter_supported:e3.boolean().optional(),request_parameter_supported:e3.boolean().optional(),request_uri_parameter_supported:e3.boolean().optional(),require_request_uri_registration:e3.boolean().optional(),op_policy_uri:e5.optional(),op_tos_uri:e5.optional(),client_id_metadata_document_supported:e3.boolean().optional()}),tt=e3.object({...te.shape,...e7.pick({code_challenge_methods_supported:!0}).shape}),tr=e3.object({access_token:e3.string(),id_token:e3.string().optional(),token_type:e3.string(),expires_in:e8.number().optional(),scope:e3.string().optional(),refresh_token:e3.string().optional()}).strip(),ti=e3.object({error:e3.string(),error_description:e3.string().optional(),error_uri:e3.string().optional()}),ta=e5.optional().or(e3.literal("").transform(()=>void 0)),tn=e3.object({redirect_uris:e3.array(e5),token_endpoint_auth_method:e3.string().optional(),grant_types:e3.array(e3.string()).optional(),response_types:e3.array(e3.string()).optional(),client_name:e3.string().optional(),client_uri:e5.optional(),logo_uri:ta,scope:e3.string().optional(),contacts:e3.array(e3.string()).optional(),tos_uri:ta,policy_uri:e3.string().optional(),jwks_uri:e5.optional(),jwks:e3.any().optional(),software_id:e3.string().optional(),software_version:e3.string().optional(),software_statement:e3.string().optional()}).strip(),ts=e3.object({client_id:e3.string(),client_secret:e3.string().optional(),client_id_issued_at:e3.number().optional(),client_secret_expires_at:e3.number().optional()}).strip(),to=tn.merge(ts);e3.object({error:e3.string(),error_description:e3.string().optional()}).strip(),e3.object({token:e3.string(),token_type_hint:e3.string().optional()}).strip();class tl extends Error{constructor(e,t){super(e),this.errorUri=t,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}}class tu extends tl{}tu.errorCode="invalid_request";class tc extends tl{}tc.errorCode="invalid_client";class td extends tl{}td.errorCode="invalid_grant";class tp extends tl{}tp.errorCode="unauthorized_client";class th extends tl{}th.errorCode="unsupported_grant_type";class tm extends tl{}tm.errorCode="invalid_scope";class tf extends tl{}tf.errorCode="access_denied";class tg extends tl{}tg.errorCode="server_error";class ty extends tl{}ty.errorCode="temporarily_unavailable";class tw extends tl{}tw.errorCode="unsupported_response_type";class tb extends tl{}tb.errorCode="unsupported_token_type";class tv extends tl{}tv.errorCode="invalid_token";class tk extends tl{}tk.errorCode="method_not_allowed";class tS extends tl{}tS.errorCode="too_many_requests";class tE extends tl{}tE.errorCode="invalid_client_metadata";class tI extends tl{}tI.errorCode="insufficient_scope";class tx extends tl{}tx.errorCode="invalid_target";let tA={[tu.errorCode]:tu,[tc.errorCode]:tc,[td.errorCode]:td,[tp.errorCode]:tp,[th.errorCode]:th,[tm.errorCode]:tm,[tf.errorCode]:tf,[tg.errorCode]:tg,[ty.errorCode]:ty,[tw.errorCode]:tw,[tb.errorCode]:tb,[tv.errorCode]:tv,[tk.errorCode]:tk,[tS.errorCode]:tS,[tE.errorCode]:tE,[tI.errorCode]:tI,[tx.errorCode]:tx};class t_ extends Error{constructor(e){super(e??"Unauthorized")}}let tC="code",tR="S256";async function tT(e){let t=e instanceof Response?e.status:void 0,r=e instanceof Response?await e.text():e;try{let{error:e,error_description:t,error_uri:i}=ti.parse(JSON.parse(r));return new(tA[e]||tg)(t||"",i)}catch(e){return new tg(`${t?`HTTP ${t}: `:""}Invalid OAuth error response: ${e}. Raw body: ${r}`)}}async function tD(e,t){try{return await tN(e,t)}catch(r){if(r instanceof tc||r instanceof tp)return await e.invalidateCredentials?.("all"),await tN(e,t);if(r instanceof td)return await e.invalidateCredentials?.("tokens"),await tN(e,t);throw r}}async function tN(e,{serverUrl:t,authorizationCode:r,scope:i,resourceMetadataUrl:a,fetchFn:n}){let s,o,l,u=await e.discoveryState?.(),c=a;if(!c&&u?.resourceMetadataUrl&&(c=new URL(u.resourceMetadataUrl)),u?.authorizationServerUrl){if(o=u.authorizationServerUrl,s=u.resourceMetadata,l=u.authorizationServerMetadata??await tq(o,{fetchFn:n}),!s)try{s=await tU(t,{resourceMetadataUrl:c},n)}catch{}(l!==u.authorizationServerMetadata||s!==u.resourceMetadata)&&await e.saveDiscoveryState?.({authorizationServerUrl:String(o),resourceMetadataUrl:c?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}else{let r=await tM(t,{resourceMetadataUrl:c,fetchFn:n});o=r.authorizationServerUrl,l=r.authorizationServerMetadata,s=r.resourceMetadata,await e.saveDiscoveryState?.({authorizationServerUrl:String(o),resourceMetadataUrl:c?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}let d=await tO(t,e,s),p=i||s?.scopes_supported?.join(" ")||e.clientMetadata.scope,h=await Promise.resolve(e.clientInformation());if(!h){if(void 0!==r)throw Error("Existing OAuth client information is required when exchanging an authorization code");let t=l?.client_id_metadata_document_supported===!0,i=e.clientMetadataUrl;if(i&&!function(e){if(!e)return!1;try{let t=new URL(e);return"https:"===t.protocol&&"/"!==t.pathname}catch{return!1}}(i))throw new tE(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${i}`);if(t&&i)h={client_id:i},await e.saveClientInformation?.(h);else{if(!e.saveClientInformation)throw Error("OAuth client information must be saveable for dynamic registration");let t=await tG(o,{metadata:l,clientMetadata:e.clientMetadata,scope:p,fetchFn:n});await e.saveClientInformation(t),h=t}}let m=!e.redirectUrl;if(void 0!==r||m){let t=await tH(e,o,{metadata:l,resource:d,authorizationCode:r,fetchFn:n});return await e.saveTokens(t),"AUTHORIZED"}let f=await e.tokens();if(f?.refresh_token)try{let t=await tV(o,{metadata:l,clientInformation:h,refreshToken:f.refresh_token,resource:d,addClientAuthentication:e.addClientAuthentication,fetchFn:n});return await e.saveTokens(t),"AUTHORIZED"}catch(e){if(!(e instanceof tl)||e instanceof tg);else throw e}let g=e.state?await e.state():void 0,{authorizationUrl:y,codeVerifier:w}=await tF(o,{metadata:l,clientInformation:h,state:g,redirectUrl:e.redirectUrl,scope:p,resource:d});return await e.saveCodeVerifier(w),await e.redirectToAuthorization(y),"REDIRECT"}async function tO(e,t,r){let i,a=((i=new URL("string"==typeof e?e:e.href)).hash="",i);if(t.validateResourceURL)return await t.validateResourceURL(a,r?.resource);if(r){if(!function({requestedResource:e,configuredResource:t}){let r=new URL("string"==typeof e?e:e.href),i=new URL("string"==typeof t?t:t.href);if(r.origin!==i.origin||r.pathname.length<i.pathname.length)return!1;let a=r.pathname.endsWith("/")?r.pathname:r.pathname+"/",n=i.pathname.endsWith("/")?i.pathname:i.pathname+"/";return a.startsWith(n)}({requestedResource:a,configuredResource:r.resource}))throw Error(`Protected resource ${r.resource} does not match expected ${a} (or origin)`);return new URL(r.resource)}}function tP(e){let t,r=e.headers.get("WWW-Authenticate");if(!r)return{};let[i,a]=r.split(" ");if("bearer"!==i.toLowerCase()||!a)return{};let n=t$(e,"resource_metadata")||void 0;if(n)try{t=new URL(n)}catch{}return{resourceMetadataUrl:t,scope:t$(e,"scope")||void 0,error:t$(e,"error")||void 0}}function t$(e,t){let r=e.headers.get("WWW-Authenticate");if(!r)return null;let i=RegExp(`${t}=(?:"([^"]+)"|([^\\s,]+))`),a=r.match(i);return a?a[1]||a[2]:null}async function tU(e,t,r=fetch){let i=await tL(e,"oauth-protected-resource",r,{protocolVersion:t?.protocolVersion,metadataUrl:t?.resourceMetadataUrl});if(!i||404===i.status)throw await i?.body?.cancel(),Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!i.ok)throw await i.body?.cancel(),Error(`HTTP ${i.status} trying to load well-known OAuth protected resource metadata.`);return e9.parse(await i.json())}async function tB(e,t,r=fetch){try{return await r(e,{headers:t})}catch(i){if(i instanceof TypeError)if(t)return tB(e,void 0,r);else return;throw i}}async function tj(e,t,r=fetch){return await tB(e,{"MCP-Protocol-Version":t},r)}async function tL(e,t,r,i){var a,n;let s,o=new URL(e),l=i?.protocolVersion??v.LATEST_PROTOCOL_VERSION;i?.metadataUrl?s=new URL(i.metadataUrl):(s=new URL(function(e,t="",r={}){return t.endsWith("/")&&(t=t.slice(0,-1)),r.prependPathname?`${t}/.well-known/${e}`:`/.well-known/${e}${t}`}(t,o.pathname),i?.metadataServerUrl??o)).search=o.search;let u=await tj(s,l,r);if(!i?.metadataUrl&&(a=u,n=o.pathname,!a||a.status>=400&&a.status<500&&"/"!==n)){let e=new URL(`/.well-known/${t}`,o);u=await tj(e,l,r)}return u}async function tq(e,{fetchFn:t=fetch,protocolVersion:r=v.LATEST_PROTOCOL_VERSION}={}){let i={"MCP-Protocol-Version":r,Accept:"application/json"};for(let{url:r,type:a}of function(e){let t="string"==typeof e?new URL(e):e,r="/"!==t.pathname,i=[];if(!r)return i.push({url:new URL("/.well-known/oauth-authorization-server",t.origin),type:"oauth"}),i.push({url:new URL("/.well-known/openid-configuration",t.origin),type:"oidc"}),i;let a=t.pathname;return a.endsWith("/")&&(a=a.slice(0,-1)),i.push({url:new URL(`/.well-known/oauth-authorization-server${a}`,t.origin),type:"oauth"}),i.push({url:new URL(`/.well-known/openid-configuration${a}`,t.origin),type:"oidc"}),i.push({url:new URL(`${a}/.well-known/openid-configuration`,t.origin),type:"oidc"}),i}(e)){let e=await tB(r,i,t);if(e){if(!e.ok){if(await e.body?.cancel(),e.status>=400&&e.status<500)continue;throw Error(`HTTP ${e.status} trying to load ${"oauth"===a?"OAuth":"OpenID provider"} metadata from ${r}`)}if("oauth"===a)return e7.parse(await e.json());return tt.parse(await e.json())}}}async function tM(e,t){let r,i;try{(r=await tU(e,{resourceMetadataUrl:t?.resourceMetadataUrl},t?.fetchFn)).authorization_servers&&r.authorization_servers.length>0&&(i=r.authorization_servers[0])}catch{}i||(i=String(new URL("/",e)));let a=await tq(i,{fetchFn:t?.fetchFn});return{authorizationServerUrl:i,authorizationServerMetadata:a,resourceMetadata:r}}async function tF(e,{metadata:t,clientInformation:r,redirectUrl:i,scope:a,state:n,resource:s}){let o;if(t){if(o=new URL(t.authorization_endpoint),!t.response_types_supported.includes(tC))throw Error(`Incompatible auth server: does not support response type ${tC}`);if(t.code_challenge_methods_supported&&!t.code_challenge_methods_supported.includes(tR))throw Error(`Incompatible auth server: does not support code challenge method ${tR}`)}else o=new URL("/authorize",e);let l=await e2(),u=l.code_verifier,c=l.code_challenge;return o.searchParams.set("response_type",tC),o.searchParams.set("client_id",r.client_id),o.searchParams.set("code_challenge",c),o.searchParams.set("code_challenge_method",tR),o.searchParams.set("redirect_uri",String(i)),n&&o.searchParams.set("state",n),a&&o.searchParams.set("scope",a),a?.includes("offline_access")&&o.searchParams.append("prompt","consent"),s&&o.searchParams.set("resource",s.href),{authorizationUrl:o,codeVerifier:u}}async function tK(e,{metadata:t,tokenRequestParams:r,clientInformation:i,addClientAuthentication:a,resource:n,fetchFn:s}){var o,l;let u,c=t?.token_endpoint?new URL(t.token_endpoint):new URL("/token",e),d=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});n&&r.set("resource",n.href),a?await a(d,r,c,t):i&&function(e,t,r,i){let{client_id:a,client_secret:n}=t;switch(e){case"client_secret_basic":var s,o,l,u,c=a,d=n,p=r;if(!d)throw Error("client_secret_basic authentication requires a client_secret");let h=btoa(`${c}:${d}`);p.set("Authorization",`Basic ${h}`);return;case"client_secret_post":s=a,o=n,(l=i).set("client_id",s),o&&l.set("client_secret",o);return;case"none":u=a,i.set("client_id",u);return;default:throw Error(`Unsupported client authentication method: ${e}`)}}((o=i,l=t?.token_endpoint_auth_methods_supported??[],u=void 0!==o.client_secret,"token_endpoint_auth_method"in o&&o.token_endpoint_auth_method&&["client_secret_basic","client_secret_post","none"].includes(o.token_endpoint_auth_method)&&(0===l.length||l.includes(o.token_endpoint_auth_method))?o.token_endpoint_auth_method:0===l.length?u?"client_secret_basic":"none":u&&l.includes("client_secret_basic")?"client_secret_basic":u&&l.includes("client_secret_post")?"client_secret_post":l.includes("none")?"none":u?"client_secret_post":"none"),i,d,r);let p=await (s??fetch)(c,{method:"POST",headers:d,body:r});if(!p.ok)throw await tT(p);return tr.parse(await p.json())}async function tV(e,{metadata:t,clientInformation:r,refreshToken:i,resource:a,addClientAuthentication:n,fetchFn:s}){let o=new URLSearchParams({grant_type:"refresh_token",refresh_token:i});return{refresh_token:i,...await tK(e,{metadata:t,tokenRequestParams:o,clientInformation:r,addClientAuthentication:n,resource:a,fetchFn:s})}}async function tH(e,t,{metadata:r,resource:i,authorizationCode:a,fetchFn:n}={}){let s,o=e.clientMetadata.scope;if(e.prepareTokenRequest&&(s=await e.prepareTokenRequest(o)),!s){if(!a)throw Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!e.redirectUrl)throw Error("redirectUrl is required for authorization_code flow");s=new URLSearchParams({grant_type:"authorization_code",code:a,code_verifier:await e.codeVerifier(),redirect_uri:String(e.redirectUrl)})}return tK(t,{metadata:r,tokenRequestParams:s,clientInformation:await e.clientInformation()??void 0,addClientAuthentication:e.addClientAuthentication,resource:i,fetchFn:n})}async function tG(e,{metadata:t,clientMetadata:r,scope:i,fetchFn:a}){let n;if(t){if(!t.registration_endpoint)throw Error("Incompatible auth server: does not support dynamic client registration");n=new URL(t.registration_endpoint)}else n=new URL("/register",e);let s=await (a??fetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...r,...void 0!==i?{scope:i}:{}})});if(!s.ok)throw await tT(s);return to.parse(await s.json())}class tW extends Error{constructor(e,t,r){super(`SSE error: ${t}`),this.code=e,this.event=r}}class tJ{constructor(e,t){this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._eventSourceInit=t?.eventSourceInit,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=eY(t?.fetch,t?.requestInit)}async _authThenStart(){let e;if(!this._authProvider)throw new t_("No auth provider");try{e=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if("AUTHORIZED"!==e)throw new t_;return await this._startOrAuth()}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let t=eZ(this._requestInit?.headers);return new Headers({...e,...t})}_startOrAuth(){let e=this?._eventSourceInit?.fetch??this._fetch??fetch;return new Promise((t,r)=>{this._eventSource=new ez(this._url.href,{...this._eventSourceInit,fetch:async(t,r)=>{let i=await this._commonHeaders();i.set("Accept","text/event-stream");let a=await e(t,{...r,headers:i});if(401===a.status&&a.headers.has("www-authenticate")){let{resourceMetadataUrl:e,scope:t}=tP(a);this._resourceMetadataUrl=e,this._scope=t}return a}}),this._abortController=new AbortController,this._eventSource.onerror=e=>{if(401===e.code&&this._authProvider)return void this._authThenStart().then(t,r);let i=new tW(e.code,e.message,e);r(i),this.onerror?.(i)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",e=>{try{if(this._endpoint=new URL(e.data,this._url),this._endpoint.origin!==this._url.origin)throw Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(e){r(e),this.onerror?.(e),this.close();return}t()}),this._eventSource.onmessage=e=>{let t;try{t=v.JSONRPCMessageSchema.parse(JSON.parse(e.data))}catch(e){this.onerror?.(e);return}this.onmessage?.(t)}})}async start(){if(this._eventSource)throw Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth(e){if(!this._authProvider)throw new t_("No auth provider");if("AUTHORIZED"!==await tD(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit}))throw new t_("Failed to authorize")}async close(){this._abortController?.abort(),this._eventSource?.close(),this.onclose?.()}async send(e){if(!this._endpoint)throw Error("Not connected");try{let t=await this._commonHeaders();t.set("content-type","application/json");let r={...this._requestInit,method:"POST",headers:t,body:JSON.stringify(e),signal:this._abortController?.signal},i=await (this._fetch??fetch)(this._endpoint,r);if(!i.ok){let t=await i.text().catch(()=>null);if(401===i.status&&this._authProvider){let{resourceMetadataUrl:t,scope:r}=tP(i);this._resourceMetadataUrl=t,this._scope=r;let a=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit});if("AUTHORIZED"!==a)throw new t_;return this.send(e)}throw Error(`Error POSTing to endpoint (HTTP ${i.status}): ${t}`)}await i.body?.cancel()}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}}class tz extends TransformStream{constructor({onError:e,onRetry:t,onComment:r,maxBufferSize:i}={}){let a;super({start(n){a=ef({onEvent:e=>{n.enqueue(e)},onError(t){"function"==typeof e&&e(t),("terminate"===e||"max-buffer-size-exceeded"===t.type)&&n.error(t)},onRetry:t,onComment:r,maxBufferSize:i})},transform(e){a.feed(e)}})}}let tZ={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2};class tY extends Error{constructor(e,t){super(`Streamable HTTP error: ${t}`),this.code=e}}class tQ{constructor(e,t){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=eY(t?.fetch,t?.requestInit),this._sessionId=t?.sessionId,this._reconnectionOptions=t?.reconnectionOptions??tZ}async _authThenStart(){let e;if(!this._authProvider)throw new t_("No auth provider");try{e=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if("AUTHORIZED"!==e)throw new t_;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._sessionId&&(e["mcp-session-id"]=this._sessionId),this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let t=eZ(this._requestInit?.headers);return new Headers({...e,...t})}async _startOrAuthSse(e){let{resumptionToken:t}=e;try{let r=await this._commonHeaders();r.set("Accept","text/event-stream"),t&&r.set("last-event-id",t);let i=await (this._fetch??fetch)(this._url,{method:"GET",headers:r,signal:this._abortController?.signal});if(!i.ok){if(await i.body?.cancel(),401===i.status&&this._authProvider)return await this._authThenStart();if(405===i.status)return;throw new tY(i.status,`Failed to open SSE stream: ${i.statusText}`)}this._handleSseStream(i.body,e,!0)}catch(e){throw this.onerror?.(e),e}}_getNextReconnectionDelay(e){return void 0!==this._serverRetryMs?this._serverRetryMs:Math.min(this._reconnectionOptions.initialReconnectionDelay*Math.pow(this._reconnectionOptions.reconnectionDelayGrowFactor,e),this._reconnectionOptions.maxReconnectionDelay)}_scheduleReconnection(e,t=0){let r=this._reconnectionOptions.maxRetries;if(t>=r)return void this.onerror?.(Error(`Maximum reconnection attempts (${r}) exceeded.`));let i=this._getNextReconnectionDelay(t);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(r=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${r instanceof Error?r.message:String(r)}`)),this._scheduleReconnection(e,t+1)})},i)}_handleSseStream(e,t,r){let i;if(!e)return;let{onresumptiontoken:a,replayMessageId:n}=t,s=!1,o=!1;(async()=>{try{let t=e.pipeThrough(new TextDecoderStream).pipeThrough(new tz({onRetry:e=>{this._serverRetryMs=e}})).getReader();for(;;){let{value:e,done:r}=await t.read();if(r)break;if((e.id&&(i=e.id,s=!0,a?.(e.id)),e.data)&&(!e.event||"message"===e.event))try{let t=v.JSONRPCMessageSchema.parse(JSON.parse(e.data));(0,v.isJSONRPCResultResponse)(t)&&(o=!0,void 0!==n&&(t.id=n)),this.onmessage?.(t)}catch(e){this.onerror?.(e)}}(r||s)&&!o&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:i,onresumptiontoken:a,replayMessageId:n},0)}catch(e){if(this.onerror?.(Error(`SSE stream disconnected: ${e}`)),(r||s)&&!o&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:i,onresumptiontoken:a,replayMessageId:n},0)}catch(e){this.onerror?.(Error(`Failed to reconnect: ${e instanceof Error?e.message:String(e)}`))}}})()}async start(){if(this._abortController)throw Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new t_("No auth provider");if("AUTHORIZED"!==await tD(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit}))throw new t_("Failed to authorize")}async close(){this._reconnectionTimeout&&(clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=void 0),this._abortController?.abort(),this.onclose?.()}async send(e,t){try{let{resumptionToken:r,onresumptiontoken:i}=t||{};if(r)return void this._startOrAuthSse({resumptionToken:r,replayMessageId:(0,v.isJSONRPCRequest)(e)?e.id:void 0}).catch(e=>this.onerror?.(e));let a=await this._commonHeaders();a.set("content-type","application/json"),a.set("accept","application/json, text/event-stream");let n={...this._requestInit,method:"POST",headers:a,body:JSON.stringify(e),signal:this._abortController?.signal},s=await (this._fetch??fetch)(this._url,n),o=s.headers.get("mcp-session-id");if(o&&(this._sessionId=o),!s.ok){let t=await s.text().catch(()=>null);if(401===s.status&&this._authProvider){if(this._hasCompletedAuthFlow)throw new tY(401,"Server returned 401 after successful authentication");let{resourceMetadataUrl:t,scope:r}=tP(s);this._resourceMetadataUrl=t,this._scope=r;let i=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit});if("AUTHORIZED"!==i)throw new t_;return this._hasCompletedAuthFlow=!0,this.send(e)}if(403===s.status&&this._authProvider){let{resourceMetadataUrl:t,scope:r,error:i}=tP(s);if("insufficient_scope"===i){let i=s.headers.get("WWW-Authenticate");if(this._lastUpscopingHeader===i)throw new tY(403,"Server returned 403 after trying upscoping");r&&(this._scope=r),t&&(this._resourceMetadataUrl=t),this._lastUpscopingHeader=i??void 0;let a=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch});if("AUTHORIZED"!==a)throw new t_;return this.send(e)}}throw new tY(s.status,`Error POSTing to endpoint: ${t}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,202===s.status){await s.body?.cancel(),(0,v.isInitializedNotification)(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(e=>this.onerror?.(e));return}let l=(Array.isArray(e)?e:[e]).filter(e=>"method"in e&&"id"in e&&void 0!==e.id).length>0,u=s.headers.get("content-type");if(l)if(u?.includes("text/event-stream"))this._handleSseStream(s.body,{onresumptiontoken:i},!1);else if(u?.includes("application/json")){let e=await s.json();for(let t of Array.isArray(e)?e.map(e=>v.JSONRPCMessageSchema.parse(e)):[v.JSONRPCMessageSchema.parse(e)])this.onmessage?.(t)}else throw await s.body?.cancel(),new tY(-1,`Unexpected content type: ${u}`);else await s.body?.cancel()}catch(e){throw this.onerror?.(e),e}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),t={...this._requestInit,method:"DELETE",headers:e,signal:this._abortController?.signal},r=await (this._fetch??fetch)(this._url,t);if(await r.body?.cancel(),!r.ok&&405!==r.status)throw new tY(r.status,`Failed to terminate session: ${r.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,t){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:t?.onresumptiontoken})}}var tX=e.i(243783);e.i(582482);var t0=e.i(91022),t1=e.i(318905),t2=e.i(971619);function t3(e){if("string"!=typeof e)return e??null;try{return JSON.parse(e)}catch{return null}}function t4(e){return e instanceof Date?e.toISOString():"string"==typeof e&&Number.isFinite(Date.parse(e))?new Date(e).toISOString():null}function t6(e){let t;return{id:String(e.id),name:String(e.name),hostname:String(e.hostname),version:String(e.version),osVersion:String(e.osVersion),architecture:String(e.architecture),cpuModel:"string"==typeof e.cpuModel?e.cpuModel:null,memoryTotalBytes:"number"==typeof e.memoryTotalBytes?e.memoryTotalBytes:null,memoryFreeBytes:"number"==typeof e.memoryFreeBytes?e.memoryFreeBytes:null,diskTotalBytes:"number"==typeof e.diskTotalBytes?e.diskTotalBytes:null,diskFreeBytes:"number"==typeof e.diskFreeBytes?e.diskFreeBytes:null,capabilities:Array.isArray(e.capabilities)?e.capabilities:t3(e.capabilitiesJson)??[],baseRepoDirectory:"string"==typeof e.baseRepoDirectory?e.baseRepoDirectory:null,derivedDataLocationMode:String(e.derivedDataLocationMode),derivedDataPath:"string"==typeof e.derivedDataPath?e.derivedDataPath:null,buildsDirectory:"string"==typeof e.buildsDirectory?e.buildsDirectory:null,defaultBuildsDirectory:"string"==typeof e.defaultBuildsDirectory?e.defaultBuildsDirectory:null,effectiveBuildsDirectory:(0,t2.effectiveBuildsDirectory)(e),connectionStatus:null!==(t=t4(e.lastSeenAt))&&Date.now()-Date.parse(t)<=(0,a.agentOnlineWindowMs)(e)&&!e.disconnectedAt?"ONLINE":"OFFLINE",ipAddress:"string"==typeof e.ipAddress?e.ipAddress:null,lastSeenAt:t4(e.lastSeenAt),disconnectedAt:t4(e.disconnectedAt),createdAt:t4(e.createdAt),updatedAt:t4(e.updatedAt)}}function t8(e){let t=t6(e);return{agentId:t.id,baseRepoDirectory:t.baseRepoDirectory,buildsDirectory:t.buildsDirectory,defaultBuildsDirectory:t.defaultBuildsDirectory,effectiveBuildsDirectory:t.effectiveBuildsDirectory,derivedDataLocationMode:t.derivedDataLocationMode,derivedDataPath:t.derivedDataPath,updatedAt:t.updatedAt}}function t5(e){return{id:String(e.id),agentId:String(e.agentId),worktreeId:"string"==typeof e.worktreeId?e.worktreeId:null,codebaseId:"string"==typeof e.codebaseId?e.codebaseId:null,kind:String(e.kind),payload:t3(e.payload??e.payloadJson),status:String(e.status),idempotencyKey:String(e.idempotencyKey),result:t3(e.result??e.resultJson),error:"string"==typeof e.error?e.error:null,timeoutSeconds:Number(e.timeoutSeconds),createdAt:t4(e.createdAt),startedAt:t4(e.startedAt),finishedAt:t4(e.finishedAt),updatedAt:t4(e.updatedAt)}}function t9(e){return JSON.parse(JSON.stringify(e))}function t7(e){let t=e._count,r=e.versions;return{id:String(e.id),name:String(e.name),description:String(e.description??""),enabled:!0===e.enabled,overlapPolicy:String(e.overlapPolicy),maxConcurrentRuns:Number(e.maxConcurrentRuns),activeVersionId:"string"==typeof e.activeVersionId?e.activeVersionId:null,draftSchemaVersion:Number(e.draftSchemaVersion),quickActionKind:String(e.quickActionKind??"NONE"),archivedAt:t4(e.archivedAt),versionCount:t?.versions??r?.length??0,runCount:t?.runs??0,createdAt:t4(e.createdAt),updatedAt:t4(e.updatedAt)}}function re(e){return{id:String(e.id),workflowId:String(e.workflowId),version:Number(e.version),name:String(e.name),description:String(e.description??""),schemaVersion:Number(e.schemaVersion),contentHash:String(e.contentHash),definition:t3(e.definitionJson),publishedAt:t4(e.publishedAt)}}function rt(e){let t=e._count;return{id:String(e.id),displayNumber:Number(e.displayNumber),workflowId:String(e.workflowId),versionId:String(e.versionId),parentRunId:"string"==typeof e.parentRunId?e.parentRunId:null,triggerKind:String(e.triggerKind),triggerSubjectKey:String(e.triggerSubjectKey??""),triggerPayload:t3(e.triggerPayloadJson),status:String(e.status),phase:String(e.phase),generation:Number(e.generation),sessionData:t3(e.sessionDataJson),blockedReason:"string"==typeof e.blockedReason?e.blockedReason:null,error:"string"==typeof e.error?e.error:null,attemptCount:t?.attempts??e.attempts?.length??0,eventCount:t?.events??e.events?.length??0,queuedAt:t4(e.queuedAt),startedAt:t4(e.startedAt),pausedAt:t4(e.pausedAt),finishedAt:t4(e.finishedAt),updatedAt:t4(e.updatedAt)}}let rr=e3.object({}),ri=e3.object({id:e3.string(),name:e3.string(),hostname:e3.string(),version:e3.string(),osVersion:e3.string(),architecture:e3.string(),cpuModel:e3.string().nullable(),memoryTotalBytes:e3.number().nullable(),memoryFreeBytes:e3.number().nullable(),diskTotalBytes:e3.number().nullable(),diskFreeBytes:e3.number().nullable(),capabilities:e3.array(e3.string()),baseRepoDirectory:e3.string().nullable(),derivedDataLocationMode:e3.enum(["DEFAULT","ABSOLUTE","RELATIVE"]),derivedDataPath:e3.string().nullable(),buildsDirectory:e3.string().nullable(),defaultBuildsDirectory:e3.string().nullable(),effectiveBuildsDirectory:e3.string().nullable(),connectionStatus:e3.enum(["ONLINE","OFFLINE"]),ipAddress:e3.string().nullable(),lastSeenAt:e3.string().nullable(),disconnectedAt:e3.string().nullable(),createdAt:e3.string(),updatedAt:e3.string()}),ra=e3.object({agentId:e3.string(),baseRepoDirectory:e3.string().nullable(),buildsDirectory:e3.string().nullable(),defaultBuildsDirectory:e3.string().nullable(),effectiveBuildsDirectory:e3.string().nullable(),derivedDataLocationMode:e3.enum(["DEFAULT","ABSOLUTE","RELATIVE"]),derivedDataPath:e3.string().nullable(),updatedAt:e3.string()}),rn=e3.object({id:e3.string(),agentId:e3.string(),worktreeId:e3.string().nullable(),codebaseId:e3.string().nullable(),kind:e3.string(),payload:e3.unknown(),status:e3.string(),idempotencyKey:e3.string(),result:e3.unknown().nullable(),error:e3.string().nullable(),timeoutSeconds:e3.number().int(),createdAt:e3.string(),startedAt:e3.string().nullable(),finishedAt:e3.string().nullable(),updatedAt:e3.string()}),rs=e3.object({id:e3.string(),jobId:e3.string(),sequence:e3.number().int(),stream:e3.string(),message:e3.string(),createdAt:e3.string()}),ro=e3.object({agentId:e3.string().min(1)});var rl=e.i(190714);async function ru(e,t,r=[]){if(!e||"object"!=typeof e)throw Error(`Service for ${t} is unavailable`);let i=e[t];if("function"!=typeof i)throw Error(`Service operation ${t} is unavailable`);return Reflect.apply(i,e,r)}let rc=/^(?:credentialValue|enrollmentToken|privateKey|privateKeyPem|p12|p12Base64|apnsToken|token|nativeTranscript|nativeSession|nativeSessionFile|rawJson|secretHash|tokenHash)$/i;function rd(e){return e instanceof Date?e.toISOString():Array.isArray(e)?e.map(rd):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).filter(([e])=>!rc.test(e)).map(([e,t])=>[e,rd(t)])):e}function rp(e){let t=e.resultKey??"result";return i4({name:e.name,title:e.title,description:e.description,inputSchema:e.inputSchema,outputSchema:e3.object({[t]:e3.unknown()}),annotations:e.annotations??iQ,handler:async r=>{let i=await ru(e.service,e.method,e.arguments?.(r)??[r]);return{[t]:e.mapResult?e.mapResult(i):rd(i??null)}}})}let rh=e3.object({});var rm=e.i(184015);let rf=e3.object({}),rg=e3.object({settings:e3.object({refreshIntervalSeconds:e3.number().int(),fetchIntervalSeconds:e3.number().int(),defaultJiraBranchRegex:e3.string(),updatedAt:e3.string()})}),ry=e3.object({agentId:e3.string().min(1),path:e3.string().nullable().default(null),requestId:e3.string().min(1)}),rw=e3.object({listing:e3.unknown()}),rb=e3.object({agentId:e3.string().min(1),folder:e3.string().min(1),requestId:e3.string().min(1)}),rv=e3.object({inspection:e3.unknown()}),rk=e3.object({codebaseIds:e3.array(e3.string().min(1)).min(1).max(500),requestId:e3.string().min(1)}),rS=e3.object({jobs:e3.array(e3.unknown()),skipped:e3.array(e3.object({codebaseId:e3.string(),reason:e3.string()}))}),rE=e3.object({codebaseId:e3.string().min(1),requestId:e3.string().min(1)}),rI=e3.object({state:e3.unknown()}),rx=e3.object({codebaseId:e3.string().min(1),stashOid:e3.string().regex(/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/i),requestId:e3.string().min(1)}),rA=e3.object({diff:e3.unknown()});e.i(282790);var r_=e.i(474170);function rC(e){return e instanceof Date?e.toISOString():null}function rR(e){if("string"!=typeof e)return e??null;try{return JSON.parse(e)}catch{return null}}let rT=e3.object({id:e3.string(),clientRegistrationId:e3.string(),tokenMasked:e3.string(),topic:e3.string(),environment:e3.string(),supportedPushTypes:e3.array(e3.string()),displayName:e3.string(),deviceModel:e3.string().nullable(),osVersion:e3.string().nullable(),appVersion:e3.string().nullable(),appBuild:e3.string().nullable(),locale:e3.string().nullable(),pushMagicConfigured:e3.boolean(),status:e3.string(),invalidatedAt:e3.string().nullable(),lastFailureReason:e3.string().nullable(),lastFailureAt:e3.string().nullable(),lastRegisteredAt:e3.string(),lastSentAt:e3.string().nullable(),createdAt:e3.string(),updatedAt:e3.string()}),rD=e3.object({id:e3.string(),name:e3.string(),topic:e3.string(),environment:e3.string(),fingerprint:e3.string(),expiresAt:e3.string().nullable(),lastTestedAt:e3.string().nullable(),lastError:e3.string().nullable(),createdAt:e3.string(),updatedAt:e3.string()}),rN=e3.object({tokenConfigured:e3.boolean(),tokenTeamId:e3.string().nullable(),tokenKeyId:e3.string().nullable(),tokenPrivateKeyFingerprint:e3.string().nullable(),tokenConfiguredAt:e3.string().nullable(),tokenLastUsedAt:e3.string().nullable(),tokenLastError:e3.string().nullable(),certificates:e3.array(rD),updatedAt:e3.string()}),rO=e3.object({id:e3.string(),channelId:e3.string(),bundleId:e3.string(),environment:e3.string(),storagePolicy:e3.string(),createdAt:e3.string(),updatedAt:e3.string()}),rP=e3.object({id:e3.string(),name:e3.string(),editor:e3.unknown(),createdAt:e3.string(),updatedAt:e3.string()}),r$=e3.object({id:e3.string(),registrationId:e3.string().nullable(),topic:e3.string(),environment:e3.string(),status:e3.string(),apnsId:e3.string().nullable(),responseCode:e3.number().int().nullable(),reason:e3.string().nullable(),responseTimestamp:e3.string().nullable(),attempts:e3.number().int(),durationMs:e3.number().int().nullable(),createdAt:e3.string(),startedAt:e3.string().nullable(),finishedAt:e3.string().nullable()}),rU=e3.object({id:e3.string(),requestId:e3.string(),status:e3.string(),editor:e3.unknown(),payload:e3.unknown(),headers:e3.unknown(),targetMode:e3.string(),channelId:e3.string().nullable(),recipientCount:e3.number().int(),successCount:e3.number().int(),failureCount:e3.number().int(),error:e3.string().nullable(),createdAt:e3.string(),startedAt:e3.string().nullable(),finishedAt:e3.string().nullable(),updatedAt:e3.string(),deliveries:e3.array(r$)});function rB(e){return{id:String(e.id),requestId:String(e.requestId),status:String(e.status),editor:rR(e.editor??e.editorJson),payload:rR(e.payload??e.payloadJson),headers:rR(e.headers??e.headersJson),targetMode:String(e.targetMode),channelId:"string"==typeof e.channelId?e.channelId:null,recipientCount:Number(e.recipientCount),successCount:Number(e.successCount),failureCount:Number(e.failureCount),error:"string"==typeof e.error?e.error:null,createdAt:rC(e.createdAt),startedAt:rC(e.startedAt),finishedAt:rC(e.finishedAt),updatedAt:rC(e.updatedAt),deliveries:Array.isArray(e.deliveries)?e.deliveries.map(e=>({id:String(e.id),registrationId:"string"==typeof e.registrationId?e.registrationId:null,topic:String(e.topic),environment:String(e.environment),status:String(e.status),apnsId:"string"==typeof e.apnsId?e.apnsId:null,responseCode:"number"==typeof e.responseCode?e.responseCode:null,reason:"string"==typeof e.reason?e.reason:null,responseTimestamp:rC(e.responseTimestamp),attempts:Number(e.attempts),durationMs:"number"==typeof e.durationMs?e.durationMs:null,createdAt:rC(e.createdAt),startedAt:rC(e.startedAt),finishedAt:rC(e.finishedAt)})):[]}}let rj={requestId:e3.string().min(1),editor:e3.record(e3.string(),e3.unknown())},rL={requestId:e3.string().min(1),presetId:e3.string().min(1)},rq=e3.discriminatedUnion("targetMode",[e3.object({...rj,targetMode:e3.literal("DEVICES"),registrationIds:e3.array(e3.string().min(1)).min(1)}),e3.object({...rj,targetMode:e3.literal("ALL")}),e3.object({...rj,targetMode:e3.literal("BROADCAST"),channelId:e3.string().min(1)}),e3.object({...rj,targetMode:e3.literal("DIRECT"),directToken:e3.string().min(1),directTokenEncoding:e3.enum(["HEX","BASE64"]).default("HEX"),directEnvironment:e3.enum(["SANDBOX","PRODUCTION"]).default("SANDBOX")})]),rM=e3.discriminatedUnion("targetMode",[e3.object({...rL,targetMode:e3.literal("DEVICES"),registrationIds:e3.array(e3.string().min(1)).min(1)}),e3.object({...rL,targetMode:e3.literal("ALL")}),e3.object({...rL,targetMode:e3.literal("BROADCAST"),channelId:e3.string().min(1)}),e3.object({...rL,targetMode:e3.literal("DIRECT"),directToken:e3.string().min(1),directTokenEncoding:e3.enum(["HEX","BASE64"]).default("HEX"),directEnvironment:e3.enum(["SANDBOX","PRODUCTION"]).default("SANDBOX")})]);function rF(e){return{requestId:e.requestId,editor:e.editor,targetMode:e.targetMode,registrationIds:"DEVICES"===e.targetMode?e.registrationIds:void 0,channelId:"BROADCAST"===e.targetMode?e.channelId:void 0,directToken:"DIRECT"===e.targetMode?e.directToken:void 0,directTokenEncoding:"DIRECT"===e.targetMode?e.directTokenEncoding:void 0,directEnvironment:"DIRECT"===e.targetMode?e.directEnvironment:void 0}}let rK=e3.object({id:e3.string(),entryType:e3.enum(["CONSOLE","ANALYTICS","SEPARATOR"]),clientTime:e3.string(),receivedAt:e3.string(),deviceIp:e3.string().nullable(),message:e3.string().nullable(),level:e3.string().nullable(),category:e3.string().nullable(),eventName:e3.string().nullable(),eventKind:e3.string().nullable(),screenName:e3.string().nullable(),buildId:e3.string().nullable(),sessionId:e3.string().nullable(),attributes:e3.record(e3.string(),e3.unknown()),defaultParameters:e3.record(e3.string(),e3.unknown()),additionalParameters:e3.record(e3.string(),e3.unknown()),highlightColor:e3.string().nullable(),separatorKind:e3.string().nullable(),separatorName:e3.string().nullable()}),rV=e3.object({items:e3.array(rK),nextCursor:e3.string().nullable(),matchingCount:e3.number().int().nonnegative(),totalCount:e3.number().int().nonnegative()}),rH=rV.extend({separator:rK.nullable()}),rG=e3.object({first:e3.number().int().min(1).max(500).default(200),after:e3.string().nullable().default(null)}),rW=e3.object({field:e3.string().min(1),operator:e3.enum(["CONTAINS","DOES_NOT_CONTAIN","IS","IS_NOT","MATCHES_GLOB","MATCHES_REGEX","NO_REGEX_MATCH","IS_EMPTY","IS_NOT_EMPTY"]),value:e3.string().nullable().optional(),caseSensitive:e3.boolean().default(!1),sources:e3.array(e3.enum(["CONSOLE","ANALYTICS"])).optional()}),rJ=e3.object({mode:e3.enum(["ALL","ANY"]),conditions:e3.array(rW).min(1).max(100)}),rz={search:e3.string().min(1).nullable().optional(),searchMode:e3.enum(["TEXT","GLOB","REGEX"]).default("TEXT"),caseSensitive:e3.boolean().default(!1),quickFilters:e3.record(e3.string(),e3.array(e3.string()).max(500)).nullable().optional(),advancedFilter:rJ.nullable().optional()},rZ=rG.extend(rz).refine(r0,{message:"At least one telemetry search filter is required"}),rY=rG.extend(rz),rQ=e3.object({scope:e3.literal("MATCHING"),...rz}).refine(r0,{message:"At least one telemetry search filter is required"}),rX=e3.union([e3.object({scope:e3.literal("IDS"),ids:e3.array(e3.string().min(1)).min(1).max(1e3)}),rQ,e3.object({scope:e3.literal("ALL"),includeSeparators:e3.boolean().default(!1)}),e3.object({scope:e3.literal("BEFORE_LATEST_SEPARATOR"),includeSeparators:e3.boolean().default(!1)})]);function r0(e){return!!(e.search||Object.values(e.quickFilters??{}).some(e=>e.length)||e.advancedFilter?.conditions.length)}function r1(e,t){return{view:e,first:t.first,after:t.after,search:t.search,searchMode:t.searchMode??"TEXT",caseSensitive:t.caseSensitive??!1,quickFilters:t.quickFilters,advancedFilter:t.advancedFilter}}function r2(e,t,r){return[i4({name:`get_${r.plural}`,title:`Get ${r.label}`,description:`Fetch the newest ${r.label.toLocaleLowerCase()} with cursor pagination.`,inputSchema:rG,outputSchema:rV,annotations:iQ,handler:r=>e.timeline(r1(t,r))}),i4({name:`get_${r.singular}`,title:`Get ${r.singular.replaceAll("_"," ")}`,description:`Fetch one ${r.label.toLocaleLowerCase()} item by ID.`,inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({entry:rK.nullable()}),annotations:iQ,handler:async({id:r})=>({entry:await e.entry(r,t)})}),i4({name:`search_${r.plural}`,title:`Search ${r.label}`,description:"Search with text, glob, regex, quick facets, or advanced filter conditions.",inputSchema:rZ,outputSchema:rV,annotations:iQ,handler:r=>e.timeline(r1(t,r))}),i4({name:`get_${r.plural}_since_latest_separator`,title:`Get ${r.label} since latest separator`,description:"Fetch entries strictly newer than the latest global telemetry separator.",inputSchema:rY,outputSchema:rH,annotations:iQ,handler:r=>e.timelineSinceLatestSeparator(r1(t,r))}),i4({name:`get_${r.singular}_search_metadata`,title:`Get ${r.label} search metadata`,description:"Get searchable fields and current facet values.",inputSchema:e3.object({}),outputSchema:e3.object({fields:e3.array(e3.string()),facets:e3.record(e3.string(),e3.array(e3.string()))}),annotations:iQ,handler:async()=>{let[r,i]=await Promise.all([e.fields(t),e.facets(t)]);return{fields:r,facets:i}}}),i4({name:`clear_${r.plural}`,title:`Clear ${r.label}`,description:"Clear explicit IDs, matching entries, all entries, or entries before the latest separator.",inputSchema:rX,outputSchema:e3.object({view:e3.enum(["CONSOLE","ANALYTICS","UNIFIED"]),scope:e3.enum(["IDS","MATCHING","ALL","BEFORE_LATEST_SEPARATOR"]),deletedCount:e3.number().int().nonnegative()}),annotations:i0,handler:async r=>{let i="MATCHING"===r.scope?r:null,a=await e.clearScoped({view:t,scope:r.scope,ids:"IDS"===r.scope?r.ids:null,includeSeparators:("ALL"===r.scope||"BEFORE_LATEST_SEPARATOR"===r.scope)&&r.includeSeparators,query:i?{search:i.search,searchMode:i.searchMode,caseSensitive:i.caseSensitive,quickFilters:i.quickFilters,advancedFilter:i.advancedFilter}:null});return{view:t,scope:r.scope,deletedCount:a}}})]}var r3=e.i(885418),r4=e.i(586589),r6=e.i(661983),r8=e.i(504173),r5=e.i(518733);function r9(e,t,r=null){let i=[...t.volumes].filter(e=>e.monitored).sort((e,t)=>e.freeBytes-t.freeBytes||e.id.localeCompare(t.id))[0],n=i&&i.totalBytes>0?i.freeBytes/i.totalBytes*100:null,s=null===t.agent.disconnectedAt&&null!==t.agent.lastSeenAt&&Date.now()-t.agent.lastSeenAt.getTime()<=(0,a.agentOnlineWindowMs)(t.agent);return{agent:{id:t.agent.id,name:t.agent.name,hostname:t.agent.hostname,connected:s,diskTotalBytes:t.agent.diskTotalBytes,diskFreeBytes:t.agent.diskFreeBytes},codebase:{agentId:t.agent.id},disk:{enabled:t.enabled,status:t.status,pressureMode:t.pressureMode,manualPressureMode:t.manualPressureMode,automaticPressureMode:t.automaticPressureMode,lastReportedAt:t.lastReportedAt,lastError:t.lastError,warnings:[...t.warnings],monitoredVolumeId:i?.id??null,freeBytes:i?.freeBytes??null,totalBytes:i?.totalBytes??null,freeGiB:i?i.freeBytes/0x40000000:null,freePercent:n,usedPercent:null===n?null:100-n,effectiveThresholdBytes:i?.effectiveThresholdBytes??null,normalThresholdGiB:e.normalThresholdGiB,pressureThresholdGiB:e.pressureThresholdGiB,pollIntervalSeconds:e.pollIntervalSeconds,staleAfterSeconds:e.staleAfterSeconds,changeReason:r,volumes:t.volumes.map(e=>({...e}))}}}function r7(e){return{enabled:e.disk.enabled,status:e.disk.status,pressureMode:e.disk.pressureMode,lastError:e.disk.lastError,warnings:e.disk.warnings,monitoredVolumeId:e.disk.monitoredVolumeId}}function ie(e){try{let t=JSON.parse(e??"[]");return Array.isArray(t)?t:[]}catch{return[]}}function it(e,t){if(!Number.isFinite(e)||e<=0||e>1e6)throw Error(`${t} must be a positive finite GiB value`);return e}class ir{agentControl;constructor(e){this.agentControl=e,this.agentControl.registerCompletionObserver(e=>this.observeCompletion(e))}async settings(){let e=await (0,tX.getPrismaClient)(),t=await e.diskSpaceSettings.upsert({where:{id:"default"},create:{id:"default",normalThresholdGiB:r4.DEFAULT_DISK_SPACE_THRESHOLD_GIB,pressureThresholdGiB:r4.DEFAULT_DISK_SPACE_PRESSURE_THRESHOLD_GIB},update:{}});return{normalThresholdGiB:t.normalThresholdGiB,pressureThresholdGiB:t.pressureThresholdGiB,pollIntervalSeconds:r4.DISK_SPACE_POLL_INTERVAL_SECONDS,staleAfterSeconds:r4.DISK_SPACE_STALE_AFTER_SECONDS}}async updateSettings(e){let t=it(e.normalThresholdGiB,"Normal disk threshold"),r=it(e.pressureThresholdGiB,"Pressure disk threshold");if(r>=t)throw Error("Pressure disk threshold must be lower than the normal threshold");let i=await (0,tX.getPrismaClient)();for(let{agentId:e}of(await i.diskSpaceSettings.upsert({where:{id:"default"},create:{id:"default",normalThresholdGiB:t,pressureThresholdGiB:r},update:{normalThresholdGiB:t,pressureThresholdGiB:r}}),this.publish("settings","SETTINGS_UPDATED"),await i.agentDiskSpaceState.findMany({where:{enabled:!0},select:{agentId:!0}})))this.reconcileAgent(e);return this.settings()}async configuration(e){let t=await (0,tX.getPrismaClient)(),[r,i,a]=await Promise.all([t.agent.findUnique({where:{id:e}}),t.agentDiskSpaceState.findUnique({where:{agentId:e}}),t.worktree.findMany({where:{missingAt:null,codebase:{agentId:e}},select:{id:!0,folder:!0}})]);if(!r)throw Error("Agent not found");return{enabled:i?.enabled??!0,pollIntervalSeconds:r4.DISK_SPACE_POLL_INTERVAL_SECONDS,baseRepoDirectory:r.baseRepoDirectory,derivedDataLocationMode:r.derivedDataLocationMode,derivedDataPath:r.derivedDataPath,worktrees:a}}async report(e,t){let r=(0,r4.parseAgentDiskSpaceReport)(t),i=await (0,tX.getPrismaClient)(),[a,n]=await Promise.all([i.agent.findUnique({where:{id:e}}),i.worktree.findMany({where:{missingAt:null,codebase:{agentId:e}},include:{codebase:{select:{agentId:!0}}}})]);if(!a)throw Error("Agent not found");let s=new Date(r.observedAt),o=r.entries.map(e=>{let t=e.workspacePath?n.filter(t=>{var r,i;let a;return r=t.folder,i=e.workspacePath,i===(a="/"===r?r:r.replace(/\/+$/,""))||i.startsWith(`${a}/`)}).sort((e,t)=>t.folder.length-e.folder.length)[0]:null;return{...e,worktreeId:t?.id??null,worktreePath:t?(0,r8.worktreeDisplayPath)(t.folder,a.baseRepoDirectory):null}});await i.agentDiskSpaceState.upsert({where:{agentId:e},create:{agentId:e,volumesJson:JSON.stringify(r.volumes),entriesJson:JSON.stringify(o),warningsJson:JSON.stringify(r.warnings),lastReportedAt:s,lastError:null},update:{volumesJson:JSON.stringify(r.volumes),entriesJson:JSON.stringify(o),warningsJson:JSON.stringify(r.warnings),lastReportedAt:s,lastError:null}}),this.publish(e,"REPORT_RECEIVED"),this.reconcileAgent(e)}async overview(){let e=await (0,tX.getPrismaClient)();await e.derivedDataCleanupLease.deleteMany({where:{jobId:null,expiresAt:{lte:new Date}}});let[t,r,i]=await Promise.all([this.settings(),e.agent.findMany({orderBy:{name:"asc"},include:{diskSpaceState:!0}}),e.derivedDataCleanupLease.findMany({select:{agentId:!0}})]),a=new Set(i.map(e=>e.agentId));return{settings:t,agents:r.map(e=>{let r=e.diskSpaceState,i=r?.enabled??!0,n=r?.manualPressureMode??!1,s=r?.automaticPressureMode??!1,o=r?.lastReportedAt??null,l=!o||Date.now()-o.getTime()>1e3*t.staleAfterSeconds,u=(n||s?t.pressureThresholdGiB:t.normalThresholdGiB)*0x40000000,c=ie(r?.volumesJson),d=(0,r4.monitoredDiskSpaceVolumes)(c),p=d.some(e=>e.freeBytes<=0x40000000*t.pressureThresholdGiB),h=d.some(e=>e.freeBytes<u),m="IDLE";i?l?m="STALE":r?.lastError||0===c.length&&ie(r?.warningsJson).length>0?m="ERROR":p?m="CRITICAL":a.has(e.id)?m="DELETING":n||s?m="PRESSURE":h&&(m="CLEANUP_REQUIRED"):m="DISABLED";let f=c.map(r=>{let o=(0,r4.isMonitoredDiskSpaceVolume)(r);return{...r,effectiveThresholdBytes:u,monitored:o,status:i?l?"STALE":o?r.freeBytes<=0x40000000*t.pressureThresholdGiB?"CRITICAL":a.has(e.id)&&r.freeBytes<u?"DELETING":n||s?"PRESSURE":r.freeBytes<u?"CLEANUP_REQUIRED":"IDLE":"IDLE":"DISABLED"}}),g=ie(r?.warningsJson);return i&&!l&&c.length>0&&0===d.length&&g.push("No Derived Data volume was reported, so free space is not being monitored for this agent"),{agent:e,enabled:i,status:m,pressureMode:n?"MANUAL":s?"AUTOMATIC":"NORMAL",manualPressureMode:n,automaticPressureMode:s,lastReportedAt:o?.toISOString()??null,lastError:r?.lastError??null,warnings:g,volumes:f}})}}async agentView(e){let t=(await this.overview()).agents.find(t=>t.agent.id===e);if(!t)throw Error("Agent not found");return t}async snapshot(e,t=null){let r=await this.overview(),i=r.agents.find(t=>t.agent.id===e);if(!i)throw Error("Agent not found");return r9(r.settings,i,t)}async requestRefresh(e){let t=await this.agentView(e);if(!t.enabled)throw Error("Disk-space monitoring is disabled for this agent");let r=new Date().toISOString();return this.agentControl.requestDiskSpacePoll(e),{agentId:e,requestedAt:r,previousReportedAt:t.lastReportedAt}}async setMonitoring(e,t){let r=await (0,tX.getPrismaClient)();return await r.agent.findUniqueOrThrow({where:{id:e}}),await r.agentDiskSpaceState.upsert({where:{agentId:e},create:{agentId:e,enabled:t},update:{enabled:t,...!t?{manualPressureMode:!1,automaticPressureMode:!1}:{}}}),t||await r.derivedDataCleanupLease.deleteMany({where:{agentId:e,jobId:null}}),this.publish(e,"MONITORING_CHANGED"),this.agentControl.requestAgentConfigurationRefresh(e),this.agentView(e)}async setManualPressureMode(e,t){let r=await (0,tX.getPrismaClient)();return await r.agent.findUniqueOrThrow({where:{id:e}}),await r.agentDiskSpaceState.upsert({where:{agentId:e},create:{agentId:e,manualPressureMode:t},update:{manualPressureMode:t}}),this.publish(e,"MANUAL_PRESSURE_CHANGED"),this.reconcileAgent(e),this.agentView(e)}async assertWorktreeCanStart(e){let t=await (0,tX.getPrismaClient)();await t.derivedDataCleanupLease.deleteMany({where:{worktreeId:e,jobId:null,expiresAt:{lte:new Date}}});let[r,i]=await Promise.all([t.derivedDataCleanupLease.findUnique({where:{worktreeId:e}}),t.worktree.findUnique({where:{id:e},select:{codebase:{select:{agentId:!0}}}})]);if(r)throw Error("Derived Data cleanup is in progress for this worktree; try again shortly");i&&await this.assertAgentCanStart(i.codebase.agentId)}async assertAgentCanStart(e){let t=await (0,tX.getPrismaClient)(),[r,i]=await Promise.all([this.settings(),t.agentDiskSpaceState.findUnique({where:{agentId:e}})]);if(!(!i?.enabled||!i.lastReportedAt||i.lastError||Date.now()-i.lastReportedAt.getTime()>1e3*r.staleAfterSeconds)&&(0,r4.monitoredDiskSpaceVolumes)(ie(i.volumesJson)).some(e=>e.freeBytes<=0x40000000*r.pressureThresholdGiB))throw Error(`New builds, plans, and sessions are paused because this agent has ${r.pressureThresholdGiB} GiB or less free disk space`)}subscribe(){return r6.agentEventBus.iterate(r6.DISK_SPACE_CHANGED_TOPIC)}async reconcileAgent(e){let t=await (0,tX.getPrismaClient)();await t.derivedDataCleanupLease.deleteMany({where:{jobId:null,expiresAt:{lte:new Date}}});let[r,i,n,s,o]=await Promise.all([this.settings(),t.agentDiskSpaceState.findUnique({where:{agentId:e}}),t.derivedDataLock.findMany({where:{agentId:e},select:{path:!0}}),t.derivedDataCleanupLease.findFirst({where:{agentId:e}}),t.agent.findUnique({where:{id:e}})]);if(!i?.enabled||!i.lastReportedAt||i.lastError||s||!o||null!==o.disconnectedAt||null===o.lastSeenAt||Date.now()-o.lastSeenAt.getTime()>(0,a.agentOnlineWindowMs)(o)||!ie(o.capabilitiesJson).includes(r3.BUILD_DATA_DELETE_JOB_KIND)||Date.now()-i.lastReportedAt.getTime()>1e3*r.staleAfterSeconds)return;let l=ie(i.entriesJson),u=ie(i.volumesJson),c=(0,r4.monitoredDiskSpaceVolumes)(u),d=l.map(e=>e.worktreeId).filter(e=>!!e),p=await (0,r5.executingResourcesByWorktree)(d),h=new Set(n.map(e=>e.path));l=l.filter(e=>"PROJECT"===e.kind&&!!e.worktreeId&&!h.has(e.path)&&(p.get(e.worktreeId)?.length??0)===0);let m=0x40000000*r.normalThresholdGiB,f=0x40000000*r.pressureThresholdGiB,g=c.filter(e=>e.freeBytes<m),w=e=>e.capacityId??e.id,b=new Map(u.map(e=>[e.id,w(e)])),v=e=>l.some(t=>b.get(t.volumeId)===w(e)),k=i.automaticPressureMode;if(!i.manualPressureMode){let r=g.length>0&&g.some(e=>!v(e)),a=k&&(0===g.length||g.every(e=>v(e)));r?k=!0:a&&(k=!1),k!==i.automaticPressureMode&&(await t.agentDiskSpaceState.update({where:{agentId:e},data:{automaticPressureMode:k}}),this.publish(e,"AUTOMATIC_PRESSURE_CHANGED"))}let S=i.manualPressureMode||k?f:m,E=new Set(c.filter(e=>e.freeBytes<S).map(w)),I=l.filter(e=>E.has(b.get(e.volumeId)??"")).sort((e,t)=>new Date(e.modifiedAt).getTime()-new Date(t.modifiedAt).getTime()||e.path.localeCompare(t.path))[0];if(!I?.worktreeId)return;try{await t.derivedDataCleanupLease.create({data:{worktreeId:I.worktreeId,agentId:e,path:I.path,source:"AUTOMATIC",expiresAt:new Date(Date.now()+6e5)}})}catch{return}let x=await (0,r5.executingResourcesByWorktree)([I.worktreeId]);if((x.get(I.worktreeId)?.length??0)>0){await t.derivedDataCleanupLease.deleteMany({where:{worktreeId:I.worktreeId,jobId:null}}),this.publish(e,"CLEANUP_SKIPPED");return}try{var A;let r=await this.agentControl.createJob({agentId:e,kind:r3.BUILD_DATA_DELETE_JOB_KIND,payload:{source:"AUTOMATIC",targets:[{path:I.path,rootPath:I.rootPath,name:I.name,kind:I.kind,worktreeId:I.worktreeId,worktreePath:I.worktreePath}]},idempotencyKey:`disk-space:auto:${(A=I.path,(0,y.createHash)("sha256").update(e).update("\0").update(A).digest("base64url"))}:${(0,y.randomUUID)()}`,timeoutSeconds:600,visibility:"SYSTEM"});await t.derivedDataCleanupLease.update({where:{worktreeId:I.worktreeId},data:{jobId:r.id}}),this.publish(e,"CLEANUP_STARTED")}catch(r){await t.derivedDataCleanupLease.deleteMany({where:{worktreeId:I.worktreeId}}),await t.agentDiskSpaceState.update({where:{agentId:e},data:{lastError:r instanceof Error?r.message:String(r)}}),this.publish(e,"CLEANUP_START_FAILED")}}async observeCompletion(e){if(e.kind!==r3.BUILD_DATA_DELETE_JOB_KIND)return;let t="USER",r=[];try{let i=(0,r3.buildDataDeletePayload)(JSON.parse(e.payloadJson));t=i.source,r=i.targets}catch{}let i=await (0,tX.getPrismaClient)(),a=await i.derivedDataCleanupLease.deleteMany({where:{jobId:e.id}});if("AUTOMATIC"===t&&"SUCCEEDED"!==e.status&&await i.agentDiskSpaceState.updateMany({where:{agentId:e.agentId},data:{lastError:e.error||"Automatic Derived Data cleanup failed"}}),a.count||"AUTOMATIC"===t){let i=[];if("AUTOMATIC"===t&&e.resultJson)try{i=(0,r3.parseBuildDataDeleteResult)(JSON.parse(e.resultJson)).deleted}catch{}this.publish(e.agentId,"CLEANUP_COMPLETED","AUTOMATIC"===t?{jobId:e.id,status:e.status,source:t,error:e.error,targets:r,deleted:i}:null),this.agentControl.requestDiskSpacePoll(e.agentId)}}publish(e,t,r=null){r6.agentEventBus.publish(r6.DISK_SPACE_CHANGED_TOPIC,{diskSpaceChanged:e,diskSpaceChange:{id:(0,y.randomUUID)(),reason:t,cleanup:r}}),r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0}),r6.agentEventBus.publish(r6.POLLING_CHANGED_TOPIC,{pollingOperationChanged:`agent-disk-space:${e}`})}}let ii=e3.object({normalThresholdGiB:e3.number(),pressureThresholdGiB:e3.number(),pollIntervalSeconds:e3.number().int(),staleAfterSeconds:e3.number().int()}),ia=e3.object({id:e3.string(),name:e3.string(),hostname:e3.string(),connected:e3.boolean(),diskTotalBytes:e3.number().nullable(),diskFreeBytes:e3.number().nullable()}),is=e3.enum(["DISABLED","STALE","IDLE","CLEANUP_REQUIRED","DELETING","PRESSURE","CRITICAL","ERROR"]),io=e3.object({id:e3.string(),capacityId:e3.string(),totalBytes:e3.number(),freeBytes:e3.number(),roles:e3.array(e3.enum(["MAIN","BASE_REPO","DERIVED_DATA"])),paths:e3.array(e3.string()),status:is,effectiveThresholdBytes:e3.number(),monitored:e3.boolean()}),il=e3.object({enabled:e3.boolean(),status:is,pressureMode:e3.enum(["NORMAL","MANUAL","AUTOMATIC"]),manualPressureMode:e3.boolean(),automaticPressureMode:e3.boolean(),lastReportedAt:e3.string().nullable(),lastError:e3.string().nullable(),warnings:e3.array(e3.string()),monitoredVolumeId:e3.string().nullable(),freeBytes:e3.number().nullable(),totalBytes:e3.number().nullable(),freeGiB:e3.number().nullable(),freePercent:e3.number().nullable(),usedPercent:e3.number().nullable(),effectiveThresholdBytes:e3.number().nullable(),normalThresholdGiB:e3.number(),pressureThresholdGiB:e3.number(),pollIntervalSeconds:e3.number().int(),staleAfterSeconds:e3.number().int(),changeReason:e3.string().nullable(),volumes:e3.array(io)}),iu=e3.object({agent:ia,codebase:e3.object({agentId:e3.string()}),disk:il}),ic=e3.object({agentId:e3.string().min(1)}),id=e3.object({name:e3.string().min(1),description:e3.string().default(""),script:e3.string().min(1),targetKind:e3.enum(["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME","ANY_WORKTREE","REPOSITORY_WORKTREE"]),targetAgentId:e3.string().nullable().optional(),targetRepositoryId:e3.string().nullable().optional(),restartPolicy:e3.enum(["NEVER","ON_FAILURE","ALWAYS"]).default("NEVER"),restartLimit:e3.number().int().min(0).max(100).default(3),quickActionEnabled:e3.boolean().default(!1),quickActionIconKey:e3.string().default("terminal"),quickActionButtonVariant:e3.string().default("default"),notificationsEnabled:e3.boolean().default(!0)}),ip="WORKFLOW_AUTOMATION",ih={actor:"workflow",ipAddress:null},im=e3.object({owner:e3.string().min(1),name:e3.string().min(1),number:e3.number().int().positive()}),ig=e3.object({issueKey:e3.string().min(1)}),iy=e3.object({format:e3.string().min(1),value:e3.string()});var iw=e.i(807237);let ib=e3.object({runId:e3.string().min(1)}),iv=e3.object({kind:e3.string().min(1),worktreeId:e3.string().min(1),jiraIssueKey:e3.string().nullable().optional(),provider:e3.string().min(1),model:e3.string().min(1),effort:e3.string().nullable().optional(),webSearchEnabled:e3.boolean().nullable().optional(),prompt:e3.string().min(1),attachmentIds:e3.array(e3.string().min(1)).nullable().optional(),draftId:e3.string().nullable().optional(),sourcePlanId:e3.string().nullable().optional(),parentRunId:e3.string().nullable().optional(),followUpMode:e3.string().nullable().optional(),contextMode:e3.string().nullable().optional()});var ik=e.i(497800),iS=e.i(835544);function iE(e,t){let r=new Set([...e.nodes.map(({id:e})=>e),...e.triggers.map(({id:e})=>e)]);for(let e=1;;e+=1){let i=`${t}-${e}`;if(!r.has(i))return i}}function iI(e,t){return e.nodes.find(e=>e.id===t)??e.triggers.find(e=>e.id===t)}function ix(e){return(0,iS.isChoiceTriggerKind)(e.kind)?(0,ik.workflowTriggerChoices)(e.config).map(({key:e})=>e):(0,iS.workflowStaticSourceHandles)(e.kind)}function iA(e,t){if(t.config)return t.config;if(!t.configPatch)return e;let r={...e};for(let[e,i]of Object.entries(t.configPatch))null===i?delete r[e]:r[e]=i;return r}function i_(e,t){let r=iI(e,t.source);if(!r)throw Error(`${t.source} is not in this workflow`);if(!e.nodes.some(({id:e})=>e===t.target))throw Error(`${t.target} is not a step — triggers cannot have incoming connections`);let i=ix(r),a=t.sourceHandle??i[0];if(!a)throw Error(`${t.source} offers no connectors yet — a choice trigger needs its options set first`);if(!i.includes(a))throw Error(`${t.source} has no ${a} connector; it offers ${i.join(", ")}`);let n=t.targetHandle??"input",s=e.edges.find(e=>e.source===t.source&&e.target===t.target&&e.sourceHandle===a);if(s)return{definition:e,edgeId:s.id};let o=function(e){let t=new Set(e.edges.map(({id:e})=>e));for(let e=1;;e+=1){let r=`edge-${e}`;if(!t.has(r))return r}}(e);return{definition:{...e,edges:[...e.edges,{id:o,source:t.source,target:t.target,sourceHandle:a,targetHandle:n}]},edgeId:o}}let iC={workflow:[{name:"id",description:"Workflow definition id"},{name:"name",description:"Workflow name"},{name:"runId",description:"Current run id"},{name:"startedAt",description:"Run start timestamp"},{name:"trigger",description:"Trigger that started the run"}],repo:[{name:"id",description:"Repository id"},{name:"githubId",description:"GitHub repository id"},{name:"owner",description:"Repository owner / organization"},{name:"name",description:"Repository name"},{name:"url",description:"Repository URL"},{name:"canonicalOrigin",description:"Normalized repository origin"},{name:"displayOrigin",description:"Human-readable repository origin"},{name:"defaultBranch",description:"Repository default branch"}],codebase:[{name:"id",description:"Codebase id"},{name:"agentId",description:"Owning agent id"},{name:"folder",description:"Codebase filesystem path"},{name:"branch",description:"Current branch"},{name:"headSha",description:"HEAD commit SHA"},{name:"dirty",description:"Whether the working tree has changes"},{name:"branches",description:"Local and remote Git branches"},{name:"branchesTruncated",description:"Whether branch results were truncated"},{name:"stashes",description:"Git stashes"},{name:"stashesTruncated",description:"Whether stash results were truncated"},{name:"remoteBranches",description:"Known remote branches"}],agent:[{name:"id",description:"Owning agent id"},{name:"name",description:"Agent display name"},{name:"hostname",description:"Agent hostname"},{name:"connected",description:"Whether the agent is connected"},{name:"diskTotalBytes",description:"Root disk capacity in bytes"},{name:"diskFreeBytes",description:"Available disk space in bytes"},{name:"memoryFreeBytes",description:"Available memory in bytes"}],disk:[{name:"enabled",description:"Whether disk monitoring is enabled"},{name:"status",description:"Current disk monitor status"},{name:"pressureMode",description:"Normal, manual, or automatic pressure mode"},{name:"manualPressureMode",description:"Whether manual pressure mode is enabled"},{name:"automaticPressureMode",description:"Whether automatic pressure mode is active"},{name:"lastReportedAt",description:"Timestamp of the latest accepted disk report"},{name:"lastError",description:"Latest monitor or cleanup error"},{name:"warnings",description:"Current disk report warnings"},{name:"monitoredVolumeId",description:"Least-free monitored Derived Data volume id"},{name:"freeBytes",description:"Monitored Derived Data free bytes"},{name:"totalBytes",description:"Monitored Derived Data total bytes"},{name:"freeGiB",description:"Monitored Derived Data free space in GiB"},{name:"freePercent",description:"Monitored Derived Data free percentage"},{name:"usedPercent",description:"Monitored Derived Data used percentage"},{name:"effectiveThresholdBytes",description:"Current cleanup threshold in bytes"},{name:"normalThresholdGiB",description:"Global normal threshold in GiB"},{name:"pressureThresholdGiB",description:"Global pressure threshold in GiB"},{name:"pollIntervalSeconds",description:"Agent disk report cadence"},{name:"staleAfterSeconds",description:"Age at which a report is stale"},{name:"changeReason",description:"Internal reason for the monitor event"},{name:"volumes",description:"All reported volumes and their monitor status"}],cleanup:[{name:"jobId",description:"Automatic cleanup agent job id"},{name:"status",description:"Automatic cleanup terminal status"},{name:"source",description:"Cleanup source"},{name:"error",description:"Cleanup error, if any"},{name:"targets",description:"Derived Data entries selected for cleanup"},{name:"deleted",description:"Derived Data entries reported deleted"}],command:[{name:"id",description:"Command run id"},{name:"commandId",description:"Saved command definition id"},{name:"name",description:"Command display name"},{name:"status",description:"Command run status"},{name:"exitCode",description:"Command process exit code"},{name:"signal",description:"Command termination signal"},{name:"error",description:"Command failure reason"},{name:"finishedAt",description:"Command completion timestamp"}],skill:[{name:"id",description:"Skill id"},{name:"groupId",description:"Skill group id"}],skillSync:[{name:"id",description:"Skill sync run id"},{name:"kind",description:"Skill sync kind"},{name:"status",description:"Skill sync status"},{name:"error",description:"Skill sync failure reason"},{name:"conflictCount",description:"Unresolved conflict count"},{name:"conflicts",description:"Unresolved skill conflicts"},{name:"updatedAt",description:"Skill sync update timestamp"},{name:"finishedAt",description:"Skill sync completion timestamp"}],buildData:[{name:"id",description:"Build-data collection id"},{name:"status",description:"Collection status"},{name:"finishedAt",description:"Collection completion timestamp"},{name:"totalBytes",description:"Total discovered bytes"},{name:"entryCount",description:"Discovered entry count"},{name:"successfulAgentCount",description:"Agents that completed collection successfully"}],signingProfile:[{name:"id",description:"Signing profile id"},{name:"uuid",description:"Provisioning profile UUID"},{name:"name",description:"Provisioning profile name"},{name:"expiresAt",description:"Provisioning profile expiry"},{name:"expired",description:"Whether the profile is expired"}],device:[{name:"id",description:"iOS device id"},{name:"udid",description:"Device UDID"},{name:"name",description:"Device display name"},{name:"product",description:"Device product identifier"},{name:"osVersion",description:"Device OS version"},{name:"status",description:"Device registration status"},{name:"error",description:"Device registration failure reason"},{name:"updatedAt",description:"Device update timestamp"}],pushBatch:[{name:"id",description:"Push-notification batch id"},{name:"status",description:"Push batch status"},{name:"targetMode",description:"Push batch target mode"},{name:"deliveryCount",description:"Push delivery count"},{name:"updatedAt",description:"Push batch update timestamp"}],ticket:[{name:"key",description:"Jira issue key (e.g. AIDE-42)"},{name:"projectKey",description:"Jira project key"},{name:"title",description:"Issue summary / title"},{name:"type",description:"Issue type (Bug, Story, …)"},{name:"status",description:"Workflow status name"},{name:"statusId",description:"Workflow status id"},{name:"statusCategory",description:"Status category (To Do, Done, …)"},{name:"assignee",description:"Assigned user"},{name:"assigneeAccountId",description:"Assigned Jira account id"},{name:"labels",description:"Issue labels"},{name:"sprintNames",description:"Sprints containing the issue"},{name:"url",description:"Jira issue URL"}],pr:[{name:"id",description:"Pull request id"},{name:"number",description:"Pull request number"},{name:"state",description:"Open / closed / merged state"},{name:"merged",description:"Whether the pull request was merged"},{name:"title",description:"Pull request title"},{name:"url",description:"Pull request URL"},{name:"labels",description:"Pull request labels"},{name:"isDraft",description:"Whether the pull request is a draft"},{name:"headBranch",description:"Pull request head branch"},{name:"headRefName",description:"Pull request head ref"},{name:"headSha",description:"Pull request head commit SHA"},{name:"baseBranch",description:"Pull request base branch"},{name:"reviewDecision",description:"Latest review decision"},{name:"pipelineStatus",description:"Combined pull request check status"},{name:"unresolvedReviewThreadCount",description:"Number of unresolved pull request review threads"},{name:"pipelines",description:"CI pipelines linked to the pull request"},{name:"reviewThreads",description:"Pull request review threads"},{name:"mergeable",description:"Pull request mergeability"},{name:"repositoryGithubId",description:"GitHub repository id"},{name:"repositoryNameWithOwner",description:"GitHub owner and repository name"},{name:"jiraKey",description:"Jira key linked to the pull request"},{name:"unresolvedThreads",description:"Unresolved review threads"}],worktree:[{name:"id",description:"Worktree id"},{name:"branch",description:"Worktree branch"},{name:"baseBranch",description:"Base branch the work targets"},{name:"path",description:"Filesystem path"},{name:"headSha",description:"Worktree HEAD commit SHA"},{name:"pushStatus",description:"Push readiness status"},{name:"upstream",description:"Tracked upstream branch"},{name:"syncState",description:"Relationship to the tracked branch"},{name:"ahead",description:"Commits ahead of upstream"},{name:"behind",description:"Commits behind upstream"},{name:"baseAhead",description:"Commits ahead of the base branch"},{name:"baseBehind",description:"Commits behind the base branch"},{name:"commits",description:"Commits on the branch"},{name:"changes",description:"Pending file changes"},{name:"branchChanges",description:"Files changed from the base branch"},{name:"commitsTruncated",description:"Whether commit results were truncated"},{name:"changesTruncated",description:"Whether pending changes were truncated"},{name:"branchChangesTruncated",description:"Whether branch change results were truncated"},{name:"dirty",description:"Whether the working tree has changes"},{name:"branches",description:"Local and remote Git branches"},{name:"branchesTruncated",description:"Whether branch results were truncated"},{name:"stashes",description:"Git stashes"},{name:"stashesTruncated",description:"Whether stash results were truncated"},{name:"rebaseInProgress",description:"Whether a rebase is in progress"},{name:"hasConflicts",description:"Whether Git reports conflicts"},{name:"conflicted",description:"Whether an inspection found conflicts"},{name:"conflicts",description:"Conflicting files"},{name:"missingAt",description:"When the worktree was found missing"},{name:"dirtySince",description:"When the worktree became dirty"},{name:"autoSync",description:"Persistent Auto Sync configuration and current state"},{name:"autoMerge",description:"Persistent Auto Merge configuration and current state"}],pipeline:[{name:"id",description:"CI pipeline id"},{name:"runId",description:"CI run id"},{name:"workflowId",description:"CI workflow id"},{name:"name",description:"CI workflow name"},{name:"displayTitle",description:"CI run display title"},{name:"status",description:"Run status"},{name:"conclusion",description:"Run conclusion"},{name:"headBranch",description:"Branch built by the CI run"},{name:"headSha",description:"Commit built by the CI run"},{name:"pullRequests",description:"Pull requests linked to the CI run"},{name:"url",description:"CI run URL"},{name:"failedJobs",description:"Failed jobs"},{name:"jobs",description:"Jobs in the CI run"},{name:"checkSuiteId",description:"GitHub check suite id"},{name:"runNumber",description:"GitHub Actions run number"},{name:"runAttempt",description:"GitHub Actions run attempt"},{name:"jiraKey",description:"Jira key inferred from the run"}],build:[{name:"id",description:"Build id"},{name:"status",description:"Build status"},{name:"action",description:"Build action"},{name:"error",description:"Build error, if any"},{name:"artifactDirectory",description:"Build artifact directory"},{name:"testSummary",description:"Test result summary"},{name:"tests",description:"Individual test results"},{name:"coverageSummary",description:"Coverage summary"},{name:"coverageFiles",description:"Per-file coverage results"},{name:"changedCoverageFiles",description:"Coverage for files changed on the branch"},{name:"artifacts",description:"Exported build artifacts"},{name:"exportId",description:"Build export id"}],run:[{name:"id",description:"Agent run id"},{name:"kind",description:"Run kind (PLAN / SESSION)"},{name:"status",description:"Run status"},{name:"phase",description:"Run phase"},{name:"origin",description:"Run origin"},{name:"provider",description:"AI provider"},{name:"model",description:"AI model"},{name:"branch",description:"Branch used by the run"},{name:"finalOutput",description:"Final output text"},{name:"error",description:"Run error, if any"},{name:"usage",description:"Token usage and cost"},{name:"questions",description:"Questions asked by the run"},{name:"events",description:"Run events"},{name:"links",description:"Resources linked to the run"}],steps:[{name:"status",description:"Step completion status"},{name:"output",description:"Step output payload"},{name:"answer",description:"Human answer for the step"},{name:"snapshotId",description:"Captured snapshot id"},{name:"items",description:"Items produced for iteration"},{name:"commandRunId",description:"Command run id"},{name:"displayNumber",description:"Resource display number"}],comment:[{name:"id",description:"Comment id"},{name:"body",description:"Comment body"},{name:"author",description:"Comment author"}],push:[{name:"ref",description:"Pushed Git ref"},{name:"before",description:"Commit before the push"},{name:"after",description:"Commit after the push"}],job:[{name:"id",description:"Job id"},{name:"name",description:"Job name"},{name:"status",description:"Job status"},{name:"url",description:"Job URL"},{name:"runAttempt",description:"Workflow run attempt"}]},iR=new Map(Object.entries(iC).flatMap(([e,t])=>t.map(t=>[`${e}.${t.name}`,t.description])));function iT(e){return e.split(".")[0]??e}let iD=e3.object({workflowId:e3.string().min(1).describe("Workflow id.")}),iN=e3.object({x:e3.number(),y:e3.number()}).describe("Canvas position. Presentation only — omit it and a sensible spot is chosen."),iO=e3.record(e3.string(),e3.unknown()).describe("Config object for this kind. Call describe_workflow_kind for its schema. A value may be a constant, a session binding `{source:'SESSION',path:'ticket.key'}`, or a string with `{{ticket.key}}` interpolation."),iP=e3.array(e3.string()).max(100).describe("Extra session paths this step guarantees, on top of what its kind always provides. Required when a step writes to a config-chosen path — e.g. a CONTROL_SET_VARIABLE with `path: 'checks.ready'` must declare ['checks.ready'], or a later step binding it fails validation with REQUIREMENT_UNSATISFIED."),i$=e3.array(e3.string()).max(100).describe("Extra session paths this step demands, on top of its kind's own. Publishing fails unless every trigger that reaches the step guarantees them."),iU=e3.object({severity:e3.enum(["ERROR","WARNING"]),code:e3.string(),message:e3.string(),nodeId:e3.string().nullable(),triggerId:e3.string().nullable(),path:e3.string().nullable()}),iB=e3.object({workflowId:e3.string(),definition:e3.unknown().describe("The saved draft definition."),valid:e3.boolean().describe("Whether the draft would publish. Warnings do not block."),diagnostics:e3.array(iU),nodeId:e3.string().nullable().describe("Id of a step this call created."),triggerId:e3.string().nullable().describe("Id of a trigger this call created."),edgeId:e3.string().nullable().describe("Id of a connection this call created.")}),ij=e3.object({id:e3.string(),name:e3.string(),description:e3.string(),enabled:e3.boolean(),overlapPolicy:e3.string(),maxConcurrentRuns:e3.number(),activeVersionId:e3.string().nullable(),draftSchemaVersion:e3.number(),quickActionKind:e3.enum(["STANDARD","MERGE_CONFLICT","GITHUB_ACTIONS","NONE"]),archivedAt:e3.string().nullable(),versionCount:e3.number(),runCount:e3.number(),createdAt:e3.string().nullable(),updatedAt:e3.string().nullable()}),iL=e3.object({id:e3.string(),displayNumber:e3.number(),workflowId:e3.string(),versionId:e3.string(),parentRunId:e3.string().nullable(),triggerKind:e3.string(),triggerSubjectKey:e3.string(),triggerPayload:e3.unknown(),status:e3.string(),phase:e3.string(),generation:e3.number(),sessionData:e3.unknown(),blockedReason:e3.string().nullable(),error:e3.string().nullable(),attemptCount:e3.number(),eventCount:e3.number(),queuedAt:e3.string().nullable(),startedAt:e3.string().nullable(),pausedAt:e3.string().nullable(),finishedAt:e3.string().nullable(),updatedAt:e3.string().nullable()}),iq=e3.object({id:e3.string(),runId:e3.string(),attemptId:e3.string().nullable(),sequence:e3.number(),type:e3.string(),message:e3.string(),detail:e3.unknown(),createdAt:e3.string().nullable()}),iM=e3.object({batchId:e3.string(),runId:e3.string().nullable(),status:e3.string(),createdAt:e3.string().nullable(),questions:e3.array(e3.object({id:e3.string(),header:e3.string().nullable(),prompt:e3.string(),multiSelect:e3.boolean(),allowCustom:e3.boolean(),options:e3.array(e3.object({label:e3.string(),description:e3.string().nullable()}))}))}),iF={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0};function iK(e,t){return!t||e.toLowerCase().includes(t.toLowerCase())}async function iV(e,t){let r=await e().get(t);if(!r)throw Error(`Workflow ${t} was not found`);return(0,ik.parseWorkflowDefinition)(JSON.parse(r.draftDefinitionJson))}async function iH(e,t,r,i={}){let a=e();await a.saveDraft({id:t,definition:r});let{valid:n,diagnostics:s}=await a.validateDraft(t);return{workflowId:t,definition:t9(r),valid:n,diagnostics:s.map(e=>({severity:e.severity,code:e.code,message:e.message,nodeId:e.nodeId??null,triggerId:e.triggerId??null,path:e.path??null})),nodeId:i.nodeId??null,triggerId:i.triggerId??null,edgeId:i.edgeId??null}}function iG(e){let t=ik.WORKFLOW_TRIGGER_CATALOG.find(t=>t.kind===e);if(!t)throw Error(`Unknown trigger kind ${e}`);return t}let iW=e3.object({id:e3.string().min(1)}),iJ=e3.object({worktreeId:e3.string().min(1),requestId:e3.string().min(1)}),iz=e3.object({mode:e3.enum(["NEW","EXISTING","TICKET"]),branchName:e3.string().nullable().optional(),ticketKey:e3.string().nullable().optional(),baseBranch:e3.string().min(1)}),iZ=e3.object({worktreeId:e3.string(),state:e3.string(),conflictWorkflowId:e3.string().nullable(),conflictWorkflowChoice:e3.string().nullable(),lastError:e3.string().nullable(),lastSyncedAt:e3.string().nullable(),updatedAt:e3.string()}),iY=e3.object({worktreeId:e3.string(),state:e3.string(),repositoryNameWithOwner:e3.string(),pullRequestNumber:e3.number().int(),mergeMethod:e3.enum(["MERGE","REBASE","SQUASH"]),commitHeadline:e3.string(),commitBody:e3.string(),authorEmail:e3.string().nullable(),deleteWorktree:e3.boolean(),moveTicketToDone:e3.boolean(),ticketKey:e3.string().nullable(),lastError:e3.string().nullable(),updatedAt:e3.string()}),iQ={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},iX={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},i0={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},i1={...iQ,openWorldHint:!0},i2={...iX,openWorldHint:!0},i3={...i0,openWorldHint:!0};function i4(e){return{name:e.name,title:e.title,description:e.description,inputSchema:e.inputSchema,outputSchema:e.outputSchema,annotations:e.annotations??iQ,invoke:async t=>{let r=e.inputSchema.parse(t);return e.outputSchema.parse(await e.handler(r))}}}function i6(e){return{id:e.id,name:e.name,source:"BUILTIN",transport:null,url:null,error:null,tools:e.tools.map(e=>({name:e.name,title:e.title,description:e.description,inputSchema:S.toJSONSchema(e.inputSchema),outputSchema:S.toJSONSchema(e.outputSchema),annotations:e.annotations})),children:e.children.map(i6)}}function i8(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Built-in tool output must be a JSON object");return{content:[{type:"text",text:JSON.stringify(e,null,2)}],structuredContent:e}}class i5{groups;indexed;byName;groupIds;constructor(e){this.groups=e,this.indexed=function e(t){return t.flatMap(t=>[...t.tools.map(e=>({groupId:t.id,definition:e})),...e(t.children)])}(e),this.byName=new Map,this.groupIds=new Set;const t=e=>{if(this.groupIds.has(e.id))throw Error(`Duplicate built-in tool group id: ${e.id}`);this.groupIds.add(e.id),e.children.forEach(t)};for(const r of(e.forEach(t),this.indexed)){if(this.byName.has(r.definition.name))throw Error(`Duplicate built-in MCP tool name: ${r.definition.name}`);this.byName.set(r.definition.name,r)}}definitions(){return this.indexed.map(({definition:e})=>e)}catalog(){return this.groups.map(i6)}hasGroup(e){return this.groupIds.has(e)}groupIdForName(e){return this.byName.get(e)?.groupId??null}async call(e,t,r){let i=this.byName.get(t);if(!i||i.groupId!==e)throw Error(`Unknown built-in tool: ${t}`);return i8(await i.definition.invoke(r))}async callByName(e,t){let r=this.byName.get(e);if(!r)throw Error(`Unknown built-in tool: ${e}`);return i8(await r.definition.invoke(t))}}function i9(e){return{...e,startedAt:e.startedAt.toISOString(),finishedAt:e.finishedAt?.toISOString()??null}}class i7{async clear(){return(await (0,tX.getPrismaClient)()).toolCallAudit.deleteMany({where:{resultStatus:{not:"RUNNING"}}})}async execute(e,t){var r;let i,a,n=await (0,tX.getPrismaClient)(),s=(0,y.randomUUID)(),o=new Date;await n.toolCallAudit.create({data:{id:s,correlationId:e.correlationId,caller:e.caller,source:e.source,groupId:e.groupId,toolName:e.toolName,argumentsSha256:(r=e.arguments,(0,y.createHash)("sha256").update(JSON.stringify((a=e=>null===e||"string"==typeof e||"boolean"==typeof e?e:"number"==typeof e?Number.isFinite(e)?e:String(e):"bigint"==typeof e?e.toString():Array.isArray(e)?e.map(a):e instanceof Date?e.toISOString():e&&"object"==typeof e?Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,a(t)])):String(e))(r))).digest("hex")),resultStatus:"RUNNING",startedAt:o}});try{i=await t()}catch(t){let e=new Date;throw await n.toolCallAudit.update({where:{id:s},data:{resultStatus:"FAILED",durationMs:Math.max(0,e.getTime()-o.getTime()),finishedAt:e}}).catch(()=>void 0),r6.agentEventBus.publish(r6.TOOL_CALL_AUDIT_CHANGED_TOPIC,{toolCallAuditChanged:{id:s}}),t}let l=new Date,u=!1;try{await n.toolCallAudit.update({where:{id:s},data:{resultStatus:"SUCCEEDED",durationMs:Math.max(0,l.getTime()-o.getTime()),finishedAt:l}}),u=!0}catch(e){console.error("Could not persist successful tool-call audit completion:",e instanceof Error?e.message:e)}return u&&r6.agentEventBus.publish(r6.TOOL_CALL_AUDIT_CHANGED_TOPIC,{toolCallAuditChanged:{id:s}}),i}async list(e={}){let t=await (0,tX.getPrismaClient)();return(await t.toolCallAudit.findMany({where:{...e.toolName?{toolName:e.toolName}:{},...e.resultStatus?{resultStatus:e.resultStatus}:{}},orderBy:{startedAt:"desc"},take:Math.min(Math.max(e.first??100,1),500)})).map(i9)}async get(e){let t=await (0,tX.getPrismaClient)(),r=await t.toolCallAudit.findUnique({where:{id:e}});return r?i9(r):null}}let ae="external:",at=new Set(["accept","connection","content-length","content-type","host","last-event-id","mcp-protocol-version","mcp-session-id","transfer-encoding"]),ar=new Set(w.BUILD_CONFIGURATION_ICON_KEYS);function ai(e){if("STREAMABLE_HTTP"===e||"SSE"===e)return e;throw Error(`Unsupported MCP transport: ${e}`)}function aa(e,t){return{id:e.id,name:e.name,url:e.url,transport:ai(e.transport),toolNamePrefix:e.toolNamePrefix,headers:[...e.headers].sort((e,t)=>e.name.localeCompare(t.name)).map(e=>({id:e.id,name:e.name,valueConfigured:t})),createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString()}}function an(e){return{id:e.id,name:e.name,description:e.description,iconKey:e.iconKey,enabledForPlans:e.enabledForPlans,enabledForSessions:e.enabledForSessions,toolNames:e.tools.map(({toolName:e})=>e).sort(),createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString()}}class as{credentials;audit;builtInTools;constructor(e,t,r={},i=new t0.CredentialService,a=new i7){this.credentials=i,this.audit=a,this.builtInTools=function(e){var t,r,i,a,n,s,o,l,c,d,p,h,m,f,g,y,w,b,v,k,S,E,I,x,A,_,C,R,T;let D,N,O,P,$=[(t=e.codebaseTools,r=e.codebases,D=[i4({name:"get_codebases",title:"Get codebases",description:"List every registered codebase checkout.",inputSchema:u.GetCodebasesInputSchema,outputSchema:u.GetCodebasesOutputSchema,annotations:iQ,handler:async()=>({codebases:await t.list()})}),i4({name:"get_codebase",title:"Get codebase",description:"Get one registered codebase by ID or exact folder path.",inputSchema:u.GetCodebaseInputSchema,outputSchema:u.GetCodebaseOutputSchema,annotations:iQ,handler:async e=>({codebase:"id"in e?await t.getById(e.id):e.agentId?await t.getByPath(e.path,e.agentId):await t.getByPath(e.path)})})],r&&(D.splice(1,0,i4({name:"search_codebases",title:"Search codebases",description:"Search registered codebases by text, agent, repository, branch, availability, or sync state.",inputSchema:u.SearchCodebasesInputSchema,outputSchema:u.SearchCodebasesOutputSchema,annotations:iQ,handler:e=>t.search(e)}),rp({name:"register_codebase",title:"Register codebase",description:"Register a previously inspected agent repository folder.",inputSchema:e3.object({inspectionJobId:e3.string().min(1),name:e3.string().nullable().optional(),description:e3.string().nullable().optional()}),service:r,method:"confirm",resultKey:"codebase",annotations:{...iX,idempotentHint:!1}}),rp({name:"update_codebase_repository",title:"Update codebase repository",description:"Update canonical repository metadata and linked skill groups.",inputSchema:e3.object({id:e3.string().min(1),name:e3.string().min(1),description:e3.string(),jiraBranchRegex:e3.string().nullable().optional(),keepBaseBranchUpToDate:e3.boolean(),skillGroupIds:e3.array(e3.string()).nullable().optional()}),service:r,method:"updateRepository",arguments:e=>[e.id,e.name,e.description,e.jiraBranchRegex,e.keepBaseBranchUpToDate,e.skillGroupIds],resultKey:"repository",annotations:iX}),rp({name:"update_codebase_settings",title:"Update codebase settings",description:"Update global refresh, fetch, and Jira branch parsing settings.",inputSchema:e3.object({refreshIntervalSeconds:e3.number().int().positive(),fetchIntervalSeconds:e3.number().int().positive(),defaultJiraBranchRegex:e3.string()}),service:r,method:"updateSettings",resultKey:"settings",annotations:iX}),rp({name:"remove_codebase",title:"Remove codebase",description:"Remove a registered codebase from the control plane without deleting its repository folder.",inputSchema:e3.object({id:e3.string().min(1)}),service:r,method:"removeCodebase",arguments:({id:e})=>[e],resultKey:"removed",annotations:i0}),rp({name:"run_codebase_git_operation",title:"Run codebase Git operation",description:"Run a supported Git operation against a registered codebase.",inputSchema:e3.object({codebaseId:e3.string().min(1),operation:e3.string().min(1),branch:e3.string().nullable().optional(),stashOid:e3.string().nullable().optional(),stashChanges:e3.boolean().nullable().optional(),requestId:e3.string().min(1)}),service:r,method:"runGitOperation",resultKey:"job",annotations:iX})),D.push(i4({name:"get_codebase_repositories",title:"Get codebase repositories",description:"List canonical repositories and their checkout counts.",inputSchema:rf,outputSchema:u.GetCodebaseRepositoriesOutputSchema,annotations:iQ,handler:async()=>({repositories:await t.repositories()})}),i4({name:"get_codebase_repository",title:"Get codebase repository",description:"Get a canonical repository and all of its registered checkouts.",inputSchema:u.GetCodebaseRepositoryInputSchema,outputSchema:u.GetCodebaseRepositoryOutputSchema,annotations:iQ,handler:async({id:e})=>({repository:await t.repository(e)})}),i4({name:"get_codebase_settings",title:"Get codebase settings",description:"Get global codebase refresh, fetch, and branch settings.",inputSchema:rf,outputSchema:rg,annotations:iQ,handler:async()=>{let e=await r.settings();return{settings:{refreshIntervalSeconds:e.refreshIntervalSeconds,fetchIntervalSeconds:e.fetchIntervalSeconds,defaultJiraBranchRegex:e.defaultJiraBranchRegex,updatedAt:e.updatedAt.toISOString()}}}}),i4({name:"browse_agent_directory",title:"Browse agent directory",description:"List candidate repository folders on an enrolled agent.",inputSchema:ry,outputSchema:rw,annotations:iQ,handler:async({agentId:e,path:t,requestId:i})=>({listing:await r.browse(e,t,i)})}),i4({name:"inspect_agent_codebase",title:"Inspect agent codebase",description:"Inspect a repository folder without registering or changing it.",inputSchema:rb,outputSchema:rv,annotations:iQ,handler:async({agentId:e,folder:t,requestId:i})=>({inspection:t9(await r.inspect(e,t,i))})}),i4({name:"refresh_codebases",title:"Refresh codebases",description:"Queue local metadata refreshes for registered codebases.",inputSchema:rk,outputSchema:rS,annotations:iX,handler:async({codebaseIds:e,requestId:t})=>{let i=await r.runOperation(rm.CODEBASE_REFRESH_JOB_KIND,e,t);return{jobs:i.jobs.map(e=>t5(e)),skipped:i.skipped}}}),i4({name:"fetch_codebases",title:"Fetch codebases",description:"Queue remote Git fetches and configured base-branch updates.",inputSchema:rk,outputSchema:rS,annotations:{...iX,openWorldHint:!0},handler:async({codebaseIds:e,requestId:t})=>{let i=await r.runOperation(rm.CODEBASE_FETCH_JOB_KIND,e,t);return{jobs:i.jobs.map(e=>t5(e)),skipped:i.skipped}}}),i4({name:"inspect_codebase_git_state",title:"Inspect codebase Git state",description:"Inspect branches, checkout locations, and stashes.",inputSchema:rE,outputSchema:rI,annotations:iQ,handler:async({codebaseId:e,requestId:t})=>({state:await r.inspectGitState(e,t)})}),i4({name:"inspect_codebase_stash",title:"Inspect codebase stash",description:"Read a bounded textual patch for a Git stash.",inputSchema:rx,outputSchema:rA,annotations:iQ,handler:async({codebaseId:e,stashOid:t,requestId:i})=>({diff:await r.inspectStash(e,t,i)})}))),{id:"builtin:codebases",name:"Codebases",tools:D,children:[]})];return e.builds&&$.push((i=e.builds,{id:"builtin:builds",name:"Builds",children:[],tools:[i4({name:"get_builds",title:"Get builds",description:"List immutable iOS build records.",inputSchema:rl.GetBuildsInputSchema,outputSchema:rl.GetBuildsOutputSchema,annotations:iQ,handler:async e=>{let t=await i.builds(e);return{builds:t.items,nextCursor:t.nextCursor}}}),i4({name:"get_build",title:"Get build",description:"Get a build with sanitized logs.",inputSchema:rl.GetBuildInputSchema,outputSchema:rl.GetBuildOutputSchema,annotations:iQ,handler:async({buildId:e,afterLogId:t,logLimit:r})=>{let a=await i.getBuild(e);if(!a)throw Error("Build not found");return{build:a,logs:await i.logChunks(e,t,r)}}}),i4({name:"get_build_configurations",title:"Get build configurations",description:"List build configurations for a worktree.",inputSchema:rl.GetBuildConfigurationsInputSchema,outputSchema:rl.GetBuildConfigurationsOutputSchema,annotations:iQ,handler:async({worktreeId:e})=>({project:await i.projectForWorktree(e)})}),i4({name:"get_build_destinations",title:"Get build destinations",description:"Inspect compatible build destinations.",inputSchema:rl.GetBuildDestinationsInputSchema,outputSchema:rl.GetBuildDestinationsOutputSchema,annotations:iQ,handler:async e=>({destinations:"buildId"in e?await i.destinationsForBuild(e.buildId,e.requestId):await i.destinations(e)})}),i4({name:"start_build",title:"Start build",description:"Queue an iOS build.",inputSchema:rl.StartBuildToolInputSchema,outputSchema:rl.StartBuildToolOutputSchema,annotations:iX,handler:async e=>({build:await i.startBuild(e)})}),i4({name:"cancel_build",title:"Cancel build",description:"Cancel an active build.",inputSchema:rl.CancelBuildToolInputSchema,outputSchema:rl.CancelBuildToolOutputSchema,annotations:i0,handler:async({buildId:e})=>({build:await i.cancelBuild(e)})}),i4({name:"run_build",title:"Run build",description:"Install and launch without rebuilding.",inputSchema:rl.RunBuildToolInputSchema,outputSchema:rl.RunBuildToolOutputSchema,annotations:iX,handler:async e=>({deployments:await i.runBuild(e)})}),i4({name:"export_build_archive",title:"Export build archive",description:"Export an archive to a local IPA folder.",inputSchema:rl.ExportBuildToolInputSchema,outputSchema:rl.ExportBuildToolOutputSchema,annotations:iX,handler:async e=>({export:await i.exportArchive(e)})}),rp({name:"get_build_project",title:"Get build project",description:"Get the iOS build project configured for a codebase.",inputSchema:e3.object({codebaseId:e3.string().min(1)}),service:i,method:"project",arguments:({codebaseId:e})=>[e],resultKey:"project"}),rp({name:"create_build_project",title:"Create build project",description:"Create an iOS build project for a codebase.",inputSchema:e3.object({codebaseId:e3.string().min(1)}),service:i,method:"createProject",arguments:({codebaseId:e})=>[e],resultKey:"project",annotations:{...iX,idempotentHint:!1}}),rp({name:"save_build_configuration",title:"Save build configuration",description:"Create or update an iOS build configuration.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:i,method:"saveConfiguration",arguments:({input:e})=>[e],resultKey:"configuration",annotations:iX}),rp({name:"delete_build_configuration",title:"Delete build configuration",description:"Delete an iOS build configuration.",inputSchema:e3.object({id:e3.string().min(1)}),service:i,method:"deleteConfiguration",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i0}),rp({name:"discover_build_sources",title:"Discover build sources",description:"Discover Xcode projects and workspaces in a worktree.",inputSchema:e3.object({worktreeId:e3.string().min(1),requestId:e3.string().min(1)}),service:i,method:"discoverSources",arguments:e=>[e.worktreeId,e.requestId],resultKey:"sources",annotations:iX}),rp({name:"inspect_build_source",title:"Inspect build source",description:"Inspect schemes, configurations, and targets for an Xcode source.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:i,method:"inspectSource",arguments:({input:e})=>[e],resultKey:"inspection",annotations:iX}),rp({name:"get_build_scripts",title:"Get build scripts",description:"List reusable build scripts.",inputSchema:e3.object({}),service:i,method:"scripts",arguments:()=>[],resultKey:"scripts"}),rp({name:"save_build_script",title:"Save build script",description:"Create or update a reusable build script.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:i,method:"saveScript",arguments:({input:e})=>[e],resultKey:"script",annotations:iX}),rp({name:"delete_build_script",title:"Delete build script",description:"Delete a reusable build script.",inputSchema:e3.object({id:e3.string().min(1)}),service:i,method:"deleteScript",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i0}),rp({name:"rebuild_build",title:"Rebuild build",description:"Queue a new build from an existing build snapshot.",inputSchema:e3.object({buildId:e3.string().min(1),requestId:e3.string().min(1)}),service:i,method:"rebuildBuild",arguments:e=>[e.buildId,e.requestId,null],resultKey:"build",annotations:iX}),rp({name:"delete_builds",title:"Delete builds",description:"Permanently delete build records and their retained data.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),service:i,method:"deleteBuilds",arguments:({ids:e})=>[e],resultKey:"count",annotations:i0}),rp({name:"get_build_reports",title:"Get build reports",description:"Get parsed test and coverage reports for a build.",inputSchema:e3.object({buildId:e3.string().min(1)}),service:i,method:"reportsForBuild",arguments:({buildId:e})=>[e],resultKey:"reports"}),rp({name:"generate_build_report",title:"Generate build report",description:"Generate a parsed test-results or code-coverage report.",inputSchema:e3.object({buildId:e3.string().min(1),kind:e3.enum(["TEST_RESULTS","CODE_COVERAGE"]),requestId:e3.string().min(1)}),service:i,method:"generateReport",arguments:e=>[e.buildId,e.kind,e.requestId],resultKey:"report",annotations:iX}),rp({name:"start_worktree_coverage",title:"Start worktree coverage",description:"Start the configured coverage workflow for a worktree.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:i,method:"startWorktreeCoverage",arguments:({input:e})=>[e],resultKey:"build",annotations:iX}),rp({name:"get_worktree_coverage",title:"Get worktree coverage",description:"Get coverage history for a worktree.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),service:i,method:"coverageHistory",arguments:({worktreeId:e})=>[e],resultKey:"history"})]})),e.telemetry&&e.pushNotifications&&$.push((a=e.telemetry,n=e.pushNotifications,(N=r2(a,"UNIFIED",{plural:"unified_events",singular:"unified_event",label:"Unified Events"})).push(i4({name:"get_telemetry_separators",title:"Get telemetry separators",description:"List global manual and build separators with optional filters.",inputSchema:e3.object({first:e3.number().int().min(1).max(500).default(100),after:e3.string().nullable().default(null),kind:e3.string().min(1).nullable().optional(),name:e3.string().min(1).nullable().optional(),buildId:e3.string().min(1).nullable().optional()}),outputSchema:e3.object({items:e3.array(rK),nextCursor:e3.string().nullable()}),annotations:iQ,handler:e=>a.separators(e)}),i4({name:"add_telemetry_separator",title:"Add telemetry separator",description:"Add a global manual separator to all telemetry views.",inputSchema:e3.object({name:e3.string().max(100).nullable().default(null)}),outputSchema:e3.object({separator:rK}),annotations:{...iX,idempotentHint:!1},handler:async({name:e})=>({separator:await a.addSeparator(e)})}),i4({name:"get_telemetry_settings",title:"Get telemetry settings",description:"Get telemetry collection state and effective ingestion URLs.",inputSchema:e3.object({}),outputSchema:e3.object({settings:e3.object({localBaseUrlOverride:e3.string().nullable(),remoteBaseUrlOverride:e3.string().nullable(),consoleCollectionEnabled:e3.boolean(),analyticsCollectionEnabled:e3.boolean(),detectedLocalBaseUrl:e3.string(),detectedRemoteBaseUrl:e3.string(),effectiveLocalBaseUrl:e3.string(),effectiveRemoteBaseUrl:e3.string(),updatedAt:e3.string()})}),annotations:iQ,handler:async()=>({settings:await a.settings()})}),rp({name:"update_telemetry_settings",title:"Update telemetry settings",description:"Update telemetry collection and ingestion URL settings.",inputSchema:e3.object({localBaseUrlOverride:e3.string().nullable().optional(),remoteBaseUrlOverride:e3.string().nullable().optional(),consoleCollectionEnabled:e3.boolean().nullable().optional(),analyticsCollectionEnabled:e3.boolean().nullable().optional()}),service:a,method:"saveSettings",resultKey:"settings",annotations:iX}),rp({name:"get_telemetry_view_settings",title:"Get telemetry view settings",description:"Get display settings for a telemetry view.",inputSchema:e3.object({view:e3.enum(["UNIFIED","CONSOLE","ANALYTICS"])}),service:a,method:"viewSettings",arguments:({view:e})=>[e],resultKey:"settings"}),rp({name:"update_telemetry_highlight",title:"Update telemetry highlight",description:"Set or clear the highlight color on a telemetry entry.",inputSchema:e3.object({id:e3.string().min(1),color:e3.string().nullable().optional()}),service:a,method:"highlight",arguments:({id:e,color:t})=>[e,t??null],resultKey:"entry",annotations:iX}),rp({name:"get_telemetry_presets",title:"Get telemetry presets",description:"List saved column presets for a telemetry view.",inputSchema:e3.object({view:e3.enum(["UNIFIED","CONSOLE","ANALYTICS"])}),service:a,method:"columnPresets",arguments:({view:e})=>[e],resultKey:"presets"}),rp({name:"save_telemetry_preset",title:"Save telemetry preset",description:"Create or update a telemetry column preset.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:a,method:"saveColumnPreset",arguments:({input:e})=>[e],resultKey:"preset",annotations:iX}),rp({name:"get_saved_telemetry_filters",title:"Get saved telemetry filters",description:"List saved filters for a telemetry view.",inputSchema:e3.object({view:e3.enum(["UNIFIED","CONSOLE","ANALYTICS"])}),service:a,method:"savedFilters",arguments:({view:e})=>[e],resultKey:"filters"}),rp({name:"save_telemetry_filter",title:"Save telemetry filter",description:"Create or update a saved telemetry filter.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:a,method:"saveFilter",arguments:({input:e})=>[e],resultKey:"filter",annotations:iX}),rp({name:"export_telemetry",title:"Export telemetry",description:"Export a bounded telemetry query as structured JSON.",inputSchema:e3.object({view:e3.enum(["UNIFIED","CONSOLE","ANALYTICS"]).default("UNIFIED"),search:e3.string().nullable().optional(),first:e3.number().int().min(1).max(5e3).default(1e3)}),service:a,method:"timeline",resultKey:"export"})),{id:"builtin:debugging",name:"Debugging",tools:N,children:[{id:"builtin:debugging:console-logs",name:"Console Logs",tools:r2(a,"CONSOLE",{plural:"console_logs",singular:"console_log",label:"Console Logs"}),children:[]},{id:"builtin:debugging:analytics-events",name:"Analytics Events",tools:r2(a,"ANALYTICS",{plural:"analytics_events",singular:"analytics_event",label:"Analytics Events"}),children:[]},(O={...iX,openWorldHint:!0},{id:"builtin:debugging:push-notifications",name:"Push Notifications",children:[],tools:[i4({name:"get_push_notification_registrations",title:"Get push notification registrations",description:"List registered APNs devices with masked tokens.",inputSchema:e3.object({}),outputSchema:e3.object({registrations:e3.array(rT)}),annotations:iQ,handler:async()=>({registrations:(await n.registrations()).map(e=>{let t,r;return t=Array.isArray(e.supportedPushTypes)?e.supportedPushTypes:rR(e.pushTypesJson),r="string"==typeof e.token?e.token:"",{id:String(e.id),clientRegistrationId:String(e.clientRegistrationId),tokenMasked:"string"==typeof e.tokenMasked?e.tokenMasked:r?`${r.slice(0,8)}…${r.slice(-8)}`:"—",topic:String(e.topic),environment:String(e.environment),supportedPushTypes:Array.isArray(t)?t:[],displayName:String(e.displayName),deviceModel:"string"==typeof e.deviceModel?e.deviceModel:null,osVersion:"string"==typeof e.osVersion?e.osVersion:null,appVersion:"string"==typeof e.appVersion?e.appVersion:null,appBuild:"string"==typeof e.appBuild?e.appBuild:null,locale:"string"==typeof e.locale?e.locale:null,pushMagicConfigured:!!e.pushMagic,status:String(e.status),invalidatedAt:rC(e.invalidatedAt),lastFailureReason:"string"==typeof e.lastFailureReason?e.lastFailureReason:null,lastFailureAt:rC(e.lastFailureAt),lastRegisteredAt:rC(e.lastRegisteredAt),lastSentAt:rC(e.lastSentAt),createdAt:rC(e.createdAt),updatedAt:rC(e.updatedAt)}})})}),i4({name:"get_push_notification_settings",title:"Get push notification settings",description:"Inspect APNs credential status without returning secrets.",inputSchema:e3.object({}),outputSchema:e3.object({settings:rN}),annotations:iQ,handler:async()=>{var e;return{settings:{tokenConfigured:!!(e=await n.settings()).tokenConfigured,tokenTeamId:"string"==typeof e.tokenTeamId?e.tokenTeamId:null,tokenKeyId:"string"==typeof e.tokenKeyId?e.tokenKeyId:null,tokenPrivateKeyFingerprint:"string"==typeof e.tokenPrivateKeyFingerprint?e.tokenPrivateKeyFingerprint:null,tokenConfiguredAt:rC(e.tokenConfiguredAt),tokenLastUsedAt:rC(e.tokenLastUsedAt),tokenLastError:"string"==typeof e.tokenLastError?e.tokenLastError:null,certificates:Array.isArray(e.certificates)?e.certificates.map(e=>({id:String(e.id),name:String(e.name),topic:String(e.topic),environment:String(e.environment),fingerprint:String(e.fingerprint),expiresAt:rC(e.expiresAt),lastTestedAt:rC(e.lastTestedAt),lastError:"string"==typeof e.lastError?e.lastError:null,createdAt:rC(e.createdAt),updatedAt:rC(e.updatedAt)})):[],updatedAt:rC(e.updatedAt)}}}}),i4({name:"get_push_notification_channels",title:"Get push notification channels",description:"List configured APNs broadcast channels.",inputSchema:e3.object({}),outputSchema:e3.object({channels:e3.array(rO)}),annotations:iQ,handler:async()=>({channels:(await n.channels()).map(e=>({id:String(e.id),channelId:String(e.channelId),bundleId:String(e.bundleId),environment:String(e.environment),storagePolicy:String(e.storagePolicy),createdAt:rC(e.createdAt),updatedAt:rC(e.updatedAt)}))})}),i4({name:"get_push_notification_presets",title:"Get push notification presets",description:"List saved, validated push editor presets.",inputSchema:e3.object({}),outputSchema:e3.object({presets:e3.array(rP)}),annotations:iQ,handler:async()=>({presets:(await n.presets()).map(e=>({id:String(e.id),name:String(e.name),editor:rR(e.editor??e.editorJson),createdAt:rC(e.createdAt),updatedAt:rC(e.updatedAt)}))})}),i4({name:"get_push_notification_history",title:"Get push notification history",description:"List recent push batches and per-recipient delivery results.",inputSchema:e3.object({limit:e3.number().int().min(1).max(200).default(100)}),outputSchema:e3.object({batches:e3.array(rU)}),annotations:iQ,handler:async({limit:e})=>({batches:(await n.history(e)).map(e=>rB(e))})}),i4({name:"get_push_notification_history_item",title:"Get push notification history item",description:"Get one push batch and all delivery results by ID.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({batch:rU.nullable()}),annotations:iQ,handler:async({id:e})=>{let t=await n.historyItem(e);return{batch:t?rB(t):null}}}),i4({name:"preview_push_notification",title:"Preview push notification",description:"Validate an editor and return its final payload and APNs headers.",inputSchema:e3.object({editor:e3.record(e3.string(),e3.unknown())}),outputSchema:e3.object({editor:e3.unknown(),payload:e3.unknown(),headers:e3.record(e3.string(),e3.string()),byteLength:e3.number().int().nonnegative()}),annotations:iQ,handler:({editor:e})=>(0,r_.validatePushEditor)(e)}),i4({name:"send_push_notification",title:"Send push notification",description:"Validate and queue a raw APNs editor payload for delivery.",inputSchema:rq,outputSchema:e3.object({batch:rU}),annotations:O,handler:async e=>({batch:rB(await n.send(rF(e)))})}),i4({name:"send_push_notification_preset",title:"Send push notification preset",description:"Load a saved preset by ID and queue it for APNs delivery.",inputSchema:rM,outputSchema:e3.object({batch:rU}),annotations:O,handler:async e=>{let t=await n.preset(e.presetId);if(!t)throw Error("Push notification preset not found");let r={...e,editor:rR(t.editorJson)};return{batch:rB(await n.send(rF(r)))}}}),i4({name:"resend_push_notification",title:"Resend push notification",description:"Queue a historical non-draft, non-direct batch again.",inputSchema:e3.object({id:e3.string().min(1),requestId:e3.string().min(1)}),outputSchema:e3.object({batch:rU}),annotations:O,handler:async({id:e,requestId:t})=>({batch:rB(await n.resend(e,t))})}),i4({name:"rename_push_registration",title:"Rename push registration",description:"Rename an APNs device registration.",inputSchema:e3.object({id:e3.string().min(1),displayName:e3.string().min(1)}),outputSchema:e3.object({registration:e3.unknown()}),annotations:iX,handler:async({id:e,displayName:t})=>({registration:await n.renameRegistration(e,t)})}),i4({name:"set_push_registration_enabled",title:"Set push registration enabled",description:"Enable or disable an APNs device registration.",inputSchema:e3.object({id:e3.string().min(1),enabled:e3.boolean()}),outputSchema:e3.object({registration:e3.unknown()}),annotations:iX,handler:async({id:e,enabled:t})=>({registration:await n.setRegistrationActive(e,t)})}),i4({name:"delete_push_registration",title:"Delete push registration",description:"Permanently delete an APNs device registration.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.unknown()}),annotations:i0,handler:async({id:e})=>({deleted:await n.deleteRegistration(e)})}),i4({name:"save_push_preset",title:"Save push preset",description:"Create or update a reusable push-notification preset.",inputSchema:e3.object({id:e3.string().nullable().optional(),name:e3.string().min(1),editor:e3.record(e3.string(),e3.unknown())}),outputSchema:e3.object({preset:e3.unknown()}),annotations:iX,handler:async({id:e,name:t,editor:r})=>({preset:await n.savePreset(t,r,e)})}),i4({name:"delete_push_preset",title:"Delete push preset",description:"Delete a saved push-notification preset.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.unknown()}),annotations:i0,handler:async({id:e})=>({deleted:await n.deletePreset(e)})}),i4({name:"delete_push_history",title:"Delete push history",description:"Delete one push-notification history batch.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.unknown()}),annotations:i0,handler:async({id:e})=>({deleted:await n.deleteHistory(e)})}),i4({name:"clear_push_history",title:"Clear push history",description:"Permanently clear all push-notification history.",inputSchema:e3.object({}),outputSchema:e3.object({count:e3.unknown()}),annotations:i0,handler:async()=>({count:await n.clearHistory()})}),i4({name:"create_push_channel",title:"Create push channel",description:"Create a push-notification broadcast channel.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),outputSchema:e3.object({channel:e3.unknown()}),annotations:iX,handler:async({input:e})=>({channel:await n.createChannel(e)})}),i4({name:"delete_push_channel",title:"Delete push channel",description:"Delete a push-notification broadcast channel.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.unknown()}),annotations:i0,handler:async({id:e})=>({deleted:await n.deleteChannel(e)})}),i4({name:"retest_push_certificate",title:"Retest push certificate",description:"Retest an existing APNs certificate credential without returning its secret material.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({credential:e3.unknown()}),annotations:iX,handler:async({id:e})=>({credential:await n.retestCertificateCredential(e)})})]})]})),e.agents&&$.push((s=e.agents,{id:"builtin:agents",name:"Agents",children:[],tools:[i4({name:"get_agents",title:"Get agents",description:"List enrolled agents, capabilities, resources, and status.",inputSchema:rr,outputSchema:e3.object({agents:e3.array(ri)}),annotations:iQ,handler:async()=>({agents:(await s.listAgents()).map(e=>t6(e))})}),i4({name:"get_agent",title:"Get agent",description:"Get one enrolled agent by ID.",inputSchema:ro,outputSchema:e3.object({agent:ri.nullable()}),annotations:iQ,handler:async({agentId:e})=>{let t=await s.getAgent(e);return{agent:t?t6(t):null}}}),i4({name:"get_agent_settings",title:"Get agent settings",description:"Get repository, build, and Derived Data paths for an agent.",inputSchema:ro,outputSchema:e3.object({settings:ra}),annotations:iQ,handler:async({agentId:e})=>{let t=await s.getAgent(e);if(!t)throw Error("Agent not found");return{settings:t8(t)}}}),i4({name:"get_agent_jobs",title:"Get agent jobs",description:"List recent user-visible jobs for an agent.",inputSchema:e3.object({agentId:e3.string().min(1),limit:e3.number().int().min(1).max(200).default(50)}),outputSchema:e3.object({jobs:e3.array(rn)}),annotations:iQ,handler:async({agentId:e,limit:t})=>({jobs:(await s.listJobs(e,t)).map(e=>t5(e))})}),i4({name:"get_agent_job",title:"Get agent job",description:"Get one agent job and its result by ID.",inputSchema:e3.object({jobId:e3.string().min(1)}),outputSchema:e3.object({job:rn.nullable()}),annotations:iQ,handler:async({jobId:e})=>{let t=await s.getJob(e);return{job:t?t5(t):null}}}),i4({name:"get_agent_job_logs",title:"Get agent job logs",description:"Fetch ordered job logs after an optional sequence number.",inputSchema:e3.object({jobId:e3.string().min(1),afterSequence:e3.number().int().min(-1).default(-1)}),outputSchema:e3.object({logs:e3.array(rs)}),annotations:iQ,handler:async({jobId:e,afterSequence:t})=>({logs:(await s.listLogs(e,t)).map(e=>({id:String(e.id),jobId:String(e.jobId),sequence:Number(e.sequence),stream:String(e.stream),message:String(e.message),createdAt:t4(e.createdAt)}))})}),i4({name:"update_agent_base_repo_directory",title:"Update agent base repository directory",description:"Set or reset the absolute base repository directory.",inputSchema:e3.object({agentId:e3.string().min(1),baseRepoDirectory:e3.string().min(1).nullable()}),outputSchema:e3.object({settings:ra}),annotations:iX,handler:async({agentId:e,baseRepoDirectory:t})=>({settings:t8(await s.updateBaseRepoDirectory(e,t))})}),i4({name:"update_agent_builds_directory",title:"Update agent builds directory",description:"Set or reset the absolute build-output directory.",inputSchema:e3.object({agentId:e3.string().min(1),buildsDirectory:e3.string().min(1).nullable()}),outputSchema:e3.object({settings:ra}),annotations:iX,handler:async({agentId:e,buildsDirectory:t})=>({settings:t8(await s.updateBuildsDirectory(e,t))})}),i4({name:"update_agent_derived_data_settings",title:"Update agent Derived Data settings",description:"Set default, absolute, or worktree-relative Derived Data paths.",inputSchema:e3.object({agentId:e3.string().min(1),mode:e3.enum(["DEFAULT","ABSOLUTE","RELATIVE"]),path:e3.string().min(1).nullable().default(null)}),outputSchema:e3.object({settings:ra}),annotations:iX,handler:async({agentId:e,mode:t,path:r})=>({settings:t8(await s.updateDerivedDataSettings(e,t,r))})}),i4({name:"request_agent_codebase_reconcile",title:"Request agent codebase reconcile",description:"Ask an online agent to reconcile its registered codebases.",inputSchema:ro,outputSchema:e3.object({requested:e3.boolean()}),annotations:iX,handler:async({agentId:e})=>({requested:await s.requestCodebaseReconcile([e])===1})}),i4({name:"cancel_agent_job",title:"Cancel agent job",description:"Cancel a queued or running agent job.",inputSchema:e3.object({jobId:e3.string().min(1)}),outputSchema:e3.object({job:rn}),annotations:i0,handler:async({jobId:e})=>({job:t5(await s.cancelJob(e))})}),i4({name:"get_agent_cadence_settings",title:"Get agent cadence settings",description:"Get effective scan, reconciliation, fetch, and heartbeat intervals for an agent.",inputSchema:ro,outputSchema:e3.object({settings:e3.unknown()}),handler:async({agentId:e})=>({settings:await s.cadenceSettings(e)})}),i4({name:"update_agent_cadence_settings",title:"Update agent cadence settings",description:"Update scan, reconciliation, fetch, and heartbeat intervals for an agent.",inputSchema:ro.extend({settings:e3.object({codebaseScanIntervalSeconds:e3.number().int().positive(),jobReconciliationIntervalSeconds:e3.number().int().positive(),gitFetchIntervalSeconds:e3.number().int().positive(),heartbeatIntervalSeconds:e3.number().int().positive()})}),outputSchema:e3.object({settings:e3.unknown()}),annotations:iX,handler:async({agentId:e,settings:t})=>({settings:await s.updateCadenceSettings(e,t)})}),i4({name:"delete_agent",title:"Delete agent",description:"Permanently delete an enrolled agent and its control-plane records.",inputSchema:ro,outputSchema:e3.object({deleted:e3.boolean()}),annotations:i0,handler:async({agentId:e})=>({deleted:await s.deleteAgent(e)})})]})),e.diskSpace&&$.push((o=e.diskSpace,{id:"builtin:disk-space",name:"Disk Space",children:[],tools:[i4({name:"get_disk_space_overview",title:"Get disk-space overview",description:"Get global thresholds and canonical Derived Data disk snapshots for every agent.",inputSchema:e3.object({}),outputSchema:e3.object({settings:ii,agents:e3.array(iu)}),annotations:iQ,handler:async()=>{let e=await o.overview();return{settings:e.settings,agents:e.agents.map(t=>r9(e.settings,t))}}}),i4({name:"get_disk_space_settings",title:"Get disk-space settings",description:"Get global disk thresholds and report timing settings.",inputSchema:e3.object({}),outputSchema:e3.object({settings:ii}),annotations:iQ,handler:async()=>({settings:await o.settings()})}),i4({name:"get_agent_disk_space",title:"Get agent disk space",description:"Get one agent's canonical Derived Data disk-space monitor snapshot.",inputSchema:ic,outputSchema:e3.object({snapshot:iu}),annotations:iQ,handler:async({agentId:e})=>({snapshot:await o.snapshot(e)})}),i4({name:"update_disk_space_settings",title:"Update disk-space settings",description:"Update the global normal and pressure free-space thresholds in GiB.",inputSchema:e3.object({normalThresholdGiB:e3.number().positive(),pressureThresholdGiB:e3.number().positive()}),outputSchema:e3.object({settings:ii}),annotations:iX,handler:async e=>({settings:await o.updateSettings(e)})}),i4({name:"set_agent_disk_space_monitoring",title:"Set agent disk-space monitoring",description:"Enable or disable Derived Data disk-space monitoring for an agent.",inputSchema:ic.extend({enabled:e3.boolean()}),outputSchema:e3.object({snapshot:iu}),annotations:iX,handler:async({agentId:e,enabled:t})=>(await o.setMonitoring(e,t),{snapshot:await o.snapshot(e)})}),i4({name:"set_agent_disk_space_pressure_mode",title:"Set agent disk pressure mode",description:"Enable or clear manual disk pressure mode for an agent.",inputSchema:ic.extend({enabled:e3.boolean()}),outputSchema:e3.object({snapshot:iu}),annotations:iX,handler:async({agentId:e,enabled:t})=>(await o.setManualPressureMode(e,t),{snapshot:await o.snapshot(e)})}),i4({name:"request_agent_disk_space_refresh",title:"Request agent disk-space refresh",description:"Ask an agent to collect and report disk-space telemetry immediately.",inputSchema:ic,outputSchema:e3.object({agentId:e3.string(),requestedAt:e3.string(),previousReportedAt:e3.string().nullable()}),annotations:iX,handler:async({agentId:e})=>o.requestRefresh(e)})]})),e.worktrees&&$.push({id:"builtin:worktrees",name:"Worktrees",children:[],tools:[rp({name:"get_worktrees",title:"Get worktrees",description:"Get the current worktree overview grouped by agent and codebase.",inputSchema:rh,service:l=e.worktrees,method:"overview",arguments:()=>[],resultKey:"overview"}),i4({name:"get_worktree",title:"Get worktree",description:"Get one current worktree by ID.",inputSchema:iW,outputSchema:e3.object({worktree:e3.unknown().nullable()}),handler:async({id:e})=>({worktree:(await l.overview()).agents.flatMap(e=>e.codebases).flatMap(e=>e.worktrees).find(t=>t.id===e)??null})}),rp({name:"get_hidden_worktrees",title:"Get hidden worktrees",description:"List worktrees no longer present on their agents.",inputSchema:rh,service:l,method:"hidden",arguments:()=>[],resultKey:"worktrees"}),rp({name:"inspect_worktree",title:"Inspect worktree",description:"Request a fresh inspection of a worktree.",inputSchema:iJ,service:l,method:"inspect",arguments:e=>[e.worktreeId,e.requestId],resultKey:"job",annotations:iX}),rp({name:"inspect_worktree_diff",title:"Inspect worktree diff",description:"Inspect a worktree diff for a scope, file, or commit.",inputSchema:iJ.extend({scope:e3.string().min(1),path:e3.string().nullable().optional(),previousPath:e3.string().nullable().optional(),commitSha:e3.string().nullable().optional()}),service:l,method:"inspectDiff",arguments:e=>[e.worktreeId,{scope:e.scope,path:e.path,previousPath:e.previousPath,commitSha:e.commitSha},e.requestId],resultKey:"inspection",annotations:iX}),rp({name:"refresh_worktrees",title:"Refresh worktrees",description:"Ask connected agents to refresh their worktree reports.",inputSchema:rh,service:l,method:"requestRefresh",arguments:()=>[],resultKey:"requested",annotations:iX}),rp({name:"refresh_worktree_pull_request",title:"Refresh worktree pull request",description:"Refresh the GitHub pull request attached to a worktree.",inputSchema:iW,service:l,method:"refreshPullRequest",arguments:({id:e})=>[e],resultKey:"worktree",annotations:iX}),rp({name:"create_worktree",title:"Create worktree",description:"Create a worktree from a new, existing, or Jira ticket branch.",inputSchema:e3.object({codebaseId:e3.string().min(1),selection:iz,requestId:e3.string().min(1)}),service:l,method:"createWorktree",resultKey:"worktree",annotations:{...iX,idempotentHint:!1}}),rp({name:"change_worktree_branch",title:"Change worktree branch",description:"Switch a worktree to another branch selection.",inputSchema:e3.object({worktreeId:e3.string().min(1),selection:iz,requestId:e3.string().min(1),stashOnFailure:e3.boolean().nullable().optional()}),service:l,method:"changeWorktreeBranch",resultKey:"job",annotations:iX}),rp({name:"move_worktree",title:"Move worktree",description:"Move work from one worktree into another codebase or worktree.",inputSchema:e3.object({sourceWorktreeId:e3.string().min(1),targetCodebaseId:e3.string().min(1),targetWorktreeId:e3.string().nullable().optional(),deleteSource:e3.boolean().default(!1),requestId:e3.string().min(1)}),service:l,method:"moveWorktree",resultKey:"move",annotations:iX}),rp({name:"retry_worktree_move_with_stash",title:"Retry worktree move with stash",description:"Retry a blocked worktree move after stashing changes.",inputSchema:iW,service:l,method:"retryWorktreeMoveWithStash",arguments:({id:e})=>[e],resultKey:"move",annotations:iX}),rp({name:"cancel_worktree_move",title:"Cancel worktree move",description:"Cancel an active worktree move.",inputSchema:iW,service:l,method:"cancelWorktreeMove",arguments:({id:e})=>[e],resultKey:"move",annotations:iX}),rp({name:"delete_worktree",title:"Delete worktree",description:"Delete a worktree and optionally its remote branch.",inputSchema:e3.object({worktreeId:e3.string().min(1),deleteRemoteBranch:e3.boolean().default(!1),requestId:e3.string().min(1)}),service:l,method:"deleteWorktree",resultKey:"job",annotations:i0}),rp({name:"run_worktree_operation",title:"Run worktree operation",description:"Run a supported high-level operation in a worktree.",inputSchema:iJ.extend({operation:e3.string().min(1)}),service:l,method:"runOperation",arguments:e=>[e.worktreeId,e.operation,e.requestId],resultKey:"job",annotations:iX}),rp({name:"run_worktree_git_operation",title:"Run worktree Git operation",description:"Run a supported Git operation in a worktree.",inputSchema:iJ.extend({operation:e3.string().min(1),branch:e3.string().nullable().optional(),stashOid:e3.string().nullable().optional(),stashChanges:e3.boolean().nullable().optional()}),service:l,method:"runGitOperation",resultKey:"job",annotations:iX}),i4({name:"update_worktree_metadata",title:"Update worktree metadata",description:"Update a worktree base branch and/or highlight color.",inputSchema:e3.object({id:e3.string().min(1),baseBranch:e3.string().nullable().optional(),highlightColor:e3.string().nullable().optional()}),outputSchema:e3.object({worktree:e3.unknown()}),annotations:iX,handler:async({id:e,baseBranch:t,highlightColor:r})=>{let i=null;if(void 0!==t&&(i=await l.updateBaseBranch(e,t)),void 0!==r&&(i=await l.updateHighlight(e,r)),void 0===t&&void 0===r)throw Error("At least one metadata field is required");return{worktree:i}}}),rp({name:"set_worktree_tags",title:"Set worktree tags",description:"Replace the tags assigned to a worktree.",inputSchema:e3.object({id:e3.string().min(1),tagIds:e3.array(e3.string().min(1))}),service:l,method:"setTags",arguments:e=>[e.id,e.tagIds],resultKey:"worktree",annotations:iX})]}),e.runs&&$.push((c=e.runs,{id:"builtin:agent-runs",name:"Agent Runs",children:[],tools:[rp({name:"get_agent_runs",title:"Get agent runs",description:"List agent runs with kind, archive, provider, origin, search, and pagination filters.",inputSchema:e3.object({kind:e3.enum(["SESSION","PLAN"]).default("SESSION"),search:e3.string().nullable().optional(),archive:e3.string().default("ACTIVE"),provider:e3.string().nullable().optional(),origin:e3.string().nullable().optional(),first:e3.number().int().min(1).max(200).default(100),after:e3.string().nullable().optional()}),service:c,method:"list",resultKey:"page"}),rp({name:"get_agent_run",title:"Get agent run",description:"Get an agent run without exposing its native session transcript.",inputSchema:ib,service:c,method:"get",arguments:({runId:e})=>[e],resultKey:"run"}),rp({name:"get_run_events",title:"Get run events",description:"Get normalized run events; native provider payloads are redacted.",inputSchema:ib.extend({search:e3.string().nullable().optional(),afterSequence:e3.number().int().default(-1),first:e3.number().int().min(1).max(500).default(200),includeSuperseded:e3.boolean().default(!1)}),service:c,method:"events",resultKey:"events"}),rp({name:"get_run_questions",title:"Get run questions",description:"Get question batches for a run.",inputSchema:ib.extend({first:e3.number().int().min(1).max(200).default(100),after:e3.string().nullable().optional()}),service:c,method:"questions",resultKey:"page"}),rp({name:"get_run_usage",title:"Get run usage",description:"Get token and cost usage summarized for a run.",inputSchema:ib,service:c,method:"usage",arguments:({runId:e})=>[e],resultKey:"usage"}),rp({name:"get_run_linked_items",title:"Get linked run items",description:"Get runs linked by follow-up, plan, or parent relationships.",inputSchema:ib,service:c,method:"linkedItems",arguments:({runId:e})=>[e],resultKey:"runs"}),rp({name:"get_run_provider_catalog",title:"Get run provider catalog",description:"Get provider, model, and reasoning-effort choices for a run or worktree.",inputSchema:e3.object({runId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional()}),service:c,method:"providerCatalog",resultKey:"providers"}),rp({name:"create_agent_run",title:"Create agent run",description:"Create and queue a new agent run.",inputSchema:iv,service:c,method:"create",resultKey:"run",annotations:{...iX,idempotentHint:!1}}),rp({name:"play_plan",title:"Play plan",description:"Create a run from an existing plan run.",inputSchema:e3.object({planId:e3.string().min(1)}),service:c,method:"playPlan",arguments:({planId:e})=>[e],resultKey:"run",annotations:{...iX,idempotentHint:!1}}),rp({name:"create_run_follow_up",title:"Create run follow-up",description:"Create a follow-up run linked to a source run.",inputSchema:e3.object({sourceId:e3.string().min(1),input:iv}),service:c,method:"followUp",arguments:({sourceId:e,input:t})=>[e,t],resultKey:"run",annotations:{...iX,idempotentHint:!1}}),rp({name:"steer_agent_run",title:"Steer agent run",description:"Send additional guidance to an active run.",inputSchema:ib.extend({prompt:e3.string().min(1),attachmentIds:e3.array(e3.string().min(1)).default([])}),service:c,method:"steer",arguments:e=>[e.runId,e.prompt,e.attachmentIds],resultKey:"run",annotations:iX}),rp({name:"answer_run_question",title:"Answer run question",description:"Answer a pending agent question batch.",inputSchema:e3.object({batchId:e3.string().min(1),answers:e3.unknown()}),service:c,method:"answerQuestion",arguments:({batchId:e,answers:t})=>[e,t],resultKey:"run",annotations:iX}),rp({name:"revise_run_answer",title:"Revise run answer",description:"Revise an answer and optionally stash or roll back worktree changes.",inputSchema:e3.object({batchId:e3.string().min(1),answers:e3.unknown(),stash:e3.boolean().default(!1),rollback:e3.boolean().default(!0)}),service:c,method:"reviseAnswer",arguments:e=>[e.batchId,e.answers,e.stash,e.rollback],resultKey:"run",annotations:iX}),rp({name:"pause_agent_run",title:"Pause agent run",description:"Pause an active agent run.",inputSchema:ib,service:c,method:"lifecycle",arguments:({runId:e})=>[e,"PAUSE"],resultKey:"run",annotations:iX}),rp({name:"continue_agent_run",title:"Continue agent run",description:"Continue a paused agent run.",inputSchema:ib,service:c,method:"lifecycle",arguments:({runId:e})=>[e,"CONTINUE"],resultKey:"run",annotations:iX}),rp({name:"cancel_agent_run",title:"Cancel agent run",description:"Cancel an active agent run.",inputSchema:ib,service:c,method:"lifecycle",arguments:({runId:e})=>[e,"CANCEL"],resultKey:"run",annotations:iX}),rp({name:"archive_agent_runs",title:"Archive agent runs",description:"Archive or restore agent runs.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1),archived:e3.boolean().default(!0)}),service:c,method:"archive",arguments:({ids:e,archived:t})=>[e,t],resultKey:"count",annotations:iX}),rp({name:"delete_agent_runs",title:"Delete agent runs",description:"Permanently delete agent runs and their stored normalized history.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),service:c,method:"deleteRuns",arguments:({ids:e})=>[e],resultKey:"count",annotations:i0})]})),e.commands&&$.push((d=e.commands,{id:"builtin:commands",name:"Commands",children:[],tools:[rp({name:"get_commands",title:"Get commands",description:"List saved command definitions.",inputSchema:e3.object({includeArchived:e3.boolean().default(!1)}),service:d,method:"listDefinitions",arguments:({includeArchived:e})=>[e],resultKey:"commands"}),rp({name:"get_command",title:"Get command",description:"Get one command definition.",inputSchema:e3.object({id:e3.string().min(1)}),service:d,method:"getDefinition",arguments:({id:e})=>[e],resultKey:"command"}),i4({name:"get_eligible_commands",title:"Get eligible commands",description:"List commands eligible for an agent or worktree target.",inputSchema:e3.discriminatedUnion("targetType",[e3.object({targetType:e3.literal("AGENT"),agentId:e3.string().min(1)}),e3.object({targetType:e3.literal("WORKTREE"),worktreeId:e3.string().min(1)})]),outputSchema:e3.object({commands:e3.unknown()}),handler:async e=>({commands:rd(await ru(d,"AGENT"===e.targetType?"eligibleForAgent":"eligibleForWorktree",["AGENT"===e.targetType?e.agentId:e.worktreeId]))})}),rp({name:"get_command_runs",title:"Get command runs",description:"List command runs with target, archive, search, and cursor filters.",inputSchema:e3.object({includeArchived:e3.boolean().default(!1),search:e3.string().nullable().optional(),agentId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional(),first:e3.number().int().min(1).max(200).default(50),after:e3.string().nullable().optional()}),service:d,method:"listRuns",resultKey:"page"}),rp({name:"get_command_run",title:"Get command run",description:"Get one command run and its attempts.",inputSchema:e3.object({id:e3.string().min(1)}),service:d,method:"getRun",arguments:({id:e})=>[e],resultKey:"run"}),rp({name:"get_command_run_output",title:"Get command run output",description:"Read paginated terminal output chunks for a command run.",inputSchema:e3.object({runId:e3.string().min(1),afterAttempt:e3.number().int().min(0).default(0),afterSequence:e3.number().int().default(-1),first:e3.number().int().min(1).max(5e3).default(1e3)}),service:d,method:"listOutput",arguments:e=>[e.runId,e.afterAttempt,e.afterSequence,e.first],resultKey:"chunks"}),rp({name:"start_command",title:"Start command",description:"Start a saved command on an eligible agent or worktree.",inputSchema:e3.object({commandId:e3.string().min(1),agentId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional(),origin:e3.string().default("MANUAL"),idempotencyKey:e3.string().nullable().optional()}),service:d,method:"startRun",resultKey:"run",annotations:iX}),rp({name:"start_custom_command",title:"Start custom command",description:"Start an ad hoc shell command on an agent or worktree.",inputSchema:e3.object({script:e3.string().min(1),agentId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional(),origin:e3.string().default("MANUAL"),idempotencyKey:e3.string().nullable().optional()}),service:d,method:"startCustomRun",resultKey:"run",annotations:iX}),rp({name:"terminate_command_run",title:"Terminate command run",description:"Request termination of an active command run.",inputSchema:e3.object({id:e3.string().min(1)}),service:d,method:"terminateRun",arguments:({id:e})=>[e],resultKey:"run",annotations:iX}),rp({name:"rerun_command",title:"Rerun command",description:"Create a new run from a previous command snapshot.",inputSchema:e3.object({id:e3.string().min(1)}),service:d,method:"rerun",arguments:({id:e})=>[e],resultKey:"run",annotations:{...iX,idempotentHint:!1}}),rp({name:"create_command",title:"Create command",description:"Create a saved command definition.",inputSchema:id,service:d,method:"createDefinition",resultKey:"command",annotations:{...iX,idempotentHint:!1}}),rp({name:"update_command",title:"Update command",description:"Replace a saved command definition.",inputSchema:e3.object({id:e3.string().min(1),input:id}),service:d,method:"updateDefinition",arguments:({id:e,input:t})=>[e,t],resultKey:"command",annotations:iX}),rp({name:"archive_command",title:"Archive command",description:"Archive or restore a command definition.",inputSchema:e3.object({id:e3.string().min(1),archived:e3.boolean().default(!0)}),service:d,method:"archiveDefinition",arguments:({id:e,archived:t})=>[e,t],resultKey:"command",annotations:iX}),rp({name:"archive_command_runs",title:"Archive command runs",description:"Archive or restore command runs.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1),archived:e3.boolean().default(!0)}),service:d,method:"archiveRuns",arguments:({ids:e,archived:t})=>[e,t],resultKey:"updated",annotations:iX}),rp({name:"delete_command_runs",title:"Delete command runs",description:"Permanently delete command runs and stored output.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),service:d,method:"deleteRuns",arguments:({ids:e})=>[e],resultKey:"count",annotations:i0})]})),e.jira&&$.push((p=e.jira,{id:"builtin:jira",name:"Jira",children:[],tools:[rp({name:"get_jira_status",title:"Get Jira status",description:"Test the configured Jira connection without exposing credentials.",inputSchema:e3.object({}),service:p,method:"testConnection",arguments:()=>[],resultKey:"status",annotations:i1}),rp({name:"get_jira_projects",title:"Get Jira projects",description:"List configured Jira projects and display settings.",inputSchema:e3.object({}),service:p,method:"listProjects",arguments:()=>[],resultKey:"projects",annotations:i1}),i4({name:"get_jira_sources",title:"Get Jira sources",description:"List ticket-board sources configured across Jira projects.",inputSchema:e3.object({}),outputSchema:e3.object({sources:e3.unknown()}),annotations:i1,handler:async()=>({sources:rd((await p.listProjects()).flatMap(e=>e.sources))})}),rp({name:"get_jira_board",title:"Get Jira board",description:"Get tickets for a configured Jira source.",inputSchema:e3.object({sourceId:e3.string().min(1),refresh:e3.boolean().default(!1)}),service:p,method:"ticketBoard",arguments:({sourceId:e,refresh:t})=>[e,t],resultKey:"board",annotations:i1}),rp({name:"get_jira_ticket",title:"Get Jira ticket",description:"Get a Jira ticket and its normalized editable metadata.",inputSchema:ig.extend({refresh:e3.boolean().default(!1)}),service:p,method:"ticket",arguments:({issueKey:e,refresh:t})=>[e,t],resultKey:"ticket",annotations:i1}),rp({name:"get_jira_assignable_users",title:"Get Jira assignable users",description:"Search users who can be assigned to a Jira ticket.",inputSchema:ig.extend({query:e3.string().default("")}),service:p,method:"assignableUsers",arguments:({issueKey:e,query:t})=>[e,t],resultKey:"users",annotations:i1}),rp({name:"get_jira_transitions",title:"Get Jira transitions",description:"Get available transitions for a Jira ticket.",inputSchema:ig,service:p,method:"ticketTransitions",arguments:({issueKey:e})=>[e],resultKey:"transitions",annotations:i1}),rp({name:"get_jira_edit_fields",title:"Get Jira edit fields",description:"Get editable fields and allowed values for a Jira ticket.",inputSchema:ig,service:p,method:"ticketEditFields",arguments:({issueKey:e})=>[e],resultKey:"fields",annotations:i1}),rp({name:"get_jira_ticket_changes",title:"Get Jira ticket changes",description:"Get paginated Jira ticket changelog entries.",inputSchema:ig.extend({limit:e3.number().int().min(1).max(200).default(50),offset:e3.number().int().min(0).default(0)}),service:p,method:"ticketChanges",arguments:e=>[e.issueKey,e.limit,e.offset],resultKey:"page",annotations:i1}),rp({name:"get_jira_worklogs",title:"Get Jira worklogs",description:"Get paginated worklogs for a Jira ticket.",inputSchema:ig.extend({limit:e3.number().int().min(1).max(200).default(50),offset:e3.number().int().min(0).default(0)}),service:p,method:"ticketWorklogs",arguments:e=>[e.issueKey,e.limit,e.offset],resultKey:"page",annotations:i1}),rp({name:"add_jira_comment",title:"Add Jira comment",description:"Add a plain-text or Markdown comment to a Jira ticket.",inputSchema:ig.extend({content:iy}),service:p,method:"addComment",arguments:({issueKey:e,content:t})=>[e,t],resultKey:"ticket",annotations:{...i2,idempotentHint:!1}}),rp({name:"assign_jira_ticket",title:"Assign Jira ticket",description:"Assign or unassign a Jira ticket.",inputSchema:ig.extend({accountId:e3.string().nullable().optional()}),service:p,method:"assignTicket",arguments:({issueKey:e,accountId:t})=>[e,t??null],resultKey:"ticket",annotations:i2}),rp({name:"transition_jira_ticket",title:"Transition Jira ticket",description:"Apply an available status transition to a Jira ticket.",inputSchema:ig.extend({transitionId:e3.string().min(1)}),service:p,method:"transitionTicket",arguments:({issueKey:e,transitionId:t})=>[e,t],resultKey:"ticket",annotations:i2}),rp({name:"update_jira_ticket",title:"Update Jira ticket",description:"Update supported editable fields on a Jira ticket.",inputSchema:ig.extend({summary:e3.string().nullable().optional(),description:iy.nullable().optional(),priorityId:e3.string().nullable().optional(),labels:e3.array(e3.string()).nullable().optional(),componentIds:e3.array(e3.string()).nullable().optional(),fixVersionIds:e3.array(e3.string()).nullable().optional(),affectedVersionIds:e3.array(e3.string()).nullable().optional(),dueDate:e3.string().nullable().optional()}),service:p,method:"updateTicket",resultKey:"ticket",annotations:i2}),rp({name:"resolve_jira_branch",title:"Resolve Jira branch",description:"Resolve the configured branch name for a Jira ticket.",inputSchema:ig,service:p,method:"branchTicket",arguments:({issueKey:e})=>[e],resultKey:"branch",annotations:i1}),rp({name:"create_jira_ticket",title:"Create Jira ticket",description:"Create a Jira ticket with typed core fields and optional additional fields.",inputSchema:e3.object({projectKey:e3.string().min(1),issueTypeId:e3.string().min(1),summary:e3.string().min(1),description:iy.nullable().optional(),fields:e3.record(e3.string(),e3.unknown()).nullable().optional()}),service:p,method:"createTicket",resultKey:"ticket",annotations:{...i2,idempotentHint:!1}}),rp({name:"add_jira_worklog",title:"Add Jira worklog",description:"Add a time-spent worklog to a Jira ticket.",inputSchema:ig.extend({timeSpentSeconds:e3.number().int().positive(),startedAt:e3.string().nullable().optional(),comment:iy.nullable().optional()}),service:p,method:"addWorklog",resultKey:"ticket",annotations:{...i2,idempotentHint:!1}}),rp({name:"link_jira_tickets",title:"Link Jira tickets",description:"Create a typed relationship between two Jira tickets.",inputSchema:e3.object({inwardIssueKey:e3.string().min(1),outwardIssueKey:e3.string().min(1),linkType:e3.string().min(1)}),service:p,method:"linkTickets",resultKey:"ticket",annotations:{...i2,idempotentHint:!1}})]})),e.github&&$.push((h=e.github,{id:"builtin:github",name:"GitHub",children:[],tools:[rp({name:"get_github_status",title:"Get GitHub status",description:"Test the configured GitHub connection without exposing credentials.",inputSchema:e3.object({}),service:h,method:"testConnection",arguments:()=>[],resultKey:"status",annotations:i1}),rp({name:"get_github_repositories",title:"Get GitHub repositories",description:"List configured GitHub repositories.",inputSchema:e3.object({}),service:h,method:"listRepositories",arguments:()=>[],resultKey:"repositories",annotations:i1}),rp({name:"get_pull_requests",title:"Get pull requests",description:"List GitHub pull requests by scope, repository, and state.",inputSchema:e3.object({scope:e3.enum(["MINE","REVIEW_REQUESTED","REPOSITORY"]),repositoryId:e3.string().nullable().optional(),state:e3.enum(["ALL","OPEN","CLOSED","MERGED"]).default("OPEN"),first:e3.number().int().min(1).max(100).default(25),after:e3.string().nullable().optional(),includePipelineJobs:e3.boolean().default(!1)}),service:h,method:"pullRequests",arguments:e=>[e.scope,e.repositoryId,{includePipelineJobs:e.includePipelineJobs,state:e.state,first:e.first,after:e.after,requestSource:ip}],resultKey:"page",annotations:i1}),rp({name:"get_pull_request",title:"Get pull request",description:"Get a GitHub pull request by repository and number.",inputSchema:im,service:h,method:"pullRequest",arguments:e=>[e.owner,e.name,e.number,ip],resultKey:"pullRequest",annotations:i1}),rp({name:"get_pull_request_merge_options",title:"Get pull request merge options",description:"Get merge eligibility, methods, and commit-email choices for a pull request.",inputSchema:im,service:h,method:"pullRequestMergeOptions",arguments:e=>[e.owner,e.name,e.number,ip],resultKey:"options",annotations:i1}),rp({name:"get_review_threads",title:"Get review threads",description:"List tracked GitHub review threads.",inputSchema:e3.object({}),service:h,method:"reviewThreads",arguments:()=>[],resultKey:"threads",annotations:i1}),rp({name:"get_actions_runs",title:"Get Actions runs",description:"List GitHub Actions workflow runs with repository and branch filters.",inputSchema:e3.object({codebaseRepositoryId:e3.string().nullable().optional(),branch:e3.string().nullable().optional(),workflowId:e3.string().nullable().optional(),first:e3.number().int().min(1).max(100).default(25),after:e3.string().nullable().optional()}),service:h,method:"actionsWorkflowRuns",arguments:e=>[e.codebaseRepositoryId,e.first,e.after,e.branch,e.workflowId,ip],resultKey:"page",annotations:i1}),rp({name:"get_actions_jobs",title:"Get Actions jobs",description:"Get jobs for a GitHub Actions workflow run.",inputSchema:e3.object({codebaseRepositoryId:e3.string().min(1),workflowRunId:e3.string().min(1)}),service:h,method:"actionsWorkflowJobs",arguments:e=>[e.codebaseRepositoryId,e.workflowRunId,ip],resultKey:"jobs",annotations:i1}),rp({name:"get_actions_run_attempt",title:"Get Actions run attempt",description:"Get one attempt of a GitHub Actions workflow run.",inputSchema:e3.object({repositoryId:e3.string().min(1),workflowRunId:e3.string().min(1),attempt:e3.number().int().positive(),includeJobs:e3.boolean().default(!0)}),service:h,method:"actionsWorkflowRunAttempt",arguments:e=>[e.repositoryId,e.workflowRunId,e.attempt,e.includeJobs,ip],resultKey:"attempt",annotations:i1}),rp({name:"get_repository_workflows",title:"Get repository workflows",description:"List GitHub Actions workflows for a configured repository.",inputSchema:e3.object({codebaseRepositoryId:e3.string().min(1)}),service:h,method:"repositoryWorkflows",arguments:({codebaseRepositoryId:e})=>[e,ip],resultKey:"workflows",annotations:i1}),rp({name:"get_auto_retry_rules",title:"Get auto-retry rules",description:"List GitHub pipeline auto-retry rules.",inputSchema:e3.object({codebaseRepositoryId:e3.string().nullable().optional(),workflowRunId:e3.string().nullable().optional()}),service:h,method:"autoRetryRules",resultKey:"rules",annotations:i1}),rp({name:"get_github_rate_limits",title:"Get GitHub rate limits",description:"Get recently observed GitHub API rate-limit snapshots.",inputSchema:e3.object({}),service:h,method:"rateLimitSnapshots",arguments:()=>[],resultKey:"snapshots",annotations:i1}),rp({name:"create_pull_request",title:"Create pull request",description:"Create a GitHub pull request using configured GitHub App credentials.",inputSchema:e3.object({owner:e3.string().min(1),name:e3.string().min(1),baseRefName:e3.string().min(1),headRefName:e3.string().min(1),title:e3.string().min(1),body:e3.string().nullable().optional(),draft:e3.boolean().nullable().optional()}),service:h,method:"createPullRequest",resultKey:"pullRequest",annotations:{...i2,idempotentHint:!1}}),rp({name:"update_pull_request",title:"Update pull request",description:"Update a pull request title, body, or draft state on GitHub.",inputSchema:im.extend({title:e3.string().nullable().optional(),body:e3.string().nullable().optional(),draft:e3.boolean().nullable().optional()}),service:h,method:"updatePullRequest",resultKey:"pullRequest",annotations:i2}),rp({name:"submit_pull_request_review",title:"Submit pull request review",description:"Approve, comment on, or request changes to a pull request.",inputSchema:im.extend({event:e3.enum(["APPROVE","REQUEST_CHANGES","COMMENT"]),body:e3.string().nullable().optional()}),service:h,method:"submitPullRequestReview",resultKey:"pullRequest",annotations:{...i2,idempotentHint:!1}}),rp({name:"request_pull_request_reviewers",title:"Request pull request reviewers",description:"Request GitHub users or organization teams to review a pull request.",inputSchema:im.extend({reviewers:e3.array(e3.string()).default([]),teamReviewers:e3.array(e3.string()).default([])}),service:h,method:"requestPullRequestReviewers",resultKey:"pullRequest",annotations:i2}),rp({name:"dispatch_github_workflow",title:"Dispatch GitHub workflow",description:"Dispatch a workflow_dispatch-enabled GitHub Actions workflow.",inputSchema:e3.object({repositoryId:e3.string().min(1),workflowId:e3.string().min(1),ref:e3.string().min(1),inputs:e3.record(e3.string(),e3.string()).nullable().optional()}),service:h,method:"dispatchWorkflow",resultKey:"dispatched",annotations:{...i2,idempotentHint:!1}}),rp({name:"merge_pull_request",title:"Merge pull request",description:"Merge a GitHub pull request with an enabled merge method.",inputSchema:im.extend({method:e3.enum(["MERGE","SQUASH","REBASE"]),commitHeadline:e3.string().min(1),commitBody:e3.string().default(""),authorEmail:e3.string().nullable().optional()}),service:h,method:"mergePullRequest",arguments:e=>[e,ip],resultKey:"pullRequest",annotations:i2}),rp({name:"set_pull_request_labels",title:"Set pull request labels",description:"Replace labels on a GitHub pull request.",inputSchema:im.extend({labels:e3.array(e3.string())}),service:h,method:"setPullRequestLabels",resultKey:"pullRequest",annotations:i2}),rp({name:"reply_review_thread",title:"Reply to review thread",description:"Post a reply to a GitHub pull-request review thread.",inputSchema:e3.object({threadId:e3.string().min(1),body:e3.string().min(1)}),service:h,method:"replyToReviewThread",arguments:({threadId:e,body:t})=>[e,t],resultKey:"thread",annotations:{...i2,idempotentHint:!1}}),rp({name:"set_review_thread_resolved",title:"Set review thread resolved",description:"Resolve or unresolve a GitHub review thread.",inputSchema:e3.object({threadId:e3.string().min(1),resolved:e3.boolean()}),service:h,method:"setReviewThreadResolved",arguments:({threadId:e,resolved:t})=>[e,t],resultKey:"thread",annotations:i2}),rp({name:"retry_pipeline",title:"Retry pipeline",description:"Retry a failed GitHub check suite.",inputSchema:e3.object({repositoryId:e3.string().min(1),checkSuiteId:e3.string().min(1)}),service:h,method:"retryPipeline",arguments:e=>[e.repositoryId,e.checkSuiteId,ip,ih],resultKey:"pipeline",annotations:i2}),rp({name:"retry_workflow_job",title:"Retry workflow job",description:"Retry one failed job in a GitHub Actions workflow run.",inputSchema:e3.object({repositoryId:e3.string().min(1),checkSuiteId:e3.string().min(1),jobId:e3.string().min(1)}),service:h,method:"retryWorkflowJob",arguments:e=>[e.repositoryId,e.checkSuiteId,e.jobId,ip,ih],resultKey:"job",annotations:i2}),rp({name:"cancel_actions_run",title:"Cancel Actions run",description:"Cancel a GitHub Actions workflow run.",inputSchema:e3.object({codebaseRepositoryId:e3.string().min(1),workflowRunId:e3.string().min(1),force:e3.boolean().default(!1)}),service:h,method:"cancelActionsWorkflowRun",arguments:e=>[e.codebaseRepositoryId,e.workflowRunId,e.force,ip,ih],resultKey:"run",annotations:i2}),rp({name:"save_auto_retry_rule",title:"Save auto-retry rule",description:"Create or update a GitHub pipeline auto-retry rule.",inputSchema:e3.object({id:e3.string().nullable().optional(),scope:e3.string().min(1),codebaseRepositoryId:e3.string().min(1),repositoryGithubId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional(),branch:e3.string().nullable().optional(),pullRequestNumber:e3.number().int().positive().nullable().optional(),allWorkflows:e3.boolean(),mode:e3.string().min(1),retryLimit:e3.number().int().min(0).nullable().optional(),failureStrategy:e3.string().min(1),targets:e3.array(e3.object({workflowId:e3.string().nullable().optional(),workflowRunId:e3.string().nullable().optional(),jobName:e3.string().nullable().optional()}))}),service:h,method:"saveAutoRetryRule",resultKey:"rule",annotations:i2})]})),e.skills&&$.push((m=e.skills,{id:"builtin:skills",name:"Skills",children:[],tools:[rp({name:"get_skills_overview",title:"Get skills overview",description:"List skills, groups, installations, and sync status.",inputSchema:e3.object({search:e3.string().default("")}),service:m,method:"overview",arguments:({search:e})=>[e],resultKey:"overview"}),rp({name:"get_skill",title:"Get skill",description:"Get one skill and its deployments.",inputSchema:e3.object({id:e3.string().min(1)}),service:m,method:"getSkill",arguments:({id:e})=>[e],resultKey:"skill"}),i4({name:"get_skill_groups",title:"Get skill groups",description:"Get skill groups, optionally for one repository.",inputSchema:e3.object({repositoryId:e3.string().nullable().optional()}),outputSchema:e3.object({groups:e3.unknown()}),handler:async({repositoryId:e})=>({groups:rd(e?await m.groupsForRepository(e):(await m.overview()).groups)})}),rp({name:"get_skill_sync_run",title:"Get skill sync run",description:"Inspect a skill synchronization run and its conflicts.",inputSchema:e3.object({id:e3.string().min(1)}),service:m,method:"getRun",arguments:({id:e})=>[e],resultKey:"run"}),rp({name:"save_skill",title:"Save skill",description:"Create or update a managed skill.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:m,method:"saveSkill",arguments:({input:e})=>[e],resultKey:"skill",annotations:iX}),rp({name:"delete_skill",title:"Delete skill",description:"Delete a managed skill and its associations.",inputSchema:e3.object({id:e3.string().min(1)}),service:m,method:"deleteSkill",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i0}),rp({name:"save_skill_group",title:"Save skill group",description:"Create or update a managed skill group.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:m,method:"saveGroup",arguments:({input:e})=>[e],resultKey:"group",annotations:iX}),rp({name:"delete_skill_group",title:"Delete skill group",description:"Delete a managed skill group.",inputSchema:e3.object({id:e3.string().min(1)}),service:m,method:"deleteGroup",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i0}),rp({name:"update_skill_settings",title:"Update skill settings",description:"Update managed skill locations and reconciliation settings.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:m,method:"saveSettings",arguments:({input:e})=>[e],resultKey:"settings",annotations:iX}),rp({name:"prepare_skill_sync",title:"Prepare skill sync",description:"Prepare a push or pull skill synchronization run.",inputSchema:e3.object({kind:e3.enum(["ALL","GROUP"]),groupId:e3.string().nullable().optional()}),service:m,method:"prepareSync",arguments:({kind:e,groupId:t})=>[e,t??null],resultKey:"run",annotations:iX}),rp({name:"resolve_skill_sync_conflict",title:"Resolve skill sync conflict",description:"Choose a resolution for one skill synchronization conflict.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:m,method:"resolveItem",arguments:({input:e})=>[e],resultKey:"run",annotations:iX}),rp({name:"skip_skill_sync",title:"Skip skill sync",description:"Skip remaining pending work in a skill synchronization run.",inputSchema:e3.object({runId:e3.string().min(1)}),service:m,method:"skipPending",arguments:({runId:e})=>[e],resultKey:"run",annotations:iX}),rp({name:"apply_skill_sync",title:"Apply skill sync",description:"Apply all resolved items in a prepared skill synchronization run.",inputSchema:e3.object({runId:e3.string().min(1)}),service:m,method:"applyRun",arguments:({runId:e})=>[e],resultKey:"run",annotations:iX})]})),e.buildData&&$.push((f=e.buildData,{id:"builtin:build-data",name:"Build Data",children:[],tools:[rp({name:"get_build_data_collection",title:"Get build data collection",description:"Get a derived-data collection and its entries.",inputSchema:e3.object({id:e3.string().min(1)}),service:f,method:"getCollection",arguments:({id:e})=>[e],resultKey:"collection"}),rp({name:"get_build_data_deletion_history",title:"Get build data deletion history",description:"Get paginated build-data cleanup history.",inputSchema:e3.object({first:e3.number().int().min(1).max(500).default(100),after:e3.string().nullable().optional()}),service:f,method:"history",arguments:({first:e,after:t})=>[e,t],resultKey:"page"}),rp({name:"refresh_build_data",title:"Refresh build data",description:"Collect current derived-data entries from enrolled agents.",inputSchema:e3.object({requestId:e3.string().nullable().optional()}),service:f,method:"refresh",arguments:({requestId:e})=>[e],resultKey:"collection",annotations:iX}),rp({name:"calculate_build_data_sizes",title:"Calculate build data sizes",description:"Calculate accurate sizes for selected build-data entries.",inputSchema:e3.object({collectionId:e3.string().min(1),entryIds:e3.array(e3.string().min(1)).min(1),requestId:e3.string().min(1)}),service:f,method:"calculateSizes",arguments:e=>[e.collectionId,e.entryIds,e.requestId],resultKey:"collection",annotations:iX}),rp({name:"delete_build_data_entries",title:"Delete build data entries",description:"Delete selected derived-data entries from their agents.",inputSchema:e3.object({collectionId:e3.string().min(1),entryIds:e3.array(e3.string().min(1)).min(1),requestId:e3.string().min(1),overrideProtection:e3.boolean().default(!1)}),service:f,method:"deleteEntries",arguments:e=>[e.collectionId,e.entryIds,e.requestId,e.overrideProtection],resultKey:"collection",annotations:i0}),rp({name:"clear_build_data_history",title:"Clear build data history",description:"Permanently clear build-data deletion history.",inputSchema:e3.object({}),service:f,method:"clearHistory",arguments:()=>[],resultKey:"count",annotations:i0}),rp({name:"set_build_data_lock",title:"Set build data lock",description:"Lock or unlock a build-data entry to control cleanup eligibility.",inputSchema:e3.object({collectionId:e3.string().min(1),entryId:e3.string().min(1),locked:e3.boolean()}),service:f,method:"setEntryLocked",arguments:e=>[e.collectionId,e.entryId,e.locked],resultKey:"entry",annotations:iX})]})),e.signingAssets&&$.push((g=e.signingAssets,{id:"builtin:signing-assets",name:"Signing Assets",children:[],tools:[rp({name:"get_signing_agents",title:"Get signing agents",description:"List agents and signing-asset availability.",inputSchema:e3.object({}),service:g,method:"agents",arguments:()=>[],resultKey:"agents"}),rp({name:"get_signing_profiles",title:"Get signing profiles",description:"List provisioning-profile metadata without profile contents.",inputSchema:e3.object({}),service:g,method:"profiles",arguments:()=>[],resultKey:"profiles"}),rp({name:"get_signing_profile",title:"Get signing profile",description:"Get one provisioning profile and matched devices.",inputSchema:e3.object({id:e3.string().min(1)}),service:g,method:"profile",arguments:({id:e})=>[e],resultKey:"profile"}),rp({name:"get_signing_certificates",title:"Get signing certificates",description:"List signing-certificate metadata without private keys or P12 files.",inputSchema:e3.object({}),service:g,method:"certificates",arguments:()=>[],resultKey:"certificates"}),rp({name:"get_signing_operations",title:"Get signing operations",description:"List recent signing-asset operation history.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(50)}),service:g,method:"operations",arguments:({limit:e})=>[e],resultKey:"operations"}),rp({name:"get_apple_portal_inventory",title:"Get Apple portal inventory",description:"Get provisioning profiles, certificates, devices, and identifiers visible in the Apple Developer portal.",inputSchema:e3.object({}),service:g,method:"portalInventory",arguments:()=>[],resultKey:"inventory",annotations:i1}),rp({name:"refresh_signing_assets",title:"Refresh signing assets",description:"Refresh signing-asset inventory from selected or all agents.",inputSchema:e3.object({agentIds:e3.array(e3.string().min(1)).optional()}),service:g,method:"refresh",arguments:({agentIds:e})=>[e],resultKey:"operation",annotations:iX}),rp({name:"download_signing_profile",title:"Download signing profile",description:"Download an Apple provisioning profile to an agent; profile contents are not returned.",inputSchema:e3.object({uuid:e3.string().min(1),agentId:e3.string().min(1)}),service:g,method:"downloadProfile",arguments:e=>[e.uuid,e.agentId],resultKey:"operation",mapResult:e=>({uuid:"string"==typeof e.uuid?e.uuid:null,filename:"string"==typeof e.filename?e.filename:null}),annotations:iX}),rp({name:"sync_signing_profile",title:"Sync signing profile",description:"Synchronize a provisioning profile between agents.",inputSchema:e3.object({uuid:e3.string().min(1),sourceAgentId:e3.string().min(1),targetAgentIds:e3.array(e3.string().min(1)).min(1)}),service:g,method:"syncProfile",arguments:e=>[e.uuid,e.sourceAgentId,e.targetAgentIds],resultKey:"operation",annotations:iX}),rp({name:"delete_signing_profile",title:"Delete signing profile",description:"Delete a provisioning profile from selected agents.",inputSchema:e3.object({uuid:e3.string().min(1),agentIds:e3.array(e3.string().min(1)).min(1)}),service:g,method:"deleteProfile",arguments:e=>[e.uuid,e.agentIds],resultKey:"operation",annotations:i0}),rp({name:"delete_expired_signing_profiles",title:"Delete expired signing profiles",description:"Delete expired provisioning profiles from selected or all agents.",inputSchema:e3.object({agentIds:e3.array(e3.string().min(1)).optional()}),service:g,method:"deleteExpiredProfiles",arguments:({agentIds:e})=>[e],resultKey:"operation",annotations:i0})]})),e.iosDevices&&$.push((y=e.iosDevices,{id:"builtin:ios-devices",name:"iOS Devices",children:[],tools:[rp({name:"get_ios_devices",title:"Get iOS devices",description:"List enrolled and pending iOS devices.",inputSchema:e3.object({status:e3.enum(["PENDING","REGISTERING","REGISTERED","REGISTRATION_FAILED","REJECTED"]).nullable().optional()}),service:y,method:"devices",arguments:({status:e})=>[e],resultKey:"devices"}),rp({name:"get_ios_device",title:"Get iOS device",description:"Get one enrolled or pending iOS device.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"device",arguments:({id:e})=>[e],resultKey:"device"}),rp({name:"get_ios_device_firmware",title:"Get iOS device firmware",description:"Get firmware metadata discovered for an iOS device.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"deviceFirmware",arguments:({id:e})=>[e],resultKey:"firmware"}),rp({name:"get_ios_device_settings",title:"Get iOS device settings",description:"Get redacted enrollment and App Store Connect settings.",inputSchema:e3.object({}),service:y,method:"getSettings",arguments:()=>[],resultKey:"settings"}),rp({name:"rename_ios_device",title:"Rename iOS device",description:"Change the display name of an iOS device.",inputSchema:e3.object({id:e3.string().min(1),displayName:e3.string().min(1)}),service:y,method:"renameDevice",arguments:e=>[e.id,e.displayName],resultKey:"device",annotations:i2}),rp({name:"register_ios_device",title:"Register iOS device",description:"Register a pending iOS device with the Apple Developer portal.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"registerDevice",arguments:({id:e})=>[e],resultKey:"device",annotations:i2}),rp({name:"reject_ios_device",title:"Reject iOS device",description:"Reject a pending iOS device enrollment.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"rejectDevice",arguments:({id:e})=>[e],resultKey:"device",annotations:i2}),rp({name:"delete_ios_device",title:"Delete iOS device",description:"Permanently delete an iOS device record.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"deleteDevice",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i3})]})),e.notifications&&$.push((w=e.notifications,{id:"builtin:notifications",name:"Notifications",children:[],tools:[rp({name:"get_notification_history",title:"Get notification history",description:"Get paginated application notification history.",inputSchema:e3.object({first:e3.number().int().min(1).max(500).default(100),after:e3.string().nullable().optional()}),service:w,method:"history",resultKey:"page"}),rp({name:"get_notification_preferences",title:"Get notification preferences",description:"Get notification-category preferences.",inputSchema:e3.object({}),service:w,method:"preferences",arguments:()=>[],resultKey:"preferences"}),rp({name:"get_notification_sidebar",title:"Get notification sidebar",description:"Get unread and recent notification sidebar state.",inputSchema:e3.object({limit:e3.number().int().min(1).max(200).default(25)}),service:w,method:"sidebar",arguments:({limit:e})=>[e],resultKey:"sidebar"}),rp({name:"get_web_push_status",title:"Get web-push status",description:"Get redacted web-push readiness and subscription status.",inputSchema:e3.object({}),service:w,method:"webPushState",arguments:()=>[],resultKey:"status",annotations:i1}),rp({name:"update_notification_preference",title:"Update notification preference",description:"Update one notification-category preference.",inputSchema:e3.object({input:e3.object({typeKey:e3.string().min(1),sidebarEnabled:e3.boolean(),browserEnabled:e3.boolean(),webPushEnabled:e3.boolean()})}),service:w,method:"savePreference",arguments:({input:e})=>[e],resultKey:"preference",annotations:iX}),rp({name:"dismiss_notification",title:"Dismiss notification",description:"Dismiss one application notification.",inputSchema:e3.object({id:e3.string().min(1)}),service:w,method:"dismiss",arguments:({id:e})=>[e],resultKey:"dismissed",annotations:iX}),rp({name:"dismiss_all_notifications",title:"Dismiss all notifications",description:"Dismiss every current application notification.",inputSchema:e3.object({}),service:w,method:"dismissAll",arguments:()=>[],resultKey:"count",annotations:iX}),rp({name:"delete_notifications",title:"Delete notifications",description:"Permanently delete notifications selected by IDs or filters.",inputSchema:e3.object({selection:e3.object({all:e3.boolean().nullable().optional(),ids:e3.array(e3.string().min(1)).nullable().optional(),excludedIds:e3.array(e3.string().min(1)).nullable().optional(),ranges:e3.array(e3.object({start:iw.iso.datetime(),end:iw.iso.datetime()})).nullable().optional(),excludedRanges:e3.array(e3.object({start:iw.iso.datetime(),end:iw.iso.datetime()})).nullable().optional()})}),service:w,method:"deleteSelection",arguments:({selection:e})=>[e],resultKey:"count",annotations:i0}),rp({name:"test_web_push_subscription",title:"Test web-push subscription",description:"Send a test notification to a saved web-push subscription.",inputSchema:e3.object({id:e3.string().min(1)}),service:w,method:"testWebPushSubscription",arguments:({id:e})=>[e],resultKey:"sent",annotations:i2})]})),e.ccusage&&e.modelCosts&&$.push((b=e.ccusage,v=e.modelCosts,{id:"builtin:usage-costs",name:"Usage and Costs",children:[],tools:[rp({name:"collect_ccusage",title:"Collect ccusage",description:"Collect current local AI-provider usage from enrolled agents.",inputSchema:e3.object({requestId:e3.string().nullable().optional()}),service:b,method:"collect",arguments:({requestId:e})=>[e],resultKey:"collection",annotations:iX}),rp({name:"get_ccusage_collection",title:"Get ccusage collection",description:"Get a usage collection and aggregated model usage.",inputSchema:e3.object({id:e3.string().min(1)}),service:b,method:"getCollection",arguments:({id:e})=>[e],resultKey:"collection"}),rp({name:"get_model_cost_catalog",title:"Get model cost catalog",description:"Get the active model-pricing catalog and refresh metadata.",inputSchema:e3.object({}),service:v,method:"getCatalog",arguments:()=>[],resultKey:"catalog",annotations:i1}),rp({name:"get_model_cost_entries",title:"Get model cost entries",description:"List model-pricing entries with search and pagination.",inputSchema:e3.object({search:e3.string().nullable().optional(),first:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0),sortKey:e3.enum(["MODEL","PROVIDER","INPUT","OUTPUT","UPDATED_AT"]).default("MODEL"),direction:e3.enum(["ASC","DESC"]).default("ASC")}),service:v,method:"listEntries",resultKey:"page"}),rp({name:"refresh_model_costs",title:"Refresh model costs",description:"Refresh the model-pricing catalog from its configured URL.",inputSchema:e3.object({}),service:v,method:"refresh",arguments:()=>[],resultKey:"catalog",annotations:i2}),rp({name:"estimate_model_cost",title:"Estimate model cost",description:"Estimate cost for token usage using the current model-pricing catalog.",inputSchema:e3.object({model:e3.string().min(1),inputTokens:e3.number().int().min(0).default(0),outputTokens:e3.number().int().min(0).default(0),cacheCreationInputTokens:e3.number().int().min(0).default(0),cacheReadInputTokens:e3.number().int().min(0).default(0)}),service:{estimate:async e=>{await v.ensureFresh();let t=await v.lookup([String(e.model)]);return v.estimate(t.get(String(e.model)),{inputTokens:Number(e.inputTokens),outputTokens:Number(e.outputTokens),cacheWriteTokens:Number(e.cacheCreationInputTokens),cacheReadTokens:Number(e.cacheReadInputTokens)})}},method:"estimate",resultKey:"estimate"})]})),e.systemStatus&&e.polling&&e.credentials&&$.push((k=e.systemStatus,S=e.polling,E=e.credentials,{id:"builtin:system",name:"System",children:[],tools:[rp({name:"get_system_status",title:"Get system status",description:"Get the control plane's aggregated operational health.",inputSchema:e3.object({}),service:k,method:"status",arguments:()=>[],resultKey:"status"}),rp({name:"get_polling_operations",title:"Get polling operations",description:"List registered background polling operations and their current states.",inputSchema:e3.object({}),service:S,method:"list",arguments:()=>[],resultKey:"operations"}),rp({name:"get_credential_store_status",title:"Get credential store status",description:"Get credential-store health without returning credential values.",inputSchema:e3.object({}),service:E,method:"status",arguments:()=>[],resultKey:"status"}),rp({name:"get_credential_metadata",title:"Get credential metadata",description:"List redacted credential metadata; values are never returned.",inputSchema:e3.object({}),service:E,method:"list",arguments:()=>[],resultKey:"credentials"})]})),e.cacheServer&&e.jira&&e.github&&$.push((I=e.cacheServer,x=e.jira,A=e.github,{id:"builtin:cache-administration",name:"Cache Administration",tools:[],children:[{id:"builtin:cache-administration:cache-server",name:"Cache Server",children:[],tools:[rp({name:"get_cache_server_entries",title:"Get cache-server entries",description:"List cache-server entries with filters and pagination.",inputSchema:e3.object({filters:e3.object({key:e3.string().nullable().optional(),version:e3.string().nullable().optional(),scope:e3.string().nullable().optional(),repoId:e3.string().nullable().optional(),itemsPerPage:e3.number().int().min(1).max(500).default(20),page:e3.number().int().min(1).default(1)}).default({itemsPerPage:20,page:1})}),service:I,method:"listCacheEntries",arguments:({filters:e})=>[e],resultKey:"page",annotations:i1}),rp({name:"get_cache_server_entry",title:"Get cache-server entry",description:"Get cache-entry detail without secret connection values.",inputSchema:e3.object({id:e3.string().min(1)}),service:I,method:"getCacheEntryDetail",arguments:({id:e})=>[e],resultKey:"entry",annotations:i1}),rp({name:"match_cache_server_entry",title:"Match cache-server entry",description:"Find a cache entry matching build cache keys.",inputSchema:e3.object({input:e3.object({primaryKey:e3.string().min(1),restoreKeys:e3.array(e3.string()).nullable().optional(),scopes:e3.array(e3.string()).min(1),repoId:e3.string().min(1),version:e3.string().min(1)})}),service:I,method:"matchCacheEntry",arguments:({input:e})=>[e],resultKey:"match",annotations:i1}),rp({name:"get_cache_storage_location",title:"Get cache storage location",description:"Get one cache storage-location summary.",inputSchema:e3.object({id:e3.string().min(1)}),service:I,method:"getStorageLocation",arguments:({id:e})=>[e],resultKey:"location",annotations:i1}),rp({name:"delete_cache_server_entries",title:"Delete cache-server entries",description:"Permanently delete selected cache-server entries.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),service:I,method:"deleteCacheEntriesByIds",arguments:({ids:e})=>[e],resultKey:"deleted",annotations:i3})]},{id:"builtin:cache-administration:jira",name:"Jira Cache",children:[],tools:[rp({name:"get_jira_cache_metrics",title:"Get Jira cache metrics",description:"Get Jira cache hit, live-call, error, and latency metrics.",inputSchema:e3.object({}),service:x,method:"cacheMetrics",arguments:()=>[],resultKey:"metrics"}),rp({name:"get_jira_api_calls",title:"Get Jira API calls",description:"List redacted Jira API-call history.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0)}),service:x,method:"listApiCalls",arguments:e=>[e.limit,e.offset],resultKey:"page"}),rp({name:"get_jira_cached_entries",title:"Get Jira cached entries",description:"List cached Jira ticket entries.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0)}),service:x,method:"listCachedTickets",arguments:e=>[e.limit,e.offset],resultKey:"page"}),rp({name:"clear_jira_cache",title:"Clear Jira cache",description:"Permanently clear all cached Jira tickets.",inputSchema:e3.object({}),service:x,method:"clearCache",arguments:()=>[],resultKey:"cleared",annotations:i3})]},{id:"builtin:cache-administration:github",name:"GitHub Cache",children:[],tools:[rp({name:"get_github_cache_metrics",title:"Get GitHub cache metrics",description:"Get GitHub cache and API-call metrics.",inputSchema:e3.object({}),service:A,method:"cacheMetrics",arguments:()=>[],resultKey:"metrics"}),rp({name:"get_github_api_calls",title:"Get GitHub API calls",description:"List redacted GitHub API-call history.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0)}),service:A,method:"apiCalls",arguments:e=>[e.limit,e.offset,{}],resultKey:"page"}),rp({name:"get_github_cached_entries",title:"Get GitHub cached entries",description:"List cached GitHub API entries.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0)}),service:A,method:"cachedEntries",arguments:e=>[e.limit,e.offset],resultKey:"page"}),rp({name:"clear_github_cache",title:"Clear GitHub cache",description:"Permanently clear cached GitHub API entries.",inputSchema:e3.object({}),service:A,method:"clearCache",arguments:()=>[],resultKey:"cleared",annotations:i0})]}]})),e.toolAudit&&e.testExternalMcpServer&&$.push((_=e.toolAudit,C=e.testExternalMcpServer,{id:"builtin:tool-administration",name:"Tool Administration",children:[],tools:[rp({name:"test_external_mcp_server",title:"Test external MCP server",description:"Connect to a configured external MCP server and report its tool count without returning saved headers.",inputSchema:e3.object({id:e3.string().min(1)}),service:{testExternalServer:C},method:"testExternalServer",arguments:({id:e})=>[e],resultKey:"status",annotations:i1}),rp({name:"get_tool_call_history",title:"Get tool call history",description:"List redacted tool-call audit records. Arguments are represented only by SHA-256 hashes.",inputSchema:e3.object({first:e3.number().int().min(1).max(500).default(100),toolName:e3.string().nullable().optional(),resultStatus:e3.enum(["RUNNING","SUCCEEDED","FAILED"]).nullable().optional()}),service:_,method:"list",resultKey:"calls"}),rp({name:"get_tool_call",title:"Get tool call",description:"Get one redacted tool-call audit record by ID.",inputSchema:e3.object({id:e3.string().min(1)}),service:_,method:"get",arguments:({id:e})=>[e],resultKey:"call"})]})),e.workflows&&$.push((R=e.workflows,P={id:"builtin:workflows:discovery",name:"Discovery",children:[],tools:[i4({name:"list_workflow_step_kinds",title:"List workflow step kinds",description:"Browse the step kinds a workflow can be built from, with a short description of each. Start here when authoring; use describe_workflow_kind for the config schema of one kind.",inputSchema:e3.object({category:e3.string().optional().describe("Restrict to one category, e.g. 'Jira' or 'Control flow'."),search:e3.string().optional().describe("Match against kind, label, category, and description.")}),outputSchema:e3.object({steps:e3.array(e3.object({kind:e3.string(),category:e3.string(),label:e3.string(),description:e3.string(),execution:e3.string(),requiredPaths:e3.array(e3.string()),providedPaths:e3.array(e3.string()),sourceHandles:e3.array(e3.string()),mutatesExternal:e3.boolean(),mutatesWorktree:e3.boolean()}))}),annotations:iQ,handler:({category:e,search:t})=>({steps:ik.WORKFLOW_STEP_CATALOG.filter(r=>(!e||r.category===e)&&iK(`${r.kind} ${r.label} ${r.category} ${r.description}`,t)).map(e=>({kind:e.kind,category:e.category,label:e.label,description:e.description,execution:e.execution,requiredPaths:e.requiredPaths,providedPaths:e.providedPaths,sourceHandles:e.sourceHandles,mutatesExternal:e.mutatesExternal,mutatesWorktree:e.mutatesWorktree}))})}),i4({name:"list_workflow_trigger_kinds",title:"List workflow trigger kinds",description:"Browse the trigger kinds that can start a workflow, with what each one seeds into session data. Every workflow needs at least one trigger.",inputSchema:e3.object({category:e3.string().optional(),search:e3.string().optional()}),outputSchema:e3.object({triggers:e3.array(e3.object({kind:e3.string(),category:e3.string(),label:e3.string(),description:e3.string(),seedPaths:e3.array(e3.string()),sourceHandles:e3.array(e3.string())}))}),annotations:iQ,handler:({category:e,search:t})=>({triggers:ik.WORKFLOW_TRIGGER_CATALOG.filter(r=>(!e||r.category===e)&&iK(`${r.kind} ${r.label} ${r.category} ${r.description}`,t)).map(e=>({kind:e.kind,category:e.category,label:e.label,description:e.description,seedPaths:e.seedPaths,sourceHandles:e.sourceHandles}))})}),i4({name:"describe_workflow_kind",title:"Describe a workflow step or trigger kind",description:"Full detail for one kind: long-form notes on preconditions and side effects, the JSON Schema for its config, the session paths it requires and provides, and the handles edges may leave it from.",inputSchema:e3.object({kind:e3.string().min(1).describe("A step or trigger kind.")}),outputSchema:e3.object({scope:e3.enum(["step","trigger"]),kind:e3.string(),category:e3.string(),label:e3.string(),description:e3.string(),details:e3.string(),execution:e3.string().nullable(),configSchema:e3.unknown(),requiredPaths:e3.array(e3.string()),providedPaths:e3.array(e3.string()),seedPaths:e3.array(e3.string()),sourceHandles:e3.array(e3.string()),mutatesExternal:e3.boolean(),mutatesWorktree:e3.boolean()}),annotations:iQ,handler:({kind:e})=>{let t=ik.WORKFLOW_STEP_CATALOG.find(t=>t.kind===e);if(t)return{scope:"step",...t,configSchema:t9(t.configSchema),seedPaths:[]};let r=iG(e);return{scope:"trigger",...r,configSchema:t9(r.configSchema),execution:null,requiredPaths:[],providedPaths:[],mutatesExternal:!1,mutatesWorktree:!1}}}),i4({name:"list_workflow_session_paths",title:"List workflow session-data paths",description:"The session-data vocabulary a step's config can bind to — concrete paths like `ticket.key` or `pr.number`, with what each holds. Use it to write bindings that resolve at run time.",inputSchema:e3.object({namespace:e3.string().optional().describe("Restrict to one namespace, e.g. 'ticket' or 'pr'.")}),outputSchema:e3.object({paths:e3.array(e3.object({path:e3.string(),description:e3.string().nullable()}))}),annotations:iQ,handler:({namespace:e})=>({paths:(function(e){let t=new Map,r=e=>{t.has(e.path)||t.set(e.path,e)};for(let t of e){let e=t.trim();if(e&&"*"!==e){if(e.endsWith(".*")){let t=e.slice(0,-2),i=iC[iT(t)];if(i)for(let e of i)r({path:`${t}.${e.name}`,description:e.description});else r({path:e});continue}r({path:e,description:function(e){let t=e.split(".");if(t.length<2)return;let r=t[t.length-1];return iR.get(`${iT(e)}.${r}`)}(e)})}}return[...t.values()].sort((e,t)=>e.path.localeCompare(t.path))})(e?[`${e}.*`]:[...new Set(ik.WORKFLOW_TRIGGER_CATALOG.flatMap(({seedPaths:e})=>e))]).map(({path:e,description:t})=>({path:e,description:t??null}))})}),i4({name:"get_workflow_path_availability",title:"Get workflow path availability",description:"Per step, the session paths guaranteed to exist before it runs and the ones it contributes. This is what decides whether a config binding is legal — check it before binding a step to a path.",inputSchema:iD,outputSchema:e3.object({steps:e3.array(e3.object({nodeId:e3.string(),kind:e3.string(),availableBefore:e3.array(e3.string()),provides:e3.array(e3.string())})),triggerSeeds:e3.array(e3.object({triggerId:e3.string(),kind:e3.string(),seedPaths:e3.array(e3.string())})),violations:e3.array(e3.object({nodeId:e3.string(),triggerId:e3.string(),triggerName:e3.string(),path:e3.string()}))}),annotations:iQ,handler:async({workflowId:e})=>{let t=await iV(R,e),r=(0,ik.computeWorkflowPathAvailability)(t);return{steps:t.nodes.map(e=>({nodeId:e.id,kind:e.kind,availableBefore:r.availableBefore.get(e.id)??[],provides:r.provides.get(e.id)??[]})),triggerSeeds:t.triggers.map(e=>({triggerId:e.id,kind:e.kind,seedPaths:["workflow.*",...iG(e.kind).seedPaths,...(0,ik.resourceManualSeedPaths)(e.kind,e.config)]})),violations:r.requirementViolations}}})]},{id:"builtin:workflows",name:"Workflows",tools:[],children:[P,{id:"builtin:workflows:authoring",name:"Authoring",children:[],tools:[i4({name:"list_workflows",title:"List workflows",description:"List workflows with their publish and enablement state.",inputSchema:e3.object({search:e3.string().optional().describe("Match name or description."),archive:e3.enum(["ACTIVE","ARCHIVED","ALL"]).optional().describe("Defaults to ACTIVE."),enabled:e3.boolean().optional(),first:e3.number().int().min(1).max(200).optional(),after:e3.string().optional().describe("Cursor from a previous page.")}),outputSchema:e3.object({workflows:e3.array(ij),nextCursor:e3.string().nullable(),totalCount:e3.number()}),annotations:iQ,handler:async e=>{let t=await R().list(e);return{workflows:t.items.map(e=>t7(e)),nextCursor:t.nextCursor,totalCount:t.totalCount}}}),i4({name:"get_workflow",title:"Get workflow",description:"Read one workflow, optionally with its full draft definition — every trigger, step, and connection.",inputSchema:e3.object({workflowId:e3.string().min(1),includeDefinition:e3.boolean().optional().describe("Include the draft graph. Defaults to true.")}),outputSchema:e3.object({workflow:ij,definition:e3.unknown().nullable(),activeVersion:e3.unknown().nullable()}),annotations:iQ,handler:async({workflowId:e,includeDefinition:t})=>{let r=await R().get(e);if(!r)throw Error(`Workflow ${e} was not found`);return{workflow:t7(r),definition:!1===t?null:JSON.parse(r.draftDefinitionJson),activeVersion:r.activeVersion?re(r.activeVersion):null}}}),i4({name:"create_workflow",title:"Create workflow",description:"Create a workflow. Without a definition it starts as a draft holding one manual trigger and no steps, ready for add_workflow_step.",inputSchema:e3.object({name:e3.string().min(1).max(200),description:e3.string().max(2e3).optional(),definition:e3.unknown().optional().describe("A complete definition, e.g. from export_workflow."),overlapPolicy:e3.enum(["QUEUE","CONCURRENT","COALESCE_LATEST"]).optional().describe("What happens when a run starts while one is in flight. Defaults to QUEUE."),maxConcurrentRuns:e3.number().int().min(1).optional()}),outputSchema:e3.object({workflow:ij,definition:e3.unknown()}),annotations:iX,handler:async e=>{let t=await R().create(e);if(!t)throw Error("Workflow could not be created");return{workflow:t7(t),definition:JSON.parse(t.draftDefinitionJson)}}}),i4({name:"update_workflow_settings",title:"Update workflow settings",description:"Change a workflow's name, description, or concurrency. Name and description live inside the definition, so this rewrites the draft.",inputSchema:e3.object({workflowId:e3.string().min(1),name:e3.string().min(1).max(200).optional(),description:e3.string().max(2e3).optional(),overlapPolicy:e3.enum(["QUEUE","CONCURRENT","COALESCE_LATEST"]).optional(),maxConcurrentRuns:e3.number().int().min(1).optional()}),outputSchema:iB,annotations:iX,handler:async e=>{let t=await iV(R,e.workflowId),r={...t,name:e.name??t.name,description:e.description??t.description};return await R().saveDraft({id:e.workflowId,definition:r,overlapPolicy:e.overlapPolicy??null,maxConcurrentRuns:e.maxConcurrentRuns??null}),iH(R,e.workflowId,r)}}),i4({name:"set_workflow_enabled",title:"Enable or pause workflow",description:"Enable a workflow or pause it. A paused workflow ignores its triggers and refuses manual runs.",inputSchema:e3.object({workflowId:e3.string().min(1),enabled:e3.boolean()}),outputSchema:e3.object({workflow:ij}),annotations:iX,handler:async({workflowId:e,enabled:t})=>({workflow:t7(await R().setEnabled(e,t))})}),i4({name:"archive_workflow",title:"Archive or restore workflow",description:"Move a workflow out of the active list, or bring it back. Reversible — use delete_workflow to remove it for good.",inputSchema:e3.object({workflowId:e3.string().min(1),archived:e3.boolean()}),outputSchema:e3.object({workflow:ij}),annotations:iX,handler:async({workflowId:e,archived:t})=>({workflow:t7(await R().archive(e,t))})}),i4({name:"delete_workflow",title:"Delete workflow",description:"Permanently delete a workflow and its published versions. Refused once the workflow has run history — archive_workflow is the way to retire one that has run. Not reversible.",inputSchema:e3.object({workflowId:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.boolean()}),annotations:i0,handler:async({workflowId:e})=>({deleted:await R().delete(e)})}),i4({name:"add_workflow_step",title:"Add workflow step",description:"Add a step to the draft and optionally wire it to an existing trigger or step. Returns the new step's id and the validator's view of the result.",inputSchema:e3.object({workflowId:e3.string().min(1),kind:e3.enum(iS.WORKFLOW_STEP_KINDS).describe("Step kind. See list_workflow_step_kinds."),name:e3.string().max(200).optional().describe("Display name. Defaults to the kind's label."),config:iO.optional(),connectFrom:e3.object({from:e3.string().min(1).describe("Trigger or step id this one follows."),sourceHandle:e3.string().optional().describe("Handle to leave from — 'success' by default, 'true'/'false' on an If, 'body'/'empty' on a For each, an option key on a choice trigger.")}).optional(),position:iN.optional(),failurePolicy:e3.enum(["FAIL","CONTINUE"]).optional().describe("CONTINUE lets the run carry on past a failure."),retry:e3.object({maxAttempts:e3.number().int().min(1).max(20),strategy:e3.enum(["FIXED","EXPONENTIAL"]),delaySeconds:e3.number().int().min(1).max(86400)}).optional(),providedPaths:iP.optional(),requiredPaths:i$.optional()}),outputSchema:iB,annotations:iX,handler:async e=>{let t=function(e,t){let r=iE(e,"node"),i={id:r,kind:t.kind,name:t.name??void 0,position:t.position??function(e,t){let r=t?iI(e,t):void 0,i=r?r.position.x+320:320,a=r?r.position.y:120,n=[...e.nodes,...e.triggers].filter(e=>160>Math.abs(e.position.x-i)).map(e=>e.position.y),s=a;for(;n.some(e=>80>Math.abs(e-s));)s+=160;return{x:i,y:s}}(e,t.connectFrom?.from??null),config:t.config??{},requiredPaths:t.requiredPaths??[],providedPaths:t.providedPaths??[],retry:t.retry??{maxAttempts:1,strategy:"EXPONENTIAL",delaySeconds:5},failurePolicy:t.failurePolicy??"FAIL"},a={...e,nodes:[...e.nodes,i]};if(!t.connectFrom)return{definition:a,nodeId:r,edgeId:null};let n=i_(a,{source:t.connectFrom.from,target:r,sourceHandle:t.connectFrom.sourceHandle??null});return{definition:n.definition,nodeId:r,edgeId:n.edgeId}}(await iV(R,e.workflowId),{...e,name:e.name??function(e){let t=ik.WORKFLOW_STEP_CATALOG.find(t=>t.kind===e);if(!t)throw Error(`Unknown step kind ${e}`);return t}(e.kind).label});return iH(R,e.workflowId,t.definition,{nodeId:t.nodeId,edgeId:t.edgeId})}}),i4({name:"update_workflow_step",title:"Update workflow step",description:"Change a step's name, config, retry, or failure policy. Prefer configPatch, which merges — config replaces the object wholesale.",inputSchema:e3.object({workflowId:e3.string().min(1),nodeId:e3.string().min(1),name:e3.string().max(200).optional(),config:iO.optional().describe("Replaces the entire config. Keys left out are dropped."),configPatch:e3.record(e3.string(),e3.unknown()).optional().describe("Merges into the existing config. A null value removes that key."),position:iN.optional(),failurePolicy:e3.enum(["FAIL","CONTINUE"]).optional(),retry:e3.object({maxAttempts:e3.number().int().min(1).max(20),strategy:e3.enum(["FIXED","EXPONENTIAL"]),delaySeconds:e3.number().int().min(1).max(86400)}).optional(),providedPaths:iP.optional(),requiredPaths:i$.optional()}),outputSchema:iB,annotations:iX,handler:async e=>{let t=await iV(R,e.workflowId);return iH(R,e.workflowId,function(e,t){if(!e.nodes.some(({id:e})=>e===t.nodeId))throw Error(`Step ${t.nodeId} is not in this workflow`);if(t.config&&t.configPatch)throw Error("Pass either config or configPatch, not both");return{...e,nodes:e.nodes.map(e=>e.id===t.nodeId?{...e,name:t.name??e.name,config:iA(e.config,t),position:t.position??e.position,retry:t.retry??e.retry,failurePolicy:t.failurePolicy??e.failurePolicy,requiredPaths:t.requiredPaths??e.requiredPaths,providedPaths:t.providedPaths??e.providedPaths}:e)}}(t,e),{nodeId:e.nodeId})}}),i4({name:"add_workflow_trigger",title:"Add workflow trigger",description:"Add a trigger to the draft. A workflow needs at least one, and each must reach a step before it can be published.",inputSchema:e3.object({workflowId:e3.string().min(1),kind:e3.enum(iS.WORKFLOW_TRIGGER_KINDS).describe("Trigger kind. See list_workflow_trigger_kinds."),name:e3.string().max(200).optional(),config:iO.optional().describe("Trigger config. Resource triggers need `resourceKind`; choice triggers need keyed `choices`; issue-command triggers need `allowedLogins` and an anchored `commandPattern`."),position:iN.optional()}),outputSchema:iB,annotations:iX,handler:async e=>{var t,r;let i,a,n=(t=await iV(R,e.workflowId),r={...e,name:e.name??iG(e.kind).label},a={id:i=iE(t,"trigger"),kind:r.kind,name:r.name??void 0,config:r.config??{},position:r.position??{x:0,y:100+140*t.triggers.length}},{definition:{...t,triggers:[...t.triggers,a]},triggerId:i});return iH(R,e.workflowId,n.definition,{triggerId:n.triggerId})}}),i4({name:"update_workflow_trigger",title:"Update workflow trigger",description:"Change a trigger's name or config. Narrowing a choice trigger's options also removes the connections that left the options you dropped.",inputSchema:e3.object({workflowId:e3.string().min(1),triggerId:e3.string().min(1),name:e3.string().max(200).optional(),config:iO.optional(),configPatch:e3.record(e3.string(),e3.unknown()).optional(),position:iN.optional()}),outputSchema:iB,annotations:iX,handler:async e=>{let t=await iV(R,e.workflowId);return iH(R,e.workflowId,function(e,t){let r=e.triggers.find(({id:e})=>e===t.triggerId);if(!r)throw Error(`Trigger ${t.triggerId} is not in this workflow`);if(t.config&&t.configPatch)throw Error("Pass either config or configPatch, not both");let i={...r,name:t.name??r.name,config:iA(r.config,t),position:t.position??r.position},a=new Set(ix(i)),n=(0,iS.isChoiceTriggerKind)(i.kind)?e.edges.filter(e=>e.source!==i.id||a.has(e.sourceHandle)):e.edges;return{...e,triggers:e.triggers.map(e=>e.id===i.id?i:e),edges:n}}(t,e),{triggerId:e.triggerId})}}),i4({name:"remove_workflow_node",title:"Remove workflow step or trigger",description:"Delete a step or trigger from the draft along with its connections. Set reconnect to stitch its predecessors to its successors so the chain survives.",inputSchema:e3.object({workflowId:e3.string().min(1),id:e3.string().min(1).describe("Step or trigger id."),reconnect:e3.boolean().optional().describe("Join what came before to what came after.")}),outputSchema:iB,annotations:i0,handler:async({workflowId:e,id:t,reconnect:r})=>{let i=await iV(R,e);return iH(R,e,function(e,t,r={}){if(!iI(e,t))throw Error(`${t} is not in this workflow`);let i=e.edges.filter(e=>e.target===t),a=e.edges.filter(e=>e.source===t),n=e.edges.filter(e=>e.source!==t&&e.target!==t),s={...e,nodes:e.nodes.filter(e=>e.id!==t),triggers:e.triggers.filter(e=>e.id!==t),edges:n};if(!r.reconnect)return s;for(let e of i)for(let t of a)s=i_(s,{source:e.source,sourceHandle:e.sourceHandle,target:t.target,targetHandle:t.targetHandle}).definition;return s}(i,t,{reconnect:r}))}}),i4({name:"connect_workflow_nodes",title:"Connect workflow nodes",description:"Draw a connection from a trigger or step to a step. A step with more than one incoming connection must be a CONTROL_JOIN.",inputSchema:e3.object({workflowId:e3.string().min(1),source:e3.string().min(1).describe("Trigger or step id."),target:e3.string().min(1).describe("Step id. Triggers take no input."),sourceHandle:e3.string().optional().describe("Handle to leave from. Defaults to the source's first — 'success' for a step.")}),outputSchema:iB,annotations:iX,handler:async e=>{let t=i_(await iV(R,e.workflowId),e);return iH(R,e.workflowId,t.definition,{edgeId:t.edgeId})}}),i4({name:"disconnect_workflow_nodes",title:"Disconnect workflow nodes",description:"Remove a connection, either by its edge id or by the pair of nodes it joins.",inputSchema:e3.object({workflowId:e3.string().min(1),edgeId:e3.string().optional(),source:e3.string().optional(),target:e3.string().optional(),sourceHandle:e3.string().optional()}),outputSchema:iB.extend({removedEdgeIds:e3.array(e3.string())}),annotations:iX,handler:async e=>{let t=function(e,t){let r=e.edges.filter(e=>t.edgeId?e.id===t.edgeId:(!!t.source||!!t.target)&&(!t.source||e.source===t.source)&&(!t.target||e.target===t.target)&&(!t.sourceHandle||e.sourceHandle===t.sourceHandle));if(!r.length)throw Error("No matching connection to remove");let i=new Set(r.map(({id:e})=>e));return{definition:{...e,edges:e.edges.filter(e=>!i.has(e.id))},removedEdgeIds:[...i]}}(await iV(R,e.workflowId),e);return{...await iH(R,e.workflowId,t.definition),removedEdgeIds:t.removedEdgeIds}}}),i4({name:"layout_workflow",title:"Lay out workflow graph",description:"Reposition every trigger and step into readable left-to-right columns. Worth calling once after building a workflow, so it does not open as a pile of overlapping cards.",inputSchema:iD,outputSchema:iB,annotations:iX,handler:async({workflowId:e})=>{let t=await iV(R,e);return iH(R,e,function(e){let t=new Map;for(let r of e.edges)t.set(r.source,[...t.get(r.source)??[],r.target]);let r=new Map;for(let t of e.triggers)r.set(t.id,0);let i=e.triggers.map(({id:e})=>e),a=e.nodes.length*e.edges.length+1;for(;i.length&&a-- >0;){let e=i.shift(),a=r.get(e)??0;for(let n of t.get(e)??[])(r.get(n)??-1)>=a+1||(r.set(n,a+1),i.push(n))}let n=Math.max(0,...r.values());for(let t of e.nodes)r.has(t.id)||r.set(t.id,n+1);let s=new Map,o=e=>{let t=r.get(e.id)??0,i=s.get(t)??0;return s.set(t,i+1),{...e,position:{x:320*t,y:160*i}}},l=e.triggers.map(o),u=e.nodes.map(o);return{...e,triggers:l,nodes:u}}(t))}}),i4({name:"set_workflow_definition",title:"Replace workflow definition",description:"Overwrite the entire draft graph. The bulk escape hatch — prefer the granular tools for single edits, which cannot clobber work they did not read.",inputSchema:e3.object({workflowId:e3.string().min(1),definition:e3.unknown().describe("A complete definition object, as returned by get_workflow.")}),outputSchema:iB,annotations:iX,handler:async({workflowId:e,definition:t})=>iH(R,e,(0,ik.parseWorkflowDefinition)(t))}),i4({name:"validate_workflow",title:"Validate workflow draft",description:"Check the draft without saving anything. Errors block publishing; the codes name the problem — REQUIREMENT_UNSATISFIED means a step binds a path its trigger cannot seed.",inputSchema:iD,outputSchema:e3.object({valid:e3.boolean(),diagnostics:e3.array(iU)}),annotations:iQ,handler:async({workflowId:e})=>{let t=await R().validateDraft(e);return{valid:t.valid,diagnostics:t.diagnostics.map(e=>({severity:e.severity,code:e.code,message:e.message,nodeId:e.nodeId??null,triggerId:e.triggerId??null,path:e.path??null}))}}}),i4({name:"publish_workflow",title:"Publish workflow",description:"Publish the draft as a new immutable version. Only a published version can run, and publishing fails if the draft has errors.",inputSchema:iD,outputSchema:e3.object({version:e3.unknown()}),annotations:iX,handler:async({workflowId:e})=>({version:re(await R().publish(e))})}),i4({name:"export_workflow",title:"Export workflow",description:"Export a workflow as a portable document, with secrets and machine-specific paths stripped. Pass a version id to export a published version instead of the draft.",inputSchema:e3.object({workflowId:e3.string().min(1),versionId:e3.string().optional()}),outputSchema:e3.object({export:e3.unknown()}),annotations:iQ,handler:async({workflowId:e,versionId:t})=>({export:t9(await R().export(e,t))})}),i4({name:"import_workflow",title:"Import workflow",description:"Create a workflow from an exported document. References that cannot be resolved on this machine come in marked unresolved and must be fixed before publishing.",inputSchema:e3.object({payload:e3.unknown().describe("A document from export_workflow."),name:e3.string().max(200).optional()}),outputSchema:e3.object({workflow:ij,definition:e3.unknown()}),annotations:iX,handler:async e=>{let t=await R().import(e);if(!t)throw Error("Workflow could not be imported");return{workflow:t7(t),definition:JSON.parse(t.draftDefinitionJson)}}})]},{id:"builtin:workflows:runs",name:"Runs",children:[],tools:[i4({name:"trigger_workflow",title:"Trigger workflow run",description:"Start a run of a published, enabled workflow. Runs whatever the workflow's steps do, including external side effects.",inputSchema:e3.object({workflowId:e3.string().min(1),sessionData:e3.record(e3.string(),e3.unknown()).optional().describe("Initial session data, merged with the trigger's seeds."),resourceKind:e3.enum(iS.WORKFLOW_RESOURCE_KINDS).optional().describe("Launch through a resource trigger of this kind."),resourceId:e3.string().optional().describe("The resource to launch against."),choice:e3.string().optional().describe("Option key when the workflow's trigger offers choices. Omitting it on a choice-only workflow returns the valid keys."),subjectKey:e3.string().optional().describe("Dedupe key. Defaults to the resource or a fresh id.")}),outputSchema:e3.object({run:iL}),annotations:iF,handler:async e=>{let t=await R().trigger(e);if(!t)throw Error("Workflow run could not be started");return{run:rt(t)}}}),i4({name:"list_workflow_runs",title:"List workflow runs",description:"List runs, newest first, optionally filtered.",inputSchema:e3.object({workflowId:e3.string().optional(),status:e3.enum(["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED","SUCCEEDED","FAILED","CANCELLED"]).optional(),search:e3.string().optional().describe("A run number, or part of a workflow name."),first:e3.number().int().min(1).max(200).optional(),after:e3.string().optional()}),outputSchema:e3.object({runs:e3.array(iL),nextCursor:e3.string().nullable(),totalCount:e3.number()}),annotations:iQ,handler:async e=>{let t=await R().runs(e);return{runs:t.items.map(e=>rt(e)),nextCursor:t.nextCursor,totalCount:t.totalCount}}}),i4({name:"get_workflow_run",title:"Get workflow run",description:"Read a run's status and session data, with its per-step attempts and any questions it is blocked on. Poll this after trigger_workflow.",inputSchema:e3.object({runId:e3.string().min(1),includeAttempts:e3.boolean().optional().describe("Include per-step attempts. Defaults to true.")}),outputSchema:e3.object({run:iL,attempts:e3.array(e3.unknown()),pendingQuestions:e3.array(iM)}),annotations:iQ,handler:async({runId:e,includeAttempts:t})=>{let r=await R().run(e);if(!r)throw Error(`Workflow run ${e} was not found`);let i=r.attempts??[];return{run:rt(r),attempts:!1===t?[]:i.map(e=>({id:String(e.id),nodeId:String(e.nodeId),kind:String(e.kind),generation:Number(e.generation),iterationKey:String(e.iterationKey??""),attempt:Number(e.attempt),status:String(e.status),phase:String(e.phase),input:t3(e.inputJson),output:t3(e.outputJson),error:"string"==typeof e.error?e.error:null,startedAt:t4(e.startedAt),finishedAt:t4(e.finishedAt)})),pendingQuestions:i.flatMap(e=>e.questionBatches??[]).filter(e=>"PENDING"===e.status).map(e=>{let t;return t=Array.isArray(e.questions)?e.questions:[],{batchId:String(e.id),runId:"string"==typeof e.runId?e.runId:null,status:String(e.status),createdAt:t4(e.createdAt),questions:t.map(e=>{let t=Array.isArray(e.options)?e.options:[];return{id:String(e.id),header:"string"==typeof e.header?e.header:null,prompt:String(e.prompt??""),multiSelect:!0===e.multiSelect,allowCustom:!0===e.allowCustom,options:t.map(e=>({label:String(e.label??""),description:"string"==typeof e.description?e.description:null}))}})}})}}}),i4({name:"get_workflow_run_events",title:"Get workflow run events",description:"Read a run's event log in order. Pass the last sequence you saw to tail only what is new.",inputSchema:e3.object({runId:e3.string().min(1),afterSequence:e3.number().int().optional(),first:e3.number().int().min(1).max(500).optional()}),outputSchema:e3.object({events:e3.array(iq)}),annotations:iQ,handler:async({runId:e,afterSequence:t,first:r})=>({events:(await R().runEvents(e,t,r)).map(e=>({id:String(e.id),runId:String(e.runId),attemptId:"string"==typeof e.attemptId?e.attemptId:null,sequence:Number(e.sequence),type:String(e.type),message:String(e.message??""),detail:t3(e.detailJson),createdAt:t4(e.createdAt)}))})}),i4({name:"control_workflow_run",title:"Pause, resume, or cancel a run",description:"Change an in-flight run's lifecycle. Cancelling is final, and leaves any external effects already applied in place.",inputSchema:e3.object({runId:e3.string().min(1),action:e3.enum(["PAUSE","RESUME","CANCEL"])}),outputSchema:e3.object({run:iL}),annotations:i0,handler:async({runId:e,action:t})=>{let r=await R().lifecycle(e,t);if(!r)throw Error("Workflow run lifecycle change failed");return{run:rt(r)}}}),i4({name:"answer_workflow_question",title:"Answer a workflow question",description:"Answer the question a run is parked on so it can continue. Find the batch id and the questions through get_workflow_run.",inputSchema:e3.object({batchId:e3.string().min(1).describe("From get_workflow_run."),answers:e3.record(e3.string(),e3.unknown()).describe("Answers keyed by question id. A value is the chosen option label, a list of labels for a multi-select, or free text where a custom answer is allowed.")}),outputSchema:e3.object({run:iL}),annotations:iX,handler:async({batchId:e,answers:t})=>{let r=await R().answerQuestion(e,t);if(!r)throw Error("Workflow question could not be answered");return{run:rt(r)}}}),i4({name:"prepare_workflow_replay",title:"Preview a workflow replay",description:"See what replaying a run from a given step would affect: the downstream steps, the external effects that would happen again, and whether a Git checkpoint is available. Read-only — call it before replay_workflow_run.",inputSchema:e3.object({runId:e3.string().min(1),nodeId:e3.string().min(1).describe("Step to replay from.")}),outputSchema:e3.object({preview:e3.unknown()}),annotations:iQ,handler:async({runId:e,nodeId:t})=>({preview:t9(await R().prepareReplay(e,t))})}),i4({name:"replay_workflow_run",title:"Replay a workflow run from a step",description:"Re-run a workflow from one step onward. Every external effect downstream happens again — merges, comments, deploys — so preview it with prepare_workflow_replay first.",inputSchema:e3.object({runId:e3.string().min(1),nodeId:e3.string().min(1),restore:e3.boolean().optional().describe("Restore the worktree to the Git checkpoint at that step, discarding later changes."),stash:e3.boolean().optional().describe("Stash uncommitted changes before restoring.")}),outputSchema:e3.object({run:iL}),annotations:i0,handler:async({runId:e,nodeId:t,restore:r,stash:i})=>{let a=await R().replay(e,t,{restore:r,stash:i});if(!a)throw Error("Workflow run could not be replayed");return{run:rt(a)}}}),i4({name:"archive_workflow_runs",title:"Archive workflow runs",description:"Archive or restore workflow runs.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1),archived:e3.boolean().default(!0)}),outputSchema:e3.object({count:e3.unknown()}),annotations:iX,handler:async({ids:e,archived:t})=>({count:await R().archiveRuns(e,t)})}),i4({name:"delete_workflow_runs",title:"Delete workflow runs",description:"Permanently delete workflow runs and their retained execution history.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),outputSchema:e3.object({count:e3.unknown()}),annotations:i0,handler:async({ids:e})=>({count:await R().deleteRuns(e)})}),i4({name:"repair_workflow_run_data",title:"Repair workflow run data",description:"Repair session data for a blocked or paused workflow run.",inputSchema:e3.object({runId:e3.string().min(1),patch:e3.unknown()}),outputSchema:e3.object({run:e3.unknown()}),annotations:i0,handler:async({runId:e,patch:t})=>({run:await R().repairRunData(e,t)})})]}]})),e.worktreeAutomations&&$.push((T=e.worktreeAutomations,{id:"builtin:worktree-automations",name:"Worktree Automations",children:[],tools:[i4({name:"get_worktree_automations",title:"Get worktree automations",description:"Inspect the persisted Auto Sync and Auto Merge configuration and state for a worktree.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({autoSync:iZ.nullable(),autoMerge:iY.nullable()}),annotations:iQ,handler:async({worktreeId:e})=>({autoSync:await T().autoSync(e),autoMerge:await T().autoMerge(e)})}),i4({name:"configure_worktree_auto_sync",title:"Configure worktree Auto Sync",description:"Enable or update Auto Sync. Optionally select a merge-conflict quick-action workflow and one of its trigger choices.",inputSchema:e3.object({worktreeId:e3.string().min(1),conflictWorkflowId:e3.string().min(1).nullable().optional(),conflictWorkflowChoice:e3.string().min(1).nullable().optional()}),outputSchema:e3.object({autoSync:iZ}),annotations:iX,handler:async e=>({autoSync:await T().configureAutoSync(e)})}),i4({name:"retry_worktree_auto_sync",title:"Retry worktree Auto Sync",description:"Resume a paused Auto Sync rule.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({autoSync:iZ}),annotations:iX,handler:async({worktreeId:e})=>({autoSync:await T().retryAutoSync(e)})}),i4({name:"cancel_worktree_auto_sync",title:"Cancel worktree Auto Sync",description:"Cancel any active job and remove the Auto Sync rule.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({cancelled:e3.boolean()}),annotations:i0,handler:async({worktreeId:e})=>({cancelled:await T().cancelAutoSync(e)})}),i4({name:"configure_worktree_auto_merge",title:"Configure worktree Auto Merge",description:"Enable or update GitHub-native Auto Merge and its optional Jira/worktree post-merge actions.",inputSchema:e3.object({worktreeId:e3.string().min(1),repositoryNameWithOwner:e3.string().min(3),pullRequestNumber:e3.number().int().positive(),method:e3.enum(["MERGE","REBASE","SQUASH"]),commitHeadline:e3.string().min(1),commitBody:e3.string(),authorEmail:e3.string().email().nullable().optional(),deleteWorktree:e3.boolean(),moveTicketToDone:e3.boolean()}),outputSchema:e3.object({autoMerge:iY}),annotations:iX,handler:async e=>({autoMerge:await T().configureAutoMerge(e)})}),i4({name:"retry_worktree_auto_merge",title:"Retry worktree Auto Merge",description:"Retry an Auto Merge rule that needs attention, including its safe post-merge actions.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({autoMerge:iY}),annotations:iX,handler:async({worktreeId:e})=>({autoMerge:await T().retryAutoMerge(e)})}),i4({name:"cancel_worktree_auto_merge",title:"Cancel worktree Auto Merge",description:"Disable GitHub-native Auto Merge when still active and remove the persisted rule.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({cancelled:e3.boolean()}),annotations:i0,handler:async({worktreeId:e})=>({cancelled:await T().cancelAutoMerge(e)})})]})),new i5($)}({codebaseTools:e,builds:t,...r,toolAudit:this.audit,testExternalMcpServer:e=>this.testExternalServer(e)})}async mcpToolPresets(e){let t=e?.trim().toUpperCase()??null;if(t&&!["PLAN","SESSION"].includes(t))throw Error("Run kind is not supported");let r=await (0,tX.getPrismaClient)();return(await r.mcpToolPreset.findMany({where:"PLAN"===t?{enabledForPlans:!0}:"SESSION"===t?{enabledForSessions:!0}:void 0,orderBy:{name:"asc"},include:{tools:!0}})).map(an)}async toolCallAudits(e={}){return this.audit.list(e)}async clearToolCallAudits(){return this.audit.clear()}async createMcpToolPreset(e){return this.saveMcpToolPreset(null,e)}async updateMcpToolPreset(e,t){return this.saveMcpToolPreset(e,t)}async saveMcpToolPreset(e,t){let r=t.name.trim(),i=t.description?.trim()??"";if(!r)throw Error("Preset name is required");if(r.length>80)throw Error("Preset name must be 80 characters or fewer");if(i.length>1e3)throw Error("Preset description must be 1,000 characters or fewer");if(!ar.has(t.iconKey))throw Error("Preset icon is not supported");if(!t.toolNames.length)throw Error("Select at least one built-in tool");if(new Set(t.toolNames).size!==t.toolNames.length)throw Error("Preset tool membership must not contain duplicates");let a=new Set(this.builtInTools.definitions().map(({name:e})=>e)),n=t.toolNames.map(e=>e.trim()),s=n.find(e=>!e||!a.has(e));if(void 0!==s)throw Error(`Unknown built-in tool: ${s||"(empty)"}`);let o=await (0,tX.getPrismaClient)();if((await o.mcpToolPreset.findMany({select:{id:!0,name:!0}})).some(t=>t.id!==e&&t.name.toLocaleLowerCase()===r.toLocaleLowerCase()))throw Error("An MCP tool preset with this name already exists");if(e&&!await o.mcpToolPreset.findUnique({where:{id:e}}))throw Error("MCP tool preset not found");let l=e??(0,y.randomUUID)();return await o.$transaction(async e=>{await e.mcpToolPreset.upsert({where:{id:l},create:{id:l,name:r,description:i,iconKey:t.iconKey,enabledForPlans:t.enabledForPlans,enabledForSessions:t.enabledForSessions},update:{name:r,description:i,iconKey:t.iconKey,enabledForPlans:t.enabledForPlans,enabledForSessions:t.enabledForSessions}}),await e.mcpToolPresetTool.deleteMany({where:{presetId:l}}),await e.mcpToolPresetTool.createMany({data:n.map(e=>({presetId:l,toolName:e}))})}),an(await o.mcpToolPreset.findUniqueOrThrow({where:{id:l},include:{tools:!0}}))}async deleteMcpToolPreset(e){let t=await (0,tX.getPrismaClient)();return await t.mcpToolPreset.delete({where:{id:e}}),{id:e}}async resolveRunMcpPresets(e,t){let r=[...new Set(t)];if(!r.length)return{presetIds:[],toolNames:[]};let i=await (0,tX.getPrismaClient)(),a=new Map((await i.mcpToolPreset.findMany({where:{id:{in:r},..."PLAN"===e?{enabledForPlans:!0}:{enabledForSessions:!0}},include:{tools:!0}})).map(e=>[e.id,e])),n=r.filter(e=>a.has(e)),s=new Set(this.builtInTools.definitions().map(({name:e})=>e)),o=new Set;for(let e of n)for(let{toolName:t}of a.get(e).tools)s.has(t)&&o.add(t);return{presetIds:n,toolNames:[...o].sort()}}async mcpPresetToolNames(e){let t=await (0,tX.getPrismaClient)(),r=await t.mcpToolPreset.findUnique({where:{id:e},include:{tools:!0}});if(!r)return null;let i=new Set(this.builtInTools.definitions().map(({name:e})=>e));return r.tools.map(({toolName:e})=>e).filter(e=>i.has(e))}async mcpRunToolNames(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.agentRun.findUnique({where:{id:e},select:{agentId:!0,mcpToolNamesJson:!0}});if(!i)return{status:"NOT_FOUND"};if(i.agentId!==t)return{status:"FORBIDDEN"};let a=JSON.parse(i.mcpToolNamesJson),n=new Set(Array.isArray(a)?a.filter(e=>"string"==typeof e):[]);return{status:"OK",toolNames:this.builtInTools.definitions().map(({name:e})=>e).filter(e=>n.has(e))}}async externalServers(){let e=await (0,tX.getPrismaClient)();return Promise.all((await e.externalMcpServer.findMany({orderBy:{name:"asc"},include:{headers:!0}})).map(async e=>aa(e,0===e.headers.length||await this.credentials.isConfigured((0,t1.externalMcpHeadersCredential)(e.id)))))}async createExternalServer(e){return this.saveExternalServer(null,e)}async updateExternalServer(e,t){return this.saveExternalServer(e,t)}async saveExternalServer(e,t){let r=function(e){let t,r=e.name.trim();if(!r)throw Error("Server name is required");if(r.length>80)throw Error("Server name must be 80 characters or fewer");try{t=new URL(e.url.trim())}catch{throw Error("Server URL must be a valid HTTP or HTTPS URL")}if(!["http:","https:"].includes(t.protocol)||t.username||t.password)throw Error("Server URL must be an HTTP or HTTPS URL without embedded credentials");if("STREAMABLE_HTTP"!==e.transport&&"SSE"!==e.transport)throw Error("Transport must be Streamable HTTP or SSE");let i=e.toolNamePrefix?.trim()??"";if(i.length>64||!/^[A-Za-z0-9_.-]*$/.test(i))throw Error("Tool name prefix may contain up to 64 letters, numbers, underscores, periods, or hyphens");let a=new Set,n=e.headers.map(e=>{let t=e.name.trim();if(!t)throw Error("Header name is required");let r=t.toLowerCase();if(at.has(r))throw Error(`${t} is managed by the MCP transport`);if(a.has(r))throw Error(`Duplicate header name: ${t}`);a.add(r);try{new Headers([[t,e.value??"validation"]])}catch{throw Error(`Invalid HTTP header: ${t}`)}return{id:e.id??null,name:t,value:e.value}});return{name:r,url:t.toString(),transport:e.transport,toolNamePrefix:i,headers:n}}(t),i=await (0,tX.getPrismaClient)();if((await i.externalMcpServer.findMany({select:{id:!0,name:!0}})).some(t=>t.id!==e&&t.name.toLocaleLowerCase()===r.name.toLocaleLowerCase()))throw Error("An MCP server with this name already exists");let a=e?await i.externalMcpServer.findUnique({where:{id:e},include:{headers:!0}}):null;if(e&&!a)throw Error("External MCP server not found");let n=new Map(a?.headers.map(e=>[e.id,e])??[]),s=e??(0,y.randomUUID)(),o=(0,t1.externalMcpHeadersCredential)(s),l=new Map((e?await this.credentials.getJson(o)??[]:[]).map(e=>[e.id,e]));for(let e of r.headers){if(e.id&&!n.has(e.id))throw Error(`Header ${e.name} does not belong to this server`);if(!e.id&&!e.value)throw Error(`A value is required for the new ${e.name} header`)}let u=r.headers.map(e=>{let t=e.id??(0,y.randomUUID)(),r=e.value||l.get(t)?.value;if(!r)throw Error(`A value is required for ${e.name}`);return{id:t,name:e.name,value:r}}),c=async e=>{await e.externalMcpServer.upsert({where:{id:s},create:{id:s,name:r.name,url:r.url,transport:r.transport,toolNamePrefix:r.toolNamePrefix},update:{name:r.name,url:r.url,transport:r.transport,toolNamePrefix:r.toolNamePrefix}}),await e.externalMcpServerHeader.deleteMany({where:{serverId:s}}),u.length&&await e.externalMcpServerHeader.createMany({data:u.map(e=>({id:e.id,serverId:s,name:e.name}))})};return u.length?await this.credentials.setJson(o,u,c):await this.credentials.delete(o,c),aa(await i.externalMcpServer.findUniqueOrThrow({where:{id:s},include:{headers:!0}}),!0)}async deleteExternalServer(e){return await this.credentials.delete((0,t1.externalMcpHeadersCredential)(e),async t=>{await t.externalMcpServer.delete({where:{id:e}})}),{id:e}}async testExternalServer(e){let t=await this.externalServerWithSecrets(e),r=await this.listRemoteTools(t);return{id:t.id,name:t.name,toolCount:r.length}}async catalog(){let e=await (0,tX.getPrismaClient)(),t=await e.externalMcpServer.findMany({orderBy:{name:"asc"},include:{headers:!0}}),r=await Promise.all(t.map(async e=>{try{let t=await this.listRemoteTools(await this.externalServerWithSecrets(e.id));return{id:`${ae}${e.id}`,name:e.name,source:"EXTERNAL",transport:ai(e.transport),url:e.url,error:null,tools:t.map(t=>({...t,name:`${e.toolNamePrefix}${t.name}`})),children:[]}}catch(t){return{id:`${ae}${e.id}`,name:e.name,source:"EXTERNAL",transport:ai(e.transport),url:e.url,error:t instanceof Error?t.message:String(t),tools:[],children:[]}}}));return{groups:[...this.builtInTools.catalog(),...r]}}async callTool(e,t){let r=()=>this.invokeTool(e);return t?this.audit.execute({...t,groupId:e.groupId,toolName:e.name,arguments:e.arguments},r):r()}async callBuiltInTool(e,t,r){let i=this.builtInTools.groupIdForName(e);if(!i)throw Error(`Unknown built-in tool: ${e}`);let a=()=>this.builtInTools.callByName(e,t);return r?this.audit.execute({...r,groupId:i,toolName:e,arguments:t},a):a()}async invokeTool(e){if(this.builtInTools.hasGroup(e.groupId))return this.builtInTools.call(e.groupId,e.name,e.arguments);if(!e.groupId.startsWith(ae))throw Error("Unknown tool group");let t=e.groupId.slice(ae.length),r=await this.externalServerWithSecrets(t);if(!e.name.startsWith(r.toolNamePrefix))throw Error("Tool name does not use this server's configured prefix");let i=e.name.slice(r.toolNamePrefix.length);if(!i)throw Error("Tool name is required");return this.withClient(r,t=>t.callTool({name:i,arguments:e.arguments},void 0,{timeout:12e4,resetTimeoutOnProgress:!0}))}async externalServerWithSecrets(e){let t=await (0,tX.getPrismaClient)(),r=await t.externalMcpServer.findUnique({where:{id:e},include:{headers:!0}});if(!r)throw Error("External MCP server not found");if(ai(r.transport),!r.headers.length)return{...r,headers:[]};let i=await this.credentials.getJson((0,t1.externalMcpHeadersCredential)(r.id));if(!i)throw Error("External MCP server headers are not configured; re-enter them in Settings");let a=new Map(i.map(e=>[e.id,e]));return{...r,headers:r.headers.map(e=>{let t=a.get(e.id);if(!t?.value)throw Error(`External MCP header ${e.name} is missing; re-enter it in Settings`);return{id:e.id,name:e.name,value:t.value}})}}async withClient(e,t){var r;let i,a=new ep({name:"ai-development-environment-tools",version:"0.1.0"}),n=(r=e,async(e,t)=>{let i=new Headers(r.headers.map(e=>[e.name,e.value]));return e instanceof Request&&e.headers.forEach((e,t)=>i.set(t,e)),new Headers(t?.headers).forEach((e,t)=>i.set(t,e)),fetch(e,{...t,headers:i})}),s="STREAMABLE_HTTP"===ai(e.transport)?new tQ(new URL(e.url),{fetch:n}):new tJ(new URL(e.url),{fetch:n}),o=()=>i??=a.close().catch(()=>void 0);try{let e;try{await Promise.race([a.connect(s,{timeout:15e3}),new Promise((t,r)=>{e=setTimeout(()=>{o(),r(Error("External MCP server connection timed out after 15000ms"))},15e3)})])}finally{e&&clearTimeout(e)}return await t(a)}finally{await o()}}async listRemoteTools(e){return this.withClient(e,async e=>{let t,r=[],i=new Set,a=0;do{let n=await e.listTools(t?{cursor:t}:void 0,{timeout:15e3});a+=1,r.push(...n.tools.map(e=>({name:e.name,title:e.title??null,description:e.description??null,inputSchema:e.inputSchema,outputSchema:e.outputSchema??null,annotations:e.annotations?{readOnlyHint:e.annotations.readOnlyHint??!1,destructiveHint:e.annotations.destructiveHint??!1,idempotentHint:e.annotations.idempotentHint??!1,openWorldHint:e.annotations.openWorldHint??!0}:null})));let s=n.nextCursor;if(s){if(i.has(s))throw Error("External MCP server returned a repeated tools/list cursor");if(a>=100)throw Error("External MCP server exceeded the tools/list pagination limit of 100 pages");i.add(s)}t=s}while(t)return r})}}function ao(e){let t=e.get("authorization");return t?.startsWith("Bearer ")&&t.slice(7).trim()||null}function al(e){let t=e.headers.get("x-request-id")?.trim();return t&&t.length<=128?t:(0,y.randomUUID)()}function au(e){return e.headers.get("cf-connecting-ip")??e.headers.get("x-forwarded-for")?.split(",")[0]?.trim()??"unknown"}function ac(e){return Response.json({error:{code:"TOOL_API_UNAUTHORIZED",message:e}},{status:401,headers:{"www-authenticate":"Bearer"}})}function ad(e,t){let r,i,a=process.env.TOOLS_API_TOKEN?.trim();if(!a)return{context:{caller:`anonymous@${au(e)}`,correlationId:al(e),source:t}};let n=ao(e.headers);if(!n||(r=Buffer.from(n),i=Buffer.from(a),!(r.length===i.length&&(0,y.timingSafeEqual)(r,i))))return{response:ac("A valid bearer token is required")};let s=(0,y.createHash)("sha256").update(n).digest("hex").slice(0,12);return{context:{caller:`bearer:${s}@${au(e)}`,correlationId:al(e),source:t}}}async function ap(e,t){let r=await t.authenticate(ao(e.headers));return r?{agentId:r,context:{caller:`agent:${r}@${au(e)}`,correlationId:al(e),source:"MCP"}}:{response:ac("A valid enrolled agent credential is required")}}e.s(["authorizeMcpPresetRequest",0,function(e){return ad(e,"MCP")},"authorizeRunMcpRequest",0,ap,"authorizeToolRequest",0,ad],583801);class ah{constructor(e){this._server=e}requestStream(e,t,r){return this._server.requestStream(e,t,r)}createMessageStream(e,t){let r=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!r?.sampling?.tools)throw Error("Client does not support sampling tools capability.");if(e.messages.length>0){let t=e.messages[e.messages.length-1],r=Array.isArray(t.content)?t.content:[t.content],i=r.some(e=>"tool_result"===e.type),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,n=a?Array.isArray(a.content)?a.content:[a.content]:[],s=n.some(e=>"tool_use"===e.type);if(i){if(r.some(e=>"tool_result"!==e.type))throw Error("The last message must contain only tool_result content if any is present");if(!s)throw Error("tool_result blocks are not matching any tool_use from the previous message")}if(s){let e=new Set(n.filter(e=>"tool_use"===e.type).map(e=>e.id)),t=new Set(r.filter(e=>"tool_result"===e.type).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},v.CreateMessageResultSchema,t)}elicitInputStream(e,t){let r=this._server.getClientCapabilities(),i=e.mode??"form";switch(i){case"url":if(!r?.elicitation?.url)throw Error("Client does not support url elicitation.");break;case"form":if(!r?.elicitation?.form)throw Error("Client does not support form elicitation.")}let a="form"===i&&void 0===e.mode?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:a},v.ElicitResultSchema,t)}async getTask(e,t){return this._server.getTask({taskId:e},t)}async getTaskResult(e,t,r){return this._server.getTaskResult({taskId:e},t,r)}async listTasks(e,t){return this._server.listTasks(e?{cursor:e}:void 0,t)}async cancelTask(e,t){return this._server.cancelTask({taskId:e},t)}}class am extends ei{constructor(e,t){super(t),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(v.LoggingLevelSchema.options.map((e,t)=>[e,t])),this.isMessageIgnored=(e,t)=>{let r=this._loggingLevels.get(t);return!!r&&this.LOG_LEVEL_SEVERITY.get(e)<this.LOG_LEVEL_SEVERITY.get(r)},this._capabilities=t?.capabilities??{},this._instructions=t?.instructions,this._jsonSchemaValidator=t?.jsonSchemaValidator??new el,this.setRequestHandler(v.InitializeRequestSchema,e=>this._oninitialize(e)),this.setNotificationHandler(v.InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(v.SetLevelRequestSchema,async(e,t)=>{let r=t.sessionId||t.requestInfo?.headers["mcp-session-id"]||void 0,{level:i}=e.params,a=v.LoggingLevelSchema.safeParse(i);return a.success&&this._loggingLevels.set(r,a.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new ah(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw Error("Cannot register capabilities after connecting to transport");this._capabilities=en(this._capabilities,e)}setRequestHandler(e,t){let r,i=(0,b.getObjectShape)(e),a=i?.method;if(!a)throw Error("Schema is missing a method literal");if((0,b.isZ4Schema)(a)){let e=a._zod?.def;r=e?.value??a.value}else{let e=a._def;r=e?.value??a.value}if("string"!=typeof r)throw Error("Schema method literal must be a string");if("tools/call"===r){let r=async(e,r)=>{let i=(0,b.safeParse)(v.CallToolRequestSchema,e);if(!i.success){let e=i.error instanceof Error?i.error.message:String(i.error);throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid tools/call request: ${e}`)}let{params:a}=i.data,n=await Promise.resolve(t(e,r));if(a.task){let e=(0,b.safeParse)(v.CreateTaskResultSchema,n);if(!e.success){let t=e.error instanceof Error?e.error.message:String(e.error);throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid task creation result: ${t}`)}return e.data}let s=(0,b.safeParse)(v.CallToolResultSchema,n);if(!s.success){let e=s.error instanceof Error?s.error.message:String(s.error);throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid tools/call result: ${e}`)}return s.data};return super.setRequestHandler(e,r)}return super.setRequestHandler(e,t)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${e})`)}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${e})`)}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${e})`)}}assertTaskCapability(e){ed(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&ec(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:v.SUPPORTED_PROTOCOL_VERSIONS.includes(t)?t:v.LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},v.EmptyResultSchema)}async createMessage(e,t){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw Error("Client does not support sampling tools capability.");if(e.messages.length>0){let t=e.messages[e.messages.length-1],r=Array.isArray(t.content)?t.content:[t.content],i=r.some(e=>"tool_result"===e.type),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,n=a?Array.isArray(a.content)?a.content:[a.content]:[],s=n.some(e=>"tool_use"===e.type);if(i){if(r.some(e=>"tool_result"!==e.type))throw Error("The last message must contain only tool_result content if any is present");if(!s)throw Error("tool_result blocks are not matching any tool_use from the previous message")}if(s){let e=new Set(n.filter(e=>"tool_use"===e.type).map(e=>e.id)),t=new Set(r.filter(e=>"tool_result"===e.type).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},v.CreateMessageResultWithToolsSchema,t):this.request({method:"sampling/createMessage",params:e},v.CreateMessageResultSchema,t)}async elicitInput(e,t){switch(e.mode??"form"){case"url":if(!this._clientCapabilities?.elicitation?.url)throw Error("Client does not support url elicitation.");return this.request({method:"elicitation/create",params:e},v.ElicitResultSchema,t);case"form":{if(!this._clientCapabilities?.elicitation?.form)throw Error("Client does not support form elicitation.");let r="form"===e.mode?e:{...e,mode:"form"},i=await this.request({method:"elicitation/create",params:r},v.ElicitResultSchema,t);if("accept"===i.action&&i.content&&r.requestedSchema)try{let e=this._jsonSchemaValidator.getValidator(r.requestedSchema)(i.content);if(!e.valid)throw new v.McpError(v.ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${e.errorMessage}`)}catch(e){if(e instanceof v.McpError)throw e;throw new v.McpError(v.ErrorCode.InternalError,`Error validating elicitation response: ${e instanceof Error?e.message:String(e)}`)}return i}}}createElicitationCompletionNotifier(e,t){if(!this._clientCapabilities?.elicitation?.url)throw Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},t)}async listRoots(e,t){return this.request({method:"roots/list",params:e},v.ListRootsResultSchema,t)}async sendLoggingMessage(e,t){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,t))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}let af=Symbol.for("mcp.completable");function ag(e){return!!e&&"object"==typeof e&&af in e}(i||(i={})).Completable="McpCompletable";let ay=/^[A-Za-z0-9._-]{1,128}$/;function aw(e){let t=function(e){let t=[];if(0===e.length)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(" ")&&t.push("Tool name contains spaces, which may cause parsing issues"),e.includes(",")&&t.push("Tool name contains commas, which may cause parsing issues"),(e.startsWith("-")||e.endsWith("-"))&&t.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(e.startsWith(".")||e.endsWith("."))&&t.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!ay.test(e)){let r=e.split("").filter(e=>!/[A-Za-z0-9._-]/.test(e)).filter((e,t,r)=>r.indexOf(e)===t);return t.push(`Tool name contains invalid characters: ${r.map(e=>`"${e}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}(e);var r=t.warnings;if(r.length>0){for(let t of(console.warn(`Tool name validation warning for "${e}":`),r))console.warn(` - ${t}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}return t.isValid}class ab{constructor(e){this._mcpServer=e}registerToolTask(e,t,r){let i={taskSupport:"required",...t.execution};if("forbidden"===i.taskSupport)throw Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,t.title,t.description,t.inputSchema,t.outputSchema,t.annotations,i,t._meta,r)}}class av{constructor(e,t){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new am(e,t)}get experimental(){return this._experimental||(this._experimental={tasks:new ab(this)}),this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(aA(v.ListToolsRequestSchema)),this.server.assertCanSetRequestHandler(aA(v.CallToolRequestSchema)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(v.ListToolsRequestSchema,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,t])=>{let r,i={name:e,title:t.title,description:t.description,inputSchema:(r=(0,b.normalizeObjectSchema)(t.inputSchema))?ee(r,{strictUnions:!0,pipeStrategy:"input"}):ak,annotations:t.annotations,execution:t.execution,_meta:t._meta};if(t.outputSchema){let e=(0,b.normalizeObjectSchema)(t.outputSchema);e&&(i.outputSchema=ee(e,{strictUnions:!0,pipeStrategy:"output"}))}return i})})),this.server.setRequestHandler(v.CallToolRequestSchema,async(e,t)=>{try{let r=this._registeredTools[e.params.name];if(!r)throw new v.McpError(v.ErrorCode.InvalidParams,`Tool ${e.params.name} not found`);if(!r.enabled)throw new v.McpError(v.ErrorCode.InvalidParams,`Tool ${e.params.name} disabled`);let i=!!e.params.task,a=r.execution?.taskSupport,n="createTask"in r.handler;if(("required"===a||"optional"===a)&&!n)throw new v.McpError(v.ErrorCode.InternalError,`Tool ${e.params.name} has taskSupport '${a}' but was not registered with registerToolTask`);if("required"===a&&!i)throw new v.McpError(v.ErrorCode.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if("optional"===a&&!i&&n)return await this.handleAutomaticTaskPolling(r,e,t);let s=await this.validateToolInput(r,e.params.arguments,e.params.name),o=await this.executeToolHandler(r,s,t);if(i)return o;return await this.validateToolOutput(r,o,e.params.name),o}catch(e){if(e instanceof v.McpError&&e.code===v.ErrorCode.UrlElicitationRequired)throw e;return this.createToolError(e instanceof Error?e.message:String(e))}}),this._toolHandlersInitialized=!0)}createToolError(e){return{content:[{type:"text",text:e}],isError:!0}}async validateToolInput(e,t,r){if(!e.inputSchema)return;let i=(0,b.normalizeObjectSchema)(e.inputSchema)??e.inputSchema,a=await (0,b.safeParseAsync)(i,t);if(!a.success){let e="error"in a?a.error:"Unknown error",t=(0,b.getParseErrorMessage)(e);throw new v.McpError(v.ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${r}: ${t}`)}return a.data}async validateToolOutput(e,t,r){if(!e.outputSchema||!("content"in t)||t.isError)return;if(!t.structuredContent)throw new v.McpError(v.ErrorCode.InvalidParams,`Output validation error: Tool ${r} has an output schema but no structured content was provided`);let i=(0,b.normalizeObjectSchema)(e.outputSchema),a=await (0,b.safeParseAsync)(i,t.structuredContent);if(!a.success){let e="error"in a?a.error:"Unknown error",t=(0,b.getParseErrorMessage)(e);throw new v.McpError(v.ErrorCode.InvalidParams,`Output validation error: Invalid structured content for tool ${r}: ${t}`)}}async executeToolHandler(e,t,r){let i=e.handler;if("createTask"in i){if(!r.taskStore)throw Error("No task store provided.");let a={...r,taskStore:r.taskStore};return e.inputSchema?await Promise.resolve(i.createTask(t,a)):await Promise.resolve(i.createTask(a))}return e.inputSchema?await Promise.resolve(i(t,r)):await Promise.resolve(i(r))}async handleAutomaticTaskPolling(e,t,r){if(!r.taskStore)throw Error("No task store provided for task-capable tool.");let i=await this.validateToolInput(e,t.params.arguments,t.params.name),a=e.handler,n={...r,taskStore:r.taskStore},s=i?await Promise.resolve(a.createTask(i,n)):await Promise.resolve(a.createTask(n)),o=s.task.taskId,l=s.task,u=l.pollInterval??5e3;for(;"completed"!==l.status&&"failed"!==l.status&&"cancelled"!==l.status;){await new Promise(e=>setTimeout(e,u));let e=await r.taskStore.getTask(o);if(!e)throw new v.McpError(v.ErrorCode.InternalError,`Task ${o} not found during polling`);l=e}return await r.taskStore.getTaskResult(o)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(aA(v.CompleteRequestSchema)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(v.CompleteRequestSchema,async e=>{switch(e.params.ref.type){case"ref/prompt":return(0,v.assertCompleteRequestPrompt)(e),this.handlePromptCompletion(e,e.params.ref);case"ref/resource":return(0,v.assertCompleteRequestResourceTemplate)(e),this.handleResourceCompletion(e,e.params.ref);default:throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(e,t){let r,i=this._registeredPrompts[t.name];if(!i)throw new v.McpError(v.ErrorCode.InvalidParams,`Prompt ${t.name} not found`);if(!i.enabled)throw new v.McpError(v.ErrorCode.InvalidParams,`Prompt ${t.name} disabled`);if(!i.argsSchema)return aC;let a=(0,b.getObjectShape)(i.argsSchema),n=a?.[e.params.argument.name];if(!ag(n))return aC;let s=(r=n[af],r?.complete);return s?a_(await s(e.params.argument.value,e.params.context)):aC}async handleResourceCompletion(e,t){let r=Object.values(this._registeredResourceTemplates).find(e=>e.resourceTemplate.uriTemplate.toString()===t.uri);if(!r){if(this._registeredResources[t.uri])return aC;throw new v.McpError(v.ErrorCode.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let i=r.resourceTemplate.completeCallback(e.params.argument.name);return i?a_(await i(e.params.argument.value,e.params.context)):aC}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(aA(v.ListResourcesRequestSchema)),this.server.assertCanSetRequestHandler(aA(v.ListResourceTemplatesRequestSchema)),this.server.assertCanSetRequestHandler(aA(v.ReadResourceRequestSchema)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(v.ListResourcesRequestSchema,async(e,t)=>{let r=Object.entries(this._registeredResources).filter(([e,t])=>t.enabled).map(([e,t])=>({uri:e,name:t.name,...t.metadata})),i=[];for(let e of Object.values(this._registeredResourceTemplates))if(e.resourceTemplate.listCallback)for(let r of(await e.resourceTemplate.listCallback(t)).resources)i.push({...e.metadata,...r});return{resources:[...r,...i]}}),this.server.setRequestHandler(v.ListResourceTemplatesRequestSchema,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([e,t])=>({name:e,uriTemplate:t.resourceTemplate.uriTemplate.toString(),...t.metadata}))})),this.server.setRequestHandler(v.ReadResourceRequestSchema,async(e,t)=>{let r=new URL(e.params.uri),i=this._registeredResources[r.toString()];if(i){if(!i.enabled)throw new v.McpError(v.ErrorCode.InvalidParams,`Resource ${r} disabled`);return i.readCallback(r,t)}for(let e of Object.values(this._registeredResourceTemplates)){let i=e.resourceTemplate.uriTemplate.match(r.toString());if(i)return e.readCallback(r,i,t)}throw new v.McpError(v.ErrorCode.InvalidParams,`Resource ${r} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(aA(v.ListPromptsRequestSchema)),this.server.assertCanSetRequestHandler(aA(v.GetPromptRequestSchema)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(v.ListPromptsRequestSchema,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,t])=>{var r;let i;return{name:e,title:t.title,description:t.description,arguments:t.argsSchema?(r=t.argsSchema,(i=(0,b.getObjectShape)(r))?Object.entries(i).map(([e,t])=>({name:e,description:(0,b.getSchemaDescription)(t),required:!(0,b.isSchemaOptional)(t)})):[]):void 0}})})),this.server.setRequestHandler(v.GetPromptRequestSchema,async(e,t)=>{let r=this._registeredPrompts[e.params.name];if(!r)throw new v.McpError(v.ErrorCode.InvalidParams,`Prompt ${e.params.name} not found`);if(!r.enabled)throw new v.McpError(v.ErrorCode.InvalidParams,`Prompt ${e.params.name} disabled`);if(r.argsSchema){let i=(0,b.normalizeObjectSchema)(r.argsSchema),a=await (0,b.safeParseAsync)(i,e.params.arguments);if(!a.success){let t="error"in a?a.error:"Unknown error",r=(0,b.getParseErrorMessage)(t);throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${r}`)}let n=a.data,s=r.callback;return await Promise.resolve(s(n,t))}{let e=r.callback;return await Promise.resolve(e(t))}}),this._promptHandlersInitialized=!0)}resource(e,t,...r){let i;"object"==typeof r[0]&&(i=r.shift());let a=r[0];if("string"==typeof t){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let r=this._createRegisteredResource(e,void 0,t,i,a);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),r}{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let r=this._createRegisteredResourceTemplate(e,void 0,t,i,a);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),r}}registerResource(e,t,r,i){if("string"==typeof t){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let a=this._createRegisteredResource(e,r.title,t,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let a=this._createRegisteredResourceTemplate(e,r.title,t,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}}_createRegisteredResource(e,t,r,i,a){let n={name:e,title:t,metadata:i,readCallback:a,enabled:!0,disable:()=>n.update({enabled:!1}),enable:()=>n.update({enabled:!0}),remove:()=>n.update({uri:null}),update:e=>{void 0!==e.uri&&e.uri!==r&&(delete this._registeredResources[r],e.uri&&(this._registeredResources[e.uri]=n)),void 0!==e.name&&(n.name=e.name),void 0!==e.title&&(n.title=e.title),void 0!==e.metadata&&(n.metadata=e.metadata),void 0!==e.callback&&(n.readCallback=e.callback),void 0!==e.enabled&&(n.enabled=e.enabled),this.sendResourceListChanged()}};return this._registeredResources[r]=n,n}_createRegisteredResourceTemplate(e,t,r,i,a){let n={resourceTemplate:r,title:t,metadata:i,readCallback:a,enabled:!0,disable:()=>n.update({enabled:!1}),enable:()=>n.update({enabled:!0}),remove:()=>n.update({name:null}),update:t=>{void 0!==t.name&&t.name!==e&&(delete this._registeredResourceTemplates[e],t.name&&(this._registeredResourceTemplates[t.name]=n)),void 0!==t.title&&(n.title=t.title),void 0!==t.template&&(n.resourceTemplate=t.template),void 0!==t.metadata&&(n.metadata=t.metadata),void 0!==t.callback&&(n.readCallback=t.callback),void 0!==t.enabled&&(n.enabled=t.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=n;let s=r.uriTemplate.variableNames;return Array.isArray(s)&&s.some(e=>!!r.completeCallback(e))&&this.setCompletionRequestHandler(),n}_createRegisteredPrompt(e,t,r,i,a){let n={title:t,description:r,argsSchema:void 0===i?void 0:(0,b.objectFromShape)(i),callback:a,enabled:!0,disable:()=>n.update({enabled:!1}),enable:()=>n.update({enabled:!0}),remove:()=>n.update({name:null}),update:t=>{void 0!==t.name&&t.name!==e&&(delete this._registeredPrompts[e],t.name&&(this._registeredPrompts[t.name]=n)),void 0!==t.title&&(n.title=t.title),void 0!==t.description&&(n.description=t.description),void 0!==t.argsSchema&&(n.argsSchema=(0,b.objectFromShape)(t.argsSchema)),void 0!==t.callback&&(n.callback=t.callback),void 0!==t.enabled&&(n.enabled=t.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=n,i&&Object.values(i).some(e=>ag(e instanceof e3.ZodOptional?e._def?.innerType:e))&&this.setCompletionRequestHandler(),n}_createRegisteredTool(e,t,r,i,a,n,s,o,l){aw(e);let u={title:t,description:r,inputSchema:ax(i),outputSchema:ax(a),annotations:n,execution:s,_meta:o,handler:l,enabled:!0,disable:()=>u.update({enabled:!1}),enable:()=>u.update({enabled:!0}),remove:()=>u.update({name:null}),update:t=>{void 0!==t.name&&t.name!==e&&("string"==typeof t.name&&aw(t.name),delete this._registeredTools[e],t.name&&(this._registeredTools[t.name]=u)),void 0!==t.title&&(u.title=t.title),void 0!==t.description&&(u.description=t.description),void 0!==t.paramsSchema&&(u.inputSchema=(0,b.objectFromShape)(t.paramsSchema)),void 0!==t.outputSchema&&(u.outputSchema=(0,b.objectFromShape)(t.outputSchema)),void 0!==t.callback&&(u.handler=t.callback),void 0!==t.annotations&&(u.annotations=t.annotations),void 0!==t._meta&&(u._meta=t._meta),void 0!==t.enabled&&(u.enabled=t.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=u,this.setToolRequestHandlers(),this.sendToolListChanged(),u}tool(e,...t){let r,i,a,n;if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);if("string"==typeof t[0]&&(r=t.shift()),t.length>1){let r=t[0];if(aI(r))i=t.shift(),t.length>1&&"object"==typeof t[0]&&null!==t[0]&&!aI(t[0])&&(n=t.shift());else if("object"==typeof r&&null!==r){if(Object.values(r).some(e=>"object"==typeof e&&null!==e))throw Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);n=t.shift()}}let s=t[0];return this._createRegisteredTool(e,void 0,r,i,a,n,{taskSupport:"forbidden"},void 0,s)}registerTool(e,t,r){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let{title:i,description:a,inputSchema:n,outputSchema:s,annotations:o,_meta:l}=t;return this._createRegisteredTool(e,i,a,n,s,o,{taskSupport:"forbidden"},l,r)}prompt(e,...t){let r,i;if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);"string"==typeof t[0]&&(r=t.shift()),t.length>1&&(i=t.shift());let a=t[0],n=this._createRegisteredPrompt(e,void 0,r,i,a);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),n}registerPrompt(e,t,r){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let{title:i,description:a,argsSchema:n}=t,s=this._createRegisteredPrompt(e,i,a,n,r);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),s}isConnected(){return void 0!==this.server.transport}async sendLoggingMessage(e,t){return this.server.sendLoggingMessage(e,t)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}}let ak={type:"object",properties:{}};function aS(e){return null!==e&&"object"==typeof e&&"parse"in e&&"function"==typeof e.parse&&"safeParse"in e&&"function"==typeof e.safeParse}function aE(e){return"_def"in e||"_zod"in e||aS(e)}function aI(e){return!("object"!=typeof e||null===e||aE(e))&&(0===Object.keys(e).length||Object.values(e).some(aS))}function ax(e){if(e){if(aI(e))return(0,b.objectFromShape)(e);if(!aE(e))throw Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return e}}function aA(e){let t=(0,b.getObjectShape)(e),r=t?.method;if(!r)throw Error("Schema is missing a method literal");let i=(0,b.getLiteralValue)(r);if("string"==typeof i)return i;throw Error("Schema method literal must be a string")}function a_(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}let aC={completion:{values:[],hasMore:!1}};e.s(["createBuiltInMcpServer",0,function(e,t=(t,r)=>e.callByName(t,r),r){let i=new av({name:"ai-development-environment",version:"0.1.0"}),a=i.registerTool.bind(i);for(let i of e.definitions())(!r||r.has(i.name))&&a(i.name,{title:i.title,description:i.description,inputSchema:i.inputSchema,outputSchema:i.outputSchema,annotations:i.annotations},async e=>t(i.name,e));return i}],700909),e.s([],719961);var aR=e.i(119909);let aT="server:worktree-automations",aD=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]),aN=new Set(["SUCCEEDED","FAILED","CANCELLED"]);function aO(e){let[t,r,i]=e.split("/");if(!t||!r||i)throw Error("A GitHub repository must be in owner/name format");return{owner:t,name:r}}function aP(e){return{worktreeId:e.worktreeId,state:e.state,conflictWorkflowId:e.conflictWorkflowId,conflictWorkflowChoice:e.conflictWorkflowChoice,lastError:e.lastError,lastSyncedAt:e.lastSyncedAt?.toISOString()??null,updatedAt:e.updatedAt.toISOString()}}function a$(e){return{...e,mergeMethod:e.mergeMethod,updatedAt:e.updatedAt.toISOString()}}class aU{worktrees;github;jira;workflows;agentControl;polling;timer;running;rerunRequested;constructor(e,t,r,i,a,n){this.worktrees=e,this.github=t,this.jira=r,this.workflows=i,this.agentControl=a,this.polling=n,this.timer=null,this.running=!1,this.rerunRequested=!1,this.agentControl.registerCompletionObserver(async e=>{e.kind===aR.WORKTREE_AUTO_SYNC_JOB_KIND&&this.changed()}),this.polling?.register({id:aT,kind:"WORKTREE_AUTOMATION",runtime:"SERVER",enabled:!0,cadenceSeconds:60,details:{}})}startRuntime(){queueMicrotask(()=>void this.reconcile())}schedule(){this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>void this.reconcile(),6e4),this.timer.unref(),this.polling?.schedule(aT,new Date(Date.now()+6e4))}changed(){if(this.running){this.rerunRequested=!0;return}this.timer&&clearTimeout(this.timer),this.timer=null,queueMicrotask(()=>void this.reconcile())}async stopAutoSyncWork(e){e?.activeJobId&&await this.agentControl.cancelJob(e.activeJobId).catch(()=>null),e?.workflowRunId&&await this.workflows.lifecycle(e.workflowRunId,"CANCEL").catch(()=>null)}async autoSync(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoSync.findUnique({where:{worktreeId:e}});return r?aP(r):null}async configureAutoSync(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktree.findFirst({where:{id:e.worktreeId,missingAt:null},select:{id:!0,branch:!0,codebaseId:!0,codebase:{select:{repositoryId:!0}}}});if(!r?.branch)throw Error("Auto Sync requires a branch");await this.stopAutoSyncWork(await t.worktreeAutoSync.findUnique({where:{worktreeId:r.id},select:{activeJobId:!0,workflowRunId:!0}}));let i=e.conflictWorkflowId?.trim()||null;if(i){let e=await t.workflow.findUnique({where:{id:i},select:{enabled:!0,archivedAt:!0,activeVersionId:!0,quickActionKind:!0,quickActionRepositories:{select:{repositoryId:!0}}}});if(!e?.enabled||e.archivedAt||!e.activeVersionId||"MERGE_CONFLICT"!==e.quickActionKind)throw Error("Select an enabled merge-conflict quick action workflow");if(e.quickActionRepositories.length>0&&!e.quickActionRepositories.some(({repositoryId:e})=>e===r.codebase.repositoryId))throw Error("The merge-conflict workflow is not available for this repository")}let a=await t.worktreeAutoSync.upsert({where:{worktreeId:r.id},create:{worktreeId:r.id,branch:r.branch,conflictWorkflowId:i,conflictWorkflowChoice:e.conflictWorkflowChoice?.trim()||null},update:{state:"ACTIVE",branch:r.branch,conflictWorkflowId:i,conflictWorkflowChoice:e.conflictWorkflowChoice?.trim()||null,activeJobId:null,workflowRunId:null,lastError:null}});return this.worktrees.publishAutomationChange(r.id,r.codebaseId),this.changed(),aP(a)}async cancelAutoSync(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoSync.findUnique({where:{worktreeId:e},select:{activeJobId:!0,workflowRunId:!0}});await this.stopAutoSyncWork(r);let i=await t.worktreeAutoSync.deleteMany({where:{worktreeId:e}});return this.worktrees.publishAutomationChange(e),i.count>0}async retryAutoSync(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoSync.update({where:{worktreeId:e},data:{state:"ACTIVE",activeJobId:null,workflowRunId:null,lastError:null}});return this.worktrees.publishAutomationChange(e),this.changed(),aP(r)}async autoMerge(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoMerge.findUnique({where:{worktreeId:e}});return r?a$(r):null}async configureAutoMerge(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktree.findFirst({where:{id:e.worktreeId,missingAt:null},select:{id:!0,primary:!0,branch:!0,codebaseId:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}});if(!r?.branch)throw Error("Auto Merge requires a branch");if(e.deleteWorktree&&r.primary)throw Error("The primary worktree cannot be deleted after merge");let i=await t.worktreeAutoMerge.findUnique({where:{worktreeId:r.id}}),a=await this.worktrees.ticketKeyForWorktree(r.id);if(e.moveTicketToDone){if(!a)throw Error("This worktree is not linked to a Jira ticket");let e=await t.jiraProject.findUnique({where:{key:a.split("-")[0]??""},select:{doneStatusId:!0}});if(!e?.doneStatusId)throw Error("Configure this Jira project's done status before enabling this option")}let n=aO(e.repositoryNameWithOwner),s=await this.github.pullRequestAutomationState(n.owner,n.name,e.pullRequestNumber);if(s.headRefName!==r.branch)throw Error("The pull request does not belong to this worktree branch");if(!s.headRepositoryNameWithOwner)throw Error("The pull request head repository is unavailable");if(r.codebase.repository.canonicalOrigin.toLowerCase()!==`github.com/${s.headRepositoryNameWithOwner.toLowerCase()}`)throw Error("The pull request head repository does not match this worktree");let o=!!(i&&(i.repositoryNameWithOwner.toLowerCase()!==e.repositoryNameWithOwner.toLowerCase()||i.pullRequestNumber!==e.pullRequestNumber)),l=!1,u=!1;try{if(i&&o){let e=aO(i.repositoryNameWithOwner),t=await this.github.pullRequestAutomationState(e.owner,e.name,i.pullRequestNumber);"OPEN"===t.state&&t.autoMergeEnabled&&(await this.github.disablePullRequestAutoMerge({...e,number:i.pullRequestNumber},"WORKTREE_AUTOMATION"),l=!0)}u=!0,await this.github.enablePullRequestAutoMerge({...n,number:e.pullRequestNumber,method:e.method,commitHeadline:e.commitHeadline,commitBody:e.commitBody,authorEmail:e.authorEmail},"WORKTREE_AUTOMATION");let s=await t.worktreeAutoMerge.upsert({where:{worktreeId:r.id},create:{worktreeId:r.id,repositoryNameWithOwner:e.repositoryNameWithOwner,pullRequestNumber:e.pullRequestNumber,branch:r.branch,mergeMethod:e.method,commitHeadline:e.commitHeadline.trim(),commitBody:e.commitBody,authorEmail:e.authorEmail?.trim()||null,deleteWorktree:e.deleteWorktree,moveTicketToDone:e.moveTicketToDone,ticketKey:a},update:{state:"ACTIVE",repositoryNameWithOwner:e.repositoryNameWithOwner,pullRequestNumber:e.pullRequestNumber,branch:r.branch,mergeMethod:e.method,commitHeadline:e.commitHeadline.trim(),commitBody:e.commitBody,authorEmail:e.authorEmail?.trim()||null,deleteWorktree:e.deleteWorktree,moveTicketToDone:e.moveTicketToDone,ticketKey:a,ticketMovedAt:null,deleteJobId:null,lastError:null}});return this.worktrees.publishAutomationChange(r.id,r.codebaseId),this.changed(),a$(s)}catch(t){if(u&&await this.github.disablePullRequestAutoMerge({...n,number:e.pullRequestNumber},"WORKTREE_AUTOMATION").catch(()=>null),i&&(l||!o)){let e=aO(i.repositoryNameWithOwner);await this.github.enablePullRequestAutoMerge({...e,number:i.pullRequestNumber,method:i.mergeMethod,commitHeadline:i.commitHeadline,commitBody:i.commitBody,authorEmail:i.authorEmail},"WORKTREE_AUTOMATION").catch(()=>null)}throw t}}async cancelAutoMerge(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoMerge.findUnique({where:{worktreeId:e}});if(!r)return!1;let i=aO(r.repositoryNameWithOwner),a=await this.github.pullRequestAutomationState(i.owner,i.name,r.pullRequestNumber);return"OPEN"===a.state&&a.autoMergeEnabled&&await this.github.disablePullRequestAutoMerge({...i,number:r.pullRequestNumber},"WORKTREE_AUTOMATION"),await t.worktreeAutoMerge.delete({where:{worktreeId:e}}),this.worktrees.publishAutomationChange(e),!0}async retryAutoMerge(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoMerge.findUniqueOrThrow({where:{worktreeId:e}}),i=aO(r.repositoryNameWithOwner),a="MERGED"===(await this.github.pullRequestAutomationState(i.owner,i.name,r.pullRequestNumber)).state?"POST_MERGE":"ACTIVE",n=await t.worktreeAutoMerge.update({where:{worktreeId:e},data:{state:a,lastError:null,deleteJobId:null}});return this.worktrees.publishAutomationChange(e),this.changed(),a$(n)}async reconcile(){if(this.running){this.rerunRequested=!0;return}this.running=!0;try{let e=async()=>{do this.rerunRequested=!1,await this.reconcileAutoSync(),await this.reconcileAutoMerge();while(this.rerunRequested)};this.polling?await this.polling.run(aT,e):await e()}catch{}finally{this.running=!1,this.schedule()}}async reconcileAutoSync(){let e=await (0,tX.getPrismaClient)();for(let t of(await e.worktreeAutoSync.findMany({where:{state:{in:["ACTIVE","SYNCING","RESOLVING"]}},include:{worktree:{select:{codebaseId:!0}}}})))try{let r=await e.worktree.findUnique({where:{id:t.worktreeId},select:{branch:!0}});if(r?.branch!==t.branch)throw Error("Auto Sync paused because the worktree branch changed");if("ACTIVE"===t.state){let r=await this.worktrees.createAutoSyncJob(t.worktreeId,"SYNC",t.branch,(0,y.randomUUID)());await e.worktreeAutoSync.update({where:{worktreeId:t.worktreeId},data:{state:"SYNCING",activeJobId:r.id,lastError:null}});continue}if("RESOLVING"===t.state){if(!t.workflowRunId)throw Error("The conflict workflow run is missing");let r=await this.workflows.run(t.workflowRunId);if(!r||!aN.has(r.status))continue;if("SUCCEEDED"!==r.status)throw Error(`The conflict workflow ${r.status.toLowerCase()}`);let i=await this.worktrees.createAutoSyncJob(t.worktreeId,"FINALIZE",t.branch,(0,y.randomUUID)());await e.worktreeAutoSync.update({where:{worktreeId:t.worktreeId},data:{state:"SYNCING",activeJobId:i.id,workflowRunId:null}});continue}if(!t.activeJobId)throw Error("The Auto Sync job is missing");let i=await this.agentControl.getJob(t.activeJobId);if(!i||!aD.has(i.status))continue;if("SUCCEEDED"!==i.status)throw Error(i.error||`Auto Sync ${i.status.toLowerCase()}`);let a=function(e){if(!e)return null;try{let t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t))return null;return"string"==typeof t.outcome?String(t.outcome):null}catch{return null}}(i.resultJson);if("CONFLICT"===a){if(!t.conflictWorkflowId)throw Error("Auto Sync paused because the rebase has merge conflicts");let r=await this.workflows.trigger({workflowId:t.conflictWorkflowId,resourceKind:"WORKTREE",resourceId:t.worktreeId,subjectKey:`auto-sync:${t.worktreeId}:${i.id}`,choice:t.conflictWorkflowChoice});if(!r)throw Error("The conflict workflow did not start");await e.worktreeAutoSync.update({where:{worktreeId:t.worktreeId},data:{state:"RESOLVING",activeJobId:null,workflowRunId:r.id,lastError:null}});continue}if("UNRESOLVED"===a)throw Error("The conflict workflow did not fully resolve the rebase");if("SYNCED"!==a&&"NO_CHANGE"!==a)throw Error("The Auto Sync job returned an unknown result");await e.worktreeAutoSync.update({where:{worktreeId:t.worktreeId},data:{state:"ACTIVE",activeJobId:null,workflowRunId:null,lastError:null,..."SYNCED"===a?{lastSyncedAt:new Date}:{}}})}catch(a){let r=a instanceof Error?a.message:String(a),i=/offline|busy|already has an active job|temporarily/i.test(r);await e.worktreeAutoSync.updateMany({where:{worktreeId:t.worktreeId},data:{state:i?"ACTIVE":"PAUSED",activeJobId:null,workflowRunId:null,lastError:r}})}finally{this.worktrees.publishAutomationChange(t.worktreeId,t.worktree.codebaseId)}}async reconcileAutoMerge(){let e=await (0,tX.getPrismaClient)();for(let t of(await e.worktreeAutoMerge.findMany({where:{state:{in:["ACTIVE","POST_MERGE"]}},include:{worktree:{select:{codebaseId:!0,branch:!0,headSha:!0,primary:!0}}}})))try{let r=aO(t.repositoryNameWithOwner);if("ACTIVE"===t.state){let i=await this.github.pullRequestAutomationState(r.owner,r.name,t.pullRequestNumber);if("MERGED"===i.state)await e.worktreeAutoMerge.update({where:{worktreeId:t.worktreeId},data:{state:"POST_MERGE",lastError:null}}),this.rerunRequested=!0;else if("OPEN"!==i.state)throw Error("The pull request closed without merging");else if(!i.autoMergeEnabled)throw Error("GitHub Auto Merge is no longer enabled");continue}if(t.moveTicketToDone&&t.ticketKey&&!t.ticketMovedAt&&(await this.jira.transitionTicketToConfiguredDone(t.ticketKey),await e.worktreeAutoMerge.update({where:{worktreeId:t.worktreeId},data:{ticketMovedAt:new Date,lastError:null}})),!t.deleteWorktree){await e.worktreeAutoMerge.update({where:{worktreeId:t.worktreeId},data:{state:"COMPLETED",lastError:null}});continue}if(t.worktree.primary)throw Error("The primary worktree cannot be deleted");if(!t.deleteJobId){let i=await this.github.pullRequestAutomationState(r.owner,r.name,t.pullRequestNumber);if("MERGED"!==i.state)throw Error("The pull request is no longer merged");if(i.headRefName!==t.branch)throw Error("The merged pull request branch does not match the Auto Merge rule");if(t.worktree.branch!==t.branch)throw Error("The worktree branch changed after Auto Merge completed");if(!t.worktree.headSha||t.worktree.headSha!==i.headRefOid)throw Error("The worktree HEAD does not match the merged pull request");let a=await this.worktrees.deleteWorktree({worktreeId:t.worktreeId,deleteRemoteBranch:!1,requireClean:!0,expectedBranch:t.branch,expectedHeadSha:i.headRefOid,requestId:`auto-merge-${(0,y.randomUUID)()}`});await e.worktreeAutoMerge.update({where:{worktreeId:t.worktreeId},data:{deleteJobId:a.id,lastError:null}});continue}let i=await this.agentControl.getJob(t.deleteJobId);if(!i||!aD.has(i.status))continue;if("SUCCEEDED"!==i.status)throw Error(i.error||`Worktree deletion ${i.status.toLowerCase()}`);await e.worktreeAutoMerge.updateMany({where:{worktreeId:t.worktreeId},data:{state:"COMPLETED",lastError:null}})}catch(r){await e.worktreeAutoMerge.updateMany({where:{worktreeId:t.worktreeId},data:{state:"ACTION_REQUIRED",lastError:r instanceof Error?r.message:String(r)}})}finally{this.worktrees.publishAutomationChange(t.worktreeId,t.worktree.codebaseId)}}}var aB=e.i(750227),aj=e.i(320058);function aL(e,t){let r=[],i=e.includes("CLAUDE");return i&&r.push("CLAUDE"),(e.includes("CODEX")||!i&&e.length>0||"GLOBAL"===t&&e.includes("GITHUB_COPILOT"))&&r.push("AGENTS"),r}let aq="default",aM=["PREPARING","READY","APPLYING","NEEDS_RESOLUTION"],aF=["SCAN","READ"],aK=[...aF,"APPLY"],aV={files:{orderBy:{path:"asc"}},groups:{include:{group:!0}}},aH={skills:{include:{skill:{include:{files:!0}}}},repositories:{include:{repository:!0}}};function aG(e,t){if(!e)return t;try{return JSON.parse(e)}catch{return t}}function aW(e){return[...e.cursorEnabled?["CURSOR"]:[],...e.githubCopilotEnabled?["GITHUB_COPILOT"]:[],...e.codexEnabled?["CODEX"]:[],...e.claudeEnabled?["CLAUDE"]:[],...e.openCodeEnabled?["OPENCODE"]:[]]}function aJ(e,t){return"AGENTS"===t?[".agents","skills"]:"CLAUDE"===t?[".claude","skills"]:"GLOBAL"===e?"CURSOR"===t?[".cursor","skills"]:"GITHUB_COPILOT"===t?[".copilot","skills"]:"CODEX_LEGACY"===t?[".codex","skills"]:[".config","opencode","skills"]:"CURSOR"===t?[".cursor","skills"]:"GITHUB_COPILOT"===t?[".github","skills"]:"CODEX_LEGACY"===t?[".codex","skills"]:[".opencode","skills"]}function az(e){return/^[A-Za-z]:[\\/]/.test(e)||e.startsWith("\\\\")?aB.win32:aB.posix}function aZ(e,...t){return az(e).join(e,...t)}function aY(e){return az(e).dirname(e)}class aQ{agentControl;constructor(e){this.agentControl=e,this.agentControl.registerCompletionHandler(aj.SKILL_SCAN_JOB_KIND,e=>this.completeScan(e)),this.agentControl.registerCompletionHandler(aj.SKILL_READ_JOB_KIND,e=>this.completeRead(e)),this.agentControl.registerCompletionHandler(aj.SKILL_APPLY_JOB_KIND,e=>this.completeApply(e)),this.agentControl.registerConnectionHandler(async()=>{await this.requestAutoReconcile()})}publish(e){r6.agentEventBus.publish(r6.SKILLS_CHANGED_TOPIC,{id:e??null}),e&&r6.agentEventBus.publish((0,r6.skillSyncRunTopic)(e),{id:e})}subscribe(){return r6.agentEventBus.iterate(r6.SKILLS_CHANGED_TOPIC)}subscribeRun(e){return r6.agentEventBus.iterate((0,r6.skillSyncRunTopic)(e))}async settings(){return(await (0,tX.getPrismaClient)()).skillSettings.upsert({where:{id:aq},create:{id:aq},update:{}})}async overview(e=""){let t=await (0,tX.getPrismaClient)(),r=e.trim().toLocaleLowerCase(),[i,a,n,s,o,l]=await Promise.all([t.skill.findMany({where:{deletedAt:null},include:aV,orderBy:{name:"asc"}}),t.skillGroup.findMany({include:aH,orderBy:{name:"asc"}}),t.skillToolObservation.findMany({include:{agent:!0},orderBy:[{tool:"asc"},{agent:{name:"asc"}}]}),t.skillInstallation.findMany({where:{present:!0},include:{agent:!0,codebase:{include:{repository:!0}},worktree:!0,baseline:!0,skill:!0},orderBy:[{skillName:"asc"},{rootPath:"asc"}]}),this.settings(),t.codebaseRepository.findMany({orderBy:{name:"asc"}})]);return{skills:r?i.filter(e=>[e.name,e.description,...e.groups.map(({group:e})=>e.name)].some(e=>e.toLocaleLowerCase().includes(r))):i,groups:a,observations:n,installations:r?s.filter(e=>[e.skillName,e.description,e.agent.name,e.rootPath,e.codebase?.repository.name??""].some(e=>e.toLocaleLowerCase().includes(r))):s,settings:o,repositories:l}}async getSkill(e){return(await (0,tX.getPrismaClient)()).skill.findFirst({where:{id:e,deletedAt:null},include:aV})}async saveSkill(e){let t,r=(t=e.files.map(e=>({path:e.path,contentsBase64:e.contentsBase64,executable:e.executable})),(0,aj.parseSkillPackage)({name:e.name,description:e.description,packageHash:(0,aj.hashSkillFiles)(t),files:t})),i=[...new Set(e.groupIds)].slice(0,100),a=await (0,tX.getPrismaClient)();if(await a.skillGroup.count({where:{id:{in:i}}})!==i.length)throw Error("One or more skill groups were not found");let n=await a.skill.findUnique({where:{name:r.name}});if(n&&n.id!==e.id)throw Error("Skill names must be unique");let s=e.id??(0,y.randomUUID)(),o=e.id?await a.skillGroupSkill.findMany({where:{skillId:s},select:{groupId:!0}}):[];return await a.$transaction(async t=>{await t.skill.upsert({where:{id:s},create:{id:s,name:r.name,description:r.description,syncGlobally:e.syncGlobally,packageHash:r.packageHash},update:{name:r.name,description:r.description,syncGlobally:e.syncGlobally,packageHash:r.packageHash,deletedAt:null}}),await t.skillFile.deleteMany({where:{skillId:s}}),await t.skillFile.createMany({data:r.files.map(e=>{let t=Buffer.from(e.contentsBase64,"base64");return{id:(0,y.randomUUID)(),skillId:s,path:e.path,contents:t,executable:e.executable,contentHash:(0,y.createHash)("sha256").update(t).digest("hex")}})}),await t.skillGroupSkill.deleteMany({where:{skillId:s}}),i.length&&await t.skillGroupSkill.createMany({data:i.map(e=>({groupId:e,skillId:s}))})}),this.publish(),await this.scheduleAutoSync([...i,...o.map(e=>e.groupId)]),await this.getSkill(s)}async deleteSkill(e){let t=await (0,tX.getPrismaClient)(),r=await t.skill.findUnique({where:{id:e},include:{groups:!0}});return!!r&&(await t.skill.update({where:{id:e},data:{deletedAt:new Date}}),this.publish(),await this.scheduleAutoSync(r.groups.map(e=>e.groupId)),!0)}async saveGroup(e){let t=e.name.trim();if(!t||t.length>80)throw Error("Group names must contain 1-80 characters");let r=[...new Set(e.skillIds)].slice(0,500),i=[...new Set(e.repositoryIds)].slice(0,500),a=await (0,tX.getPrismaClient)(),[n,s,o]=await Promise.all([a.skill.count({where:{id:{in:r},deletedAt:null}}),a.codebaseRepository.count({where:{id:{in:i}}}),a.skillGroup.findUnique({where:{name:t}})]);if(n!==r.length)throw Error("One or more skills were not found");if(s!==i.length)throw Error("One or more repositories were not found");if(o&&o.id!==e.id)throw Error("Group names must be unique");let l=e.id??(0,y.randomUUID)();return await a.$transaction(async e=>{await e.skillGroup.upsert({where:{id:l},create:{id:l,name:t},update:{name:t}}),await e.skillGroupSkill.deleteMany({where:{groupId:l}}),await e.codebaseRepositorySkillGroup.deleteMany({where:{groupId:l}}),r.length&&await e.skillGroupSkill.createMany({data:r.map(e=>({groupId:l,skillId:e}))}),i.length&&await e.codebaseRepositorySkillGroup.createMany({data:i.map(e=>({groupId:l,repositoryId:e}))})}),this.publish(),await this.scheduleAutoSync([l]),a.skillGroup.findUniqueOrThrow({where:{id:l},include:aH})}async validateGroupIds(e){let t=[...new Set(e)].slice(0,100),r=await (0,tX.getPrismaClient)();if(await r.skillGroup.count({where:{id:{in:t}}})!==t.length)throw Error("One or more skill groups were not found");return t}async groupsForRepository(e){let t=await (0,tX.getPrismaClient)();return(await t.codebaseRepositorySkillGroup.findMany({where:{repositoryId:e},include:{group:!0},orderBy:{group:{name:"asc"}}})).map(e=>e.group)}async deleteGroup(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillGroup.deleteMany({where:{id:e}});return r.count&&this.publish(),r.count&&(await this.settings()).autoSyncProjectGroups&&await this.prepareSync("GROUP",null,!0),r.count>0}async saveSettings(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSettings.upsert({where:{id:aq},create:{id:aq,...e},update:e});return this.publish(),r.autoSyncProjectGroups&&await this.prepareSync("GROUP",null,!0),r}async setRepositoryGroups(e,t){let r=await this.validateGroupIds(t),i=await (0,tX.getPrismaClient)();await i.$transaction(async t=>{await t.codebaseRepositorySkillGroup.deleteMany({where:{repositoryId:e}}),r.length&&await t.codebaseRepositorySkillGroup.createMany({data:r.map(t=>({repositoryId:e,groupId:t}))})}),this.publish(),(await this.settings()).autoSyncProjectGroups&&await this.prepareSync("GROUP",null,!0)}async scheduleAutoSync(e){if((await this.settings()).autoSyncProjectGroups&&e.length)for(let t of[...new Set(e)])await this.prepareSync("GROUP",t,!0)}async requestAutoReconcile(){return(await this.settings()).autoSyncProjectGroups?this.prepareSync("GROUP",null,!0):null}async targets(e){let t=await (0,tX.getPrismaClient)(),r=await t.codebase.findMany({where:{agentId:e,availability:"AVAILABLE"},include:{worktrees:{where:{missingAt:null}}}}),i=new Map;for(let e of r)for(let t of(i.set(e.folder,{codebaseId:e.id,worktreeId:null,folder:e.folder}),e.worktrees))i.set(t.folder,{codebaseId:e.id,worktreeId:t.id,folder:t.folder});return[...i.values()]}async prepareSync(e,t,r=!1){let i=await (0,tX.getPrismaClient)();if(t&&!await i.skillGroup.findUnique({where:{id:t}}))throw Error("Skill group not found");if(r){let r=await i.skillSyncRun.findFirst({where:{kind:e,groupId:t??null,status:{in:aM}},orderBy:{createdAt:"desc"}});if(r)return r}let a=await i.skillSyncRun.create({data:{id:(0,y.randomUUID)(),kind:e,groupId:t??null,automatic:r,status:"PREPARING"}}),n=aW(await this.settings()),s=await i.agent.findMany({orderBy:{name:"asc"}});for(let e of s){let t=await i.skillSyncItem.create({data:{id:(0,y.randomUUID)(),runId:a.id,agentId:e.id,direction:"SCAN",status:"PENDING"}});await this.agentControl.createJob({agentId:e.id,kind:aj.SKILL_SCAN_JOB_KIND,payload:{tools:n,targets:await this.targets(e.id),syncRunId:a.id,syncItemId:t.id},idempotencyKey:`skills:scan:${a.id}:${e.id}`,timeoutSeconds:300,visibility:r?"SYSTEM":"USER"})}return!s.length&&(await i.skillSyncRun.update({where:{id:a.id},data:{status:"READY"}}),r)?this.applyRun(a.id):(this.publish(a.id),this.getRun(a.id))}async getRun(e){return(await (0,tX.getPrismaClient)()).skillSyncRun.findUnique({where:{id:e},include:{group:!0,items:{include:{skill:!0,installation:{include:{agent:!0}},agent:!0},orderBy:{createdAt:"asc"}}}})}completionIds(e){return aG(e.payloadJson,{})}async completeScan(e){let{syncRunId:t,syncItemId:r}=this.completionIds(e);if(!t||!r)return;let i=await (0,tX.getPrismaClient)();if(await i.skillSyncItem.findFirst({where:{id:r,runId:t,direction:"SCAN",status:"PENDING"}})){if("SUCCEEDED"===e.status&&e.resultJson){let t=aG(e.resultJson,{configuredTools:[],installations:[],warnings:[]}),a=new Date;await i.$transaction(async i=>{for(let r of(await i.skillInstallation.updateMany({where:{agentId:e.agentId},data:{present:!1}}),t.configuredTools))aj.AI_TOOLS.includes(r.tool)&&await i.skillToolObservation.upsert({where:{agentId_tool:{agentId:e.agentId,tool:r.tool}},create:{agentId:e.agentId,tool:r.tool,configured:r.configured,homePath:r.homePath,checkedAt:a},update:{configured:r.configured,homePath:r.homePath,checkedAt:a}});for(let r of t.installations){let t=await i.skill.findUnique({where:{name:r.skillName},select:{id:!0,deletedAt:!0}});await i.skillInstallation.upsert({where:{agentId_rootPath_skillName:{agentId:e.agentId,rootPath:r.rootPath,skillName:r.skillName}},create:{id:(0,y.randomUUID)(),agentId:e.agentId,skillId:t&&!t.deletedAt?t.id:null,codebaseId:r.codebaseId,worktreeId:r.worktreeId,scope:r.scope,rootKind:r.rootKind,rootPath:r.rootPath,skillName:r.skillName,description:r.description,packageHash:r.packageHash,present:!0,fileCount:r.fileCount,totalBytes:r.totalBytes,tracked:r.tracked,consumersJson:JSON.stringify(r.consumers),lastSeenAt:a},update:{skillId:t&&!t.deletedAt?t.id:void 0,codebaseId:r.codebaseId,worktreeId:r.worktreeId,scope:r.scope,rootKind:r.rootKind,description:r.description,packageHash:r.packageHash,present:!0,fileCount:r.fileCount,totalBytes:r.totalBytes,tracked:r.tracked,consumersJson:JSON.stringify(r.consumers),lastSeenAt:a}})}await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:"COMPLETE",error:t.warnings?.length?t.warnings.join("\n").slice(0,64e3):null}})})}else await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:"FAILED",error:e.error??"Skill scan failed"}});await i.skillSyncItem.count({where:{runId:t,direction:"SCAN",status:"PENDING"}})||await this.buildPlan(t),this.publish(t)}}async configuredByAgent(){let e=await (0,tX.getPrismaClient)(),t=new Set(aW(await this.settings())),r=await e.skillToolObservation.findMany({where:{configured:!0}}),i=new Map;for(let e of r){if(!t.has(e.tool))continue;let r=i.get(e.agentId)??[];r.push(e.tool),i.set(e.agentId,r)}return i}async desiredLocations(e,t=new Set){let r=await (0,tX.getPrismaClient)(),i=await this.configuredByAgent(),a=await r.skillToolObservation.findMany({where:{configured:!0}}),n=new Map;for(let e of a)n.set(e.agentId,e.homePath);let s=[];if("ALL"===e.kind){let e=await r.skill.findMany({where:{deletedAt:null,syncGlobally:!0},include:aV});for(let[r,a]of i){if(t.has(r))continue;let i=n.get(r);if(i)for(let t of aL(a,"GLOBAL")){let a=aZ(i,...aJ("GLOBAL",t));for(let i of e)s.push({skill:i,agentId:r,codebaseId:null,worktreeId:null,scope:"GLOBAL",rootKind:t,folder:null,rootPath:a,targetPath:aZ(a,i.name)})}}}for(let a of(await r.skillGroup.findMany({where:"GROUP"===e.kind&&e.groupId?{id:e.groupId}:void 0,include:{skills:{where:{skill:{deletedAt:null}},include:{skill:{include:aV}}},repositories:{include:{repository:{include:{codebases:{where:{availability:"AVAILABLE"},include:{worktrees:{where:{missingAt:null}}}}}}}}}})))for(let e of a.repositories)for(let r of e.repository.codebases){if(t.has(r.agentId))continue;let e=aL(i.get(r.agentId)??[],"PROJECT");for(let t of[{folder:r.folder,worktreeId:null},...r.worktrees.map(e=>({folder:e.folder,worktreeId:e.id}))])for(let i of e){let e=aZ(t.folder,...aJ("PROJECT",i));for(let n of a.skills)s.push({skill:n.skill,agentId:r.agentId,codebaseId:r.id,worktreeId:t.worktreeId,scope:"PROJECT",rootKind:i,folder:t.folder,rootPath:e,targetPath:aZ(e,n.skill.name)})}}return[...new Map(s.map(e=>[`${e.agentId}\0${e.targetPath}`,e])).values()]}installationWhere(e,t){return{present:!0,...t.size?{agentId:{notIn:[...t]}}:{},..."GROUP"===e.kind?{scope:"PROJECT",...e.groupId?{codebase:{repository:{skillGroups:{some:{groupId:e.groupId}}}}}:{}}:{}}}async buildPlan(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSyncRun.findUniqueOrThrow({where:{id:e}}),i=new Set((await t.skillSyncItem.findMany({where:{runId:e,direction:"SCAN",status:"SKIPPED"},select:{agentId:!0}})).flatMap(e=>e.agentId?[e.agentId]:[]));await t.skillSyncItem.deleteMany({where:{runId:e,direction:{not:"SCAN"}}});let[a,n,s,o,l]=await Promise.all([t.skill.findMany({where:{deletedAt:null},include:aV}),t.skill.findMany({where:{deletedAt:{not:null}}}),t.skillInstallation.findMany({where:this.installationWhere(r,i),include:{baseline:!0}}),this.desiredLocations(r,i),"GROUP"===r.kind&&r.groupId?this.desiredLocations({...r,groupId:null},i):this.desiredLocations(r,i)]),u=new Map(a.map(e=>[e.name,e])),c=new Map(a.map(e=>[e.id,e])),d=new Map(n.map(e=>[e.name,e])),p=new Map(n.map(e=>[e.id,e])),h=new Map;for(let e of s){let t=h.get(e.skillName)??[];t.push(e.packageHash),h.set(e.skillName,t)}let m=new Set([...h].flatMap(([e,t])=>{var r;return(r=u.get(e)?.packageHash??null,new Set(t.filter(e=>null===r||e!==r)).size>1)?[e]:[]})),f=[];for(let t of o)s.find(e=>e.agentId===t.agentId&&e.rootPath===t.rootPath&&e.skillName===t.skill.name)||f.push({id:(0,y.randomUUID)(),runId:e,skillId:t.skill.id,agentId:t.agentId,direction:"EXPORT",status:"READY",sourceHash:t.skill.packageHash,candidatePackageJson:JSON.stringify({location:t})});for(let r of s){let i=r.baseline?.skillId??r.skillId,a=(i?c.get(i):void 0)??u.get(r.skillName),n=(i?p.get(i):void 0)??d.get(r.skillName),s=!!r.baseline&&!!a&&a.name!==r.skillName,h=o.find(e=>e.agentId===r.agentId&&e.rootPath===r.rootPath&&e.skill.name===r.skillName),w=l.find(e=>e.agentId===r.agentId&&e.rootPath===r.rootPath&&e.skill.name===r.skillName);a&&r.packageHash===a.packageHash&&!r.baseline&&await t.skillSyncBaseline.upsert({where:{installationId:r.id},create:{id:(0,y.randomUUID)(),installationId:r.id,skillId:a.id,packageHash:a.packageHash},update:{skillId:a.id,packageHash:a.packageHash,syncedAt:new Date}});let b="UNCHANGED",v="COMPLETE";if(n&&r.baseline&&!r.tracked)b="DELETE_MANAGED",v="READY";else if(s)b=r.tracked?"CONFLICT":"DELETE_MANAGED",v=r.tracked?"BLOCKED":"READY";else if(w||!r.baseline||r.tracked)if(a)if(r.packageHash!==a.packageHash){var g;v="CONFLICT"===(b=m.has(r.skillName)?"CONFLICT":(g={databaseHash:a.packageHash,targetHash:r.packageHash,baselineHash:r.baseline?.packageHash??null,tracked:r.tracked}).databaseHash===g.targetHash?"UNCHANGED":g.tracked?"CONFLICT":g.baselineHash===g.databaseHash?"IMPORT":g.baselineHash===g.targetHash?"EXPORT":"CONFLICT")?"BLOCKED":"READY"}else!w&&["CURSOR","GITHUB_COPILOT","CODEX_LEGACY","OPENCODE"].includes(r.rootKind)&&l.some(e=>e.agentId===r.agentId&&e.scope===r.scope&&("GLOBAL"===r.scope||e.codebaseId===r.codebaseId&&e.worktreeId===r.worktreeId)&&e.skill.name===r.skillName&&e.skill.packageHash===r.packageHash)&&!r.tracked&&(b="DELETE_REDUNDANT",v="READY");else v="CONFLICT"==(b=m.has(r.skillName)?"CONFLICT":"IMPORT")||"PROJECT"===r.scope?"BLOCKED":"READY";else b="DELETE_MANAGED",v="READY";f.push({id:(0,y.randomUUID)(),runId:e,skillId:a?.id??n?.id??null,installationId:r.id,agentId:r.agentId,direction:b,status:v,sourceHash:a?.packageHash??null,targetHash:r.packageHash,candidatePackageJson:JSON.stringify({location:{scope:r.scope,rootKind:r.rootKind,folder:"PROJECT"===r.scope?h?.folder??null:null,skillName:r.skillName},projectGroupRequired:!a&&"PROJECT"===r.scope})})}f.length&&await t.skillSyncItem.createMany({data:f});let w=await t.skillSyncItem.findMany({where:{runId:e,installationId:{not:null},direction:{in:["IMPORT","CONFLICT"]}},include:{installation:!0}}),b=new Map;for(let e of w){if(!e.agentId||!e.installation)continue;let t=b.get(e.agentId)??[];t.push(e),b.set(e.agentId,t)}let v=aW(await this.settings());for(let[r,i]of b){let a=await t.skillSyncItem.create({data:{id:(0,y.randomUUID)(),runId:e,agentId:r,direction:"READ",status:"PENDING"}}),n=await this.targets(r);await this.agentControl.createJob({agentId:r,kind:aj.SKILL_READ_JOB_KIND,payload:{tools:v,targets:n,requests:i.map(e=>({scope:e.installation.scope,rootKind:e.installation.rootKind,folder:"PROJECT"===e.installation.scope?n.find(t=>t.codebaseId===e.installation.codebaseId&&t.worktreeId===e.installation.worktreeId)?.folder??null:null,skillName:e.installation.skillName})),syncRunId:e,syncItemId:a.id},idempotencyKey:`skills:read:${e}:${r}`,timeoutSeconds:300})}await this.refreshRunStatus(e)}async completeRead(e){let{syncRunId:t,syncItemId:r}=this.completionIds(e);if(!t||!r)return;let i=await (0,tX.getPrismaClient)();if(await i.skillSyncItem.findFirst({where:{id:r,runId:t,direction:"READ",status:"PENDING"}})){if("SUCCEEDED"===e.status&&e.resultJson){let a=aG(e.resultJson,{packages:[]}),n=await i.skillSyncItem.findMany({where:{runId:t,agentId:e.agentId,installationId:{not:null},direction:{in:["IMPORT","CONFLICT"]}},include:{installation:!0}});for(let e of a.packages){let t=n.find(t=>t.installation?.skillName===e.package.name&&t.installation?.rootKind===e.rootKind&&t.installation?.scope===e.scope&&("GLOBAL"===e.scope||t.installation?.rootPath===aZ(e.folder,...aJ("PROJECT",e.rootKind))));if(!t)continue;let r=aG(t.candidatePackageJson,{});await i.skillSyncItem.update({where:{id:t.id},data:{candidatePackageJson:JSON.stringify({...r,package:e.package})}})}await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:"COMPLETE"}})}else await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:"FAILED",error:e.error??"Skill package read failed"}});await this.refreshRunStatus(t),this.publish(t)}}async refreshRunStatus(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSyncItem.findMany({where:{runId:e}});if(r.some(e=>aF.includes(e.direction)&&"PENDING"===e.status))return;let i=r.some(e=>"BLOCKED"===e.status),a=r.some(e=>"FAILED"===e.status),n=i?"NEEDS_RESOLUTION":a?"PARTIAL":"READY",s=await t.skillSyncRun.update({where:{id:e},data:{status:n}});this.publish(e),s.automatic&&"READY"===n&&await this.applyRun(e)}async skipPending(e){let t=await (0,tX.getPrismaClient)();await t.skillSyncRun.findUniqueOrThrow({where:{id:e}});let r=await t.skillSyncItem.findMany({where:{runId:e,direction:{in:aK},status:"PENDING",agentId:{not:null}}}),i=[];for(let a of r){if(1!==(await t.skillSyncItem.updateMany({where:{id:a.id,status:"PENDING"},data:{status:"SKIPPED",resolution:"SKIP"}})).count||!a.agentId)continue;i.push(a);let r=await t.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:a.agentId,idempotencyKey:`skills:${a.direction.toLowerCase()}:${e}:${a.agentId}`}}});r&&await this.agentControl.cancelJob(r.id)}if(!i.length)return this.getRun(e);let a=[...new Set(i.flatMap(e=>"READ"===e.direction&&e.agentId?[e.agentId]:[]))];a.length&&await t.skillSyncItem.updateMany({where:{runId:e,agentId:{in:a},direction:{notIn:aK},status:{in:["READY","BLOCKED"]}},data:{status:"SKIPPED",resolution:"SKIP"}});let n=i.filter(e=>"APPLY"===e.direction),s=n.flatMap(e=>{let{deployments:t=[]}=aG(e.candidatePackageJson,{});return t.map(e=>e.id)});return s.length&&await t.skillDeployment.updateMany({where:{id:{in:s},status:"PENDING"},data:{status:"SKIPPED"}}),i.some(e=>"SCAN"===e.direction)?await t.skillSyncItem.count({where:{runId:e,direction:"SCAN",status:"PENDING"}})||await this.buildPlan(e):a.length&&await this.refreshRunStatus(e),n.length&&(await t.skillSyncItem.count({where:{runId:e,direction:"APPLY",status:"PENDING"}})||await t.skillSyncRun.update({where:{id:e},data:{status:"PARTIAL",finishedAt:new Date}})),this.publish(e),this.getRun(e)}async resolveItem(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSyncItem.findUniqueOrThrow({where:{id:e.itemId}});if(!["BLOCKED","READY"].includes(r.status))throw Error("Sync item cannot be resolved");let i=aG(r.candidatePackageJson,{});if("MANUAL"===e.resolution&&(i.package=(0,aj.parseSkillPackage)(e.package,"manual resolution package")),"TARGET"===e.resolution&&!i.package)throw Error("The target package is unavailable");if("DELETE"===e.resolution&&!r.installationId)throw Error("The client skill installation is unavailable");if(i.projectGroupRequired&&["TARGET","MANUAL"].includes(e.resolution)){if(!e.groupId||!await t.skillGroup.findUnique({where:{id:e.groupId}}))throw Error("A project skill import requires a skill group");i.groupId=e.groupId}if(await t.skillSyncItem.update({where:{id:r.id},data:{resolution:e.resolution,direction:"DELETE"===e.resolution?"DELETE_REDUNDANT":r.direction,candidatePackageJson:JSON.stringify(i),status:"SKIP"===e.resolution?"SKIPPED":"READY"}}),["TARGET","MANUAL"].includes(e.resolution)){let e=i.package?.name??null;if(e){let i=(await t.skillSyncItem.findMany({where:{runId:r.runId,id:{not:r.id},direction:"CONFLICT",status:{in:["BLOCKED","READY"]}},include:{skill:!0,installation:!0}})).flatMap(t=>(t.skill?.name??t.installation?.skillName)===e?[t.id]:[]);i.length&&await t.skillSyncItem.updateMany({where:{id:{in:i}},data:{resolution:"DATABASE",status:"READY"}})}}return await this.refreshRunStatus(r.runId),this.getRun(r.runId)}async importCandidates(e){let t=await (0,tX.getPrismaClient)();for(let r of(await t.skillSyncItem.findMany({where:{runId:e,status:"READY",OR:[{direction:"IMPORT"},{direction:"CONFLICT",resolution:{in:["TARGET","MANUAL"]}}]},include:{installation:!0}}))){let e=aG(r.candidatePackageJson,{});if(!e.package)continue;let i=await t.skill.findUnique({where:{name:e.package.name},include:aV}),a=await this.saveSkill({id:i?.id,name:e.package.name,description:e.package.description,syncGlobally:i?.syncGlobally??!e.groupId,groupIds:[...i?.groups.map(e=>e.groupId)??[],...e.groupId?[e.groupId]:[]],files:e.package.files});r.installationId&&(await t.skillInstallation.update({where:{id:r.installationId},data:{skillId:a.id}}),r.targetHash===a.packageHash&&await t.skillSyncBaseline.upsert({where:{installationId:r.installationId},create:{id:(0,y.randomUUID)(),installationId:r.installationId,skillId:a.id,packageHash:a.packageHash},update:{skillId:a.id,packageHash:a.packageHash,syncedAt:new Date}}))}}async applyRun(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSyncRun.findUniqueOrThrow({where:{id:e}});if(await t.skillSyncItem.count({where:{runId:e,status:"BLOCKED"}}))throw Error("Resolve all conflicts before applying sync");await this.importCandidates(e);let i=new Set((await t.skillSyncItem.findMany({where:{runId:e,direction:{in:aF},status:"SKIPPED"},select:{agentId:!0}})).flatMap(e=>e.agentId?[e.agentId]:[])),a=await this.desiredLocations(r,i),n=await t.skillInstallation.findMany({where:this.installationWhere(r,i)}),s=new Map,o=new Map,l=(e,t)=>{let r=s.get(e)??[];r.push(t),s.set(e,r)},u=(e,t)=>{let r=o.get(e)??[];r.push(t),o.set(e,r)};for(let e of a){let r=n.find(t=>t.agentId===e.agentId&&t.rootPath===e.rootPath&&t.skillName===e.skill.name);if(r?.packageHash===e.skill.packageHash||r?.tracked)continue;l(e.agentId,{kind:"WRITE",scope:e.scope,rootKind:e.rootKind,folder:e.folder,package:function(e){let t=e.files.map(e=>({path:e.path,contentsBase64:Buffer.from(e.contents).toString("base64"),executable:e.executable}));return{name:e.name,description:e.description,packageHash:e.packageHash,files:t}}(e.skill),manageGitExclude:"PROJECT"===e.scope});let i=await t.skillDeployment.upsert({where:{agentId_targetPath:{agentId:e.agentId,targetPath:e.targetPath}},create:{id:(0,y.randomUUID)(),skillId:e.skill.id,agentId:e.agentId,codebaseId:e.codebaseId,worktreeId:e.worktreeId,scope:e.scope,rootKind:e.rootKind,targetPath:e.targetPath,desiredHash:e.skill.packageHash,status:"PENDING"},update:{skillId:e.skill.id,desiredHash:e.skill.packageHash,status:"PENDING",lastError:null}});u(e.agentId,{id:i.id,desiredHash:e.skill.packageHash})}let c=await t.skillSyncItem.findMany({where:{runId:e,direction:{in:["DELETE_REDUNDANT","DELETE_MANAGED"]},status:"READY"},include:{installation:!0}}),d=new Set(c.flatMap(e=>e.installationId?[e.installationId]:[])),p=n.filter(e=>!d.has(e.id)&&!e.tracked&&["CURSOR","GITHUB_COPILOT","CODEX_LEGACY","OPENCODE"].includes(e.rootKind)&&!a.some(t=>t.agentId===e.agentId&&t.rootPath===e.rootPath&&t.skill.name===e.skillName)&&a.some(t=>t.agentId===e.agentId&&t.scope===e.scope&&("GLOBAL"===e.scope||t.codebaseId===e.codebaseId&&t.worktreeId===e.worktreeId)&&t.skill.name===e.skillName&&t.skill.packageHash===e.packageHash));for(let e of[...c.flatMap(e=>e.installation?[e.installation]:[]),...p]){if(!e||e.tracked)continue;let t=await this.targets(e.agentId),r="PROJECT"===e.scope?t.find(t=>t.codebaseId===e.codebaseId&&t.worktreeId===e.worktreeId)?.folder??null:null;("PROJECT"!==e.scope||r)&&l(e.agentId,{kind:"DELETE",scope:e.scope,rootKind:e.rootKind,folder:r,skillName:e.skillName,manageGitExclude:"PROJECT"===e.scope})}for(let[r,i]of s){let a=await t.skillSyncItem.create({data:{id:(0,y.randomUUID)(),runId:e,agentId:r,direction:"APPLY",status:"PENDING",candidatePackageJson:JSON.stringify({deployments:o.get(r)??[]})}});await this.agentControl.createJob({agentId:r,kind:aj.SKILL_APPLY_JOB_KIND,payload:{operations:i,syncRunId:e,syncItemId:a.id},idempotencyKey:`skills:apply:${e}:${r}`,timeoutSeconds:600})}return await t.skillSyncRun.update({where:{id:e},data:s.size?{status:"APPLYING"}:{status:"SUCCEEDED",finishedAt:new Date}}),this.publish(e),this.getRun(e)}async completeApply(e){let{syncRunId:t,syncItemId:r}=this.completionIds(e);if(!t||!r)return;let i=await (0,tX.getPrismaClient)(),a=await i.skillSyncItem.findFirst({where:{id:r,runId:t,direction:"APPLY",status:"PENDING"}});if(!a)return;let n="SUCCEEDED"===e.status,{deployments:s=[]}=aG(a?.candidatePackageJson??null,{});await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:n?"COMPLETE":"FAILED",error:n?null:e.error??"Skill apply failed"}});let o=await i.skillDeployment.findMany({where:{id:{in:s.map(e=>e.id)},agentId:e.agentId,status:"PENDING"},include:{skill:{include:{files:!0}}}}),l=aG(e.resultJson,{});if(n){let t=await this.configuredByAgent();for(let e of o){let r=s.find(t=>t.id===e.id),a=l.results?.find(t=>"WRITE"===t.kind&&t.path===e.targetPath);if(!r||e.desiredHash!==r.desiredHash||a?.packageHash!==r.desiredHash)continue;let n=await i.skillInstallation.upsert({where:{agentId_rootPath_skillName:{agentId:e.agentId,rootPath:aY(e.targetPath),skillName:e.skill.name}},create:{id:(0,y.randomUUID)(),skillId:e.skillId,agentId:e.agentId,codebaseId:e.codebaseId,worktreeId:e.worktreeId,scope:e.scope,rootKind:e.rootKind,rootPath:aY(e.targetPath),skillName:e.skill.name,description:e.skill.description,packageHash:e.desiredHash,present:!0,fileCount:e.skill.files.length,totalBytes:e.skill.files.reduce((e,t)=>e+t.contents.byteLength,0),tracked:!1,consumersJson:JSON.stringify(t.get(e.agentId)??[]),lastSeenAt:new Date},update:{skillId:e.skillId,codebaseId:e.codebaseId,worktreeId:e.worktreeId,scope:e.scope,rootKind:e.rootKind,description:e.skill.description,packageHash:e.desiredHash,present:!0,fileCount:e.skill.files.length,totalBytes:e.skill.files.reduce((e,t)=>e+t.contents.byteLength,0),tracked:!1,consumersJson:JSON.stringify(t.get(e.agentId)??[]),lastSeenAt:new Date}});await i.skillSyncBaseline.upsert({where:{installationId:n.id},create:{id:(0,y.randomUUID)(),installationId:n.id,skillId:e.skillId,packageHash:e.desiredHash},update:{skillId:e.skillId,packageHash:e.desiredHash,syncedAt:new Date}}),await i.skillDeployment.update({where:{id:e.id},data:{status:"INSTALLED",installedHash:e.desiredHash,lastError:null}})}for(let t of l.results??[])if("DELETE"===t.kind){var u;await i.skillInstallation.updateMany({where:{agentId:e.agentId,rootPath:aY(t.path),skillName:az(u=t.path).basename(u)},data:{present:!1,lastSeenAt:new Date}})}}else for(let t of s)await i.skillDeployment.updateMany({where:{id:t.id,agentId:e.agentId,desiredHash:t.desiredHash,status:"PENDING"},data:{status:"FAILED",lastError:e.error??"Skill apply failed"}});if(!await i.skillSyncItem.count({where:{runId:t,direction:"APPLY",status:"PENDING"}})){let e=await i.skillSyncItem.count({where:{runId:t,direction:"APPLY",status:{in:["FAILED","SKIPPED"]}}});await i.skillSyncRun.update({where:{id:t},data:{status:e?"PARTIAL":"SUCCEEDED",finishedAt:new Date}})}this.publish(t)}}e.i(464841);var aX=e.i(220629),a0=e.i(692680);e.i(493015);var a1=e.i(49172);function a2(e){if(!e)return{};let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}function a3(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.valueOf())?null:t}function a4(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}}class a6{agentControl;fetcher;credentials;constructor(e,t=fetch,r=new t0.CredentialService){for(const i of(this.agentControl=e,this.fetcher=t,this.credentials=r,this.agentControl.registerCompletionHandler(a0.SIGNING_ASSETS_SCAN_JOB_KIND,e=>this.completeScan(e)),[a0.SIGNING_PROFILE_READ_JOB_KIND,a0.SIGNING_PROFILE_INSTALL_JOB_KIND,a0.SIGNING_PROFILE_DELETE_JOB_KIND,a0.SIGNING_IDENTITY_IMPORT_JOB_KIND,a0.SIGNING_IDENTITY_DELETE_JOB_KIND]))this.agentControl.registerCompletionHandler(i,e=>this.completeOperation(e))}changed(){r6.agentEventBus.publish(r6.SIGNING_ASSETS_CHANGED_TOPIC,{changed:!0})}deleteTransferJobSoon(e){setTimeout(()=>{(0,tX.getPrismaClient)().then(t=>t.agentJob.deleteMany({where:{id:e,visibility:"SYSTEM"}}))},3e4).unref()}subscribe(){return r6.agentEventBus.iterate(r6.SIGNING_ASSETS_CHANGED_TOPIC)}async completeScan(e){if("SUCCEEDED"!==e.status)return;let t=(0,a0.parseSigningAssetsScanResult)(a2(e.resultJson)),r=await (0,tX.getPrismaClient)(),i=new Date;await r.$transaction(async r=>{for(let a of(await r.signingProfileAsset.updateMany({where:{agentId:e.agentId,missingAt:null},data:{missingAt:i}}),await r.signingCertificateAsset.updateMany({where:{agentId:e.agentId,missingAt:null},data:{missingAt:i}}),t.profiles))await r.signingProfileAsset.upsert({where:{agentId_uuid:{agentId:e.agentId,uuid:a.uuid}},create:{id:(0,y.randomUUID)(),agentId:e.agentId,uuid:a.uuid,contentHash:a.contentHash,name:a.name,profileType:a.profileType,bundleId:a.bundleId,teamId:a.teamId,teamName:a.teamName,platformsJson:JSON.stringify(a.platforms),deviceCount:a.deviceCount,deviceUdidsJson:JSON.stringify(a.deviceUdids),certificateSha1sJson:JSON.stringify(a.certificateSha1s),createdAt:a3(a.createdAt),expiresAt:a3(a.expiresAt),expired:a.expired,xcodeManaged:a.xcodeManaged,observedAt:i},update:{contentHash:a.contentHash,name:a.name,profileType:a.profileType,bundleId:a.bundleId,teamId:a.teamId,teamName:a.teamName,platformsJson:JSON.stringify(a.platforms),deviceCount:a.deviceCount,deviceUdidsJson:JSON.stringify(a.deviceUdids),certificateSha1sJson:JSON.stringify(a.certificateSha1s),createdAt:a3(a.createdAt),expiresAt:a3(a.expiresAt),expired:a.expired,xcodeManaged:a.xcodeManaged,observedAt:i,missingAt:null}});for(let a of t.certificates)await r.signingCertificateAsset.upsert({where:{agentId_sha1:{agentId:e.agentId,sha1:a.sha1}},create:{id:(0,y.randomUUID)(),agentId:e.agentId,sha1:a.sha1,sha256:a.sha256,name:a.name,teamId:a.teamId,certificateType:a.certificateType,notBefore:a3(a.notBefore),expiresAt:a3(a.expiresAt),expired:a.expired,hasPrivateKey:a.hasPrivateKey,observedAt:i},update:{sha256:a.sha256,name:a.name,teamId:a.teamId,certificateType:a.certificateType,notBefore:a3(a.notBefore),expiresAt:a3(a.expiresAt),expired:a.expired,hasPrivateKey:a.hasPrivateKey,observedAt:i,missingAt:null}})}),this.deleteTransferJobSoon(e.id),this.changed()}async refreshAfterMutation(e,t){await this.agentControl.createJob({agentId:e,kind:a0.SIGNING_ASSETS_SCAN_JOB_KIND,payload:{},idempotencyKey:`signing:${t}:${e}:refresh`,timeoutSeconds:60,visibility:"SYSTEM"})}async finishOperation(e){let t=await (0,tX.getPrismaClient)(),r=await t.signingOperationItem.findMany({where:{operationId:e}});if(r.some(e=>["WAITING","QUEUED","RUNNING"].includes(e.status)))return;let i=r.filter(e=>"SUCCEEDED"!==e.status);await t.signingOperation.update({where:{id:e},data:{status:i.length?"FAILED":"SUCCEEDED",error:i.map(e=>e.error).filter(Boolean).join("; ")||null,finishedAt:new Date}}),this.changed()}async completeOperation(e){let t=await (0,tX.getPrismaClient)(),r=await t.signingOperationItem.findUnique({where:{jobId:e.id},include:{operation:!0}});if(r){if(await t.signingOperationItem.update({where:{id:r.id},data:{status:e.status,error:e.error,finishedAt:new Date}}),e.kind===a0.SIGNING_PROFILE_READ_JOB_KIND&&"SUCCEEDED"===e.status&&"SYNC_PROFILE"===r.operation.kind){let i=a2(e.resultJson).contentBase64;if("string"==typeof i&&i)for(let e of(await t.signingOperationItem.findMany({where:{operationId:r.operationId,status:"WAITING"}}))){let a=await this.agentControl.createJob({agentId:e.agentId,kind:a0.SIGNING_PROFILE_INSTALL_JOB_KIND,payload:{contentBase64:i},idempotencyKey:`signing:${r.operationId}:${e.agentId}:install`,timeoutSeconds:60,visibility:"SYSTEM"});await t.signingOperationItem.update({where:{id:e.id},data:{jobId:a.id,status:a.status}})}else await t.signingOperation.update({where:{id:r.operationId},data:{status:"FAILED",error:"Profile read returned no content"}})}e.kind===a0.SIGNING_PROFILE_READ_JOB_KIND&&"SUCCEEDED"!==e.status&&"SYNC_PROFILE"===r.operation.kind&&await t.signingOperationItem.updateMany({where:{operationId:r.operationId,status:"WAITING"},data:{status:"FAILED",error:"Source profile could not be read",finishedAt:new Date}}),"SUCCEEDED"===e.status&&e.kind!==a0.SIGNING_PROFILE_READ_JOB_KIND&&await this.refreshAfterMutation(e.agentId,r.operationId),await this.finishOperation(r.operationId),this.deleteTransferJobSoon(e.id)}}async refresh(e){let t=await (0,tX.getPrismaClient)(),r=await t.agent.findMany({where:e?.length?{id:{in:[...new Set(e)]}}:void 0,orderBy:{name:"asc"}}),i=[];for(let e of r)a4(e.capabilitiesJson).includes(a0.SIGNING_ASSETS_SCAN_JOB_KIND)&&i.push(await this.agentControl.createJob({agentId:e.id,kind:a0.SIGNING_ASSETS_SCAN_JOB_KIND,payload:{},idempotencyKey:`signing:scan:${Date.now()}:${e.id}`,timeoutSeconds:60,visibility:"SYSTEM"}));return i}async agents(){let e=await (0,tX.getPrismaClient)();return(await e.agent.findMany({orderBy:{name:"asc"}})).map(e=>({id:e.id,name:e.name,hostname:e.hostname,supported:a4(e.capabilitiesJson).includes(a0.SIGNING_ASSETS_SCAN_JOB_KIND),lastSeenAt:e.lastSeenAt?.toISOString()??null}))}async profiles(){let e=await (0,tX.getPrismaClient)(),t=await e.signingProfileAsset.findMany({where:{missingAt:null},include:{agent:{select:{id:!0,name:!0}}},orderBy:[{expiresAt:"asc"},{name:"asc"}]}),r=new Map;for(let e of t){let t=`${e.uuid}:${e.contentHash}`;r.set(t,[...r.get(t)??[],e])}return[...r.values()].map(e=>{let t=e[0];return{id:`${t.uuid}:${t.contentHash}`,uuid:t.uuid,contentHash:t.contentHash,name:t.name,profileType:t.profileType,bundleId:t.bundleId,teamId:t.teamId,teamName:t.teamName,platforms:a4(t.platformsJson),deviceCount:t.deviceCount,deviceUdids:a4(t.deviceUdidsJson),certificateSha1s:a4(t.certificateSha1sJson),createdAt:t.createdAt?.toISOString()??null,expiresAt:t.expiresAt?.toISOString()??null,expired:t.expired,xcodeManaged:t.xcodeManaged,installedAgents:e.map(({agent:e})=>e)}})}async profile(e){return(await this.profiles()).find(t=>t.id===e)??null}async profileDevices(e){let t=new Set,r=e.filter(e=>{let r=e.toUpperCase();return!t.has(r)&&(t.add(r),!0)}),i=r.map(e=>e.toUpperCase());if(!i.length)return[];let a=await (0,tX.getPrismaClient)(),n=new Map((await a.iosDevice.findMany({where:{udid:{in:i}},select:{id:!0,udid:!0,displayName:!0,product:!0,osVersion:!0,status:!0}})).map(e=>[e.udid.toUpperCase(),e]));return r.map(e=>{let t=n.get(e.toUpperCase());return{udid:e,deviceId:t?.id??null,displayName:t?.displayName??null,product:t?.product??null,osVersion:t?.osVersion??null,status:t?.status??null}})}async certificates(){let e=await (0,tX.getPrismaClient)(),t=await e.signingCertificateAsset.findMany({where:{missingAt:null},include:{agent:{select:{id:!0,name:!0}}},orderBy:[{expiresAt:"asc"},{name:"asc"}]}),r=new Map;for(let e of t)r.set(e.sha1,[...r.get(e.sha1)??[],e]);return[...r.values()].map(e=>{let t=e[0];return{id:t.sha1,sha1:t.sha1,sha256:t.sha256,name:t.name,teamId:t.teamId,certificateType:t.certificateType,notBefore:t.notBefore?.toISOString()??null,expiresAt:t.expiresAt?.toISOString()??null,expired:t.expired,hasPrivateKey:e.some(e=>e.hasPrivateKey),installedAgents:e.map(({agent:e})=>e),privateKeyAgents:e.filter(e=>e.hasPrivateKey).map(({agent:e})=>e)}})}async operations(e=50){return(await (0,tX.getPrismaClient)()).signingOperation.findMany({include:{items:{include:{agent:{select:{id:!0,name:!0}}},orderBy:{createdAt:"asc"}}},orderBy:{createdAt:"desc"},take:Math.max(1,Math.min(e,200))})}async operation(e,t,r,i=null,a=[]){let n=await (0,tX.getPrismaClient)(),s=(0,y.randomUUID)();return n.signingOperation.create({data:{id:s,kind:e,assetKey:t,sourceAgentId:i,items:{create:[...new Set(r)].map(e=>({id:(0,y.randomUUID)(),agentId:e,status:a.includes(e)?"WAITING":"QUEUED"}))}},include:{items:{include:{agent:{select:{id:!0,name:!0}}}}}})}async attachJob(e,t){let r=await (0,tX.getPrismaClient)();await r.signingOperationItem.update({where:{id:e},data:{jobId:t.id,status:t.status}})}async uploadProfile(e,t){if(!t.length)throw Error("Select at least one agent");let r=(0,y.createHash)("sha256").update(Buffer.from(e,"base64")).digest("hex").toUpperCase(),i=await this.operation("INSTALL_PROFILE",r,t);for(let t of i.items){let r=await this.agentControl.createJob({agentId:t.agentId,kind:a0.SIGNING_PROFILE_INSTALL_JOB_KIND,payload:{contentBase64:e},idempotencyKey:`signing:${i.id}:${t.agentId}:install`,timeoutSeconds:60,visibility:"SYSTEM"});await this.attachJob(t.id,r)}return this.changed(),i}async downloadProfile(e,t){let r=(0,y.randomUUID)(),i=await this.agentControl.createJob({agentId:t,kind:a0.SIGNING_PROFILE_READ_JOB_KIND,payload:{uuid:e},idempotencyKey:`signing:download:${r}:${e}`,timeoutSeconds:60,visibility:"SYSTEM"}),a=await (0,tX.getPrismaClient)();try{let t=Date.now()+55e3;for(;Date.now()<t;){let t=await this.agentControl.getJob(i.id);if(!t)throw Error("Profile download job was removed");if(["FAILED","CANCELLED","TIMED_OUT"].includes(t.status))throw Error(t.error||"Could not read provisioning profile");if("SUCCEEDED"===t.status){let r=a2(t.resultJson);if("string"!=typeof r.contentBase64)throw Error("Agent returned no provisioning profile content");return{uuid:e,filename:`${e}.mobileprovision`,contentBase64:r.contentBase64}}await new Promise(e=>setTimeout(e,250))}throw Error("Timed out reading provisioning profile")}finally{await a.agentJob.deleteMany({where:{id:i.id,visibility:"SYSTEM"}})}}async syncProfile(e,t,r){let i=[...new Set(r)].filter(e=>e!==t);if(!i.length)throw Error("Select at least one target agent");let a=await this.operation("SYNC_PROFILE",e,[t,...i],t,i),n=a.items.find(e=>e.agentId===t),s=await this.agentControl.createJob({agentId:t,kind:a0.SIGNING_PROFILE_READ_JOB_KIND,payload:{uuid:e},idempotencyKey:`signing:${a.id}:${t}:read`,timeoutSeconds:60,visibility:"SYSTEM"});return await this.attachJob(n.id,s),this.changed(),a}async deleteProfile(e,t){if(!t.length)throw Error("Select at least one agent");let r=await this.operation("DELETE_PROFILE",e,t);for(let t of r.items){let i=await this.agentControl.createJob({agentId:t.agentId,kind:a0.SIGNING_PROFILE_DELETE_JOB_KIND,payload:{uuid:e},idempotencyKey:`signing:${r.id}:${t.agentId}:delete`,timeoutSeconds:60,visibility:"SYSTEM"});await this.attachJob(t.id,i)}return this.changed(),r}async deleteExpiredProfiles(e){let t=await (0,tX.getPrismaClient)(),r=await t.signingProfileAsset.findMany({where:{expired:!0,missingAt:null,...e?.length?{agentId:{in:e}}:{}}}),i=new Map;for(let e of r)i.set(e.uuid,[...i.get(e.uuid)??[],e.agentId]);let a=[];for(let[e,t]of i)a.push(await this.deleteProfile(e,t));return a}async importIdentity(e){if(!e.targetAgentIds.length)throw Error("Select at least one agent");let t=Buffer.from(e.p12Base64,"base64");if(!t.length||t.length>0x1400000)throw Error("The .p12 file is empty or larger than 20 MiB");let r=[...new Set(e.targetAgentIds)],i=await (0,tX.getPrismaClient)(),n=new Map((await i.agent.findMany({where:{id:{in:r}},select:{id:!0,name:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}})).map(e=>[e.id,e])),s=Date.now(),o=r.filter(e=>{let t=n.get(e);return!t||!function(e,t=Date.now()){return null!==e.lastSeenAt&&t-e.lastSeenAt.getTime()<=(0,a.agentOnlineWindowMs)(e)&&null===e.disconnectedAt}(t,s)||!a4(t.capabilitiesJson).includes(a0.SIGNING_IDENTITY_IMPORT_JOB_KIND)});if(o.length)throw Error(`Identity imports require online supported agents: ${o.map(e=>n.get(e)?.name??e).join(", ")}`);let l=(0,y.createHash)("sha256").update(t).digest("hex").toUpperCase(),u=await this.operation("IMPORT_IDENTITY",l,r);for(let t of u.items){let r=this.agentControl.createSigningSecretTransfer(t.agentId,{p12Base64:e.p12Base64,passphrase:e.passphrase});try{let e=await this.agentControl.createJob({agentId:t.agentId,kind:a0.SIGNING_IDENTITY_IMPORT_JOB_KIND,payload:{transferId:r,sha256:l},idempotencyKey:`signing:${u.id}:${t.agentId}:import`,timeoutSeconds:120,visibility:"SYSTEM"});await this.attachJob(t.id,e)}catch(e){throw this.agentControl.revokeSigningSecretTransfer(r),e}}return this.changed(),u}async deleteIdentity(e,t){if(!t.length)throw Error("Select at least one agent");let r=e.toUpperCase(),i=[...new Set(t)],a=await (0,tX.getPrismaClient)(),n=new Set((await a.signingCertificateAsset.findMany({where:{sha1:r,agentId:{in:i},hasPrivateKey:!0,missingAt:null},select:{agentId:!0}})).map(e=>e.agentId)),s=i.filter(e=>n.has(e));if(!s.length)throw Error("The identity has no private key on the selected agents");let o=await this.operation("DELETE_IDENTITY",r,s);for(let e of o.items){let t=await this.agentControl.createJob({agentId:e.agentId,kind:a0.SIGNING_IDENTITY_DELETE_JOB_KIND,payload:{sha1:r},idempotencyKey:`signing:${o.id}:${e.agentId}:delete`,timeoutSeconds:60,visibility:"SYSTEM"});await this.attachJob(e.id,t)}return this.changed(),o}async appleClient(){return new a1.AppleDeveloperClient(await (0,a1.storedAppleDeveloperCredentials)(this.credentials),this.fetcher)}async portalInventory(){let e=await this.appleClient(),[t,r,i,a]=await Promise.all([e.listProfiles(),e.listCertificates(),e.listBundleIds(),e.listDevices()]);return{profiles:t,certificates:r,bundleIds:i,devices:a}}async createPortalProfile(e){let t=await (await this.appleClient()).createProfile(e);return this.changed(),t.data}async deletePortalProfile(e){return await (await this.appleClient()).deleteProfile(e),this.changed(),!0}async revokePortalCertificate(e){return await (await this.appleClient()).revokeCertificate(e),this.changed(),!0}}var a8=e.i(308810),a5=e.i(726355);let a9={IOS_BUILD_SUCCEEDED:{key:"IOS_BUILD_SUCCEEDED",category:"BUILDS",label:"iOS build succeeded",description:"An iOS build finishes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},IOS_BUILD_FAILED:{key:"IOS_BUILD_FAILED",category:"BUILDS",label:"iOS build failed",description:"An iOS build finishes with a failure.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},COMMAND_RUN_SUCCEEDED:{key:"COMMAND_RUN_SUCCEEDED",category:"COMMANDS",label:"Command run succeeded",description:"A saved command finishes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},COMMAND_RUN_FAILED:{key:"COMMAND_RUN_FAILED",category:"COMMANDS",label:"Command run failed",description:"A saved command finishes with a failure.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},GITHUB_ACTIONS_SUCCEEDED:{key:"GITHUB_ACTIONS_SUCCEEDED",category:"GITHUB",label:"GitHub Actions succeeded",description:"A GitHub Actions workflow finishes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},GITHUB_ACTIONS_FAILED:{key:"GITHUB_ACTIONS_FAILED",category:"GITHUB",label:"GitHub Actions failed",description:"A GitHub Actions workflow finishes with a failure.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},RUN_NEEDS_ANSWER:{key:"RUN_NEEDS_ANSWER",category:"RUNS",label:"Plan or session needs an answer",description:"A managed plan or session asks for user input.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},RUN_COMPLETED:{key:"RUN_COMPLETED",category:"RUNS",label:"Plan or session completed",description:"A managed plan or session completes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},RUN_FAILED:{key:"RUN_FAILED",category:"RUNS",label:"Plan or session failed",description:"A managed plan or session fails.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},RUN_CANCELLED:{key:"RUN_CANCELLED",category:"RUNS",label:"Plan or session cancelled",description:"A managed plan or session is cancelled.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!1,defaultWebPushEnabled:!1},RUN_RECOVERY_PAUSED:{key:"RUN_RECOVERY_PAUSED",category:"RUNS",label:"Plan or session paused after recovery",description:"A managed plan or session is paused after its agent restarts.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_MESSAGE:{key:"WORKFLOW_MESSAGE",category:"WORKFLOWS",label:"Workflow message",description:"A workflow sends a generic notification.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_NEEDS_ATTENTION:{key:"WORKFLOW_NEEDS_ATTENTION",category:"WORKFLOWS",label:"Workflow needs attention",description:"A workflow is waiting for data or a decision.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_COMPLETED:{key:"WORKFLOW_COMPLETED",category:"WORKFLOWS",label:"Workflow completed",description:"A workflow run completes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_FAILED:{key:"WORKFLOW_FAILED",category:"WORKFLOWS",label:"Workflow failed",description:"A workflow run fails.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_RECOVERY_PAUSED:{key:"WORKFLOW_RECOVERY_PAUSED",category:"WORKFLOWS",label:"Workflow paused after recovery",description:"A workflow pauses while recovering durable work.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1}};function a7(e){return e in a9?a9[e]:null}let ne="default";function nt(e,t,r){let i=e.trim();if(!i)throw Error(`${t} is required`);if(i.length>r)throw Error(`${t} is too long`);return i}function nr(e){let t,r=nt(e,"Push endpoint",4e3);try{t=new URL(r)}catch{throw Error("Push endpoint must be a valid URL")}if("https:"!==t.protocol)throw Error("Push endpoint must use HTTPS");return r}function ni(e,t){let r=new Date(e);if(!Number.isFinite(r.getTime()))throw Error(`${t} is invalid`);return r}function na(){let e=process.env.PUBLIC_BASE_URL?.trim();if(e)try{let t=new URL(e);if("https:"===t.protocol)return t.origin}catch{}return"mailto:notifications@ai-development-environment.local"}function nn(e){if(!e||"object"!=typeof e)return null;let t=e.statusCode;return"number"==typeof t?t:null}class ns{credentialService;vapidPreparation;constructor(e){this.credentialService=e,this.vapidPreparation=null}publish(e){r6.agentEventBus.publish(r6.APP_NOTIFICATIONS_CHANGED_TOPIC,{notificationsChanged:e})}subscribe(){return r6.agentEventBus.iterate(r6.APP_NOTIFICATIONS_CHANGED_TOPIC)}async preferences(){let e=await (0,tX.getPrismaClient)(),t=new Map((await e.notificationPreference.findMany()).map(e=>[e.typeKey,e]));return Object.values(a9).map(e=>{let r=t.get(e.key);return{...e,sidebarEnabled:r?.sidebarEnabled??e.defaultSidebarEnabled,browserEnabled:r?.browserEnabled??e.defaultBrowserEnabled,webPushEnabled:r?.webPushEnabled??e.defaultWebPushEnabled,updatedAt:r?.updatedAt??null}})}async savePreference(e){let t=a7(e.typeKey);if(!t)throw Error("Unknown notification type");let r=await (0,tX.getPrismaClient)(),i=await r.notificationPreference.upsert({where:{typeKey:t.key},create:{typeKey:t.key,sidebarEnabled:e.sidebarEnabled,browserEnabled:e.browserEnabled,webPushEnabled:e.webPushEnabled},update:{sidebarEnabled:e.sidebarEnabled,browserEnabled:e.browserEnabled,webPushEnabled:e.webPushEnabled}});return this.publish({kind:"PREFERENCES_UPDATED",notification:null,notificationId:null}),{...t,...i}}async recordInTransaction(e,t){let r=a7(t.typeKey);if(!r)throw Error("Unknown notification type");let i=await e.notificationPreference.findUnique({where:{typeKey:r.key}}),a=i?.sidebarEnabled??r.defaultSidebarEnabled,n=i?.browserEnabled??r.defaultBrowserEnabled,s=i?.webPushEnabled??r.defaultWebPushEnabled;if(!a&&!n&&!s)return null;let o=nt(t.dedupeKey,"Deduplication key",500);return await e.appNotification.findUnique({where:{dedupeKey:o}})?null:e.appNotification.create({data:{id:(0,y.randomUUID)(),dedupeKey:o,typeKey:r.key,title:nt(t.title,"Notification title",240),body:nt(t.body,"Notification body",1e3),href:function(e){let t=nt(e,"Notification link",2e3);if(!t.startsWith("/")||t.startsWith("//"))throw Error("Notification links must be same-origin paths");return t}(t.href),resourceKind:nt(t.resourceKind,"Resource kind",100),resourceId:nt(t.resourceId,"Resource ID",500),worktreeId:t.worktreeId??null,highlightColor:t.highlightColor?.trim()||null,sidebarRequested:a,browserRequested:n,webPushRequested:s}})}created(e){e&&(this.publish({kind:"CREATED",notification:e,notificationId:e.id}),e.webPushRequested&&this.deliverWebPush(e).catch(e=>{console.error("Web Push delivery failed:",e)}))}async history(e={}){let t=Math.max(1,Math.min(e.first??100,200)),r=await (0,tX.getPrismaClient)(),[i,a]=await Promise.all([r.appNotification.findMany({orderBy:[{createdAt:"desc"},{id:"desc"}],take:t+1,...e.after?{cursor:{id:e.after},skip:1}:void 0}),r.appNotification.count()]);return{items:i.slice(0,t),nextCursor:i.length>t?i[t-1].id:null,totalCount:a}}async sidebar(e=50){return(await (0,tX.getPrismaClient)()).appNotification.findMany({where:{sidebarRequested:!0,sidebarDismissedAt:null},orderBy:[{createdAt:"desc"},{id:"desc"}],take:Math.max(1,Math.min(e,100))})}async dismiss(e){let t=await (0,tX.getPrismaClient)(),r=await t.appNotification.updateMany({where:{id:e,sidebarRequested:!0,sidebarDismissedAt:null},data:{sidebarDismissedAt:new Date}});return r.count&&this.publish({kind:"DISMISSED",notification:null,notificationId:e}),r.count>0}async dismissAll(){let e=await (0,tX.getPrismaClient)(),t=await e.appNotification.updateMany({where:{sidebarRequested:!0,sidebarDismissedAt:null},data:{sidebarDismissedAt:new Date}});return t.count&&this.publish({kind:"SIDEBAR_CLEARED",notification:null,notificationId:null}),t.count}selectionWhere(e){let t=e.excludedRanges??[],r=e.all&&0===t.length?[]:[...new Set(e.ids??[])],i=[...new Set(e.excludedIds??[])],a=e.ranges??[];if(r.length>5e3||i.length>5e3)throw Error("Notification selection is too large");if(a.length>366||t.length>366)throw Error("Notification date selection is too large");let n=t.map(e=>{let t=ni(e.start,"Excluded selection start"),r=ni(e.end,"Excluded selection end");if(t>=r)throw Error("Excluded selection range is invalid");return{createdAt:{gte:t,lt:r}}}),s={NOT:{OR:n}},o=[];if(r.length&&o.push({id:{in:r}}),e.all)o.push(n.length?s:{});else if(a.length){let e=a.map(e=>{let t=ni(e.start,"Selection start"),r=ni(e.end,"Selection end");if(t>=r)throw Error("Selection range is invalid");return{createdAt:{gte:t,lt:r}}});o.push({AND:[{OR:e},...n.length?[s]:[]]})}if(!o.length)return{id:{in:[]}};let l=1===o.length?o[0]:{OR:o};return i.length?{AND:[l,{id:{notIn:i}}]}:l}async deleteSelection(e){let t=await (0,tX.getPrismaClient)(),r=await t.appNotification.deleteMany({where:this.selectionWhere(e)});return r.count&&this.publish({kind:"DELETED",notification:null,notificationId:null}),r.count}async deleteAll(){let e=await (0,tX.getPrismaClient)(),t=await e.appNotification.deleteMany();return t.count&&this.publish({kind:"HISTORY_CLEARED",notification:null,notificationId:null}),t.count}async webPushState(){let e=await (0,tX.getPrismaClient)(),[t,r]=await Promise.all([e.webPushSettings.findUnique({where:{id:ne}}),e.webPushSubscription.count()]),i=await this.credentialService.isConfigured(t1.CREDENTIALS.webPushVapidPrivateKey);return{configured:!!(t?.vapidPublicKey&&i),publicKey:t?.vapidPublicKey??null,subscriptionCount:r}}async webPushSubscriptions(){return(await (0,tX.getPrismaClient)()).webPushSubscription.findMany({orderBy:[{lastSeenAt:"desc"},{createdAt:"desc"}],select:{id:!0,endpoint:!0,expirationTime:!0,locale:!0,userAgent:!0,lastSeenAt:!0,createdAt:!0,updatedAt:!0}})}async prepareWebPush(){return this.vapidPreparation||(this.vapidPreparation=this.prepareWebPushOnce().finally(()=>{this.vapidPreparation=null})),this.vapidPreparation}async prepareWebPushOnce(){let e=await (0,tX.getPrismaClient)(),t=await e.webPushSettings.findUnique({where:{id:ne}});if(t?.vapidPublicKey){if(!await this.credentialService.getText(t1.CREDENTIALS.webPushVapidPrivateKey))throw Error("The Web Push private key is unavailable");return{publicKey:t.vapidPublicKey}}let r=a5.default.generateVAPIDKeys();return await this.credentialService.setText(t1.CREDENTIALS.webPushVapidPrivateKey,r.privateKey,e=>e.webPushSettings.upsert({where:{id:ne},create:{id:ne,vapidPublicKey:r.publicKey,vapidGeneratedAt:new Date},update:{vapidPublicKey:r.publicKey,vapidGeneratedAt:new Date}}).then(()=>void 0)),{publicKey:r.publicKey}}async registerWebPush(e){let t=nr(e.endpoint),r=nt(e.p256dh,"Push p256dh key",1e3),i=nt(e.auth,"Push auth key",1e3),a=null===e.expirationTime||void 0===e.expirationTime?null:new Date(e.expirationTime);if(a&&!Number.isFinite(a.getTime()))throw Error("Push subscription expiration is invalid");return await this.prepareWebPush(),(await (0,tX.getPrismaClient)()).webPushSubscription.upsert({where:{endpoint:t},create:{id:(0,y.randomUUID)(),endpoint:t,p256dh:r,auth:i,expirationTime:a,locale:e.locale?.trim().slice(0,35)||null,userAgent:e.userAgent?.trim().slice(0,1e3)||null},update:{p256dh:r,auth:i,expirationTime:a,locale:e.locale?.trim().slice(0,35)||null,userAgent:e.userAgent?.trim().slice(0,1e3)||null,lastSeenAt:new Date}})}async unregisterWebPush(e){let t=nr(e),r=await (0,tX.getPrismaClient)();return(await r.webPushSubscription.deleteMany({where:{endpoint:t}})).count>0}async deleteWebPushSubscription(e){let t=nt(e,"Push subscription",200),r=await (0,tX.getPrismaClient)();return(await r.webPushSubscription.deleteMany({where:{id:t}})).count>0}async testWebPushSubscription(e){let t=nt(e,"Push subscription",200),r=await (0,tX.getPrismaClient)(),[i,a]=await Promise.all([r.webPushSettings.findUnique({where:{id:ne}}),r.webPushSubscription.findUnique({where:{id:t}})]);if(!a)throw Error("Push subscription was not found");if(!i?.vapidPublicKey)throw Error("Web Push is not configured");let n=await this.credentialService.getText(t1.CREDENTIALS.webPushVapidPrivateKey);if(!n)throw Error("The Web Push private key is unavailable");a5.default.setVapidDetails(na(),i.vapidPublicKey,n);try{return await a5.default.sendNotification({endpoint:a.endpoint,expirationTime:a.expirationTime?.getTime()??null,keys:{p256dh:a.p256dh,auth:a.auth}},JSON.stringify({id:`test:${Date.now()}`,title:"Test notification",body:"Web Push is working for this browser.",href:"/notifications",icon:"/icon-192.png",badge:"/icon-192.png"}),{TTL:60,timeout:1e4}),!0}catch(e){if([404,410].includes(nn(e)??0))throw await r.webPushSubscription.deleteMany({where:{id:t}}),Error("The browser subscription expired and was removed");throw e}}async deliverWebPush(e){if(!e.webPushRequested)return;let t=await (0,tX.getPrismaClient)(),[r,i]=await Promise.all([t.webPushSettings.findUnique({where:{id:ne}}),t.webPushSubscription.findMany()]);if(!r?.vapidPublicKey||!i.length)return;let a=await this.credentialService.getText(t1.CREDENTIALS.webPushVapidPrivateKey);if(!a)return;a5.default.setVapidDetails(na(),r.vapidPublicKey,a);let n=JSON.stringify({id:e.id,title:e.title,body:e.body,href:e.href,icon:"/icon-192.png",badge:"/icon-192.png"});await Promise.allSettled(i.map(async e=>{try{await a5.default.sendNotification({endpoint:e.endpoint,expirationTime:e.expirationTime?.getTime()??null,keys:{p256dh:e.p256dh,auth:e.auth}},n,{TTL:3600,timeout:1e4})}catch(r){if([404,410].includes(nn(r)??0))return void await t.webPushSubscription.deleteMany({where:{endpoint:e.endpoint}});console.error(`Web Push delivery to ${e.endpoint} failed:`,r)}}))}}var no=e.i(986847);let nl=e=>e?.toISOString()??null;function nu(e,t,r,i,a){return e?t?"RUNNING":a?"ERROR":r&&!i||r&&i&&Date.now()-i.getTime()>2e3*r+5e3?"STALE":"HEALTHY":"DISABLED"}class nc{operations=new Map;register(e){let t=this.operations.get(e.id);this.operations.set(e.id,{...e,lastStartedAt:t?.lastStartedAt??null,lastCompletedAt:t?.lastCompletedAt??null,lastSucceededAt:t?.lastSucceededAt??null,nextScheduledAt:t?.nextScheduledAt??null,durationMs:t?.durationMs??null,lastError:t?.lastError??null}),this.changed(e.id)}configure(e,t){let r=this.operations.get(e);r&&(Object.assign(r,t),r.enabled||(r.nextScheduledAt=null),this.changed(e))}schedule(e,t){let r=this.operations.get(e);r&&(r.nextScheduledAt=t,this.changed(e))}async run(e,t,r){let i=this.operations.get(e);if(!i)throw Error(`Polling operation ${e} is not registered`);let a=new Date;i.lastStartedAt=a,i.lastError=null,this.changed(e);try{let e=await t(),n=new Date;return i.lastCompletedAt=n,i.lastSucceededAt=n,i.durationMs=n.getTime()-a.getTime(),i.lastError=null,r&&(i.details={...i.details,...r(e)}),e}catch(t){let e=new Date;throw i.lastCompletedAt=e,i.durationMs=e.getTime()-a.getTime(),i.lastError=t instanceof Error?t.message:String(t),t}finally{this.changed(e)}}changed(e){r6.agentEventBus.publish(r6.POLLING_CHANGED_TOPIC,{pollingOperationChanged:e})}subscribe(){return r6.agentEventBus.iterate(r6.POLLING_CHANGED_TOPIC)}serverViews(){return[...this.operations.values()].map(e=>({...e,status:nu(e.enabled,!!(e.lastStartedAt&&(!e.lastCompletedAt||e.lastStartedAt>e.lastCompletedAt)),e.cadenceSeconds,e.lastCompletedAt,e.lastError),lastStartedAt:nl(e.lastStartedAt),lastCompletedAt:nl(e.lastCompletedAt),lastSucceededAt:nl(e.lastSucceededAt),nextScheduledAt:nl(e.nextScheduledAt)}))}async list(){let e=await (0,tX.getPrismaClient)(),[t,r,i]=await Promise.all([e.codebaseSettings.findUnique({where:{id:"default"}}),e.agent.findMany({orderBy:{name:"asc"},select:{id:!0,name:!0,lastSeenAt:!0,disconnectedAt:!0,codebaseScanIntervalSeconds:!0,jobReconciliationIntervalSeconds:!0,gitFetchIntervalSeconds:!0,heartbeatIntervalSeconds:!0,codebases:{select:{lastCheckedAt:!0,lastFetchedAt:!0,lastFetchAttemptAt:!0,lastFetchError:!0}},diskSpaceState:{select:{enabled:!0,lastReportedAt:!0,lastError:!0,volumesJson:!0}}}}),e.agentJob.groupBy({by:["agentId","status"],where:{status:{in:["QUEUED","RUNNING"]}},_count:{_all:!0}})]),n=t?.refreshIntervalSeconds??30,s=t?.fetchIntervalSeconds??300,o=new Map;for(let e of i)o.set(e.agentId,(o.get(e.agentId)??0)+e._count._all);let l=[];for(let e of r){let t=e.heartbeatIntervalSeconds??no.DEFAULT_AGENT_HEARTBEAT_INTERVAL_SECONDS,r=e.jobReconciliationIntervalSeconds??no.DEFAULT_AGENT_JOB_RECONCILIATION_INTERVAL_SECONDS,i=e.codebaseScanIntervalSeconds??n,u=e.gitFetchIntervalSeconds??s,c=null!==e.lastSeenAt&&null===e.disconnectedAt&&Date.now()-e.lastSeenAt.getTime()<=(0,a.agentOnlineWindowMs)(e);l.push({id:`agent-heartbeat:${e.id}`,kind:"AGENT_HEARTBEAT",runtime:"AGENT",status:c?"HEALTHY":"STALE",enabled:!0,cadenceSeconds:t,lastStartedAt:null,lastCompletedAt:nl(e.lastSeenAt),lastSucceededAt:nl(e.lastSeenAt),nextScheduledAt:e.lastSeenAt?new Date(e.lastSeenAt.getTime()+1e3*t).toISOString():null,durationMs:null,lastError:null,details:{agentId:e.id,agentName:e.name,connection:c?"ONLINE":"OFFLINE"}});let d=e.diskSpaceState,p=d?.enabled??!0,h=d?.lastReportedAt??null,m=0;try{let e=JSON.parse(d?.volumesJson??"[]");m=Array.isArray(e)?e.length:0}catch{m=0}l.push({id:`agent-disk-space:${e.id}`,kind:"AGENT_DISK_SPACE",runtime:"AGENT",status:p?nu(!0,!1,r4.DISK_SPACE_POLL_INTERVAL_SECONDS,h,d?.lastError??null):"DISABLED",enabled:p,cadenceSeconds:r4.DISK_SPACE_POLL_INTERVAL_SECONDS,lastStartedAt:null,lastCompletedAt:nl(h),lastSucceededAt:d?.lastError?null:nl(h),nextScheduledAt:p&&h?new Date(h.getTime()+1e3*r4.DISK_SPACE_POLL_INTERVAL_SECONDS).toISOString():null,durationMs:null,lastError:d?.lastError??null,details:{agentId:e.id,agentName:e.name,volumes:m}}),l.push({id:`agent-job-reconciliation:${e.id}`,kind:"AGENT_JOB_RECONCILIATION",runtime:"AGENT",status:c?"HEALTHY":"STALE",enabled:!0,cadenceSeconds:r,lastStartedAt:null,lastCompletedAt:nl(e.lastSeenAt),lastSucceededAt:nl(e.lastSeenAt),nextScheduledAt:e.lastSeenAt?new Date(e.lastSeenAt.getTime()+1e3*r).toISOString():null,durationMs:null,lastError:null,details:{agentId:e.id,agentName:e.name,pendingJobs:o.get(e.id)??0}});let f=e.codebases.map(e=>e.lastCheckedAt).filter(e=>null!==e).sort((e,t)=>t.getTime()-e.getTime())[0]??null,g=e.codebases.map(e=>e.lastFetchAttemptAt??e.lastFetchedAt).filter(e=>null!==e).sort((e,t)=>t.getTime()-e.getTime())[0]??null,y=e.codebases.filter(e=>e.lastFetchError).length;l.push({id:`agent-codebase-scan:${e.id}`,kind:"CODEBASE_SCAN",runtime:"AGENT",status:nu(e.codebases.length>0,!1,i,f,null),enabled:e.codebases.length>0,cadenceSeconds:i,lastStartedAt:null,lastCompletedAt:nl(f),lastSucceededAt:nl(f),nextScheduledAt:f?new Date(f.getTime()+1e3*i).toISOString():null,durationMs:null,lastError:null,details:{agentId:e.id,agentName:e.name,repositories:e.codebases.length}}),l.push({id:`agent-git-fetch:${e.id}`,kind:"GIT_FETCH",runtime:"AGENT",status:y>0?"ERROR":nu(e.codebases.length>0,!1,u,g,null),enabled:e.codebases.length>0,cadenceSeconds:u,lastStartedAt:null,lastCompletedAt:nl(g),lastSucceededAt:y>0?null:nl(g),nextScheduledAt:g?new Date(g.getTime()+1e3*u).toISOString():null,durationMs:null,lastError:y>0?`${y} repositories have fetch errors`:null,details:{agentId:e.id,agentName:e.name,repositories:e.codebases.length,fetchErrors:y}})}return[...this.serverViews(),...l]}}let nd="default",np="https://raw.githubusercontent.com/BerriAI/litellm/refs/heads/main/model_prices_and_context_window.json",nh=new Set(["sample_spec"]);function nm(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function nf(e){let t=nm(e);return null===t?null:Math.trunc(t)}function ng(e){return"string"==typeof e&&e.trim()?e.trim():null}function ny(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}let nw={MODEL:"model",PROVIDER:"provider",INPUT_COST:"inputCostPerToken",OUTPUT_COST:"outputCostPerToken",CACHE_READ_COST:"cacheReadCostPerToken",CACHE_WRITE_COST:"cacheWriteCostPerToken",CONTEXT_WINDOW:"maxInputTokens"};function nb(e){return{model:e.model,provider:e.provider,mode:e.mode,inputCostPerToken:e.inputCostPerToken,outputCostPerToken:e.outputCostPerToken,cacheReadCostPerToken:e.cacheReadCostPerToken,cacheWriteCostPerToken:e.cacheWriteCostPerToken,maxInputTokens:e.maxInputTokens,maxOutputTokens:e.maxOutputTokens,updatedAt:e.updatedAt.toISOString()}}class nv{refreshing=null;checkedAt=0;async getCatalog(){let e=await (0,tX.getPrismaClient)(),t=await e.modelCostSettings.upsert({where:{id:nd},create:{id:nd},update:{}}),r=t.catalogUrl??np;return{url:r,defaultUrl:np,customUrl:t.catalogUrl,fetchedAt:t.fetchedAt?.toISOString()??null,entryCount:t.entryCount,error:t.error,stale:this.isStale(t.fetchedAt)||t.sourceUrl!==r}}isStale(e){return!e||Date.now()-e.getTime()>=864e5}async saveSettings(e){let t=e?.trim()??"",r=t&&t!==np?t:null;if(r){let e;try{e=new URL(r)}catch{throw Error("The model cost URL must be a valid URL")}if("https:"!==e.protocol&&"http:"!==e.protocol)throw Error("The model cost URL must be an http or https URL")}let i=await (0,tX.getPrismaClient)();await i.modelCostSettings.upsert({where:{id:nd},create:{id:nd,catalogUrl:r},update:{catalogUrl:r}}),this.checkedAt=0;let a=await this.getCatalog();return r6.agentEventBus.publish(r6.MODEL_COST_CATALOG_CHANGED_TOPIC,{catalog:a}),a}async refresh(){return this.refreshing||(this.refreshing=this.runRefresh().finally(()=>{this.refreshing=null})),this.refreshing}async runRefresh(){let e=await (0,tX.getPrismaClient)(),t=await this.getCatalog();try{let r=await fetch(t.url,{headers:{accept:"application/json"},signal:AbortSignal.timeout(3e4)});if(!r.ok)throw Error(`The model cost catalog request failed with ${r.status}`);let i=function(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("The model cost catalog is not a JSON object");let t=[];for(let[r,i]of Object.entries(e)){if(nh.has(r)||!i||"object"!=typeof i||Array.isArray(i))continue;let e=nm(i.input_cost_per_token),a=nm(i.output_cost_per_token);if((null!==e||null!==a)&&(t.push({model:r,provider:ng(i.litellm_provider),mode:ng(i.mode),inputCostPerToken:e,outputCostPerToken:a,cacheReadCostPerToken:nm(i.cache_read_input_token_cost),cacheWriteCostPerToken:nm(i.cache_creation_input_token_cost),maxInputTokens:nf(i.max_input_tokens),maxOutputTokens:nf(i.max_output_tokens)}),t.length>=2e4))break}if(!t.length)throw Error("The model cost catalog contained no priced models");return t}(await r.json());await e.$transaction(async e=>{await e.modelCostEntry.deleteMany({});for(let t=0;t<i.length;t+=500)await e.modelCostEntry.createMany({data:i.slice(t,t+500)});await e.modelCostSettings.update({where:{id:nd},data:{fetchedAt:new Date,sourceUrl:t.url,entryCount:i.length,error:null}})})}catch(r){let t=r instanceof Error?r.message:String(r);await e.modelCostSettings.update({where:{id:nd},data:{error:t.slice(0,2e3)}})}let r=await this.getCatalog();return r6.agentEventBus.publish(r6.MODEL_COST_CATALOG_CHANGED_TOPIC,{catalog:r}),r}async ensureFresh(){this.refreshing&&await this.refreshing,Date.now()-this.checkedAt<3e5||((await this.getCatalog()).stale&&await this.refresh(),this.checkedAt=Date.now())}async listEntries({search:e,first:t=100,offset:r=0,sortKey:i="MODEL",direction:a="ASC"}){var n;let s,o;await this.ensureFresh();let l=await (0,tX.getPrismaClient)(),u=e?.trim(),c=u?{OR:[{model:{contains:u}},{provider:{contains:u}}]}:{},d=Math.min(Math.max(t??100,1),500),p=Math.max(r??0,0),[h,m]=await Promise.all([l.modelCostEntry.findMany({where:c,orderBy:(n=i??"MODEL",s="DESC"===(a??"ASC")?"desc":"asc","model"===(o=nw[n]??"model")?[{model:s}]:[{[o]:{sort:s,nulls:"last"}},{model:s}]),skip:p,take:d}),l.modelCostEntry.count({where:c})]);return{items:h.map(nb),totalCount:m}}async lookup(e){let t=[...new Set(e.filter(Boolean))],r=new Map;if(!t.length)return r;let i=await (0,tX.getPrismaClient)(),a=[...new Set(t.flatMap(e=>[e,ny(e)]))],n=new Map((await i.modelCostEntry.findMany({where:{model:{in:a}}})).map(e=>[e.model,e])),s=[];for(let e of t){let t=n.get(e)??n.get(ny(e));t?r.set(e,nb(t)):s.push(e)}if(!s.length)return r;let o=await i.modelCostEntry.findMany({where:{OR:s.map(e=>({model:{endsWith:`/${ny(e)}`}}))}});for(let e of s){let t=ny(e).toLowerCase(),i=o.find(e=>ny(e.model).toLowerCase()===t);i&&r.set(e,nb(i))}return r}estimate(e,t){if(!e)return null;let r=e.inputCostPerToken,i=e.outputCostPerToken;if(null===r&&null===i)return null;let a=e.cacheReadCostPerToken??r??0,n=e.cacheWriteCostPerToken??r??0;return t.inputTokens*(r??0)+t.outputTokens*(i??0)+t.cacheReadTokens*a+t.cacheWriteTokens*n}}e.i(648153);var nk=e.i(594875),nS=e.i(937121);let nE=["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME","ANY_WORKTREE","REPOSITORY_WORKTREE"],nI=["NEVER","ON_FAILURE","ALWAYS"],nx=["QUEUED","RUNNING","RESTARTING","CANCELLING"],nA=["SUCCEEDED","FAILED","CANCELLED"];function n_(e,t,r){let i=t.trim().toUpperCase();if(!e.includes(i))throw Error(`${r} is not supported`);return i}function nC(e,t,r){let i=e.trim();if(!i)throw Error(`${t} is required`);if(i.length>r)throw Error(`${t} is too long`);return i}function nR(e){r6.agentEventBus.publish(r6.COMMANDS_CHANGED_TOPIC,{commandsChanged:e})}function nT(e){r6.agentEventBus.publish(r6.COMMAND_RUNS_CHANGED_TOPIC,{commandRunsChanged:e}),r6.agentEventBus.publish((0,r6.commandRunChangedTopic)(e.id),{commandRunChanged:e})}class nD{agentControl;notifications;timer;reconciliation;constructor(e,t){this.agentControl=e,this.notifications=t,this.timer=null,this.reconciliation=null,this.agentControl.registerCompletionHandler(nS.COMMAND_RUN_JOB_KIND,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 (0,tX.getPrismaClient)()).commandDefinition.findMany({where:e?{}:{archivedAt:null},include:{targetAgent:!0,targetRepository:!0},orderBy:[{archivedAt:"asc"},{name:"asc"}]})}async getDefinition(e){return(await (0,tX.getPrismaClient)()).commandDefinition.findUnique({where:{id:e},include:{targetAgent:!0,targetRepository:!0}})}normalizeDefinition(e){let t=n_(nE,e.targetKind,"Target scope"),r=n_(nI,e.restartPolicy??"NEVER","Restart policy"),i=void 0===e.restartLimit?3:e.restartLimit;if(null!==i&&(!Number.isInteger(i)||i<0||i>100))throw Error("Restart limit must be null or an integer from 0 to 100");let a="SPECIFIC_AGENT_HOME"===t,n="REPOSITORY_WORKTREE"===t;if(!!e.targetAgentId!==a)throw Error(a?"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:nC(e.name,"Name",120),description:(e.description??"").trim().slice(0,2e3),script:nC(e.script,"Script",1e6),targetKind:t,targetAgentId:e.targetAgentId??null,targetRepositoryId:e.targetRepositoryId??null,restartPolicy:r,restartLimit:i,quickActionEnabled:e.quickActionEnabled??!1,quickActionIconKey:nC(e.quickActionIconKey??"terminal","Quick action icon",40),quickActionButtonVariant:nC(e.quickActionButtonVariant??"default","Quick action style",40),notificationsEnabled:e.notificationsEnabled??!0}}async createDefinition(e){let t=await (0,tX.getPrismaClient)(),r=await t.commandDefinition.create({data:{id:(0,y.randomUUID)(),...this.normalizeDefinition(e)},include:{targetAgent:!0,targetRepository:!0}});return nR(r),r}async updateDefinition(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.commandDefinition.update({where:{id:e},data:this.normalizeDefinition(t),include:{targetAgent:!0,targetRepository:!0}});return nR(i),i}async archiveDefinition(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.commandDefinition.update({where:{id:e},data:{archivedAt:t?new Date:null},include:{targetAgent:!0,targetRepository:!0}});return nR(i),i}async eligibleForAgent(e){return(await (0,tX.getPrismaClient)()).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 (0,tX.getPrismaClient)(),r=await t.worktree.findUnique({where:{id:e},select:{codebase:{select:{repositoryId:!0}}}});if(!r)throw Error("Worktree not found");return t.commandDefinition.findMany({where:{archivedAt:null,OR:[{targetKind:"ANY_WORKTREE"},{targetKind:"REPOSITORY_WORKTREE",targetRepositoryId:r.codebase.repositoryId}]},include:{targetAgent:!0,targetRepository:!0},orderBy:{name:"asc"}})}async listRuns(e){let t=await (0,tX.getPrismaClient)(),r=Math.max(1,Math.min(e.first??50,200)),i=e.search?.trim(),a={...e.includeArchived?{}:{archivedAt:null},...e.agentId?{agentId:e.agentId}:{},...e.worktreeId?{worktreeId:e.worktreeId}:{},...i?{OR:[{snapshotName:{contains:i}},{agentName:{contains:i}},{worktreePath:{contains:i}}]}:{}},[n,s]=await Promise.all([t.commandRun.findMany({where:a,include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{orderBy:{attempt:"asc"}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:r+1,...e.after?{cursor:{id:e.after},skip:1}:{}}),t.commandRun.count({where:a})]),o=n.length>r,l=n.slice(0,r);return{nodes:l,totalCount:s,pageInfo:{hasNextPage:o,endCursor:l.at(-1)?.id??null}}}async getRun(e){return(await (0,tX.getPrismaClient)()).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,r=-1,i=1e3){let a=await (0,tX.getPrismaClient)();return i<1?[]:a.commandRunOutputChunk.findMany({where:{OR:[{attempt:{runId:e,attempt:{gt:t}}},{attempt:{runId:e,attempt:t},sequence:{gt:r}}]},include:{attempt:{select:{attempt:!0,runId:!0}}},orderBy:[{attempt:{attempt:"asc"}},{sequence:"asc"}],take:Math.max(1,Math.min(i,5e3))})}async resolveTarget(e,t){let r=await (0,tX.getPrismaClient)();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 i=await r.agent.findUnique({where:{id:t.agentId}});if(!i)throw Error("Agent not found");return this.requireCapability(i.capabilitiesJson),{agent:i,worktree:null}}if(!t.worktreeId||t.agentId)throw Error("This command requires a worktree target");let i=await r.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{agent:!0,repository:!0}}}});if(!i||i.missingAt)throw Error("Worktree is unavailable");if("REPOSITORY_WORKTREE"===e.targetKind&&e.targetRepositoryId!==i.codebase.repositoryId)throw Error("This command is not eligible for the selected repository");return this.requireCapability(i.codebase.agent.capabilitiesJson),{agent:i.codebase.agent,worktree:i}}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(nS.COMMAND_RUN_JOB_KIND))throw Error("The selected agent must be upgraded before it can run commands")}async startRun(e){let t,r=await (0,tX.getPrismaClient)(),i=e.idempotencyKey?.trim()||(0,y.randomUUID)(),a=await r.commandRun.findUnique({where:{idempotencyKey:i}});if(a)return this.getRun(a.id);let n=await r.commandDefinition.findUnique({where:{id:e.commandId}});if(!n||n.archivedAt)throw Error("Command not found");let{agent:s,worktree:o}=await this.resolveTarget(n,e);try{t=await r.$transaction(async t=>{let r=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,y.randomUUID)(),displayNumber:r.nextValue,commandId:n.id,idempotencyKey:i,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: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 r.commandRun.findUnique({where:{idempotencyKey:i}});if(!e)throw t;return this.getRun(e.id)}return nT(t),await this.dispatch(t.id),this.getRun(t.id)}async startCustomRun(e){let t,r=await (0,tX.getPrismaClient)(),i=e.idempotencyKey?.trim()||(0,y.randomUUID)(),a=await r.commandRun.findUnique({where:{idempotencyKey:i}});if(a)return this.getRun(a.id);let n=nC(e.script,"Script",1e6),s=e.agentId&&!e.worktreeId?"ANY_AGENT_HOME":e.worktreeId&&!e.agentId?"ANY_WORKTREE":null;if(!s)throw Error("A custom command requires exactly one agent-home or worktree target");let{agent:o,worktree:l}=await this.resolveTarget({targetKind:s,targetAgentId:null,targetRepositoryId:null},e),u={name:"Custom command",description:"",script:n,targetKind:s,restartPolicy:"NEVER",restartLimit:null,notificationsEnabled:!0};try{t=await r.$transaction(async t=>{let r=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,y.randomUUID)(),displayNumber:r.nextValue,commandId:null,idempotencyKey:i,origin:(e.origin??"MANUAL").trim().toUpperCase(),status:"QUEUED",snapshotName:u.name,snapshotDescription:u.description,snapshotScript:u.script,snapshotTargetKind:u.targetKind,snapshotRestartPolicy:u.restartPolicy,snapshotRestartLimit:u.restartLimit,snapshotNotificationsEnabled:u.notificationsEnabled,snapshotJson:JSON.stringify(u),agentId:o.id,worktreeId:l?.id??null,agentName:o.name,agentHostname:o.hostname,worktreePath:l?.folder??null,worktreeBranch:l?.branch??null}})})}catch(t){let e=await r.commandRun.findUnique({where:{idempotencyKey:i}});if(!e)throw t;return this.getRun(e.id)}nT(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 (0,tX.getPrismaClient)(),r=await t.commandRun.findUnique({where:{id:e},include:{agent:!0,worktree:{include:{codebase:!0}},attempts:!0}});if(!r||r.stopRequested)return;if(!r.agentId||!r.agent)return void await this.failDispatch(r.id,"The command agent is no longer available");if(r.predecessorRunId){let e=await t.commandRun.findUnique({where:{id:r.predecessorRunId},select:{status:!0}});if(e&&!nA.includes(e.status))return}if(new Set(["ANY_WORKTREE","REPOSITORY_WORKTREE"]).has(r.snapshotTargetKind)&&(!r.worktreeId||!r.worktree||r.worktree.missingAt))return void await this.failDispatch(r.id,"The command worktree is no longer available");if(r.worktree&&r.worktree.codebase.agentId!==r.agentId)return void await this.failDispatch(r.id,"The worktree is no longer assigned to the command agent");try{this.requireCapability(r.agent.capabilitiesJson)}catch(e){await this.failDispatch(r.id,e instanceof Error?e.message:String(e));return}let i=r.attempts.reduce((e,t)=>!e||t.attempt>e.attempt?t:e,null),a=!i||i.agentJobId||i.completionProcessedAt||i.finishedAt?(i?.attempt??0)+1:i.attempt,n=i?.attempt===a?i:await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:a}}});if(!n)try{n=await t.commandRunAttempt.create({data:{id:(0,y.randomUUID)(),runId:e,attempt:a}})}catch(r){if(!(n=await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:a}}})))throw r}if(!n.agentJobId){let e=await this.agentControl.createJob({agentId:r.agentId,kind:nS.COMMAND_RUN_JOB_KIND,payload:{commandRunId:r.id,attemptId:n.id,targetKind:r.worktreeId?"WORKTREE":"AGENT_HOME",cwd:r.worktree?.folder??null,script:r.snapshotScript},idempotencyKey:`command-run:${r.id}:attempt:${a}`,timeoutSeconds:0,worktreeId:r.worktreeId,codebaseId:r.worktree?.codebaseId??null,visibility:"SYSTEM"});n=await t.commandRunAttempt.update({where:{id:n.id},data:{agentJobId:e.id,status:e.status}})}nT(await t.commandRun.update({where:{id:r.id},data:{status:"RUNNING"===n.status?"RUNNING":"QUEUED",startedAt:"RUNNING"===n.status?r.startedAt??new Date:null,nextRestartAt:null,error:null}}))}async failDispatch(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.commandRun.update({where:{id:e},data:{status:"FAILED",error:t,finishedAt:new Date,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});nT(i),await this.notifyFinishedRun(i)}async terminateRun(e){let t=await (0,tX.getPrismaClient)(),r=await t.commandRun.findUnique({where:{id:e},include:{attempts:{orderBy:{attempt:"desc"},take:1}}});if(!r)throw Error("Command run not found");if(nA.includes(r.status))return r;let i=await t.commandRun.update({where:{id:e},data:{stopRequested:!0,status:"CANCELLING",nextRestartAt:null}}),a=r.attempts[0]?.agentJobId;return a?await this.agentControl.cancelJob(a):await this.finishCancelled(e),nT(i),this.getRun(e)}async rerun(e){let t=await (0,tX.getPrismaClient)(),r=await t.commandRun.findUnique({where:{id:e}});if(!r)throw Error("Command run not found");let i=await t.commandRun.findUnique({where:{predecessorRunId:r.id}});if(i)return this.getRun(i.id);let a=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,y.randomUUID)(),displayNumber:t.nextValue,commandId:r.commandId,idempotencyKey:`rerun:${r.id}:${(0,y.randomUUID)()}`,origin:"RERUN",snapshotName:r.snapshotName,snapshotDescription:r.snapshotDescription,snapshotScript:r.snapshotScript,snapshotTargetKind:r.snapshotTargetKind,snapshotRestartPolicy:r.snapshotRestartPolicy,snapshotRestartLimit:r.snapshotRestartLimit,snapshotNotificationsEnabled:r.snapshotNotificationsEnabled,snapshotJson:r.snapshotJson,agentId:r.agentId,worktreeId:r.worktreeId,agentName:r.agentName,agentHostname:r.agentHostname,worktreePath:r.worktreePath,worktreeBranch:r.worktreeBranch,predecessorRunId:r.id}})});return nT(a),nA.includes(r.status)?await this.dispatch(a.id):await this.terminateRun(r.id),this.getRun(a.id)}async archiveRuns(e,t){let r=await (0,tX.getPrismaClient)();for(let i of(await r.commandRun.updateMany({where:{id:{in:e},status:{in:[...nA]}},data:{archivedAt:t?new Date:null}}),e)){let e=await r.commandRun.findUnique({where:{id:i}});e&&nT(e)}return!0}async deleteRuns(e){let t=await (0,tX.getPrismaClient)();return(await t.commandRun.deleteMany({where:{id:{in:e},status:{in:[...nA]}}})).count}async appendOutput(e,t,r,i){if(!i.length||i.length>200)throw Error("Output batches must contain 1 to 200 chunks");let a=await (0,tX.getPrismaClient)(),n=await a.commandRunAttempt.findUnique({where:{id:r},include:{run:!0}});if(!n||n.agentJobId!==t||n.run.agentId!==e)throw Error("Command attempt not found for this agent job");let s=i.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 r=new Date(e.createdAt);if(Number.isNaN(r.valueOf()))throw Error("Output date is invalid");return{...e,createdAt:r}});await Promise.all(s.map(e=>a.commandRunOutputChunk.upsert({where:{attemptId_sequence:{attemptId:r,sequence:e.sequence}},create:{id:(0,y.randomUUID)(),attemptId:r,...e},update:{}})));let o=await a.commandRunOutputChunk.findMany({where:{attemptId:r,sequence:{in:s.map(e=>e.sequence)}},orderBy:{sequence:"asc"}});for(let e of o){let t={...e,runId:n.runId,attemptNumber:n.attempt};r6.agentEventBus.publish((0,r6.commandRunOutputTopic)(n.runId),{commandRunOutputAdded:t}),r6.agentEventBus.publish(r6.COMMAND_RUN_OUTPUT_CHANGED_TOPIC,{commandRunOutputAdded:t})}return o}async finishCancelled(e){let t=await (0,tX.getPrismaClient)();nT(await t.commandRun.update({where:{id:e},data:{status:"CANCELLED",finishedAt:new Date,nextRestartAt:null}}));let r=await t.commandRun.findUnique({where:{predecessorRunId:e}});r&&await this.dispatch(r.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 r=await (0,tX.getPrismaClient)(),i=await r.$transaction(r=>this.notifications.recordInTransaction(r,{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(i)}catch(e){console.error("Command run notification failed:",e)}}async handleAttemptCompletion(e){let t=await (0,tX.getPrismaClient)(),r=await t.commandRunAttempt.findUnique({where:{agentJobId:e.id},include:{run:!0,agentJob:!0}});if(!r||r.completionProcessedAt)return;let i=new Date,a=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:r.id,completionProcessedAt:null},data:{status:e.status,exitCode:a.exitCode??null,signal:a.signal??null,error:e.error,startedAt:r.agentJob?.startedAt??r.startedAt,finishedAt:r.agentJob?.finishedAt??i,completionProcessedAt:i}})).count)return;if(r.run.stopRequested||"CANCELLED"===e.status)return void await this.finishCancelled(r.runId);let n="SUCCEEDED"===e.status&&0===a.exitCode,s=n_(nI,r.run.snapshotRestartPolicy,"Restart policy"),o=r.agentJob?.startedAt??r.createdAt,l=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,r=null!==e.limit&&t>e.limit;return{restart:!r,restartCount:t,exhausted:r}}({policy:s,limit:r.run.snapshotRestartLimit,restartCount:r.run.restartCount,durationMs:i.getTime()-o.getTime(),clean:n,manualStop:r.run.stopRequested});if(l.restart)return void nT(await t.commandRun.update({where:{id:r.runId},data:{status:"RESTARTING",restartCount:l.restartCount,nextRestartAt:new Date(i.getTime()+1e3),exitCode:a.exitCode??null,signal:a.signal??null,error:e.error}}));let u=await t.commandRun.update({where:{id:r.runId},data:{status:n?"SUCCEEDED":"FAILED",exitCode:a.exitCode??null,signal:a.signal??null,error:e.error??(l.exhausted?"Restart limit reached":n?null:"Command failed"),finishedAt:i,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});nT(u),await this.notifyFinishedRun(u)}async reconcile(e={}){let t=await (0,tX.getPrismaClient)(),r=new Date;for(let i of(await t.commandRun.findMany({where:{status:{in:[...nx]},...e.agentId?{agentId:e.agentId}:{}},include:{attempts:{include:{agentJob:!0},orderBy:{attempt:"desc"},take:1}}}))){let e=i.attempts[0];if(i.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(i.id);continue}if("RESTARTING"===i.status&&(!i.nextRestartAt||i.nextRestartAt<=r)){await this.dispatch(i.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 a="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}}),i.status!==a&&nT(await t.commandRun.update({where:{id:i.id},data:{status:a,startedAt:"RUNNING"===a?i.startedAt??e.agentJob.startedAt??r:i.startedAt}}));continue}"QUEUED"!==i.status||e&&(e.agentJobId||e.completionProcessedAt||e.finishedAt)||await this.dispatch(i.id)}}}var nN=e.i(735255);function nO(e=new Date){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${i}`}class nP{ccusage;diskSpace;polling;usageTimer;usageRunning;constructor(e,t,r){this.ccusage=e,this.diskSpace=t,this.polling=r,this.usageRunning=!1,this.ccusage.registerCompletionObserver(e=>this.recordCompletedUsage(e))}async recordCompletedUsage(e){if(0===e.progress.successfulCount)return;let t=nO(),r=e.aggregate.days.find(e=>e.period===t);await this.persistUsage(t,r?.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,y.randomUUID)()}`;try{let t=await this.ccusage.collect(e);return{period:nO(),successfulAgents:t.progress.successfulCount}}finally{await this.removeCollection(e)}}async persistUsage(e,t,r){let i=await (0,tX.getPrismaClient)();await i.sidebarUsageSummary.upsert({where:{id:"default"},create:{id:"default",period:e,totalCost:t,collectedAt:r},update:{period:e,totalCost:t,collectedAt:r}}),this.publish()}async latestSuccessfulUsage(e){let t=await (0,tX.getPrismaClient)(),r=await t.agentJob.findMany({where:{kind:no.CCUSAGE_REPORT_JOB_KIND,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}}}}),i=r.flatMap(e=>{try{let t=(0,no.parseCcusageJobResult)(JSON.parse(e.resultJson));return[{agent:e.agent,report:t.report}]}catch{return[]}});if(!i.length)return null;let a=(0,nN.aggregateUsage)(i).days.find(t=>t.period===e);return a?{totalCost:a.totalCost,collectedAt:r.reduce((e,t)=>{let r=t.finishedAt??t.createdAt;return r>e?r:e},new Date(0))}:null}async removeCollection(e){let t=await (0,tX.getPrismaClient)();await t.agentJob.deleteMany({where:{ccusageCollectionId:e}}),await t.ccusageCollection.deleteMany({where:{id:e}})}async pruneInterruptedCollections(){let e=await (0,tX.getPrismaClient)(),t=await e.ccusageCollection.findMany({where:{id:{startsWith:"sidebar-usage:"}},select:{id:!0}});if(!t.length)return;let r=t.map(({id:e})=>e);await e.agentJob.deleteMany({where:{ccusageCollectionId:{in:r}}}),await e.ccusageCollection.deleteMany({where:{id:{in:r}}})}async status(){let e=await (0,tX.getPrismaClient)(),t=nO(),[r,i,a,n,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"}}),this.diskSpace.overview()]),l=r?.period===t?{totalCost:r.totalCost,collectedAt:r.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:i,sessions:a,builds:n,workflows:s},diskSpace:o}}subscribe(){return r6.agentEventBus.iterate(r6.SIDEBAR_STATUS_CHANGED_TOPIC)}publish(){r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0})}}var n$=e.i(499162);let nU=`
632
+ `)&&-1===e.indexOf("\r")){s.push(e),o+=e.length,m();return}s.push(e);let t=s.join("");s.length=0,o=0;let r=f(t);""!==r&&(s.push(r),o=r.length),m()},reset:function(e={}){if(e.consume&&s.length>0){let e=s.join("");g(e,0,e.length)}l=!0,u=void 0,c="",d=0,p=void 0,s.length=0,o=0,h=!1}}}function eg(e,t,r){return 100===r&&97===e.charCodeAt(t+1)&&116===e.charCodeAt(t+2)&&97===e.charCodeAt(t+3)&&58===e.charCodeAt(t+4)}function ey(e,t,r){return 101===r&&118===e.charCodeAt(t+1)&&101===e.charCodeAt(t+2)&&110===e.charCodeAt(t+3)&&116===e.charCodeAt(t+4)&&58===e.charCodeAt(t+5)}class ew extends Event{constructor(e,t){var r,i;super(e),this.code=null!=(r=null==t?void 0:t.code)?r:void 0,this.message=null!=(i=null==t?void 0:t.message)?i:void 0}[Symbol.for("nodejs.util.inspect.custom")](e,t,r){return r(eb(this),t)}[Symbol.for("Deno.customInspect")](e,t){return e(eb(this),t)}}function eb(e){return{type:e.type,message:e.message,code:e.code,defaultPrevented:e.defaultPrevented,cancelable:e.cancelable,timeStamp:e.timeStamp}}var ev,ek,eS,eE,eI,ex,eA,e_,eC,eR,eT,eD,eN,eO,eP,e$,eU,eB,ej,eL,eq,eM,eF,eK=e=>{throw TypeError(e)},eV=(e,t,r)=>t.has(e)||eK("Cannot "+r),eH=(e,t,r)=>(eV(e,t,"read from private field"),r?r.call(e):t.get(e)),eG=(e,t,r)=>t.has(e)?eK("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),eW=(e,t,r,i)=>(eV(e,t,"write to private field"),t.set(e,r),r),eJ=(e,t,r)=>(eV(e,t,"access private method"),r);class ez extends EventTarget{constructor(e,t){var r,i;super(),eG(this,eO),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,eG(this,ev),eG(this,ek),eG(this,eS),eG(this,eE),eG(this,eI),eG(this,ex),eG(this,eA),eG(this,e_,null),eG(this,eC),eG(this,eR),eG(this,eT,null),eG(this,eD,null),eG(this,eN,null),eG(this,e$,async e=>{var t;eH(this,eR).reset();let{body:r,redirected:i,status:a,headers:n}=e;if(204===a){eJ(this,eO,eq).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(i?eW(this,eS,new URL(e.url)):eW(this,eS,void 0),200!==a)return void eJ(this,eO,eq).call(this,`Non-200 status code (${a})`,a);if(!(n.get("content-type")||"").startsWith("text/event-stream"))return void eJ(this,eO,eq).call(this,'Invalid content type, expected "text/event-stream"',a);if(eH(this,ev)===this.CLOSED)return;eW(this,ev,this.OPEN);let s=new Event("open");if(null==(t=eH(this,eN))||t.call(this,s),this.dispatchEvent(s),"object"!=typeof r||!r||!("getReader"in r)){eJ(this,eO,eq).call(this,"Invalid response body, expected a web ReadableStream",a),this.close();return}let o=new TextDecoder,l=r.getReader(),u=!0;do{let{done:e,value:t}=await l.read();t&&eH(this,eR).feed(o.decode(t,{stream:!e})),e&&(u=!1,eH(this,eR).reset(),eJ(this,eO,eM).call(this))}while(u)}),eG(this,eU,e=>{eW(this,eC,void 0),"AbortError"!==e.name&&"aborted"!==e.type&&eJ(this,eO,eM).call(this,function e(t){return t instanceof Error?"errors"in t&&Array.isArray(t.errors)?t.errors.map(e).join(", "):"cause"in t&&t.cause instanceof Error?`${t}: ${e(t.cause)}`:t.message:`${t}`}(e))}),eG(this,ej,e=>{"string"==typeof e.id&&eW(this,e_,e.id);let t=new MessageEvent(e.event||"message",{data:e.data,origin:eH(this,eS)?eH(this,eS).origin:eH(this,ek).origin,lastEventId:e.id||""});eH(this,eD)&&(!e.event||"message"===e.event)&&eH(this,eD).call(this,t),this.dispatchEvent(t)}),eG(this,eL,e=>{eW(this,ex,e)}),eG(this,eF,()=>{eW(this,eA,void 0),eH(this,ev)===this.CONNECTING&&eJ(this,eO,eP).call(this)});try{if(e instanceof URL)eW(this,ek,e);else if("string"==typeof e)eW(this,ek,new URL(e,function(){let e="document"in globalThis?globalThis.document:void 0;return e&&"object"==typeof e&&"baseURI"in e&&"string"==typeof e.baseURI?e.baseURI:void 0}()));else throw Error("Invalid URL")}catch{throw function(e){let t=globalThis.DOMException;return"function"==typeof t?new t(e,"SyntaxError"):SyntaxError(e)}("An invalid or illegal string was specified")}eW(this,eR,ef({onEvent:eH(this,ej),onRetry:eH(this,eL)})),eW(this,ev,this.CONNECTING),eW(this,ex,3e3),eW(this,eI,null!=(r=null==t?void 0:t.fetch)?r:globalThis.fetch),eW(this,eE,null!=(i=null==t?void 0:t.withCredentials)&&i),eJ(this,eO,eP).call(this)}get readyState(){return eH(this,ev)}get url(){return eH(this,ek).href}get withCredentials(){return eH(this,eE)}get onerror(){return eH(this,eT)}set onerror(e){eW(this,eT,e)}get onmessage(){return eH(this,eD)}set onmessage(e){eW(this,eD,e)}get onopen(){return eH(this,eN)}set onopen(e){eW(this,eN,e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){eH(this,eA)&&clearTimeout(eH(this,eA)),eH(this,ev)!==this.CLOSED&&(eH(this,eC)&&eH(this,eC).abort(),eW(this,ev,this.CLOSED),eW(this,eC,void 0))}}function eZ(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}function eY(e=fetch,t){return t?async(r,i)=>e(r,{...t,...i,headers:i?.headers?{...eZ(t.headers),...eZ(i.headers)}:t.headers}):e}async function eQ(e){return(await t).getRandomValues(new Uint8Array(e))}async function eX(e){let t="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r=256-256%t.length,i="";for(;i.length<e;)for(let a of(await eQ(e-i.length)))a<r&&(i+=t[a%t.length]);return i}async function e0(e){return await eX(e)}async function e1(e){return btoa(String.fromCharCode(...new Uint8Array(await (await t).subtle.digest("SHA-256",new TextEncoder().encode(e))))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function e2(e){if(e||(e=43),e<43||e>128)throw`Expected a length between 43 and 128. Received ${e}.`;let t=await e0(e),r=await e1(t);return{code_verifier:t,code_challenge:r}}ev=new WeakMap,ek=new WeakMap,eS=new WeakMap,eE=new WeakMap,eI=new WeakMap,ex=new WeakMap,eA=new WeakMap,e_=new WeakMap,eC=new WeakMap,eR=new WeakMap,eT=new WeakMap,eD=new WeakMap,eN=new WeakMap,eO=new WeakSet,eP=function(){eW(this,ev,this.CONNECTING),eW(this,eC,new AbortController),eH(this,eI)(eH(this,ek),eJ(this,eO,eB).call(this)).then(eH(this,e$)).catch(eH(this,eU))},e$=new WeakMap,eU=new WeakMap,eB=function(){var e;let t={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...eH(this,e_)?{"Last-Event-ID":eH(this,e_)}:void 0},cache:"no-store",signal:null==(e=eH(this,eC))?void 0:e.signal};return"window"in globalThis&&(t.credentials=this.withCredentials?"include":"same-origin"),t},ej=new WeakMap,eL=new WeakMap,eq=function(e,t){var r;eH(this,ev)!==this.CLOSED&&eW(this,ev,this.CLOSED);let i=new ew("error",{code:t,message:e});null==(r=eH(this,eT))||r.call(this,i),this.dispatchEvent(i)},eM=function(e,t){var r;if(eH(this,ev)===this.CLOSED)return;eW(this,ev,this.CONNECTING);let i=new ew("error",{code:t,message:e});null==(r=eH(this,eT))||r.call(this,i),this.dispatchEvent(i),eW(this,eA,setTimeout(eH(this,eF),eH(this,ex)))},eF=new WeakMap,ez.CONNECTING=0,ez.OPEN=1,ez.CLOSED=2,t=globalThis.crypto?.webcrypto??globalThis.crypto??e.A(70729).then(e=>e.webcrypto);var e3=e.i(907855),e4=e.i(733137),e6=e.i(127438),e8=e.i(334512),e8=e8;let e5=e3.url().superRefine((e,t)=>{if(!URL.canParse(e))return t.addIssue({code:e4.ZodIssueCode.custom,message:"URL must be parseable",fatal:!0}),e6.NEVER}).refine(e=>{let t=new URL(e);return"javascript:"!==t.protocol&&"data:"!==t.protocol&&"vbscript:"!==t.protocol},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),e9=e3.looseObject({resource:e3.string().url(),authorization_servers:e3.array(e5).optional(),jwks_uri:e3.string().url().optional(),scopes_supported:e3.array(e3.string()).optional(),bearer_methods_supported:e3.array(e3.string()).optional(),resource_signing_alg_values_supported:e3.array(e3.string()).optional(),resource_name:e3.string().optional(),resource_documentation:e3.string().optional(),resource_policy_uri:e3.string().url().optional(),resource_tos_uri:e3.string().url().optional(),tls_client_certificate_bound_access_tokens:e3.boolean().optional(),authorization_details_types_supported:e3.array(e3.string()).optional(),dpop_signing_alg_values_supported:e3.array(e3.string()).optional(),dpop_bound_access_tokens_required:e3.boolean().optional()}),e7=e3.looseObject({issuer:e3.string(),authorization_endpoint:e5,token_endpoint:e5,registration_endpoint:e5.optional(),scopes_supported:e3.array(e3.string()).optional(),response_types_supported:e3.array(e3.string()),response_modes_supported:e3.array(e3.string()).optional(),grant_types_supported:e3.array(e3.string()).optional(),token_endpoint_auth_methods_supported:e3.array(e3.string()).optional(),token_endpoint_auth_signing_alg_values_supported:e3.array(e3.string()).optional(),service_documentation:e5.optional(),revocation_endpoint:e5.optional(),revocation_endpoint_auth_methods_supported:e3.array(e3.string()).optional(),revocation_endpoint_auth_signing_alg_values_supported:e3.array(e3.string()).optional(),introspection_endpoint:e3.string().optional(),introspection_endpoint_auth_methods_supported:e3.array(e3.string()).optional(),introspection_endpoint_auth_signing_alg_values_supported:e3.array(e3.string()).optional(),code_challenge_methods_supported:e3.array(e3.string()).optional(),client_id_metadata_document_supported:e3.boolean().optional()}),te=e3.looseObject({issuer:e3.string(),authorization_endpoint:e5,token_endpoint:e5,userinfo_endpoint:e5.optional(),jwks_uri:e5,registration_endpoint:e5.optional(),scopes_supported:e3.array(e3.string()).optional(),response_types_supported:e3.array(e3.string()),response_modes_supported:e3.array(e3.string()).optional(),grant_types_supported:e3.array(e3.string()).optional(),acr_values_supported:e3.array(e3.string()).optional(),subject_types_supported:e3.array(e3.string()),id_token_signing_alg_values_supported:e3.array(e3.string()),id_token_encryption_alg_values_supported:e3.array(e3.string()).optional(),id_token_encryption_enc_values_supported:e3.array(e3.string()).optional(),userinfo_signing_alg_values_supported:e3.array(e3.string()).optional(),userinfo_encryption_alg_values_supported:e3.array(e3.string()).optional(),userinfo_encryption_enc_values_supported:e3.array(e3.string()).optional(),request_object_signing_alg_values_supported:e3.array(e3.string()).optional(),request_object_encryption_alg_values_supported:e3.array(e3.string()).optional(),request_object_encryption_enc_values_supported:e3.array(e3.string()).optional(),token_endpoint_auth_methods_supported:e3.array(e3.string()).optional(),token_endpoint_auth_signing_alg_values_supported:e3.array(e3.string()).optional(),display_values_supported:e3.array(e3.string()).optional(),claim_types_supported:e3.array(e3.string()).optional(),claims_supported:e3.array(e3.string()).optional(),service_documentation:e3.string().optional(),claims_locales_supported:e3.array(e3.string()).optional(),ui_locales_supported:e3.array(e3.string()).optional(),claims_parameter_supported:e3.boolean().optional(),request_parameter_supported:e3.boolean().optional(),request_uri_parameter_supported:e3.boolean().optional(),require_request_uri_registration:e3.boolean().optional(),op_policy_uri:e5.optional(),op_tos_uri:e5.optional(),client_id_metadata_document_supported:e3.boolean().optional()}),tt=e3.object({...te.shape,...e7.pick({code_challenge_methods_supported:!0}).shape}),tr=e3.object({access_token:e3.string(),id_token:e3.string().optional(),token_type:e3.string(),expires_in:e8.number().optional(),scope:e3.string().optional(),refresh_token:e3.string().optional()}).strip(),ti=e3.object({error:e3.string(),error_description:e3.string().optional(),error_uri:e3.string().optional()}),ta=e5.optional().or(e3.literal("").transform(()=>void 0)),tn=e3.object({redirect_uris:e3.array(e5),token_endpoint_auth_method:e3.string().optional(),grant_types:e3.array(e3.string()).optional(),response_types:e3.array(e3.string()).optional(),client_name:e3.string().optional(),client_uri:e5.optional(),logo_uri:ta,scope:e3.string().optional(),contacts:e3.array(e3.string()).optional(),tos_uri:ta,policy_uri:e3.string().optional(),jwks_uri:e5.optional(),jwks:e3.any().optional(),software_id:e3.string().optional(),software_version:e3.string().optional(),software_statement:e3.string().optional()}).strip(),ts=e3.object({client_id:e3.string(),client_secret:e3.string().optional(),client_id_issued_at:e3.number().optional(),client_secret_expires_at:e3.number().optional()}).strip(),to=tn.merge(ts);e3.object({error:e3.string(),error_description:e3.string().optional()}).strip(),e3.object({token:e3.string(),token_type_hint:e3.string().optional()}).strip();class tl extends Error{constructor(e,t){super(e),this.errorUri=t,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}}class tu extends tl{}tu.errorCode="invalid_request";class tc extends tl{}tc.errorCode="invalid_client";class td extends tl{}td.errorCode="invalid_grant";class tp extends tl{}tp.errorCode="unauthorized_client";class th extends tl{}th.errorCode="unsupported_grant_type";class tm extends tl{}tm.errorCode="invalid_scope";class tf extends tl{}tf.errorCode="access_denied";class tg extends tl{}tg.errorCode="server_error";class ty extends tl{}ty.errorCode="temporarily_unavailable";class tw extends tl{}tw.errorCode="unsupported_response_type";class tb extends tl{}tb.errorCode="unsupported_token_type";class tv extends tl{}tv.errorCode="invalid_token";class tk extends tl{}tk.errorCode="method_not_allowed";class tS extends tl{}tS.errorCode="too_many_requests";class tE extends tl{}tE.errorCode="invalid_client_metadata";class tI extends tl{}tI.errorCode="insufficient_scope";class tx extends tl{}tx.errorCode="invalid_target";let tA={[tu.errorCode]:tu,[tc.errorCode]:tc,[td.errorCode]:td,[tp.errorCode]:tp,[th.errorCode]:th,[tm.errorCode]:tm,[tf.errorCode]:tf,[tg.errorCode]:tg,[ty.errorCode]:ty,[tw.errorCode]:tw,[tb.errorCode]:tb,[tv.errorCode]:tv,[tk.errorCode]:tk,[tS.errorCode]:tS,[tE.errorCode]:tE,[tI.errorCode]:tI,[tx.errorCode]:tx};class t_ extends Error{constructor(e){super(e??"Unauthorized")}}let tC="code",tR="S256";async function tT(e){let t=e instanceof Response?e.status:void 0,r=e instanceof Response?await e.text():e;try{let{error:e,error_description:t,error_uri:i}=ti.parse(JSON.parse(r));return new(tA[e]||tg)(t||"",i)}catch(e){return new tg(`${t?`HTTP ${t}: `:""}Invalid OAuth error response: ${e}. Raw body: ${r}`)}}async function tD(e,t){try{return await tN(e,t)}catch(r){if(r instanceof tc||r instanceof tp)return await e.invalidateCredentials?.("all"),await tN(e,t);if(r instanceof td)return await e.invalidateCredentials?.("tokens"),await tN(e,t);throw r}}async function tN(e,{serverUrl:t,authorizationCode:r,scope:i,resourceMetadataUrl:a,fetchFn:n}){let s,o,l,u=await e.discoveryState?.(),c=a;if(!c&&u?.resourceMetadataUrl&&(c=new URL(u.resourceMetadataUrl)),u?.authorizationServerUrl){if(o=u.authorizationServerUrl,s=u.resourceMetadata,l=u.authorizationServerMetadata??await tq(o,{fetchFn:n}),!s)try{s=await tU(t,{resourceMetadataUrl:c},n)}catch{}(l!==u.authorizationServerMetadata||s!==u.resourceMetadata)&&await e.saveDiscoveryState?.({authorizationServerUrl:String(o),resourceMetadataUrl:c?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}else{let r=await tM(t,{resourceMetadataUrl:c,fetchFn:n});o=r.authorizationServerUrl,l=r.authorizationServerMetadata,s=r.resourceMetadata,await e.saveDiscoveryState?.({authorizationServerUrl:String(o),resourceMetadataUrl:c?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}let d=await tO(t,e,s),p=i||s?.scopes_supported?.join(" ")||e.clientMetadata.scope,h=await Promise.resolve(e.clientInformation());if(!h){if(void 0!==r)throw Error("Existing OAuth client information is required when exchanging an authorization code");let t=l?.client_id_metadata_document_supported===!0,i=e.clientMetadataUrl;if(i&&!function(e){if(!e)return!1;try{let t=new URL(e);return"https:"===t.protocol&&"/"!==t.pathname}catch{return!1}}(i))throw new tE(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${i}`);if(t&&i)h={client_id:i},await e.saveClientInformation?.(h);else{if(!e.saveClientInformation)throw Error("OAuth client information must be saveable for dynamic registration");let t=await tG(o,{metadata:l,clientMetadata:e.clientMetadata,scope:p,fetchFn:n});await e.saveClientInformation(t),h=t}}let m=!e.redirectUrl;if(void 0!==r||m){let t=await tH(e,o,{metadata:l,resource:d,authorizationCode:r,fetchFn:n});return await e.saveTokens(t),"AUTHORIZED"}let f=await e.tokens();if(f?.refresh_token)try{let t=await tV(o,{metadata:l,clientInformation:h,refreshToken:f.refresh_token,resource:d,addClientAuthentication:e.addClientAuthentication,fetchFn:n});return await e.saveTokens(t),"AUTHORIZED"}catch(e){if(!(e instanceof tl)||e instanceof tg);else throw e}let g=e.state?await e.state():void 0,{authorizationUrl:y,codeVerifier:w}=await tF(o,{metadata:l,clientInformation:h,state:g,redirectUrl:e.redirectUrl,scope:p,resource:d});return await e.saveCodeVerifier(w),await e.redirectToAuthorization(y),"REDIRECT"}async function tO(e,t,r){let i,a=((i=new URL("string"==typeof e?e:e.href)).hash="",i);if(t.validateResourceURL)return await t.validateResourceURL(a,r?.resource);if(r){if(!function({requestedResource:e,configuredResource:t}){let r=new URL("string"==typeof e?e:e.href),i=new URL("string"==typeof t?t:t.href);if(r.origin!==i.origin||r.pathname.length<i.pathname.length)return!1;let a=r.pathname.endsWith("/")?r.pathname:r.pathname+"/",n=i.pathname.endsWith("/")?i.pathname:i.pathname+"/";return a.startsWith(n)}({requestedResource:a,configuredResource:r.resource}))throw Error(`Protected resource ${r.resource} does not match expected ${a} (or origin)`);return new URL(r.resource)}}function tP(e){let t,r=e.headers.get("WWW-Authenticate");if(!r)return{};let[i,a]=r.split(" ");if("bearer"!==i.toLowerCase()||!a)return{};let n=t$(e,"resource_metadata")||void 0;if(n)try{t=new URL(n)}catch{}return{resourceMetadataUrl:t,scope:t$(e,"scope")||void 0,error:t$(e,"error")||void 0}}function t$(e,t){let r=e.headers.get("WWW-Authenticate");if(!r)return null;let i=RegExp(`${t}=(?:"([^"]+)"|([^\\s,]+))`),a=r.match(i);return a?a[1]||a[2]:null}async function tU(e,t,r=fetch){let i=await tL(e,"oauth-protected-resource",r,{protocolVersion:t?.protocolVersion,metadataUrl:t?.resourceMetadataUrl});if(!i||404===i.status)throw await i?.body?.cancel(),Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!i.ok)throw await i.body?.cancel(),Error(`HTTP ${i.status} trying to load well-known OAuth protected resource metadata.`);return e9.parse(await i.json())}async function tB(e,t,r=fetch){try{return await r(e,{headers:t})}catch(i){if(i instanceof TypeError)if(t)return tB(e,void 0,r);else return;throw i}}async function tj(e,t,r=fetch){return await tB(e,{"MCP-Protocol-Version":t},r)}async function tL(e,t,r,i){var a,n;let s,o=new URL(e),l=i?.protocolVersion??v.LATEST_PROTOCOL_VERSION;i?.metadataUrl?s=new URL(i.metadataUrl):(s=new URL(function(e,t="",r={}){return t.endsWith("/")&&(t=t.slice(0,-1)),r.prependPathname?`${t}/.well-known/${e}`:`/.well-known/${e}${t}`}(t,o.pathname),i?.metadataServerUrl??o)).search=o.search;let u=await tj(s,l,r);if(!i?.metadataUrl&&(a=u,n=o.pathname,!a||a.status>=400&&a.status<500&&"/"!==n)){let e=new URL(`/.well-known/${t}`,o);u=await tj(e,l,r)}return u}async function tq(e,{fetchFn:t=fetch,protocolVersion:r=v.LATEST_PROTOCOL_VERSION}={}){let i={"MCP-Protocol-Version":r,Accept:"application/json"};for(let{url:r,type:a}of function(e){let t="string"==typeof e?new URL(e):e,r="/"!==t.pathname,i=[];if(!r)return i.push({url:new URL("/.well-known/oauth-authorization-server",t.origin),type:"oauth"}),i.push({url:new URL("/.well-known/openid-configuration",t.origin),type:"oidc"}),i;let a=t.pathname;return a.endsWith("/")&&(a=a.slice(0,-1)),i.push({url:new URL(`/.well-known/oauth-authorization-server${a}`,t.origin),type:"oauth"}),i.push({url:new URL(`/.well-known/openid-configuration${a}`,t.origin),type:"oidc"}),i.push({url:new URL(`${a}/.well-known/openid-configuration`,t.origin),type:"oidc"}),i}(e)){let e=await tB(r,i,t);if(e){if(!e.ok){if(await e.body?.cancel(),e.status>=400&&e.status<500)continue;throw Error(`HTTP ${e.status} trying to load ${"oauth"===a?"OAuth":"OpenID provider"} metadata from ${r}`)}if("oauth"===a)return e7.parse(await e.json());return tt.parse(await e.json())}}}async function tM(e,t){let r,i;try{(r=await tU(e,{resourceMetadataUrl:t?.resourceMetadataUrl},t?.fetchFn)).authorization_servers&&r.authorization_servers.length>0&&(i=r.authorization_servers[0])}catch{}i||(i=String(new URL("/",e)));let a=await tq(i,{fetchFn:t?.fetchFn});return{authorizationServerUrl:i,authorizationServerMetadata:a,resourceMetadata:r}}async function tF(e,{metadata:t,clientInformation:r,redirectUrl:i,scope:a,state:n,resource:s}){let o;if(t){if(o=new URL(t.authorization_endpoint),!t.response_types_supported.includes(tC))throw Error(`Incompatible auth server: does not support response type ${tC}`);if(t.code_challenge_methods_supported&&!t.code_challenge_methods_supported.includes(tR))throw Error(`Incompatible auth server: does not support code challenge method ${tR}`)}else o=new URL("/authorize",e);let l=await e2(),u=l.code_verifier,c=l.code_challenge;return o.searchParams.set("response_type",tC),o.searchParams.set("client_id",r.client_id),o.searchParams.set("code_challenge",c),o.searchParams.set("code_challenge_method",tR),o.searchParams.set("redirect_uri",String(i)),n&&o.searchParams.set("state",n),a&&o.searchParams.set("scope",a),a?.includes("offline_access")&&o.searchParams.append("prompt","consent"),s&&o.searchParams.set("resource",s.href),{authorizationUrl:o,codeVerifier:u}}async function tK(e,{metadata:t,tokenRequestParams:r,clientInformation:i,addClientAuthentication:a,resource:n,fetchFn:s}){var o,l;let u,c=t?.token_endpoint?new URL(t.token_endpoint):new URL("/token",e),d=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});n&&r.set("resource",n.href),a?await a(d,r,c,t):i&&function(e,t,r,i){let{client_id:a,client_secret:n}=t;switch(e){case"client_secret_basic":var s,o,l,u,c=a,d=n,p=r;if(!d)throw Error("client_secret_basic authentication requires a client_secret");let h=btoa(`${c}:${d}`);p.set("Authorization",`Basic ${h}`);return;case"client_secret_post":s=a,o=n,(l=i).set("client_id",s),o&&l.set("client_secret",o);return;case"none":u=a,i.set("client_id",u);return;default:throw Error(`Unsupported client authentication method: ${e}`)}}((o=i,l=t?.token_endpoint_auth_methods_supported??[],u=void 0!==o.client_secret,"token_endpoint_auth_method"in o&&o.token_endpoint_auth_method&&["client_secret_basic","client_secret_post","none"].includes(o.token_endpoint_auth_method)&&(0===l.length||l.includes(o.token_endpoint_auth_method))?o.token_endpoint_auth_method:0===l.length?u?"client_secret_basic":"none":u&&l.includes("client_secret_basic")?"client_secret_basic":u&&l.includes("client_secret_post")?"client_secret_post":l.includes("none")?"none":u?"client_secret_post":"none"),i,d,r);let p=await (s??fetch)(c,{method:"POST",headers:d,body:r});if(!p.ok)throw await tT(p);return tr.parse(await p.json())}async function tV(e,{metadata:t,clientInformation:r,refreshToken:i,resource:a,addClientAuthentication:n,fetchFn:s}){let o=new URLSearchParams({grant_type:"refresh_token",refresh_token:i});return{refresh_token:i,...await tK(e,{metadata:t,tokenRequestParams:o,clientInformation:r,addClientAuthentication:n,resource:a,fetchFn:s})}}async function tH(e,t,{metadata:r,resource:i,authorizationCode:a,fetchFn:n}={}){let s,o=e.clientMetadata.scope;if(e.prepareTokenRequest&&(s=await e.prepareTokenRequest(o)),!s){if(!a)throw Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!e.redirectUrl)throw Error("redirectUrl is required for authorization_code flow");s=new URLSearchParams({grant_type:"authorization_code",code:a,code_verifier:await e.codeVerifier(),redirect_uri:String(e.redirectUrl)})}return tK(t,{metadata:r,tokenRequestParams:s,clientInformation:await e.clientInformation()??void 0,addClientAuthentication:e.addClientAuthentication,resource:i,fetchFn:n})}async function tG(e,{metadata:t,clientMetadata:r,scope:i,fetchFn:a}){let n;if(t){if(!t.registration_endpoint)throw Error("Incompatible auth server: does not support dynamic client registration");n=new URL(t.registration_endpoint)}else n=new URL("/register",e);let s=await (a??fetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...r,...void 0!==i?{scope:i}:{}})});if(!s.ok)throw await tT(s);return to.parse(await s.json())}class tW extends Error{constructor(e,t,r){super(`SSE error: ${t}`),this.code=e,this.event=r}}class tJ{constructor(e,t){this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._eventSourceInit=t?.eventSourceInit,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=eY(t?.fetch,t?.requestInit)}async _authThenStart(){let e;if(!this._authProvider)throw new t_("No auth provider");try{e=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if("AUTHORIZED"!==e)throw new t_;return await this._startOrAuth()}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let t=eZ(this._requestInit?.headers);return new Headers({...e,...t})}_startOrAuth(){let e=this?._eventSourceInit?.fetch??this._fetch??fetch;return new Promise((t,r)=>{this._eventSource=new ez(this._url.href,{...this._eventSourceInit,fetch:async(t,r)=>{let i=await this._commonHeaders();i.set("Accept","text/event-stream");let a=await e(t,{...r,headers:i});if(401===a.status&&a.headers.has("www-authenticate")){let{resourceMetadataUrl:e,scope:t}=tP(a);this._resourceMetadataUrl=e,this._scope=t}return a}}),this._abortController=new AbortController,this._eventSource.onerror=e=>{if(401===e.code&&this._authProvider)return void this._authThenStart().then(t,r);let i=new tW(e.code,e.message,e);r(i),this.onerror?.(i)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",e=>{try{if(this._endpoint=new URL(e.data,this._url),this._endpoint.origin!==this._url.origin)throw Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(e){r(e),this.onerror?.(e),this.close();return}t()}),this._eventSource.onmessage=e=>{let t;try{t=v.JSONRPCMessageSchema.parse(JSON.parse(e.data))}catch(e){this.onerror?.(e);return}this.onmessage?.(t)}})}async start(){if(this._eventSource)throw Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth(e){if(!this._authProvider)throw new t_("No auth provider");if("AUTHORIZED"!==await tD(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit}))throw new t_("Failed to authorize")}async close(){this._abortController?.abort(),this._eventSource?.close(),this.onclose?.()}async send(e){if(!this._endpoint)throw Error("Not connected");try{let t=await this._commonHeaders();t.set("content-type","application/json");let r={...this._requestInit,method:"POST",headers:t,body:JSON.stringify(e),signal:this._abortController?.signal},i=await (this._fetch??fetch)(this._endpoint,r);if(!i.ok){let t=await i.text().catch(()=>null);if(401===i.status&&this._authProvider){let{resourceMetadataUrl:t,scope:r}=tP(i);this._resourceMetadataUrl=t,this._scope=r;let a=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit});if("AUTHORIZED"!==a)throw new t_;return this.send(e)}throw Error(`Error POSTing to endpoint (HTTP ${i.status}): ${t}`)}await i.body?.cancel()}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}}class tz extends TransformStream{constructor({onError:e,onRetry:t,onComment:r,maxBufferSize:i}={}){let a;super({start(n){a=ef({onEvent:e=>{n.enqueue(e)},onError(t){"function"==typeof e&&e(t),("terminate"===e||"max-buffer-size-exceeded"===t.type)&&n.error(t)},onRetry:t,onComment:r,maxBufferSize:i})},transform(e){a.feed(e)}})}}let tZ={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2};class tY extends Error{constructor(e,t){super(`Streamable HTTP error: ${t}`),this.code=e}}class tQ{constructor(e,t){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=eY(t?.fetch,t?.requestInit),this._sessionId=t?.sessionId,this._reconnectionOptions=t?.reconnectionOptions??tZ}async _authThenStart(){let e;if(!this._authProvider)throw new t_("No auth provider");try{e=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if("AUTHORIZED"!==e)throw new t_;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._sessionId&&(e["mcp-session-id"]=this._sessionId),this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let t=eZ(this._requestInit?.headers);return new Headers({...e,...t})}async _startOrAuthSse(e){let{resumptionToken:t}=e;try{let r=await this._commonHeaders();r.set("Accept","text/event-stream"),t&&r.set("last-event-id",t);let i=await (this._fetch??fetch)(this._url,{method:"GET",headers:r,signal:this._abortController?.signal});if(!i.ok){if(await i.body?.cancel(),401===i.status&&this._authProvider)return await this._authThenStart();if(405===i.status)return;throw new tY(i.status,`Failed to open SSE stream: ${i.statusText}`)}this._handleSseStream(i.body,e,!0)}catch(e){throw this.onerror?.(e),e}}_getNextReconnectionDelay(e){return void 0!==this._serverRetryMs?this._serverRetryMs:Math.min(this._reconnectionOptions.initialReconnectionDelay*Math.pow(this._reconnectionOptions.reconnectionDelayGrowFactor,e),this._reconnectionOptions.maxReconnectionDelay)}_scheduleReconnection(e,t=0){let r=this._reconnectionOptions.maxRetries;if(t>=r)return void this.onerror?.(Error(`Maximum reconnection attempts (${r}) exceeded.`));let i=this._getNextReconnectionDelay(t);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(r=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${r instanceof Error?r.message:String(r)}`)),this._scheduleReconnection(e,t+1)})},i)}_handleSseStream(e,t,r){let i;if(!e)return;let{onresumptiontoken:a,replayMessageId:n}=t,s=!1,o=!1;(async()=>{try{let t=e.pipeThrough(new TextDecoderStream).pipeThrough(new tz({onRetry:e=>{this._serverRetryMs=e}})).getReader();for(;;){let{value:e,done:r}=await t.read();if(r)break;if((e.id&&(i=e.id,s=!0,a?.(e.id)),e.data)&&(!e.event||"message"===e.event))try{let t=v.JSONRPCMessageSchema.parse(JSON.parse(e.data));(0,v.isJSONRPCResultResponse)(t)&&(o=!0,void 0!==n&&(t.id=n)),this.onmessage?.(t)}catch(e){this.onerror?.(e)}}(r||s)&&!o&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:i,onresumptiontoken:a,replayMessageId:n},0)}catch(e){if(this.onerror?.(Error(`SSE stream disconnected: ${e}`)),(r||s)&&!o&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:i,onresumptiontoken:a,replayMessageId:n},0)}catch(e){this.onerror?.(Error(`Failed to reconnect: ${e instanceof Error?e.message:String(e)}`))}}})()}async start(){if(this._abortController)throw Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new t_("No auth provider");if("AUTHORIZED"!==await tD(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit}))throw new t_("Failed to authorize")}async close(){this._reconnectionTimeout&&(clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=void 0),this._abortController?.abort(),this.onclose?.()}async send(e,t){try{let{resumptionToken:r,onresumptiontoken:i}=t||{};if(r)return void this._startOrAuthSse({resumptionToken:r,replayMessageId:(0,v.isJSONRPCRequest)(e)?e.id:void 0}).catch(e=>this.onerror?.(e));let a=await this._commonHeaders();a.set("content-type","application/json"),a.set("accept","application/json, text/event-stream");let n={...this._requestInit,method:"POST",headers:a,body:JSON.stringify(e),signal:this._abortController?.signal},s=await (this._fetch??fetch)(this._url,n),o=s.headers.get("mcp-session-id");if(o&&(this._sessionId=o),!s.ok){let t=await s.text().catch(()=>null);if(401===s.status&&this._authProvider){if(this._hasCompletedAuthFlow)throw new tY(401,"Server returned 401 after successful authentication");let{resourceMetadataUrl:t,scope:r}=tP(s);this._resourceMetadataUrl=t,this._scope=r;let i=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit});if("AUTHORIZED"!==i)throw new t_;return this._hasCompletedAuthFlow=!0,this.send(e)}if(403===s.status&&this._authProvider){let{resourceMetadataUrl:t,scope:r,error:i}=tP(s);if("insufficient_scope"===i){let i=s.headers.get("WWW-Authenticate");if(this._lastUpscopingHeader===i)throw new tY(403,"Server returned 403 after trying upscoping");r&&(this._scope=r),t&&(this._resourceMetadataUrl=t),this._lastUpscopingHeader=i??void 0;let a=await tD(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch});if("AUTHORIZED"!==a)throw new t_;return this.send(e)}}throw new tY(s.status,`Error POSTing to endpoint: ${t}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,202===s.status){await s.body?.cancel(),(0,v.isInitializedNotification)(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(e=>this.onerror?.(e));return}let l=(Array.isArray(e)?e:[e]).filter(e=>"method"in e&&"id"in e&&void 0!==e.id).length>0,u=s.headers.get("content-type");if(l)if(u?.includes("text/event-stream"))this._handleSseStream(s.body,{onresumptiontoken:i},!1);else if(u?.includes("application/json")){let e=await s.json();for(let t of Array.isArray(e)?e.map(e=>v.JSONRPCMessageSchema.parse(e)):[v.JSONRPCMessageSchema.parse(e)])this.onmessage?.(t)}else throw await s.body?.cancel(),new tY(-1,`Unexpected content type: ${u}`);else await s.body?.cancel()}catch(e){throw this.onerror?.(e),e}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),t={...this._requestInit,method:"DELETE",headers:e,signal:this._abortController?.signal},r=await (this._fetch??fetch)(this._url,t);if(await r.body?.cancel(),!r.ok&&405!==r.status)throw new tY(r.status,`Failed to terminate session: ${r.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,t){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:t?.onresumptiontoken})}}var tX=e.i(243783);e.i(582482);var t0=e.i(91022),t1=e.i(318905),t2=e.i(971619);function t3(e){if("string"!=typeof e)return e??null;try{return JSON.parse(e)}catch{return null}}function t4(e){return e instanceof Date?e.toISOString():"string"==typeof e&&Number.isFinite(Date.parse(e))?new Date(e).toISOString():null}function t6(e){let t;return{id:String(e.id),name:String(e.name),hostname:String(e.hostname),version:String(e.version),osVersion:String(e.osVersion),architecture:String(e.architecture),cpuModel:"string"==typeof e.cpuModel?e.cpuModel:null,memoryTotalBytes:"number"==typeof e.memoryTotalBytes?e.memoryTotalBytes:null,memoryFreeBytes:"number"==typeof e.memoryFreeBytes?e.memoryFreeBytes:null,diskTotalBytes:"number"==typeof e.diskTotalBytes?e.diskTotalBytes:null,diskFreeBytes:"number"==typeof e.diskFreeBytes?e.diskFreeBytes:null,capabilities:Array.isArray(e.capabilities)?e.capabilities:t3(e.capabilitiesJson)??[],baseRepoDirectory:"string"==typeof e.baseRepoDirectory?e.baseRepoDirectory:null,derivedDataLocationMode:String(e.derivedDataLocationMode),derivedDataPath:"string"==typeof e.derivedDataPath?e.derivedDataPath:null,buildsDirectory:"string"==typeof e.buildsDirectory?e.buildsDirectory:null,defaultBuildsDirectory:"string"==typeof e.defaultBuildsDirectory?e.defaultBuildsDirectory:null,effectiveBuildsDirectory:(0,t2.effectiveBuildsDirectory)(e),connectionStatus:null!==(t=t4(e.lastSeenAt))&&Date.now()-Date.parse(t)<=(0,a.agentOnlineWindowMs)(e)&&!e.disconnectedAt?"ONLINE":"OFFLINE",ipAddress:"string"==typeof e.ipAddress?e.ipAddress:null,lastSeenAt:t4(e.lastSeenAt),disconnectedAt:t4(e.disconnectedAt),createdAt:t4(e.createdAt),updatedAt:t4(e.updatedAt)}}function t8(e){let t=t6(e);return{agentId:t.id,baseRepoDirectory:t.baseRepoDirectory,buildsDirectory:t.buildsDirectory,defaultBuildsDirectory:t.defaultBuildsDirectory,effectiveBuildsDirectory:t.effectiveBuildsDirectory,derivedDataLocationMode:t.derivedDataLocationMode,derivedDataPath:t.derivedDataPath,updatedAt:t.updatedAt}}function t5(e){return{id:String(e.id),agentId:String(e.agentId),worktreeId:"string"==typeof e.worktreeId?e.worktreeId:null,codebaseId:"string"==typeof e.codebaseId?e.codebaseId:null,kind:String(e.kind),payload:t3(e.payload??e.payloadJson),status:String(e.status),idempotencyKey:String(e.idempotencyKey),result:t3(e.result??e.resultJson),error:"string"==typeof e.error?e.error:null,timeoutSeconds:Number(e.timeoutSeconds),createdAt:t4(e.createdAt),startedAt:t4(e.startedAt),finishedAt:t4(e.finishedAt),updatedAt:t4(e.updatedAt)}}function t9(e){return JSON.parse(JSON.stringify(e))}function t7(e){let t=e._count,r=e.versions;return{id:String(e.id),name:String(e.name),description:String(e.description??""),enabled:!0===e.enabled,overlapPolicy:String(e.overlapPolicy),maxConcurrentRuns:Number(e.maxConcurrentRuns),activeVersionId:"string"==typeof e.activeVersionId?e.activeVersionId:null,draftSchemaVersion:Number(e.draftSchemaVersion),quickActionKind:String(e.quickActionKind??"NONE"),archivedAt:t4(e.archivedAt),versionCount:t?.versions??r?.length??0,runCount:t?.runs??0,createdAt:t4(e.createdAt),updatedAt:t4(e.updatedAt)}}function re(e){return{id:String(e.id),workflowId:String(e.workflowId),version:Number(e.version),name:String(e.name),description:String(e.description??""),schemaVersion:Number(e.schemaVersion),contentHash:String(e.contentHash),definition:t3(e.definitionJson),publishedAt:t4(e.publishedAt)}}function rt(e){let t=e._count;return{id:String(e.id),displayNumber:Number(e.displayNumber),workflowId:String(e.workflowId),versionId:String(e.versionId),parentRunId:"string"==typeof e.parentRunId?e.parentRunId:null,triggerKind:String(e.triggerKind),triggerSubjectKey:String(e.triggerSubjectKey??""),triggerPayload:t3(e.triggerPayloadJson),status:String(e.status),phase:String(e.phase),generation:Number(e.generation),sessionData:t3(e.sessionDataJson),blockedReason:"string"==typeof e.blockedReason?e.blockedReason:null,error:"string"==typeof e.error?e.error:null,attemptCount:t?.attempts??e.attempts?.length??0,eventCount:t?.events??e.events?.length??0,queuedAt:t4(e.queuedAt),startedAt:t4(e.startedAt),pausedAt:t4(e.pausedAt),finishedAt:t4(e.finishedAt),updatedAt:t4(e.updatedAt)}}let rr=e3.object({}),ri=e3.object({id:e3.string(),name:e3.string(),hostname:e3.string(),version:e3.string(),osVersion:e3.string(),architecture:e3.string(),cpuModel:e3.string().nullable(),memoryTotalBytes:e3.number().nullable(),memoryFreeBytes:e3.number().nullable(),diskTotalBytes:e3.number().nullable(),diskFreeBytes:e3.number().nullable(),capabilities:e3.array(e3.string()),baseRepoDirectory:e3.string().nullable(),derivedDataLocationMode:e3.enum(["DEFAULT","ABSOLUTE","RELATIVE"]),derivedDataPath:e3.string().nullable(),buildsDirectory:e3.string().nullable(),defaultBuildsDirectory:e3.string().nullable(),effectiveBuildsDirectory:e3.string().nullable(),connectionStatus:e3.enum(["ONLINE","OFFLINE"]),ipAddress:e3.string().nullable(),lastSeenAt:e3.string().nullable(),disconnectedAt:e3.string().nullable(),createdAt:e3.string(),updatedAt:e3.string()}),ra=e3.object({agentId:e3.string(),baseRepoDirectory:e3.string().nullable(),buildsDirectory:e3.string().nullable(),defaultBuildsDirectory:e3.string().nullable(),effectiveBuildsDirectory:e3.string().nullable(),derivedDataLocationMode:e3.enum(["DEFAULT","ABSOLUTE","RELATIVE"]),derivedDataPath:e3.string().nullable(),updatedAt:e3.string()}),rn=e3.object({id:e3.string(),agentId:e3.string(),worktreeId:e3.string().nullable(),codebaseId:e3.string().nullable(),kind:e3.string(),payload:e3.unknown(),status:e3.string(),idempotencyKey:e3.string(),result:e3.unknown().nullable(),error:e3.string().nullable(),timeoutSeconds:e3.number().int(),createdAt:e3.string(),startedAt:e3.string().nullable(),finishedAt:e3.string().nullable(),updatedAt:e3.string()}),rs=e3.object({id:e3.string(),jobId:e3.string(),sequence:e3.number().int(),stream:e3.string(),message:e3.string(),createdAt:e3.string()}),ro=e3.object({agentId:e3.string().min(1)});var rl=e.i(190714);async function ru(e,t,r=[]){if(!e||"object"!=typeof e)throw Error(`Service for ${t} is unavailable`);let i=e[t];if("function"!=typeof i)throw Error(`Service operation ${t} is unavailable`);return Reflect.apply(i,e,r)}let rc=/^(?:credentialValue|enrollmentToken|privateKey|privateKeyPem|p12|p12Base64|apnsToken|token|nativeTranscript|nativeSession|nativeSessionFile|rawJson|secretHash|tokenHash)$/i;function rd(e){return e instanceof Date?e.toISOString():Array.isArray(e)?e.map(rd):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).filter(([e])=>!rc.test(e)).map(([e,t])=>[e,rd(t)])):e}function rp(e){let t=e.resultKey??"result";return i4({name:e.name,title:e.title,description:e.description,inputSchema:e.inputSchema,outputSchema:e3.object({[t]:e3.unknown()}),annotations:e.annotations??iQ,handler:async r=>{let i=await ru(e.service,e.method,e.arguments?.(r)??[r]);return{[t]:e.mapResult?e.mapResult(i):rd(i??null)}}})}let rh=e3.object({});var rm=e.i(184015);let rf=e3.object({}),rg=e3.object({settings:e3.object({refreshIntervalSeconds:e3.number().int(),fetchIntervalSeconds:e3.number().int(),defaultJiraBranchRegex:e3.string(),updatedAt:e3.string()})}),ry=e3.object({agentId:e3.string().min(1),path:e3.string().nullable().default(null),requestId:e3.string().min(1)}),rw=e3.object({listing:e3.unknown()}),rb=e3.object({agentId:e3.string().min(1),folder:e3.string().min(1),requestId:e3.string().min(1)}),rv=e3.object({inspection:e3.unknown()}),rk=e3.object({codebaseIds:e3.array(e3.string().min(1)).min(1).max(500),requestId:e3.string().min(1)}),rS=e3.object({jobs:e3.array(e3.unknown()),skipped:e3.array(e3.object({codebaseId:e3.string(),reason:e3.string()}))}),rE=e3.object({codebaseId:e3.string().min(1),requestId:e3.string().min(1)}),rI=e3.object({state:e3.unknown()}),rx=e3.object({codebaseId:e3.string().min(1),stashOid:e3.string().regex(/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/i),requestId:e3.string().min(1)}),rA=e3.object({diff:e3.unknown()});e.i(282790);var r_=e.i(474170);function rC(e){return e instanceof Date?e.toISOString():null}function rR(e){if("string"!=typeof e)return e??null;try{return JSON.parse(e)}catch{return null}}let rT=e3.object({id:e3.string(),clientRegistrationId:e3.string(),tokenMasked:e3.string(),topic:e3.string(),environment:e3.string(),supportedPushTypes:e3.array(e3.string()),displayName:e3.string(),deviceModel:e3.string().nullable(),osVersion:e3.string().nullable(),appVersion:e3.string().nullable(),appBuild:e3.string().nullable(),locale:e3.string().nullable(),pushMagicConfigured:e3.boolean(),status:e3.string(),invalidatedAt:e3.string().nullable(),lastFailureReason:e3.string().nullable(),lastFailureAt:e3.string().nullable(),lastRegisteredAt:e3.string(),lastSentAt:e3.string().nullable(),createdAt:e3.string(),updatedAt:e3.string()}),rD=e3.object({id:e3.string(),name:e3.string(),topic:e3.string(),environment:e3.string(),fingerprint:e3.string(),expiresAt:e3.string().nullable(),lastTestedAt:e3.string().nullable(),lastError:e3.string().nullable(),createdAt:e3.string(),updatedAt:e3.string()}),rN=e3.object({tokenConfigured:e3.boolean(),tokenTeamId:e3.string().nullable(),tokenKeyId:e3.string().nullable(),tokenPrivateKeyFingerprint:e3.string().nullable(),tokenConfiguredAt:e3.string().nullable(),tokenLastUsedAt:e3.string().nullable(),tokenLastError:e3.string().nullable(),certificates:e3.array(rD),updatedAt:e3.string()}),rO=e3.object({id:e3.string(),channelId:e3.string(),bundleId:e3.string(),environment:e3.string(),storagePolicy:e3.string(),createdAt:e3.string(),updatedAt:e3.string()}),rP=e3.object({id:e3.string(),name:e3.string(),editor:e3.unknown(),createdAt:e3.string(),updatedAt:e3.string()}),r$=e3.object({id:e3.string(),registrationId:e3.string().nullable(),topic:e3.string(),environment:e3.string(),status:e3.string(),apnsId:e3.string().nullable(),responseCode:e3.number().int().nullable(),reason:e3.string().nullable(),responseTimestamp:e3.string().nullable(),attempts:e3.number().int(),durationMs:e3.number().int().nullable(),createdAt:e3.string(),startedAt:e3.string().nullable(),finishedAt:e3.string().nullable()}),rU=e3.object({id:e3.string(),requestId:e3.string(),status:e3.string(),editor:e3.unknown(),payload:e3.unknown(),headers:e3.unknown(),targetMode:e3.string(),channelId:e3.string().nullable(),recipientCount:e3.number().int(),successCount:e3.number().int(),failureCount:e3.number().int(),error:e3.string().nullable(),createdAt:e3.string(),startedAt:e3.string().nullable(),finishedAt:e3.string().nullable(),updatedAt:e3.string(),deliveries:e3.array(r$)});function rB(e){return{id:String(e.id),requestId:String(e.requestId),status:String(e.status),editor:rR(e.editor??e.editorJson),payload:rR(e.payload??e.payloadJson),headers:rR(e.headers??e.headersJson),targetMode:String(e.targetMode),channelId:"string"==typeof e.channelId?e.channelId:null,recipientCount:Number(e.recipientCount),successCount:Number(e.successCount),failureCount:Number(e.failureCount),error:"string"==typeof e.error?e.error:null,createdAt:rC(e.createdAt),startedAt:rC(e.startedAt),finishedAt:rC(e.finishedAt),updatedAt:rC(e.updatedAt),deliveries:Array.isArray(e.deliveries)?e.deliveries.map(e=>({id:String(e.id),registrationId:"string"==typeof e.registrationId?e.registrationId:null,topic:String(e.topic),environment:String(e.environment),status:String(e.status),apnsId:"string"==typeof e.apnsId?e.apnsId:null,responseCode:"number"==typeof e.responseCode?e.responseCode:null,reason:"string"==typeof e.reason?e.reason:null,responseTimestamp:rC(e.responseTimestamp),attempts:Number(e.attempts),durationMs:"number"==typeof e.durationMs?e.durationMs:null,createdAt:rC(e.createdAt),startedAt:rC(e.startedAt),finishedAt:rC(e.finishedAt)})):[]}}let rj={requestId:e3.string().min(1),editor:e3.record(e3.string(),e3.unknown())},rL={requestId:e3.string().min(1),presetId:e3.string().min(1)},rq=e3.discriminatedUnion("targetMode",[e3.object({...rj,targetMode:e3.literal("DEVICES"),registrationIds:e3.array(e3.string().min(1)).min(1)}),e3.object({...rj,targetMode:e3.literal("ALL")}),e3.object({...rj,targetMode:e3.literal("BROADCAST"),channelId:e3.string().min(1)}),e3.object({...rj,targetMode:e3.literal("DIRECT"),directToken:e3.string().min(1),directTokenEncoding:e3.enum(["HEX","BASE64"]).default("HEX"),directEnvironment:e3.enum(["SANDBOX","PRODUCTION"]).default("SANDBOX")})]),rM=e3.discriminatedUnion("targetMode",[e3.object({...rL,targetMode:e3.literal("DEVICES"),registrationIds:e3.array(e3.string().min(1)).min(1)}),e3.object({...rL,targetMode:e3.literal("ALL")}),e3.object({...rL,targetMode:e3.literal("BROADCAST"),channelId:e3.string().min(1)}),e3.object({...rL,targetMode:e3.literal("DIRECT"),directToken:e3.string().min(1),directTokenEncoding:e3.enum(["HEX","BASE64"]).default("HEX"),directEnvironment:e3.enum(["SANDBOX","PRODUCTION"]).default("SANDBOX")})]);function rF(e){return{requestId:e.requestId,editor:e.editor,targetMode:e.targetMode,registrationIds:"DEVICES"===e.targetMode?e.registrationIds:void 0,channelId:"BROADCAST"===e.targetMode?e.channelId:void 0,directToken:"DIRECT"===e.targetMode?e.directToken:void 0,directTokenEncoding:"DIRECT"===e.targetMode?e.directTokenEncoding:void 0,directEnvironment:"DIRECT"===e.targetMode?e.directEnvironment:void 0}}let rK=e3.object({id:e3.string(),entryType:e3.enum(["CONSOLE","ANALYTICS","SEPARATOR"]),clientTime:e3.string(),receivedAt:e3.string(),deviceIp:e3.string().nullable(),message:e3.string().nullable(),level:e3.string().nullable(),category:e3.string().nullable(),eventName:e3.string().nullable(),eventKind:e3.string().nullable(),screenName:e3.string().nullable(),buildId:e3.string().nullable(),sessionId:e3.string().nullable(),attributes:e3.record(e3.string(),e3.unknown()),defaultParameters:e3.record(e3.string(),e3.unknown()),additionalParameters:e3.record(e3.string(),e3.unknown()),highlightColor:e3.string().nullable(),separatorKind:e3.string().nullable(),separatorName:e3.string().nullable()}),rV=e3.object({items:e3.array(rK),nextCursor:e3.string().nullable(),matchingCount:e3.number().int().nonnegative(),totalCount:e3.number().int().nonnegative()}),rH=rV.extend({separator:rK.nullable()}),rG=e3.object({first:e3.number().int().min(1).max(500).default(200),after:e3.string().nullable().default(null)}),rW=e3.object({field:e3.string().min(1),operator:e3.enum(["CONTAINS","DOES_NOT_CONTAIN","IS","IS_NOT","MATCHES_GLOB","MATCHES_REGEX","NO_REGEX_MATCH","IS_EMPTY","IS_NOT_EMPTY"]),value:e3.string().nullable().optional(),caseSensitive:e3.boolean().default(!1),sources:e3.array(e3.enum(["CONSOLE","ANALYTICS"])).optional()}),rJ=e3.object({mode:e3.enum(["ALL","ANY"]),conditions:e3.array(rW).min(1).max(100)}),rz={search:e3.string().min(1).nullable().optional(),searchMode:e3.enum(["TEXT","GLOB","REGEX"]).default("TEXT"),caseSensitive:e3.boolean().default(!1),quickFilters:e3.record(e3.string(),e3.array(e3.string()).max(500)).nullable().optional(),advancedFilter:rJ.nullable().optional()},rZ=rG.extend(rz).refine(r0,{message:"At least one telemetry search filter is required"}),rY=rG.extend(rz),rQ=e3.object({scope:e3.literal("MATCHING"),...rz}).refine(r0,{message:"At least one telemetry search filter is required"}),rX=e3.union([e3.object({scope:e3.literal("IDS"),ids:e3.array(e3.string().min(1)).min(1).max(1e3)}),rQ,e3.object({scope:e3.literal("ALL"),includeSeparators:e3.boolean().default(!1)}),e3.object({scope:e3.literal("BEFORE_LATEST_SEPARATOR"),includeSeparators:e3.boolean().default(!1)})]);function r0(e){return!!(e.search||Object.values(e.quickFilters??{}).some(e=>e.length)||e.advancedFilter?.conditions.length)}function r1(e,t){return{view:e,first:t.first,after:t.after,search:t.search,searchMode:t.searchMode??"TEXT",caseSensitive:t.caseSensitive??!1,quickFilters:t.quickFilters,advancedFilter:t.advancedFilter}}function r2(e,t,r){return[i4({name:`get_${r.plural}`,title:`Get ${r.label}`,description:`Fetch the newest ${r.label.toLocaleLowerCase()} with cursor pagination.`,inputSchema:rG,outputSchema:rV,annotations:iQ,handler:r=>e.timeline(r1(t,r))}),i4({name:`get_${r.singular}`,title:`Get ${r.singular.replaceAll("_"," ")}`,description:`Fetch one ${r.label.toLocaleLowerCase()} item by ID.`,inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({entry:rK.nullable()}),annotations:iQ,handler:async({id:r})=>({entry:await e.entry(r,t)})}),i4({name:`search_${r.plural}`,title:`Search ${r.label}`,description:"Search with text, glob, regex, quick facets, or advanced filter conditions.",inputSchema:rZ,outputSchema:rV,annotations:iQ,handler:r=>e.timeline(r1(t,r))}),i4({name:`get_${r.plural}_since_latest_separator`,title:`Get ${r.label} since latest separator`,description:"Fetch entries strictly newer than the latest global telemetry separator.",inputSchema:rY,outputSchema:rH,annotations:iQ,handler:r=>e.timelineSinceLatestSeparator(r1(t,r))}),i4({name:`get_${r.singular}_search_metadata`,title:`Get ${r.label} search metadata`,description:"Get searchable fields and current facet values.",inputSchema:e3.object({}),outputSchema:e3.object({fields:e3.array(e3.string()),facets:e3.record(e3.string(),e3.array(e3.string()))}),annotations:iQ,handler:async()=>{let[r,i]=await Promise.all([e.fields(t),e.facets(t)]);return{fields:r,facets:i}}}),i4({name:`clear_${r.plural}`,title:`Clear ${r.label}`,description:"Clear explicit IDs, matching entries, all entries, or entries before the latest separator.",inputSchema:rX,outputSchema:e3.object({view:e3.enum(["CONSOLE","ANALYTICS","UNIFIED"]),scope:e3.enum(["IDS","MATCHING","ALL","BEFORE_LATEST_SEPARATOR"]),deletedCount:e3.number().int().nonnegative()}),annotations:i0,handler:async r=>{let i="MATCHING"===r.scope?r:null,a=await e.clearScoped({view:t,scope:r.scope,ids:"IDS"===r.scope?r.ids:null,includeSeparators:("ALL"===r.scope||"BEFORE_LATEST_SEPARATOR"===r.scope)&&r.includeSeparators,query:i?{search:i.search,searchMode:i.searchMode,caseSensitive:i.caseSensitive,quickFilters:i.quickFilters,advancedFilter:i.advancedFilter}:null});return{view:t,scope:r.scope,deletedCount:a}}})]}var r3=e.i(885418),r4=e.i(586589),r6=e.i(661983),r8=e.i(504173),r5=e.i(518733);function r9(e,t,r=null){let i=[...t.volumes].filter(e=>e.monitored).sort((e,t)=>e.freeBytes-t.freeBytes||e.id.localeCompare(t.id))[0],n=i&&i.totalBytes>0?i.freeBytes/i.totalBytes*100:null,s=null===t.agent.disconnectedAt&&null!==t.agent.lastSeenAt&&Date.now()-t.agent.lastSeenAt.getTime()<=(0,a.agentOnlineWindowMs)(t.agent);return{agent:{id:t.agent.id,name:t.agent.name,hostname:t.agent.hostname,connected:s,diskTotalBytes:t.agent.diskTotalBytes,diskFreeBytes:t.agent.diskFreeBytes},codebase:{agentId:t.agent.id},disk:{enabled:t.enabled,status:t.status,pressureMode:t.pressureMode,manualPressureMode:t.manualPressureMode,automaticPressureMode:t.automaticPressureMode,lastReportedAt:t.lastReportedAt,lastError:t.lastError,warnings:[...t.warnings],monitoredVolumeId:i?.id??null,freeBytes:i?.freeBytes??null,totalBytes:i?.totalBytes??null,freeGiB:i?i.freeBytes/0x40000000:null,freePercent:n,usedPercent:null===n?null:100-n,effectiveThresholdBytes:i?.effectiveThresholdBytes??null,normalThresholdGiB:e.normalThresholdGiB,pressureThresholdGiB:e.pressureThresholdGiB,pollIntervalSeconds:e.pollIntervalSeconds,staleAfterSeconds:e.staleAfterSeconds,changeReason:r,volumes:t.volumes.map(e=>({...e}))}}}function r7(e){return{enabled:e.disk.enabled,status:e.disk.status,pressureMode:e.disk.pressureMode,lastError:e.disk.lastError,warnings:e.disk.warnings,monitoredVolumeId:e.disk.monitoredVolumeId}}function ie(e){try{let t=JSON.parse(e??"[]");return Array.isArray(t)?t:[]}catch{return[]}}function it(e,t){if(!Number.isFinite(e)||e<=0||e>1e6)throw Error(`${t} must be a positive finite GiB value`);return e}class ir{agentControl;constructor(e){this.agentControl=e,this.agentControl.registerCompletionObserver(e=>this.observeCompletion(e))}async settings(){let e=await (0,tX.getPrismaClient)(),t=await e.diskSpaceSettings.upsert({where:{id:"default"},create:{id:"default",normalThresholdGiB:r4.DEFAULT_DISK_SPACE_THRESHOLD_GIB,pressureThresholdGiB:r4.DEFAULT_DISK_SPACE_PRESSURE_THRESHOLD_GIB},update:{}});return{normalThresholdGiB:t.normalThresholdGiB,pressureThresholdGiB:t.pressureThresholdGiB,pollIntervalSeconds:r4.DISK_SPACE_POLL_INTERVAL_SECONDS,staleAfterSeconds:r4.DISK_SPACE_STALE_AFTER_SECONDS}}async updateSettings(e){let t=it(e.normalThresholdGiB,"Normal disk threshold"),r=it(e.pressureThresholdGiB,"Pressure disk threshold");if(r>=t)throw Error("Pressure disk threshold must be lower than the normal threshold");let i=await (0,tX.getPrismaClient)();for(let{agentId:e}of(await i.diskSpaceSettings.upsert({where:{id:"default"},create:{id:"default",normalThresholdGiB:t,pressureThresholdGiB:r},update:{normalThresholdGiB:t,pressureThresholdGiB:r}}),this.publish("settings","SETTINGS_UPDATED"),await i.agentDiskSpaceState.findMany({where:{enabled:!0},select:{agentId:!0}})))this.reconcileAgent(e);return this.settings()}async configuration(e){let t=await (0,tX.getPrismaClient)(),[r,i,a]=await Promise.all([t.agent.findUnique({where:{id:e}}),t.agentDiskSpaceState.findUnique({where:{agentId:e}}),t.worktree.findMany({where:{missingAt:null,codebase:{agentId:e}},select:{id:!0,folder:!0}})]);if(!r)throw Error("Agent not found");return{enabled:i?.enabled??!0,pollIntervalSeconds:r4.DISK_SPACE_POLL_INTERVAL_SECONDS,baseRepoDirectory:r.baseRepoDirectory,derivedDataLocationMode:r.derivedDataLocationMode,derivedDataPath:r.derivedDataPath,worktrees:a}}async report(e,t){let r=(0,r4.parseAgentDiskSpaceReport)(t),i=await (0,tX.getPrismaClient)(),[a,n]=await Promise.all([i.agent.findUnique({where:{id:e}}),i.worktree.findMany({where:{missingAt:null,codebase:{agentId:e}},include:{codebase:{select:{agentId:!0}}}})]);if(!a)throw Error("Agent not found");let s=new Date(r.observedAt),o=r.entries.map(e=>{let t=e.workspacePath?n.filter(t=>{var r,i;let a;return r=t.folder,i=e.workspacePath,i===(a="/"===r?r:r.replace(/\/+$/,""))||i.startsWith(`${a}/`)}).sort((e,t)=>t.folder.length-e.folder.length)[0]:null;return{...e,worktreeId:t?.id??null,worktreePath:t?(0,r8.worktreeDisplayPath)(t.folder,a.baseRepoDirectory):null}});await i.agentDiskSpaceState.upsert({where:{agentId:e},create:{agentId:e,volumesJson:JSON.stringify(r.volumes),entriesJson:JSON.stringify(o),warningsJson:JSON.stringify(r.warnings),lastReportedAt:s,lastError:null},update:{volumesJson:JSON.stringify(r.volumes),entriesJson:JSON.stringify(o),warningsJson:JSON.stringify(r.warnings),lastReportedAt:s,lastError:null}}),this.publish(e,"REPORT_RECEIVED"),this.reconcileAgent(e)}async overview(){let e=await (0,tX.getPrismaClient)();await e.derivedDataCleanupLease.deleteMany({where:{jobId:null,expiresAt:{lte:new Date}}});let[t,r,i]=await Promise.all([this.settings(),e.agent.findMany({orderBy:{name:"asc"},include:{diskSpaceState:!0}}),e.derivedDataCleanupLease.findMany({select:{agentId:!0}})]),a=new Set(i.map(e=>e.agentId));return{settings:t,agents:r.map(e=>{let r=e.diskSpaceState,i=r?.enabled??!0,n=r?.manualPressureMode??!1,s=r?.automaticPressureMode??!1,o=r?.lastReportedAt??null,l=!o||Date.now()-o.getTime()>1e3*t.staleAfterSeconds,u=(n||s?t.pressureThresholdGiB:t.normalThresholdGiB)*0x40000000,c=ie(r?.volumesJson),d=(0,r4.monitoredDiskSpaceVolumes)(c),p=d.some(e=>e.freeBytes<=0x40000000*t.pressureThresholdGiB),h=d.some(e=>e.freeBytes<u),m="IDLE";i?l?m="STALE":r?.lastError||0===c.length&&ie(r?.warningsJson).length>0?m="ERROR":p?m="CRITICAL":a.has(e.id)?m="DELETING":n||s?m="PRESSURE":h&&(m="CLEANUP_REQUIRED"):m="DISABLED";let f=c.map(r=>{let o=(0,r4.isMonitoredDiskSpaceVolume)(r);return{...r,effectiveThresholdBytes:u,monitored:o,status:i?l?"STALE":o?r.freeBytes<=0x40000000*t.pressureThresholdGiB?"CRITICAL":a.has(e.id)&&r.freeBytes<u?"DELETING":n||s?"PRESSURE":r.freeBytes<u?"CLEANUP_REQUIRED":"IDLE":"IDLE":"DISABLED"}}),g=ie(r?.warningsJson);return i&&!l&&c.length>0&&0===d.length&&g.push("No Derived Data volume was reported, so free space is not being monitored for this agent"),{agent:e,enabled:i,status:m,pressureMode:n?"MANUAL":s?"AUTOMATIC":"NORMAL",manualPressureMode:n,automaticPressureMode:s,lastReportedAt:o?.toISOString()??null,lastError:r?.lastError??null,warnings:g,volumes:f}})}}async agentView(e){let t=(await this.overview()).agents.find(t=>t.agent.id===e);if(!t)throw Error("Agent not found");return t}async snapshot(e,t=null){let r=await this.overview(),i=r.agents.find(t=>t.agent.id===e);if(!i)throw Error("Agent not found");return r9(r.settings,i,t)}async requestRefresh(e){let t=await this.agentView(e);if(!t.enabled)throw Error("Disk-space monitoring is disabled for this agent");let r=new Date().toISOString();return this.agentControl.requestDiskSpacePoll(e),{agentId:e,requestedAt:r,previousReportedAt:t.lastReportedAt}}async setMonitoring(e,t){let r=await (0,tX.getPrismaClient)();return await r.agent.findUniqueOrThrow({where:{id:e}}),await r.agentDiskSpaceState.upsert({where:{agentId:e},create:{agentId:e,enabled:t},update:{enabled:t,...!t?{manualPressureMode:!1,automaticPressureMode:!1}:{}}}),t||await r.derivedDataCleanupLease.deleteMany({where:{agentId:e,jobId:null}}),this.publish(e,"MONITORING_CHANGED"),this.agentControl.requestAgentConfigurationRefresh(e),this.agentView(e)}async setManualPressureMode(e,t){let r=await (0,tX.getPrismaClient)();return await r.agent.findUniqueOrThrow({where:{id:e}}),await r.agentDiskSpaceState.upsert({where:{agentId:e},create:{agentId:e,manualPressureMode:t},update:{manualPressureMode:t}}),this.publish(e,"MANUAL_PRESSURE_CHANGED"),this.reconcileAgent(e),this.agentView(e)}async assertWorktreeCanStart(e){let t=await (0,tX.getPrismaClient)();await t.derivedDataCleanupLease.deleteMany({where:{worktreeId:e,jobId:null,expiresAt:{lte:new Date}}});let[r,i]=await Promise.all([t.derivedDataCleanupLease.findUnique({where:{worktreeId:e}}),t.worktree.findUnique({where:{id:e},select:{codebase:{select:{agentId:!0}}}})]);if(r)throw Error("Derived Data cleanup is in progress for this worktree; try again shortly");i&&await this.assertAgentCanStart(i.codebase.agentId)}async assertAgentCanStart(e){let t=await (0,tX.getPrismaClient)(),[r,i]=await Promise.all([this.settings(),t.agentDiskSpaceState.findUnique({where:{agentId:e}})]);if(!(!i?.enabled||!i.lastReportedAt||i.lastError||Date.now()-i.lastReportedAt.getTime()>1e3*r.staleAfterSeconds)&&(0,r4.monitoredDiskSpaceVolumes)(ie(i.volumesJson)).some(e=>e.freeBytes<=0x40000000*r.pressureThresholdGiB))throw Error(`New builds, plans, and sessions are paused because this agent has ${r.pressureThresholdGiB} GiB or less free disk space`)}subscribe(){return r6.agentEventBus.iterate(r6.DISK_SPACE_CHANGED_TOPIC)}async reconcileAgent(e){let t=await (0,tX.getPrismaClient)();await t.derivedDataCleanupLease.deleteMany({where:{jobId:null,expiresAt:{lte:new Date}}});let[r,i,n,s,o]=await Promise.all([this.settings(),t.agentDiskSpaceState.findUnique({where:{agentId:e}}),t.derivedDataLock.findMany({where:{agentId:e},select:{path:!0}}),t.derivedDataCleanupLease.findFirst({where:{agentId:e}}),t.agent.findUnique({where:{id:e}})]);if(!i?.enabled||!i.lastReportedAt||i.lastError||s||!o||null!==o.disconnectedAt||null===o.lastSeenAt||Date.now()-o.lastSeenAt.getTime()>(0,a.agentOnlineWindowMs)(o)||!ie(o.capabilitiesJson).includes(r3.BUILD_DATA_DELETE_JOB_KIND)||Date.now()-i.lastReportedAt.getTime()>1e3*r.staleAfterSeconds)return;let l=ie(i.entriesJson),u=ie(i.volumesJson),c=(0,r4.monitoredDiskSpaceVolumes)(u),d=l.map(e=>e.worktreeId).filter(e=>!!e),p=await (0,r5.executingResourcesByWorktree)(d),h=new Set(n.map(e=>e.path));l=l.filter(e=>"PROJECT"===e.kind&&!!e.worktreeId&&!h.has(e.path)&&(p.get(e.worktreeId)?.length??0)===0);let m=0x40000000*r.normalThresholdGiB,f=0x40000000*r.pressureThresholdGiB,g=c.filter(e=>e.freeBytes<m),w=e=>e.capacityId??e.id,b=new Map(u.map(e=>[e.id,w(e)])),v=e=>l.some(t=>b.get(t.volumeId)===w(e)),k=i.automaticPressureMode;if(!i.manualPressureMode){let r=g.length>0&&g.some(e=>!v(e)),a=k&&(0===g.length||g.every(e=>v(e)));r?k=!0:a&&(k=!1),k!==i.automaticPressureMode&&(await t.agentDiskSpaceState.update({where:{agentId:e},data:{automaticPressureMode:k}}),this.publish(e,"AUTOMATIC_PRESSURE_CHANGED"))}let S=i.manualPressureMode||k?f:m,E=new Set(c.filter(e=>e.freeBytes<S).map(w)),I=l.filter(e=>E.has(b.get(e.volumeId)??"")).sort((e,t)=>new Date(e.modifiedAt).getTime()-new Date(t.modifiedAt).getTime()||e.path.localeCompare(t.path))[0];if(!I?.worktreeId)return;try{await t.derivedDataCleanupLease.create({data:{worktreeId:I.worktreeId,agentId:e,path:I.path,source:"AUTOMATIC",expiresAt:new Date(Date.now()+6e5)}})}catch{return}let x=await (0,r5.executingResourcesByWorktree)([I.worktreeId]);if((x.get(I.worktreeId)?.length??0)>0){await t.derivedDataCleanupLease.deleteMany({where:{worktreeId:I.worktreeId,jobId:null}}),this.publish(e,"CLEANUP_SKIPPED");return}try{var A;let r=await this.agentControl.createJob({agentId:e,kind:r3.BUILD_DATA_DELETE_JOB_KIND,payload:{source:"AUTOMATIC",targets:[{path:I.path,rootPath:I.rootPath,name:I.name,kind:I.kind,worktreeId:I.worktreeId,worktreePath:I.worktreePath}]},idempotencyKey:`disk-space:auto:${(A=I.path,(0,y.createHash)("sha256").update(e).update("\0").update(A).digest("base64url"))}:${(0,y.randomUUID)()}`,timeoutSeconds:600,visibility:"SYSTEM"});await t.derivedDataCleanupLease.update({where:{worktreeId:I.worktreeId},data:{jobId:r.id}}),this.publish(e,"CLEANUP_STARTED")}catch(r){await t.derivedDataCleanupLease.deleteMany({where:{worktreeId:I.worktreeId}}),await t.agentDiskSpaceState.update({where:{agentId:e},data:{lastError:r instanceof Error?r.message:String(r)}}),this.publish(e,"CLEANUP_START_FAILED")}}async observeCompletion(e){if(e.kind!==r3.BUILD_DATA_DELETE_JOB_KIND)return;let t="USER",r=[];try{let i=(0,r3.buildDataDeletePayload)(JSON.parse(e.payloadJson));t=i.source,r=i.targets}catch{}let i=await (0,tX.getPrismaClient)(),a=await i.derivedDataCleanupLease.deleteMany({where:{jobId:e.id}});if("AUTOMATIC"===t&&"SUCCEEDED"!==e.status&&await i.agentDiskSpaceState.updateMany({where:{agentId:e.agentId},data:{lastError:e.error||"Automatic Derived Data cleanup failed"}}),a.count||"AUTOMATIC"===t){let i=[];if("AUTOMATIC"===t&&e.resultJson)try{i=(0,r3.parseBuildDataDeleteResult)(JSON.parse(e.resultJson)).deleted}catch{}this.publish(e.agentId,"CLEANUP_COMPLETED","AUTOMATIC"===t?{jobId:e.id,status:e.status,source:t,error:e.error,targets:r,deleted:i}:null),this.agentControl.requestDiskSpacePoll(e.agentId)}}publish(e,t,r=null){r6.agentEventBus.publish(r6.DISK_SPACE_CHANGED_TOPIC,{diskSpaceChanged:e,diskSpaceChange:{id:(0,y.randomUUID)(),reason:t,cleanup:r}}),r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0}),r6.agentEventBus.publish(r6.POLLING_CHANGED_TOPIC,{pollingOperationChanged:`agent-disk-space:${e}`})}}let ii=e3.object({normalThresholdGiB:e3.number(),pressureThresholdGiB:e3.number(),pollIntervalSeconds:e3.number().int(),staleAfterSeconds:e3.number().int()}),ia=e3.object({id:e3.string(),name:e3.string(),hostname:e3.string(),connected:e3.boolean(),diskTotalBytes:e3.number().nullable(),diskFreeBytes:e3.number().nullable()}),is=e3.enum(["DISABLED","STALE","IDLE","CLEANUP_REQUIRED","DELETING","PRESSURE","CRITICAL","ERROR"]),io=e3.object({id:e3.string(),capacityId:e3.string(),totalBytes:e3.number(),freeBytes:e3.number(),roles:e3.array(e3.enum(["MAIN","BASE_REPO","DERIVED_DATA"])),paths:e3.array(e3.string()),status:is,effectiveThresholdBytes:e3.number(),monitored:e3.boolean()}),il=e3.object({enabled:e3.boolean(),status:is,pressureMode:e3.enum(["NORMAL","MANUAL","AUTOMATIC"]),manualPressureMode:e3.boolean(),automaticPressureMode:e3.boolean(),lastReportedAt:e3.string().nullable(),lastError:e3.string().nullable(),warnings:e3.array(e3.string()),monitoredVolumeId:e3.string().nullable(),freeBytes:e3.number().nullable(),totalBytes:e3.number().nullable(),freeGiB:e3.number().nullable(),freePercent:e3.number().nullable(),usedPercent:e3.number().nullable(),effectiveThresholdBytes:e3.number().nullable(),normalThresholdGiB:e3.number(),pressureThresholdGiB:e3.number(),pollIntervalSeconds:e3.number().int(),staleAfterSeconds:e3.number().int(),changeReason:e3.string().nullable(),volumes:e3.array(io)}),iu=e3.object({agent:ia,codebase:e3.object({agentId:e3.string()}),disk:il}),ic=e3.object({agentId:e3.string().min(1)}),id=e3.object({name:e3.string().min(1),description:e3.string().default(""),script:e3.string().min(1),targetKind:e3.enum(["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME","ANY_WORKTREE","REPOSITORY_WORKTREE"]),targetAgentId:e3.string().nullable().optional(),targetRepositoryId:e3.string().nullable().optional(),restartPolicy:e3.enum(["NEVER","ON_FAILURE","ALWAYS"]).default("NEVER"),restartLimit:e3.number().int().min(0).max(100).default(3),quickActionEnabled:e3.boolean().default(!1),quickActionIconKey:e3.string().default("terminal"),quickActionButtonVariant:e3.string().default("default"),notificationsEnabled:e3.boolean().default(!0)}),ip="WORKFLOW_AUTOMATION",ih={actor:"workflow",ipAddress:null},im=e3.object({owner:e3.string().min(1),name:e3.string().min(1),number:e3.number().int().positive()}),ig=e3.object({issueKey:e3.string().min(1)}),iy=e3.object({format:e3.string().min(1),value:e3.string()});var iw=e.i(807237);let ib=e3.object({runId:e3.string().min(1)}),iv=e3.object({kind:e3.string().min(1),worktreeId:e3.string().min(1),jiraIssueKey:e3.string().nullable().optional(),provider:e3.string().min(1),model:e3.string().min(1),effort:e3.string().nullable().optional(),webSearchEnabled:e3.boolean().nullable().optional(),prompt:e3.string().min(1),attachmentIds:e3.array(e3.string().min(1)).nullable().optional(),draftId:e3.string().nullable().optional(),sourcePlanId:e3.string().nullable().optional(),parentRunId:e3.string().nullable().optional(),followUpMode:e3.string().nullable().optional(),contextMode:e3.string().nullable().optional()});var ik=e.i(497800),iS=e.i(835544);function iE(e,t){let r=new Set([...e.nodes.map(({id:e})=>e),...e.triggers.map(({id:e})=>e)]);for(let e=1;;e+=1){let i=`${t}-${e}`;if(!r.has(i))return i}}function iI(e,t){return e.nodes.find(e=>e.id===t)??e.triggers.find(e=>e.id===t)}function ix(e){return(0,iS.isChoiceTriggerKind)(e.kind)?(0,ik.workflowTriggerChoices)(e.config).map(({key:e})=>e):(0,iS.workflowStaticSourceHandles)(e.kind)}function iA(e,t){if(t.config)return t.config;if(!t.configPatch)return e;let r={...e};for(let[e,i]of Object.entries(t.configPatch))null===i?delete r[e]:r[e]=i;return r}function i_(e,t){let r=iI(e,t.source);if(!r)throw Error(`${t.source} is not in this workflow`);if(!e.nodes.some(({id:e})=>e===t.target))throw Error(`${t.target} is not a step — triggers cannot have incoming connections`);let i=ix(r),a=t.sourceHandle??i[0];if(!a)throw Error(`${t.source} offers no connectors yet — a choice trigger needs its options set first`);if(!i.includes(a))throw Error(`${t.source} has no ${a} connector; it offers ${i.join(", ")}`);let n=t.targetHandle??"input",s=e.edges.find(e=>e.source===t.source&&e.target===t.target&&e.sourceHandle===a);if(s)return{definition:e,edgeId:s.id};let o=function(e){let t=new Set(e.edges.map(({id:e})=>e));for(let e=1;;e+=1){let r=`edge-${e}`;if(!t.has(r))return r}}(e);return{definition:{...e,edges:[...e.edges,{id:o,source:t.source,target:t.target,sourceHandle:a,targetHandle:n}]},edgeId:o}}let iC={workflow:[{name:"id",description:"Workflow definition id"},{name:"name",description:"Workflow name"},{name:"runId",description:"Current run id"},{name:"startedAt",description:"Run start timestamp"},{name:"trigger",description:"Trigger that started the run"}],repo:[{name:"id",description:"Repository id"},{name:"githubId",description:"GitHub repository id"},{name:"owner",description:"Repository owner / organization"},{name:"name",description:"Repository name"},{name:"url",description:"Repository URL"},{name:"canonicalOrigin",description:"Normalized repository origin"},{name:"displayOrigin",description:"Human-readable repository origin"},{name:"defaultBranch",description:"Repository default branch"}],codebase:[{name:"id",description:"Codebase id"},{name:"agentId",description:"Owning agent id"},{name:"folder",description:"Codebase filesystem path"},{name:"branch",description:"Current branch"},{name:"headSha",description:"HEAD commit SHA"},{name:"dirty",description:"Whether the working tree has changes"},{name:"branches",description:"Local and remote Git branches"},{name:"branchesTruncated",description:"Whether branch results were truncated"},{name:"stashes",description:"Git stashes"},{name:"stashesTruncated",description:"Whether stash results were truncated"},{name:"remoteBranches",description:"Known remote branches"}],agent:[{name:"id",description:"Owning agent id"},{name:"name",description:"Agent display name"},{name:"hostname",description:"Agent hostname"},{name:"connected",description:"Whether the agent is connected"},{name:"diskTotalBytes",description:"Root disk capacity in bytes"},{name:"diskFreeBytes",description:"Available disk space in bytes"},{name:"memoryFreeBytes",description:"Available memory in bytes"}],disk:[{name:"enabled",description:"Whether disk monitoring is enabled"},{name:"status",description:"Current disk monitor status"},{name:"pressureMode",description:"Normal, manual, or automatic pressure mode"},{name:"manualPressureMode",description:"Whether manual pressure mode is enabled"},{name:"automaticPressureMode",description:"Whether automatic pressure mode is active"},{name:"lastReportedAt",description:"Timestamp of the latest accepted disk report"},{name:"lastError",description:"Latest monitor or cleanup error"},{name:"warnings",description:"Current disk report warnings"},{name:"monitoredVolumeId",description:"Least-free monitored Derived Data volume id"},{name:"freeBytes",description:"Monitored Derived Data free bytes"},{name:"totalBytes",description:"Monitored Derived Data total bytes"},{name:"freeGiB",description:"Monitored Derived Data free space in GiB"},{name:"freePercent",description:"Monitored Derived Data free percentage"},{name:"usedPercent",description:"Monitored Derived Data used percentage"},{name:"effectiveThresholdBytes",description:"Current cleanup threshold in bytes"},{name:"normalThresholdGiB",description:"Global normal threshold in GiB"},{name:"pressureThresholdGiB",description:"Global pressure threshold in GiB"},{name:"pollIntervalSeconds",description:"Agent disk report cadence"},{name:"staleAfterSeconds",description:"Age at which a report is stale"},{name:"changeReason",description:"Internal reason for the monitor event"},{name:"volumes",description:"All reported volumes and their monitor status"}],cleanup:[{name:"jobId",description:"Automatic cleanup agent job id"},{name:"status",description:"Automatic cleanup terminal status"},{name:"source",description:"Cleanup source"},{name:"error",description:"Cleanup error, if any"},{name:"targets",description:"Derived Data entries selected for cleanup"},{name:"deleted",description:"Derived Data entries reported deleted"}],command:[{name:"id",description:"Command run id"},{name:"commandId",description:"Saved command definition id"},{name:"name",description:"Command display name"},{name:"status",description:"Command run status"},{name:"exitCode",description:"Command process exit code"},{name:"signal",description:"Command termination signal"},{name:"error",description:"Command failure reason"},{name:"finishedAt",description:"Command completion timestamp"}],skill:[{name:"id",description:"Skill id"},{name:"groupId",description:"Skill group id"}],skillSync:[{name:"id",description:"Skill sync run id"},{name:"kind",description:"Skill sync kind"},{name:"status",description:"Skill sync status"},{name:"error",description:"Skill sync failure reason"},{name:"conflictCount",description:"Unresolved conflict count"},{name:"conflicts",description:"Unresolved skill conflicts"},{name:"updatedAt",description:"Skill sync update timestamp"},{name:"finishedAt",description:"Skill sync completion timestamp"}],buildData:[{name:"id",description:"Build-data collection id"},{name:"status",description:"Collection status"},{name:"finishedAt",description:"Collection completion timestamp"},{name:"totalBytes",description:"Total discovered bytes"},{name:"entryCount",description:"Discovered entry count"},{name:"successfulAgentCount",description:"Agents that completed collection successfully"}],signingProfile:[{name:"id",description:"Signing profile id"},{name:"uuid",description:"Provisioning profile UUID"},{name:"name",description:"Provisioning profile name"},{name:"expiresAt",description:"Provisioning profile expiry"},{name:"expired",description:"Whether the profile is expired"}],device:[{name:"id",description:"iOS device id"},{name:"udid",description:"Device UDID"},{name:"name",description:"Device display name"},{name:"product",description:"Device product identifier"},{name:"osVersion",description:"Device OS version"},{name:"status",description:"Device registration status"},{name:"error",description:"Device registration failure reason"},{name:"updatedAt",description:"Device update timestamp"}],pushBatch:[{name:"id",description:"Push-notification batch id"},{name:"status",description:"Push batch status"},{name:"targetMode",description:"Push batch target mode"},{name:"deliveryCount",description:"Push delivery count"},{name:"updatedAt",description:"Push batch update timestamp"}],ticket:[{name:"key",description:"Jira issue key (e.g. AIDE-42)"},{name:"projectKey",description:"Jira project key"},{name:"title",description:"Issue summary / title"},{name:"type",description:"Issue type (Bug, Story, …)"},{name:"status",description:"Workflow status name"},{name:"statusId",description:"Workflow status id"},{name:"statusCategory",description:"Status category (To Do, Done, …)"},{name:"assignee",description:"Assigned user"},{name:"assigneeAccountId",description:"Assigned Jira account id"},{name:"labels",description:"Issue labels"},{name:"sprintNames",description:"Sprints containing the issue"},{name:"url",description:"Jira issue URL"}],pr:[{name:"id",description:"Pull request id"},{name:"number",description:"Pull request number"},{name:"state",description:"Open / closed / merged state"},{name:"merged",description:"Whether the pull request was merged"},{name:"title",description:"Pull request title"},{name:"url",description:"Pull request URL"},{name:"labels",description:"Pull request labels"},{name:"isDraft",description:"Whether the pull request is a draft"},{name:"headBranch",description:"Pull request head branch"},{name:"headRefName",description:"Pull request head ref"},{name:"headSha",description:"Pull request head commit SHA"},{name:"baseBranch",description:"Pull request base branch"},{name:"reviewDecision",description:"Latest review decision"},{name:"pipelineStatus",description:"Combined pull request check status"},{name:"unresolvedReviewThreadCount",description:"Number of unresolved pull request review threads"},{name:"pipelines",description:"CI pipelines linked to the pull request"},{name:"reviewThreads",description:"Pull request review threads"},{name:"mergeable",description:"Pull request mergeability"},{name:"repositoryGithubId",description:"GitHub repository id"},{name:"repositoryNameWithOwner",description:"GitHub owner and repository name"},{name:"jiraKey",description:"Jira key linked to the pull request"},{name:"unresolvedThreads",description:"Unresolved review threads"}],worktree:[{name:"id",description:"Worktree id"},{name:"branch",description:"Worktree branch"},{name:"baseBranch",description:"Base branch the work targets"},{name:"path",description:"Filesystem path"},{name:"headSha",description:"Worktree HEAD commit SHA"},{name:"pushStatus",description:"Push readiness status"},{name:"upstream",description:"Tracked upstream branch"},{name:"syncState",description:"Relationship to the tracked branch"},{name:"ahead",description:"Commits ahead of upstream"},{name:"behind",description:"Commits behind upstream"},{name:"baseAhead",description:"Commits ahead of the base branch"},{name:"baseBehind",description:"Commits behind the base branch"},{name:"commits",description:"Commits on the branch"},{name:"changes",description:"Pending file changes"},{name:"branchChanges",description:"Files changed from the base branch"},{name:"commitsTruncated",description:"Whether commit results were truncated"},{name:"changesTruncated",description:"Whether pending changes were truncated"},{name:"branchChangesTruncated",description:"Whether branch change results were truncated"},{name:"dirty",description:"Whether the working tree has changes"},{name:"branches",description:"Local and remote Git branches"},{name:"branchesTruncated",description:"Whether branch results were truncated"},{name:"stashes",description:"Git stashes"},{name:"stashesTruncated",description:"Whether stash results were truncated"},{name:"rebaseInProgress",description:"Whether a rebase is in progress"},{name:"hasConflicts",description:"Whether Git reports conflicts"},{name:"conflicted",description:"Whether an inspection found conflicts"},{name:"conflicts",description:"Conflicting files"},{name:"missingAt",description:"When the worktree was found missing"},{name:"dirtySince",description:"When the worktree became dirty"},{name:"autoSync",description:"Persistent Auto Sync configuration and current state"},{name:"autoMerge",description:"Persistent Auto Merge configuration and current state"}],pipeline:[{name:"id",description:"CI pipeline id"},{name:"runId",description:"CI run id"},{name:"workflowId",description:"CI workflow id"},{name:"name",description:"CI workflow name"},{name:"displayTitle",description:"CI run display title"},{name:"status",description:"Run status"},{name:"conclusion",description:"Run conclusion"},{name:"headBranch",description:"Branch built by the CI run"},{name:"headSha",description:"Commit built by the CI run"},{name:"pullRequests",description:"Pull requests linked to the CI run"},{name:"url",description:"CI run URL"},{name:"failedJobs",description:"Failed jobs"},{name:"jobs",description:"Jobs in the CI run"},{name:"checkSuiteId",description:"GitHub check suite id"},{name:"runNumber",description:"GitHub Actions run number"},{name:"runAttempt",description:"GitHub Actions run attempt"},{name:"jiraKey",description:"Jira key inferred from the run"}],build:[{name:"id",description:"Build id"},{name:"status",description:"Build status"},{name:"action",description:"Build action"},{name:"error",description:"Build error, if any"},{name:"artifactDirectory",description:"Build artifact directory"},{name:"testSummary",description:"Test result summary"},{name:"tests",description:"Individual test results"},{name:"coverageSummary",description:"Coverage summary"},{name:"coverageFiles",description:"Per-file coverage results"},{name:"changedCoverageFiles",description:"Coverage for files changed on the branch"},{name:"artifacts",description:"Exported build artifacts"},{name:"exportId",description:"Build export id"}],run:[{name:"id",description:"Agent run id"},{name:"kind",description:"Run kind (PLAN / SESSION)"},{name:"status",description:"Run status"},{name:"phase",description:"Run phase"},{name:"origin",description:"Run origin"},{name:"provider",description:"AI provider"},{name:"model",description:"AI model"},{name:"branch",description:"Branch used by the run"},{name:"finalOutput",description:"Final output text"},{name:"error",description:"Run error, if any"},{name:"usage",description:"Token usage and cost"},{name:"questions",description:"Questions asked by the run"},{name:"events",description:"Run events"},{name:"links",description:"Resources linked to the run"}],steps:[{name:"status",description:"Step completion status"},{name:"output",description:"Step output payload"},{name:"answer",description:"Human answer for the step"},{name:"snapshotId",description:"Captured snapshot id"},{name:"items",description:"Items produced for iteration"},{name:"commandRunId",description:"Command run id"},{name:"displayNumber",description:"Resource display number"}],comment:[{name:"id",description:"Comment id"},{name:"body",description:"Comment body"},{name:"author",description:"Comment author"}],push:[{name:"ref",description:"Pushed Git ref"},{name:"before",description:"Commit before the push"},{name:"after",description:"Commit after the push"}],job:[{name:"id",description:"Job id"},{name:"name",description:"Job name"},{name:"status",description:"Job status"},{name:"url",description:"Job URL"},{name:"runAttempt",description:"Workflow run attempt"}]},iR=new Map(Object.entries(iC).flatMap(([e,t])=>t.map(t=>[`${e}.${t.name}`,t.description])));function iT(e){return e.split(".")[0]??e}let iD=e3.object({workflowId:e3.string().min(1).describe("Workflow id.")}),iN=e3.object({x:e3.number(),y:e3.number()}).describe("Canvas position. Presentation only — omit it and a sensible spot is chosen."),iO=e3.record(e3.string(),e3.unknown()).describe("Config object for this kind. Call describe_workflow_kind for its schema. A value may be a constant, a session binding `{source:'SESSION',path:'ticket.key'}`, or a string with `{{ticket.key}}` interpolation."),iP=e3.array(e3.string()).max(100).describe("Extra session paths this step guarantees, on top of what its kind always provides. Required when a step writes to a config-chosen path — e.g. a CONTROL_SET_VARIABLE with `path: 'checks.ready'` must declare ['checks.ready'], or a later step binding it fails validation with REQUIREMENT_UNSATISFIED."),i$=e3.array(e3.string()).max(100).describe("Extra session paths this step demands, on top of its kind's own. Publishing fails unless every trigger that reaches the step guarantees them."),iU=e3.object({severity:e3.enum(["ERROR","WARNING"]),code:e3.string(),message:e3.string(),nodeId:e3.string().nullable(),triggerId:e3.string().nullable(),path:e3.string().nullable()}),iB=e3.object({workflowId:e3.string(),definition:e3.unknown().describe("The saved draft definition."),valid:e3.boolean().describe("Whether the draft would publish. Warnings do not block."),diagnostics:e3.array(iU),nodeId:e3.string().nullable().describe("Id of a step this call created."),triggerId:e3.string().nullable().describe("Id of a trigger this call created."),edgeId:e3.string().nullable().describe("Id of a connection this call created.")}),ij=e3.object({id:e3.string(),name:e3.string(),description:e3.string(),enabled:e3.boolean(),overlapPolicy:e3.string(),maxConcurrentRuns:e3.number(),activeVersionId:e3.string().nullable(),draftSchemaVersion:e3.number(),quickActionKind:e3.enum(["STANDARD","MERGE_CONFLICT","GITHUB_ACTIONS","NONE"]),archivedAt:e3.string().nullable(),versionCount:e3.number(),runCount:e3.number(),createdAt:e3.string().nullable(),updatedAt:e3.string().nullable()}),iL=e3.object({id:e3.string(),displayNumber:e3.number(),workflowId:e3.string(),versionId:e3.string(),parentRunId:e3.string().nullable(),triggerKind:e3.string(),triggerSubjectKey:e3.string(),triggerPayload:e3.unknown(),status:e3.string(),phase:e3.string(),generation:e3.number(),sessionData:e3.unknown(),blockedReason:e3.string().nullable(),error:e3.string().nullable(),attemptCount:e3.number(),eventCount:e3.number(),queuedAt:e3.string().nullable(),startedAt:e3.string().nullable(),pausedAt:e3.string().nullable(),finishedAt:e3.string().nullable(),updatedAt:e3.string().nullable()}),iq=e3.object({id:e3.string(),runId:e3.string(),attemptId:e3.string().nullable(),sequence:e3.number(),type:e3.string(),message:e3.string(),detail:e3.unknown(),createdAt:e3.string().nullable()}),iM=e3.object({batchId:e3.string(),runId:e3.string().nullable(),status:e3.string(),createdAt:e3.string().nullable(),questions:e3.array(e3.object({id:e3.string(),header:e3.string().nullable(),prompt:e3.string(),multiSelect:e3.boolean(),allowCustom:e3.boolean(),options:e3.array(e3.object({label:e3.string(),description:e3.string().nullable()}))}))}),iF={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0};function iK(e,t){return!t||e.toLowerCase().includes(t.toLowerCase())}async function iV(e,t){let r=await e().get(t);if(!r)throw Error(`Workflow ${t} was not found`);return(0,ik.parseWorkflowDefinition)(JSON.parse(r.draftDefinitionJson))}async function iH(e,t,r,i={}){let a=e();await a.saveDraft({id:t,definition:r});let{valid:n,diagnostics:s}=await a.validateDraft(t);return{workflowId:t,definition:t9(r),valid:n,diagnostics:s.map(e=>({severity:e.severity,code:e.code,message:e.message,nodeId:e.nodeId??null,triggerId:e.triggerId??null,path:e.path??null})),nodeId:i.nodeId??null,triggerId:i.triggerId??null,edgeId:i.edgeId??null}}function iG(e){let t=ik.WORKFLOW_TRIGGER_CATALOG.find(t=>t.kind===e);if(!t)throw Error(`Unknown trigger kind ${e}`);return t}let iW=e3.object({id:e3.string().min(1)}),iJ=e3.object({worktreeId:e3.string().min(1),requestId:e3.string().min(1)}),iz=e3.object({mode:e3.enum(["NEW","EXISTING","TICKET"]),branchName:e3.string().nullable().optional(),ticketKey:e3.string().nullable().optional(),baseBranch:e3.string().min(1)}),iZ=e3.object({worktreeId:e3.string(),state:e3.string(),conflictWorkflowId:e3.string().nullable(),conflictWorkflowChoice:e3.string().nullable(),lastError:e3.string().nullable(),lastSyncedAt:e3.string().nullable(),updatedAt:e3.string()}),iY=e3.object({worktreeId:e3.string(),state:e3.string(),repositoryNameWithOwner:e3.string(),pullRequestNumber:e3.number().int(),mergeMethod:e3.enum(["MERGE","REBASE","SQUASH"]),commitHeadline:e3.string(),commitBody:e3.string(),authorEmail:e3.string().nullable(),deleteWorktree:e3.boolean(),moveTicketToDone:e3.boolean(),ticketKey:e3.string().nullable(),lastError:e3.string().nullable(),updatedAt:e3.string()}),iQ={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},iX={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},i0={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},i1={...iQ,openWorldHint:!0},i2={...iX,openWorldHint:!0},i3={...i0,openWorldHint:!0};function i4(e){return{name:e.name,title:e.title,description:e.description,inputSchema:e.inputSchema,outputSchema:e.outputSchema,annotations:e.annotations??iQ,invoke:async t=>{let r=e.inputSchema.parse(t);return e.outputSchema.parse(await e.handler(r))}}}function i6(e){return{id:e.id,name:e.name,source:"BUILTIN",transport:null,url:null,error:null,tools:e.tools.map(e=>({name:e.name,title:e.title,description:e.description,inputSchema:S.toJSONSchema(e.inputSchema),outputSchema:S.toJSONSchema(e.outputSchema),annotations:e.annotations})),children:e.children.map(i6)}}function i8(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Built-in tool output must be a JSON object");return{content:[{type:"text",text:JSON.stringify(e,null,2)}],structuredContent:e}}class i5{groups;indexed;byName;groupIds;constructor(e){this.groups=e,this.indexed=function e(t){return t.flatMap(t=>[...t.tools.map(e=>({groupId:t.id,definition:e})),...e(t.children)])}(e),this.byName=new Map,this.groupIds=new Set;const t=e=>{if(this.groupIds.has(e.id))throw Error(`Duplicate built-in tool group id: ${e.id}`);this.groupIds.add(e.id),e.children.forEach(t)};for(const r of(e.forEach(t),this.indexed)){if(this.byName.has(r.definition.name))throw Error(`Duplicate built-in MCP tool name: ${r.definition.name}`);this.byName.set(r.definition.name,r)}}definitions(){return this.indexed.map(({definition:e})=>e)}catalog(){return this.groups.map(i6)}hasGroup(e){return this.groupIds.has(e)}groupIdForName(e){return this.byName.get(e)?.groupId??null}async call(e,t,r){let i=this.byName.get(t);if(!i||i.groupId!==e)throw Error(`Unknown built-in tool: ${t}`);return i8(await i.definition.invoke(r))}async callByName(e,t){let r=this.byName.get(e);if(!r)throw Error(`Unknown built-in tool: ${e}`);return i8(await r.definition.invoke(t))}}function i9(e){return{...e,startedAt:e.startedAt.toISOString(),finishedAt:e.finishedAt?.toISOString()??null}}class i7{async clear(){return(await (0,tX.getPrismaClient)()).toolCallAudit.deleteMany({where:{resultStatus:{not:"RUNNING"}}})}async execute(e,t){var r;let i,a,n=await (0,tX.getPrismaClient)(),s=(0,y.randomUUID)(),o=new Date;await n.toolCallAudit.create({data:{id:s,correlationId:e.correlationId,caller:e.caller,source:e.source,groupId:e.groupId,toolName:e.toolName,argumentsSha256:(r=e.arguments,(0,y.createHash)("sha256").update(JSON.stringify((a=e=>null===e||"string"==typeof e||"boolean"==typeof e?e:"number"==typeof e?Number.isFinite(e)?e:String(e):"bigint"==typeof e?e.toString():Array.isArray(e)?e.map(a):e instanceof Date?e.toISOString():e&&"object"==typeof e?Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,a(t)])):String(e))(r))).digest("hex")),resultStatus:"RUNNING",startedAt:o}});try{i=await t()}catch(t){let e=new Date;throw await n.toolCallAudit.update({where:{id:s},data:{resultStatus:"FAILED",durationMs:Math.max(0,e.getTime()-o.getTime()),finishedAt:e}}).catch(()=>void 0),r6.agentEventBus.publish(r6.TOOL_CALL_AUDIT_CHANGED_TOPIC,{toolCallAuditChanged:{id:s}}),t}let l=new Date,u=!1;try{await n.toolCallAudit.update({where:{id:s},data:{resultStatus:"SUCCEEDED",durationMs:Math.max(0,l.getTime()-o.getTime()),finishedAt:l}}),u=!0}catch(e){console.error("Could not persist successful tool-call audit completion:",e instanceof Error?e.message:e)}return u&&r6.agentEventBus.publish(r6.TOOL_CALL_AUDIT_CHANGED_TOPIC,{toolCallAuditChanged:{id:s}}),i}async list(e={}){let t=await (0,tX.getPrismaClient)();return(await t.toolCallAudit.findMany({where:{...e.toolName?{toolName:e.toolName}:{},...e.resultStatus?{resultStatus:e.resultStatus}:{}},orderBy:{startedAt:"desc"},take:Math.min(Math.max(e.first??100,1),500)})).map(i9)}async get(e){let t=await (0,tX.getPrismaClient)(),r=await t.toolCallAudit.findUnique({where:{id:e}});return r?i9(r):null}}let ae="external:",at=new Set(["accept","connection","content-length","content-type","host","last-event-id","mcp-protocol-version","mcp-session-id","transfer-encoding"]),ar=new Set(w.BUILD_CONFIGURATION_ICON_KEYS);function ai(e){if("STREAMABLE_HTTP"===e||"SSE"===e)return e;throw Error(`Unsupported MCP transport: ${e}`)}function aa(e,t){return{id:e.id,name:e.name,url:e.url,transport:ai(e.transport),toolNamePrefix:e.toolNamePrefix,headers:[...e.headers].sort((e,t)=>e.name.localeCompare(t.name)).map(e=>({id:e.id,name:e.name,valueConfigured:t})),createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString()}}function an(e){return{id:e.id,name:e.name,description:e.description,iconKey:e.iconKey,enabledForPlans:e.enabledForPlans,enabledForSessions:e.enabledForSessions,toolNames:e.tools.map(({toolName:e})=>e).sort(),createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString()}}class as{credentials;audit;builtInTools;constructor(e,t,r={},i=new t0.CredentialService,a=new i7){this.credentials=i,this.audit=a,this.builtInTools=function(e){var t,r,i,a,n,s,o,l,c,d,p,h,m,f,g,y,w,b,v,k,S,E,I,x,A,_,C,R,T;let D,N,O,P,$=[(t=e.codebaseTools,r=e.codebases,D=[i4({name:"get_codebases",title:"Get codebases",description:"List every registered codebase checkout.",inputSchema:u.GetCodebasesInputSchema,outputSchema:u.GetCodebasesOutputSchema,annotations:iQ,handler:async()=>({codebases:await t.list()})}),i4({name:"get_codebase",title:"Get codebase",description:"Get one registered codebase by ID or exact folder path.",inputSchema:u.GetCodebaseInputSchema,outputSchema:u.GetCodebaseOutputSchema,annotations:iQ,handler:async e=>({codebase:"id"in e?await t.getById(e.id):e.agentId?await t.getByPath(e.path,e.agentId):await t.getByPath(e.path)})})],r&&(D.splice(1,0,i4({name:"search_codebases",title:"Search codebases",description:"Search registered codebases by text, agent, repository, branch, availability, or sync state.",inputSchema:u.SearchCodebasesInputSchema,outputSchema:u.SearchCodebasesOutputSchema,annotations:iQ,handler:e=>t.search(e)}),rp({name:"register_codebase",title:"Register codebase",description:"Register a previously inspected agent repository folder.",inputSchema:e3.object({inspectionJobId:e3.string().min(1),name:e3.string().nullable().optional(),description:e3.string().nullable().optional()}),service:r,method:"confirm",resultKey:"codebase",annotations:{...iX,idempotentHint:!1}}),rp({name:"update_codebase_repository",title:"Update codebase repository",description:"Update canonical repository metadata and linked skill groups.",inputSchema:e3.object({id:e3.string().min(1),name:e3.string().min(1),description:e3.string(),jiraBranchRegex:e3.string().nullable().optional(),keepBaseBranchUpToDate:e3.boolean(),skillGroupIds:e3.array(e3.string()).nullable().optional()}),service:r,method:"updateRepository",arguments:e=>[e.id,e.name,e.description,e.jiraBranchRegex,e.keepBaseBranchUpToDate,e.skillGroupIds],resultKey:"repository",annotations:iX}),rp({name:"update_codebase_settings",title:"Update codebase settings",description:"Update global refresh, fetch, and Jira branch parsing settings.",inputSchema:e3.object({refreshIntervalSeconds:e3.number().int().positive(),fetchIntervalSeconds:e3.number().int().positive(),defaultJiraBranchRegex:e3.string()}),service:r,method:"updateSettings",resultKey:"settings",annotations:iX}),rp({name:"remove_codebase",title:"Remove codebase",description:"Remove a registered codebase from the control plane without deleting its repository folder.",inputSchema:e3.object({id:e3.string().min(1)}),service:r,method:"removeCodebase",arguments:({id:e})=>[e],resultKey:"removed",annotations:i0}),rp({name:"run_codebase_git_operation",title:"Run codebase Git operation",description:"Run a supported Git operation against a registered codebase.",inputSchema:e3.object({codebaseId:e3.string().min(1),operation:e3.string().min(1),branch:e3.string().nullable().optional(),stashOid:e3.string().nullable().optional(),stashChanges:e3.boolean().nullable().optional(),requestId:e3.string().min(1)}),service:r,method:"runGitOperation",resultKey:"job",annotations:iX})),D.push(i4({name:"get_codebase_repositories",title:"Get codebase repositories",description:"List canonical repositories and their checkout counts.",inputSchema:rf,outputSchema:u.GetCodebaseRepositoriesOutputSchema,annotations:iQ,handler:async()=>({repositories:await t.repositories()})}),i4({name:"get_codebase_repository",title:"Get codebase repository",description:"Get a canonical repository and all of its registered checkouts.",inputSchema:u.GetCodebaseRepositoryInputSchema,outputSchema:u.GetCodebaseRepositoryOutputSchema,annotations:iQ,handler:async({id:e})=>({repository:await t.repository(e)})}),i4({name:"get_codebase_settings",title:"Get codebase settings",description:"Get global codebase refresh, fetch, and branch settings.",inputSchema:rf,outputSchema:rg,annotations:iQ,handler:async()=>{let e=await r.settings();return{settings:{refreshIntervalSeconds:e.refreshIntervalSeconds,fetchIntervalSeconds:e.fetchIntervalSeconds,defaultJiraBranchRegex:e.defaultJiraBranchRegex,updatedAt:e.updatedAt.toISOString()}}}}),i4({name:"browse_agent_directory",title:"Browse agent directory",description:"List candidate repository folders on an enrolled agent.",inputSchema:ry,outputSchema:rw,annotations:iQ,handler:async({agentId:e,path:t,requestId:i})=>({listing:await r.browse(e,t,i)})}),i4({name:"inspect_agent_codebase",title:"Inspect agent codebase",description:"Inspect a repository folder without registering or changing it.",inputSchema:rb,outputSchema:rv,annotations:iQ,handler:async({agentId:e,folder:t,requestId:i})=>({inspection:t9(await r.inspect(e,t,i))})}),i4({name:"refresh_codebases",title:"Refresh codebases",description:"Queue local metadata refreshes for registered codebases.",inputSchema:rk,outputSchema:rS,annotations:iX,handler:async({codebaseIds:e,requestId:t})=>{let i=await r.runOperation(rm.CODEBASE_REFRESH_JOB_KIND,e,t);return{jobs:i.jobs.map(e=>t5(e)),skipped:i.skipped}}}),i4({name:"fetch_codebases",title:"Fetch codebases",description:"Queue remote Git fetches and configured base-branch updates.",inputSchema:rk,outputSchema:rS,annotations:{...iX,openWorldHint:!0},handler:async({codebaseIds:e,requestId:t})=>{let i=await r.runOperation(rm.CODEBASE_FETCH_JOB_KIND,e,t);return{jobs:i.jobs.map(e=>t5(e)),skipped:i.skipped}}}),i4({name:"inspect_codebase_git_state",title:"Inspect codebase Git state",description:"Inspect branches, checkout locations, and stashes.",inputSchema:rE,outputSchema:rI,annotations:iQ,handler:async({codebaseId:e,requestId:t})=>({state:await r.inspectGitState(e,t)})}),i4({name:"inspect_codebase_stash",title:"Inspect codebase stash",description:"Read a bounded textual patch for a Git stash.",inputSchema:rx,outputSchema:rA,annotations:iQ,handler:async({codebaseId:e,stashOid:t,requestId:i})=>({diff:await r.inspectStash(e,t,i)})}))),{id:"builtin:codebases",name:"Codebases",tools:D,children:[]})];return e.builds&&$.push((i=e.builds,{id:"builtin:builds",name:"Builds",children:[],tools:[i4({name:"get_builds",title:"Get builds",description:"List immutable iOS build records.",inputSchema:rl.GetBuildsInputSchema,outputSchema:rl.GetBuildsOutputSchema,annotations:iQ,handler:async e=>{let t=await i.builds(e);return{builds:t.items,nextCursor:t.nextCursor}}}),i4({name:"get_build",title:"Get build",description:"Get a build with sanitized logs.",inputSchema:rl.GetBuildInputSchema,outputSchema:rl.GetBuildOutputSchema,annotations:iQ,handler:async({buildId:e,afterLogId:t,logLimit:r})=>{let a=await i.getBuild(e);if(!a)throw Error("Build not found");return{build:a,logs:await i.logChunks(e,t,r)}}}),i4({name:"get_build_configurations",title:"Get build configurations",description:"List build configurations for a worktree.",inputSchema:rl.GetBuildConfigurationsInputSchema,outputSchema:rl.GetBuildConfigurationsOutputSchema,annotations:iQ,handler:async({worktreeId:e})=>({project:await i.projectForWorktree(e)})}),i4({name:"get_build_destinations",title:"Get build destinations",description:"Inspect compatible build destinations.",inputSchema:rl.GetBuildDestinationsInputSchema,outputSchema:rl.GetBuildDestinationsOutputSchema,annotations:iQ,handler:async e=>({destinations:"buildId"in e?await i.destinationsForBuild(e.buildId,e.requestId):await i.destinations(e)})}),i4({name:"start_build",title:"Start build",description:"Queue an iOS build.",inputSchema:rl.StartBuildToolInputSchema,outputSchema:rl.StartBuildToolOutputSchema,annotations:iX,handler:async e=>({build:await i.startBuild(e)})}),i4({name:"cancel_build",title:"Cancel build",description:"Cancel an active build.",inputSchema:rl.CancelBuildToolInputSchema,outputSchema:rl.CancelBuildToolOutputSchema,annotations:i0,handler:async({buildId:e})=>({build:await i.cancelBuild(e)})}),i4({name:"run_build",title:"Run build",description:"Install and launch without rebuilding.",inputSchema:rl.RunBuildToolInputSchema,outputSchema:rl.RunBuildToolOutputSchema,annotations:iX,handler:async e=>({deployments:await i.runBuild(e)})}),i4({name:"export_build_archive",title:"Export build archive",description:"Export an archive to a local IPA folder.",inputSchema:rl.ExportBuildToolInputSchema,outputSchema:rl.ExportBuildToolOutputSchema,annotations:iX,handler:async e=>({export:await i.exportArchive(e)})}),rp({name:"get_build_project",title:"Get build project",description:"Get the iOS build project configured for a codebase.",inputSchema:e3.object({codebaseId:e3.string().min(1)}),service:i,method:"project",arguments:({codebaseId:e})=>[e],resultKey:"project"}),rp({name:"create_build_project",title:"Create build project",description:"Create an iOS build project for a codebase.",inputSchema:e3.object({codebaseId:e3.string().min(1)}),service:i,method:"createProject",arguments:({codebaseId:e})=>[e],resultKey:"project",annotations:{...iX,idempotentHint:!1}}),rp({name:"save_build_configuration",title:"Save build configuration",description:"Create or update an iOS build configuration.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:i,method:"saveConfiguration",arguments:({input:e})=>[e],resultKey:"configuration",annotations:iX}),rp({name:"delete_build_configuration",title:"Delete build configuration",description:"Delete an iOS build configuration.",inputSchema:e3.object({id:e3.string().min(1)}),service:i,method:"deleteConfiguration",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i0}),rp({name:"discover_build_sources",title:"Discover build sources",description:"Discover Xcode projects and workspaces in a worktree.",inputSchema:e3.object({worktreeId:e3.string().min(1),requestId:e3.string().min(1)}),service:i,method:"discoverSources",arguments:e=>[e.worktreeId,e.requestId],resultKey:"sources",annotations:iX}),rp({name:"inspect_build_source",title:"Inspect build source",description:"Inspect schemes, configurations, and targets for an Xcode source.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:i,method:"inspectSource",arguments:({input:e})=>[e],resultKey:"inspection",annotations:iX}),rp({name:"get_build_scripts",title:"Get build scripts",description:"List reusable build scripts.",inputSchema:e3.object({}),service:i,method:"scripts",arguments:()=>[],resultKey:"scripts"}),rp({name:"save_build_script",title:"Save build script",description:"Create or update a reusable build script.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:i,method:"saveScript",arguments:({input:e})=>[e],resultKey:"script",annotations:iX}),rp({name:"delete_build_script",title:"Delete build script",description:"Delete a reusable build script.",inputSchema:e3.object({id:e3.string().min(1)}),service:i,method:"deleteScript",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i0}),rp({name:"rebuild_build",title:"Rebuild build",description:"Queue a new build from an existing build snapshot.",inputSchema:e3.object({buildId:e3.string().min(1),requestId:e3.string().min(1)}),service:i,method:"rebuildBuild",arguments:e=>[e.buildId,e.requestId,null],resultKey:"build",annotations:iX}),rp({name:"delete_builds",title:"Delete builds",description:"Permanently delete build records and their retained data.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),service:i,method:"deleteBuilds",arguments:({ids:e})=>[e],resultKey:"count",annotations:i0}),rp({name:"get_build_reports",title:"Get build reports",description:"Get parsed test and coverage reports for a build.",inputSchema:e3.object({buildId:e3.string().min(1)}),service:i,method:"reportsForBuild",arguments:({buildId:e})=>[e],resultKey:"reports"}),rp({name:"generate_build_report",title:"Generate build report",description:"Generate a parsed test-results or code-coverage report.",inputSchema:e3.object({buildId:e3.string().min(1),kind:e3.enum(["TEST_RESULTS","CODE_COVERAGE"]),requestId:e3.string().min(1)}),service:i,method:"generateReport",arguments:e=>[e.buildId,e.kind,e.requestId],resultKey:"report",annotations:iX}),rp({name:"start_worktree_coverage",title:"Start worktree coverage",description:"Start the configured coverage workflow for a worktree.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:i,method:"startWorktreeCoverage",arguments:({input:e})=>[e],resultKey:"build",annotations:iX}),rp({name:"get_worktree_coverage",title:"Get worktree coverage",description:"Get coverage history for a worktree.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),service:i,method:"coverageHistory",arguments:({worktreeId:e})=>[e],resultKey:"history"})]})),e.telemetry&&e.pushNotifications&&$.push((a=e.telemetry,n=e.pushNotifications,(N=r2(a,"UNIFIED",{plural:"unified_events",singular:"unified_event",label:"Unified Events"})).push(i4({name:"get_telemetry_separators",title:"Get telemetry separators",description:"List global manual and build separators with optional filters.",inputSchema:e3.object({first:e3.number().int().min(1).max(500).default(100),after:e3.string().nullable().default(null),kind:e3.string().min(1).nullable().optional(),name:e3.string().min(1).nullable().optional(),buildId:e3.string().min(1).nullable().optional()}),outputSchema:e3.object({items:e3.array(rK),nextCursor:e3.string().nullable()}),annotations:iQ,handler:e=>a.separators(e)}),i4({name:"add_telemetry_separator",title:"Add telemetry separator",description:"Add a global manual separator to all telemetry views.",inputSchema:e3.object({name:e3.string().max(100).nullable().default(null)}),outputSchema:e3.object({separator:rK}),annotations:{...iX,idempotentHint:!1},handler:async({name:e})=>({separator:await a.addSeparator(e)})}),i4({name:"get_telemetry_settings",title:"Get telemetry settings",description:"Get telemetry collection state and effective ingestion URLs.",inputSchema:e3.object({}),outputSchema:e3.object({settings:e3.object({localBaseUrlOverride:e3.string().nullable(),remoteBaseUrlOverride:e3.string().nullable(),consoleCollectionEnabled:e3.boolean(),analyticsCollectionEnabled:e3.boolean(),detectedLocalBaseUrl:e3.string(),detectedRemoteBaseUrl:e3.string(),effectiveLocalBaseUrl:e3.string(),effectiveRemoteBaseUrl:e3.string(),updatedAt:e3.string()})}),annotations:iQ,handler:async()=>({settings:await a.settings()})}),rp({name:"update_telemetry_settings",title:"Update telemetry settings",description:"Update telemetry collection and ingestion URL settings.",inputSchema:e3.object({localBaseUrlOverride:e3.string().nullable().optional(),remoteBaseUrlOverride:e3.string().nullable().optional(),consoleCollectionEnabled:e3.boolean().nullable().optional(),analyticsCollectionEnabled:e3.boolean().nullable().optional()}),service:a,method:"saveSettings",resultKey:"settings",annotations:iX}),rp({name:"get_telemetry_view_settings",title:"Get telemetry view settings",description:"Get display settings for a telemetry view.",inputSchema:e3.object({view:e3.enum(["UNIFIED","CONSOLE","ANALYTICS"])}),service:a,method:"viewSettings",arguments:({view:e})=>[e],resultKey:"settings"}),rp({name:"update_telemetry_highlight",title:"Update telemetry highlight",description:"Set or clear the highlight color on a telemetry entry.",inputSchema:e3.object({id:e3.string().min(1),color:e3.string().nullable().optional()}),service:a,method:"highlight",arguments:({id:e,color:t})=>[e,t??null],resultKey:"entry",annotations:iX}),rp({name:"get_telemetry_presets",title:"Get telemetry presets",description:"List saved column presets for a telemetry view.",inputSchema:e3.object({view:e3.enum(["UNIFIED","CONSOLE","ANALYTICS"])}),service:a,method:"columnPresets",arguments:({view:e})=>[e],resultKey:"presets"}),rp({name:"save_telemetry_preset",title:"Save telemetry preset",description:"Create or update a telemetry column preset.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:a,method:"saveColumnPreset",arguments:({input:e})=>[e],resultKey:"preset",annotations:iX}),rp({name:"get_saved_telemetry_filters",title:"Get saved telemetry filters",description:"List saved filters for a telemetry view.",inputSchema:e3.object({view:e3.enum(["UNIFIED","CONSOLE","ANALYTICS"])}),service:a,method:"savedFilters",arguments:({view:e})=>[e],resultKey:"filters"}),rp({name:"save_telemetry_filter",title:"Save telemetry filter",description:"Create or update a saved telemetry filter.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:a,method:"saveFilter",arguments:({input:e})=>[e],resultKey:"filter",annotations:iX}),rp({name:"export_telemetry",title:"Export telemetry",description:"Export a bounded telemetry query as structured JSON.",inputSchema:e3.object({view:e3.enum(["UNIFIED","CONSOLE","ANALYTICS"]).default("UNIFIED"),search:e3.string().nullable().optional(),first:e3.number().int().min(1).max(5e3).default(1e3)}),service:a,method:"timeline",resultKey:"export"})),{id:"builtin:debugging",name:"Debugging",tools:N,children:[{id:"builtin:debugging:console-logs",name:"Console Logs",tools:r2(a,"CONSOLE",{plural:"console_logs",singular:"console_log",label:"Console Logs"}),children:[]},{id:"builtin:debugging:analytics-events",name:"Analytics Events",tools:r2(a,"ANALYTICS",{plural:"analytics_events",singular:"analytics_event",label:"Analytics Events"}),children:[]},(O={...iX,openWorldHint:!0},{id:"builtin:debugging:push-notifications",name:"Push Notifications",children:[],tools:[i4({name:"get_push_notification_registrations",title:"Get push notification registrations",description:"List registered APNs devices with masked tokens.",inputSchema:e3.object({}),outputSchema:e3.object({registrations:e3.array(rT)}),annotations:iQ,handler:async()=>({registrations:(await n.registrations()).map(e=>{let t,r;return t=Array.isArray(e.supportedPushTypes)?e.supportedPushTypes:rR(e.pushTypesJson),r="string"==typeof e.token?e.token:"",{id:String(e.id),clientRegistrationId:String(e.clientRegistrationId),tokenMasked:"string"==typeof e.tokenMasked?e.tokenMasked:r?`${r.slice(0,8)}…${r.slice(-8)}`:"—",topic:String(e.topic),environment:String(e.environment),supportedPushTypes:Array.isArray(t)?t:[],displayName:String(e.displayName),deviceModel:"string"==typeof e.deviceModel?e.deviceModel:null,osVersion:"string"==typeof e.osVersion?e.osVersion:null,appVersion:"string"==typeof e.appVersion?e.appVersion:null,appBuild:"string"==typeof e.appBuild?e.appBuild:null,locale:"string"==typeof e.locale?e.locale:null,pushMagicConfigured:!!e.pushMagic,status:String(e.status),invalidatedAt:rC(e.invalidatedAt),lastFailureReason:"string"==typeof e.lastFailureReason?e.lastFailureReason:null,lastFailureAt:rC(e.lastFailureAt),lastRegisteredAt:rC(e.lastRegisteredAt),lastSentAt:rC(e.lastSentAt),createdAt:rC(e.createdAt),updatedAt:rC(e.updatedAt)}})})}),i4({name:"get_push_notification_settings",title:"Get push notification settings",description:"Inspect APNs credential status without returning secrets.",inputSchema:e3.object({}),outputSchema:e3.object({settings:rN}),annotations:iQ,handler:async()=>{var e;return{settings:{tokenConfigured:!!(e=await n.settings()).tokenConfigured,tokenTeamId:"string"==typeof e.tokenTeamId?e.tokenTeamId:null,tokenKeyId:"string"==typeof e.tokenKeyId?e.tokenKeyId:null,tokenPrivateKeyFingerprint:"string"==typeof e.tokenPrivateKeyFingerprint?e.tokenPrivateKeyFingerprint:null,tokenConfiguredAt:rC(e.tokenConfiguredAt),tokenLastUsedAt:rC(e.tokenLastUsedAt),tokenLastError:"string"==typeof e.tokenLastError?e.tokenLastError:null,certificates:Array.isArray(e.certificates)?e.certificates.map(e=>({id:String(e.id),name:String(e.name),topic:String(e.topic),environment:String(e.environment),fingerprint:String(e.fingerprint),expiresAt:rC(e.expiresAt),lastTestedAt:rC(e.lastTestedAt),lastError:"string"==typeof e.lastError?e.lastError:null,createdAt:rC(e.createdAt),updatedAt:rC(e.updatedAt)})):[],updatedAt:rC(e.updatedAt)}}}}),i4({name:"get_push_notification_channels",title:"Get push notification channels",description:"List configured APNs broadcast channels.",inputSchema:e3.object({}),outputSchema:e3.object({channels:e3.array(rO)}),annotations:iQ,handler:async()=>({channels:(await n.channels()).map(e=>({id:String(e.id),channelId:String(e.channelId),bundleId:String(e.bundleId),environment:String(e.environment),storagePolicy:String(e.storagePolicy),createdAt:rC(e.createdAt),updatedAt:rC(e.updatedAt)}))})}),i4({name:"get_push_notification_presets",title:"Get push notification presets",description:"List saved, validated push editor presets.",inputSchema:e3.object({}),outputSchema:e3.object({presets:e3.array(rP)}),annotations:iQ,handler:async()=>({presets:(await n.presets()).map(e=>({id:String(e.id),name:String(e.name),editor:rR(e.editor??e.editorJson),createdAt:rC(e.createdAt),updatedAt:rC(e.updatedAt)}))})}),i4({name:"get_push_notification_history",title:"Get push notification history",description:"List recent push batches and per-recipient delivery results.",inputSchema:e3.object({limit:e3.number().int().min(1).max(200).default(100)}),outputSchema:e3.object({batches:e3.array(rU)}),annotations:iQ,handler:async({limit:e})=>({batches:(await n.history(e)).map(e=>rB(e))})}),i4({name:"get_push_notification_history_item",title:"Get push notification history item",description:"Get one push batch and all delivery results by ID.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({batch:rU.nullable()}),annotations:iQ,handler:async({id:e})=>{let t=await n.historyItem(e);return{batch:t?rB(t):null}}}),i4({name:"preview_push_notification",title:"Preview push notification",description:"Validate an editor and return its final payload and APNs headers.",inputSchema:e3.object({editor:e3.record(e3.string(),e3.unknown())}),outputSchema:e3.object({editor:e3.unknown(),payload:e3.unknown(),headers:e3.record(e3.string(),e3.string()),byteLength:e3.number().int().nonnegative()}),annotations:iQ,handler:({editor:e})=>(0,r_.validatePushEditor)(e)}),i4({name:"send_push_notification",title:"Send push notification",description:"Validate and queue a raw APNs editor payload for delivery.",inputSchema:rq,outputSchema:e3.object({batch:rU}),annotations:O,handler:async e=>({batch:rB(await n.send(rF(e)))})}),i4({name:"send_push_notification_preset",title:"Send push notification preset",description:"Load a saved preset by ID and queue it for APNs delivery.",inputSchema:rM,outputSchema:e3.object({batch:rU}),annotations:O,handler:async e=>{let t=await n.preset(e.presetId);if(!t)throw Error("Push notification preset not found");let r={...e,editor:rR(t.editorJson)};return{batch:rB(await n.send(rF(r)))}}}),i4({name:"resend_push_notification",title:"Resend push notification",description:"Queue a historical non-draft, non-direct batch again.",inputSchema:e3.object({id:e3.string().min(1),requestId:e3.string().min(1)}),outputSchema:e3.object({batch:rU}),annotations:O,handler:async({id:e,requestId:t})=>({batch:rB(await n.resend(e,t))})}),i4({name:"rename_push_registration",title:"Rename push registration",description:"Rename an APNs device registration.",inputSchema:e3.object({id:e3.string().min(1),displayName:e3.string().min(1)}),outputSchema:e3.object({registration:e3.unknown()}),annotations:iX,handler:async({id:e,displayName:t})=>({registration:await n.renameRegistration(e,t)})}),i4({name:"set_push_registration_enabled",title:"Set push registration enabled",description:"Enable or disable an APNs device registration.",inputSchema:e3.object({id:e3.string().min(1),enabled:e3.boolean()}),outputSchema:e3.object({registration:e3.unknown()}),annotations:iX,handler:async({id:e,enabled:t})=>({registration:await n.setRegistrationActive(e,t)})}),i4({name:"delete_push_registration",title:"Delete push registration",description:"Permanently delete an APNs device registration.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.unknown()}),annotations:i0,handler:async({id:e})=>({deleted:await n.deleteRegistration(e)})}),i4({name:"save_push_preset",title:"Save push preset",description:"Create or update a reusable push-notification preset.",inputSchema:e3.object({id:e3.string().nullable().optional(),name:e3.string().min(1),editor:e3.record(e3.string(),e3.unknown())}),outputSchema:e3.object({preset:e3.unknown()}),annotations:iX,handler:async({id:e,name:t,editor:r})=>({preset:await n.savePreset(t,r,e)})}),i4({name:"delete_push_preset",title:"Delete push preset",description:"Delete a saved push-notification preset.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.unknown()}),annotations:i0,handler:async({id:e})=>({deleted:await n.deletePreset(e)})}),i4({name:"delete_push_history",title:"Delete push history",description:"Delete one push-notification history batch.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.unknown()}),annotations:i0,handler:async({id:e})=>({deleted:await n.deleteHistory(e)})}),i4({name:"clear_push_history",title:"Clear push history",description:"Permanently clear all push-notification history.",inputSchema:e3.object({}),outputSchema:e3.object({count:e3.unknown()}),annotations:i0,handler:async()=>({count:await n.clearHistory()})}),i4({name:"create_push_channel",title:"Create push channel",description:"Create a push-notification broadcast channel.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),outputSchema:e3.object({channel:e3.unknown()}),annotations:iX,handler:async({input:e})=>({channel:await n.createChannel(e)})}),i4({name:"delete_push_channel",title:"Delete push channel",description:"Delete a push-notification broadcast channel.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.unknown()}),annotations:i0,handler:async({id:e})=>({deleted:await n.deleteChannel(e)})}),i4({name:"retest_push_certificate",title:"Retest push certificate",description:"Retest an existing APNs certificate credential without returning its secret material.",inputSchema:e3.object({id:e3.string().min(1)}),outputSchema:e3.object({credential:e3.unknown()}),annotations:iX,handler:async({id:e})=>({credential:await n.retestCertificateCredential(e)})})]})]})),e.agents&&$.push((s=e.agents,{id:"builtin:agents",name:"Agents",children:[],tools:[i4({name:"get_agents",title:"Get agents",description:"List enrolled agents, capabilities, resources, and status.",inputSchema:rr,outputSchema:e3.object({agents:e3.array(ri)}),annotations:iQ,handler:async()=>({agents:(await s.listAgents()).map(e=>t6(e))})}),i4({name:"get_agent",title:"Get agent",description:"Get one enrolled agent by ID.",inputSchema:ro,outputSchema:e3.object({agent:ri.nullable()}),annotations:iQ,handler:async({agentId:e})=>{let t=await s.getAgent(e);return{agent:t?t6(t):null}}}),i4({name:"get_agent_settings",title:"Get agent settings",description:"Get repository, build, and Derived Data paths for an agent.",inputSchema:ro,outputSchema:e3.object({settings:ra}),annotations:iQ,handler:async({agentId:e})=>{let t=await s.getAgent(e);if(!t)throw Error("Agent not found");return{settings:t8(t)}}}),i4({name:"get_agent_jobs",title:"Get agent jobs",description:"List recent user-visible jobs for an agent.",inputSchema:e3.object({agentId:e3.string().min(1),limit:e3.number().int().min(1).max(200).default(50)}),outputSchema:e3.object({jobs:e3.array(rn)}),annotations:iQ,handler:async({agentId:e,limit:t})=>({jobs:(await s.listJobs(e,t)).map(e=>t5(e))})}),i4({name:"get_agent_job",title:"Get agent job",description:"Get one agent job and its result by ID.",inputSchema:e3.object({jobId:e3.string().min(1)}),outputSchema:e3.object({job:rn.nullable()}),annotations:iQ,handler:async({jobId:e})=>{let t=await s.getJob(e);return{job:t?t5(t):null}}}),i4({name:"get_agent_job_logs",title:"Get agent job logs",description:"Fetch ordered job logs after an optional sequence number.",inputSchema:e3.object({jobId:e3.string().min(1),afterSequence:e3.number().int().min(-1).default(-1)}),outputSchema:e3.object({logs:e3.array(rs)}),annotations:iQ,handler:async({jobId:e,afterSequence:t})=>({logs:(await s.listLogs(e,t)).map(e=>({id:String(e.id),jobId:String(e.jobId),sequence:Number(e.sequence),stream:String(e.stream),message:String(e.message),createdAt:t4(e.createdAt)}))})}),i4({name:"update_agent_base_repo_directory",title:"Update agent base repository directory",description:"Set or reset the absolute base repository directory.",inputSchema:e3.object({agentId:e3.string().min(1),baseRepoDirectory:e3.string().min(1).nullable()}),outputSchema:e3.object({settings:ra}),annotations:iX,handler:async({agentId:e,baseRepoDirectory:t})=>({settings:t8(await s.updateBaseRepoDirectory(e,t))})}),i4({name:"update_agent_builds_directory",title:"Update agent builds directory",description:"Set or reset the absolute build-output directory.",inputSchema:e3.object({agentId:e3.string().min(1),buildsDirectory:e3.string().min(1).nullable()}),outputSchema:e3.object({settings:ra}),annotations:iX,handler:async({agentId:e,buildsDirectory:t})=>({settings:t8(await s.updateBuildsDirectory(e,t))})}),i4({name:"update_agent_derived_data_settings",title:"Update agent Derived Data settings",description:"Set default, absolute, or worktree-relative Derived Data paths.",inputSchema:e3.object({agentId:e3.string().min(1),mode:e3.enum(["DEFAULT","ABSOLUTE","RELATIVE"]),path:e3.string().min(1).nullable().default(null)}),outputSchema:e3.object({settings:ra}),annotations:iX,handler:async({agentId:e,mode:t,path:r})=>({settings:t8(await s.updateDerivedDataSettings(e,t,r))})}),i4({name:"request_agent_codebase_reconcile",title:"Request agent codebase reconcile",description:"Ask an online agent to reconcile its registered codebases.",inputSchema:ro,outputSchema:e3.object({requested:e3.boolean()}),annotations:iX,handler:async({agentId:e})=>({requested:await s.requestCodebaseReconcile([e])===1})}),i4({name:"cancel_agent_job",title:"Cancel agent job",description:"Cancel a queued or running agent job.",inputSchema:e3.object({jobId:e3.string().min(1)}),outputSchema:e3.object({job:rn}),annotations:i0,handler:async({jobId:e})=>({job:t5(await s.cancelJob(e))})}),i4({name:"get_agent_cadence_settings",title:"Get agent cadence settings",description:"Get effective scan, reconciliation, fetch, and heartbeat intervals for an agent.",inputSchema:ro,outputSchema:e3.object({settings:e3.unknown()}),handler:async({agentId:e})=>({settings:await s.cadenceSettings(e)})}),i4({name:"update_agent_cadence_settings",title:"Update agent cadence settings",description:"Update scan, reconciliation, fetch, and heartbeat intervals for an agent.",inputSchema:ro.extend({settings:e3.object({codebaseScanIntervalSeconds:e3.number().int().positive(),jobReconciliationIntervalSeconds:e3.number().int().positive(),gitFetchIntervalSeconds:e3.number().int().positive(),heartbeatIntervalSeconds:e3.number().int().positive()})}),outputSchema:e3.object({settings:e3.unknown()}),annotations:iX,handler:async({agentId:e,settings:t})=>({settings:await s.updateCadenceSettings(e,t)})}),i4({name:"delete_agent",title:"Delete agent",description:"Permanently delete an enrolled agent and its control-plane records.",inputSchema:ro,outputSchema:e3.object({deleted:e3.boolean()}),annotations:i0,handler:async({agentId:e})=>({deleted:await s.deleteAgent(e)})})]})),e.diskSpace&&$.push((o=e.diskSpace,{id:"builtin:disk-space",name:"Disk Space",children:[],tools:[i4({name:"get_disk_space_overview",title:"Get disk-space overview",description:"Get global thresholds and canonical Derived Data disk snapshots for every agent.",inputSchema:e3.object({}),outputSchema:e3.object({settings:ii,agents:e3.array(iu)}),annotations:iQ,handler:async()=>{let e=await o.overview();return{settings:e.settings,agents:e.agents.map(t=>r9(e.settings,t))}}}),i4({name:"get_disk_space_settings",title:"Get disk-space settings",description:"Get global disk thresholds and report timing settings.",inputSchema:e3.object({}),outputSchema:e3.object({settings:ii}),annotations:iQ,handler:async()=>({settings:await o.settings()})}),i4({name:"get_agent_disk_space",title:"Get agent disk space",description:"Get one agent's canonical Derived Data disk-space monitor snapshot.",inputSchema:ic,outputSchema:e3.object({snapshot:iu}),annotations:iQ,handler:async({agentId:e})=>({snapshot:await o.snapshot(e)})}),i4({name:"update_disk_space_settings",title:"Update disk-space settings",description:"Update the global normal and pressure free-space thresholds in GiB.",inputSchema:e3.object({normalThresholdGiB:e3.number().positive(),pressureThresholdGiB:e3.number().positive()}),outputSchema:e3.object({settings:ii}),annotations:iX,handler:async e=>({settings:await o.updateSettings(e)})}),i4({name:"set_agent_disk_space_monitoring",title:"Set agent disk-space monitoring",description:"Enable or disable Derived Data disk-space monitoring for an agent.",inputSchema:ic.extend({enabled:e3.boolean()}),outputSchema:e3.object({snapshot:iu}),annotations:iX,handler:async({agentId:e,enabled:t})=>(await o.setMonitoring(e,t),{snapshot:await o.snapshot(e)})}),i4({name:"set_agent_disk_space_pressure_mode",title:"Set agent disk pressure mode",description:"Enable or clear manual disk pressure mode for an agent.",inputSchema:ic.extend({enabled:e3.boolean()}),outputSchema:e3.object({snapshot:iu}),annotations:iX,handler:async({agentId:e,enabled:t})=>(await o.setManualPressureMode(e,t),{snapshot:await o.snapshot(e)})}),i4({name:"request_agent_disk_space_refresh",title:"Request agent disk-space refresh",description:"Ask an agent to collect and report disk-space telemetry immediately.",inputSchema:ic,outputSchema:e3.object({agentId:e3.string(),requestedAt:e3.string(),previousReportedAt:e3.string().nullable()}),annotations:iX,handler:async({agentId:e})=>o.requestRefresh(e)})]})),e.worktrees&&$.push({id:"builtin:worktrees",name:"Worktrees",children:[],tools:[rp({name:"get_worktrees",title:"Get worktrees",description:"Get the current worktree overview grouped by agent and codebase.",inputSchema:rh,service:l=e.worktrees,method:"overview",arguments:()=>[],resultKey:"overview"}),i4({name:"get_worktree",title:"Get worktree",description:"Get one current worktree by ID.",inputSchema:iW,outputSchema:e3.object({worktree:e3.unknown().nullable()}),handler:async({id:e})=>({worktree:(await l.overview()).agents.flatMap(e=>e.codebases).flatMap(e=>e.worktrees).find(t=>t.id===e)??null})}),rp({name:"get_hidden_worktrees",title:"Get hidden worktrees",description:"List worktrees no longer present on their agents.",inputSchema:rh,service:l,method:"hidden",arguments:()=>[],resultKey:"worktrees"}),rp({name:"inspect_worktree",title:"Inspect worktree",description:"Request a fresh inspection of a worktree.",inputSchema:iJ,service:l,method:"inspect",arguments:e=>[e.worktreeId,e.requestId],resultKey:"job",annotations:iX}),rp({name:"inspect_worktree_diff",title:"Inspect worktree diff",description:"Inspect a worktree diff for a scope, file, or commit.",inputSchema:iJ.extend({scope:e3.string().min(1),path:e3.string().nullable().optional(),previousPath:e3.string().nullable().optional(),commitSha:e3.string().nullable().optional()}),service:l,method:"inspectDiff",arguments:e=>[e.worktreeId,{scope:e.scope,path:e.path,previousPath:e.previousPath,commitSha:e.commitSha},e.requestId],resultKey:"inspection",annotations:iX}),rp({name:"refresh_worktrees",title:"Refresh worktrees",description:"Ask connected agents to refresh their worktree reports.",inputSchema:rh,service:l,method:"requestRefresh",arguments:()=>[],resultKey:"requested",annotations:iX}),rp({name:"refresh_worktree_pull_request",title:"Refresh worktree pull request",description:"Refresh the GitHub pull request attached to a worktree.",inputSchema:iW,service:l,method:"refreshPullRequest",arguments:({id:e})=>[e],resultKey:"worktree",annotations:iX}),rp({name:"create_worktree",title:"Create worktree",description:"Create a worktree from a new, existing, or Jira ticket branch.",inputSchema:e3.object({codebaseId:e3.string().min(1),selection:iz,requestId:e3.string().min(1)}),service:l,method:"createWorktree",resultKey:"worktree",annotations:{...iX,idempotentHint:!1}}),rp({name:"change_worktree_branch",title:"Change worktree branch",description:"Switch a worktree to another branch selection.",inputSchema:e3.object({worktreeId:e3.string().min(1),selection:iz,requestId:e3.string().min(1),stashOnFailure:e3.boolean().nullable().optional()}),service:l,method:"changeWorktreeBranch",resultKey:"job",annotations:iX}),rp({name:"move_worktree",title:"Move worktree",description:"Move work from one worktree into another codebase or worktree.",inputSchema:e3.object({sourceWorktreeId:e3.string().min(1),targetCodebaseId:e3.string().min(1),targetWorktreeId:e3.string().nullable().optional(),deleteSource:e3.boolean().default(!1),requestId:e3.string().min(1)}),service:l,method:"moveWorktree",resultKey:"move",annotations:iX}),rp({name:"retry_worktree_move_with_stash",title:"Retry worktree move with stash",description:"Retry a blocked worktree move after stashing changes.",inputSchema:iW,service:l,method:"retryWorktreeMoveWithStash",arguments:({id:e})=>[e],resultKey:"move",annotations:iX}),rp({name:"cancel_worktree_move",title:"Cancel worktree move",description:"Cancel an active worktree move.",inputSchema:iW,service:l,method:"cancelWorktreeMove",arguments:({id:e})=>[e],resultKey:"move",annotations:iX}),rp({name:"delete_worktree",title:"Delete worktree",description:"Delete a worktree and optionally its remote branch.",inputSchema:e3.object({worktreeId:e3.string().min(1),deleteRemoteBranch:e3.boolean().default(!1),requestId:e3.string().min(1)}),service:l,method:"deleteWorktree",resultKey:"job",annotations:i0}),rp({name:"run_worktree_operation",title:"Run worktree operation",description:"Run a supported high-level operation in a worktree.",inputSchema:iJ.extend({operation:e3.string().min(1)}),service:l,method:"runOperation",arguments:e=>[e.worktreeId,e.operation,e.requestId],resultKey:"job",annotations:iX}),rp({name:"run_worktree_git_operation",title:"Run worktree Git operation",description:"Run a supported Git operation in a worktree.",inputSchema:iJ.extend({operation:e3.string().min(1),branch:e3.string().nullable().optional(),stashOid:e3.string().nullable().optional(),stashChanges:e3.boolean().nullable().optional()}),service:l,method:"runGitOperation",resultKey:"job",annotations:iX}),i4({name:"update_worktree_metadata",title:"Update worktree metadata",description:"Update a worktree base branch and/or highlight color.",inputSchema:e3.object({id:e3.string().min(1),baseBranch:e3.string().nullable().optional(),highlightColor:e3.string().nullable().optional()}),outputSchema:e3.object({worktree:e3.unknown()}),annotations:iX,handler:async({id:e,baseBranch:t,highlightColor:r})=>{let i=null;if(void 0!==t&&(i=await l.updateBaseBranch(e,t)),void 0!==r&&(i=await l.updateHighlight(e,r)),void 0===t&&void 0===r)throw Error("At least one metadata field is required");return{worktree:i}}}),rp({name:"set_worktree_tags",title:"Set worktree tags",description:"Replace the tags assigned to a worktree.",inputSchema:e3.object({id:e3.string().min(1),tagIds:e3.array(e3.string().min(1))}),service:l,method:"setTags",arguments:e=>[e.id,e.tagIds],resultKey:"worktree",annotations:iX})]}),e.runs&&$.push((c=e.runs,{id:"builtin:agent-runs",name:"Agent Runs",children:[],tools:[rp({name:"get_agent_runs",title:"Get agent runs",description:"List agent runs with kind, archive, provider, origin, search, and pagination filters.",inputSchema:e3.object({kind:e3.enum(["SESSION","PLAN"]).default("SESSION"),search:e3.string().nullable().optional(),archive:e3.string().default("ACTIVE"),provider:e3.string().nullable().optional(),origin:e3.string().nullable().optional(),first:e3.number().int().min(1).max(200).default(100),after:e3.string().nullable().optional()}),service:c,method:"list",resultKey:"page"}),rp({name:"get_agent_run",title:"Get agent run",description:"Get an agent run without exposing its native session transcript.",inputSchema:ib,service:c,method:"get",arguments:({runId:e})=>[e],resultKey:"run"}),rp({name:"get_run_events",title:"Get run events",description:"Get normalized run events; native provider payloads are redacted.",inputSchema:ib.extend({search:e3.string().nullable().optional(),afterSequence:e3.number().int().default(-1),first:e3.number().int().min(1).max(500).default(200),includeSuperseded:e3.boolean().default(!1)}),service:c,method:"events",resultKey:"events"}),rp({name:"get_run_questions",title:"Get run questions",description:"Get question batches for a run.",inputSchema:ib.extend({first:e3.number().int().min(1).max(200).default(100),after:e3.string().nullable().optional()}),service:c,method:"questions",resultKey:"page"}),rp({name:"get_run_usage",title:"Get run usage",description:"Get token and cost usage summarized for a run.",inputSchema:ib,service:c,method:"usage",arguments:({runId:e})=>[e],resultKey:"usage"}),rp({name:"get_run_linked_items",title:"Get linked run items",description:"Get runs linked by follow-up, plan, or parent relationships.",inputSchema:ib,service:c,method:"linkedItems",arguments:({runId:e})=>[e],resultKey:"runs"}),rp({name:"get_run_provider_catalog",title:"Get run provider catalog",description:"Get provider, model, and reasoning-effort choices for a run or worktree.",inputSchema:e3.object({runId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional()}),service:c,method:"providerCatalog",resultKey:"providers"}),rp({name:"create_agent_run",title:"Create agent run",description:"Create and queue a new agent run.",inputSchema:iv,service:c,method:"create",resultKey:"run",annotations:{...iX,idempotentHint:!1}}),rp({name:"play_plan",title:"Play plan",description:"Create a run from an existing plan run.",inputSchema:e3.object({planId:e3.string().min(1)}),service:c,method:"playPlan",arguments:({planId:e})=>[e],resultKey:"run",annotations:{...iX,idempotentHint:!1}}),rp({name:"create_run_follow_up",title:"Create run follow-up",description:"Create a follow-up run linked to a source run.",inputSchema:e3.object({sourceId:e3.string().min(1),input:iv}),service:c,method:"followUp",arguments:({sourceId:e,input:t})=>[e,t],resultKey:"run",annotations:{...iX,idempotentHint:!1}}),rp({name:"steer_agent_run",title:"Steer agent run",description:"Send additional guidance to an active run.",inputSchema:ib.extend({prompt:e3.string().min(1),attachmentIds:e3.array(e3.string().min(1)).default([])}),service:c,method:"steer",arguments:e=>[e.runId,e.prompt,e.attachmentIds],resultKey:"run",annotations:iX}),rp({name:"answer_run_question",title:"Answer run question",description:"Answer a pending agent question batch.",inputSchema:e3.object({batchId:e3.string().min(1),answers:e3.unknown()}),service:c,method:"answerQuestion",arguments:({batchId:e,answers:t})=>[e,t],resultKey:"run",annotations:iX}),rp({name:"revise_run_answer",title:"Revise run answer",description:"Revise an answer and optionally stash or roll back worktree changes.",inputSchema:e3.object({batchId:e3.string().min(1),answers:e3.unknown(),stash:e3.boolean().default(!1),rollback:e3.boolean().default(!0)}),service:c,method:"reviseAnswer",arguments:e=>[e.batchId,e.answers,e.stash,e.rollback],resultKey:"run",annotations:iX}),rp({name:"pause_agent_run",title:"Pause agent run",description:"Pause an active agent run.",inputSchema:ib,service:c,method:"lifecycle",arguments:({runId:e})=>[e,"PAUSE"],resultKey:"run",annotations:iX}),rp({name:"continue_agent_run",title:"Continue agent run",description:"Continue a paused agent run.",inputSchema:ib,service:c,method:"lifecycle",arguments:({runId:e})=>[e,"CONTINUE"],resultKey:"run",annotations:iX}),rp({name:"cancel_agent_run",title:"Cancel agent run",description:"Cancel an active agent run.",inputSchema:ib,service:c,method:"lifecycle",arguments:({runId:e})=>[e,"CANCEL"],resultKey:"run",annotations:iX}),rp({name:"archive_agent_runs",title:"Archive agent runs",description:"Archive or restore agent runs.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1),archived:e3.boolean().default(!0)}),service:c,method:"archive",arguments:({ids:e,archived:t})=>[e,t],resultKey:"count",annotations:iX}),rp({name:"delete_agent_runs",title:"Delete agent runs",description:"Permanently delete agent runs and their stored normalized history.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),service:c,method:"deleteRuns",arguments:({ids:e})=>[e],resultKey:"count",annotations:i0})]})),e.commands&&$.push((d=e.commands,{id:"builtin:commands",name:"Commands",children:[],tools:[rp({name:"get_commands",title:"Get commands",description:"List saved command definitions.",inputSchema:e3.object({includeArchived:e3.boolean().default(!1)}),service:d,method:"listDefinitions",arguments:({includeArchived:e})=>[e],resultKey:"commands"}),rp({name:"get_command",title:"Get command",description:"Get one command definition.",inputSchema:e3.object({id:e3.string().min(1)}),service:d,method:"getDefinition",arguments:({id:e})=>[e],resultKey:"command"}),i4({name:"get_eligible_commands",title:"Get eligible commands",description:"List commands eligible for an agent or worktree target.",inputSchema:e3.discriminatedUnion("targetType",[e3.object({targetType:e3.literal("AGENT"),agentId:e3.string().min(1)}),e3.object({targetType:e3.literal("WORKTREE"),worktreeId:e3.string().min(1)})]),outputSchema:e3.object({commands:e3.unknown()}),handler:async e=>({commands:rd(await ru(d,"AGENT"===e.targetType?"eligibleForAgent":"eligibleForWorktree",["AGENT"===e.targetType?e.agentId:e.worktreeId]))})}),rp({name:"get_command_runs",title:"Get command runs",description:"List command runs with target, archive, search, and cursor filters.",inputSchema:e3.object({includeArchived:e3.boolean().default(!1),search:e3.string().nullable().optional(),agentId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional(),first:e3.number().int().min(1).max(200).default(50),after:e3.string().nullable().optional()}),service:d,method:"listRuns",resultKey:"page"}),rp({name:"get_command_run",title:"Get command run",description:"Get one command run and its attempts.",inputSchema:e3.object({id:e3.string().min(1)}),service:d,method:"getRun",arguments:({id:e})=>[e],resultKey:"run"}),rp({name:"get_command_run_output",title:"Get command run output",description:"Read paginated terminal output chunks for a command run.",inputSchema:e3.object({runId:e3.string().min(1),afterAttempt:e3.number().int().min(0).default(0),afterSequence:e3.number().int().default(-1),first:e3.number().int().min(1).max(5e3).default(1e3)}),service:d,method:"listOutput",arguments:e=>[e.runId,e.afterAttempt,e.afterSequence,e.first],resultKey:"chunks"}),rp({name:"start_command",title:"Start command",description:"Start a saved command on an eligible agent or worktree.",inputSchema:e3.object({commandId:e3.string().min(1),agentId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional(),origin:e3.string().default("MANUAL"),idempotencyKey:e3.string().nullable().optional()}),service:d,method:"startRun",resultKey:"run",annotations:iX}),rp({name:"start_custom_command",title:"Start custom command",description:"Start an ad hoc shell command on an agent or worktree.",inputSchema:e3.object({script:e3.string().min(1),agentId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional(),origin:e3.string().default("MANUAL"),idempotencyKey:e3.string().nullable().optional()}),service:d,method:"startCustomRun",resultKey:"run",annotations:iX}),rp({name:"terminate_command_run",title:"Terminate command run",description:"Request termination of an active command run.",inputSchema:e3.object({id:e3.string().min(1)}),service:d,method:"terminateRun",arguments:({id:e})=>[e],resultKey:"run",annotations:iX}),rp({name:"rerun_command",title:"Rerun command",description:"Create a new run from a previous command snapshot.",inputSchema:e3.object({id:e3.string().min(1)}),service:d,method:"rerun",arguments:({id:e})=>[e],resultKey:"run",annotations:{...iX,idempotentHint:!1}}),rp({name:"create_command",title:"Create command",description:"Create a saved command definition.",inputSchema:id,service:d,method:"createDefinition",resultKey:"command",annotations:{...iX,idempotentHint:!1}}),rp({name:"update_command",title:"Update command",description:"Replace a saved command definition.",inputSchema:e3.object({id:e3.string().min(1),input:id}),service:d,method:"updateDefinition",arguments:({id:e,input:t})=>[e,t],resultKey:"command",annotations:iX}),rp({name:"archive_command",title:"Archive command",description:"Archive or restore a command definition.",inputSchema:e3.object({id:e3.string().min(1),archived:e3.boolean().default(!0)}),service:d,method:"archiveDefinition",arguments:({id:e,archived:t})=>[e,t],resultKey:"command",annotations:iX}),rp({name:"archive_command_runs",title:"Archive command runs",description:"Archive or restore command runs.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1),archived:e3.boolean().default(!0)}),service:d,method:"archiveRuns",arguments:({ids:e,archived:t})=>[e,t],resultKey:"updated",annotations:iX}),rp({name:"delete_command_runs",title:"Delete command runs",description:"Permanently delete command runs and stored output.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),service:d,method:"deleteRuns",arguments:({ids:e})=>[e],resultKey:"count",annotations:i0})]})),e.jira&&$.push((p=e.jira,{id:"builtin:jira",name:"Jira",children:[],tools:[rp({name:"get_jira_status",title:"Get Jira status",description:"Test the configured Jira connection without exposing credentials.",inputSchema:e3.object({}),service:p,method:"testConnection",arguments:()=>[],resultKey:"status",annotations:i1}),rp({name:"get_jira_projects",title:"Get Jira projects",description:"List configured Jira projects and display settings.",inputSchema:e3.object({}),service:p,method:"listProjects",arguments:()=>[],resultKey:"projects",annotations:i1}),i4({name:"get_jira_sources",title:"Get Jira sources",description:"List ticket-board sources configured across Jira projects.",inputSchema:e3.object({}),outputSchema:e3.object({sources:e3.unknown()}),annotations:i1,handler:async()=>({sources:rd((await p.listProjects()).flatMap(e=>e.sources))})}),rp({name:"get_jira_board",title:"Get Jira board",description:"Get tickets for a configured Jira source.",inputSchema:e3.object({sourceId:e3.string().min(1),refresh:e3.boolean().default(!1)}),service:p,method:"ticketBoard",arguments:({sourceId:e,refresh:t})=>[e,t],resultKey:"board",annotations:i1}),rp({name:"get_jira_ticket",title:"Get Jira ticket",description:"Get a Jira ticket and its normalized editable metadata.",inputSchema:ig.extend({refresh:e3.boolean().default(!1)}),service:p,method:"ticket",arguments:({issueKey:e,refresh:t})=>[e,t],resultKey:"ticket",annotations:i1}),rp({name:"get_jira_assignable_users",title:"Get Jira assignable users",description:"Search users who can be assigned to a Jira ticket.",inputSchema:ig.extend({query:e3.string().default("")}),service:p,method:"assignableUsers",arguments:({issueKey:e,query:t})=>[e,t],resultKey:"users",annotations:i1}),rp({name:"get_jira_transitions",title:"Get Jira transitions",description:"Get available transitions for a Jira ticket.",inputSchema:ig,service:p,method:"ticketTransitions",arguments:({issueKey:e})=>[e],resultKey:"transitions",annotations:i1}),rp({name:"get_jira_edit_fields",title:"Get Jira edit fields",description:"Get editable fields and allowed values for a Jira ticket.",inputSchema:ig,service:p,method:"ticketEditFields",arguments:({issueKey:e})=>[e],resultKey:"fields",annotations:i1}),rp({name:"get_jira_ticket_changes",title:"Get Jira ticket changes",description:"Get paginated Jira ticket changelog entries.",inputSchema:ig.extend({limit:e3.number().int().min(1).max(200).default(50),offset:e3.number().int().min(0).default(0)}),service:p,method:"ticketChanges",arguments:e=>[e.issueKey,e.limit,e.offset],resultKey:"page",annotations:i1}),rp({name:"get_jira_worklogs",title:"Get Jira worklogs",description:"Get paginated worklogs for a Jira ticket.",inputSchema:ig.extend({limit:e3.number().int().min(1).max(200).default(50),offset:e3.number().int().min(0).default(0)}),service:p,method:"ticketWorklogs",arguments:e=>[e.issueKey,e.limit,e.offset],resultKey:"page",annotations:i1}),rp({name:"add_jira_comment",title:"Add Jira comment",description:"Add a plain-text or Markdown comment to a Jira ticket.",inputSchema:ig.extend({content:iy}),service:p,method:"addComment",arguments:({issueKey:e,content:t})=>[e,t],resultKey:"ticket",annotations:{...i2,idempotentHint:!1}}),rp({name:"assign_jira_ticket",title:"Assign Jira ticket",description:"Assign or unassign a Jira ticket.",inputSchema:ig.extend({accountId:e3.string().nullable().optional()}),service:p,method:"assignTicket",arguments:({issueKey:e,accountId:t})=>[e,t??null],resultKey:"ticket",annotations:i2}),rp({name:"transition_jira_ticket",title:"Transition Jira ticket",description:"Apply an available status transition to a Jira ticket.",inputSchema:ig.extend({transitionId:e3.string().min(1)}),service:p,method:"transitionTicket",arguments:({issueKey:e,transitionId:t})=>[e,t],resultKey:"ticket",annotations:i2}),rp({name:"update_jira_ticket",title:"Update Jira ticket",description:"Update supported editable fields on a Jira ticket.",inputSchema:ig.extend({summary:e3.string().nullable().optional(),description:iy.nullable().optional(),priorityId:e3.string().nullable().optional(),labels:e3.array(e3.string()).nullable().optional(),componentIds:e3.array(e3.string()).nullable().optional(),fixVersionIds:e3.array(e3.string()).nullable().optional(),affectedVersionIds:e3.array(e3.string()).nullable().optional(),dueDate:e3.string().nullable().optional()}),service:p,method:"updateTicket",resultKey:"ticket",annotations:i2}),rp({name:"resolve_jira_branch",title:"Resolve Jira branch",description:"Resolve the configured branch name for a Jira ticket.",inputSchema:ig,service:p,method:"branchTicket",arguments:({issueKey:e})=>[e],resultKey:"branch",annotations:i1}),rp({name:"create_jira_ticket",title:"Create Jira ticket",description:"Create a Jira ticket with typed core fields and optional additional fields.",inputSchema:e3.object({projectKey:e3.string().min(1),issueTypeId:e3.string().min(1),summary:e3.string().min(1),description:iy.nullable().optional(),fields:e3.record(e3.string(),e3.unknown()).nullable().optional()}),service:p,method:"createTicket",resultKey:"ticket",annotations:{...i2,idempotentHint:!1}}),rp({name:"add_jira_worklog",title:"Add Jira worklog",description:"Add a time-spent worklog to a Jira ticket.",inputSchema:ig.extend({timeSpentSeconds:e3.number().int().positive(),startedAt:e3.string().nullable().optional(),comment:iy.nullable().optional()}),service:p,method:"addWorklog",resultKey:"ticket",annotations:{...i2,idempotentHint:!1}}),rp({name:"link_jira_tickets",title:"Link Jira tickets",description:"Create a typed relationship between two Jira tickets.",inputSchema:e3.object({inwardIssueKey:e3.string().min(1),outwardIssueKey:e3.string().min(1),linkType:e3.string().min(1)}),service:p,method:"linkTickets",resultKey:"ticket",annotations:{...i2,idempotentHint:!1}})]})),e.github&&$.push((h=e.github,{id:"builtin:github",name:"GitHub",children:[],tools:[rp({name:"get_github_status",title:"Get GitHub status",description:"Test the configured GitHub connection without exposing credentials.",inputSchema:e3.object({}),service:h,method:"testConnection",arguments:()=>[],resultKey:"status",annotations:i1}),rp({name:"get_github_repositories",title:"Get GitHub repositories",description:"List configured GitHub repositories.",inputSchema:e3.object({}),service:h,method:"listRepositories",arguments:()=>[],resultKey:"repositories",annotations:i1}),rp({name:"get_pull_requests",title:"Get pull requests",description:"List GitHub pull requests by scope, repository, and state.",inputSchema:e3.object({scope:e3.enum(["MINE","REVIEW_REQUESTED","REPOSITORY"]),repositoryId:e3.string().nullable().optional(),state:e3.enum(["ALL","OPEN","CLOSED","MERGED"]).default("OPEN"),first:e3.number().int().min(1).max(100).default(25),after:e3.string().nullable().optional(),includePipelineJobs:e3.boolean().default(!1)}),service:h,method:"pullRequests",arguments:e=>[e.scope,e.repositoryId,{includePipelineJobs:e.includePipelineJobs,state:e.state,first:e.first,after:e.after,requestSource:ip}],resultKey:"page",annotations:i1}),rp({name:"get_pull_request",title:"Get pull request",description:"Get a GitHub pull request by repository and number.",inputSchema:im,service:h,method:"pullRequest",arguments:e=>[e.owner,e.name,e.number,ip],resultKey:"pullRequest",annotations:i1}),rp({name:"get_pull_request_merge_options",title:"Get pull request merge options",description:"Get merge eligibility, methods, and commit-email choices for a pull request.",inputSchema:im,service:h,method:"pullRequestMergeOptions",arguments:e=>[e.owner,e.name,e.number,ip],resultKey:"options",annotations:i1}),rp({name:"get_review_threads",title:"Get review threads",description:"List tracked GitHub review threads.",inputSchema:e3.object({}),service:h,method:"reviewThreads",arguments:()=>[],resultKey:"threads",annotations:i1}),rp({name:"get_actions_runs",title:"Get Actions runs",description:"List GitHub Actions workflow runs with repository and branch filters.",inputSchema:e3.object({codebaseRepositoryId:e3.string().nullable().optional(),branch:e3.string().nullable().optional(),workflowId:e3.string().nullable().optional(),first:e3.number().int().min(1).max(100).default(25),after:e3.string().nullable().optional()}),service:h,method:"actionsWorkflowRuns",arguments:e=>[e.codebaseRepositoryId,e.first,e.after,e.branch,e.workflowId,ip],resultKey:"page",annotations:i1}),rp({name:"get_actions_jobs",title:"Get Actions jobs",description:"Get jobs for a GitHub Actions workflow run.",inputSchema:e3.object({codebaseRepositoryId:e3.string().min(1),workflowRunId:e3.string().min(1)}),service:h,method:"actionsWorkflowJobs",arguments:e=>[e.codebaseRepositoryId,e.workflowRunId,ip],resultKey:"jobs",annotations:i1}),rp({name:"get_actions_run_attempt",title:"Get Actions run attempt",description:"Get one attempt of a GitHub Actions workflow run.",inputSchema:e3.object({repositoryId:e3.string().min(1),workflowRunId:e3.string().min(1),attempt:e3.number().int().positive(),includeJobs:e3.boolean().default(!0)}),service:h,method:"actionsWorkflowRunAttempt",arguments:e=>[e.repositoryId,e.workflowRunId,e.attempt,e.includeJobs,ip],resultKey:"attempt",annotations:i1}),rp({name:"get_repository_workflows",title:"Get repository workflows",description:"List GitHub Actions workflows for a configured repository.",inputSchema:e3.object({codebaseRepositoryId:e3.string().min(1)}),service:h,method:"repositoryWorkflows",arguments:({codebaseRepositoryId:e})=>[e,ip],resultKey:"workflows",annotations:i1}),rp({name:"get_auto_retry_rules",title:"Get auto-retry rules",description:"List GitHub pipeline auto-retry rules.",inputSchema:e3.object({codebaseRepositoryId:e3.string().nullable().optional(),workflowRunId:e3.string().nullable().optional()}),service:h,method:"autoRetryRules",resultKey:"rules",annotations:i1}),rp({name:"get_github_rate_limits",title:"Get GitHub rate limits",description:"Get recently observed GitHub API rate-limit snapshots.",inputSchema:e3.object({}),service:h,method:"rateLimitSnapshots",arguments:()=>[],resultKey:"snapshots",annotations:i1}),rp({name:"create_pull_request",title:"Create pull request",description:"Create a GitHub pull request using configured GitHub App credentials.",inputSchema:e3.object({owner:e3.string().min(1),name:e3.string().min(1),baseRefName:e3.string().min(1),headRefName:e3.string().min(1),title:e3.string().min(1),body:e3.string().nullable().optional(),draft:e3.boolean().nullable().optional()}),service:h,method:"createPullRequest",resultKey:"pullRequest",annotations:{...i2,idempotentHint:!1}}),rp({name:"update_pull_request",title:"Update pull request",description:"Update a pull request title, body, or draft state on GitHub.",inputSchema:im.extend({title:e3.string().nullable().optional(),body:e3.string().nullable().optional(),draft:e3.boolean().nullable().optional()}),service:h,method:"updatePullRequest",resultKey:"pullRequest",annotations:i2}),rp({name:"submit_pull_request_review",title:"Submit pull request review",description:"Approve, comment on, or request changes to a pull request.",inputSchema:im.extend({event:e3.enum(["APPROVE","REQUEST_CHANGES","COMMENT"]),body:e3.string().nullable().optional()}),service:h,method:"submitPullRequestReview",resultKey:"pullRequest",annotations:{...i2,idempotentHint:!1}}),rp({name:"request_pull_request_reviewers",title:"Request pull request reviewers",description:"Request GitHub users or organization teams to review a pull request.",inputSchema:im.extend({reviewers:e3.array(e3.string()).default([]),teamReviewers:e3.array(e3.string()).default([])}),service:h,method:"requestPullRequestReviewers",resultKey:"pullRequest",annotations:i2}),rp({name:"dispatch_github_workflow",title:"Dispatch GitHub workflow",description:"Dispatch a workflow_dispatch-enabled GitHub Actions workflow.",inputSchema:e3.object({repositoryId:e3.string().min(1),workflowId:e3.string().min(1),ref:e3.string().min(1),inputs:e3.record(e3.string(),e3.string()).nullable().optional()}),service:h,method:"dispatchWorkflow",resultKey:"dispatched",annotations:{...i2,idempotentHint:!1}}),rp({name:"merge_pull_request",title:"Merge pull request",description:"Merge a GitHub pull request with an enabled merge method.",inputSchema:im.extend({method:e3.enum(["MERGE","SQUASH","REBASE"]),commitHeadline:e3.string().min(1),commitBody:e3.string().default(""),authorEmail:e3.string().nullable().optional()}),service:h,method:"mergePullRequest",arguments:e=>[e,ip],resultKey:"pullRequest",annotations:i2}),rp({name:"set_pull_request_labels",title:"Set pull request labels",description:"Replace labels on a GitHub pull request.",inputSchema:im.extend({labels:e3.array(e3.string())}),service:h,method:"setPullRequestLabels",resultKey:"pullRequest",annotations:i2}),rp({name:"reply_review_thread",title:"Reply to review thread",description:"Post a reply to a GitHub pull-request review thread.",inputSchema:e3.object({threadId:e3.string().min(1),body:e3.string().min(1)}),service:h,method:"replyToReviewThread",arguments:({threadId:e,body:t})=>[e,t],resultKey:"thread",annotations:{...i2,idempotentHint:!1}}),rp({name:"set_review_thread_resolved",title:"Set review thread resolved",description:"Resolve or unresolve a GitHub review thread.",inputSchema:e3.object({threadId:e3.string().min(1),resolved:e3.boolean()}),service:h,method:"setReviewThreadResolved",arguments:({threadId:e,resolved:t})=>[e,t],resultKey:"thread",annotations:i2}),rp({name:"retry_pipeline",title:"Retry pipeline",description:"Retry a failed GitHub check suite.",inputSchema:e3.object({repositoryId:e3.string().min(1),checkSuiteId:e3.string().min(1)}),service:h,method:"retryPipeline",arguments:e=>[e.repositoryId,e.checkSuiteId,ip,ih],resultKey:"pipeline",annotations:i2}),rp({name:"retry_workflow_job",title:"Retry workflow job",description:"Retry one failed job in a GitHub Actions workflow run.",inputSchema:e3.object({repositoryId:e3.string().min(1),checkSuiteId:e3.string().min(1),jobId:e3.string().min(1)}),service:h,method:"retryWorkflowJob",arguments:e=>[e.repositoryId,e.checkSuiteId,e.jobId,ip,ih],resultKey:"job",annotations:i2}),rp({name:"cancel_actions_run",title:"Cancel Actions run",description:"Cancel a GitHub Actions workflow run.",inputSchema:e3.object({codebaseRepositoryId:e3.string().min(1),workflowRunId:e3.string().min(1),force:e3.boolean().default(!1)}),service:h,method:"cancelActionsWorkflowRun",arguments:e=>[e.codebaseRepositoryId,e.workflowRunId,e.force,ip,ih],resultKey:"run",annotations:i2}),rp({name:"save_auto_retry_rule",title:"Save auto-retry rule",description:"Create or update a GitHub pipeline auto-retry rule.",inputSchema:e3.object({id:e3.string().nullable().optional(),scope:e3.string().min(1),codebaseRepositoryId:e3.string().min(1),repositoryGithubId:e3.string().nullable().optional(),worktreeId:e3.string().nullable().optional(),branch:e3.string().nullable().optional(),pullRequestNumber:e3.number().int().positive().nullable().optional(),allWorkflows:e3.boolean(),mode:e3.string().min(1),retryLimit:e3.number().int().min(0).nullable().optional(),failureStrategy:e3.string().min(1),targets:e3.array(e3.object({workflowId:e3.string().nullable().optional(),workflowRunId:e3.string().nullable().optional(),jobName:e3.string().nullable().optional()}))}),service:h,method:"saveAutoRetryRule",resultKey:"rule",annotations:i2})]})),e.skills&&$.push((m=e.skills,{id:"builtin:skills",name:"Skills",children:[],tools:[rp({name:"get_skills_overview",title:"Get skills overview",description:"List skills, groups, installations, and sync status.",inputSchema:e3.object({search:e3.string().default("")}),service:m,method:"overview",arguments:({search:e})=>[e],resultKey:"overview"}),rp({name:"get_skill",title:"Get skill",description:"Get one skill and its deployments.",inputSchema:e3.object({id:e3.string().min(1)}),service:m,method:"getSkill",arguments:({id:e})=>[e],resultKey:"skill"}),i4({name:"get_skill_groups",title:"Get skill groups",description:"Get skill groups, optionally for one repository.",inputSchema:e3.object({repositoryId:e3.string().nullable().optional()}),outputSchema:e3.object({groups:e3.unknown()}),handler:async({repositoryId:e})=>({groups:rd(e?await m.groupsForRepository(e):(await m.overview()).groups)})}),rp({name:"get_skill_sync_run",title:"Get skill sync run",description:"Inspect a skill synchronization run and its conflicts.",inputSchema:e3.object({id:e3.string().min(1)}),service:m,method:"getRun",arguments:({id:e})=>[e],resultKey:"run"}),rp({name:"save_skill",title:"Save skill",description:"Create or update a managed skill.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:m,method:"saveSkill",arguments:({input:e})=>[e],resultKey:"skill",annotations:iX}),rp({name:"delete_skill",title:"Delete skill",description:"Delete a managed skill and its associations.",inputSchema:e3.object({id:e3.string().min(1)}),service:m,method:"deleteSkill",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i0}),rp({name:"save_skill_group",title:"Save skill group",description:"Create or update a managed skill group.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:m,method:"saveGroup",arguments:({input:e})=>[e],resultKey:"group",annotations:iX}),rp({name:"delete_skill_group",title:"Delete skill group",description:"Delete a managed skill group.",inputSchema:e3.object({id:e3.string().min(1)}),service:m,method:"deleteGroup",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i0}),rp({name:"update_skill_settings",title:"Update skill settings",description:"Update managed skill locations and reconciliation settings.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:m,method:"saveSettings",arguments:({input:e})=>[e],resultKey:"settings",annotations:iX}),rp({name:"prepare_skill_sync",title:"Prepare skill sync",description:"Prepare a push or pull skill synchronization run.",inputSchema:e3.object({kind:e3.enum(["ALL","GROUP"]),groupId:e3.string().nullable().optional()}),service:m,method:"prepareSync",arguments:({kind:e,groupId:t})=>[e,t??null],resultKey:"run",annotations:iX}),rp({name:"resolve_skill_sync_conflict",title:"Resolve skill sync conflict",description:"Choose a resolution for one skill synchronization conflict.",inputSchema:e3.object({input:e3.record(e3.string(),e3.unknown())}),service:m,method:"resolveItem",arguments:({input:e})=>[e],resultKey:"run",annotations:iX}),rp({name:"skip_skill_sync",title:"Skip skill sync",description:"Skip remaining pending work in a skill synchronization run.",inputSchema:e3.object({runId:e3.string().min(1)}),service:m,method:"skipPending",arguments:({runId:e})=>[e],resultKey:"run",annotations:iX}),rp({name:"apply_skill_sync",title:"Apply skill sync",description:"Apply all resolved items in a prepared skill synchronization run.",inputSchema:e3.object({runId:e3.string().min(1)}),service:m,method:"applyRun",arguments:({runId:e})=>[e],resultKey:"run",annotations:iX})]})),e.buildData&&$.push((f=e.buildData,{id:"builtin:build-data",name:"Build Data",children:[],tools:[rp({name:"get_build_data_collection",title:"Get build data collection",description:"Get a derived-data collection and its entries.",inputSchema:e3.object({id:e3.string().min(1)}),service:f,method:"getCollection",arguments:({id:e})=>[e],resultKey:"collection"}),rp({name:"get_build_data_deletion_history",title:"Get build data deletion history",description:"Get paginated build-data cleanup history.",inputSchema:e3.object({first:e3.number().int().min(1).max(500).default(100),after:e3.string().nullable().optional()}),service:f,method:"history",arguments:({first:e,after:t})=>[e,t],resultKey:"page"}),rp({name:"refresh_build_data",title:"Refresh build data",description:"Collect current derived-data entries from enrolled agents.",inputSchema:e3.object({requestId:e3.string().nullable().optional()}),service:f,method:"refresh",arguments:({requestId:e})=>[e],resultKey:"collection",annotations:iX}),rp({name:"calculate_build_data_sizes",title:"Calculate build data sizes",description:"Calculate accurate sizes for selected build-data entries.",inputSchema:e3.object({collectionId:e3.string().min(1),entryIds:e3.array(e3.string().min(1)).min(1),requestId:e3.string().min(1)}),service:f,method:"calculateSizes",arguments:e=>[e.collectionId,e.entryIds,e.requestId],resultKey:"collection",annotations:iX}),rp({name:"delete_build_data_entries",title:"Delete build data entries",description:"Delete selected derived-data entries from their agents.",inputSchema:e3.object({collectionId:e3.string().min(1),entryIds:e3.array(e3.string().min(1)).min(1),requestId:e3.string().min(1),overrideProtection:e3.boolean().default(!1)}),service:f,method:"deleteEntries",arguments:e=>[e.collectionId,e.entryIds,e.requestId,e.overrideProtection],resultKey:"collection",annotations:i0}),rp({name:"clear_build_data_history",title:"Clear build data history",description:"Permanently clear build-data deletion history.",inputSchema:e3.object({}),service:f,method:"clearHistory",arguments:()=>[],resultKey:"count",annotations:i0}),rp({name:"set_build_data_lock",title:"Set build data lock",description:"Lock or unlock a build-data entry to control cleanup eligibility.",inputSchema:e3.object({collectionId:e3.string().min(1),entryId:e3.string().min(1),locked:e3.boolean()}),service:f,method:"setEntryLocked",arguments:e=>[e.collectionId,e.entryId,e.locked],resultKey:"entry",annotations:iX})]})),e.signingAssets&&$.push((g=e.signingAssets,{id:"builtin:signing-assets",name:"Signing Assets",children:[],tools:[rp({name:"get_signing_agents",title:"Get signing agents",description:"List agents and signing-asset availability.",inputSchema:e3.object({}),service:g,method:"agents",arguments:()=>[],resultKey:"agents"}),rp({name:"get_signing_profiles",title:"Get signing profiles",description:"List provisioning-profile metadata without profile contents.",inputSchema:e3.object({}),service:g,method:"profiles",arguments:()=>[],resultKey:"profiles"}),rp({name:"get_signing_profile",title:"Get signing profile",description:"Get one provisioning profile and matched devices.",inputSchema:e3.object({id:e3.string().min(1)}),service:g,method:"profile",arguments:({id:e})=>[e],resultKey:"profile"}),rp({name:"get_signing_certificates",title:"Get signing certificates",description:"List signing-certificate metadata without private keys or P12 files.",inputSchema:e3.object({}),service:g,method:"certificates",arguments:()=>[],resultKey:"certificates"}),rp({name:"get_signing_operations",title:"Get signing operations",description:"List recent signing-asset operation history.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(50)}),service:g,method:"operations",arguments:({limit:e})=>[e],resultKey:"operations"}),rp({name:"get_apple_portal_inventory",title:"Get Apple portal inventory",description:"Get provisioning profiles, certificates, devices, and identifiers visible in the Apple Developer portal.",inputSchema:e3.object({}),service:g,method:"portalInventory",arguments:()=>[],resultKey:"inventory",annotations:i1}),rp({name:"refresh_signing_assets",title:"Refresh signing assets",description:"Refresh signing-asset inventory from selected or all agents.",inputSchema:e3.object({agentIds:e3.array(e3.string().min(1)).optional()}),service:g,method:"refresh",arguments:({agentIds:e})=>[e],resultKey:"operation",annotations:iX}),rp({name:"download_signing_profile",title:"Download signing profile",description:"Download an Apple provisioning profile to an agent; profile contents are not returned.",inputSchema:e3.object({uuid:e3.string().min(1),agentId:e3.string().min(1)}),service:g,method:"downloadProfile",arguments:e=>[e.uuid,e.agentId],resultKey:"operation",mapResult:e=>({uuid:"string"==typeof e.uuid?e.uuid:null,filename:"string"==typeof e.filename?e.filename:null}),annotations:iX}),rp({name:"sync_signing_profile",title:"Sync signing profile",description:"Synchronize a provisioning profile between agents.",inputSchema:e3.object({uuid:e3.string().min(1),sourceAgentId:e3.string().min(1),targetAgentIds:e3.array(e3.string().min(1)).min(1)}),service:g,method:"syncProfile",arguments:e=>[e.uuid,e.sourceAgentId,e.targetAgentIds],resultKey:"operation",annotations:iX}),rp({name:"delete_signing_profile",title:"Delete signing profile",description:"Delete a provisioning profile from selected agents.",inputSchema:e3.object({uuid:e3.string().min(1),agentIds:e3.array(e3.string().min(1)).min(1)}),service:g,method:"deleteProfile",arguments:e=>[e.uuid,e.agentIds],resultKey:"operation",annotations:i0}),rp({name:"delete_expired_signing_profiles",title:"Delete expired signing profiles",description:"Delete expired provisioning profiles from selected or all agents.",inputSchema:e3.object({agentIds:e3.array(e3.string().min(1)).optional()}),service:g,method:"deleteExpiredProfiles",arguments:({agentIds:e})=>[e],resultKey:"operation",annotations:i0})]})),e.iosDevices&&$.push((y=e.iosDevices,{id:"builtin:ios-devices",name:"iOS Devices",children:[],tools:[rp({name:"get_ios_devices",title:"Get iOS devices",description:"List enrolled and pending iOS devices.",inputSchema:e3.object({status:e3.enum(["PENDING","REGISTERING","REGISTERED","REGISTRATION_FAILED","REJECTED"]).nullable().optional()}),service:y,method:"devices",arguments:({status:e})=>[e],resultKey:"devices"}),rp({name:"get_ios_device",title:"Get iOS device",description:"Get one enrolled or pending iOS device.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"device",arguments:({id:e})=>[e],resultKey:"device"}),rp({name:"get_ios_device_firmware",title:"Get iOS device firmware",description:"Get firmware metadata discovered for an iOS device.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"deviceFirmware",arguments:({id:e})=>[e],resultKey:"firmware"}),rp({name:"get_ios_device_settings",title:"Get iOS device settings",description:"Get redacted enrollment and App Store Connect settings.",inputSchema:e3.object({}),service:y,method:"getSettings",arguments:()=>[],resultKey:"settings"}),rp({name:"rename_ios_device",title:"Rename iOS device",description:"Change the display name of an iOS device.",inputSchema:e3.object({id:e3.string().min(1),displayName:e3.string().min(1)}),service:y,method:"renameDevice",arguments:e=>[e.id,e.displayName],resultKey:"device",annotations:i2}),rp({name:"register_ios_device",title:"Register iOS device",description:"Register a pending iOS device with the Apple Developer portal.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"registerDevice",arguments:({id:e})=>[e],resultKey:"device",annotations:i2}),rp({name:"reject_ios_device",title:"Reject iOS device",description:"Reject a pending iOS device enrollment.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"rejectDevice",arguments:({id:e})=>[e],resultKey:"device",annotations:i2}),rp({name:"delete_ios_device",title:"Delete iOS device",description:"Permanently delete an iOS device record.",inputSchema:e3.object({id:e3.string().min(1)}),service:y,method:"deleteDevice",arguments:({id:e})=>[e],resultKey:"deleted",annotations:i3})]})),e.notifications&&$.push((w=e.notifications,{id:"builtin:notifications",name:"Notifications",children:[],tools:[rp({name:"get_notification_history",title:"Get notification history",description:"Get paginated application notification history.",inputSchema:e3.object({first:e3.number().int().min(1).max(500).default(100),after:e3.string().nullable().optional()}),service:w,method:"history",resultKey:"page"}),rp({name:"get_notification_preferences",title:"Get notification preferences",description:"Get notification-category preferences.",inputSchema:e3.object({}),service:w,method:"preferences",arguments:()=>[],resultKey:"preferences"}),rp({name:"get_notification_sidebar",title:"Get notification sidebar",description:"Get unread and recent notification sidebar state.",inputSchema:e3.object({limit:e3.number().int().min(1).max(200).default(25)}),service:w,method:"sidebar",arguments:({limit:e})=>[e],resultKey:"sidebar"}),rp({name:"get_web_push_status",title:"Get web-push status",description:"Get redacted web-push readiness and subscription status.",inputSchema:e3.object({}),service:w,method:"webPushState",arguments:()=>[],resultKey:"status",annotations:i1}),rp({name:"update_notification_preference",title:"Update notification preference",description:"Update one notification-category preference.",inputSchema:e3.object({input:e3.object({typeKey:e3.string().min(1),sidebarEnabled:e3.boolean(),browserEnabled:e3.boolean(),webPushEnabled:e3.boolean()})}),service:w,method:"savePreference",arguments:({input:e})=>[e],resultKey:"preference",annotations:iX}),rp({name:"dismiss_notification",title:"Dismiss notification",description:"Dismiss one application notification.",inputSchema:e3.object({id:e3.string().min(1)}),service:w,method:"dismiss",arguments:({id:e})=>[e],resultKey:"dismissed",annotations:iX}),rp({name:"dismiss_all_notifications",title:"Dismiss all notifications",description:"Dismiss every current application notification.",inputSchema:e3.object({}),service:w,method:"dismissAll",arguments:()=>[],resultKey:"count",annotations:iX}),rp({name:"delete_notifications",title:"Delete notifications",description:"Permanently delete notifications selected by IDs or filters.",inputSchema:e3.object({selection:e3.object({all:e3.boolean().nullable().optional(),ids:e3.array(e3.string().min(1)).nullable().optional(),excludedIds:e3.array(e3.string().min(1)).nullable().optional(),ranges:e3.array(e3.object({start:iw.iso.datetime(),end:iw.iso.datetime()})).nullable().optional(),excludedRanges:e3.array(e3.object({start:iw.iso.datetime(),end:iw.iso.datetime()})).nullable().optional()})}),service:w,method:"deleteSelection",arguments:({selection:e})=>[e],resultKey:"count",annotations:i0}),rp({name:"test_web_push_subscription",title:"Test web-push subscription",description:"Send a test notification to a saved web-push subscription.",inputSchema:e3.object({id:e3.string().min(1)}),service:w,method:"testWebPushSubscription",arguments:({id:e})=>[e],resultKey:"sent",annotations:i2})]})),e.ccusage&&e.modelCosts&&$.push((b=e.ccusage,v=e.modelCosts,{id:"builtin:usage-costs",name:"Usage and Costs",children:[],tools:[rp({name:"collect_ccusage",title:"Collect ccusage",description:"Collect current local AI-provider usage from enrolled agents.",inputSchema:e3.object({requestId:e3.string().nullable().optional()}),service:b,method:"collect",arguments:({requestId:e})=>[e],resultKey:"collection",annotations:iX}),rp({name:"get_ccusage_collection",title:"Get ccusage collection",description:"Get a usage collection and aggregated model usage.",inputSchema:e3.object({id:e3.string().min(1)}),service:b,method:"getCollection",arguments:({id:e})=>[e],resultKey:"collection"}),rp({name:"get_model_cost_catalog",title:"Get model cost catalog",description:"Get the active model-pricing catalog and refresh metadata.",inputSchema:e3.object({}),service:v,method:"getCatalog",arguments:()=>[],resultKey:"catalog",annotations:i1}),rp({name:"get_model_cost_entries",title:"Get model cost entries",description:"List model-pricing entries with search and pagination.",inputSchema:e3.object({search:e3.string().nullable().optional(),first:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0),sortKey:e3.enum(["MODEL","PROVIDER","INPUT","OUTPUT","UPDATED_AT"]).default("MODEL"),direction:e3.enum(["ASC","DESC"]).default("ASC")}),service:v,method:"listEntries",resultKey:"page"}),rp({name:"refresh_model_costs",title:"Refresh model costs",description:"Refresh the model-pricing catalog from its configured URL.",inputSchema:e3.object({}),service:v,method:"refresh",arguments:()=>[],resultKey:"catalog",annotations:i2}),rp({name:"estimate_model_cost",title:"Estimate model cost",description:"Estimate cost for token usage using the current model-pricing catalog.",inputSchema:e3.object({model:e3.string().min(1),inputTokens:e3.number().int().min(0).default(0),outputTokens:e3.number().int().min(0).default(0),cacheCreationInputTokens:e3.number().int().min(0).default(0),cacheReadInputTokens:e3.number().int().min(0).default(0)}),service:{estimate:async e=>{await v.ensureFresh();let t=await v.lookup([String(e.model)]);return v.estimate(t.get(String(e.model)),{inputTokens:Number(e.inputTokens),outputTokens:Number(e.outputTokens),cacheWriteTokens:Number(e.cacheCreationInputTokens),cacheReadTokens:Number(e.cacheReadInputTokens)})}},method:"estimate",resultKey:"estimate"})]})),e.systemStatus&&e.polling&&e.credentials&&$.push((k=e.systemStatus,S=e.polling,E=e.credentials,{id:"builtin:system",name:"System",children:[],tools:[rp({name:"get_system_status",title:"Get system status",description:"Get the control plane's aggregated operational health.",inputSchema:e3.object({}),service:k,method:"status",arguments:()=>[],resultKey:"status"}),rp({name:"get_polling_operations",title:"Get polling operations",description:"List registered background polling operations and their current states.",inputSchema:e3.object({}),service:S,method:"list",arguments:()=>[],resultKey:"operations"}),rp({name:"get_credential_store_status",title:"Get credential store status",description:"Get credential-store health without returning credential values.",inputSchema:e3.object({}),service:E,method:"status",arguments:()=>[],resultKey:"status"}),rp({name:"get_credential_metadata",title:"Get credential metadata",description:"List redacted credential metadata; values are never returned.",inputSchema:e3.object({}),service:E,method:"list",arguments:()=>[],resultKey:"credentials"})]})),e.cacheServer&&e.jira&&e.github&&$.push((I=e.cacheServer,x=e.jira,A=e.github,{id:"builtin:cache-administration",name:"Cache Administration",tools:[],children:[{id:"builtin:cache-administration:cache-server",name:"Cache Server",children:[],tools:[rp({name:"get_cache_server_entries",title:"Get cache-server entries",description:"List cache-server entries with filters and pagination.",inputSchema:e3.object({filters:e3.object({key:e3.string().nullable().optional(),version:e3.string().nullable().optional(),scope:e3.string().nullable().optional(),repoId:e3.string().nullable().optional(),itemsPerPage:e3.number().int().min(1).max(500).default(20),page:e3.number().int().min(1).default(1)}).default({itemsPerPage:20,page:1})}),service:I,method:"listCacheEntries",arguments:({filters:e})=>[e],resultKey:"page",annotations:i1}),rp({name:"get_cache_server_entry",title:"Get cache-server entry",description:"Get cache-entry detail without secret connection values.",inputSchema:e3.object({id:e3.string().min(1)}),service:I,method:"getCacheEntryDetail",arguments:({id:e})=>[e],resultKey:"entry",annotations:i1}),rp({name:"match_cache_server_entry",title:"Match cache-server entry",description:"Find a cache entry matching build cache keys.",inputSchema:e3.object({input:e3.object({primaryKey:e3.string().min(1),restoreKeys:e3.array(e3.string()).nullable().optional(),scopes:e3.array(e3.string()).min(1),repoId:e3.string().min(1),version:e3.string().min(1)})}),service:I,method:"matchCacheEntry",arguments:({input:e})=>[e],resultKey:"match",annotations:i1}),rp({name:"get_cache_storage_location",title:"Get cache storage location",description:"Get one cache storage-location summary.",inputSchema:e3.object({id:e3.string().min(1)}),service:I,method:"getStorageLocation",arguments:({id:e})=>[e],resultKey:"location",annotations:i1}),rp({name:"delete_cache_server_entries",title:"Delete cache-server entries",description:"Permanently delete selected cache-server entries.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),service:I,method:"deleteCacheEntriesByIds",arguments:({ids:e})=>[e],resultKey:"deleted",annotations:i3})]},{id:"builtin:cache-administration:jira",name:"Jira Cache",children:[],tools:[rp({name:"get_jira_cache_metrics",title:"Get Jira cache metrics",description:"Get Jira cache hit, live-call, error, and latency metrics.",inputSchema:e3.object({}),service:x,method:"cacheMetrics",arguments:()=>[],resultKey:"metrics"}),rp({name:"get_jira_api_calls",title:"Get Jira API calls",description:"List redacted Jira API-call history.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0)}),service:x,method:"listApiCalls",arguments:e=>[e.limit,e.offset],resultKey:"page"}),rp({name:"get_jira_cached_entries",title:"Get Jira cached entries",description:"List cached Jira ticket entries.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0)}),service:x,method:"listCachedTickets",arguments:e=>[e.limit,e.offset],resultKey:"page"}),rp({name:"clear_jira_cache",title:"Clear Jira cache",description:"Permanently clear all cached Jira tickets.",inputSchema:e3.object({}),service:x,method:"clearCache",arguments:()=>[],resultKey:"cleared",annotations:i3})]},{id:"builtin:cache-administration:github",name:"GitHub Cache",children:[],tools:[rp({name:"get_github_cache_metrics",title:"Get GitHub cache metrics",description:"Get GitHub cache and API-call metrics.",inputSchema:e3.object({}),service:A,method:"cacheMetrics",arguments:()=>[],resultKey:"metrics"}),rp({name:"get_github_api_calls",title:"Get GitHub API calls",description:"List redacted GitHub API-call history.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0)}),service:A,method:"apiCalls",arguments:e=>[e.limit,e.offset,{}],resultKey:"page"}),rp({name:"get_github_cached_entries",title:"Get GitHub cached entries",description:"List cached GitHub API entries.",inputSchema:e3.object({limit:e3.number().int().min(1).max(500).default(100),offset:e3.number().int().min(0).default(0)}),service:A,method:"cachedEntries",arguments:e=>[e.limit,e.offset],resultKey:"page"}),rp({name:"clear_github_cache",title:"Clear GitHub cache",description:"Permanently clear cached GitHub API entries.",inputSchema:e3.object({}),service:A,method:"clearCache",arguments:()=>[],resultKey:"cleared",annotations:i0})]}]})),e.toolAudit&&e.testExternalMcpServer&&$.push((_=e.toolAudit,C=e.testExternalMcpServer,{id:"builtin:tool-administration",name:"Tool Administration",children:[],tools:[rp({name:"test_external_mcp_server",title:"Test external MCP server",description:"Connect to a configured external MCP server and report its tool count without returning saved headers.",inputSchema:e3.object({id:e3.string().min(1)}),service:{testExternalServer:C},method:"testExternalServer",arguments:({id:e})=>[e],resultKey:"status",annotations:i1}),rp({name:"get_tool_call_history",title:"Get tool call history",description:"List redacted tool-call audit records. Arguments are represented only by SHA-256 hashes.",inputSchema:e3.object({first:e3.number().int().min(1).max(500).default(100),toolName:e3.string().nullable().optional(),resultStatus:e3.enum(["RUNNING","SUCCEEDED","FAILED"]).nullable().optional()}),service:_,method:"list",resultKey:"calls"}),rp({name:"get_tool_call",title:"Get tool call",description:"Get one redacted tool-call audit record by ID.",inputSchema:e3.object({id:e3.string().min(1)}),service:_,method:"get",arguments:({id:e})=>[e],resultKey:"call"})]})),e.workflows&&$.push((R=e.workflows,P={id:"builtin:workflows:discovery",name:"Discovery",children:[],tools:[i4({name:"list_workflow_step_kinds",title:"List workflow step kinds",description:"Browse the step kinds a workflow can be built from, with a short description of each. Start here when authoring; use describe_workflow_kind for the config schema of one kind.",inputSchema:e3.object({category:e3.string().optional().describe("Restrict to one category, e.g. 'Jira' or 'Control flow'."),search:e3.string().optional().describe("Match against kind, label, category, and description.")}),outputSchema:e3.object({steps:e3.array(e3.object({kind:e3.string(),category:e3.string(),label:e3.string(),description:e3.string(),execution:e3.string(),requiredPaths:e3.array(e3.string()),providedPaths:e3.array(e3.string()),sourceHandles:e3.array(e3.string()),mutatesExternal:e3.boolean(),mutatesWorktree:e3.boolean()}))}),annotations:iQ,handler:({category:e,search:t})=>({steps:ik.WORKFLOW_STEP_CATALOG.filter(r=>(!e||r.category===e)&&iK(`${r.kind} ${r.label} ${r.category} ${r.description}`,t)).map(e=>({kind:e.kind,category:e.category,label:e.label,description:e.description,execution:e.execution,requiredPaths:e.requiredPaths,providedPaths:e.providedPaths,sourceHandles:e.sourceHandles,mutatesExternal:e.mutatesExternal,mutatesWorktree:e.mutatesWorktree}))})}),i4({name:"list_workflow_trigger_kinds",title:"List workflow trigger kinds",description:"Browse the trigger kinds that can start a workflow, with what each one seeds into session data. Every workflow needs at least one trigger.",inputSchema:e3.object({category:e3.string().optional(),search:e3.string().optional()}),outputSchema:e3.object({triggers:e3.array(e3.object({kind:e3.string(),category:e3.string(),label:e3.string(),description:e3.string(),seedPaths:e3.array(e3.string()),sourceHandles:e3.array(e3.string())}))}),annotations:iQ,handler:({category:e,search:t})=>({triggers:ik.WORKFLOW_TRIGGER_CATALOG.filter(r=>(!e||r.category===e)&&iK(`${r.kind} ${r.label} ${r.category} ${r.description}`,t)).map(e=>({kind:e.kind,category:e.category,label:e.label,description:e.description,seedPaths:e.seedPaths,sourceHandles:e.sourceHandles}))})}),i4({name:"describe_workflow_kind",title:"Describe a workflow step or trigger kind",description:"Full detail for one kind: long-form notes on preconditions and side effects, the JSON Schema for its config, the session paths it requires and provides, and the handles edges may leave it from.",inputSchema:e3.object({kind:e3.string().min(1).describe("A step or trigger kind.")}),outputSchema:e3.object({scope:e3.enum(["step","trigger"]),kind:e3.string(),category:e3.string(),label:e3.string(),description:e3.string(),details:e3.string(),execution:e3.string().nullable(),configSchema:e3.unknown(),requiredPaths:e3.array(e3.string()),providedPaths:e3.array(e3.string()),seedPaths:e3.array(e3.string()),sourceHandles:e3.array(e3.string()),mutatesExternal:e3.boolean(),mutatesWorktree:e3.boolean()}),annotations:iQ,handler:({kind:e})=>{let t=ik.WORKFLOW_STEP_CATALOG.find(t=>t.kind===e);if(t)return{scope:"step",...t,configSchema:t9(t.configSchema),seedPaths:[]};let r=iG(e);return{scope:"trigger",...r,configSchema:t9(r.configSchema),execution:null,requiredPaths:[],providedPaths:[],mutatesExternal:!1,mutatesWorktree:!1}}}),i4({name:"list_workflow_session_paths",title:"List workflow session-data paths",description:"The session-data vocabulary a step's config can bind to — concrete paths like `ticket.key` or `pr.number`, with what each holds. Use it to write bindings that resolve at run time.",inputSchema:e3.object({namespace:e3.string().optional().describe("Restrict to one namespace, e.g. 'ticket' or 'pr'.")}),outputSchema:e3.object({paths:e3.array(e3.object({path:e3.string(),description:e3.string().nullable()}))}),annotations:iQ,handler:({namespace:e})=>({paths:(function(e){let t=new Map,r=e=>{t.has(e.path)||t.set(e.path,e)};for(let t of e){let e=t.trim();if(e&&"*"!==e){if(e.endsWith(".*")){let t=e.slice(0,-2),i=iC[iT(t)];if(i)for(let e of i)r({path:`${t}.${e.name}`,description:e.description});else r({path:e});continue}r({path:e,description:function(e){let t=e.split(".");if(t.length<2)return;let r=t[t.length-1];return iR.get(`${iT(e)}.${r}`)}(e)})}}return[...t.values()].sort((e,t)=>e.path.localeCompare(t.path))})(e?[`${e}.*`]:[...new Set(ik.WORKFLOW_TRIGGER_CATALOG.flatMap(({seedPaths:e})=>e))]).map(({path:e,description:t})=>({path:e,description:t??null}))})}),i4({name:"get_workflow_path_availability",title:"Get workflow path availability",description:"Per step, the session paths guaranteed to exist before it runs and the ones it contributes. This is what decides whether a config binding is legal — check it before binding a step to a path.",inputSchema:iD,outputSchema:e3.object({steps:e3.array(e3.object({nodeId:e3.string(),kind:e3.string(),availableBefore:e3.array(e3.string()),provides:e3.array(e3.string())})),triggerSeeds:e3.array(e3.object({triggerId:e3.string(),kind:e3.string(),seedPaths:e3.array(e3.string())})),violations:e3.array(e3.object({nodeId:e3.string(),triggerId:e3.string(),triggerName:e3.string(),path:e3.string()}))}),annotations:iQ,handler:async({workflowId:e})=>{let t=await iV(R,e),r=(0,ik.computeWorkflowPathAvailability)(t);return{steps:t.nodes.map(e=>({nodeId:e.id,kind:e.kind,availableBefore:r.availableBefore.get(e.id)??[],provides:r.provides.get(e.id)??[]})),triggerSeeds:t.triggers.map(e=>({triggerId:e.id,kind:e.kind,seedPaths:["workflow.*",...iG(e.kind).seedPaths,...(0,ik.resourceManualSeedPaths)(e.kind,e.config)]})),violations:r.requirementViolations}}})]},{id:"builtin:workflows",name:"Workflows",tools:[],children:[P,{id:"builtin:workflows:authoring",name:"Authoring",children:[],tools:[i4({name:"list_workflows",title:"List workflows",description:"List workflows with their publish and enablement state.",inputSchema:e3.object({search:e3.string().optional().describe("Match name or description."),archive:e3.enum(["ACTIVE","ARCHIVED","ALL"]).optional().describe("Defaults to ACTIVE."),enabled:e3.boolean().optional(),first:e3.number().int().min(1).max(200).optional(),after:e3.string().optional().describe("Cursor from a previous page.")}),outputSchema:e3.object({workflows:e3.array(ij),nextCursor:e3.string().nullable(),totalCount:e3.number()}),annotations:iQ,handler:async e=>{let t=await R().list(e);return{workflows:t.items.map(e=>t7(e)),nextCursor:t.nextCursor,totalCount:t.totalCount}}}),i4({name:"get_workflow",title:"Get workflow",description:"Read one workflow, optionally with its full draft definition — every trigger, step, and connection.",inputSchema:e3.object({workflowId:e3.string().min(1),includeDefinition:e3.boolean().optional().describe("Include the draft graph. Defaults to true.")}),outputSchema:e3.object({workflow:ij,definition:e3.unknown().nullable(),activeVersion:e3.unknown().nullable()}),annotations:iQ,handler:async({workflowId:e,includeDefinition:t})=>{let r=await R().get(e);if(!r)throw Error(`Workflow ${e} was not found`);return{workflow:t7(r),definition:!1===t?null:JSON.parse(r.draftDefinitionJson),activeVersion:r.activeVersion?re(r.activeVersion):null}}}),i4({name:"create_workflow",title:"Create workflow",description:"Create a workflow. Without a definition it starts as a draft holding one manual trigger and no steps, ready for add_workflow_step.",inputSchema:e3.object({name:e3.string().min(1).max(200),description:e3.string().max(2e3).optional(),definition:e3.unknown().optional().describe("A complete definition, e.g. from export_workflow."),overlapPolicy:e3.enum(["QUEUE","CONCURRENT","COALESCE_LATEST"]).optional().describe("What happens when a run starts while one is in flight. Defaults to QUEUE."),maxConcurrentRuns:e3.number().int().min(1).optional()}),outputSchema:e3.object({workflow:ij,definition:e3.unknown()}),annotations:iX,handler:async e=>{let t=await R().create(e);if(!t)throw Error("Workflow could not be created");return{workflow:t7(t),definition:JSON.parse(t.draftDefinitionJson)}}}),i4({name:"update_workflow_settings",title:"Update workflow settings",description:"Change a workflow's name, description, or concurrency. Name and description live inside the definition, so this rewrites the draft.",inputSchema:e3.object({workflowId:e3.string().min(1),name:e3.string().min(1).max(200).optional(),description:e3.string().max(2e3).optional(),overlapPolicy:e3.enum(["QUEUE","CONCURRENT","COALESCE_LATEST"]).optional(),maxConcurrentRuns:e3.number().int().min(1).optional()}),outputSchema:iB,annotations:iX,handler:async e=>{let t=await iV(R,e.workflowId),r={...t,name:e.name??t.name,description:e.description??t.description};return await R().saveDraft({id:e.workflowId,definition:r,overlapPolicy:e.overlapPolicy??null,maxConcurrentRuns:e.maxConcurrentRuns??null}),iH(R,e.workflowId,r)}}),i4({name:"set_workflow_enabled",title:"Enable or pause workflow",description:"Enable a workflow or pause it. A paused workflow ignores its triggers and refuses manual runs.",inputSchema:e3.object({workflowId:e3.string().min(1),enabled:e3.boolean()}),outputSchema:e3.object({workflow:ij}),annotations:iX,handler:async({workflowId:e,enabled:t})=>({workflow:t7(await R().setEnabled(e,t))})}),i4({name:"archive_workflow",title:"Archive or restore workflow",description:"Move a workflow out of the active list, or bring it back. Reversible — use delete_workflow to remove it for good.",inputSchema:e3.object({workflowId:e3.string().min(1),archived:e3.boolean()}),outputSchema:e3.object({workflow:ij}),annotations:iX,handler:async({workflowId:e,archived:t})=>({workflow:t7(await R().archive(e,t))})}),i4({name:"delete_workflow",title:"Delete workflow",description:"Permanently delete a workflow and its published versions. Refused once the workflow has run history — archive_workflow is the way to retire one that has run. Not reversible.",inputSchema:e3.object({workflowId:e3.string().min(1)}),outputSchema:e3.object({deleted:e3.boolean()}),annotations:i0,handler:async({workflowId:e})=>({deleted:await R().delete(e)})}),i4({name:"add_workflow_step",title:"Add workflow step",description:"Add a step to the draft and optionally wire it to an existing trigger or step. Returns the new step's id and the validator's view of the result.",inputSchema:e3.object({workflowId:e3.string().min(1),kind:e3.enum(iS.WORKFLOW_STEP_KINDS).describe("Step kind. See list_workflow_step_kinds."),name:e3.string().max(200).optional().describe("Display name. Defaults to the kind's label."),config:iO.optional(),connectFrom:e3.object({from:e3.string().min(1).describe("Trigger or step id this one follows."),sourceHandle:e3.string().optional().describe("Handle to leave from — 'success' by default, 'true'/'false' on an If, 'body'/'empty' on a For each, an option key on a choice trigger.")}).optional(),position:iN.optional(),failurePolicy:e3.enum(["FAIL","CONTINUE"]).optional().describe("CONTINUE lets the run carry on past a failure."),retry:e3.object({maxAttempts:e3.number().int().min(1).max(20),strategy:e3.enum(["FIXED","EXPONENTIAL"]),delaySeconds:e3.number().int().min(1).max(86400)}).optional(),providedPaths:iP.optional(),requiredPaths:i$.optional()}),outputSchema:iB,annotations:iX,handler:async e=>{let t=function(e,t){let r=iE(e,"node"),i={id:r,kind:t.kind,name:t.name??void 0,position:t.position??function(e,t){let r=t?iI(e,t):void 0,i=r?r.position.x+320:320,a=r?r.position.y:120,n=[...e.nodes,...e.triggers].filter(e=>160>Math.abs(e.position.x-i)).map(e=>e.position.y),s=a;for(;n.some(e=>80>Math.abs(e-s));)s+=160;return{x:i,y:s}}(e,t.connectFrom?.from??null),config:t.config??{},requiredPaths:t.requiredPaths??[],providedPaths:t.providedPaths??[],retry:t.retry??{maxAttempts:1,strategy:"EXPONENTIAL",delaySeconds:5},failurePolicy:t.failurePolicy??"FAIL"},a={...e,nodes:[...e.nodes,i]};if(!t.connectFrom)return{definition:a,nodeId:r,edgeId:null};let n=i_(a,{source:t.connectFrom.from,target:r,sourceHandle:t.connectFrom.sourceHandle??null});return{definition:n.definition,nodeId:r,edgeId:n.edgeId}}(await iV(R,e.workflowId),{...e,name:e.name??function(e){let t=ik.WORKFLOW_STEP_CATALOG.find(t=>t.kind===e);if(!t)throw Error(`Unknown step kind ${e}`);return t}(e.kind).label});return iH(R,e.workflowId,t.definition,{nodeId:t.nodeId,edgeId:t.edgeId})}}),i4({name:"update_workflow_step",title:"Update workflow step",description:"Change a step's name, config, retry, or failure policy. Prefer configPatch, which merges — config replaces the object wholesale.",inputSchema:e3.object({workflowId:e3.string().min(1),nodeId:e3.string().min(1),name:e3.string().max(200).optional(),config:iO.optional().describe("Replaces the entire config. Keys left out are dropped."),configPatch:e3.record(e3.string(),e3.unknown()).optional().describe("Merges into the existing config. A null value removes that key."),position:iN.optional(),failurePolicy:e3.enum(["FAIL","CONTINUE"]).optional(),retry:e3.object({maxAttempts:e3.number().int().min(1).max(20),strategy:e3.enum(["FIXED","EXPONENTIAL"]),delaySeconds:e3.number().int().min(1).max(86400)}).optional(),providedPaths:iP.optional(),requiredPaths:i$.optional()}),outputSchema:iB,annotations:iX,handler:async e=>{let t=await iV(R,e.workflowId);return iH(R,e.workflowId,function(e,t){if(!e.nodes.some(({id:e})=>e===t.nodeId))throw Error(`Step ${t.nodeId} is not in this workflow`);if(t.config&&t.configPatch)throw Error("Pass either config or configPatch, not both");return{...e,nodes:e.nodes.map(e=>e.id===t.nodeId?{...e,name:t.name??e.name,config:iA(e.config,t),position:t.position??e.position,retry:t.retry??e.retry,failurePolicy:t.failurePolicy??e.failurePolicy,requiredPaths:t.requiredPaths??e.requiredPaths,providedPaths:t.providedPaths??e.providedPaths}:e)}}(t,e),{nodeId:e.nodeId})}}),i4({name:"add_workflow_trigger",title:"Add workflow trigger",description:"Add a trigger to the draft. A workflow needs at least one, and each must reach a step before it can be published.",inputSchema:e3.object({workflowId:e3.string().min(1),kind:e3.enum(iS.WORKFLOW_TRIGGER_KINDS).describe("Trigger kind. See list_workflow_trigger_kinds."),name:e3.string().max(200).optional(),config:iO.optional().describe("Trigger config. Resource triggers need `resourceKind`; choice triggers need keyed `choices`; issue-command triggers need `allowedLogins` and an anchored `commandPattern`."),position:iN.optional()}),outputSchema:iB,annotations:iX,handler:async e=>{var t,r;let i,a,n=(t=await iV(R,e.workflowId),r={...e,name:e.name??iG(e.kind).label},a={id:i=iE(t,"trigger"),kind:r.kind,name:r.name??void 0,config:r.config??{},position:r.position??{x:0,y:100+140*t.triggers.length}},{definition:{...t,triggers:[...t.triggers,a]},triggerId:i});return iH(R,e.workflowId,n.definition,{triggerId:n.triggerId})}}),i4({name:"update_workflow_trigger",title:"Update workflow trigger",description:"Change a trigger's name or config. Narrowing a choice trigger's options also removes the connections that left the options you dropped.",inputSchema:e3.object({workflowId:e3.string().min(1),triggerId:e3.string().min(1),name:e3.string().max(200).optional(),config:iO.optional(),configPatch:e3.record(e3.string(),e3.unknown()).optional(),position:iN.optional()}),outputSchema:iB,annotations:iX,handler:async e=>{let t=await iV(R,e.workflowId);return iH(R,e.workflowId,function(e,t){let r=e.triggers.find(({id:e})=>e===t.triggerId);if(!r)throw Error(`Trigger ${t.triggerId} is not in this workflow`);if(t.config&&t.configPatch)throw Error("Pass either config or configPatch, not both");let i={...r,name:t.name??r.name,config:iA(r.config,t),position:t.position??r.position},a=new Set(ix(i)),n=(0,iS.isChoiceTriggerKind)(i.kind)?e.edges.filter(e=>e.source!==i.id||a.has(e.sourceHandle)):e.edges;return{...e,triggers:e.triggers.map(e=>e.id===i.id?i:e),edges:n}}(t,e),{triggerId:e.triggerId})}}),i4({name:"remove_workflow_node",title:"Remove workflow step or trigger",description:"Delete a step or trigger from the draft along with its connections. Set reconnect to stitch its predecessors to its successors so the chain survives.",inputSchema:e3.object({workflowId:e3.string().min(1),id:e3.string().min(1).describe("Step or trigger id."),reconnect:e3.boolean().optional().describe("Join what came before to what came after.")}),outputSchema:iB,annotations:i0,handler:async({workflowId:e,id:t,reconnect:r})=>{let i=await iV(R,e);return iH(R,e,function(e,t,r={}){if(!iI(e,t))throw Error(`${t} is not in this workflow`);let i=e.edges.filter(e=>e.target===t),a=e.edges.filter(e=>e.source===t),n=e.edges.filter(e=>e.source!==t&&e.target!==t),s={...e,nodes:e.nodes.filter(e=>e.id!==t),triggers:e.triggers.filter(e=>e.id!==t),edges:n};if(!r.reconnect)return s;for(let e of i)for(let t of a)s=i_(s,{source:e.source,sourceHandle:e.sourceHandle,target:t.target,targetHandle:t.targetHandle}).definition;return s}(i,t,{reconnect:r}))}}),i4({name:"connect_workflow_nodes",title:"Connect workflow nodes",description:"Draw a connection from a trigger or step to a step. A step with more than one incoming connection must be a CONTROL_JOIN.",inputSchema:e3.object({workflowId:e3.string().min(1),source:e3.string().min(1).describe("Trigger or step id."),target:e3.string().min(1).describe("Step id. Triggers take no input."),sourceHandle:e3.string().optional().describe("Handle to leave from. Defaults to the source's first — 'success' for a step.")}),outputSchema:iB,annotations:iX,handler:async e=>{let t=i_(await iV(R,e.workflowId),e);return iH(R,e.workflowId,t.definition,{edgeId:t.edgeId})}}),i4({name:"disconnect_workflow_nodes",title:"Disconnect workflow nodes",description:"Remove a connection, either by its edge id or by the pair of nodes it joins.",inputSchema:e3.object({workflowId:e3.string().min(1),edgeId:e3.string().optional(),source:e3.string().optional(),target:e3.string().optional(),sourceHandle:e3.string().optional()}),outputSchema:iB.extend({removedEdgeIds:e3.array(e3.string())}),annotations:iX,handler:async e=>{let t=function(e,t){let r=e.edges.filter(e=>t.edgeId?e.id===t.edgeId:(!!t.source||!!t.target)&&(!t.source||e.source===t.source)&&(!t.target||e.target===t.target)&&(!t.sourceHandle||e.sourceHandle===t.sourceHandle));if(!r.length)throw Error("No matching connection to remove");let i=new Set(r.map(({id:e})=>e));return{definition:{...e,edges:e.edges.filter(e=>!i.has(e.id))},removedEdgeIds:[...i]}}(await iV(R,e.workflowId),e);return{...await iH(R,e.workflowId,t.definition),removedEdgeIds:t.removedEdgeIds}}}),i4({name:"layout_workflow",title:"Lay out workflow graph",description:"Reposition every trigger and step into readable left-to-right columns. Worth calling once after building a workflow, so it does not open as a pile of overlapping cards.",inputSchema:iD,outputSchema:iB,annotations:iX,handler:async({workflowId:e})=>{let t=await iV(R,e);return iH(R,e,function(e){let t=new Map;for(let r of e.edges)t.set(r.source,[...t.get(r.source)??[],r.target]);let r=new Map;for(let t of e.triggers)r.set(t.id,0);let i=e.triggers.map(({id:e})=>e),a=e.nodes.length*e.edges.length+1;for(;i.length&&a-- >0;){let e=i.shift(),a=r.get(e)??0;for(let n of t.get(e)??[])(r.get(n)??-1)>=a+1||(r.set(n,a+1),i.push(n))}let n=Math.max(0,...r.values());for(let t of e.nodes)r.has(t.id)||r.set(t.id,n+1);let s=new Map,o=e=>{let t=r.get(e.id)??0,i=s.get(t)??0;return s.set(t,i+1),{...e,position:{x:320*t,y:160*i}}},l=e.triggers.map(o),u=e.nodes.map(o);return{...e,triggers:l,nodes:u}}(t))}}),i4({name:"set_workflow_definition",title:"Replace workflow definition",description:"Overwrite the entire draft graph. The bulk escape hatch — prefer the granular tools for single edits, which cannot clobber work they did not read.",inputSchema:e3.object({workflowId:e3.string().min(1),definition:e3.unknown().describe("A complete definition object, as returned by get_workflow.")}),outputSchema:iB,annotations:iX,handler:async({workflowId:e,definition:t})=>iH(R,e,(0,ik.parseWorkflowDefinition)(t))}),i4({name:"validate_workflow",title:"Validate workflow draft",description:"Check the draft without saving anything. Errors block publishing; the codes name the problem — REQUIREMENT_UNSATISFIED means a step binds a path its trigger cannot seed.",inputSchema:iD,outputSchema:e3.object({valid:e3.boolean(),diagnostics:e3.array(iU)}),annotations:iQ,handler:async({workflowId:e})=>{let t=await R().validateDraft(e);return{valid:t.valid,diagnostics:t.diagnostics.map(e=>({severity:e.severity,code:e.code,message:e.message,nodeId:e.nodeId??null,triggerId:e.triggerId??null,path:e.path??null}))}}}),i4({name:"publish_workflow",title:"Publish workflow",description:"Publish the draft as a new immutable version. Only a published version can run, and publishing fails if the draft has errors.",inputSchema:iD,outputSchema:e3.object({version:e3.unknown()}),annotations:iX,handler:async({workflowId:e})=>({version:re(await R().publish(e))})}),i4({name:"export_workflow",title:"Export workflow",description:"Export a workflow as a portable document, with secrets and machine-specific paths stripped. Pass a version id to export a published version instead of the draft.",inputSchema:e3.object({workflowId:e3.string().min(1),versionId:e3.string().optional()}),outputSchema:e3.object({export:e3.unknown()}),annotations:iQ,handler:async({workflowId:e,versionId:t})=>({export:t9(await R().export(e,t))})}),i4({name:"import_workflow",title:"Import workflow",description:"Create a workflow from an exported document. References that cannot be resolved on this machine come in marked unresolved and must be fixed before publishing.",inputSchema:e3.object({payload:e3.unknown().describe("A document from export_workflow."),name:e3.string().max(200).optional()}),outputSchema:e3.object({workflow:ij,definition:e3.unknown()}),annotations:iX,handler:async e=>{let t=await R().import(e);if(!t)throw Error("Workflow could not be imported");return{workflow:t7(t),definition:JSON.parse(t.draftDefinitionJson)}}})]},{id:"builtin:workflows:runs",name:"Runs",children:[],tools:[i4({name:"trigger_workflow",title:"Trigger workflow run",description:"Start a run of a published, enabled workflow. Runs whatever the workflow's steps do, including external side effects.",inputSchema:e3.object({workflowId:e3.string().min(1),sessionData:e3.record(e3.string(),e3.unknown()).optional().describe("Initial session data, merged with the trigger's seeds."),resourceKind:e3.enum(iS.WORKFLOW_RESOURCE_KINDS).optional().describe("Launch through a resource trigger of this kind."),resourceId:e3.string().optional().describe("The resource to launch against."),choice:e3.string().optional().describe("Option key when the workflow's trigger offers choices. Omitting it on a choice-only workflow returns the valid keys."),subjectKey:e3.string().optional().describe("Dedupe key. Defaults to the resource or a fresh id.")}),outputSchema:e3.object({run:iL}),annotations:iF,handler:async e=>{let t=await R().trigger(e);if(!t)throw Error("Workflow run could not be started");return{run:rt(t)}}}),i4({name:"list_workflow_runs",title:"List workflow runs",description:"List runs, newest first, optionally filtered.",inputSchema:e3.object({workflowId:e3.string().optional(),status:e3.enum(["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED","SUCCEEDED","FAILED","CANCELLED"]).optional(),search:e3.string().optional().describe("A run number, or part of a workflow name."),first:e3.number().int().min(1).max(200).optional(),after:e3.string().optional()}),outputSchema:e3.object({runs:e3.array(iL),nextCursor:e3.string().nullable(),totalCount:e3.number()}),annotations:iQ,handler:async e=>{let t=await R().runs(e);return{runs:t.items.map(e=>rt(e)),nextCursor:t.nextCursor,totalCount:t.totalCount}}}),i4({name:"get_workflow_run",title:"Get workflow run",description:"Read a run's status and session data, with its per-step attempts and any questions it is blocked on. Poll this after trigger_workflow.",inputSchema:e3.object({runId:e3.string().min(1),includeAttempts:e3.boolean().optional().describe("Include per-step attempts. Defaults to true.")}),outputSchema:e3.object({run:iL,attempts:e3.array(e3.unknown()),pendingQuestions:e3.array(iM)}),annotations:iQ,handler:async({runId:e,includeAttempts:t})=>{let r=await R().run(e);if(!r)throw Error(`Workflow run ${e} was not found`);let i=r.attempts??[];return{run:rt(r),attempts:!1===t?[]:i.map(e=>({id:String(e.id),nodeId:String(e.nodeId),kind:String(e.kind),generation:Number(e.generation),iterationKey:String(e.iterationKey??""),attempt:Number(e.attempt),status:String(e.status),phase:String(e.phase),input:t3(e.inputJson),output:t3(e.outputJson),error:"string"==typeof e.error?e.error:null,startedAt:t4(e.startedAt),finishedAt:t4(e.finishedAt)})),pendingQuestions:i.flatMap(e=>e.questionBatches??[]).filter(e=>"PENDING"===e.status).map(e=>{let t;return t=Array.isArray(e.questions)?e.questions:[],{batchId:String(e.id),runId:"string"==typeof e.runId?e.runId:null,status:String(e.status),createdAt:t4(e.createdAt),questions:t.map(e=>{let t=Array.isArray(e.options)?e.options:[];return{id:String(e.id),header:"string"==typeof e.header?e.header:null,prompt:String(e.prompt??""),multiSelect:!0===e.multiSelect,allowCustom:!0===e.allowCustom,options:t.map(e=>({label:String(e.label??""),description:"string"==typeof e.description?e.description:null}))}})}})}}}),i4({name:"get_workflow_run_events",title:"Get workflow run events",description:"Read a run's event log in order. Pass the last sequence you saw to tail only what is new.",inputSchema:e3.object({runId:e3.string().min(1),afterSequence:e3.number().int().optional(),first:e3.number().int().min(1).max(500).optional()}),outputSchema:e3.object({events:e3.array(iq)}),annotations:iQ,handler:async({runId:e,afterSequence:t,first:r})=>({events:(await R().runEvents(e,t,r)).map(e=>({id:String(e.id),runId:String(e.runId),attemptId:"string"==typeof e.attemptId?e.attemptId:null,sequence:Number(e.sequence),type:String(e.type),message:String(e.message??""),detail:t3(e.detailJson),createdAt:t4(e.createdAt)}))})}),i4({name:"control_workflow_run",title:"Pause, resume, or cancel a run",description:"Change an in-flight run's lifecycle. Cancelling is final, and leaves any external effects already applied in place.",inputSchema:e3.object({runId:e3.string().min(1),action:e3.enum(["PAUSE","RESUME","CANCEL"])}),outputSchema:e3.object({run:iL}),annotations:i0,handler:async({runId:e,action:t})=>{let r=await R().lifecycle(e,t);if(!r)throw Error("Workflow run lifecycle change failed");return{run:rt(r)}}}),i4({name:"answer_workflow_question",title:"Answer a workflow question",description:"Answer the question a run is parked on so it can continue. Find the batch id and the questions through get_workflow_run.",inputSchema:e3.object({batchId:e3.string().min(1).describe("From get_workflow_run."),answers:e3.record(e3.string(),e3.unknown()).describe("Answers keyed by question id. A value is the chosen option label, a list of labels for a multi-select, or free text where a custom answer is allowed.")}),outputSchema:e3.object({run:iL}),annotations:iX,handler:async({batchId:e,answers:t})=>{let r=await R().answerQuestion(e,t);if(!r)throw Error("Workflow question could not be answered");return{run:rt(r)}}}),i4({name:"prepare_workflow_replay",title:"Preview a workflow replay",description:"See what replaying a run from a given step would affect: the downstream steps, the external effects that would happen again, and whether a Git checkpoint is available. Read-only — call it before replay_workflow_run.",inputSchema:e3.object({runId:e3.string().min(1),nodeId:e3.string().min(1).describe("Step to replay from.")}),outputSchema:e3.object({preview:e3.unknown()}),annotations:iQ,handler:async({runId:e,nodeId:t})=>({preview:t9(await R().prepareReplay(e,t))})}),i4({name:"replay_workflow_run",title:"Replay a workflow run from a step",description:"Re-run a workflow from one step onward. Every external effect downstream happens again — merges, comments, deploys — so preview it with prepare_workflow_replay first.",inputSchema:e3.object({runId:e3.string().min(1),nodeId:e3.string().min(1),restore:e3.boolean().optional().describe("Restore the worktree to the Git checkpoint at that step, discarding later changes."),stash:e3.boolean().optional().describe("Stash uncommitted changes before restoring.")}),outputSchema:e3.object({run:iL}),annotations:i0,handler:async({runId:e,nodeId:t,restore:r,stash:i})=>{let a=await R().replay(e,t,{restore:r,stash:i});if(!a)throw Error("Workflow run could not be replayed");return{run:rt(a)}}}),i4({name:"archive_workflow_runs",title:"Archive workflow runs",description:"Archive or restore workflow runs.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1),archived:e3.boolean().default(!0)}),outputSchema:e3.object({count:e3.unknown()}),annotations:iX,handler:async({ids:e,archived:t})=>({count:await R().archiveRuns(e,t)})}),i4({name:"delete_workflow_runs",title:"Delete workflow runs",description:"Permanently delete workflow runs and their retained execution history.",inputSchema:e3.object({ids:e3.array(e3.string().min(1)).min(1)}),outputSchema:e3.object({count:e3.unknown()}),annotations:i0,handler:async({ids:e})=>({count:await R().deleteRuns(e)})}),i4({name:"repair_workflow_run_data",title:"Repair workflow run data",description:"Repair session data for a blocked or paused workflow run.",inputSchema:e3.object({runId:e3.string().min(1),patch:e3.unknown()}),outputSchema:e3.object({run:e3.unknown()}),annotations:i0,handler:async({runId:e,patch:t})=>({run:await R().repairRunData(e,t)})})]}]})),e.worktreeAutomations&&$.push((T=e.worktreeAutomations,{id:"builtin:worktree-automations",name:"Worktree Automations",children:[],tools:[i4({name:"get_worktree_automations",title:"Get worktree automations",description:"Inspect the persisted Auto Sync and Auto Merge configuration and state for a worktree.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({autoSync:iZ.nullable(),autoMerge:iY.nullable()}),annotations:iQ,handler:async({worktreeId:e})=>({autoSync:await T().autoSync(e),autoMerge:await T().autoMerge(e)})}),i4({name:"configure_worktree_auto_sync",title:"Configure worktree Auto Sync",description:"Enable or update Auto Sync. Optionally select a merge-conflict quick-action workflow and one of its trigger choices.",inputSchema:e3.object({worktreeId:e3.string().min(1),conflictWorkflowId:e3.string().min(1).nullable().optional(),conflictWorkflowChoice:e3.string().min(1).nullable().optional()}),outputSchema:e3.object({autoSync:iZ}),annotations:iX,handler:async e=>({autoSync:await T().configureAutoSync(e)})}),i4({name:"retry_worktree_auto_sync",title:"Retry worktree Auto Sync",description:"Resume a paused Auto Sync rule.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({autoSync:iZ}),annotations:iX,handler:async({worktreeId:e})=>({autoSync:await T().retryAutoSync(e)})}),i4({name:"cancel_worktree_auto_sync",title:"Cancel worktree Auto Sync",description:"Cancel any active job and remove the Auto Sync rule.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({cancelled:e3.boolean()}),annotations:i0,handler:async({worktreeId:e})=>({cancelled:await T().cancelAutoSync(e)})}),i4({name:"configure_worktree_auto_merge",title:"Configure worktree Auto Merge",description:"Enable or update GitHub-native Auto Merge and its optional Jira/worktree post-merge actions.",inputSchema:e3.object({worktreeId:e3.string().min(1),repositoryNameWithOwner:e3.string().min(3),pullRequestNumber:e3.number().int().positive(),method:e3.enum(["MERGE","REBASE","SQUASH"]),commitHeadline:e3.string().min(1),commitBody:e3.string(),authorEmail:e3.string().email().nullable().optional(),deleteWorktree:e3.boolean(),moveTicketToDone:e3.boolean()}),outputSchema:e3.object({autoMerge:iY}),annotations:iX,handler:async e=>({autoMerge:await T().configureAutoMerge(e)})}),i4({name:"retry_worktree_auto_merge",title:"Retry worktree Auto Merge",description:"Retry an Auto Merge rule that needs attention, including its safe post-merge actions.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({autoMerge:iY}),annotations:iX,handler:async({worktreeId:e})=>({autoMerge:await T().retryAutoMerge(e)})}),i4({name:"cancel_worktree_auto_merge",title:"Cancel worktree Auto Merge",description:"Disable GitHub-native Auto Merge when still active and remove the persisted rule.",inputSchema:e3.object({worktreeId:e3.string().min(1)}),outputSchema:e3.object({cancelled:e3.boolean()}),annotations:i0,handler:async({worktreeId:e})=>({cancelled:await T().cancelAutoMerge(e)})})]})),new i5($)}({codebaseTools:e,builds:t,...r,toolAudit:this.audit,testExternalMcpServer:e=>this.testExternalServer(e)})}async mcpToolPresets(e){let t=e?.trim().toUpperCase()??null;if(t&&!["PLAN","SESSION"].includes(t))throw Error("Run kind is not supported");let r=await (0,tX.getPrismaClient)();return(await r.mcpToolPreset.findMany({where:"PLAN"===t?{enabledForPlans:!0}:"SESSION"===t?{enabledForSessions:!0}:void 0,orderBy:{name:"asc"},include:{tools:!0}})).map(an)}async toolCallAudits(e={}){return this.audit.list(e)}async clearToolCallAudits(){return this.audit.clear()}async createMcpToolPreset(e){return this.saveMcpToolPreset(null,e)}async updateMcpToolPreset(e,t){return this.saveMcpToolPreset(e,t)}async saveMcpToolPreset(e,t){let r=t.name.trim(),i=t.description?.trim()??"";if(!r)throw Error("Preset name is required");if(r.length>80)throw Error("Preset name must be 80 characters or fewer");if(i.length>1e3)throw Error("Preset description must be 1,000 characters or fewer");if(!ar.has(t.iconKey))throw Error("Preset icon is not supported");if(!t.toolNames.length)throw Error("Select at least one built-in tool");if(new Set(t.toolNames).size!==t.toolNames.length)throw Error("Preset tool membership must not contain duplicates");let a=new Set(this.builtInTools.definitions().map(({name:e})=>e)),n=t.toolNames.map(e=>e.trim()),s=n.find(e=>!e||!a.has(e));if(void 0!==s)throw Error(`Unknown built-in tool: ${s||"(empty)"}`);let o=await (0,tX.getPrismaClient)();if((await o.mcpToolPreset.findMany({select:{id:!0,name:!0}})).some(t=>t.id!==e&&t.name.toLocaleLowerCase()===r.toLocaleLowerCase()))throw Error("An MCP tool preset with this name already exists");if(e&&!await o.mcpToolPreset.findUnique({where:{id:e}}))throw Error("MCP tool preset not found");let l=e??(0,y.randomUUID)();return await o.$transaction(async e=>{await e.mcpToolPreset.upsert({where:{id:l},create:{id:l,name:r,description:i,iconKey:t.iconKey,enabledForPlans:t.enabledForPlans,enabledForSessions:t.enabledForSessions},update:{name:r,description:i,iconKey:t.iconKey,enabledForPlans:t.enabledForPlans,enabledForSessions:t.enabledForSessions}}),await e.mcpToolPresetTool.deleteMany({where:{presetId:l}}),await e.mcpToolPresetTool.createMany({data:n.map(e=>({presetId:l,toolName:e}))})}),an(await o.mcpToolPreset.findUniqueOrThrow({where:{id:l},include:{tools:!0}}))}async deleteMcpToolPreset(e){let t=await (0,tX.getPrismaClient)();return await t.mcpToolPreset.delete({where:{id:e}}),{id:e}}async resolveRunMcpPresets(e,t){let r=[...new Set(t)];if(!r.length)return{presetIds:[],toolNames:[]};let i=await (0,tX.getPrismaClient)(),a=new Map((await i.mcpToolPreset.findMany({where:{id:{in:r},..."PLAN"===e?{enabledForPlans:!0}:{enabledForSessions:!0}},include:{tools:!0}})).map(e=>[e.id,e])),n=r.filter(e=>a.has(e)),s=new Set(this.builtInTools.definitions().map(({name:e})=>e)),o=new Set;for(let e of n)for(let{toolName:t}of a.get(e).tools)s.has(t)&&o.add(t);return{presetIds:n,toolNames:[...o].sort()}}async mcpPresetToolNames(e){let t=await (0,tX.getPrismaClient)(),r=await t.mcpToolPreset.findUnique({where:{id:e},include:{tools:!0}});if(!r)return null;let i=new Set(this.builtInTools.definitions().map(({name:e})=>e));return r.tools.map(({toolName:e})=>e).filter(e=>i.has(e))}async mcpRunToolNames(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.agentRun.findUnique({where:{id:e},select:{agentId:!0,mcpToolNamesJson:!0}});if(!i)return{status:"NOT_FOUND"};if(i.agentId!==t)return{status:"FORBIDDEN"};let a=JSON.parse(i.mcpToolNamesJson),n=new Set(Array.isArray(a)?a.filter(e=>"string"==typeof e):[]);return{status:"OK",toolNames:this.builtInTools.definitions().map(({name:e})=>e).filter(e=>n.has(e))}}async externalServers(){let e=await (0,tX.getPrismaClient)();return Promise.all((await e.externalMcpServer.findMany({orderBy:{name:"asc"},include:{headers:!0}})).map(async e=>aa(e,0===e.headers.length||await this.credentials.isConfigured((0,t1.externalMcpHeadersCredential)(e.id)))))}async createExternalServer(e){return this.saveExternalServer(null,e)}async updateExternalServer(e,t){return this.saveExternalServer(e,t)}async saveExternalServer(e,t){let r=function(e){let t,r=e.name.trim();if(!r)throw Error("Server name is required");if(r.length>80)throw Error("Server name must be 80 characters or fewer");try{t=new URL(e.url.trim())}catch{throw Error("Server URL must be a valid HTTP or HTTPS URL")}if(!["http:","https:"].includes(t.protocol)||t.username||t.password)throw Error("Server URL must be an HTTP or HTTPS URL without embedded credentials");if("STREAMABLE_HTTP"!==e.transport&&"SSE"!==e.transport)throw Error("Transport must be Streamable HTTP or SSE");let i=e.toolNamePrefix?.trim()??"";if(i.length>64||!/^[A-Za-z0-9_.-]*$/.test(i))throw Error("Tool name prefix may contain up to 64 letters, numbers, underscores, periods, or hyphens");let a=new Set,n=e.headers.map(e=>{let t=e.name.trim();if(!t)throw Error("Header name is required");let r=t.toLowerCase();if(at.has(r))throw Error(`${t} is managed by the MCP transport`);if(a.has(r))throw Error(`Duplicate header name: ${t}`);a.add(r);try{new Headers([[t,e.value??"validation"]])}catch{throw Error(`Invalid HTTP header: ${t}`)}return{id:e.id??null,name:t,value:e.value}});return{name:r,url:t.toString(),transport:e.transport,toolNamePrefix:i,headers:n}}(t),i=await (0,tX.getPrismaClient)();if((await i.externalMcpServer.findMany({select:{id:!0,name:!0}})).some(t=>t.id!==e&&t.name.toLocaleLowerCase()===r.name.toLocaleLowerCase()))throw Error("An MCP server with this name already exists");let a=e?await i.externalMcpServer.findUnique({where:{id:e},include:{headers:!0}}):null;if(e&&!a)throw Error("External MCP server not found");let n=new Map(a?.headers.map(e=>[e.id,e])??[]),s=e??(0,y.randomUUID)(),o=(0,t1.externalMcpHeadersCredential)(s),l=new Map((e?await this.credentials.getJson(o)??[]:[]).map(e=>[e.id,e]));for(let e of r.headers){if(e.id&&!n.has(e.id))throw Error(`Header ${e.name} does not belong to this server`);if(!e.id&&!e.value)throw Error(`A value is required for the new ${e.name} header`)}let u=r.headers.map(e=>{let t=e.id??(0,y.randomUUID)(),r=e.value||l.get(t)?.value;if(!r)throw Error(`A value is required for ${e.name}`);return{id:t,name:e.name,value:r}}),c=async e=>{await e.externalMcpServer.upsert({where:{id:s},create:{id:s,name:r.name,url:r.url,transport:r.transport,toolNamePrefix:r.toolNamePrefix},update:{name:r.name,url:r.url,transport:r.transport,toolNamePrefix:r.toolNamePrefix}}),await e.externalMcpServerHeader.deleteMany({where:{serverId:s}}),u.length&&await e.externalMcpServerHeader.createMany({data:u.map(e=>({id:e.id,serverId:s,name:e.name}))})};return u.length?await this.credentials.setJson(o,u,c):await this.credentials.delete(o,c),aa(await i.externalMcpServer.findUniqueOrThrow({where:{id:s},include:{headers:!0}}),!0)}async deleteExternalServer(e){return await this.credentials.delete((0,t1.externalMcpHeadersCredential)(e),async t=>{await t.externalMcpServer.delete({where:{id:e}})}),{id:e}}async testExternalServer(e){let t=await this.externalServerWithSecrets(e),r=await this.listRemoteTools(t);return{id:t.id,name:t.name,toolCount:r.length}}async catalog(){let e=await (0,tX.getPrismaClient)(),t=await e.externalMcpServer.findMany({orderBy:{name:"asc"},include:{headers:!0}}),r=await Promise.all(t.map(async e=>{try{let t=await this.listRemoteTools(await this.externalServerWithSecrets(e.id));return{id:`${ae}${e.id}`,name:e.name,source:"EXTERNAL",transport:ai(e.transport),url:e.url,error:null,tools:t.map(t=>({...t,name:`${e.toolNamePrefix}${t.name}`})),children:[]}}catch(t){return{id:`${ae}${e.id}`,name:e.name,source:"EXTERNAL",transport:ai(e.transport),url:e.url,error:t instanceof Error?t.message:String(t),tools:[],children:[]}}}));return{groups:[...this.builtInTools.catalog(),...r]}}async callTool(e,t){let r=()=>this.invokeTool(e);return t?this.audit.execute({...t,groupId:e.groupId,toolName:e.name,arguments:e.arguments},r):r()}async callBuiltInTool(e,t,r){let i=this.builtInTools.groupIdForName(e);if(!i)throw Error(`Unknown built-in tool: ${e}`);let a=()=>this.builtInTools.callByName(e,t);return r?this.audit.execute({...r,groupId:i,toolName:e,arguments:t},a):a()}async invokeTool(e){if(this.builtInTools.hasGroup(e.groupId))return this.builtInTools.call(e.groupId,e.name,e.arguments);if(!e.groupId.startsWith(ae))throw Error("Unknown tool group");let t=e.groupId.slice(ae.length),r=await this.externalServerWithSecrets(t);if(!e.name.startsWith(r.toolNamePrefix))throw Error("Tool name does not use this server's configured prefix");let i=e.name.slice(r.toolNamePrefix.length);if(!i)throw Error("Tool name is required");return this.withClient(r,t=>t.callTool({name:i,arguments:e.arguments},void 0,{timeout:12e4,resetTimeoutOnProgress:!0}))}async externalServerWithSecrets(e){let t=await (0,tX.getPrismaClient)(),r=await t.externalMcpServer.findUnique({where:{id:e},include:{headers:!0}});if(!r)throw Error("External MCP server not found");if(ai(r.transport),!r.headers.length)return{...r,headers:[]};let i=await this.credentials.getJson((0,t1.externalMcpHeadersCredential)(r.id));if(!i)throw Error("External MCP server headers are not configured; re-enter them in Settings");let a=new Map(i.map(e=>[e.id,e]));return{...r,headers:r.headers.map(e=>{let t=a.get(e.id);if(!t?.value)throw Error(`External MCP header ${e.name} is missing; re-enter it in Settings`);return{id:e.id,name:e.name,value:t.value}})}}async withClient(e,t){var r;let i,a=new ep({name:"ai-development-environment-tools",version:"0.1.0"}),n=(r=e,async(e,t)=>{let i=new Headers(r.headers.map(e=>[e.name,e.value]));return e instanceof Request&&e.headers.forEach((e,t)=>i.set(t,e)),new Headers(t?.headers).forEach((e,t)=>i.set(t,e)),fetch(e,{...t,headers:i})}),s="STREAMABLE_HTTP"===ai(e.transport)?new tQ(new URL(e.url),{fetch:n}):new tJ(new URL(e.url),{fetch:n}),o=()=>i??=a.close().catch(()=>void 0);try{let e;try{await Promise.race([a.connect(s,{timeout:15e3}),new Promise((t,r)=>{e=setTimeout(()=>{o(),r(Error("External MCP server connection timed out after 15000ms"))},15e3)})])}finally{e&&clearTimeout(e)}return await t(a)}finally{await o()}}async listRemoteTools(e){return this.withClient(e,async e=>{let t,r=[],i=new Set,a=0;do{let n=await e.listTools(t?{cursor:t}:void 0,{timeout:15e3});a+=1,r.push(...n.tools.map(e=>({name:e.name,title:e.title??null,description:e.description??null,inputSchema:e.inputSchema,outputSchema:e.outputSchema??null,annotations:e.annotations?{readOnlyHint:e.annotations.readOnlyHint??!1,destructiveHint:e.annotations.destructiveHint??!1,idempotentHint:e.annotations.idempotentHint??!1,openWorldHint:e.annotations.openWorldHint??!0}:null})));let s=n.nextCursor;if(s){if(i.has(s))throw Error("External MCP server returned a repeated tools/list cursor");if(a>=100)throw Error("External MCP server exceeded the tools/list pagination limit of 100 pages");i.add(s)}t=s}while(t)return r})}}function ao(e){let t=e.get("authorization");return t?.startsWith("Bearer ")&&t.slice(7).trim()||null}function al(e){let t=e.headers.get("x-request-id")?.trim();return t&&t.length<=128?t:(0,y.randomUUID)()}function au(e){return e.headers.get("cf-connecting-ip")??e.headers.get("x-forwarded-for")?.split(",")[0]?.trim()??"unknown"}function ac(e){return Response.json({error:{code:"TOOL_API_UNAUTHORIZED",message:e}},{status:401,headers:{"www-authenticate":"Bearer"}})}function ad(e,t){let r,i,a=process.env.TOOLS_API_TOKEN?.trim();if(!a)return{context:{caller:`anonymous@${au(e)}`,correlationId:al(e),source:t}};let n=ao(e.headers);if(!n||(r=Buffer.from(n),i=Buffer.from(a),!(r.length===i.length&&(0,y.timingSafeEqual)(r,i))))return{response:ac("A valid bearer token is required")};let s=(0,y.createHash)("sha256").update(n).digest("hex").slice(0,12);return{context:{caller:`bearer:${s}@${au(e)}`,correlationId:al(e),source:t}}}async function ap(e,t){let r=await t.authenticate(ao(e.headers));return r?{agentId:r,context:{caller:`agent:${r}@${au(e)}`,correlationId:al(e),source:"MCP"}}:{response:ac("A valid enrolled agent credential is required")}}e.s(["authorizeMcpPresetRequest",0,function(e){return ad(e,"MCP")},"authorizeRunMcpRequest",0,ap,"authorizeToolRequest",0,ad],583801);class ah{constructor(e){this._server=e}requestStream(e,t,r){return this._server.requestStream(e,t,r)}createMessageStream(e,t){let r=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!r?.sampling?.tools)throw Error("Client does not support sampling tools capability.");if(e.messages.length>0){let t=e.messages[e.messages.length-1],r=Array.isArray(t.content)?t.content:[t.content],i=r.some(e=>"tool_result"===e.type),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,n=a?Array.isArray(a.content)?a.content:[a.content]:[],s=n.some(e=>"tool_use"===e.type);if(i){if(r.some(e=>"tool_result"!==e.type))throw Error("The last message must contain only tool_result content if any is present");if(!s)throw Error("tool_result blocks are not matching any tool_use from the previous message")}if(s){let e=new Set(n.filter(e=>"tool_use"===e.type).map(e=>e.id)),t=new Set(r.filter(e=>"tool_result"===e.type).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},v.CreateMessageResultSchema,t)}elicitInputStream(e,t){let r=this._server.getClientCapabilities(),i=e.mode??"form";switch(i){case"url":if(!r?.elicitation?.url)throw Error("Client does not support url elicitation.");break;case"form":if(!r?.elicitation?.form)throw Error("Client does not support form elicitation.")}let a="form"===i&&void 0===e.mode?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:a},v.ElicitResultSchema,t)}async getTask(e,t){return this._server.getTask({taskId:e},t)}async getTaskResult(e,t,r){return this._server.getTaskResult({taskId:e},t,r)}async listTasks(e,t){return this._server.listTasks(e?{cursor:e}:void 0,t)}async cancelTask(e,t){return this._server.cancelTask({taskId:e},t)}}class am extends ei{constructor(e,t){super(t),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(v.LoggingLevelSchema.options.map((e,t)=>[e,t])),this.isMessageIgnored=(e,t)=>{let r=this._loggingLevels.get(t);return!!r&&this.LOG_LEVEL_SEVERITY.get(e)<this.LOG_LEVEL_SEVERITY.get(r)},this._capabilities=t?.capabilities??{},this._instructions=t?.instructions,this._jsonSchemaValidator=t?.jsonSchemaValidator??new el,this.setRequestHandler(v.InitializeRequestSchema,e=>this._oninitialize(e)),this.setNotificationHandler(v.InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(v.SetLevelRequestSchema,async(e,t)=>{let r=t.sessionId||t.requestInfo?.headers["mcp-session-id"]||void 0,{level:i}=e.params,a=v.LoggingLevelSchema.safeParse(i);return a.success&&this._loggingLevels.set(r,a.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new ah(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw Error("Cannot register capabilities after connecting to transport");this._capabilities=en(this._capabilities,e)}setRequestHandler(e,t){let r,i=(0,b.getObjectShape)(e),a=i?.method;if(!a)throw Error("Schema is missing a method literal");if((0,b.isZ4Schema)(a)){let e=a._zod?.def;r=e?.value??a.value}else{let e=a._def;r=e?.value??a.value}if("string"!=typeof r)throw Error("Schema method literal must be a string");if("tools/call"===r){let r=async(e,r)=>{let i=(0,b.safeParse)(v.CallToolRequestSchema,e);if(!i.success){let e=i.error instanceof Error?i.error.message:String(i.error);throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid tools/call request: ${e}`)}let{params:a}=i.data,n=await Promise.resolve(t(e,r));if(a.task){let e=(0,b.safeParse)(v.CreateTaskResultSchema,n);if(!e.success){let t=e.error instanceof Error?e.error.message:String(e.error);throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid task creation result: ${t}`)}return e.data}let s=(0,b.safeParse)(v.CallToolResultSchema,n);if(!s.success){let e=s.error instanceof Error?s.error.message:String(s.error);throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid tools/call result: ${e}`)}return s.data};return super.setRequestHandler(e,r)}return super.setRequestHandler(e,t)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${e})`)}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${e})`)}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${e})`)}}assertTaskCapability(e){ed(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&ec(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:v.SUPPORTED_PROTOCOL_VERSIONS.includes(t)?t:v.LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},v.EmptyResultSchema)}async createMessage(e,t){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw Error("Client does not support sampling tools capability.");if(e.messages.length>0){let t=e.messages[e.messages.length-1],r=Array.isArray(t.content)?t.content:[t.content],i=r.some(e=>"tool_result"===e.type),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,n=a?Array.isArray(a.content)?a.content:[a.content]:[],s=n.some(e=>"tool_use"===e.type);if(i){if(r.some(e=>"tool_result"!==e.type))throw Error("The last message must contain only tool_result content if any is present");if(!s)throw Error("tool_result blocks are not matching any tool_use from the previous message")}if(s){let e=new Set(n.filter(e=>"tool_use"===e.type).map(e=>e.id)),t=new Set(r.filter(e=>"tool_result"===e.type).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},v.CreateMessageResultWithToolsSchema,t):this.request({method:"sampling/createMessage",params:e},v.CreateMessageResultSchema,t)}async elicitInput(e,t){switch(e.mode??"form"){case"url":if(!this._clientCapabilities?.elicitation?.url)throw Error("Client does not support url elicitation.");return this.request({method:"elicitation/create",params:e},v.ElicitResultSchema,t);case"form":{if(!this._clientCapabilities?.elicitation?.form)throw Error("Client does not support form elicitation.");let r="form"===e.mode?e:{...e,mode:"form"},i=await this.request({method:"elicitation/create",params:r},v.ElicitResultSchema,t);if("accept"===i.action&&i.content&&r.requestedSchema)try{let e=this._jsonSchemaValidator.getValidator(r.requestedSchema)(i.content);if(!e.valid)throw new v.McpError(v.ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${e.errorMessage}`)}catch(e){if(e instanceof v.McpError)throw e;throw new v.McpError(v.ErrorCode.InternalError,`Error validating elicitation response: ${e instanceof Error?e.message:String(e)}`)}return i}}}createElicitationCompletionNotifier(e,t){if(!this._clientCapabilities?.elicitation?.url)throw Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},t)}async listRoots(e,t){return this.request({method:"roots/list",params:e},v.ListRootsResultSchema,t)}async sendLoggingMessage(e,t){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,t))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}let af=Symbol.for("mcp.completable");function ag(e){return!!e&&"object"==typeof e&&af in e}(i||(i={})).Completable="McpCompletable";let ay=/^[A-Za-z0-9._-]{1,128}$/;function aw(e){let t=function(e){let t=[];if(0===e.length)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(" ")&&t.push("Tool name contains spaces, which may cause parsing issues"),e.includes(",")&&t.push("Tool name contains commas, which may cause parsing issues"),(e.startsWith("-")||e.endsWith("-"))&&t.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(e.startsWith(".")||e.endsWith("."))&&t.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!ay.test(e)){let r=e.split("").filter(e=>!/[A-Za-z0-9._-]/.test(e)).filter((e,t,r)=>r.indexOf(e)===t);return t.push(`Tool name contains invalid characters: ${r.map(e=>`"${e}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}(e);var r=t.warnings;if(r.length>0){for(let t of(console.warn(`Tool name validation warning for "${e}":`),r))console.warn(` - ${t}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}return t.isValid}class ab{constructor(e){this._mcpServer=e}registerToolTask(e,t,r){let i={taskSupport:"required",...t.execution};if("forbidden"===i.taskSupport)throw Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,t.title,t.description,t.inputSchema,t.outputSchema,t.annotations,i,t._meta,r)}}class av{constructor(e,t){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new am(e,t)}get experimental(){return this._experimental||(this._experimental={tasks:new ab(this)}),this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(aA(v.ListToolsRequestSchema)),this.server.assertCanSetRequestHandler(aA(v.CallToolRequestSchema)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(v.ListToolsRequestSchema,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,t])=>{let r,i={name:e,title:t.title,description:t.description,inputSchema:(r=(0,b.normalizeObjectSchema)(t.inputSchema))?ee(r,{strictUnions:!0,pipeStrategy:"input"}):ak,annotations:t.annotations,execution:t.execution,_meta:t._meta};if(t.outputSchema){let e=(0,b.normalizeObjectSchema)(t.outputSchema);e&&(i.outputSchema=ee(e,{strictUnions:!0,pipeStrategy:"output"}))}return i})})),this.server.setRequestHandler(v.CallToolRequestSchema,async(e,t)=>{try{let r=this._registeredTools[e.params.name];if(!r)throw new v.McpError(v.ErrorCode.InvalidParams,`Tool ${e.params.name} not found`);if(!r.enabled)throw new v.McpError(v.ErrorCode.InvalidParams,`Tool ${e.params.name} disabled`);let i=!!e.params.task,a=r.execution?.taskSupport,n="createTask"in r.handler;if(("required"===a||"optional"===a)&&!n)throw new v.McpError(v.ErrorCode.InternalError,`Tool ${e.params.name} has taskSupport '${a}' but was not registered with registerToolTask`);if("required"===a&&!i)throw new v.McpError(v.ErrorCode.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if("optional"===a&&!i&&n)return await this.handleAutomaticTaskPolling(r,e,t);let s=await this.validateToolInput(r,e.params.arguments,e.params.name),o=await this.executeToolHandler(r,s,t);if(i)return o;return await this.validateToolOutput(r,o,e.params.name),o}catch(e){if(e instanceof v.McpError&&e.code===v.ErrorCode.UrlElicitationRequired)throw e;return this.createToolError(e instanceof Error?e.message:String(e))}}),this._toolHandlersInitialized=!0)}createToolError(e){return{content:[{type:"text",text:e}],isError:!0}}async validateToolInput(e,t,r){if(!e.inputSchema)return;let i=(0,b.normalizeObjectSchema)(e.inputSchema)??e.inputSchema,a=await (0,b.safeParseAsync)(i,t);if(!a.success){let e="error"in a?a.error:"Unknown error",t=(0,b.getParseErrorMessage)(e);throw new v.McpError(v.ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${r}: ${t}`)}return a.data}async validateToolOutput(e,t,r){if(!e.outputSchema||!("content"in t)||t.isError)return;if(!t.structuredContent)throw new v.McpError(v.ErrorCode.InvalidParams,`Output validation error: Tool ${r} has an output schema but no structured content was provided`);let i=(0,b.normalizeObjectSchema)(e.outputSchema),a=await (0,b.safeParseAsync)(i,t.structuredContent);if(!a.success){let e="error"in a?a.error:"Unknown error",t=(0,b.getParseErrorMessage)(e);throw new v.McpError(v.ErrorCode.InvalidParams,`Output validation error: Invalid structured content for tool ${r}: ${t}`)}}async executeToolHandler(e,t,r){let i=e.handler;if("createTask"in i){if(!r.taskStore)throw Error("No task store provided.");let a={...r,taskStore:r.taskStore};return e.inputSchema?await Promise.resolve(i.createTask(t,a)):await Promise.resolve(i.createTask(a))}return e.inputSchema?await Promise.resolve(i(t,r)):await Promise.resolve(i(r))}async handleAutomaticTaskPolling(e,t,r){if(!r.taskStore)throw Error("No task store provided for task-capable tool.");let i=await this.validateToolInput(e,t.params.arguments,t.params.name),a=e.handler,n={...r,taskStore:r.taskStore},s=i?await Promise.resolve(a.createTask(i,n)):await Promise.resolve(a.createTask(n)),o=s.task.taskId,l=s.task,u=l.pollInterval??5e3;for(;"completed"!==l.status&&"failed"!==l.status&&"cancelled"!==l.status;){await new Promise(e=>setTimeout(e,u));let e=await r.taskStore.getTask(o);if(!e)throw new v.McpError(v.ErrorCode.InternalError,`Task ${o} not found during polling`);l=e}return await r.taskStore.getTaskResult(o)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(aA(v.CompleteRequestSchema)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(v.CompleteRequestSchema,async e=>{switch(e.params.ref.type){case"ref/prompt":return(0,v.assertCompleteRequestPrompt)(e),this.handlePromptCompletion(e,e.params.ref);case"ref/resource":return(0,v.assertCompleteRequestResourceTemplate)(e),this.handleResourceCompletion(e,e.params.ref);default:throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(e,t){let r,i=this._registeredPrompts[t.name];if(!i)throw new v.McpError(v.ErrorCode.InvalidParams,`Prompt ${t.name} not found`);if(!i.enabled)throw new v.McpError(v.ErrorCode.InvalidParams,`Prompt ${t.name} disabled`);if(!i.argsSchema)return aC;let a=(0,b.getObjectShape)(i.argsSchema),n=a?.[e.params.argument.name];if(!ag(n))return aC;let s=(r=n[af],r?.complete);return s?a_(await s(e.params.argument.value,e.params.context)):aC}async handleResourceCompletion(e,t){let r=Object.values(this._registeredResourceTemplates).find(e=>e.resourceTemplate.uriTemplate.toString()===t.uri);if(!r){if(this._registeredResources[t.uri])return aC;throw new v.McpError(v.ErrorCode.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let i=r.resourceTemplate.completeCallback(e.params.argument.name);return i?a_(await i(e.params.argument.value,e.params.context)):aC}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(aA(v.ListResourcesRequestSchema)),this.server.assertCanSetRequestHandler(aA(v.ListResourceTemplatesRequestSchema)),this.server.assertCanSetRequestHandler(aA(v.ReadResourceRequestSchema)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(v.ListResourcesRequestSchema,async(e,t)=>{let r=Object.entries(this._registeredResources).filter(([e,t])=>t.enabled).map(([e,t])=>({uri:e,name:t.name,...t.metadata})),i=[];for(let e of Object.values(this._registeredResourceTemplates))if(e.resourceTemplate.listCallback)for(let r of(await e.resourceTemplate.listCallback(t)).resources)i.push({...e.metadata,...r});return{resources:[...r,...i]}}),this.server.setRequestHandler(v.ListResourceTemplatesRequestSchema,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([e,t])=>({name:e,uriTemplate:t.resourceTemplate.uriTemplate.toString(),...t.metadata}))})),this.server.setRequestHandler(v.ReadResourceRequestSchema,async(e,t)=>{let r=new URL(e.params.uri),i=this._registeredResources[r.toString()];if(i){if(!i.enabled)throw new v.McpError(v.ErrorCode.InvalidParams,`Resource ${r} disabled`);return i.readCallback(r,t)}for(let e of Object.values(this._registeredResourceTemplates)){let i=e.resourceTemplate.uriTemplate.match(r.toString());if(i)return e.readCallback(r,i,t)}throw new v.McpError(v.ErrorCode.InvalidParams,`Resource ${r} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(aA(v.ListPromptsRequestSchema)),this.server.assertCanSetRequestHandler(aA(v.GetPromptRequestSchema)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(v.ListPromptsRequestSchema,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,t])=>{var r;let i;return{name:e,title:t.title,description:t.description,arguments:t.argsSchema?(r=t.argsSchema,(i=(0,b.getObjectShape)(r))?Object.entries(i).map(([e,t])=>({name:e,description:(0,b.getSchemaDescription)(t),required:!(0,b.isSchemaOptional)(t)})):[]):void 0}})})),this.server.setRequestHandler(v.GetPromptRequestSchema,async(e,t)=>{let r=this._registeredPrompts[e.params.name];if(!r)throw new v.McpError(v.ErrorCode.InvalidParams,`Prompt ${e.params.name} not found`);if(!r.enabled)throw new v.McpError(v.ErrorCode.InvalidParams,`Prompt ${e.params.name} disabled`);if(r.argsSchema){let i=(0,b.normalizeObjectSchema)(r.argsSchema),a=await (0,b.safeParseAsync)(i,e.params.arguments);if(!a.success){let t="error"in a?a.error:"Unknown error",r=(0,b.getParseErrorMessage)(t);throw new v.McpError(v.ErrorCode.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${r}`)}let n=a.data,s=r.callback;return await Promise.resolve(s(n,t))}{let e=r.callback;return await Promise.resolve(e(t))}}),this._promptHandlersInitialized=!0)}resource(e,t,...r){let i;"object"==typeof r[0]&&(i=r.shift());let a=r[0];if("string"==typeof t){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let r=this._createRegisteredResource(e,void 0,t,i,a);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),r}{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let r=this._createRegisteredResourceTemplate(e,void 0,t,i,a);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),r}}registerResource(e,t,r,i){if("string"==typeof t){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let a=this._createRegisteredResource(e,r.title,t,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let a=this._createRegisteredResourceTemplate(e,r.title,t,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}}_createRegisteredResource(e,t,r,i,a){let n={name:e,title:t,metadata:i,readCallback:a,enabled:!0,disable:()=>n.update({enabled:!1}),enable:()=>n.update({enabled:!0}),remove:()=>n.update({uri:null}),update:e=>{void 0!==e.uri&&e.uri!==r&&(delete this._registeredResources[r],e.uri&&(this._registeredResources[e.uri]=n)),void 0!==e.name&&(n.name=e.name),void 0!==e.title&&(n.title=e.title),void 0!==e.metadata&&(n.metadata=e.metadata),void 0!==e.callback&&(n.readCallback=e.callback),void 0!==e.enabled&&(n.enabled=e.enabled),this.sendResourceListChanged()}};return this._registeredResources[r]=n,n}_createRegisteredResourceTemplate(e,t,r,i,a){let n={resourceTemplate:r,title:t,metadata:i,readCallback:a,enabled:!0,disable:()=>n.update({enabled:!1}),enable:()=>n.update({enabled:!0}),remove:()=>n.update({name:null}),update:t=>{void 0!==t.name&&t.name!==e&&(delete this._registeredResourceTemplates[e],t.name&&(this._registeredResourceTemplates[t.name]=n)),void 0!==t.title&&(n.title=t.title),void 0!==t.template&&(n.resourceTemplate=t.template),void 0!==t.metadata&&(n.metadata=t.metadata),void 0!==t.callback&&(n.readCallback=t.callback),void 0!==t.enabled&&(n.enabled=t.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=n;let s=r.uriTemplate.variableNames;return Array.isArray(s)&&s.some(e=>!!r.completeCallback(e))&&this.setCompletionRequestHandler(),n}_createRegisteredPrompt(e,t,r,i,a){let n={title:t,description:r,argsSchema:void 0===i?void 0:(0,b.objectFromShape)(i),callback:a,enabled:!0,disable:()=>n.update({enabled:!1}),enable:()=>n.update({enabled:!0}),remove:()=>n.update({name:null}),update:t=>{void 0!==t.name&&t.name!==e&&(delete this._registeredPrompts[e],t.name&&(this._registeredPrompts[t.name]=n)),void 0!==t.title&&(n.title=t.title),void 0!==t.description&&(n.description=t.description),void 0!==t.argsSchema&&(n.argsSchema=(0,b.objectFromShape)(t.argsSchema)),void 0!==t.callback&&(n.callback=t.callback),void 0!==t.enabled&&(n.enabled=t.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=n,i&&Object.values(i).some(e=>ag(e instanceof e3.ZodOptional?e._def?.innerType:e))&&this.setCompletionRequestHandler(),n}_createRegisteredTool(e,t,r,i,a,n,s,o,l){aw(e);let u={title:t,description:r,inputSchema:ax(i),outputSchema:ax(a),annotations:n,execution:s,_meta:o,handler:l,enabled:!0,disable:()=>u.update({enabled:!1}),enable:()=>u.update({enabled:!0}),remove:()=>u.update({name:null}),update:t=>{void 0!==t.name&&t.name!==e&&("string"==typeof t.name&&aw(t.name),delete this._registeredTools[e],t.name&&(this._registeredTools[t.name]=u)),void 0!==t.title&&(u.title=t.title),void 0!==t.description&&(u.description=t.description),void 0!==t.paramsSchema&&(u.inputSchema=(0,b.objectFromShape)(t.paramsSchema)),void 0!==t.outputSchema&&(u.outputSchema=(0,b.objectFromShape)(t.outputSchema)),void 0!==t.callback&&(u.handler=t.callback),void 0!==t.annotations&&(u.annotations=t.annotations),void 0!==t._meta&&(u._meta=t._meta),void 0!==t.enabled&&(u.enabled=t.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=u,this.setToolRequestHandlers(),this.sendToolListChanged(),u}tool(e,...t){let r,i,a,n;if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);if("string"==typeof t[0]&&(r=t.shift()),t.length>1){let r=t[0];if(aI(r))i=t.shift(),t.length>1&&"object"==typeof t[0]&&null!==t[0]&&!aI(t[0])&&(n=t.shift());else if("object"==typeof r&&null!==r){if(Object.values(r).some(e=>"object"==typeof e&&null!==e))throw Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);n=t.shift()}}let s=t[0];return this._createRegisteredTool(e,void 0,r,i,a,n,{taskSupport:"forbidden"},void 0,s)}registerTool(e,t,r){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let{title:i,description:a,inputSchema:n,outputSchema:s,annotations:o,_meta:l}=t;return this._createRegisteredTool(e,i,a,n,s,o,{taskSupport:"forbidden"},l,r)}prompt(e,...t){let r,i;if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);"string"==typeof t[0]&&(r=t.shift()),t.length>1&&(i=t.shift());let a=t[0],n=this._createRegisteredPrompt(e,void 0,r,i,a);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),n}registerPrompt(e,t,r){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let{title:i,description:a,argsSchema:n}=t,s=this._createRegisteredPrompt(e,i,a,n,r);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),s}isConnected(){return void 0!==this.server.transport}async sendLoggingMessage(e,t){return this.server.sendLoggingMessage(e,t)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}}let ak={type:"object",properties:{}};function aS(e){return null!==e&&"object"==typeof e&&"parse"in e&&"function"==typeof e.parse&&"safeParse"in e&&"function"==typeof e.safeParse}function aE(e){return"_def"in e||"_zod"in e||aS(e)}function aI(e){return!("object"!=typeof e||null===e||aE(e))&&(0===Object.keys(e).length||Object.values(e).some(aS))}function ax(e){if(e){if(aI(e))return(0,b.objectFromShape)(e);if(!aE(e))throw Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return e}}function aA(e){let t=(0,b.getObjectShape)(e),r=t?.method;if(!r)throw Error("Schema is missing a method literal");let i=(0,b.getLiteralValue)(r);if("string"==typeof i)return i;throw Error("Schema method literal must be a string")}function a_(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}let aC={completion:{values:[],hasMore:!1}};e.s(["createBuiltInMcpServer",0,function(e,t=(t,r)=>e.callByName(t,r),r){let i=new av({name:"ai-development-environment",version:"0.1.0"}),a=i.registerTool.bind(i);for(let i of e.definitions())(!r||r.has(i.name))&&a(i.name,{title:i.title,description:i.description,inputSchema:i.inputSchema,outputSchema:i.outputSchema,annotations:i.annotations},async e=>t(i.name,e));return i}],700909),e.s([],719961);var aR=e.i(119909);let aT="server:worktree-automations",aD=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]),aN=new Set(["SUCCEEDED","FAILED","CANCELLED"]);function aO(e){let[t,r,i]=e.split("/");if(!t||!r||i)throw Error("A GitHub repository must be in owner/name format");return{owner:t,name:r}}function aP(e){return{worktreeId:e.worktreeId,state:e.state,conflictWorkflowId:e.conflictWorkflowId,conflictWorkflowChoice:e.conflictWorkflowChoice,lastError:e.lastError,lastSyncedAt:e.lastSyncedAt?.toISOString()??null,updatedAt:e.updatedAt.toISOString()}}function a$(e){return{...e,mergeMethod:e.mergeMethod,updatedAt:e.updatedAt.toISOString()}}class aU{worktrees;github;jira;workflows;agentControl;polling;timer;running;rerunRequested;constructor(e,t,r,i,a,n){this.worktrees=e,this.github=t,this.jira=r,this.workflows=i,this.agentControl=a,this.polling=n,this.timer=null,this.running=!1,this.rerunRequested=!1,this.agentControl.registerCompletionObserver(async e=>{e.kind===aR.WORKTREE_AUTO_SYNC_JOB_KIND&&this.changed()}),this.polling?.register({id:aT,kind:"WORKTREE_AUTOMATION",runtime:"SERVER",enabled:!0,cadenceSeconds:60,details:{}})}startRuntime(){queueMicrotask(()=>void this.reconcile())}schedule(){this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>void this.reconcile(),6e4),this.timer.unref(),this.polling?.schedule(aT,new Date(Date.now()+6e4))}changed(){if(this.running){this.rerunRequested=!0;return}this.timer&&clearTimeout(this.timer),this.timer=null,queueMicrotask(()=>void this.reconcile())}async stopAutoSyncWork(e){e?.activeJobId&&await this.agentControl.cancelJob(e.activeJobId).catch(()=>null),e?.workflowRunId&&await this.workflows.lifecycle(e.workflowRunId,"CANCEL").catch(()=>null)}async autoSync(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoSync.findUnique({where:{worktreeId:e}});return r?aP(r):null}async configureAutoSync(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktree.findFirst({where:{id:e.worktreeId,missingAt:null},select:{id:!0,branch:!0,codebaseId:!0,codebase:{select:{repositoryId:!0}}}});if(!r?.branch)throw Error("Auto Sync requires a branch");await this.stopAutoSyncWork(await t.worktreeAutoSync.findUnique({where:{worktreeId:r.id},select:{activeJobId:!0,workflowRunId:!0}}));let i=e.conflictWorkflowId?.trim()||null;if(i){let e=await t.workflow.findUnique({where:{id:i},select:{enabled:!0,archivedAt:!0,activeVersionId:!0,quickActionKind:!0,quickActionRepositories:{select:{repositoryId:!0}}}});if(!e?.enabled||e.archivedAt||!e.activeVersionId||"MERGE_CONFLICT"!==e.quickActionKind)throw Error("Select an enabled merge-conflict quick action workflow");if(e.quickActionRepositories.length>0&&!e.quickActionRepositories.some(({repositoryId:e})=>e===r.codebase.repositoryId))throw Error("The merge-conflict workflow is not available for this repository")}let a=await t.worktreeAutoSync.upsert({where:{worktreeId:r.id},create:{worktreeId:r.id,branch:r.branch,conflictWorkflowId:i,conflictWorkflowChoice:e.conflictWorkflowChoice?.trim()||null},update:{state:"ACTIVE",branch:r.branch,conflictWorkflowId:i,conflictWorkflowChoice:e.conflictWorkflowChoice?.trim()||null,activeJobId:null,workflowRunId:null,lastError:null}});return this.worktrees.publishAutomationChange(r.id,r.codebaseId),this.changed(),aP(a)}async cancelAutoSync(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoSync.findUnique({where:{worktreeId:e},select:{activeJobId:!0,workflowRunId:!0}});await this.stopAutoSyncWork(r);let i=await t.worktreeAutoSync.deleteMany({where:{worktreeId:e}});return this.worktrees.publishAutomationChange(e),i.count>0}async retryAutoSync(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoSync.update({where:{worktreeId:e},data:{state:"ACTIVE",activeJobId:null,workflowRunId:null,lastError:null}});return this.worktrees.publishAutomationChange(e),this.changed(),aP(r)}async autoMerge(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoMerge.findUnique({where:{worktreeId:e}});return r?a$(r):null}async configureAutoMerge(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktree.findFirst({where:{id:e.worktreeId,missingAt:null},select:{id:!0,primary:!0,branch:!0,codebaseId:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}});if(!r?.branch)throw Error("Auto Merge requires a branch");if(e.deleteWorktree&&r.primary)throw Error("The primary worktree cannot be deleted after merge");let i=await t.worktreeAutoMerge.findUnique({where:{worktreeId:r.id}}),a=await this.worktrees.ticketKeyForWorktree(r.id);if(e.moveTicketToDone){if(!a)throw Error("This worktree is not linked to a Jira ticket");let e=await t.jiraProject.findUnique({where:{key:a.split("-")[0]??""},select:{doneStatusId:!0}});if(!e?.doneStatusId)throw Error("Configure this Jira project's done status before enabling this option")}let n=aO(e.repositoryNameWithOwner),s=await this.github.pullRequestAutomationState(n.owner,n.name,e.pullRequestNumber);if(s.headRefName!==r.branch)throw Error("The pull request does not belong to this worktree branch");if(!s.headRepositoryNameWithOwner)throw Error("The pull request head repository is unavailable");if(r.codebase.repository.canonicalOrigin.toLowerCase()!==`github.com/${s.headRepositoryNameWithOwner.toLowerCase()}`)throw Error("The pull request head repository does not match this worktree");let o=!!(i&&(i.repositoryNameWithOwner.toLowerCase()!==e.repositoryNameWithOwner.toLowerCase()||i.pullRequestNumber!==e.pullRequestNumber)),l=!1,u=!1;try{if(i&&o){let e=aO(i.repositoryNameWithOwner),t=await this.github.pullRequestAutomationState(e.owner,e.name,i.pullRequestNumber);"OPEN"===t.state&&t.autoMergeEnabled&&(await this.github.disablePullRequestAutoMerge({...e,number:i.pullRequestNumber},"WORKTREE_AUTOMATION"),l=!0)}u=!0,await this.github.enablePullRequestAutoMerge({...n,number:e.pullRequestNumber,method:e.method,commitHeadline:e.commitHeadline,commitBody:e.commitBody,authorEmail:e.authorEmail},"WORKTREE_AUTOMATION");let s=await t.worktreeAutoMerge.upsert({where:{worktreeId:r.id},create:{worktreeId:r.id,repositoryNameWithOwner:e.repositoryNameWithOwner,pullRequestNumber:e.pullRequestNumber,branch:r.branch,mergeMethod:e.method,commitHeadline:e.commitHeadline.trim(),commitBody:e.commitBody,authorEmail:e.authorEmail?.trim()||null,deleteWorktree:e.deleteWorktree,moveTicketToDone:e.moveTicketToDone,ticketKey:a},update:{state:"ACTIVE",repositoryNameWithOwner:e.repositoryNameWithOwner,pullRequestNumber:e.pullRequestNumber,branch:r.branch,mergeMethod:e.method,commitHeadline:e.commitHeadline.trim(),commitBody:e.commitBody,authorEmail:e.authorEmail?.trim()||null,deleteWorktree:e.deleteWorktree,moveTicketToDone:e.moveTicketToDone,ticketKey:a,ticketMovedAt:null,deleteJobId:null,lastError:null}});return this.worktrees.publishAutomationChange(r.id,r.codebaseId),this.changed(),a$(s)}catch(t){if(u&&await this.github.disablePullRequestAutoMerge({...n,number:e.pullRequestNumber},"WORKTREE_AUTOMATION").catch(()=>null),i&&(l||!o)){let e=aO(i.repositoryNameWithOwner);await this.github.enablePullRequestAutoMerge({...e,number:i.pullRequestNumber,method:i.mergeMethod,commitHeadline:i.commitHeadline,commitBody:i.commitBody,authorEmail:i.authorEmail},"WORKTREE_AUTOMATION").catch(()=>null)}throw t}}async cancelAutoMerge(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoMerge.findUnique({where:{worktreeId:e}});if(!r)return!1;let i=aO(r.repositoryNameWithOwner),a=await this.github.pullRequestAutomationState(i.owner,i.name,r.pullRequestNumber);return"OPEN"===a.state&&a.autoMergeEnabled&&await this.github.disablePullRequestAutoMerge({...i,number:r.pullRequestNumber},"WORKTREE_AUTOMATION"),await t.worktreeAutoMerge.delete({where:{worktreeId:e}}),this.worktrees.publishAutomationChange(e),!0}async retryAutoMerge(e){let t=await (0,tX.getPrismaClient)(),r=await t.worktreeAutoMerge.findUniqueOrThrow({where:{worktreeId:e}}),i=aO(r.repositoryNameWithOwner),a="MERGED"===(await this.github.pullRequestAutomationState(i.owner,i.name,r.pullRequestNumber)).state?"POST_MERGE":"ACTIVE",n=await t.worktreeAutoMerge.update({where:{worktreeId:e},data:{state:a,lastError:null,deleteJobId:null}});return this.worktrees.publishAutomationChange(e),this.changed(),a$(n)}async reconcile(){if(this.running){this.rerunRequested=!0;return}this.running=!0;try{let e=async()=>{do this.rerunRequested=!1,await this.reconcileAutoSync(),await this.reconcileAutoMerge();while(this.rerunRequested)};this.polling?await this.polling.run(aT,e):await e()}catch{}finally{this.running=!1,this.schedule()}}async reconcileAutoSync(){let e=await (0,tX.getPrismaClient)();for(let t of(await e.worktreeAutoSync.findMany({where:{state:{in:["ACTIVE","SYNCING","RESOLVING"]}},include:{worktree:{select:{codebaseId:!0}}}})))try{let r=await e.worktree.findUnique({where:{id:t.worktreeId},select:{branch:!0}});if(r?.branch!==t.branch)throw Error("Auto Sync paused because the worktree branch changed");if("ACTIVE"===t.state){let r=await this.worktrees.createAutoSyncJob(t.worktreeId,"SYNC",t.branch,(0,y.randomUUID)());await e.worktreeAutoSync.update({where:{worktreeId:t.worktreeId},data:{state:"SYNCING",activeJobId:r.id,lastError:null}});continue}if("RESOLVING"===t.state){if(!t.workflowRunId)throw Error("The conflict workflow run is missing");let r=await this.workflows.run(t.workflowRunId);if(!r||!aN.has(r.status))continue;if("SUCCEEDED"!==r.status)throw Error(`The conflict workflow ${r.status.toLowerCase()}`);let i=await this.worktrees.createAutoSyncJob(t.worktreeId,"FINALIZE",t.branch,(0,y.randomUUID)());await e.worktreeAutoSync.update({where:{worktreeId:t.worktreeId},data:{state:"SYNCING",activeJobId:i.id,workflowRunId:null}});continue}if(!t.activeJobId)throw Error("The Auto Sync job is missing");let i=await this.agentControl.getJob(t.activeJobId);if(!i||!aD.has(i.status))continue;if("SUCCEEDED"!==i.status)throw Error(i.error||`Auto Sync ${i.status.toLowerCase()}`);let a=function(e){if(!e)return null;try{let t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t))return null;return"string"==typeof t.outcome?String(t.outcome):null}catch{return null}}(i.resultJson);if("CONFLICT"===a){if(!t.conflictWorkflowId)throw Error("Auto Sync paused because the rebase has merge conflicts");let r=await this.workflows.trigger({workflowId:t.conflictWorkflowId,resourceKind:"WORKTREE",resourceId:t.worktreeId,subjectKey:`auto-sync:${t.worktreeId}:${i.id}`,choice:t.conflictWorkflowChoice});if(!r)throw Error("The conflict workflow did not start");await e.worktreeAutoSync.update({where:{worktreeId:t.worktreeId},data:{state:"RESOLVING",activeJobId:null,workflowRunId:r.id,lastError:null}});continue}if("UNRESOLVED"===a)throw Error("The conflict workflow did not fully resolve the rebase");if("SYNCED"!==a&&"NO_CHANGE"!==a)throw Error("The Auto Sync job returned an unknown result");await e.worktreeAutoSync.update({where:{worktreeId:t.worktreeId},data:{state:"ACTIVE",activeJobId:null,workflowRunId:null,lastError:null,..."SYNCED"===a?{lastSyncedAt:new Date}:{}}})}catch(a){let r=a instanceof Error?a.message:String(a),i=/offline|busy|already has an active job|temporarily/i.test(r);await e.worktreeAutoSync.updateMany({where:{worktreeId:t.worktreeId},data:{state:i?"ACTIVE":"PAUSED",activeJobId:null,workflowRunId:null,lastError:r}})}finally{this.worktrees.publishAutomationChange(t.worktreeId,t.worktree.codebaseId)}}async reconcileAutoMerge(){let e=await (0,tX.getPrismaClient)();for(let t of(await e.worktreeAutoMerge.findMany({where:{state:{in:["ACTIVE","POST_MERGE"]}},include:{worktree:{select:{codebaseId:!0,branch:!0,headSha:!0,primary:!0}}}})))try{let r=aO(t.repositoryNameWithOwner);if("ACTIVE"===t.state){let i=await this.github.pullRequestAutomationState(r.owner,r.name,t.pullRequestNumber);if("MERGED"===i.state)await e.worktreeAutoMerge.update({where:{worktreeId:t.worktreeId},data:{state:"POST_MERGE",lastError:null}}),this.rerunRequested=!0;else if("OPEN"!==i.state)throw Error("The pull request closed without merging");else if(!i.autoMergeEnabled)throw Error("GitHub Auto Merge is no longer enabled");continue}if(t.moveTicketToDone&&t.ticketKey&&!t.ticketMovedAt&&(await this.jira.transitionTicketToConfiguredDone(t.ticketKey),await e.worktreeAutoMerge.update({where:{worktreeId:t.worktreeId},data:{ticketMovedAt:new Date,lastError:null}})),!t.deleteWorktree){await e.worktreeAutoMerge.update({where:{worktreeId:t.worktreeId},data:{state:"COMPLETED",lastError:null}});continue}if(t.worktree.primary)throw Error("The primary worktree cannot be deleted");if(!t.deleteJobId){let i=await this.github.pullRequestAutomationState(r.owner,r.name,t.pullRequestNumber);if("MERGED"!==i.state)throw Error("The pull request is no longer merged");if(i.headRefName!==t.branch)throw Error("The merged pull request branch does not match the Auto Merge rule");if(t.worktree.branch!==t.branch)throw Error("The worktree branch changed after Auto Merge completed");if(!t.worktree.headSha||t.worktree.headSha!==i.headRefOid)throw Error("The worktree HEAD does not match the merged pull request");let a=await this.worktrees.deleteWorktree({worktreeId:t.worktreeId,deleteRemoteBranch:!1,requireClean:!0,expectedBranch:t.branch,expectedHeadSha:i.headRefOid,requestId:`auto-merge-${(0,y.randomUUID)()}`});await e.worktreeAutoMerge.update({where:{worktreeId:t.worktreeId},data:{deleteJobId:a.id,lastError:null}});continue}let i=await this.agentControl.getJob(t.deleteJobId);if(!i||!aD.has(i.status))continue;if("SUCCEEDED"!==i.status)throw Error(i.error||`Worktree deletion ${i.status.toLowerCase()}`);await e.worktreeAutoMerge.updateMany({where:{worktreeId:t.worktreeId},data:{state:"COMPLETED",lastError:null}})}catch(r){await e.worktreeAutoMerge.updateMany({where:{worktreeId:t.worktreeId},data:{state:"ACTION_REQUIRED",lastError:r instanceof Error?r.message:String(r)}})}finally{this.worktrees.publishAutomationChange(t.worktreeId,t.worktree.codebaseId)}}}var aB=e.i(750227),aj=e.i(320058);function aL(e,t){let r=[],i=e.includes("CLAUDE");return i&&r.push("CLAUDE"),(e.includes("CODEX")||!i&&e.length>0||"GLOBAL"===t&&e.includes("GITHUB_COPILOT"))&&r.push("AGENTS"),r}let aq="default",aM=["PREPARING","READY","APPLYING","NEEDS_RESOLUTION"],aF=["SCAN","READ"],aK=[...aF,"APPLY"],aV={files:{orderBy:{path:"asc"}},groups:{include:{group:!0}}},aH={skills:{include:{skill:{include:{files:!0}}}},repositories:{include:{repository:!0}}};function aG(e,t){if(!e)return t;try{return JSON.parse(e)}catch{return t}}function aW(e){return[...e.cursorEnabled?["CURSOR"]:[],...e.githubCopilotEnabled?["GITHUB_COPILOT"]:[],...e.codexEnabled?["CODEX"]:[],...e.claudeEnabled?["CLAUDE"]:[],...e.openCodeEnabled?["OPENCODE"]:[]]}function aJ(e,t){return"AGENTS"===t?[".agents","skills"]:"CLAUDE"===t?[".claude","skills"]:"GLOBAL"===e?"CURSOR"===t?[".cursor","skills"]:"GITHUB_COPILOT"===t?[".copilot","skills"]:"CODEX_LEGACY"===t?[".codex","skills"]:[".config","opencode","skills"]:"CURSOR"===t?[".cursor","skills"]:"GITHUB_COPILOT"===t?[".github","skills"]:"CODEX_LEGACY"===t?[".codex","skills"]:[".opencode","skills"]}function az(e){return/^[A-Za-z]:[\\/]/.test(e)||e.startsWith("\\\\")?aB.win32:aB.posix}function aZ(e,...t){return az(e).join(e,...t)}function aY(e){return az(e).dirname(e)}class aQ{agentControl;constructor(e){this.agentControl=e,this.agentControl.registerCompletionHandler(aj.SKILL_SCAN_JOB_KIND,e=>this.completeScan(e)),this.agentControl.registerCompletionHandler(aj.SKILL_READ_JOB_KIND,e=>this.completeRead(e)),this.agentControl.registerCompletionHandler(aj.SKILL_APPLY_JOB_KIND,e=>this.completeApply(e)),this.agentControl.registerConnectionHandler(async()=>{await this.requestAutoReconcile()})}publish(e){r6.agentEventBus.publish(r6.SKILLS_CHANGED_TOPIC,{id:e??null}),e&&r6.agentEventBus.publish((0,r6.skillSyncRunTopic)(e),{id:e})}subscribe(){return r6.agentEventBus.iterate(r6.SKILLS_CHANGED_TOPIC)}subscribeRun(e){return r6.agentEventBus.iterate((0,r6.skillSyncRunTopic)(e))}async settings(){return(await (0,tX.getPrismaClient)()).skillSettings.upsert({where:{id:aq},create:{id:aq},update:{}})}async overview(e=""){let t=await (0,tX.getPrismaClient)(),r=e.trim().toLocaleLowerCase(),[i,a,n,s,o,l]=await Promise.all([t.skill.findMany({where:{deletedAt:null},include:aV,orderBy:{name:"asc"}}),t.skillGroup.findMany({include:aH,orderBy:{name:"asc"}}),t.skillToolObservation.findMany({include:{agent:!0},orderBy:[{tool:"asc"},{agent:{name:"asc"}}]}),t.skillInstallation.findMany({where:{present:!0},include:{agent:!0,codebase:{include:{repository:!0}},worktree:!0,baseline:!0,skill:!0},orderBy:[{skillName:"asc"},{rootPath:"asc"}]}),this.settings(),t.codebaseRepository.findMany({orderBy:{name:"asc"}})]);return{skills:r?i.filter(e=>[e.name,e.description,...e.groups.map(({group:e})=>e.name)].some(e=>e.toLocaleLowerCase().includes(r))):i,groups:a,observations:n,installations:r?s.filter(e=>[e.skillName,e.description,e.agent.name,e.rootPath,e.codebase?.repository.name??""].some(e=>e.toLocaleLowerCase().includes(r))):s,settings:o,repositories:l}}async getSkill(e){return(await (0,tX.getPrismaClient)()).skill.findFirst({where:{id:e,deletedAt:null},include:aV})}async saveSkill(e){let t,r=(t=e.files.map(e=>({path:e.path,contentsBase64:e.contentsBase64,executable:e.executable})),(0,aj.parseSkillPackage)({name:e.name,description:e.description,packageHash:(0,aj.hashSkillFiles)(t),files:t})),i=[...new Set(e.groupIds)].slice(0,100),a=await (0,tX.getPrismaClient)();if(await a.skillGroup.count({where:{id:{in:i}}})!==i.length)throw Error("One or more skill groups were not found");let n=await a.skill.findUnique({where:{name:r.name}});if(n&&n.id!==e.id)throw Error("Skill names must be unique");let s=e.id??(0,y.randomUUID)(),o=e.id?await a.skillGroupSkill.findMany({where:{skillId:s},select:{groupId:!0}}):[];return await a.$transaction(async t=>{await t.skill.upsert({where:{id:s},create:{id:s,name:r.name,description:r.description,syncGlobally:e.syncGlobally,packageHash:r.packageHash},update:{name:r.name,description:r.description,syncGlobally:e.syncGlobally,packageHash:r.packageHash,deletedAt:null}}),await t.skillFile.deleteMany({where:{skillId:s}}),await t.skillFile.createMany({data:r.files.map(e=>{let t=Buffer.from(e.contentsBase64,"base64");return{id:(0,y.randomUUID)(),skillId:s,path:e.path,contents:t,executable:e.executable,contentHash:(0,y.createHash)("sha256").update(t).digest("hex")}})}),await t.skillGroupSkill.deleteMany({where:{skillId:s}}),i.length&&await t.skillGroupSkill.createMany({data:i.map(e=>({groupId:e,skillId:s}))})}),this.publish(),await this.scheduleAutoSync([...i,...o.map(e=>e.groupId)]),await this.getSkill(s)}async deleteSkill(e){let t=await (0,tX.getPrismaClient)(),r=await t.skill.findUnique({where:{id:e},include:{groups:!0}});return!!r&&(await t.skill.update({where:{id:e},data:{deletedAt:new Date}}),this.publish(),await this.scheduleAutoSync(r.groups.map(e=>e.groupId)),!0)}async saveGroup(e){let t=e.name.trim();if(!t||t.length>80)throw Error("Group names must contain 1-80 characters");let r=[...new Set(e.skillIds)].slice(0,500),i=[...new Set(e.repositoryIds)].slice(0,500),a=await (0,tX.getPrismaClient)(),[n,s,o]=await Promise.all([a.skill.count({where:{id:{in:r},deletedAt:null}}),a.codebaseRepository.count({where:{id:{in:i}}}),a.skillGroup.findUnique({where:{name:t}})]);if(n!==r.length)throw Error("One or more skills were not found");if(s!==i.length)throw Error("One or more repositories were not found");if(o&&o.id!==e.id)throw Error("Group names must be unique");let l=e.id??(0,y.randomUUID)();return await a.$transaction(async e=>{await e.skillGroup.upsert({where:{id:l},create:{id:l,name:t},update:{name:t}}),await e.skillGroupSkill.deleteMany({where:{groupId:l}}),await e.codebaseRepositorySkillGroup.deleteMany({where:{groupId:l}}),r.length&&await e.skillGroupSkill.createMany({data:r.map(e=>({groupId:l,skillId:e}))}),i.length&&await e.codebaseRepositorySkillGroup.createMany({data:i.map(e=>({groupId:l,repositoryId:e}))})}),this.publish(),await this.scheduleAutoSync([l]),a.skillGroup.findUniqueOrThrow({where:{id:l},include:aH})}async validateGroupIds(e){let t=[...new Set(e)].slice(0,100),r=await (0,tX.getPrismaClient)();if(await r.skillGroup.count({where:{id:{in:t}}})!==t.length)throw Error("One or more skill groups were not found");return t}async groupsForRepository(e){let t=await (0,tX.getPrismaClient)();return(await t.codebaseRepositorySkillGroup.findMany({where:{repositoryId:e},include:{group:!0},orderBy:{group:{name:"asc"}}})).map(e=>e.group)}async deleteGroup(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillGroup.deleteMany({where:{id:e}});return r.count&&this.publish(),r.count&&(await this.settings()).autoSyncProjectGroups&&await this.prepareSync("GROUP",null,!0),r.count>0}async saveSettings(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSettings.upsert({where:{id:aq},create:{id:aq,...e},update:e});return this.publish(),r.autoSyncProjectGroups&&await this.prepareSync("GROUP",null,!0),r}async setRepositoryGroups(e,t){let r=await this.validateGroupIds(t),i=await (0,tX.getPrismaClient)();await i.$transaction(async t=>{await t.codebaseRepositorySkillGroup.deleteMany({where:{repositoryId:e}}),r.length&&await t.codebaseRepositorySkillGroup.createMany({data:r.map(t=>({repositoryId:e,groupId:t}))})}),this.publish(),(await this.settings()).autoSyncProjectGroups&&await this.prepareSync("GROUP",null,!0)}async scheduleAutoSync(e){if((await this.settings()).autoSyncProjectGroups&&e.length)for(let t of[...new Set(e)])await this.prepareSync("GROUP",t,!0)}async requestAutoReconcile(){return(await this.settings()).autoSyncProjectGroups?this.prepareSync("GROUP",null,!0):null}async targets(e){let t=await (0,tX.getPrismaClient)(),r=await t.codebase.findMany({where:{agentId:e,availability:"AVAILABLE"},include:{worktrees:{where:{missingAt:null}}}}),i=new Map;for(let e of r)for(let t of(i.set(e.folder,{codebaseId:e.id,worktreeId:null,folder:e.folder}),e.worktrees))i.set(t.folder,{codebaseId:e.id,worktreeId:t.id,folder:t.folder});return[...i.values()]}async prepareSync(e,t,r=!1){let i=await (0,tX.getPrismaClient)();if(t&&!await i.skillGroup.findUnique({where:{id:t}}))throw Error("Skill group not found");if(r){let r=await i.skillSyncRun.findFirst({where:{kind:e,groupId:t??null,status:{in:aM}},orderBy:{createdAt:"desc"}});if(r)return r}let a=await i.skillSyncRun.create({data:{id:(0,y.randomUUID)(),kind:e,groupId:t??null,automatic:r,status:"PREPARING"}}),n=aW(await this.settings()),s=await i.agent.findMany({orderBy:{name:"asc"}});for(let e of s){let t=await i.skillSyncItem.create({data:{id:(0,y.randomUUID)(),runId:a.id,agentId:e.id,direction:"SCAN",status:"PENDING"}});await this.agentControl.createJob({agentId:e.id,kind:aj.SKILL_SCAN_JOB_KIND,payload:{tools:n,targets:await this.targets(e.id),syncRunId:a.id,syncItemId:t.id},idempotencyKey:`skills:scan:${a.id}:${e.id}`,timeoutSeconds:300,visibility:r?"SYSTEM":"USER"})}return!s.length&&(await i.skillSyncRun.update({where:{id:a.id},data:{status:"READY"}}),r)?this.applyRun(a.id):(this.publish(a.id),this.getRun(a.id))}async getRun(e){return(await (0,tX.getPrismaClient)()).skillSyncRun.findUnique({where:{id:e},include:{group:!0,items:{include:{skill:!0,installation:{include:{agent:!0}},agent:!0},orderBy:{createdAt:"asc"}}}})}completionIds(e){return aG(e.payloadJson,{})}async completeScan(e){let{syncRunId:t,syncItemId:r}=this.completionIds(e);if(!t||!r)return;let i=await (0,tX.getPrismaClient)();if(await i.skillSyncItem.findFirst({where:{id:r,runId:t,direction:"SCAN",status:"PENDING"}})){if("SUCCEEDED"===e.status&&e.resultJson){let t=aG(e.resultJson,{configuredTools:[],installations:[],warnings:[]}),a=new Date;await i.$transaction(async i=>{for(let r of(await i.skillInstallation.updateMany({where:{agentId:e.agentId},data:{present:!1}}),t.configuredTools))aj.AI_TOOLS.includes(r.tool)&&await i.skillToolObservation.upsert({where:{agentId_tool:{agentId:e.agentId,tool:r.tool}},create:{agentId:e.agentId,tool:r.tool,configured:r.configured,homePath:r.homePath,checkedAt:a},update:{configured:r.configured,homePath:r.homePath,checkedAt:a}});for(let r of t.installations){let t=await i.skill.findUnique({where:{name:r.skillName},select:{id:!0,deletedAt:!0}});await i.skillInstallation.upsert({where:{agentId_rootPath_skillName:{agentId:e.agentId,rootPath:r.rootPath,skillName:r.skillName}},create:{id:(0,y.randomUUID)(),agentId:e.agentId,skillId:t&&!t.deletedAt?t.id:null,codebaseId:r.codebaseId,worktreeId:r.worktreeId,scope:r.scope,rootKind:r.rootKind,rootPath:r.rootPath,skillName:r.skillName,description:r.description,packageHash:r.packageHash,present:!0,fileCount:r.fileCount,totalBytes:r.totalBytes,tracked:r.tracked,consumersJson:JSON.stringify(r.consumers),lastSeenAt:a},update:{skillId:t&&!t.deletedAt?t.id:void 0,codebaseId:r.codebaseId,worktreeId:r.worktreeId,scope:r.scope,rootKind:r.rootKind,description:r.description,packageHash:r.packageHash,present:!0,fileCount:r.fileCount,totalBytes:r.totalBytes,tracked:r.tracked,consumersJson:JSON.stringify(r.consumers),lastSeenAt:a}})}await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:"COMPLETE",error:t.warnings?.length?t.warnings.join("\n").slice(0,64e3):null}})})}else await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:"FAILED",error:e.error??"Skill scan failed"}});await i.skillSyncItem.count({where:{runId:t,direction:"SCAN",status:"PENDING"}})||await this.buildPlan(t),this.publish(t)}}async configuredByAgent(){let e=await (0,tX.getPrismaClient)(),t=new Set(aW(await this.settings())),r=await e.skillToolObservation.findMany({where:{configured:!0}}),i=new Map;for(let e of r){if(!t.has(e.tool))continue;let r=i.get(e.agentId)??[];r.push(e.tool),i.set(e.agentId,r)}return i}async desiredLocations(e,t=new Set){let r=await (0,tX.getPrismaClient)(),i=await this.configuredByAgent(),a=await r.skillToolObservation.findMany({where:{configured:!0}}),n=new Map;for(let e of a)n.set(e.agentId,e.homePath);let s=[];if("ALL"===e.kind){let e=await r.skill.findMany({where:{deletedAt:null,syncGlobally:!0},include:aV});for(let[r,a]of i){if(t.has(r))continue;let i=n.get(r);if(i)for(let t of aL(a,"GLOBAL")){let a=aZ(i,...aJ("GLOBAL",t));for(let i of e)s.push({skill:i,agentId:r,codebaseId:null,worktreeId:null,scope:"GLOBAL",rootKind:t,folder:null,rootPath:a,targetPath:aZ(a,i.name)})}}}for(let a of(await r.skillGroup.findMany({where:"GROUP"===e.kind&&e.groupId?{id:e.groupId}:void 0,include:{skills:{where:{skill:{deletedAt:null}},include:{skill:{include:aV}}},repositories:{include:{repository:{include:{codebases:{where:{availability:"AVAILABLE"},include:{worktrees:{where:{missingAt:null}}}}}}}}}})))for(let e of a.repositories)for(let r of e.repository.codebases){if(t.has(r.agentId))continue;let e=aL(i.get(r.agentId)??[],"PROJECT");for(let t of[{folder:r.folder,worktreeId:null},...r.worktrees.map(e=>({folder:e.folder,worktreeId:e.id}))])for(let i of e){let e=aZ(t.folder,...aJ("PROJECT",i));for(let n of a.skills)s.push({skill:n.skill,agentId:r.agentId,codebaseId:r.id,worktreeId:t.worktreeId,scope:"PROJECT",rootKind:i,folder:t.folder,rootPath:e,targetPath:aZ(e,n.skill.name)})}}return[...new Map(s.map(e=>[`${e.agentId}\0${e.targetPath}`,e])).values()]}installationWhere(e,t){return{present:!0,...t.size?{agentId:{notIn:[...t]}}:{},..."GROUP"===e.kind?{scope:"PROJECT",...e.groupId?{codebase:{repository:{skillGroups:{some:{groupId:e.groupId}}}}}:{}}:{}}}async buildPlan(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSyncRun.findUniqueOrThrow({where:{id:e}}),i=new Set((await t.skillSyncItem.findMany({where:{runId:e,direction:"SCAN",status:"SKIPPED"},select:{agentId:!0}})).flatMap(e=>e.agentId?[e.agentId]:[]));await t.skillSyncItem.deleteMany({where:{runId:e,direction:{not:"SCAN"}}});let[a,n,s,o,l]=await Promise.all([t.skill.findMany({where:{deletedAt:null},include:aV}),t.skill.findMany({where:{deletedAt:{not:null}}}),t.skillInstallation.findMany({where:this.installationWhere(r,i),include:{baseline:!0}}),this.desiredLocations(r,i),"GROUP"===r.kind&&r.groupId?this.desiredLocations({...r,groupId:null},i):this.desiredLocations(r,i)]),u=new Map(a.map(e=>[e.name,e])),c=new Map(a.map(e=>[e.id,e])),d=new Map(n.map(e=>[e.name,e])),p=new Map(n.map(e=>[e.id,e])),h=new Map;for(let e of s){let t=h.get(e.skillName)??[];t.push(e.packageHash),h.set(e.skillName,t)}let m=new Set([...h].flatMap(([e,t])=>{var r;return(r=u.get(e)?.packageHash??null,new Set(t.filter(e=>null===r||e!==r)).size>1)?[e]:[]})),f=[];for(let t of o)s.find(e=>e.agentId===t.agentId&&e.rootPath===t.rootPath&&e.skillName===t.skill.name)||f.push({id:(0,y.randomUUID)(),runId:e,skillId:t.skill.id,agentId:t.agentId,direction:"EXPORT",status:"READY",sourceHash:t.skill.packageHash,candidatePackageJson:JSON.stringify({location:t})});for(let r of s){let i=r.baseline?.skillId??r.skillId,a=(i?c.get(i):void 0)??u.get(r.skillName),n=(i?p.get(i):void 0)??d.get(r.skillName),s=!!r.baseline&&!!a&&a.name!==r.skillName,h=o.find(e=>e.agentId===r.agentId&&e.rootPath===r.rootPath&&e.skill.name===r.skillName),w=l.find(e=>e.agentId===r.agentId&&e.rootPath===r.rootPath&&e.skill.name===r.skillName);a&&r.packageHash===a.packageHash&&!r.baseline&&await t.skillSyncBaseline.upsert({where:{installationId:r.id},create:{id:(0,y.randomUUID)(),installationId:r.id,skillId:a.id,packageHash:a.packageHash},update:{skillId:a.id,packageHash:a.packageHash,syncedAt:new Date}});let b="UNCHANGED",v="COMPLETE";if(n&&r.baseline&&!r.tracked)b="DELETE_MANAGED",v="READY";else if(s)b=r.tracked?"CONFLICT":"DELETE_MANAGED",v=r.tracked?"BLOCKED":"READY";else if(w||!r.baseline||r.tracked)if(a)if(r.packageHash!==a.packageHash){var g;v="CONFLICT"===(b=m.has(r.skillName)?"CONFLICT":(g={databaseHash:a.packageHash,targetHash:r.packageHash,baselineHash:r.baseline?.packageHash??null,tracked:r.tracked}).databaseHash===g.targetHash?"UNCHANGED":g.tracked?"CONFLICT":g.baselineHash===g.databaseHash?"IMPORT":g.baselineHash===g.targetHash?"EXPORT":"CONFLICT")?"BLOCKED":"READY"}else!w&&["CURSOR","GITHUB_COPILOT","CODEX_LEGACY","OPENCODE"].includes(r.rootKind)&&l.some(e=>e.agentId===r.agentId&&e.scope===r.scope&&("GLOBAL"===r.scope||e.codebaseId===r.codebaseId&&e.worktreeId===r.worktreeId)&&e.skill.name===r.skillName&&e.skill.packageHash===r.packageHash)&&!r.tracked&&(b="DELETE_REDUNDANT",v="READY");else v="CONFLICT"==(b=m.has(r.skillName)?"CONFLICT":"IMPORT")||"PROJECT"===r.scope?"BLOCKED":"READY";else b="DELETE_MANAGED",v="READY";f.push({id:(0,y.randomUUID)(),runId:e,skillId:a?.id??n?.id??null,installationId:r.id,agentId:r.agentId,direction:b,status:v,sourceHash:a?.packageHash??null,targetHash:r.packageHash,candidatePackageJson:JSON.stringify({location:{scope:r.scope,rootKind:r.rootKind,folder:"PROJECT"===r.scope?h?.folder??null:null,skillName:r.skillName},projectGroupRequired:!a&&"PROJECT"===r.scope})})}f.length&&await t.skillSyncItem.createMany({data:f});let w=await t.skillSyncItem.findMany({where:{runId:e,installationId:{not:null},direction:{in:["IMPORT","CONFLICT"]}},include:{installation:!0}}),b=new Map;for(let e of w){if(!e.agentId||!e.installation)continue;let t=b.get(e.agentId)??[];t.push(e),b.set(e.agentId,t)}let v=aW(await this.settings());for(let[r,i]of b){let a=await t.skillSyncItem.create({data:{id:(0,y.randomUUID)(),runId:e,agentId:r,direction:"READ",status:"PENDING"}}),n=await this.targets(r);await this.agentControl.createJob({agentId:r,kind:aj.SKILL_READ_JOB_KIND,payload:{tools:v,targets:n,requests:i.map(e=>({scope:e.installation.scope,rootKind:e.installation.rootKind,folder:"PROJECT"===e.installation.scope?n.find(t=>t.codebaseId===e.installation.codebaseId&&t.worktreeId===e.installation.worktreeId)?.folder??null:null,skillName:e.installation.skillName})),syncRunId:e,syncItemId:a.id},idempotencyKey:`skills:read:${e}:${r}`,timeoutSeconds:300})}await this.refreshRunStatus(e)}async completeRead(e){let{syncRunId:t,syncItemId:r}=this.completionIds(e);if(!t||!r)return;let i=await (0,tX.getPrismaClient)();if(await i.skillSyncItem.findFirst({where:{id:r,runId:t,direction:"READ",status:"PENDING"}})){if("SUCCEEDED"===e.status&&e.resultJson){let a=aG(e.resultJson,{packages:[]}),n=await i.skillSyncItem.findMany({where:{runId:t,agentId:e.agentId,installationId:{not:null},direction:{in:["IMPORT","CONFLICT"]}},include:{installation:!0}});for(let e of a.packages){let t=n.find(t=>t.installation?.skillName===e.package.name&&t.installation?.rootKind===e.rootKind&&t.installation?.scope===e.scope&&("GLOBAL"===e.scope||t.installation?.rootPath===aZ(e.folder,...aJ("PROJECT",e.rootKind))));if(!t)continue;let r=aG(t.candidatePackageJson,{});await i.skillSyncItem.update({where:{id:t.id},data:{candidatePackageJson:JSON.stringify({...r,package:e.package})}})}await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:"COMPLETE"}})}else await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:"FAILED",error:e.error??"Skill package read failed"}});await this.refreshRunStatus(t),this.publish(t)}}async refreshRunStatus(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSyncItem.findMany({where:{runId:e}});if(r.some(e=>aF.includes(e.direction)&&"PENDING"===e.status))return;let i=r.some(e=>"BLOCKED"===e.status),a=r.some(e=>"FAILED"===e.status),n=i?"NEEDS_RESOLUTION":a?"PARTIAL":"READY",s=await t.skillSyncRun.update({where:{id:e},data:{status:n}});this.publish(e),s.automatic&&"READY"===n&&await this.applyRun(e)}async skipPending(e){let t=await (0,tX.getPrismaClient)();await t.skillSyncRun.findUniqueOrThrow({where:{id:e}});let r=await t.skillSyncItem.findMany({where:{runId:e,direction:{in:aK},status:"PENDING",agentId:{not:null}}}),i=[];for(let a of r){if(1!==(await t.skillSyncItem.updateMany({where:{id:a.id,status:"PENDING"},data:{status:"SKIPPED",resolution:"SKIP"}})).count||!a.agentId)continue;i.push(a);let r=await t.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:a.agentId,idempotencyKey:`skills:${a.direction.toLowerCase()}:${e}:${a.agentId}`}}});r&&await this.agentControl.cancelJob(r.id)}if(!i.length)return this.getRun(e);let a=[...new Set(i.flatMap(e=>"READ"===e.direction&&e.agentId?[e.agentId]:[]))];a.length&&await t.skillSyncItem.updateMany({where:{runId:e,agentId:{in:a},direction:{notIn:aK},status:{in:["READY","BLOCKED"]}},data:{status:"SKIPPED",resolution:"SKIP"}});let n=i.filter(e=>"APPLY"===e.direction),s=n.flatMap(e=>{let{deployments:t=[]}=aG(e.candidatePackageJson,{});return t.map(e=>e.id)});return s.length&&await t.skillDeployment.updateMany({where:{id:{in:s},status:"PENDING"},data:{status:"SKIPPED"}}),i.some(e=>"SCAN"===e.direction)?await t.skillSyncItem.count({where:{runId:e,direction:"SCAN",status:"PENDING"}})||await this.buildPlan(e):a.length&&await this.refreshRunStatus(e),n.length&&(await t.skillSyncItem.count({where:{runId:e,direction:"APPLY",status:"PENDING"}})||await t.skillSyncRun.update({where:{id:e},data:{status:"PARTIAL",finishedAt:new Date}})),this.publish(e),this.getRun(e)}async resolveItem(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSyncItem.findUniqueOrThrow({where:{id:e.itemId}});if(!["BLOCKED","READY"].includes(r.status))throw Error("Sync item cannot be resolved");let i=aG(r.candidatePackageJson,{});if("MANUAL"===e.resolution&&(i.package=(0,aj.parseSkillPackage)(e.package,"manual resolution package")),"TARGET"===e.resolution&&!i.package)throw Error("The target package is unavailable");if("DELETE"===e.resolution&&!r.installationId)throw Error("The client skill installation is unavailable");if(i.projectGroupRequired&&["TARGET","MANUAL"].includes(e.resolution)){if(!e.groupId||!await t.skillGroup.findUnique({where:{id:e.groupId}}))throw Error("A project skill import requires a skill group");i.groupId=e.groupId}if(await t.skillSyncItem.update({where:{id:r.id},data:{resolution:e.resolution,direction:"DELETE"===e.resolution?"DELETE_REDUNDANT":r.direction,candidatePackageJson:JSON.stringify(i),status:"SKIP"===e.resolution?"SKIPPED":"READY"}}),["TARGET","MANUAL"].includes(e.resolution)){let e=i.package?.name??null;if(e){let i=(await t.skillSyncItem.findMany({where:{runId:r.runId,id:{not:r.id},direction:"CONFLICT",status:{in:["BLOCKED","READY"]}},include:{skill:!0,installation:!0}})).flatMap(t=>(t.skill?.name??t.installation?.skillName)===e?[t.id]:[]);i.length&&await t.skillSyncItem.updateMany({where:{id:{in:i}},data:{resolution:"DATABASE",status:"READY"}})}}return await this.refreshRunStatus(r.runId),this.getRun(r.runId)}async importCandidates(e){let t=await (0,tX.getPrismaClient)();for(let r of(await t.skillSyncItem.findMany({where:{runId:e,status:"READY",OR:[{direction:"IMPORT"},{direction:"CONFLICT",resolution:{in:["TARGET","MANUAL"]}}]},include:{installation:!0}}))){let e=aG(r.candidatePackageJson,{});if(!e.package)continue;let i=await t.skill.findUnique({where:{name:e.package.name},include:aV}),a=await this.saveSkill({id:i?.id,name:e.package.name,description:e.package.description,syncGlobally:i?.syncGlobally??!e.groupId,groupIds:[...i?.groups.map(e=>e.groupId)??[],...e.groupId?[e.groupId]:[]],files:e.package.files});r.installationId&&(await t.skillInstallation.update({where:{id:r.installationId},data:{skillId:a.id}}),r.targetHash===a.packageHash&&await t.skillSyncBaseline.upsert({where:{installationId:r.installationId},create:{id:(0,y.randomUUID)(),installationId:r.installationId,skillId:a.id,packageHash:a.packageHash},update:{skillId:a.id,packageHash:a.packageHash,syncedAt:new Date}}))}}async applyRun(e){let t=await (0,tX.getPrismaClient)(),r=await t.skillSyncRun.findUniqueOrThrow({where:{id:e}});if(await t.skillSyncItem.count({where:{runId:e,status:"BLOCKED"}}))throw Error("Resolve all conflicts before applying sync");await this.importCandidates(e);let i=new Set((await t.skillSyncItem.findMany({where:{runId:e,direction:{in:aF},status:"SKIPPED"},select:{agentId:!0}})).flatMap(e=>e.agentId?[e.agentId]:[])),a=await this.desiredLocations(r,i),n=await t.skillInstallation.findMany({where:this.installationWhere(r,i)}),s=new Map,o=new Map,l=(e,t)=>{let r=s.get(e)??[];r.push(t),s.set(e,r)},u=(e,t)=>{let r=o.get(e)??[];r.push(t),o.set(e,r)};for(let e of a){let r=n.find(t=>t.agentId===e.agentId&&t.rootPath===e.rootPath&&t.skillName===e.skill.name);if(r?.packageHash===e.skill.packageHash||r?.tracked)continue;l(e.agentId,{kind:"WRITE",scope:e.scope,rootKind:e.rootKind,folder:e.folder,package:function(e){let t=e.files.map(e=>({path:e.path,contentsBase64:Buffer.from(e.contents).toString("base64"),executable:e.executable}));return{name:e.name,description:e.description,packageHash:e.packageHash,files:t}}(e.skill),manageGitExclude:"PROJECT"===e.scope});let i=await t.skillDeployment.upsert({where:{agentId_targetPath:{agentId:e.agentId,targetPath:e.targetPath}},create:{id:(0,y.randomUUID)(),skillId:e.skill.id,agentId:e.agentId,codebaseId:e.codebaseId,worktreeId:e.worktreeId,scope:e.scope,rootKind:e.rootKind,targetPath:e.targetPath,desiredHash:e.skill.packageHash,status:"PENDING"},update:{skillId:e.skill.id,desiredHash:e.skill.packageHash,status:"PENDING",lastError:null}});u(e.agentId,{id:i.id,desiredHash:e.skill.packageHash})}let c=await t.skillSyncItem.findMany({where:{runId:e,direction:{in:["DELETE_REDUNDANT","DELETE_MANAGED"]},status:"READY"},include:{installation:!0}}),d=new Set(c.flatMap(e=>e.installationId?[e.installationId]:[])),p=n.filter(e=>!d.has(e.id)&&!e.tracked&&["CURSOR","GITHUB_COPILOT","CODEX_LEGACY","OPENCODE"].includes(e.rootKind)&&!a.some(t=>t.agentId===e.agentId&&t.rootPath===e.rootPath&&t.skill.name===e.skillName)&&a.some(t=>t.agentId===e.agentId&&t.scope===e.scope&&("GLOBAL"===e.scope||t.codebaseId===e.codebaseId&&t.worktreeId===e.worktreeId)&&t.skill.name===e.skillName&&t.skill.packageHash===e.packageHash));for(let e of[...c.flatMap(e=>e.installation?[e.installation]:[]),...p]){if(!e||e.tracked)continue;let t=await this.targets(e.agentId),r="PROJECT"===e.scope?t.find(t=>t.codebaseId===e.codebaseId&&t.worktreeId===e.worktreeId)?.folder??null:null;("PROJECT"!==e.scope||r)&&l(e.agentId,{kind:"DELETE",scope:e.scope,rootKind:e.rootKind,folder:r,skillName:e.skillName,manageGitExclude:"PROJECT"===e.scope})}for(let[r,i]of s){let a=await t.skillSyncItem.create({data:{id:(0,y.randomUUID)(),runId:e,agentId:r,direction:"APPLY",status:"PENDING",candidatePackageJson:JSON.stringify({deployments:o.get(r)??[]})}});await this.agentControl.createJob({agentId:r,kind:aj.SKILL_APPLY_JOB_KIND,payload:{operations:i,syncRunId:e,syncItemId:a.id},idempotencyKey:`skills:apply:${e}:${r}`,timeoutSeconds:600})}return await t.skillSyncRun.update({where:{id:e},data:s.size?{status:"APPLYING"}:{status:"SUCCEEDED",finishedAt:new Date}}),this.publish(e),this.getRun(e)}async completeApply(e){let{syncRunId:t,syncItemId:r}=this.completionIds(e);if(!t||!r)return;let i=await (0,tX.getPrismaClient)(),a=await i.skillSyncItem.findFirst({where:{id:r,runId:t,direction:"APPLY",status:"PENDING"}});if(!a)return;let n="SUCCEEDED"===e.status,{deployments:s=[]}=aG(a?.candidatePackageJson??null,{});await i.skillSyncItem.updateMany({where:{id:r,status:"PENDING"},data:{status:n?"COMPLETE":"FAILED",error:n?null:e.error??"Skill apply failed"}});let o=await i.skillDeployment.findMany({where:{id:{in:s.map(e=>e.id)},agentId:e.agentId,status:"PENDING"},include:{skill:{include:{files:!0}}}}),l=aG(e.resultJson,{});if(n){let t=await this.configuredByAgent();for(let e of o){let r=s.find(t=>t.id===e.id),a=l.results?.find(t=>"WRITE"===t.kind&&t.path===e.targetPath);if(!r||e.desiredHash!==r.desiredHash||a?.packageHash!==r.desiredHash)continue;let n=await i.skillInstallation.upsert({where:{agentId_rootPath_skillName:{agentId:e.agentId,rootPath:aY(e.targetPath),skillName:e.skill.name}},create:{id:(0,y.randomUUID)(),skillId:e.skillId,agentId:e.agentId,codebaseId:e.codebaseId,worktreeId:e.worktreeId,scope:e.scope,rootKind:e.rootKind,rootPath:aY(e.targetPath),skillName:e.skill.name,description:e.skill.description,packageHash:e.desiredHash,present:!0,fileCount:e.skill.files.length,totalBytes:e.skill.files.reduce((e,t)=>e+t.contents.byteLength,0),tracked:!1,consumersJson:JSON.stringify(t.get(e.agentId)??[]),lastSeenAt:new Date},update:{skillId:e.skillId,codebaseId:e.codebaseId,worktreeId:e.worktreeId,scope:e.scope,rootKind:e.rootKind,description:e.skill.description,packageHash:e.desiredHash,present:!0,fileCount:e.skill.files.length,totalBytes:e.skill.files.reduce((e,t)=>e+t.contents.byteLength,0),tracked:!1,consumersJson:JSON.stringify(t.get(e.agentId)??[]),lastSeenAt:new Date}});await i.skillSyncBaseline.upsert({where:{installationId:n.id},create:{id:(0,y.randomUUID)(),installationId:n.id,skillId:e.skillId,packageHash:e.desiredHash},update:{skillId:e.skillId,packageHash:e.desiredHash,syncedAt:new Date}}),await i.skillDeployment.update({where:{id:e.id},data:{status:"INSTALLED",installedHash:e.desiredHash,lastError:null}})}for(let t of l.results??[])if("DELETE"===t.kind){var u;await i.skillInstallation.updateMany({where:{agentId:e.agentId,rootPath:aY(t.path),skillName:az(u=t.path).basename(u)},data:{present:!1,lastSeenAt:new Date}})}}else for(let t of s)await i.skillDeployment.updateMany({where:{id:t.id,agentId:e.agentId,desiredHash:t.desiredHash,status:"PENDING"},data:{status:"FAILED",lastError:e.error??"Skill apply failed"}});if(!await i.skillSyncItem.count({where:{runId:t,direction:"APPLY",status:"PENDING"}})){let e=await i.skillSyncItem.count({where:{runId:t,direction:"APPLY",status:{in:["FAILED","SKIPPED"]}}});await i.skillSyncRun.update({where:{id:t},data:{status:e?"PARTIAL":"SUCCEEDED",finishedAt:new Date}})}this.publish(t)}}e.i(464841);var aX=e.i(220629),a0=e.i(692680);e.i(493015);var a1=e.i(49172);function a2(e){if(!e)return{};let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}function a3(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.valueOf())?null:t}function a4(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}}class a6{agentControl;fetcher;credentials;constructor(e,t=fetch,r=new t0.CredentialService){for(const i of(this.agentControl=e,this.fetcher=t,this.credentials=r,this.agentControl.registerCompletionHandler(a0.SIGNING_ASSETS_SCAN_JOB_KIND,e=>this.completeScan(e)),[a0.SIGNING_PROFILE_READ_JOB_KIND,a0.SIGNING_PROFILE_INSTALL_JOB_KIND,a0.SIGNING_PROFILE_DELETE_JOB_KIND,a0.SIGNING_IDENTITY_IMPORT_JOB_KIND,a0.SIGNING_IDENTITY_DELETE_JOB_KIND]))this.agentControl.registerCompletionHandler(i,e=>this.completeOperation(e))}changed(){r6.agentEventBus.publish(r6.SIGNING_ASSETS_CHANGED_TOPIC,{changed:!0})}deleteTransferJobSoon(e){setTimeout(()=>{(0,tX.getPrismaClient)().then(t=>t.agentJob.deleteMany({where:{id:e,visibility:"SYSTEM"}}))},3e4).unref()}subscribe(){return r6.agentEventBus.iterate(r6.SIGNING_ASSETS_CHANGED_TOPIC)}async completeScan(e){if("SUCCEEDED"!==e.status)return;let t=(0,a0.parseSigningAssetsScanResult)(a2(e.resultJson)),r=await (0,tX.getPrismaClient)(),i=new Date;await r.$transaction(async r=>{for(let a of(await r.signingProfileAsset.updateMany({where:{agentId:e.agentId,missingAt:null},data:{missingAt:i}}),await r.signingCertificateAsset.updateMany({where:{agentId:e.agentId,missingAt:null},data:{missingAt:i}}),t.profiles))await r.signingProfileAsset.upsert({where:{agentId_uuid:{agentId:e.agentId,uuid:a.uuid}},create:{id:(0,y.randomUUID)(),agentId:e.agentId,uuid:a.uuid,contentHash:a.contentHash,name:a.name,profileType:a.profileType,bundleId:a.bundleId,teamId:a.teamId,teamName:a.teamName,platformsJson:JSON.stringify(a.platforms),deviceCount:a.deviceCount,deviceUdidsJson:JSON.stringify(a.deviceUdids),certificateSha1sJson:JSON.stringify(a.certificateSha1s),createdAt:a3(a.createdAt),expiresAt:a3(a.expiresAt),expired:a.expired,xcodeManaged:a.xcodeManaged,observedAt:i},update:{contentHash:a.contentHash,name:a.name,profileType:a.profileType,bundleId:a.bundleId,teamId:a.teamId,teamName:a.teamName,platformsJson:JSON.stringify(a.platforms),deviceCount:a.deviceCount,deviceUdidsJson:JSON.stringify(a.deviceUdids),certificateSha1sJson:JSON.stringify(a.certificateSha1s),createdAt:a3(a.createdAt),expiresAt:a3(a.expiresAt),expired:a.expired,xcodeManaged:a.xcodeManaged,observedAt:i,missingAt:null}});for(let a of t.certificates)await r.signingCertificateAsset.upsert({where:{agentId_sha1:{agentId:e.agentId,sha1:a.sha1}},create:{id:(0,y.randomUUID)(),agentId:e.agentId,sha1:a.sha1,sha256:a.sha256,name:a.name,teamId:a.teamId,certificateType:a.certificateType,notBefore:a3(a.notBefore),expiresAt:a3(a.expiresAt),expired:a.expired,hasPrivateKey:a.hasPrivateKey,observedAt:i},update:{sha256:a.sha256,name:a.name,teamId:a.teamId,certificateType:a.certificateType,notBefore:a3(a.notBefore),expiresAt:a3(a.expiresAt),expired:a.expired,hasPrivateKey:a.hasPrivateKey,observedAt:i,missingAt:null}})}),this.deleteTransferJobSoon(e.id),this.changed()}async refreshAfterMutation(e,t){await this.agentControl.createJob({agentId:e,kind:a0.SIGNING_ASSETS_SCAN_JOB_KIND,payload:{},idempotencyKey:`signing:${t}:${e}:refresh`,timeoutSeconds:60,visibility:"SYSTEM"})}async finishOperation(e){let t=await (0,tX.getPrismaClient)(),r=await t.signingOperationItem.findMany({where:{operationId:e}});if(r.some(e=>["WAITING","QUEUED","RUNNING"].includes(e.status)))return;let i=r.filter(e=>"SUCCEEDED"!==e.status);await t.signingOperation.update({where:{id:e},data:{status:i.length?"FAILED":"SUCCEEDED",error:i.map(e=>e.error).filter(Boolean).join("; ")||null,finishedAt:new Date}}),this.changed()}async completeOperation(e){let t=await (0,tX.getPrismaClient)(),r=await t.signingOperationItem.findUnique({where:{jobId:e.id},include:{operation:!0}});if(r){if(await t.signingOperationItem.update({where:{id:r.id},data:{status:e.status,error:e.error,finishedAt:new Date}}),e.kind===a0.SIGNING_PROFILE_READ_JOB_KIND&&"SUCCEEDED"===e.status&&"SYNC_PROFILE"===r.operation.kind){let i=a2(e.resultJson).contentBase64;if("string"==typeof i&&i)for(let e of(await t.signingOperationItem.findMany({where:{operationId:r.operationId,status:"WAITING"}}))){let a=await this.agentControl.createJob({agentId:e.agentId,kind:a0.SIGNING_PROFILE_INSTALL_JOB_KIND,payload:{contentBase64:i},idempotencyKey:`signing:${r.operationId}:${e.agentId}:install`,timeoutSeconds:60,visibility:"SYSTEM"});await t.signingOperationItem.update({where:{id:e.id},data:{jobId:a.id,status:a.status}})}else await t.signingOperation.update({where:{id:r.operationId},data:{status:"FAILED",error:"Profile read returned no content"}})}e.kind===a0.SIGNING_PROFILE_READ_JOB_KIND&&"SUCCEEDED"!==e.status&&"SYNC_PROFILE"===r.operation.kind&&await t.signingOperationItem.updateMany({where:{operationId:r.operationId,status:"WAITING"},data:{status:"FAILED",error:"Source profile could not be read",finishedAt:new Date}}),"SUCCEEDED"===e.status&&e.kind!==a0.SIGNING_PROFILE_READ_JOB_KIND&&await this.refreshAfterMutation(e.agentId,r.operationId),await this.finishOperation(r.operationId),this.deleteTransferJobSoon(e.id)}}async refresh(e){let t=await (0,tX.getPrismaClient)(),r=await t.agent.findMany({where:e?.length?{id:{in:[...new Set(e)]}}:void 0,orderBy:{name:"asc"}}),i=[];for(let e of r)a4(e.capabilitiesJson).includes(a0.SIGNING_ASSETS_SCAN_JOB_KIND)&&i.push(await this.agentControl.createJob({agentId:e.id,kind:a0.SIGNING_ASSETS_SCAN_JOB_KIND,payload:{},idempotencyKey:`signing:scan:${Date.now()}:${e.id}`,timeoutSeconds:60,visibility:"SYSTEM"}));return i}async agents(){let e=await (0,tX.getPrismaClient)();return(await e.agent.findMany({orderBy:{name:"asc"}})).map(e=>({id:e.id,name:e.name,hostname:e.hostname,supported:a4(e.capabilitiesJson).includes(a0.SIGNING_ASSETS_SCAN_JOB_KIND),lastSeenAt:e.lastSeenAt?.toISOString()??null}))}async profiles(){let e=await (0,tX.getPrismaClient)(),t=await e.signingProfileAsset.findMany({where:{missingAt:null},include:{agent:{select:{id:!0,name:!0}}},orderBy:[{expiresAt:"asc"},{name:"asc"}]}),r=new Map;for(let e of t){let t=`${e.uuid}:${e.contentHash}`;r.set(t,[...r.get(t)??[],e])}return[...r.values()].map(e=>{let t=e[0];return{id:`${t.uuid}:${t.contentHash}`,uuid:t.uuid,contentHash:t.contentHash,name:t.name,profileType:t.profileType,bundleId:t.bundleId,teamId:t.teamId,teamName:t.teamName,platforms:a4(t.platformsJson),deviceCount:t.deviceCount,deviceUdids:a4(t.deviceUdidsJson),certificateSha1s:a4(t.certificateSha1sJson),createdAt:t.createdAt?.toISOString()??null,expiresAt:t.expiresAt?.toISOString()??null,expired:t.expired,xcodeManaged:t.xcodeManaged,installedAgents:e.map(({agent:e})=>e)}})}async profile(e){return(await this.profiles()).find(t=>t.id===e)??null}async profileDevices(e){let t=new Set,r=e.filter(e=>{let r=e.toUpperCase();return!t.has(r)&&(t.add(r),!0)}),i=r.map(e=>e.toUpperCase());if(!i.length)return[];let a=await (0,tX.getPrismaClient)(),n=new Map((await a.iosDevice.findMany({where:{udid:{in:i}},select:{id:!0,udid:!0,displayName:!0,product:!0,osVersion:!0,status:!0}})).map(e=>[e.udid.toUpperCase(),e]));return r.map(e=>{let t=n.get(e.toUpperCase());return{udid:e,deviceId:t?.id??null,displayName:t?.displayName??null,product:t?.product??null,osVersion:t?.osVersion??null,status:t?.status??null}})}async certificates(){let e=await (0,tX.getPrismaClient)(),t=await e.signingCertificateAsset.findMany({where:{missingAt:null},include:{agent:{select:{id:!0,name:!0}}},orderBy:[{expiresAt:"asc"},{name:"asc"}]}),r=new Map;for(let e of t)r.set(e.sha1,[...r.get(e.sha1)??[],e]);return[...r.values()].map(e=>{let t=e[0];return{id:t.sha1,sha1:t.sha1,sha256:t.sha256,name:t.name,teamId:t.teamId,certificateType:t.certificateType,notBefore:t.notBefore?.toISOString()??null,expiresAt:t.expiresAt?.toISOString()??null,expired:t.expired,hasPrivateKey:e.some(e=>e.hasPrivateKey),installedAgents:e.map(({agent:e})=>e),privateKeyAgents:e.filter(e=>e.hasPrivateKey).map(({agent:e})=>e)}})}async operations(e=50){return(await (0,tX.getPrismaClient)()).signingOperation.findMany({include:{items:{include:{agent:{select:{id:!0,name:!0}}},orderBy:{createdAt:"asc"}}},orderBy:{createdAt:"desc"},take:Math.max(1,Math.min(e,200))})}async operation(e,t,r,i=null,a=[]){let n=await (0,tX.getPrismaClient)(),s=(0,y.randomUUID)();return n.signingOperation.create({data:{id:s,kind:e,assetKey:t,sourceAgentId:i,items:{create:[...new Set(r)].map(e=>({id:(0,y.randomUUID)(),agentId:e,status:a.includes(e)?"WAITING":"QUEUED"}))}},include:{items:{include:{agent:{select:{id:!0,name:!0}}}}}})}async attachJob(e,t){let r=await (0,tX.getPrismaClient)();await r.signingOperationItem.update({where:{id:e},data:{jobId:t.id,status:t.status}})}async uploadProfile(e,t){if(!t.length)throw Error("Select at least one agent");let r=(0,y.createHash)("sha256").update(Buffer.from(e,"base64")).digest("hex").toUpperCase(),i=await this.operation("INSTALL_PROFILE",r,t);for(let t of i.items){let r=await this.agentControl.createJob({agentId:t.agentId,kind:a0.SIGNING_PROFILE_INSTALL_JOB_KIND,payload:{contentBase64:e},idempotencyKey:`signing:${i.id}:${t.agentId}:install`,timeoutSeconds:60,visibility:"SYSTEM"});await this.attachJob(t.id,r)}return this.changed(),i}async downloadProfile(e,t){let r=(0,y.randomUUID)(),i=await this.agentControl.createJob({agentId:t,kind:a0.SIGNING_PROFILE_READ_JOB_KIND,payload:{uuid:e},idempotencyKey:`signing:download:${r}:${e}`,timeoutSeconds:60,visibility:"SYSTEM"}),a=await (0,tX.getPrismaClient)();try{let t=Date.now()+55e3;for(;Date.now()<t;){let t=await this.agentControl.getJob(i.id);if(!t)throw Error("Profile download job was removed");if(["FAILED","CANCELLED","TIMED_OUT"].includes(t.status))throw Error(t.error||"Could not read provisioning profile");if("SUCCEEDED"===t.status){let r=a2(t.resultJson);if("string"!=typeof r.contentBase64)throw Error("Agent returned no provisioning profile content");return{uuid:e,filename:`${e}.mobileprovision`,contentBase64:r.contentBase64}}await new Promise(e=>setTimeout(e,250))}throw Error("Timed out reading provisioning profile")}finally{await a.agentJob.deleteMany({where:{id:i.id,visibility:"SYSTEM"}})}}async syncProfile(e,t,r){let i=[...new Set(r)].filter(e=>e!==t);if(!i.length)throw Error("Select at least one target agent");let a=await this.operation("SYNC_PROFILE",e,[t,...i],t,i),n=a.items.find(e=>e.agentId===t),s=await this.agentControl.createJob({agentId:t,kind:a0.SIGNING_PROFILE_READ_JOB_KIND,payload:{uuid:e},idempotencyKey:`signing:${a.id}:${t}:read`,timeoutSeconds:60,visibility:"SYSTEM"});return await this.attachJob(n.id,s),this.changed(),a}async deleteProfile(e,t){if(!t.length)throw Error("Select at least one agent");let r=await this.operation("DELETE_PROFILE",e,t);for(let t of r.items){let i=await this.agentControl.createJob({agentId:t.agentId,kind:a0.SIGNING_PROFILE_DELETE_JOB_KIND,payload:{uuid:e},idempotencyKey:`signing:${r.id}:${t.agentId}:delete`,timeoutSeconds:60,visibility:"SYSTEM"});await this.attachJob(t.id,i)}return this.changed(),r}async deleteExpiredProfiles(e){let t=await (0,tX.getPrismaClient)(),r=await t.signingProfileAsset.findMany({where:{expired:!0,missingAt:null,...e?.length?{agentId:{in:e}}:{}}}),i=new Map;for(let e of r)i.set(e.uuid,[...i.get(e.uuid)??[],e.agentId]);let a=[];for(let[e,t]of i)a.push(await this.deleteProfile(e,t));return a}async importIdentity(e){if(!e.targetAgentIds.length)throw Error("Select at least one agent");let t=Buffer.from(e.p12Base64,"base64");if(!t.length||t.length>0x1400000)throw Error("The .p12 file is empty or larger than 20 MiB");let r=[...new Set(e.targetAgentIds)],i=await (0,tX.getPrismaClient)(),n=new Map((await i.agent.findMany({where:{id:{in:r}},select:{id:!0,name:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}})).map(e=>[e.id,e])),s=Date.now(),o=r.filter(e=>{let t=n.get(e);return!t||!function(e,t=Date.now()){return null!==e.lastSeenAt&&t-e.lastSeenAt.getTime()<=(0,a.agentOnlineWindowMs)(e)&&null===e.disconnectedAt}(t,s)||!a4(t.capabilitiesJson).includes(a0.SIGNING_IDENTITY_IMPORT_JOB_KIND)});if(o.length)throw Error(`Identity imports require online supported agents: ${o.map(e=>n.get(e)?.name??e).join(", ")}`);let l=(0,y.createHash)("sha256").update(t).digest("hex").toUpperCase(),u=await this.operation("IMPORT_IDENTITY",l,r);for(let t of u.items){let r=this.agentControl.createSigningSecretTransfer(t.agentId,{p12Base64:e.p12Base64,passphrase:e.passphrase});try{let e=await this.agentControl.createJob({agentId:t.agentId,kind:a0.SIGNING_IDENTITY_IMPORT_JOB_KIND,payload:{transferId:r,sha256:l},idempotencyKey:`signing:${u.id}:${t.agentId}:import`,timeoutSeconds:120,visibility:"SYSTEM"});await this.attachJob(t.id,e)}catch(e){throw this.agentControl.revokeSigningSecretTransfer(r),e}}return this.changed(),u}async deleteIdentity(e,t){if(!t.length)throw Error("Select at least one agent");let r=e.toUpperCase(),i=[...new Set(t)],a=await (0,tX.getPrismaClient)(),n=new Set((await a.signingCertificateAsset.findMany({where:{sha1:r,agentId:{in:i},hasPrivateKey:!0,missingAt:null},select:{agentId:!0}})).map(e=>e.agentId)),s=i.filter(e=>n.has(e));if(!s.length)throw Error("The identity has no private key on the selected agents");let o=await this.operation("DELETE_IDENTITY",r,s);for(let e of o.items){let t=await this.agentControl.createJob({agentId:e.agentId,kind:a0.SIGNING_IDENTITY_DELETE_JOB_KIND,payload:{sha1:r},idempotencyKey:`signing:${o.id}:${e.agentId}:delete`,timeoutSeconds:60,visibility:"SYSTEM"});await this.attachJob(e.id,t)}return this.changed(),o}async appleClient(){return new a1.AppleDeveloperClient(await (0,a1.storedAppleDeveloperCredentials)(this.credentials),this.fetcher)}async portalInventory(){let e=await this.appleClient(),[t,r,i,a]=await Promise.all([e.listProfiles(),e.listCertificates(),e.listBundleIds(),e.listDevices()]);return{profiles:t,certificates:r,bundleIds:i,devices:a}}async createPortalProfile(e){let t=await (await this.appleClient()).createProfile(e);return this.changed(),t.data}async deletePortalProfile(e){return await (await this.appleClient()).deleteProfile(e),this.changed(),!0}async revokePortalCertificate(e){return await (await this.appleClient()).revokeCertificate(e),this.changed(),!0}}var a8=e.i(308810),a5=e.i(726355);let a9={IOS_BUILD_SUCCEEDED:{key:"IOS_BUILD_SUCCEEDED",category:"BUILDS",label:"iOS build succeeded",description:"An iOS build finishes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},IOS_BUILD_FAILED:{key:"IOS_BUILD_FAILED",category:"BUILDS",label:"iOS build failed",description:"An iOS build finishes with a failure.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},COMMAND_RUN_SUCCEEDED:{key:"COMMAND_RUN_SUCCEEDED",category:"COMMANDS",label:"Command run succeeded",description:"A saved command finishes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},COMMAND_RUN_FAILED:{key:"COMMAND_RUN_FAILED",category:"COMMANDS",label:"Command run failed",description:"A saved command finishes with a failure.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},GITHUB_ACTIONS_SUCCEEDED:{key:"GITHUB_ACTIONS_SUCCEEDED",category:"GITHUB",label:"GitHub Actions succeeded",description:"A GitHub Actions workflow finishes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},GITHUB_ACTIONS_FAILED:{key:"GITHUB_ACTIONS_FAILED",category:"GITHUB",label:"GitHub Actions failed",description:"A GitHub Actions workflow finishes with a failure.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},RUN_NEEDS_ANSWER:{key:"RUN_NEEDS_ANSWER",category:"RUNS",label:"Plan or session needs an answer",description:"A managed plan or session asks for user input.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},RUN_COMPLETED:{key:"RUN_COMPLETED",category:"RUNS",label:"Plan or session completed",description:"A managed plan or session completes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},RUN_FAILED:{key:"RUN_FAILED",category:"RUNS",label:"Plan or session failed",description:"A managed plan or session fails.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},RUN_CANCELLED:{key:"RUN_CANCELLED",category:"RUNS",label:"Plan or session cancelled",description:"A managed plan or session is cancelled.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!1,defaultWebPushEnabled:!1},RUN_RECOVERY_PAUSED:{key:"RUN_RECOVERY_PAUSED",category:"RUNS",label:"Plan or session paused after recovery",description:"A managed plan or session is paused after its agent restarts.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_MESSAGE:{key:"WORKFLOW_MESSAGE",category:"WORKFLOWS",label:"Workflow message",description:"A workflow sends a generic notification.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_NEEDS_ATTENTION:{key:"WORKFLOW_NEEDS_ATTENTION",category:"WORKFLOWS",label:"Workflow needs attention",description:"A workflow is waiting for data or a decision.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_COMPLETED:{key:"WORKFLOW_COMPLETED",category:"WORKFLOWS",label:"Workflow completed",description:"A workflow run completes successfully.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_FAILED:{key:"WORKFLOW_FAILED",category:"WORKFLOWS",label:"Workflow failed",description:"A workflow run fails.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1},WORKFLOW_RECOVERY_PAUSED:{key:"WORKFLOW_RECOVERY_PAUSED",category:"WORKFLOWS",label:"Workflow paused after recovery",description:"A workflow pauses while recovering durable work.",defaultSidebarEnabled:!0,defaultBrowserEnabled:!0,defaultWebPushEnabled:!1}};function a7(e){return e in a9?a9[e]:null}let ne="default";function nt(e,t,r){let i=e.trim();if(!i)throw Error(`${t} is required`);if(i.length>r)throw Error(`${t} is too long`);return i}function nr(e){let t,r=nt(e,"Push endpoint",4e3);try{t=new URL(r)}catch{throw Error("Push endpoint must be a valid URL")}if("https:"!==t.protocol)throw Error("Push endpoint must use HTTPS");return r}function ni(e,t){let r=new Date(e);if(!Number.isFinite(r.getTime()))throw Error(`${t} is invalid`);return r}function na(){let e=process.env.PUBLIC_BASE_URL?.trim();if(e)try{let t=new URL(e);if("https:"===t.protocol)return t.origin}catch{}return"mailto:notifications@ai-development-environment.local"}function nn(e){if(!e||"object"!=typeof e)return null;let t=e.statusCode;return"number"==typeof t?t:null}class ns{credentialService;vapidPreparation;constructor(e){this.credentialService=e,this.vapidPreparation=null}publish(e){r6.agentEventBus.publish(r6.APP_NOTIFICATIONS_CHANGED_TOPIC,{notificationsChanged:e})}subscribe(){return r6.agentEventBus.iterate(r6.APP_NOTIFICATIONS_CHANGED_TOPIC)}async preferences(){let e=await (0,tX.getPrismaClient)(),t=new Map((await e.notificationPreference.findMany()).map(e=>[e.typeKey,e]));return Object.values(a9).map(e=>{let r=t.get(e.key);return{...e,sidebarEnabled:r?.sidebarEnabled??e.defaultSidebarEnabled,browserEnabled:r?.browserEnabled??e.defaultBrowserEnabled,webPushEnabled:r?.webPushEnabled??e.defaultWebPushEnabled,updatedAt:r?.updatedAt??null}})}async savePreference(e){let t=a7(e.typeKey);if(!t)throw Error("Unknown notification type");let r=await (0,tX.getPrismaClient)(),i=await r.notificationPreference.upsert({where:{typeKey:t.key},create:{typeKey:t.key,sidebarEnabled:e.sidebarEnabled,browserEnabled:e.browserEnabled,webPushEnabled:e.webPushEnabled},update:{sidebarEnabled:e.sidebarEnabled,browserEnabled:e.browserEnabled,webPushEnabled:e.webPushEnabled}});return this.publish({kind:"PREFERENCES_UPDATED",notification:null,notificationId:null}),{...t,...i}}async recordInTransaction(e,t){let r=a7(t.typeKey);if(!r)throw Error("Unknown notification type");let i=await e.notificationPreference.findUnique({where:{typeKey:r.key}}),a=i?.sidebarEnabled??r.defaultSidebarEnabled,n=i?.browserEnabled??r.defaultBrowserEnabled,s=i?.webPushEnabled??r.defaultWebPushEnabled;if(!a&&!n&&!s)return null;let o=nt(t.dedupeKey,"Deduplication key",500);return await e.appNotification.findUnique({where:{dedupeKey:o}})?null:e.appNotification.create({data:{id:(0,y.randomUUID)(),dedupeKey:o,typeKey:r.key,title:nt(t.title,"Notification title",240),body:nt(t.body,"Notification body",1e3),href:function(e){let t=nt(e,"Notification link",2e3);if(!t.startsWith("/")||t.startsWith("//"))throw Error("Notification links must be same-origin paths");return t}(t.href),resourceKind:nt(t.resourceKind,"Resource kind",100),resourceId:nt(t.resourceId,"Resource ID",500),worktreeId:t.worktreeId??null,highlightColor:t.highlightColor?.trim()||null,sidebarRequested:a,browserRequested:n,webPushRequested:s}})}created(e){e&&(this.publish({kind:"CREATED",notification:e,notificationId:e.id}),e.webPushRequested&&this.deliverWebPush(e).catch(e=>{console.error("Web Push delivery failed:",e)}))}async history(e={}){let t=Math.max(1,Math.min(e.first??100,200)),r=await (0,tX.getPrismaClient)(),[i,a]=await Promise.all([r.appNotification.findMany({orderBy:[{createdAt:"desc"},{id:"desc"}],take:t+1,...e.after?{cursor:{id:e.after},skip:1}:void 0}),r.appNotification.count()]);return{items:i.slice(0,t),nextCursor:i.length>t?i[t-1].id:null,totalCount:a}}async sidebar(e=50){return(await (0,tX.getPrismaClient)()).appNotification.findMany({where:{sidebarRequested:!0,sidebarDismissedAt:null},orderBy:[{createdAt:"desc"},{id:"desc"}],take:Math.max(1,Math.min(e,100))})}async dismiss(e){let t=await (0,tX.getPrismaClient)(),r=await t.appNotification.updateMany({where:{id:e,sidebarRequested:!0,sidebarDismissedAt:null},data:{sidebarDismissedAt:new Date}});return r.count&&this.publish({kind:"DISMISSED",notification:null,notificationId:e}),r.count>0}async dismissAll(){let e=await (0,tX.getPrismaClient)(),t=await e.appNotification.updateMany({where:{sidebarRequested:!0,sidebarDismissedAt:null},data:{sidebarDismissedAt:new Date}});return t.count&&this.publish({kind:"SIDEBAR_CLEARED",notification:null,notificationId:null}),t.count}selectionWhere(e){let t=e.excludedRanges??[],r=e.all&&0===t.length?[]:[...new Set(e.ids??[])],i=[...new Set(e.excludedIds??[])],a=e.ranges??[];if(r.length>5e3||i.length>5e3)throw Error("Notification selection is too large");if(a.length>366||t.length>366)throw Error("Notification date selection is too large");let n=t.map(e=>{let t=ni(e.start,"Excluded selection start"),r=ni(e.end,"Excluded selection end");if(t>=r)throw Error("Excluded selection range is invalid");return{createdAt:{gte:t,lt:r}}}),s={NOT:{OR:n}},o=[];if(r.length&&o.push({id:{in:r}}),e.all)o.push(n.length?s:{});else if(a.length){let e=a.map(e=>{let t=ni(e.start,"Selection start"),r=ni(e.end,"Selection end");if(t>=r)throw Error("Selection range is invalid");return{createdAt:{gte:t,lt:r}}});o.push({AND:[{OR:e},...n.length?[s]:[]]})}if(!o.length)return{id:{in:[]}};let l=1===o.length?o[0]:{OR:o};return i.length?{AND:[l,{id:{notIn:i}}]}:l}async deleteSelection(e){let t=await (0,tX.getPrismaClient)(),r=await t.appNotification.deleteMany({where:this.selectionWhere(e)});return r.count&&this.publish({kind:"DELETED",notification:null,notificationId:null}),r.count}async deleteAll(){let e=await (0,tX.getPrismaClient)(),t=await e.appNotification.deleteMany();return t.count&&this.publish({kind:"HISTORY_CLEARED",notification:null,notificationId:null}),t.count}async webPushState(){let e=await (0,tX.getPrismaClient)(),[t,r]=await Promise.all([e.webPushSettings.findUnique({where:{id:ne}}),e.webPushSubscription.count()]),i=await this.credentialService.isConfigured(t1.CREDENTIALS.webPushVapidPrivateKey);return{configured:!!(t?.vapidPublicKey&&i),publicKey:t?.vapidPublicKey??null,subscriptionCount:r}}async webPushSubscriptions(){return(await (0,tX.getPrismaClient)()).webPushSubscription.findMany({orderBy:[{lastSeenAt:"desc"},{createdAt:"desc"}],select:{id:!0,endpoint:!0,expirationTime:!0,locale:!0,userAgent:!0,lastSeenAt:!0,createdAt:!0,updatedAt:!0}})}async prepareWebPush(){return this.vapidPreparation||(this.vapidPreparation=this.prepareWebPushOnce().finally(()=>{this.vapidPreparation=null})),this.vapidPreparation}async prepareWebPushOnce(){let e=await (0,tX.getPrismaClient)(),t=await e.webPushSettings.findUnique({where:{id:ne}});if(t?.vapidPublicKey){if(!await this.credentialService.getText(t1.CREDENTIALS.webPushVapidPrivateKey))throw Error("The Web Push private key is unavailable");return{publicKey:t.vapidPublicKey}}let r=a5.default.generateVAPIDKeys();return await this.credentialService.setText(t1.CREDENTIALS.webPushVapidPrivateKey,r.privateKey,e=>e.webPushSettings.upsert({where:{id:ne},create:{id:ne,vapidPublicKey:r.publicKey,vapidGeneratedAt:new Date},update:{vapidPublicKey:r.publicKey,vapidGeneratedAt:new Date}}).then(()=>void 0)),{publicKey:r.publicKey}}async registerWebPush(e){let t=nr(e.endpoint),r=nt(e.p256dh,"Push p256dh key",1e3),i=nt(e.auth,"Push auth key",1e3),a=null===e.expirationTime||void 0===e.expirationTime?null:new Date(e.expirationTime);if(a&&!Number.isFinite(a.getTime()))throw Error("Push subscription expiration is invalid");return await this.prepareWebPush(),(await (0,tX.getPrismaClient)()).webPushSubscription.upsert({where:{endpoint:t},create:{id:(0,y.randomUUID)(),endpoint:t,p256dh:r,auth:i,expirationTime:a,locale:e.locale?.trim().slice(0,35)||null,userAgent:e.userAgent?.trim().slice(0,1e3)||null},update:{p256dh:r,auth:i,expirationTime:a,locale:e.locale?.trim().slice(0,35)||null,userAgent:e.userAgent?.trim().slice(0,1e3)||null,lastSeenAt:new Date}})}async unregisterWebPush(e){let t=nr(e),r=await (0,tX.getPrismaClient)();return(await r.webPushSubscription.deleteMany({where:{endpoint:t}})).count>0}async deleteWebPushSubscription(e){let t=nt(e,"Push subscription",200),r=await (0,tX.getPrismaClient)();return(await r.webPushSubscription.deleteMany({where:{id:t}})).count>0}async testWebPushSubscription(e){let t=nt(e,"Push subscription",200),r=await (0,tX.getPrismaClient)(),[i,a]=await Promise.all([r.webPushSettings.findUnique({where:{id:ne}}),r.webPushSubscription.findUnique({where:{id:t}})]);if(!a)throw Error("Push subscription was not found");if(!i?.vapidPublicKey)throw Error("Web Push is not configured");let n=await this.credentialService.getText(t1.CREDENTIALS.webPushVapidPrivateKey);if(!n)throw Error("The Web Push private key is unavailable");a5.default.setVapidDetails(na(),i.vapidPublicKey,n);try{return await a5.default.sendNotification({endpoint:a.endpoint,expirationTime:a.expirationTime?.getTime()??null,keys:{p256dh:a.p256dh,auth:a.auth}},JSON.stringify({id:`test:${Date.now()}`,title:"Test notification",body:"Web Push is working for this browser.",href:"/notifications",icon:"/icon-192.png",badge:"/icon-192.png"}),{TTL:60,timeout:1e4}),!0}catch(e){if([404,410].includes(nn(e)??0))throw await r.webPushSubscription.deleteMany({where:{id:t}}),Error("The browser subscription expired and was removed");throw e}}async deliverWebPush(e){if(!e.webPushRequested)return;let t=await (0,tX.getPrismaClient)(),[r,i]=await Promise.all([t.webPushSettings.findUnique({where:{id:ne}}),t.webPushSubscription.findMany()]);if(!r?.vapidPublicKey||!i.length)return;let a=await this.credentialService.getText(t1.CREDENTIALS.webPushVapidPrivateKey);if(!a)return;a5.default.setVapidDetails(na(),r.vapidPublicKey,a);let n=JSON.stringify({id:e.id,title:e.title,body:e.body,href:e.href,icon:"/icon-192.png",badge:"/icon-192.png"});await Promise.allSettled(i.map(async e=>{try{await a5.default.sendNotification({endpoint:e.endpoint,expirationTime:e.expirationTime?.getTime()??null,keys:{p256dh:e.p256dh,auth:e.auth}},n,{TTL:3600,timeout:1e4})}catch(r){if([404,410].includes(nn(r)??0))return void await t.webPushSubscription.deleteMany({where:{endpoint:e.endpoint}});console.error(`Web Push delivery to ${e.endpoint} failed:`,r)}}))}}var no=e.i(986847);let nl=e=>e?.toISOString()??null;function nu(e,t,r,i,a){return e?t?"RUNNING":a?"ERROR":r&&!i||r&&i&&Date.now()-i.getTime()>2e3*r+5e3?"STALE":"HEALTHY":"DISABLED"}class nc{operations=new Map;register(e){let t=this.operations.get(e.id);this.operations.set(e.id,{...e,lastStartedAt:t?.lastStartedAt??null,lastCompletedAt:t?.lastCompletedAt??null,lastSucceededAt:t?.lastSucceededAt??null,nextScheduledAt:t?.nextScheduledAt??null,durationMs:t?.durationMs??null,lastError:t?.lastError??null}),this.changed(e.id)}configure(e,t){let r=this.operations.get(e);r&&(Object.assign(r,t),r.enabled||(r.nextScheduledAt=null),this.changed(e))}schedule(e,t){let r=this.operations.get(e);r&&(r.nextScheduledAt=t,this.changed(e))}async run(e,t,r){let i=this.operations.get(e);if(!i)throw Error(`Polling operation ${e} is not registered`);let a=new Date;i.lastStartedAt=a,i.lastError=null,this.changed(e);try{let e=await t(),n=new Date;return i.lastCompletedAt=n,i.lastSucceededAt=n,i.durationMs=n.getTime()-a.getTime(),i.lastError=null,r&&(i.details={...i.details,...r(e)}),e}catch(t){let e=new Date;throw i.lastCompletedAt=e,i.durationMs=e.getTime()-a.getTime(),i.lastError=t instanceof Error?t.message:String(t),t}finally{this.changed(e)}}changed(e){r6.agentEventBus.publish(r6.POLLING_CHANGED_TOPIC,{pollingOperationChanged:e})}subscribe(){return r6.agentEventBus.iterate(r6.POLLING_CHANGED_TOPIC)}serverViews(){return[...this.operations.values()].map(e=>({...e,status:nu(e.enabled,!!(e.lastStartedAt&&(!e.lastCompletedAt||e.lastStartedAt>e.lastCompletedAt)),e.cadenceSeconds,e.lastCompletedAt,e.lastError),lastStartedAt:nl(e.lastStartedAt),lastCompletedAt:nl(e.lastCompletedAt),lastSucceededAt:nl(e.lastSucceededAt),nextScheduledAt:nl(e.nextScheduledAt)}))}async list(){let e=await (0,tX.getPrismaClient)(),[t,r,i]=await Promise.all([e.codebaseSettings.findUnique({where:{id:"default"}}),e.agent.findMany({orderBy:{name:"asc"},select:{id:!0,name:!0,lastSeenAt:!0,disconnectedAt:!0,codebaseScanIntervalSeconds:!0,jobReconciliationIntervalSeconds:!0,gitFetchIntervalSeconds:!0,heartbeatIntervalSeconds:!0,codebases:{select:{lastCheckedAt:!0,lastFetchedAt:!0,lastFetchAttemptAt:!0,lastFetchError:!0}},diskSpaceState:{select:{enabled:!0,lastReportedAt:!0,lastError:!0,volumesJson:!0}}}}),e.agentJob.groupBy({by:["agentId","status"],where:{status:{in:["QUEUED","RUNNING"]}},_count:{_all:!0}})]),n=t?.refreshIntervalSeconds??30,s=t?.fetchIntervalSeconds??300,o=new Map;for(let e of i)o.set(e.agentId,(o.get(e.agentId)??0)+e._count._all);let l=[];for(let e of r){let t=e.heartbeatIntervalSeconds??no.DEFAULT_AGENT_HEARTBEAT_INTERVAL_SECONDS,r=e.jobReconciliationIntervalSeconds??no.DEFAULT_AGENT_JOB_RECONCILIATION_INTERVAL_SECONDS,i=e.codebaseScanIntervalSeconds??n,u=e.gitFetchIntervalSeconds??s,c=null!==e.lastSeenAt&&null===e.disconnectedAt&&Date.now()-e.lastSeenAt.getTime()<=(0,a.agentOnlineWindowMs)(e);l.push({id:`agent-heartbeat:${e.id}`,kind:"AGENT_HEARTBEAT",runtime:"AGENT",status:c?"HEALTHY":"STALE",enabled:!0,cadenceSeconds:t,lastStartedAt:null,lastCompletedAt:nl(e.lastSeenAt),lastSucceededAt:nl(e.lastSeenAt),nextScheduledAt:e.lastSeenAt?new Date(e.lastSeenAt.getTime()+1e3*t).toISOString():null,durationMs:null,lastError:null,details:{agentId:e.id,agentName:e.name,connection:c?"ONLINE":"OFFLINE"}});let d=e.diskSpaceState,p=d?.enabled??!0,h=d?.lastReportedAt??null,m=0;try{let e=JSON.parse(d?.volumesJson??"[]");m=Array.isArray(e)?e.length:0}catch{m=0}l.push({id:`agent-disk-space:${e.id}`,kind:"AGENT_DISK_SPACE",runtime:"AGENT",status:p?nu(!0,!1,r4.DISK_SPACE_POLL_INTERVAL_SECONDS,h,d?.lastError??null):"DISABLED",enabled:p,cadenceSeconds:r4.DISK_SPACE_POLL_INTERVAL_SECONDS,lastStartedAt:null,lastCompletedAt:nl(h),lastSucceededAt:d?.lastError?null:nl(h),nextScheduledAt:p&&h?new Date(h.getTime()+1e3*r4.DISK_SPACE_POLL_INTERVAL_SECONDS).toISOString():null,durationMs:null,lastError:d?.lastError??null,details:{agentId:e.id,agentName:e.name,volumes:m}}),l.push({id:`agent-job-reconciliation:${e.id}`,kind:"AGENT_JOB_RECONCILIATION",runtime:"AGENT",status:c?"HEALTHY":"STALE",enabled:!0,cadenceSeconds:r,lastStartedAt:null,lastCompletedAt:nl(e.lastSeenAt),lastSucceededAt:nl(e.lastSeenAt),nextScheduledAt:e.lastSeenAt?new Date(e.lastSeenAt.getTime()+1e3*r).toISOString():null,durationMs:null,lastError:null,details:{agentId:e.id,agentName:e.name,pendingJobs:o.get(e.id)??0}});let f=e.codebases.map(e=>e.lastCheckedAt).filter(e=>null!==e).sort((e,t)=>t.getTime()-e.getTime())[0]??null,g=e.codebases.map(e=>e.lastFetchAttemptAt??e.lastFetchedAt).filter(e=>null!==e).sort((e,t)=>t.getTime()-e.getTime())[0]??null,y=e.codebases.filter(e=>e.lastFetchError).length;l.push({id:`agent-codebase-scan:${e.id}`,kind:"CODEBASE_SCAN",runtime:"AGENT",status:nu(e.codebases.length>0,!1,i,f,null),enabled:e.codebases.length>0,cadenceSeconds:i,lastStartedAt:null,lastCompletedAt:nl(f),lastSucceededAt:nl(f),nextScheduledAt:f?new Date(f.getTime()+1e3*i).toISOString():null,durationMs:null,lastError:null,details:{agentId:e.id,agentName:e.name,repositories:e.codebases.length}}),l.push({id:`agent-git-fetch:${e.id}`,kind:"GIT_FETCH",runtime:"AGENT",status:y>0?"ERROR":nu(e.codebases.length>0,!1,u,g,null),enabled:e.codebases.length>0,cadenceSeconds:u,lastStartedAt:null,lastCompletedAt:nl(g),lastSucceededAt:y>0?null:nl(g),nextScheduledAt:g?new Date(g.getTime()+1e3*u).toISOString():null,durationMs:null,lastError:y>0?`${y} repositories have fetch errors`:null,details:{agentId:e.id,agentName:e.name,repositories:e.codebases.length,fetchErrors:y}})}return[...this.serverViews(),...l]}}let nd="default",np="https://raw.githubusercontent.com/BerriAI/litellm/refs/heads/main/model_prices_and_context_window.json",nh=new Set(["sample_spec"]);function nm(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function nf(e){let t=nm(e);return null===t?null:Math.trunc(t)}function ng(e){return"string"==typeof e&&e.trim()?e.trim():null}function ny(e){let t=e.lastIndexOf("/");return t<0?e:e.slice(t+1)}let nw={MODEL:"model",PROVIDER:"provider",INPUT_COST:"inputCostPerToken",OUTPUT_COST:"outputCostPerToken",CACHE_READ_COST:"cacheReadCostPerToken",CACHE_WRITE_COST:"cacheWriteCostPerToken",CONTEXT_WINDOW:"maxInputTokens"};function nb(e){return{model:e.model,provider:e.provider,mode:e.mode,inputCostPerToken:e.inputCostPerToken,outputCostPerToken:e.outputCostPerToken,cacheReadCostPerToken:e.cacheReadCostPerToken,cacheWriteCostPerToken:e.cacheWriteCostPerToken,maxInputTokens:e.maxInputTokens,maxOutputTokens:e.maxOutputTokens,updatedAt:e.updatedAt.toISOString()}}class nv{refreshing=null;checkedAt=0;async getCatalog(){let e=await (0,tX.getPrismaClient)(),t=await e.modelCostSettings.upsert({where:{id:nd},create:{id:nd},update:{}}),r=t.catalogUrl??np;return{url:r,defaultUrl:np,customUrl:t.catalogUrl,fetchedAt:t.fetchedAt?.toISOString()??null,entryCount:t.entryCount,error:t.error,stale:this.isStale(t.fetchedAt)||t.sourceUrl!==r}}isStale(e){return!e||Date.now()-e.getTime()>=864e5}async saveSettings(e){let t=e?.trim()??"",r=t&&t!==np?t:null;if(r){let e;try{e=new URL(r)}catch{throw Error("The model cost URL must be a valid URL")}if("https:"!==e.protocol&&"http:"!==e.protocol)throw Error("The model cost URL must be an http or https URL")}let i=await (0,tX.getPrismaClient)();await i.modelCostSettings.upsert({where:{id:nd},create:{id:nd,catalogUrl:r},update:{catalogUrl:r}}),this.checkedAt=0;let a=await this.getCatalog();return r6.agentEventBus.publish(r6.MODEL_COST_CATALOG_CHANGED_TOPIC,{catalog:a}),a}async refresh(){return this.refreshing||(this.refreshing=this.runRefresh().finally(()=>{this.refreshing=null})),this.refreshing}async runRefresh(){let e=await (0,tX.getPrismaClient)(),t=await this.getCatalog();try{let r=await fetch(t.url,{headers:{accept:"application/json"},signal:AbortSignal.timeout(3e4)});if(!r.ok)throw Error(`The model cost catalog request failed with ${r.status}`);let i=function(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("The model cost catalog is not a JSON object");let t=[];for(let[r,i]of Object.entries(e)){if(nh.has(r)||!i||"object"!=typeof i||Array.isArray(i))continue;let e=nm(i.input_cost_per_token),a=nm(i.output_cost_per_token);if((null!==e||null!==a)&&(t.push({model:r,provider:ng(i.litellm_provider),mode:ng(i.mode),inputCostPerToken:e,outputCostPerToken:a,cacheReadCostPerToken:nm(i.cache_read_input_token_cost),cacheWriteCostPerToken:nm(i.cache_creation_input_token_cost),maxInputTokens:nf(i.max_input_tokens),maxOutputTokens:nf(i.max_output_tokens)}),t.length>=2e4))break}if(!t.length)throw Error("The model cost catalog contained no priced models");return t}(await r.json());await e.$transaction(async e=>{await e.modelCostEntry.deleteMany({});for(let t=0;t<i.length;t+=500)await e.modelCostEntry.createMany({data:i.slice(t,t+500)});await e.modelCostSettings.update({where:{id:nd},data:{fetchedAt:new Date,sourceUrl:t.url,entryCount:i.length,error:null}})})}catch(r){let t=r instanceof Error?r.message:String(r);await e.modelCostSettings.update({where:{id:nd},data:{error:t.slice(0,2e3)}})}let r=await this.getCatalog();return r6.agentEventBus.publish(r6.MODEL_COST_CATALOG_CHANGED_TOPIC,{catalog:r}),r}async ensureFresh(){this.refreshing&&await this.refreshing,Date.now()-this.checkedAt<3e5||((await this.getCatalog()).stale&&await this.refresh(),this.checkedAt=Date.now())}async listEntries({search:e,first:t=100,offset:r=0,sortKey:i="MODEL",direction:a="ASC"}){var n;let s,o;await this.ensureFresh();let l=await (0,tX.getPrismaClient)(),u=e?.trim(),c=u?{OR:[{model:{contains:u}},{provider:{contains:u}}]}:{},d=Math.min(Math.max(t??100,1),500),p=Math.max(r??0,0),[h,m]=await Promise.all([l.modelCostEntry.findMany({where:c,orderBy:(n=i??"MODEL",s="DESC"===(a??"ASC")?"desc":"asc","model"===(o=nw[n]??"model")?[{model:s}]:[{[o]:{sort:s,nulls:"last"}},{model:s}]),skip:p,take:d}),l.modelCostEntry.count({where:c})]);return{items:h.map(nb),totalCount:m}}async lookup(e){let t=[...new Set(e.filter(Boolean))],r=new Map;if(!t.length)return r;let i=await (0,tX.getPrismaClient)(),a=[...new Set(t.flatMap(e=>[e,ny(e)]))],n=new Map((await i.modelCostEntry.findMany({where:{model:{in:a}}})).map(e=>[e.model,e])),s=[];for(let e of t){let t=n.get(e)??n.get(ny(e));t?r.set(e,nb(t)):s.push(e)}if(!s.length)return r;let o=await i.modelCostEntry.findMany({where:{OR:s.map(e=>({model:{endsWith:`/${ny(e)}`}}))}});for(let e of s){let t=ny(e).toLowerCase(),i=o.find(e=>ny(e.model).toLowerCase()===t);i&&r.set(e,nb(i))}return r}estimate(e,t){if(!e)return null;let r=e.inputCostPerToken,i=e.outputCostPerToken;if(null===r&&null===i)return null;let a=e.cacheReadCostPerToken??r??0,n=e.cacheWriteCostPerToken??r??0;return t.inputTokens*(r??0)+t.outputTokens*(i??0)+t.cacheReadTokens*a+t.cacheWriteTokens*n}}e.i(648153);var nk=e.i(594875),nS=e.i(937121);let nE=["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME","ANY_WORKTREE","REPOSITORY_WORKTREE"],nI=["NEVER","ON_FAILURE","ALWAYS"],nx=["QUEUED","RUNNING","RESTARTING","CANCELLING"],nA=["SUCCEEDED","FAILED","CANCELLED"];function n_(e,t,r){let i=t.trim().toUpperCase();if(!e.includes(i))throw Error(`${r} is not supported`);return i}function nC(e,t,r){let i=e.trim();if(!i)throw Error(`${t} is required`);if(i.length>r)throw Error(`${t} is too long`);return i}function nR(e){r6.agentEventBus.publish(r6.COMMANDS_CHANGED_TOPIC,{commandsChanged:e})}function nT(e){r6.agentEventBus.publish(r6.COMMAND_RUNS_CHANGED_TOPIC,{commandRunsChanged:e}),r6.agentEventBus.publish((0,r6.commandRunChangedTopic)(e.id),{commandRunChanged:e}),r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0})}class nD{agentControl;notifications;timer;reconciliation;constructor(e,t){this.agentControl=e,this.notifications=t,this.timer=null,this.reconciliation=null,this.agentControl.registerCompletionHandler(nS.COMMAND_RUN_JOB_KIND,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 (0,tX.getPrismaClient)()).commandDefinition.findMany({where:e?{}:{archivedAt:null},include:{targetAgent:!0,targetRepository:!0},orderBy:[{archivedAt:"asc"},{name:"asc"}]})}async getDefinition(e){return(await (0,tX.getPrismaClient)()).commandDefinition.findUnique({where:{id:e},include:{targetAgent:!0,targetRepository:!0}})}normalizeDefinition(e){let t=n_(nE,e.targetKind,"Target scope"),r=n_(nI,e.restartPolicy??"NEVER","Restart policy"),i=void 0===e.restartLimit?3:e.restartLimit;if(null!==i&&(!Number.isInteger(i)||i<0||i>100))throw Error("Restart limit must be null or an integer from 0 to 100");let a="SPECIFIC_AGENT_HOME"===t,n="REPOSITORY_WORKTREE"===t;if(!!e.targetAgentId!==a)throw Error(a?"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:nC(e.name,"Name",120),description:(e.description??"").trim().slice(0,2e3),script:nC(e.script,"Script",1e6),targetKind:t,targetAgentId:e.targetAgentId??null,targetRepositoryId:e.targetRepositoryId??null,restartPolicy:r,restartLimit:i,quickActionEnabled:e.quickActionEnabled??!1,quickActionIconKey:nC(e.quickActionIconKey??"terminal","Quick action icon",40),quickActionButtonVariant:nC(e.quickActionButtonVariant??"default","Quick action style",40),notificationsEnabled:e.notificationsEnabled??!0}}async createDefinition(e){let t=await (0,tX.getPrismaClient)(),r=await t.commandDefinition.create({data:{id:(0,y.randomUUID)(),...this.normalizeDefinition(e)},include:{targetAgent:!0,targetRepository:!0}});return nR(r),r}async updateDefinition(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.commandDefinition.update({where:{id:e},data:this.normalizeDefinition(t),include:{targetAgent:!0,targetRepository:!0}});return nR(i),i}async archiveDefinition(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.commandDefinition.update({where:{id:e},data:{archivedAt:t?new Date:null},include:{targetAgent:!0,targetRepository:!0}});return nR(i),i}async eligibleForAgent(e){return(await (0,tX.getPrismaClient)()).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 (0,tX.getPrismaClient)(),r=await t.worktree.findUnique({where:{id:e},select:{codebase:{select:{repositoryId:!0}}}});if(!r)throw Error("Worktree not found");return t.commandDefinition.findMany({where:{archivedAt:null,OR:[{targetKind:"ANY_WORKTREE"},{targetKind:"REPOSITORY_WORKTREE",targetRepositoryId:r.codebase.repositoryId}]},include:{targetAgent:!0,targetRepository:!0},orderBy:{name:"asc"}})}async listRuns(e){let t=await (0,tX.getPrismaClient)(),r=Math.max(1,Math.min(e.first??50,200)),i=e.search?.trim(),a={...e.includeArchived?{}:{archivedAt:null},...e.agentId?{agentId:e.agentId}:{},...e.worktreeId?{worktreeId:e.worktreeId}:{},...i?{OR:[{snapshotName:{contains:i}},{agentName:{contains:i}},{worktreePath:{contains:i}}]}:{}},[n,s]=await Promise.all([t.commandRun.findMany({where:a,include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{orderBy:{attempt:"asc"}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:r+1,...e.after?{cursor:{id:e.after},skip:1}:{}}),t.commandRun.count({where:a})]),o=n.length>r,l=n.slice(0,r);return{nodes:l,totalCount:s,pageInfo:{hasNextPage:o,endCursor:l.at(-1)?.id??null}}}async getRun(e){return(await (0,tX.getPrismaClient)()).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,r=-1,i=1e3){let a=await (0,tX.getPrismaClient)();return i<1?[]:a.commandRunOutputChunk.findMany({where:{OR:[{attempt:{runId:e,attempt:{gt:t}}},{attempt:{runId:e,attempt:t},sequence:{gt:r}}]},include:{attempt:{select:{attempt:!0,runId:!0}}},orderBy:[{attempt:{attempt:"asc"}},{sequence:"asc"}],take:Math.max(1,Math.min(i,5e3))})}async resolveTarget(e,t){let r=await (0,tX.getPrismaClient)();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 i=await r.agent.findUnique({where:{id:t.agentId}});if(!i)throw Error("Agent not found");return this.requireCapability(i.capabilitiesJson),{agent:i,worktree:null}}if(!t.worktreeId||t.agentId)throw Error("This command requires a worktree target");let i=await r.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{agent:!0,repository:!0}}}});if(!i||i.missingAt)throw Error("Worktree is unavailable");if("REPOSITORY_WORKTREE"===e.targetKind&&e.targetRepositoryId!==i.codebase.repositoryId)throw Error("This command is not eligible for the selected repository");return this.requireCapability(i.codebase.agent.capabilitiesJson),{agent:i.codebase.agent,worktree:i}}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(nS.COMMAND_RUN_JOB_KIND))throw Error("The selected agent must be upgraded before it can run commands")}async startRun(e){let t,r=await (0,tX.getPrismaClient)(),i=e.idempotencyKey?.trim()||(0,y.randomUUID)(),a=await r.commandRun.findUnique({where:{idempotencyKey:i}});if(a)return this.getRun(a.id);let n=await r.commandDefinition.findUnique({where:{id:e.commandId}});if(!n||n.archivedAt)throw Error("Command not found");let{agent:s,worktree:o}=await this.resolveTarget(n,e);try{t=await r.$transaction(async t=>{let r=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,y.randomUUID)(),displayNumber:r.nextValue,commandId:n.id,idempotencyKey:i,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: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 r.commandRun.findUnique({where:{idempotencyKey:i}});if(!e)throw t;return this.getRun(e.id)}return nT(t),await this.dispatch(t.id),this.getRun(t.id)}async startCustomRun(e){let t,r=await (0,tX.getPrismaClient)(),i=e.idempotencyKey?.trim()||(0,y.randomUUID)(),a=await r.commandRun.findUnique({where:{idempotencyKey:i}});if(a)return this.getRun(a.id);let n=nC(e.script,"Script",1e6),s=e.agentId&&!e.worktreeId?"ANY_AGENT_HOME":e.worktreeId&&!e.agentId?"ANY_WORKTREE":null;if(!s)throw Error("A custom command requires exactly one agent-home or worktree target");let{agent:o,worktree:l}=await this.resolveTarget({targetKind:s,targetAgentId:null,targetRepositoryId:null},e),u={name:"Custom command",description:"",script:n,targetKind:s,restartPolicy:"NEVER",restartLimit:null,notificationsEnabled:!0};try{t=await r.$transaction(async t=>{let r=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,y.randomUUID)(),displayNumber:r.nextValue,commandId:null,idempotencyKey:i,origin:(e.origin??"MANUAL").trim().toUpperCase(),status:"QUEUED",snapshotName:u.name,snapshotDescription:u.description,snapshotScript:u.script,snapshotTargetKind:u.targetKind,snapshotRestartPolicy:u.restartPolicy,snapshotRestartLimit:u.restartLimit,snapshotNotificationsEnabled:u.notificationsEnabled,snapshotJson:JSON.stringify(u),agentId:o.id,worktreeId:l?.id??null,agentName:o.name,agentHostname:o.hostname,worktreePath:l?.folder??null,worktreeBranch:l?.branch??null}})})}catch(t){let e=await r.commandRun.findUnique({where:{idempotencyKey:i}});if(!e)throw t;return this.getRun(e.id)}nT(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 (0,tX.getPrismaClient)(),r=await t.commandRun.findUnique({where:{id:e},include:{agent:!0,worktree:{include:{codebase:!0}},attempts:!0}});if(!r||r.stopRequested)return;if(!r.agentId||!r.agent)return void await this.failDispatch(r.id,"The command agent is no longer available");if(r.predecessorRunId){let e=await t.commandRun.findUnique({where:{id:r.predecessorRunId},select:{status:!0}});if(e&&!nA.includes(e.status))return}if(new Set(["ANY_WORKTREE","REPOSITORY_WORKTREE"]).has(r.snapshotTargetKind)&&(!r.worktreeId||!r.worktree||r.worktree.missingAt))return void await this.failDispatch(r.id,"The command worktree is no longer available");if(r.worktree&&r.worktree.codebase.agentId!==r.agentId)return void await this.failDispatch(r.id,"The worktree is no longer assigned to the command agent");try{this.requireCapability(r.agent.capabilitiesJson)}catch(e){await this.failDispatch(r.id,e instanceof Error?e.message:String(e));return}let i=r.attempts.reduce((e,t)=>!e||t.attempt>e.attempt?t:e,null),a=!i||i.agentJobId||i.completionProcessedAt||i.finishedAt?(i?.attempt??0)+1:i.attempt,n=i?.attempt===a?i:await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:a}}});if(!n)try{n=await t.commandRunAttempt.create({data:{id:(0,y.randomUUID)(),runId:e,attempt:a}})}catch(r){if(!(n=await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:a}}})))throw r}if(!n.agentJobId){let e=await this.agentControl.createJob({agentId:r.agentId,kind:nS.COMMAND_RUN_JOB_KIND,payload:{commandRunId:r.id,attemptId:n.id,targetKind:r.worktreeId?"WORKTREE":"AGENT_HOME",cwd:r.worktree?.folder??null,script:r.snapshotScript},idempotencyKey:`command-run:${r.id}:attempt:${a}`,timeoutSeconds:0,worktreeId:r.worktreeId,codebaseId:r.worktree?.codebaseId??null,visibility:"SYSTEM"});n=await t.commandRunAttempt.update({where:{id:n.id},data:{agentJobId:e.id,status:e.status}})}nT(await t.commandRun.update({where:{id:r.id},data:{status:"RUNNING"===n.status?"RUNNING":"QUEUED",startedAt:"RUNNING"===n.status?r.startedAt??new Date:null,nextRestartAt:null,error:null}}))}async failDispatch(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.commandRun.update({where:{id:e},data:{status:"FAILED",error:t,finishedAt:new Date,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});nT(i),await this.notifyFinishedRun(i)}async terminateRun(e){let t=await (0,tX.getPrismaClient)(),r=await t.commandRun.findUnique({where:{id:e},include:{attempts:{orderBy:{attempt:"desc"},take:1}}});if(!r)throw Error("Command run not found");if(nA.includes(r.status))return r;let i=await t.commandRun.update({where:{id:e},data:{stopRequested:!0,status:"CANCELLING",nextRestartAt:null}}),a=r.attempts[0]?.agentJobId;return a?await this.agentControl.cancelJob(a):await this.finishCancelled(e),nT(i),this.getRun(e)}async rerun(e){let t=await (0,tX.getPrismaClient)(),r=await t.commandRun.findUnique({where:{id:e}});if(!r)throw Error("Command run not found");let i=await t.commandRun.findUnique({where:{predecessorRunId:r.id}});if(i)return this.getRun(i.id);let a=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,y.randomUUID)(),displayNumber:t.nextValue,commandId:r.commandId,idempotencyKey:`rerun:${r.id}:${(0,y.randomUUID)()}`,origin:"RERUN",snapshotName:r.snapshotName,snapshotDescription:r.snapshotDescription,snapshotScript:r.snapshotScript,snapshotTargetKind:r.snapshotTargetKind,snapshotRestartPolicy:r.snapshotRestartPolicy,snapshotRestartLimit:r.snapshotRestartLimit,snapshotNotificationsEnabled:r.snapshotNotificationsEnabled,snapshotJson:r.snapshotJson,agentId:r.agentId,worktreeId:r.worktreeId,agentName:r.agentName,agentHostname:r.agentHostname,worktreePath:r.worktreePath,worktreeBranch:r.worktreeBranch,predecessorRunId:r.id}})});return nT(a),nA.includes(r.status)?await this.dispatch(a.id):await this.terminateRun(r.id),this.getRun(a.id)}async archiveRuns(e,t){let r=await (0,tX.getPrismaClient)();for(let i of(await r.commandRun.updateMany({where:{id:{in:e},status:{in:[...nA]}},data:{archivedAt:t?new Date:null}}),e)){let e=await r.commandRun.findUnique({where:{id:i}});e&&nT(e)}return!0}async deleteRuns(e){let t=await (0,tX.getPrismaClient)();return(await t.commandRun.deleteMany({where:{id:{in:e},status:{in:[...nA]}}})).count}async appendOutput(e,t,r,i){if(!i.length||i.length>200)throw Error("Output batches must contain 1 to 200 chunks");let a=await (0,tX.getPrismaClient)(),n=await a.commandRunAttempt.findUnique({where:{id:r},include:{run:!0}});if(!n||n.agentJobId!==t||n.run.agentId!==e)throw Error("Command attempt not found for this agent job");let s=i.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 r=new Date(e.createdAt);if(Number.isNaN(r.valueOf()))throw Error("Output date is invalid");return{...e,createdAt:r}});await Promise.all(s.map(e=>a.commandRunOutputChunk.upsert({where:{attemptId_sequence:{attemptId:r,sequence:e.sequence}},create:{id:(0,y.randomUUID)(),attemptId:r,...e},update:{}})));let o=await a.commandRunOutputChunk.findMany({where:{attemptId:r,sequence:{in:s.map(e=>e.sequence)}},orderBy:{sequence:"asc"}});for(let e of o){let t={...e,runId:n.runId,attemptNumber:n.attempt};r6.agentEventBus.publish((0,r6.commandRunOutputTopic)(n.runId),{commandRunOutputAdded:t}),r6.agentEventBus.publish(r6.COMMAND_RUN_OUTPUT_CHANGED_TOPIC,{commandRunOutputAdded:t})}return o}async finishCancelled(e){let t=await (0,tX.getPrismaClient)();nT(await t.commandRun.update({where:{id:e},data:{status:"CANCELLED",finishedAt:new Date,nextRestartAt:null}}));let r=await t.commandRun.findUnique({where:{predecessorRunId:e}});r&&await this.dispatch(r.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 r=await (0,tX.getPrismaClient)(),i=await r.$transaction(r=>this.notifications.recordInTransaction(r,{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(i)}catch(e){console.error("Command run notification failed:",e)}}async handleAttemptCompletion(e){let t=await (0,tX.getPrismaClient)(),r=await t.commandRunAttempt.findUnique({where:{agentJobId:e.id},include:{run:!0,agentJob:!0}});if(!r||r.completionProcessedAt)return;let i=new Date,a=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:r.id,completionProcessedAt:null},data:{status:e.status,exitCode:a.exitCode??null,signal:a.signal??null,error:e.error,startedAt:r.agentJob?.startedAt??r.startedAt,finishedAt:r.agentJob?.finishedAt??i,completionProcessedAt:i}})).count)return;if(r.run.stopRequested||"CANCELLED"===e.status)return void await this.finishCancelled(r.runId);let n="SUCCEEDED"===e.status&&0===a.exitCode,s=n_(nI,r.run.snapshotRestartPolicy,"Restart policy"),o=r.agentJob?.startedAt??r.createdAt,l=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,r=null!==e.limit&&t>e.limit;return{restart:!r,restartCount:t,exhausted:r}}({policy:s,limit:r.run.snapshotRestartLimit,restartCount:r.run.restartCount,durationMs:i.getTime()-o.getTime(),clean:n,manualStop:r.run.stopRequested});if(l.restart)return void nT(await t.commandRun.update({where:{id:r.runId},data:{status:"RESTARTING",restartCount:l.restartCount,nextRestartAt:new Date(i.getTime()+1e3),exitCode:a.exitCode??null,signal:a.signal??null,error:e.error}}));let u=await t.commandRun.update({where:{id:r.runId},data:{status:n?"SUCCEEDED":"FAILED",exitCode:a.exitCode??null,signal:a.signal??null,error:e.error??(l.exhausted?"Restart limit reached":n?null:"Command failed"),finishedAt:i,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});nT(u),await this.notifyFinishedRun(u)}async reconcile(e={}){let t=await (0,tX.getPrismaClient)(),r=new Date;for(let i of(await t.commandRun.findMany({where:{status:{in:[...nx]},...e.agentId?{agentId:e.agentId}:{}},include:{attempts:{include:{agentJob:!0},orderBy:{attempt:"desc"},take:1}}}))){let e=i.attempts[0];if(i.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(i.id);continue}if("RESTARTING"===i.status&&(!i.nextRestartAt||i.nextRestartAt<=r)){await this.dispatch(i.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 a="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}}),i.status!==a&&nT(await t.commandRun.update({where:{id:i.id},data:{status:a,startedAt:"RUNNING"===a?i.startedAt??e.agentJob.startedAt??r:i.startedAt}}));continue}"QUEUED"!==i.status||e&&(e.agentJobId||e.completionProcessedAt||e.finishedAt)||await this.dispatch(i.id)}}}var nN=e.i(735255);function nO(e=new Date){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${i}`}class nP{ccusage;diskSpace;polling;usageTimer;usageRunning;constructor(e,t,r){this.ccusage=e,this.diskSpace=t,this.polling=r,this.usageRunning=!1,this.ccusage.registerCompletionObserver(e=>this.recordCompletedUsage(e))}async recordCompletedUsage(e){if(0===e.progress.successfulCount)return;let t=nO(),r=e.aggregate.days.find(e=>e.period===t);await this.persistUsage(t,r?.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,y.randomUUID)()}`;try{let t=await this.ccusage.collect(e);return{period:nO(),successfulAgents:t.progress.successfulCount}}finally{await this.removeCollection(e)}}async persistUsage(e,t,r){let i=await (0,tX.getPrismaClient)();await i.sidebarUsageSummary.upsert({where:{id:"default"},create:{id:"default",period:e,totalCost:t,collectedAt:r},update:{period:e,totalCost:t,collectedAt:r}}),this.publish()}async latestSuccessfulUsage(e){let t=await (0,tX.getPrismaClient)(),r=await t.agentJob.findMany({where:{kind:no.CCUSAGE_REPORT_JOB_KIND,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}}}}),i=r.flatMap(e=>{try{let t=(0,no.parseCcusageJobResult)(JSON.parse(e.resultJson));return[{agent:e.agent,report:t.report}]}catch{return[]}});if(!i.length)return null;let a=(0,nN.aggregateUsage)(i).days.find(t=>t.period===e);return a?{totalCost:a.totalCost,collectedAt:r.reduce((e,t)=>{let r=t.finishedAt??t.createdAt;return r>e?r:e},new Date(0))}:null}async removeCollection(e){let t=await (0,tX.getPrismaClient)();await t.agentJob.deleteMany({where:{ccusageCollectionId:e}}),await t.ccusageCollection.deleteMany({where:{id:e}})}async pruneInterruptedCollections(){let e=await (0,tX.getPrismaClient)(),t=await e.ccusageCollection.findMany({where:{id:{startsWith:"sidebar-usage:"}},select:{id:!0}});if(!t.length)return;let r=t.map(({id:e})=>e);await e.agentJob.deleteMany({where:{ccusageCollectionId:{in:r}}}),await e.ccusageCollection.deleteMany({where:{id:{in:r}}})}async status(){let e=await (0,tX.getPrismaClient)(),t=nO(),[r,i,a,n,s,o,l]=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()]),u=r?.period===t?{totalCost:r.totalCost,collectedAt:r.collectedAt}:null;if(!u){let e=await this.latestSuccessfulUsage(t);e&&(u=e,this.persistUsage(t,e.totalCost,e.collectedAt)),this.runUsagePoll()}return{usageToday:{totalCost:u?.totalCost??null,collectedAt:u?.collectedAt.toISOString()??null},activity:{plans:i,sessions:a,builds:n,workflows:s,commands:o},diskSpace:l}}subscribe(){return r6.agentEventBus.iterate(r6.SIDEBAR_STATUS_CHANGED_TOPIC)}publish(){r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0})}}var n$=e.i(499162);let nU=`
633
633
  WITH agent_candidates AS (
634
634
  SELECT
635
635
  run.kind AS resourceKind,
@@ -807,6 +807,6 @@ ${t}`,d++;break;case"id":u=t.includes("\0")?void 0:t;break;case"retry":/^\d+$/.t
807
807
  SUM(CASE WHEN reason <> 'ACTIVE' THEN 1 ELSE 0 END),
808
808
  0
809
809
  ) AS needsAttentionCount
810
- FROM visible`)]),n=a[0],s=nB(n?.totalCount),o=nB(n?.needsAttentionCount);return{rows:i,totalCount:s,needsAttentionCount:o,activeCount:s-o}}let nL=["PLAN","SESSION","BUILD","WORKFLOW"],nq={questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}};function nM(e){return e.toISOString()}function nF(e){try{return JSON.parse(e)}catch{return{}}}function nK(e,t,r,i){return[e,t,i??0,r.toISOString()].join(":")}function nV(e,t){return{id:e.id,sourceKind:t,createdAt:nM(e.createdAt),questions:e.questions}}function nH(e){let t=(0,n$.getSessionValue)(nF(e),"worktree.id");return"string"==typeof t&&t?t:null}class nG{async list(e={}){var t,r,i,a,n;let s=await (0,tX.getPrismaClient)(),o=Math.max(1,Math.min(e.first??50,200)),l=await nj(s,{first:o,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)}),u=l.rows.slice(0,o),c=u.flatMap(e=>"PLAN"===e.resourceKind||"SESSION"===e.resourceKind?[e.resourceId]:[]),d=u.flatMap(e=>"WORKFLOW"===e.resourceKind?[e.resourceId]:[]),p=u.flatMap(e=>"BUILD"===e.resourceKind?[e.resourceId]:[]),[h,m,f]=await Promise.all([c.length?s.agentRun.findMany({where:{id:{in:c}},take:c.length,include:{worktree:!0,questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:nq}}}):Promise.resolve([]),d.length?s.workflowRun.findMany({where:{id:{in:d}},take:d.length,include:{workflow:!0,attempts:{where:{supersededAt:null},include:{questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:nq}}}}}):Promise.resolve([]),p.length?s.build.findMany({where:{id:{in:p}},take:p.length,include:{worktree:!0,codebase:{include:{repository:!0}},configuration:!0}}):Promise.resolve([])]),g=[...new Set(m.flatMap(e=>nH(e.sessionDataJson)?[nH(e.sessionDataJson)]:[]))],y=new Map((g.length?await s.worktree.findMany({where:{id:{in:g}},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):[]).map(e=>[e.id,e])),w=new Map(u.map(e=>[e.key,e.reason])),b=[];for(let e of h){let i=`${e.kind}:${e.id}`,a=w.get(i);if(!a)continue;let n=e.questionBatches.map(e=>nV(e,null)),s="FAILED"===a?nK(e.kind,e.id,e.finishedAt??e.updatedAt):null;b.push({key:i,resourceKind:e.kind,reason:a,resourceId:e.id,href:(t=e.kind,r=e.id,`/${"PLAN"===t?"plans":"sessions"}/${encodeURIComponent(r)}`),displayNumber:e.displayNumber,label:function(e,t=220){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}…`:r}(e.initialPrompt),summary:[e.repositoryName,e.branch].filter(Boolean).join(" · ")||null,status:e.status,phase:e.phase,error:e.error,createdAt:nM(e.createdAt),updatedAt:nM(e.updatedAt),worktree:e.worktree,questionBatches:"QUESTION"===a?n:[],buildRun:null,failureFingerprint:s})}for(let e of m){let t=`WORKFLOW:${e.id}`,r=w.get(t);if(!r)continue;let a=nH(e.sessionDataJson),n=e.attempts.flatMap(e=>e.questionBatches.map(t=>nV(t,e.kind))),s="FAILED"===r?nK("WORKFLOW",e.id,e.finishedAt??e.updatedAt,e.generation):null;b.push({key:t,resourceKind:"WORKFLOW",reason:r,resourceId:e.id,href:(i=e.id,`/workflows/runs/${encodeURIComponent(i)}`),displayNumber:e.displayNumber,label:e.workflow.name,summary:e.triggerSubjectKey||null,status:e.status,phase:e.phase,error:e.blockedReason??e.error,createdAt:nM(e.createdAt),updatedAt:nM(e.updatedAt),worktree:a?y.get(a)??null:null,questionBatches:"QUESTION"===r?n:[],buildRun:null,failureFingerprint:s})}for(let e of f){let t=`BUILD:${e.id}`,r=w.get(t);if(!r)continue;let i="FAILED"===r?nK("BUILD",e.id,e.finishedAt??e.updatedAt):null,n=e.codebase?.repository.name??null,s=e.configuration?.name??null;b.push({key:t,resourceKind:"BUILD",reason:r,resourceId:e.id,href:(a=e.id,`/builds/${encodeURIComponent(a)}`),displayNumber:null,label:s??n??"iOS build",summary:[n,e.worktree?.branch].filter(Boolean).join(" · ")||null,status:e.status,phase:null,error:e.error,createdAt:nM(e.createdAt),updatedAt:nM(e.updatedAt),worktree:e.worktree,questionBatches:[],buildRun:"UNRUN_BUILD"===r?{buildId:e.id,destinationType:e.destinationType,preferredDestination:nF(e.destinationJson)}:null,failureFingerprint:i})}let v=new Map(b.map(e=>[e.key,e])),k=u.flatMap(e=>v.has(e.key)?[v.get(e.key)]:[]);return{items:k,nextCursor:l.rows.length>o&&k.length?(n=k[k.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:l.totalCount,needsAttentionCount:l.needsAttentionCount,activeCount:l.activeCount}}async acknowledge(e){let t=e.resourceKind.trim().toUpperCase();if(!nL.includes(t))throw Error("Action Center resource kind is invalid");let r=await (0,tX.getPrismaClient)(),i=null;if("PLAN"===t||"SESSION"===t){let a=await r.agentRun.findUnique({where:{id:e.resourceId},select:{id:!0,kind:!0,status:!0,finishedAt:!0,updatedAt:!0}});a?.kind===t&&"FAILED"===a.status&&(i=nK(t,a.id,a.finishedAt??a.updatedAt))}else if("WORKFLOW"===t){let t=await r.workflowRun.findUnique({where:{id:e.resourceId},select:{id:!0,status:!0,generation:!0,finishedAt:!0,updatedAt:!0}});t?.status==="FAILED"&&(i=nK("WORKFLOW",t.id,t.finishedAt??t.updatedAt,t.generation))}else{let t=await r.build.findUnique({where:{id:e.resourceId},select:{id:!0,status:!0,finishedAt:!0,updatedAt:!0}});t?.status==="FAILED"&&(i=nK("BUILD",t.id,t.finishedAt??t.updatedAt))}if(!i||i!==e.failureFingerprint)throw Error("Action Center failure is no longer current");return await r.actionCenterAcknowledgement.upsert({where:{resourceKind_resourceId_failureFingerprint:{resourceKind:t,resourceId:e.resourceId,failureFingerprint:i}},create:{id:(0,y.randomUUID)(),resourceKind:t,resourceId:e.resourceId,failureFingerprint:i},update:{acknowledgedAt:new Date}}),r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0}),!0}subscribe(){return r6.agentEventBus.iterate(r6.SIDEBAR_STATUS_CHANGED_TOPIC)}}function nW(e,t,r){let i=e.trim().toLowerCase(),a=t.trim().toLowerCase();if(!i||!a)throw Error("Pull request repository coordinates are required");if(!Number.isInteger(r)||r<1)throw Error("Pull request number must be a positive integer");return`${i}/${a}#${r}`}function nJ(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function nz(e,t,r){return nJ(e[t])[r]}function nZ(e,t,r={}){if("string"!=typeof t&&"number"!=typeof t)return null;let i=String(t).trim();return i?{kind:e,resourceId:i,...r}:null}let nY=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"]),nQ=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"]),nX=new Set(["BUILD_RESULT","BUILD_TEST_THRESHOLD","BUILD_COVERAGE_THRESHOLD","BUILD_HOOK_FAILED"]),n0=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"]),n1=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"]),n2=new Set(["GITHUB_CHECK_FAILED","GITHUB_WORKFLOW_SUCCEEDED","GITHUB_ACTIONS_RESULT","GITHUB_PIPELINE_STATUS_CHANGED"]);function n3(e,t){let r="string"==typeof e?Number(e.trim()):e;return"number"!=typeof r||!Number.isFinite(r)||r<=0?null:Math.min(31536e3,Math.max(t,r))}function n4(e,t=null){let r=n3(e.timeoutSeconds,10)??(null===t?null:n3(t,10));return null===r?null:new Date(Date.now()+1e3*r)}function n6(e,t){return n3(e.cadenceSeconds,1)??Math.max(1,t)}function n8(e,t=1){return new Date(Date.now()+1e3*n6(e,t))}let n5=(e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e},n9=(e,t,r=2e4)=>{if("string"!=typeof e||!e.trim())throw Error(`${t} is required`);if(e.length>r)throw Error(`${t} is too long`);return e.trim()},n7=(e,t=2e4)=>null==e||""===e?null:n9(e,"Value",t),se=(e,t,r,i)=>n9(e.node.config[t]??(0,n$.getSessionValue)(e.sessionData,r),i,500),st=(e,t="operation")=>`${e.run.id}:${e.attempt.id}:${t}`,sr=(e,t,r=!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:r&&"string"==typeof t.id?{kind:"AGENT_RUN",externalKey:t.id,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}:void 0}),si=(e,t,r,i=[])=>({output:{jobId:t.id},sessionPatch:r,links:[...i,{kind:"AGENT_JOB",resourceId:t.id,label:"Agent job",url:`/jobs/${t.id}`}],wait:{kind:"AGENT_JOB",externalKey:t.id,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config,t.timeoutSeconds??3600)}}),sa=(e,t,r,i,a)=>({kind:e,resourceId:t,label:r,url:i,metadata:a}),sn=(e,t)=>sa("JIRA_TICKET",e,t??e);function ss(e,t,r){let i=sd(e);return sa("PULL_REQUEST",nW(i.owner,i.name,sg(e)),t??"Pull request",r)}function so(e){let t=sc(e),r=sf(e);return t&&r?sa("PULL_REQUEST",nW(t.owner,t.name,r),"Pull request"):null}function sl(e){let t=e.node.config.workflowRunId??(0,n$.getSessionValue)(e.sessionData,"pipeline.runId"),r=(0,n$.getSessionValue)(e.sessionData,"pipeline.url");return("string"==typeof t||"number"==typeof t)&&"string"==typeof r&&r?sa("GITHUB_WORKFLOW_RUN",String(t),"Workflow run",r):null}function su(e){let t=(0,n$.getSessionValue)(e.sessionData,"run.kind");if("PLAN"!==t&&"SESSION"!==t)return null;let r=function(e){try{return sS(e)}catch{return null}}(e);return r?sa("AGENT_RUN",r,t,`/${"PLAN"===t?"plans":"sessions"}/${r}`,{runKind:t}):null}function sc(e){let t=e.node.config.owner,r=e.node.config.name;if("string"==typeof t&&t.trim()&&"string"==typeof r&&r.trim())return{owner:t.trim(),name:r.trim()};let i=e.sessionData.repo&&"object"==typeof e.sessionData.repo&&!Array.isArray(e.sessionData.repo)?e.sessionData.repo.displayOrigin:null,a="string"==typeof i?i.match(/(?:https?:\/\/)?github\.com[/:]([^/]+)\/([^/.]+)(?:\.git)?$/i):null,n=a?.[1]?.trim(),s=a?.[2]?.trim();return n&&s?{owner:n,name:s}:null}function sd(e){let t=sc(e);if(!t)throw Error("GitHub owner and repository are required");return t}function sp(e){let t=n5(e,"Jira ticket"),r=t.issueType&&"object"==typeof t.issueType?t.issueType:{},i=t.status&&"object"==typeof t.status?t.status:{};return{...t,key:t.key,title:t.summary??t.title,type:r.name??t.type,status:i.name??t.status,statusCategory:i.category??t.statusCategory}}function sh(e){let t=n5(e,"Pull request"),r=Array.isArray(t.reviewThreads)?t.reviewThreads:[];return{...t,headBranch:t.headRefName,headSha:t.headRefOid,merged:"MERGED"===t.state,unresolvedThreads:r.filter(e=>e&&"object"==typeof e&&!Array.isArray(e)&&!0!==e.isResolved)}}function sm(e){return n9(e.node.config.issueKey??(0,n$.getSessionValue)(e.sessionData,"ticket.key"),"Jira issue key",100)}function sf(e){let t=e.node.config.number??(0,n$.getSessionValue)(e.sessionData,"pr.number"),r="string"==typeof t?Number(t):t;return"number"==typeof r&&Number.isInteger(r)&&r>=1?r:null}function sg(e){let t=sf(e);if(!t)throw Error("Pull request number is required");return t}function sy(e){return se(e,"worktreeId","worktree.id","Worktree ID")}function sw(e){return se(e,"codebaseId","codebase.id","Codebase ID")}function sb(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:n7(e.node.config.branchName??(0,n$.getSessionValue)(e.sessionData,"worktree.branch"),500),ticketKey:"TICKET"===t?n7(e.node.config.ticketKey??(0,n$.getSessionValue)(e.sessionData,"ticket.key"),100):null,baseBranch:n9(e.node.config.baseBranch??(0,n$.getSessionValue)(e.sessionData,"worktree.baseBranch")??(0,n$.getSessionValue)(e.sessionData,"repo.defaultBranch"),"Base branch",500)}}function sv(e){return se(e,"buildId","build.id","Build ID")}function sk(e){return n9(e.node.config.agentId??(0,n$.getSessionValue)(e.sessionData,"agent.id")??(0,n$.getSessionValue)(e.sessionData,"codebase.agentId"),"Agent ID",500)}function sS(e){let t=e.node.config.runId;if("string"==typeof t&&t)return t;let r=e.node.config.sourceStepId;return"string"==typeof r?n9((0,n$.getSessionValue)(e.sessionData,`run.${r}.id`),"Agent run ID",500):n9((0,n$.getSessionValue)(e.sessionData,"run.id"),"Agent run ID",500)}function sE(e,t){let r,i;return{kind:t,worktreeId:(r=e.node.config.worktreeId,i=(0,n$.getSessionValue)(e.sessionData,"worktree.id"),"string"==typeof r&&r===e.run.workflowId&&"string"==typeof i&&i!==r?n9(i,"Worktree ID",500):sy(e)),jiraIssueKey:n7(e.node.config.jiraIssueKey??(0,n$.getSessionValue)(e.sessionData,"ticket.key"),100),provider:n9(e.node.config.provider??"CODEX","Provider",50),model:n9(e.node.config.model,"Model",200),effort:n7(e.node.config.effort,50),webSearchEnabled:!0===e.node.config.webSearchEnabled,prompt:n9(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 sI{nextMaintenanceAt=0;async record(e){let t=await (0,tX.getPrismaClient)();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 r=await e.workflowTriggerEvent.findUnique({where:{dedupeKey:t.dedupeKey}});return r||e.workflowTriggerEvent.create({data:{id:(0,y.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 (0,tX.getPrismaClient)(),r=await t.workflowTriggerEvent.findMany({where:{status:"FAILED",receivedAt:{lt:new Date(e-6048e5)}},select:{id:!0},orderBy:{receivedAt:"asc"},take:1e3});if(r.length){await t.workflowTriggerEvent.deleteMany({where:{id:{in:r.map(({id:e})=>e)}}}),this.nextMaintenanceAt=0;return}this.nextMaintenanceAt=e+36e5}}function sx(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function sA(e,t){return{id:e.id,name:e.name,url:e.displayOrigin,canonicalOrigin:e.canonicalOrigin,displayOrigin:e.displayOrigin,defaultBranch:t??null}}function s_(e){return{id:e.id,name:e.name,hostname:e.hostname,connected:null===e.disconnectedAt,diskFreeBytes:e.diskFreeBytes,memoryFreeBytes:e.memoryFreeBytes}}class sC{events;agentControl;worktrees;diskSpace;domains;started;running;diskAuditTimer;diskStateFingerprints;constructor(e,t,r,i,a={}){this.events=e,this.agentControl=t,this.worktrees=r,this.diskSpace=i,this.domains=a,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,r,i,a={}){await this.events.record({kind:e,subjectKey:t,dedupeKey:r,payload:{...i,...a,sessionData:i}})}async worktreeSessionData(e,t=!1){return e&&this.worktrees?this.worktrees.workflowSessionDataForWorktree(e,{includeMissing:t}):{}}async observeAgentJob(e){if(e.kind===aR.WORKTREE_AUTO_SYNC_JOB_KIND&&e.worktreeId){let t=await this.worktreeSessionData(e.worktreeId,!0);await this.record("WORKTREE_AUTOMATION_RESULT",e.worktreeId,`worktree-automation:${e.id}:${e.status}`,(0,n$.mergeSessionData)(t,{worktree:{id:e.worktreeId},automation:{jobId:e.id,status:e.status,error:e.error,result:sx(e.resultJson??"{}")}}),{cursorValue:`${e.id}:${e.status}`})}if("ccusage.report"===e.kind&&"SUCCEEDED"===e.status&&e.resultJson){let t=sx(e.resultJson),r=t.report&&"object"==typeof t.report&&!Array.isArray(t.report)?t.report:{},i=r.totals&&"object"==typeof r.totals&&!Array.isArray(r.totals)?r.totals:{};await this.record("CCUSAGE_THRESHOLD",e.agentId,`ccusage:${e.ccusageCollectionId??e.id}:${e.agentId}`,{run:{usage:i},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}`,(0,n$.mergeSessionData)(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=r6.agentEventBus.iterate(r6.RUNS_CHANGED_TOPIC);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=r6.agentEventBus.iterate(r6.GITHUB_PIPELINE_STATUS_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=t.githubPipelineStatusChanged,r=e.snapshot,i=e.changedPipeline??{status:r.pipelineStatus};await this.record("GITHUB_PIPELINE_STATUS_CHANGED",`${r.repositoryGithubId}:${r.headSha}`,`github-pipeline:${r.repositoryGithubId}:${r.headSha}:${r.revision}`,{repo:{githubId:r.repositoryGithubId,nameWithOwner:r.repositoryNameWithOwner,url:r.repositoryUrl},pipeline:{...i,headSha:r.headSha,aggregateStatus:r.pipelineStatus,revision:r.revision}},{cursorValue:r.revision}).catch(e=>console.error("Could not record GitHub pipeline trigger:",e))}}finally{await e.return?.()}}async consumeCommandRuns(){let e=r6.agentEventBus.iterate(r6.COMMAND_RUNS_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.commands;if(!e)continue;let r=await e.getRun(t.commandRunsChanged.id);if(!r||!new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(r.status))continue;let i=await this.worktreeSessionData(r.worktreeId,!0),a=(0,n$.mergeSessionData)(i,{command:{id:r.id,commandId:r.commandId,name:r.snapshotName,status:r.status,exitCode:r.exitCode,signal:r.signal,error:r.error,finishedAt:r.finishedAt?.toISOString()??null},agent:{id:r.agentId,name:r.agentName},...r.worktreeId?{worktree:{id:r.worktreeId}}:{}}),n=r.finishedAt?.toISOString()??"terminal";await this.record("COMMAND_RUN_RESULT",r.id,`command-result:${r.id}:${r.status}:${n}`,a,{cursorValue:`${r.status}:${n}`}).catch(e=>console.error("Could not record command result trigger:",e))}}finally{await e.return?.()}}async consumeCommandOutput(){let e=r6.agentEventBus.iterate(r6.COMMAND_RUN_OUTPUT_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=t.commandRunOutputAdded,r=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:r,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=r6.agentEventBus.iterate(r6.SKILLS_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.skills;if(!e||!t.id)continue;let r=await e.getRun(t.id);if(!r)continue;let i=r.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})),a={skillSync:{id:r.id,kind:r.kind,status:r.status,error:r.error,conflictCount:i.length,conflicts:i,updatedAt:r.updatedAt.toISOString(),finishedAt:r.finishedAt?.toISOString()??null},...r.groupId?{skill:{groupId:r.groupId}}:{}};("NEEDS_RESOLUTION"===r.status||i.length)&&await this.record("SKILL_SYNC_CONFLICT",r.id,`skill-conflict:${r.id}:${r.updatedAt.toISOString()}`,a,{cursorValue:r.updatedAt.toISOString()}),new Set(["READY","PARTIAL","SUCCEEDED"]).has(r.status)&&await this.record("SKILL_SYNC_RESULT",r.id,`skill-result:${r.id}:${r.status}:${r.updatedAt.toISOString()}`,a,{cursorValue:`${r.status}:${r.updatedAt.toISOString()}`})}}finally{await e.return?.()}}async consumeIosDevices(){let e=r6.agentEventBus.iterate(r6.IOS_DEVICES_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.iosDevices;if(!e||!t.id)continue;let r=await e.device(t.id);if(!r)continue;let i={device:{id:r.id,udid:r.udid,name:r.displayName,product:r.product,osVersion:r.osVersion,status:r.status,error:r.registrationError,updatedAt:r.updatedAt.toISOString()}};await this.record("IOS_DEVICE_ENROLLED",r.id,`ios-device-enrolled:${r.id}:${r.createdAt.toISOString()}`,i,{cursorValue:r.createdAt.toISOString()}),new Set(["REGISTERED","REGISTRATION_FAILED","REJECTED"]).has(r.status)&&await this.record("IOS_DEVICE_REGISTRATION_RESULT",r.id,`ios-device-registration:${r.id}:${r.status}:${r.updatedAt.toISOString()}`,i,{cursorValue:`${r.status}:${r.updatedAt.toISOString()}`})}}finally{await e.return?.()}}async consumeSigningAssets(){let e=r6.agentEventBus.iterate(r6.SIGNING_ASSETS_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;if(!t.changed)continue;let e=this.domains.signingAssets;if(!e)continue;let[r,i]=await Promise.all([e.operations(200),e.profiles()]);for(let e of r.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 i.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=r6.agentEventBus.iterate(r6.PUSH_NOTIFICATIONS_CHANGED_TOPIC);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=r6.agentEventBus.iterate(r6.BUILD_DATA_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.buildData;if(!e)continue;let r=await e.getCollection(t.buildDataCollectionChanged.id);if(!r||"COMPLETED"!==r.status)continue;let i=r.entries.reduce((e,t)=>e+(t.sizeBytes??0),0),a={buildData:{id:r.id,status:r.status,finishedAt:r.finishedAt,totalBytes:i,entryCount:r.entries.length,successfulAgentCount:r.progress.successfulCount}},n=r.finishedAt??r.deadlineAt;await this.record("BUILD_DATA_THRESHOLD",r.id,`build-data-threshold:${r.id}:${n}`,a,{cursorValue:i}),await this.record("BUILD_DATA_CLEANUP_RESULT",r.id,`build-data-result:${r.id}:${n}`,a,{cursorValue:n})}}finally{await e.return?.()}}async consumePollingOperations(){let e=r6.agentEventBus.iterate(r6.POLLING_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.polling;if(!e)continue;let r=(await e.list()).find(e=>e.id===t.pollingOperationChanged);if(!r)continue;let i=r.lastCompletedAt??r.lastStartedAt??r.nextScheduledAt??r.status;await this.record("POLLING_OPERATION_STATE",r.id,`polling-state:${r.id}:${r.status}:${i}`,{polling:r},{cursorValue:`${r.status}:${i}`}).catch(e=>console.error("Could not record polling operation trigger:",e));let a=await this.domains.credentials?.status();if(a&&"READY"!==a.state){let e=a.warnings.map(({code:e})=>e);await this.record("CREDENTIAL_STORE_DEGRADED",a.storageType,`credential-store:${a.state}:${e.join(",")}`,{credentialStore:a},{cursorValue:{state:a.state,warningCodes:e,mismatchCount:a.mismatchCount}})}}}finally{await e.return?.()}}async consumeModelCosts(){let e=r6.agentEventBus.iterate(r6.MODEL_COST_CATALOG_CHANGED_TOPIC);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=r6.agentEventBus.iterate(r6.TOOL_CALL_AUDIT_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=await (0,tX.getPrismaClient)(),r=await e.toolCallAudit.findUnique({where:{id:t.toolCallAuditChanged.id}});if(!r||"RUNNING"===r.resultStatus)continue;let i=r.caller.startsWith("workflow:")?r.caller.slice(9):null,a=i?await e.workflowRun.findUnique({where:{id:i},select:{id:!0,workflowId:!0}}):null,n=a?null:await e.workflowStepAttempt.findUnique({where:{id:r.correlationId},select:{run:{select:{id:!0,workflowId:!0}}}}),s=a??n?.run??null,o=r.finishedAt?.toISOString()??"unfinished";await this.record("TOOL_CALL_RESULT",r.id,`tool-call:${r.id}:${r.resultStatus}:${o}`,{toolCall:{id:r.id,correlationId:r.correlationId,caller:r.caller,source:r.source,groupId:r.groupId,toolName:r.toolName,argumentsSha256:r.argumentsSha256,resultStatus:r.resultStatus,durationMs:r.durationMs,finishedAt:r.finishedAt?.toISOString()??null}},{cursorValue:`${r.resultStatus}:${o}`,...s?{workflowCorrelation:{workflowId:s.workflowId,runId:s.id}}:{}})}}finally{await e.return?.()}}async observeRun(e){let t=await (0,tX.getPrismaClient)(),r=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(!r)return;let i=await t.workflowRunResourceLink.findFirst({where:{kind:"AGENT_RUN",resourceId:r.id},include:{run:!0},orderBy:{createdAt:"desc"}}),a=await this.worktreeSessionData(r.worktree?.id??null),n=(0,n$.mergeSessionData)(a,{run:{id:r.id,kind:r.kind,status:r.status,phase:r.phase,origin:r.origin,provider:r.provider,model:r.model,finalOutput:r.finalOutput,error:r.error,sourcePlanId:r.sourcePlanId,parentRunId:r.parentRunId,followUpMode:r.followUpMode,usage:{inputTokens:r.inputTokens,outputTokens:r.outputTokens,reasoningTokens:r.reasoningTokens,cacheReadTokens:r.cacheReadTokens,cacheWriteTokens:r.cacheWriteTokens,toolCallCount:r.toolCallCount,estimatedCost:r.estimatedCost}},...r.worktree?{worktree:{id:r.worktree.id,path:r.worktree.folder,branch:r.worktree.branch,headSha:r.worktree.headSha},codebase:{id:r.worktree.codebase.id,folder:r.worktree.codebase.folder,agentId:r.worktree.codebase.agentId},repo:sA(r.worktree.codebase.repository,r.worktree.codebase.defaultBranch)}:{},...r.agent?{agent:s_(r.agent)}:{},...r.jiraIssueKey?{ticket:{key:r.jiraIssueKey}}:{}}),s=i?{workflowId:i.run.workflowId,runId:i.runId,attemptId:i.attemptId}:null,o={cursorValue:`${r.status}:${r.phase}`,workflowCorrelation:s};r.startedAt&&await this.record("RUN_STARTED",r.id,`run-started:${r.id}:${r.startedAt.toISOString()}`,n,o);let l="COMPLETED"===r.status?"RUN_COMPLETED":"FAILED"===r.status?"RUN_FAILED":"CANCELLED"===r.status?"RUN_CANCELLED":"PAUSED"===r.status?"RUN_PAUSED":null;l&&await this.record(l,r.id,`run-status:${r.id}:${r.status}:${r.finishedAt?.toISOString()??r.updatedAt.toISOString()}`,n,o),"RUNNING"===r.phase&&r.startedAt&&r.updatedAt>r.startedAt&&await this.record("RUN_CONTINUED",r.id,`run-continued:${r.id}:${r.updatedAt.toISOString()}`,n,o),r.sourcePlanId&&await this.record("RUN_PLAN_PLAYED",r.id,`run-plan-played:${r.id}:${r.sourcePlanId}`,n,o),r.parentRunId&&"PLAN_PLAY"!==r.followUpMode&&await this.record("RUN_FOLLOW_UP",r.id,`run-follow-up:${r.id}:${r.parentRunId}`,n,o),"IMPORTED"===r.origin&&await this.record("RUN_IMPORTED",r.id,`run-imported:${r.id}:${r.updatedAt.toISOString()}`,n,o),await this.record("RUN_USAGE_THRESHOLD",r.id,`run-usage:${r.id}:${r.updatedAt.toISOString()}`,n,{...o,cursorValue:r.updatedAt.toISOString()});let u=r.questionBatches[0];if(u){let e={...n,run:{...n.run,questions:u.questions}};"PENDING"===u.status?await this.record("RUN_QUESTION_NEEDED",r.id,`run-question:${u.id}:pending`,e,o):"ANSWERED"===u.status&&await this.record("RUN_QUESTION_ANSWERED",r.id,`run-question:${u.id}:answered`,e,o)}let c=r.events[0];c&&await this.record("RUN_EVENT_MATCH",r.id,`run-event:${c.id}`,n,{...o,event:c});let d=r.toolCalls[0];d&&await this.record("RUN_EVENT_MATCH",r.id,`run-tool:${d.id}:${d.status}`,n,{...o,toolCall:d})}async consumeBuilds(){let e=r6.agentEventBus.iterate(r6.BUILDS_CHANGED_TOPIC);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 (0,tX.getPrismaClient)(),r=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(!r)return;let i=await this.worktreeSessionData(r.worktree?.id??null),a=(0,n$.mergeSessionData)(i,{build:{id:r.id,status:r.status,action:r.action,error:r.error},...r.codebase?{codebase:{id:r.codebase.id,folder:r.codebase.folder,agentId:r.codebase.agentId},repo:sA(r.codebase.repository,r.codebase.defaultBranch),agent:s_(r.codebase.agent)}:{},...r.worktree?{worktree:{id:r.worktree.id,path:r.worktree.folder,branch:r.worktree.branch,headSha:r.worktree.headSha}}:{}});for(let e of(new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(r.status)&&await this.record("BUILD_RESULT",r.id,`build-result:${r.id}:${r.status}`,a,{cursorValue:r.status}),r.reports.filter(({status:e})=>"READY"===e))){let t=sx(e.summaryJson),i={...a,build:{...a.build,..."TEST_RESULTS"===e.kind?{testSummary:t}:{coverageSummary:t}}};await this.record("TEST_RESULTS"===e.kind?"BUILD_TEST_THRESHOLD":"BUILD_COVERAGE_THRESHOLD",r.id,`build-report:${e.id}:${e.updatedAt.toISOString()}`,i,{cursorValue:e.updatedAt.toISOString()})}for(let e of r.scriptExecutions.filter(({causedBuildFailure:e})=>e))await this.record("BUILD_HOOK_FAILED",r.id,`build-hook:${e.id}:failed`,a,{cursorValue:e.id,script:{id:e.id,name:e.nameSnapshot,phase:e.phase}})}async consumeWorktrees(){let e=r6.agentEventBus.iterate(r6.WORKTREE_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=t.worktreeOverviewChanged,r=await (0,tX.getPrismaClient)();for(let t of(await r.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,r=e.hasStagedChanges||e.hasUnstagedChanges,i=await this.worktreeSessionData(e.id,!0),a=(0,n$.mergeSessionData)(i,{repo:sA(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:r,missingAt:e.missingAt?.toISOString()??null,dirtySince:r?e.updatedAt.toISOString():null}}),n={cursorValue:t.toISOString()};await this.record("WORKTREE_SYNC_STATE_CHANGED",e.id,`worktree-sync:${e.id}:${e.syncState}:${t.toISOString()}`,a,{cursorValue:e.syncState}),await this.record("WORKTREE_CLEAN",e.id,`worktree-clean:${e.id}:${t.toISOString()}`,a,{cursorValue:r}),(e.baseBehind??0)>0&&await this.record("WORKTREE_BEHIND",e.id,`worktree-behind:${e.id}:${t.toISOString()}`,a,n),await this.record("WORKTREE_DIRTY_DURATION",e.id,`worktree-dirty:${e.id}:${t.toISOString()}`,a,n),await this.record("WORKTREE_MISSING",e.id,`worktree-missing:${e.id}:${t.toISOString()}`,a,{cursorValue:!!e.missingAt}),await this.record("WORKTREE_DIVERGED",e.id,`worktree-diverged:${e.id}:${t.toISOString()}`,a,{cursorValue:"DIVERGED"===e.pushStatus}),e.headSha&&await this.record("WORKTREE_NEW_COMMIT",e.id,`worktree-commit:${e.id}:${e.headSha}`,a,{cursorValue:e.headSha})}async consumeCodebases(){let e=r6.agentEventBus.iterate(r6.CODEBASE_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=await (0,tX.getPrismaClient)(),r=t.codebaseOverviewChanged;for(let t of(await e.codebase.findMany({where:r.codebaseId?{id:r.codebaseId}:r.repositoryId?{repositoryId:r.repositoryId}:{},include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}},take:r.codebaseId?1:500}))){let e={repo:sA(t.repository,t.defaultBranch),agent:s_(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)}},r=(t.lastCheckedAt??t.updatedAt).toISOString();await this.record("CODEBASE_SYNC_STATE_CHANGED",t.id,`codebase-sync:${t.id}:${t.syncState}:${r}`,e,{cursorValue:t.syncState}),(t.statusError||t.lastFetchError)&&await this.record("CODEBASE_OPERATION_FAILED",t.id,`codebase-failed:${t.id}:${r}`,e,{cursorValue:r,error:t.statusError??t.lastFetchError});let i=e.codebase.remoteBranches;if(Array.isArray(i))for(let r of i.filter(e=>"string"==typeof e))await this.record("CODEBASE_REMOTE_BRANCH",t.id,`codebase-remote-branch:${t.id}:${r}`,e,{cursorValue:r,branch:r})}}}finally{await e.return?.()}}async emitDiskSnapshot(e,t){let r=e.agent.id;t.report&&await this.record("AGENT_DISK_REPORT",r,`agent-disk-report:${r}:${e.disk.lastReportedAt??t.changeId}`,e,{cursorValue:e.disk.lastReportedAt}),t.threshold&&await this.record("AGENT_DISK_THRESHOLD",r,`agent-disk-threshold:${r}:${t.changeId}`,e);let i=r7(e);if(await this.record("AGENT_DISK_STATE_CHANGED",r,`agent-disk-state:${r}:${t.changeId}`,e,{cursorValue:i}),this.diskStateFingerprints.set(r,JSON.stringify(i)),t.cleanup){let i={...e,cleanup:t.cleanup};await this.record("AGENT_DISK_CLEANUP_RESULT",r,`agent-disk-cleanup:${t.cleanup.jobId}:${t.cleanup.status}`,i,{cleanup:t.cleanup})}}async observeDiskChange(e){if(!this.diskSpace)return;let{id:t,reason:r,cleanup:i}=e.diskSpaceChange;if("settings"===e.diskSpaceChanged){let e=await this.diskSpace.overview();for(let i of e.agents)await this.emitDiskSnapshot(r9(e.settings,i,r),{changeId:t,report:!1,threshold:!0});return}let a=await this.diskSpace.snapshot(e.diskSpaceChanged,r);await this.emitDiskSnapshot(a,{changeId:t,report:"REPORT_RECEIVED"===r,threshold:!0,cleanup:i})}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 r of t.agents){let i=r9(t.settings,r,e?"STARTUP_RECONCILE":"STATE_AUDIT"),a=JSON.stringify(r7(i));(e||this.diskStateFingerprints.get(r.agent.id)!==a)&&await this.emitDiskSnapshot(i,{changeId:(0,y.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),1e3*r4.DISK_SPACE_POLL_INTERVAL_SECONDS),this.diskAuditTimer.unref?.())}}async consumeAgents(){let e=r6.agentEventBus.iterate(r6.AGENT_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=await (0,tX.getPrismaClient)(),r=await e.agent.findUnique({where:{id:t.agentChanged.id}});if(!r)continue;let i=null===r.disconnectedAt,a={codebase:{agentId:r.id},agent:{id:r.id,name:r.name,connected:i,diskFreeBytes:r.diskFreeBytes,memoryFreeBytes:r.memoryFreeBytes}};await this.record("AGENT_CONNECTION",r.id,`agent-connection:${r.id}:${r.updatedAt.toISOString()}`,a,{cursorValue:i}),await this.record("AGENT_RESOURCE_THRESHOLD",r.id,`agent-resource:${r.id}:${r.updatedAt.toISOString()}`,a,{cursorValue:{diskFreeBytes:r.diskFreeBytes,memoryFreeBytes:r.memoryFreeBytes}}),await this.record("AGENT_VERSION_CHANGED",r.id,`agent-version:${r.id}:${r.version}`,{...a,agent:{...a.agent,version:r.version,osVersion:r.osVersion,architecture:r.architecture}},{cursorValue:r.version})}}finally{await e.return?.()}}}var sR=e.i(988349),sT=e.i(248626),sD=e.i(336921),sN=e.i(53803),sO=e.i(264977);async function sP(e,t){let r=e.trim();if(!r||r.length>5e4)throw Error(`Workflow script must contain 1–${5e4.toLocaleString()} characters`);let i=await (0,sN.getQuickJS)(),a=Date.now()+250;try{return i.evalCode(`"use strict"; const session = Object.freeze(${JSON.stringify(t)}); (${r})(session);`,{memoryLimitBytes:8388608,maxStackSizeBytes:524288,shouldInterrupt:(0,sO.shouldInterruptAfterDeadline)(a)})}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 s${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 sU="workflows:changed",sB=e=>`workflow-run:${e}`,sj=e=>`workflow-run:${e}:events`,sL=e=>`workflow-run:${e}:questions`,sq=["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED"],sM=new Set(["SUCCEEDED","FAILED","CANCELLED"]),sF=new Set(["SUCCEEDED","FAILED","CANCELLED","SKIPPED","SUPERSEDED"]),sK=new Set(["RUNNING","WAITING"]),sV=e=>JSON.parse(e);function sH(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()<=(0,a.agentOnlineWindowMs)(e)}:{},...void 0!==e.diskFreeBytes?{diskFreeBytes:e.diskFreeBytes}:{},...void 0!==e.memoryFreeBytes?{memoryFreeBytes:e.memoryFreeBytes}:{}}}}function sG(e){return(0,n$.mergeSessionData)(sH(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 sW(e,t,r){let i=e.trim();if(!i)throw Error(`${t} is required`);if(i.length>r)throw Error(`${t} is too long`);return i}function sJ(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 sz(e,t){let r=e??("CONCURRENT"===t?4:1);if(!Number.isInteger(r)||r<1||r>32)throw Error("Maximum concurrent runs must be between 1 and 32");return r}function sZ(e){return Array.isArray(e)?`[${e.map(sZ).join(",")}]`:e&&"object"==typeof e?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${sZ(t)}`).join(",")}}`:JSON.stringify(e)}function sY(e,t,r){if(Buffer.byteLength(e,"utf8")>r)throw Error(`${t} is too large`)}function sQ(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e}function sX(e){r6.agentEventBus.publish(sU,{workflowChanged:{id:e}})}function s0(e){r6.agentEventBus.publish(sB(e),{workflowRunChanged:{id:e}}),r6.agentEventBus.publish(sU,{workflowChanged:{id:"runs",runId:e}}),r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0})}function s1(e){return[...ik.WORKFLOW_STEP_BY_KIND.get(e.kind).requiredPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.requiredPaths,...(0,sT.requiredConfigSessionPaths)(e.kind,"step",e.config)]}function s2(e){return[...ik.WORKFLOW_STEP_BY_KIND.get(e.kind).providedPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.providedPaths,`steps.${e.id}.*`]}async function s3(e){return(await e.workflowRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:2},update:{nextValue:{increment:1}}})).nextValue-1}class s4{events;executor;checkpointRestorer;credentials;agentControl;notifications;runsService;worktrees;commandsService;jiraService;runtimeTimer;ticking;workerId;activeExecutions;claimedSecretJobs;waitPollers;constructor(e,t=new s$,r,i,a,n,s,o,l,u){this.events=e,this.executor=t,this.checkpointRestorer=r,this.credentials=i,this.agentControl=a,this.notifications=n,this.runsService=s,this.worktrees=o,this.commandsService=l,this.jiraService=u,this.ticking=!1,this.workerId=(0,y.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(sD.WORKFLOW_TERMINAL_JOB_KIND,e=>this.workflowAgentJobCompleted(e)),this.agentControl.registerCompletionObserver(e=>this.genericAgentJobCompleted(e)),this.agentControl.registerCompletionHandler(sD.WORKFLOW_GIT_CHECKPOINT_JOB_KIND,e=>this.workflowAgentJobCompleted(e)))}async controlLinkedAgentRuns(e,t){if(!this.runsService)return;let r=await (0,tX.getPrismaClient)(),i=await r.workflowRunResourceLink.findMany({where:{runId:e,kind:"AGENT_RUN",attempt:{status:{in:["RUNNING","WAITING"]}}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(i.map(async({resourceId:e})=>{let r=await this.runsService.get(e);!r||"MANAGED"!==r.origin||"PAUSE"===t&&"IN_PROGRESS"!==r.status||"CONTINUE"===t&&"PAUSED"!==r.status||"CANCEL"===t&&new Set(["COMPLETED","FAILED","CANCELLED"]).has(r.status)||await this.runsService.lifecycle(e,t)}))}async cancelWaitingCommandRuns(e){if(!this.commandsService)return;let t=await (0,tX.getPrismaClient)(),r=await t.workflowRunResourceLink.findMany({where:{runId:e,kind:"COMMAND_RUN",attempt:{status:"WAITING"}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(r.map(({resourceId:e})=>this.commandsService.terminateRun(e)))}async runWorktree(e){let t=(0,n$.getSessionValue)(sV(e),"worktree.id");return"string"==typeof t&&t?(await (0,tX.getPrismaClient)()).worktree.findUnique({where:{id:t},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):null}async notifyRun(e,t,r,i,a){if(!this.notifications)return;let n=await (0,tX.getPrismaClient)(),s=await n.workflowRun.findUnique({where:{id:e},select:{sessionDataJson:!0}}),o=s?await this.runWorktree(s.sessionDataJson):null,l=await n.$transaction(n=>this.notifications.recordInTransaction(n,{dedupeKey:`workflow:${e}:${a}`,typeKey:t,title:r,body:i,href:`/workflows/runs/${e}`,resourceKind:"WORKFLOW_RUN",resourceId:e,worktreeId:o?.id??null,highlightColor:o?.highlightColor??null}));this.notifications.created(l)}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:ik.WORKFLOW_SCHEMA_VERSION,globalConcurrency:4,steps:ik.WORKFLOW_STEP_CATALOG,triggers:ik.WORKFLOW_TRIGGER_CATALOG}}registerWaitPoller(e,t){this.waitPollers.set(e,t)}async list(e={}){let t=await (0,tX.getPrismaClient)(),r=Math.min(Math.max(e.first??100,1),200),i=e.archive?.toUpperCase()??"ACTIVE",a=e.search?.trim(),n=await t.workflow.findMany({where:{..."ALL"===i?{}:"ARCHIVED"===i?{archivedAt:{not:null}}:{archivedAt:null},...null===e.enabled||void 0===e.enabled?{}:{enabled:e.enabled},...a?{OR:[{name:{contains:a}},{description:{contains:a}}]}:{}},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}},_count:{select:{versions:!0,runs:!0}}},orderBy:[{updatedAt:"desc"},{id:"desc"}],take:r+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:n.slice(0,r),nextCursor:n.length>r?n[r-1].id:null,totalCount:await t.workflow.count()}}async get(e){return(await (0,tX.getPrismaClient)()).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 (0,tX.getPrismaClient)()).workflowVersion.findUnique({where:{id:e},include:{triggers:!0}})}async create(e){let t=sW(e.name,"Workflow name",200),r=(0,ik.parseWorkflowDefinition)(e.definition??(0,ik.emptyWorkflowDefinition)(t)),i=JSON.stringify({...r,name:t,description:e.description?.trim()??r.description});sY(i,"Workflow definition",2097152);let a=sJ(e.overlapPolicy),n=await (0,tX.getPrismaClient)(),s=await n.workflow.create({data:{id:(0,y.randomUUID)(),name:t,description:e.description?.trim()??r.description,draftDefinitionJson:i,draftSchemaVersion:ik.WORKFLOW_SCHEMA_VERSION,overlapPolicy:a,maxConcurrentRuns:sz(e.maxConcurrentRuns,a)}});return sX(s.id),this.get(s.id)}async saveDraft(e){let t=(0,ik.parseWorkflowDefinition)(e.definition),r=JSON.stringify(t);sY(r,"Workflow definition",2097152);let i=await this.get(e.id);if(!i)throw Error("Workflow not found");let a=sJ(e.overlapPolicy??i.overlapPolicy),n=await (0,tX.getPrismaClient)();return await n.workflow.update({where:{id:e.id},data:{name:t.name,description:t.description,draftDefinitionJson:r,draftSchemaVersion:t.schemaVersion,overlapPolicy:a,maxConcurrentRuns:sz(e.maxConcurrentRuns??i.maxConcurrentRuns,a)}}),sX(e.id),this.get(e.id)}async validateDraft(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let r=(0,ik.validateWorkflowDefinition)(sV(t.draftDefinitionJson)),i=[...r.diagnostics];return r.definition&&i.push(...await this.validateSubworkflows(t.id,r.definition)),{valid:!(0,ik.hasWorkflowErrors)(i),diagnostics:i}}async validateSubworkflows(e,t){let r=t.nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(e=>({node:e,versionId:e.config.versionId})).filter(e=>"string"==typeof e.versionId);if(!r.length)return[];let i=await (0,tX.getPrismaClient)(),a=new Map,n=new Map,s=new Set,o=new Set,l=r.map(({versionId:e})=>e);for(;l.length;){let e=[...new Set(l)].filter(e=>!o.has(e));if(!e.length)break;for(let t of(e.forEach(e=>o.add(e)),l=[],await i.workflowVersion.findMany({where:{id:{in:e}}}))){a.set(t.id,t);try{let e=(0,ik.parseWorkflowDefinition)(sV(t.definitionJson)).nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(({config:e})=>e.versionId).filter(e=>"string"==typeof e);n.set(t.id,e),l.push(...e)}catch{s.add(t.id)}}}let u=(e,t)=>{let r=a.get(e);if(!r)return"MISSING";if(s.has(e))return"INVALID";if(t.has(r.workflowId))return"RECURSIVE";let i=new Set(t).add(r.workflowId);for(let t of n.get(e)??[]){let e=u(t,i);if(e)return e}return null},c=[];for(let{node:t,versionId:i}of r){let r=u(i,new Set([e]));"MISSING"===r?c.push({severity:"ERROR",code:"SUBWORKFLOW_NOT_FOUND",message:"Pinned sub-workflow chain contains a missing version",nodeId:t.id}):"INVALID"===r?c.push({severity:"ERROR",code:"SUBWORKFLOW_INVALID",message:"Pinned sub-workflow chain contains an invalid definition",nodeId:t.id}):"RECURSIVE"===r&&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 r=(0,ik.parseWorkflowDefinition)(sV(t.draftDefinitionJson)),i=await this.validateDraft(e);if(!i.valid)throw Error(`Workflow cannot be published: ${i.diagnostics.filter(({severity:e})=>"ERROR"===e).map(({message:e})=>e).slice(0,5).join("; ")}`);let a=await (0,tX.getPrismaClient)(),n=await a.$transaction(async t=>{let i=await t.workflowVersion.findFirst({where:{workflowId:e},orderBy:{version:"desc"}}),a=(0,y.randomUUID)(),n=await t.workflowVersion.create({data:{id:a,workflowId:e,version:(i?.version??0)+1,name:r.name,description:r.description,schemaVersion:r.schemaVersion,definitionJson:JSON.stringify(r),contentHash:(0,y.createHash)("sha256").update(sZ(r)).digest("hex"),triggers:{create:r.triggers.map(e=>({id:(0,y.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:a}}),n});return sX(e),n}async setEnabled(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.workflow.findUnique({where:{id:e}});if(!i)throw Error("Workflow not found");if(t&&!i.activeVersionId)throw Error("Publish the workflow before enabling it");return await r.workflow.update({where:{id:e},data:{enabled:t}}),sX(e),this.get(e)}async setQuickAction(e){let t=await (0,tX.getPrismaClient)(),r=[...new Set(e.repositoryIds.map(e=>e.trim()).filter(Boolean))],[i,a]=await Promise.all([t.workflow.findUnique({where:{id:e.id},select:{id:!0}}),t.codebaseRepository.count({where:{id:{in:r}}})]);if(!i)throw Error("Workflow not found");if(a!==r.length)throw Error("One or more repositories were not found");let n=e.quickActionIconKey.trim();if(!iS.WORKFLOW_QUICK_ACTION_KINDS.includes(e.kind))throw Error("Quick action kind is invalid");if("none"!==n&&!w.BUILD_CONFIGURATION_ICON_KEYS.includes(n))throw Error("Quick action icon is invalid");let s=e.quickActionButtonVariant.trim();if(!["default","outline","secondary","destructive"].includes(s))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:s}}),await t.workflowQuickActionRepository.deleteMany({where:{workflowId:e.id}}),r.length&&await t.workflowQuickActionRepository.createMany({data:r.map(t=>({workflowId:e.id,repositoryId:t}))})}),sX(e.id),this.get(e.id)}async archive(e,t){let r=await (0,tX.getPrismaClient)();return await r.workflow.update({where:{id:e},data:{archivedAt:t?new Date:null,...t?{enabled:!1}:{}}}),sX(e),this.get(e)}async delete(e){let t=await (0,tX.getPrismaClient)();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}}),sX(e),!0}export(e,t){return this.exportInternal(e,t)}async exportInternal(e,t){let 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 a=(0,ik.parseWorkflowDefinition)(sV(i?.definitionJson??r.draftDefinitionJson));return{format:"aide.workflow.export",schemaVersion:ik.WORKFLOW_SCHEMA_VERSION,exportedAt:new Date().toISOString(),workflow:{name:i?.name??r.name,description:i?.description??r.description,overlapPolicy:r.overlapPolicy,maxConcurrentRuns:r.maxConcurrentRuns,definition:(0,ik.sanitizeWorkflowExportDefinition)(a)}}}async import(e){sY("string"==typeof e.payload?e.payload:JSON.stringify(e.payload),"Workflow import",2097152);let t=sQ("string"==typeof e.payload?JSON.parse(e.payload):e.payload,"Workflow import"),r="aide.workflow.export"===t.format,i=r?sQ(t.workflow,"Exported workflow"):t,a=(0,ik.parseWorkflowDefinition)(r?i.definition:i);return this.create({name:e.name?.trim()||a.name,description:a.description,definition:{...a,name:e.name?.trim()||a.name},overlapPolicy:"string"==typeof i.overlapPolicy?i.overlapPolicy:"QUEUE",maxConcurrentRuns:"number"==typeof i.maxConcurrentRuns?i.maxConcurrentRuns:1})}async runs(e={}){let t=await (0,tX.getPrismaClient)(),r=Math.min(Math.max(e.first??100,1),200),i=Number(e.search),a=e.archive?.toUpperCase()??"ACTIVE",n="ALL"===a?{}:"ARCHIVED"===a?{archivedAt:{not:null}}:{archivedAt:null},s=await t.workflowRun.findMany({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{},...e.status?{status:e.status.toUpperCase()}:{},...Number.isInteger(i)&&i>0?{displayNumber:i}: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:r+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:s.slice(0,r),nextCursor:s.length>r?s[r-1].id:null,totalCount:await t.workflowRun.count({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{}}})}}async archiveRuns(e,t){let r=await (0,tX.getPrismaClient)(),i=[...new Set(e)],a=await r.workflowRun.updateMany({where:{id:{in:i}},data:{archivedAt:t?new Date:null}});for(let e of i)s0(e);return a.count}async deleteRuns(e){let t=await (0,tX.getPrismaClient)(),r=[...new Set(e)];if(await t.workflowRun.count({where:{id:{in:r},status:{notIn:["SUCCEEDED","FAILED","CANCELLED"]}}}))throw Error("Cancel runs that have not finished before deleting them");let i=await t.workflowRun.deleteMany({where:{id:{in:r}}});for(let e of r)s0(e);return i.count}async run(e){return(await (0,tX.getPrismaClient)()).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,r=500){return(await (0,tX.getPrismaClient)()).workflowRunEvent.findMany({where:{runId:e,sequence:{gt:t}},orderBy:{sequence:"asc"},take:Math.min(Math.max(r,1),1e3)})}async questionBatch(e){return(await (0,tX.getPrismaClient)()).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 r=await this.agentControl.getJob(t);if(!r||r.agentId!==e||"workflow.terminal.run"!==r.kind||"RUNNING"!==r.status)throw Error("Workflow job is not eligible to claim secrets");let i=(0,sD.parseWorkflowTerminalPayload)(sV(r.payloadJson)),a=new Set(Object.values(t1.CREDENTIAL_KINDS)),n=[];for(let e of i.credentialEnvironment){if(!a.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 (0,tX.getPrismaClient)(),r=(0,n$.getSessionValue)(e,"worktree.id");if("string"==typeof r){let e=await t.worktree.findUnique({where:{id:r},include:{codebase:{include:{agent:!0}}}});if(!e)throw Error("Workflow worktree is unavailable");let i=JSON.parse(e.codebase.agent.capabilitiesJson);return{agentId:e.codebase.agentId,codebaseId:e.codebaseId,worktreeId:e.id,cwd:e.folder,capabilities:Array.isArray(i)?i.filter(e=>"string"==typeof e):[]}}let i=(0,n$.getSessionValue)(e,"codebase.id");if("string"!=typeof i)throw Error("Workflow requires a codebase or worktree");let a=await t.codebase.findUnique({where:{id:i},include:{agent:!0}});if(!a)throw Error("Workflow codebase is unavailable");let n=JSON.parse(a.agent.capabilitiesJson);return{agentId:a.agentId,codebaseId:a.id,worktreeId:null,cwd:a.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(sD.WORKFLOW_TERMINAL_JOB_KIND))throw Error("The selected agent must be updated to run workflow terminal steps");let r={...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((0,n$.getSessionValue)(e.sessionData,"ticket.key")??""),AIDE_TICKET_TITLE:String((0,n$.getSessionValue)(e.sessionData,"ticket.title")??""),AIDE_BRANCH:String((0,n$.getSessionValue)(e.sessionData,"worktree.branch")??""),AIDE_BASE_BRANCH:String((0,n$.getSessionValue)(e.sessionData,"worktree.baseBranch")??""),AIDE_WORKTREE_PATH:String((0,n$.getSessionValue)(e.sessionData,"worktree.path")??t.cwd),AIDE_CODEBASE_PATH:String((0,n$.getSessionValue)(e.sessionData,"codebase.folder")??t.cwd),AIDE_REPO_ORIGIN:String((0,n$.getSessionValue)(e.sessionData,"repo.displayOrigin")??"")},i=Array.isArray(e.node.config.credentials)?e.node.config.credentials:[],a=await this.agentControl.createJob({agentId:t.agentId,kind:sD.WORKFLOW_TERMINAL_JOB_KIND,payload:{workflowRunId:e.run.id,stepAttemptId:e.attempt.id,stepId:e.node.id,codebaseId:t.codebaseId,worktreeId:t.worktreeId,cwd:t.cwd,script:sW(String(e.node.config.script??""),"Terminal script",1e6),interpreter:"NODE"===e.node.config.interpreter?"NODE":"SHELL",sessionData:e.sessionData,environment:r,credentialEnvironment:i},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:Number(e.node.config.timeoutSeconds??900),codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:a.id},links:[{kind:"AGENT_JOB",resourceId:a.id,label:"Workflow terminal job",url:`/jobs/${a.id}`}],wait:{kind:"AGENT_JOB",externalKey:a.id,resumeAfter:n8(e.node.config),timeoutAt:n4(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(sD.WORKFLOW_GIT_CHECKPOINT_JOB_KIND))throw Error("The selected agent must be updated to capture workflow checkpoints");let r=await this.agentControl.createJob({agentId:t.agentId,kind:sD.WORKFLOW_GIT_CHECKPOINT_JOB_KIND,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:r.id},links:[{kind:"AGENT_JOB",resourceId:r.id,label:"Workflow checkpoint job",url:`/jobs/${r.id}`}],wait:{kind:"AGENT_JOB",externalKey:r.id,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}}}async workflowAgentJobCompleted(e){if(e.kind===sD.WORKFLOW_TERMINAL_JOB_KIND){let t=(0,sD.parseWorkflowTerminalPayload)(sV(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 r=sQ(sV(e.resultJson),"Workflow terminal result");return void await this.resolveExternalWait("AGENT_JOB",e.id,{...r,jobId:e.id,stepAttemptId:t.stepAttemptId})}if(e.kind!==sD.WORKFLOW_GIT_CHECKPOINT_JOB_KIND)return;let t=(0,sD.parseWorkflowGitCheckpointPayload)(sV(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 r=sQ(sV(e.resultJson),"Workflow checkpoint result"),i=null;if(r.checkpoint&&"object"==typeof r.checkpoint){let e=r.checkpoint,a=await (0,tX.getPrismaClient)();i=(0,y.randomUUID)(),await a.$transaction([a.runCheckpoint.create({data:{id:i,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 r.stashRef?r.stashRef:"string"==typeof e.stashRef?e.stashRef:null}}),a.workflowRunResourceLink.create({data:{id:(0,y.randomUUID)(),runId:t.workflowRunId,attemptId:t.stepAttemptId,kind:"CHECKPOINT",resourceId:i,label:`${String(e.kind??t.kind)} checkpoint`}})])}await this.resolveExternalWait("AGENT_JOB",e.id,{...r,jobId:e.id,checkpointId:i})}async genericAgentJobCompleted(e){if(e.kind===sD.WORKFLOW_TERMINAL_JOB_KIND||e.kind===sD.WORKFLOW_GIT_CHECKPOINT_JOB_KIND)return;let t=e.resultJson?sQ(sV(e.resultJson),"Agent job result"):{status:e.status};if("SUCCEEDED"===e.status){let r=await (0,tX.getPrismaClient)(),i=t.worktree&&"object"==typeof t.worktree&&!Array.isArray(t.worktree)?t.worktree:null,a=i&&"string"==typeof i.gitDirectory?i.gitDirectory:null,n=e.codebaseId?await r.worktree.findFirst({where:{codebaseId:e.codebaseId,...e.worktreeId?{id:e.worktreeId}:a?{gitDirectory:a}:{id:"__missing__"}},include:{codebase:{include:{repository:!0,agent:!0}}}}):null,s=n?.codebase??(e.codebaseId?await r.codebase.findUnique({where:{id:e.codebaseId},include:{repository:!0,agent:!0}}):null),o={};if(n&&this.worktrees?.workflowSessionDataForWorktree)try{o=await this.worktrees.workflowSessionDataForWorktree(n.id,{includeMissing:!0})}catch{}if(s&&!o.codebase&&(o.repo={id:s.repository.id,name:s.repository.name,url:s.repository.displayOrigin,canonicalOrigin:s.repository.canonicalOrigin,displayOrigin:s.repository.displayOrigin,defaultBranch:s.defaultBranch},o.codebase={id:s.id,folder:s.folder,agentId:s.agentId,branch:s.defaultBranch,headSha:s.headSha},o.agent={id:s.agent.id,name:s.agent.name,hostname:s.agent.hostname}),n&&!o.worktree&&(o.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(o).length){let e=t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)?t.sessionPatch:{};t={...t,sessionPatch:(0,n$.mergeSessionData)(e,o)}}}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 r=await (0,tX.getPrismaClient)(),i=await r.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),a=i?.workflowStepAttempt;if(!i||!a)throw Error("Workflow checkpoint not found");let n=await this.workflowAgentContext((0,n$.workflowSessionData)(a.run.sessionDataJson)),s=await this.agentControl.createJob({agentId:n.agentId,kind:sD.WORKFLOW_GIT_CHECKPOINT_JOB_KIND,payload:{operation:"RESTORE",workflowRunId:a.runId,stepAttemptId:a.id,cwd:n.cwd,kind:"REPLAY_RESTORE",checkpoint:{headSha:i.headSha,branch:i.branch,upstreamSha:i.upstreamSha,indexTree:i.indexTree,worktreeTree:i.worktreeTree,refName:i.refName},stash:t.stash},idempotencyKey:`workflow:restore:${e}:${(0,y.randomUUID)()}`,timeoutSeconds:300,codebaseId:n.codebaseId,worktreeId:n.worktreeId,visibility:"SYSTEM"}),o=Date.now()+3e5;for(;Date.now()<o;){let e=await this.agentControl.getJob(s.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(s.id),Error("Workflow restore job timed out")}async compareCheckpointWithAgent(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await (0,tX.getPrismaClient)(),r=await t.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow checkpoint not found");let a=await this.workflowAgentContext((0,n$.workflowSessionData)(i.run.sessionDataJson)),n=await this.agentControl.createJob({agentId:a.agentId,kind:sD.WORKFLOW_GIT_CHECKPOINT_JOB_KIND,payload:{operation:"COMPARE",workflowRunId:i.runId,stepAttemptId:i.id,cwd:a.cwd,kind:"REPLAY_PREVIEW",checkpoint:{headSha:r.headSha,branch:r.branch,upstreamSha:r.upstreamSha,indexTree:r.indexTree,worktreeTree:r.worktreeTree,refName:r.refName},stash:!1},idempotencyKey:`workflow:compare:${e}:${(0,y.randomUUID)()}`,timeoutSeconds:60,codebaseId:a.codebaseId,worktreeId:a.worktreeId,visibility:"SYSTEM"}),s=Date.now()+6e4;for(;Date.now()<s;){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=sQ(sV(e.resultJson),"Workflow comparison result");return sQ(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 r=await (0,tX.getPrismaClient)(),i=await r.workflowRunResourceLink.findMany({where:{kind:e.trim().toUpperCase(),resourceId:t.trim()},select:{runId:!0},distinct:["runId"],orderBy:{createdAt:"desc"}});return r.workflowRun.findMany({where:{id:{in:i.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(),r=await (0,tX.getPrismaClient)();return(await r.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:!0},orderBy:{name:"asc"}})).filter(e=>!!e.activeVersion&&(0,ik.parseWorkflowDefinition)(sV(e.activeVersion.definitionJson)).triggers.some(e=>(0,iS.isResourceTriggerKind)(e.kind)&&(0,ik.workflowResourceKind)(e.config)===t))}async quickActions(e){let t=await (0,tX.getPrismaClient)();if(!iS.WORKFLOW_QUICK_ACTION_KINDS.includes(e.kind))throw Error("Quick action kind is invalid");let r=e.resourceKind.trim().toUpperCase(),i=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:i??""}}}]},include:{activeVersion:!0},orderBy:[{name:"asc"},{id:"asc"}]})).filter(e=>!!e.activeVersion&&(0,ik.parseWorkflowDefinition)(sV(e.activeVersion.definitionJson)).triggers.some(e=>(0,iS.isResourceTriggerKind)(e.kind)&&(0,ik.workflowResourceKind)(e.config)===r))}async recordEvent(e){return this.events.record(e)}async hydrateResourceSessionData(e,t,r){let i=e?.toUpperCase()??null,a=await (0,tX.getPrismaClient)(),n={},s=null;if("CODEBASE"===i&&t){let e=await a.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=sG(e))}if("BUILD"===i&&t){let e=await a.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){s=e.worktreeId;let t=t=>{let r=e.reports.find(e=>e.kind===t);if(r)try{return(0,n$.workflowSessionData)(r.summaryJson)}catch{return}},r=t("TEST_RESULTS"),i=t("CODE_COVERAGE");n=(0,n$.mergeSessionData)(e.codebase?sG(e.codebase):e.agent?sH(e.agent):{},{build:{id:e.id,status:e.status,action:e.action,error:e.error,artifactDirectory:e.artifactDirectory,artifacts:e.artifacts,...r?{testSummary:r}:{},...i?{coverageSummary:i}:{}}})}}if("AGENT_RUN"===i&&t){let e=await a.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&&(s=e.worktreeId,n=(0,n$.mergeSessionData)(e.agent?sH(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"===i&&t&&this.worktrees?.workflowSessionDataForPullRequest){let e=/^([^/]+)\/([^#]+)#([1-9]\d*)$/.exec(t);e&&(n=(0,n$.mergeSessionData)(n,await this.worktrees.workflowSessionDataForPullRequest(e[1],e[2],Number(e[3]))))}if("JIRA_TICKET"===i&&t&&this.jiraService)try{let e=await this.jiraService.ticket(t),r=e.comments.at(-1)??null;n=(0,n$.mergeSessionData)(n,{ticket:{...e,title:e.summary,type:e.issueType,url:e.jiraUrl},...r?{comment:{id:r.id,body:r.content?.rawText??"",author:r.author}}:{}})}catch{}let o=(0,n$.getSessionValue)(r,"worktree.id"),l="WORKTREE"===i?t:"GITHUB_PIPELINE"===i||"GITHUB_JOB"===i?"string"==typeof o?o:null:s;if(l&&this.worktrees)if(this.worktrees.workflowSessionDataForWorktree)n=(0,n$.mergeSessionData)(await this.worktrees.workflowSessionDataForWorktree(l),n);else{let e=await this.worktrees.ticketKeyForWorktree(l);e&&(n=(0,n$.mergeSessionData)({ticket:{key:e}},n))}let u=(0,n$.getSessionValue)(r,"pipeline.pullRequests");!(0,n$.getSessionValue)(n,"pr")&&!(0,n$.getSessionValue)(r,"pr")&&Array.isArray(u)&&u[0]&&"object"==typeof u[0]&&!Array.isArray(u[0])&&(n=(0,n$.mergeSessionData)(n,{pr:u[0]}));let c=(0,n$.getSessionValue)(r,"pr.jiraKey")??(0,n$.getSessionValue)(r,"pipeline.jiraKey");return"string"!=typeof(0,n$.getSessionValue)(n,"ticket.key")&&"string"==typeof c&&c.trim()&&(n=(0,n$.mergeSessionData)(n,{ticket:{key:c}})),(0,n$.mergeSessionData)(n,r)}async trigger(e){let t=await (0,tX.getPrismaClient)(),r=await t.workflow.findUnique({where:{id:e.workflowId},include:{activeVersion:{include:{triggers:!0}}}});if(!r?.activeVersion)throw Error("Published workflow not found");if(!r.enabled||r.archivedAt)throw Error("Workflow is paused");let i=e.resourceKind?.toUpperCase()??null,a=e.choice?.trim()||null,{triggers:n}=r.activeVersion,s=i?"RESOURCE_MANUAL":"MANUAL",o=i?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE",l=e=>n.find(t=>t.kind===e&&(!i||(0,ik.workflowResourceKind)(sQ(sV(t.configJson),"Trigger configuration"))===i))??null,u=l(o),c=l(s),d=a?u:c;if(a&&!u)throw Error(i?`No resource trigger offers choices for ${i} resources`:"This workflow has no manual trigger with choices");if(!a&&!c&&u){let e=(0,ik.workflowTriggerChoices)(sQ(sV(u.configJson),"Trigger configuration"));throw Error(`This workflow needs a choice: ${e.map(({key:e})=>e).join(", ")}`)}if(i&&!d)throw Error(`No resource trigger accepts ${e.resourceKind} resources`);if(a&&u&&!(0,ik.workflowTriggerChoices)(sQ(sV(u.configJson),"Trigger configuration")).some(({key:e})=>e===a))throw Error(`Unknown choice ${a}`);let p=e.subjectKey?.trim()||(i&&e.resourceId?`${i}:${e.resourceId}`:`manual:${(0,y.randomUUID)()}`),h={sessionData:await this.hydrateResourceSessionData(e.resourceKind,e.resourceId,e.sessionData??{}),resourceKind:e.resourceKind??null,resourceId:e.resourceId??null,choice:a,manual:!0},m=await this.createRunForTrigger(r,r.activeVersion,d,null,a?o:s,p,h,`manual:${r.id}:${(0,y.randomUUID)()}`);return s0(m.id),this.run(m.id)}async createRunForTrigger(e,t,r,i,a,n,s,o,l=null,u=null){return(await (0,tX.getPrismaClient)()).$transaction(async c=>{if(u){let e=await c.workflowTriggerDelivery.findUnique({where:{id:u},include:{run:!0}});if(e)return e.run}let d=async e=>(u&&await c.workflowTriggerDelivery.create({data:{id:u,runId:e.id}}),e),p=await c.workflowRun.findUnique({where:{idempotencyKey:o}});if(p)return d(p);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 d(await c.workflowRun.update({where:{id:t.id},data:{triggerId:r?.id??null,triggerEventId:i,triggerKind:a,triggerPayloadJson:JSON.stringify(s),queuedAt:new Date}}))}let h=(0,y.randomUUID)(),m=sQ(s.sessionData??{},"Session data"),f=JSON.stringify((0,n$.mergeSessionData)({workflow:{id:e.id,name:t.name,runId:h,startedAt:null,trigger:{id:r?.nodeId??null,kind:a,subjectKey:n,choice:"string"==typeof s.choice?s.choice:null}},steps:{}},m));sY(f,"Workflow session data",2097152);let g=await c.workflowRun.create({data:{id:h,displayNumber:await s3(c),workflowId:e.id,versionId:t.id,triggerId:r?.id??null,triggerEventId:i,parentRunId:l,idempotencyKey:o,triggerKind:a,triggerSubjectKey:n,triggerPayloadJson:JSON.stringify(s),sessionDataJson:f}}),w=function(e,t){let r=e.trim().toUpperCase(),i=nJ(t.sessionData);if((0,iS.isResourceTriggerKind)(r)){let e=t.resourceKind,r="string"==typeof e?e.toUpperCase():null,a="GITHUB_JOB"===r?nz(i,"job","url"):"GITHUB_PIPELINE"===r?nz(i,"pipeline","url"):null;return"string"==typeof e?nZ(e.toUpperCase(),t.resourceId,{url:"string"==typeof a?a:null,metadata:"AGENT_RUN"===e.toUpperCase()?{runKind:nz(i,"run","kind")}:null}):null}if(nY.has(r))return nZ("JIRA_TICKET",nz(i,"ticket","key"));if(nQ.has(r))return nZ("AGENT_RUN",nz(i,"run","id"),{metadata:{runKind:nz(i,"run","kind")}});if(nX.has(r))return nZ("BUILD",nz(i,"build","id"));if(n0.has(r))return nZ("WORKTREE",nz(i,"worktree","id"));if("CODEBASE_REMOTE_BRANCH"===r||"CODEBASE_SYNC_STATE_CHANGED"===r||"CODEBASE_OPERATION_FAILED"===r)return nZ("CODEBASE",nz(i,"codebase","id"));if("COMMAND_RUN_RESULT"===r||"COMMAND_OUTPUT_MATCH"===r)return nZ("COMMAND_RUN",nz(i,"command","id"));if("SKILL_SYNC_RESULT"===r||"SKILL_SYNC_CONFLICT"===r)return nZ("SKILL_SYNC",nz(i,"skillSync","id"));if("IOS_DEVICE_ENROLLED"===r||"IOS_DEVICE_REGISTRATION_RESULT"===r)return nZ("IOS_DEVICE",nz(i,"device","id"));if("SIGNING_OPERATION_RESULT"===r||"SIGNING_ASSET_EXPIRING"===r)return nZ("SIGNING_PROFILE",nz(i,"signingProfile","id"));if("PUSH_NOTIFICATION_RESULT"===r)return nZ("PUSH_NOTIFICATION_BATCH",nz(i,"pushBatch","id"));if("BUILD_DATA_THRESHOLD"===r||"BUILD_DATA_CLEANUP_RESULT"===r)return nZ("BUILD_DATA_COLLECTION",nz(i,"buildData","id"));if("AGENT_JOB_FAILED"===r)return nZ("AGENT_JOB",nz(nJ(i.steps),"trigger","id"));if("AGENT_CONNECTION"===r||"AGENT_DISK_REPORT"===r||"AGENT_DISK_THRESHOLD"===r||"AGENT_DISK_STATE_CHANGED"===r||"AGENT_DISK_CLEANUP_RESULT"===r||"CCUSAGE_THRESHOLD"===r)return nZ("AGENT",nz(i,"agent","id")??nz(i,"codebase","agentId"));if("WORKFLOW_FINISHED"===r)return nZ("WORKFLOW_RUN",nz(t,"run","id"));if(n1.has(r)){let e=function(e){if("string"!=typeof e)return null;let t=e.trim(),r=t.match(/(?:https?:\/\/|ssh:\/\/git@|git@)?github\.com[/:]([^/]+)\/([^/#]+?)(?:\.git)?$/i)??t.match(/^([^/:]+)\/([^/#]+?)(?:\.git)?$/);return r?.[1]&&r[2]?{owner:r[1],repository:r[2]}:null}(nz(i,"repo","displayOrigin")),t=Number(nz(i,"pr","number"));return e&&Number.isInteger(t)&&t>0?nZ("PULL_REQUEST",nW(e.owner,e.repository,t)):null}if(n2.has(r)){let e=nz(i,"pipeline","url");return nZ("GITHUB_WORKFLOW_RUN",nz(i,"pipeline","runId"),{url:"string"==typeof e?e:null})}return"GITHUB_PUSH_DEFAULT"===r?nZ("CODEBASE_REPOSITORY",nz(i,"repo","id")):null}(a,s);return w&&await c.workflowRunResourceLink.create({data:{id:(0,y.randomUUID)(),runId:g.id,kind:w.kind.toUpperCase(),resourceId:w.resourceId,label:w.label??null,url:w.url??null,metadataJson:w.metadata?JSON.stringify(w.metadata):null}}),d(g)})}async processTriggerEvents(){let e=await (0,tX.getPrismaClient)(),t=await e.workflowTriggerEvent.findMany({where:{status:"PENDING"},orderBy:{receivedAt:"asc"},take:50});if(!t.length)return;let r=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:!0}}}});for(let s of t)try{let t=sQ(sV(s.payloadJson),"Trigger payload");for(let o of r)if(o.activeVersion)for(let r of o.activeVersion.triggers.filter(({kind:e})=>e===s.kind)){var i,a,n;if(t.workflowCorrelation&&"object"==typeof t.workflowCorrelation&&t.workflowCorrelation.workflowId===o.id)continue;let l=(i=s.dedupeKey,a=o.id,n=r.nodeId,(0,y.createHash)("sha256").update(JSON.stringify([i,a,n])).digest("hex"));if(await e.workflowTriggerDelivery.findUnique({where:{id:l},select:{id:!0}})||!await this.triggerMatches(r,s.subjectKey,t))continue;let u=await this.createRunForTrigger({...o,activeVersion:o.activeVersion},o.activeVersion,r,s.id,s.kind,s.subjectKey,t,l,null,l);s0(u.id)}await e.workflowTriggerEvent.delete({where:{id:s.id}})}catch(t){await e.workflowTriggerEvent.update({where:{id:s.id},data:{status:"FAILED",processedAt:new Date,error:t instanceof Error?t.message:String(t)}})}}async triggerMatches(e,t,r){let i,a=(0,n$.resolveWorkflowValue)(sQ(sV(e.configJson),"Trigger configuration"),r),n=null;if(void 0!==r.cursorValue&&("string"!=typeof a.thresholdPath||"string"!=typeof a.thresholdOperator)){let a=await (0,tX.getPrismaClient)(),s=await a.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});if(n=sZ(i=s?.cursorJson?sQ(sV(s.cursorJson),"Trigger cursor").value:void 0)!==sZ(r.cursorValue),"WORKTREE_CLEAN"===e.kind&&(n=!0===i&&!1===r.cursorValue),"JIRA_SPRINT_STARTED"===e.kind||"JIRA_SPRINT_ENDED"===e.kind){let e=Array.isArray(i)?i:null,t=Array.isArray(r.cursorValue)?r.cursorValue:null;n=null!==e&&null!==t&&t.some(t=>!e.some(e=>sZ(e)===sZ(t)))}await a.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,y.randomUUID)(),triggerId:e.id,subjectKey:t,cursorJson:JSON.stringify({value:r.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}},update:{cursorJson:JSON.stringify({value:r.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}}})}if("GITHUB_ISSUE_COMMAND"===e.kind){let e=(0,n$.getSessionValue)(r,"comment.author.login"),t=(0,n$.getSessionValue)(r,"comment.body"),i=Array.isArray(a.allowedLogins)?a.allowedLogins:[];if("string"!=typeof e||!i.includes(e)||"string"!=typeof t||"string"!=typeof a.commandPattern||!new RegExp(a.commandPattern).test(t))return!1}if("COMMAND_OUTPUT_MATCH"===e.kind){let e=(0,n$.getSessionValue)(r,"output.data");if("string"!=typeof e||"string"!=typeof a.outputPattern||!new RegExp(a.outputPattern).test(e))return!1}if("WORKTREE_CONFLICT"===e.kind&&!0!==(0,n$.getSessionValue)(r,"worktree.conflicted")||"WORKTREE_MISSING"===e.kind&&null==(0,n$.getSessionValue)(r,"worktree.missingAt")||"WORKTREE_DIVERGED"===e.kind&&"DIVERGED"!==(0,n$.getSessionValue)(r,"worktree.pushStatus"))return!1;if(a.filters&&"object"==typeof a.filters)for(let[e,t]of Object.entries(a.filters)){let i=(0,n$.getSessionValue)(r,e);if(Array.isArray(t)){if(!t.some(e=>sZ(e)===sZ(i)))return!1}else if(sZ(t)!==sZ(i))return!1}if("string"==typeof a.thresholdPath&&"string"==typeof a.thresholdOperator){let i={op:a.thresholdOperator,left:{source:"SESSION",path:a.thresholdPath},right:a.thresholdValue},n=(0,n$.evaluateWorkflowCondition)(i,r),s=await (0,tX.getPrismaClient)(),o=await s.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});return await s.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,y.randomUUID)(),triggerId:e.id,subjectKey:t,lastMatched:n,cursorJson:JSON.stringify({value:(0,n$.getSessionValue)(r,a.thresholdPath)}),...n?{lastFiredAt:new Date}:{}},update:{lastMatched:n,cursorJson:JSON.stringify({value:(0,n$.getSessionValue)(r,a.thresholdPath)}),...n&&!o?.lastMatched?{lastFiredAt:new Date}:{}}}),n&&!o?.lastMatched}return n??!0}async processSchedules(){let e=await (0,tX.getPrismaClient)(),t=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:{where:{kind:"SCHEDULE"},include:{states:!0}}}}}}),r=new Date;for(let i of t)for(let t of i.activeVersion?.triggers??[]){let a=sQ(sV(t.configJson),"Schedule configuration"),n=Number(a.cadenceSeconds);if(!Number.isInteger(n)||n<1)continue;let s=i.id,o=t.states.find(e=>e.subjectKey===s);if(!o){let i="string"==typeof a.firstRunAt?new Date(a.firstRunAt):null,l=i&&Number.isFinite(i.getTime())?i:new Date(r.getTime()+1e3*n);o=await e.workflowTriggerState.create({data:{id:(0,y.randomUUID)(),triggerId:t.id,subjectKey:s,nextScheduledAt:l}})}if(!o.nextScheduledAt||o.nextScheduledAt>r)continue;let l=o.nextScheduledAt,u=new Date(Math.max(r.getTime(),l.getTime())+1e3*n);await e.workflowTriggerState.update({where:{id:o.id},data:{lastFiredAt:r,nextScheduledAt:u}}),await this.events.record({kind:"SCHEDULE",subjectKey:s,dedupeKey:`schedule:${t.id}:${l.toISOString()}`,payload:{sessionData:{},scheduledFor:l.toISOString(),cadenceSeconds:n}})}}async lifecycle(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.workflowRun.findUnique({where:{id:e}});if(!i)throw Error("Workflow run not found");if("PAUSE"===t){if(!new Set(["RUNNING","WAITING","BLOCKED"]).has(i.status))throw Error("Only an active workflow run can be paused");if(!await r.$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"!==i.status)throw Error("Only a paused workflow run can be resumed");if(!(await r.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(sM.has(i.status))return this.run(e);for(let[t,i]of(await this.controlLinkedAgentRuns(e,"CANCEL"),await this.cancelWaitingCommandRuns(e),this.activeExecutions)){let a=await r.workflowStepAttempt.findUnique({where:{id:t},select:{runId:!0}});a?.runId===e&&i.abort()}if(!await r.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{notIn:[...sM]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:{notIn:[...sF]}},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 s0(e),this.run(e)}async repairRunData(e,t){let r=sQ(t,"Session data patch"),i=await (0,tX.getPrismaClient)(),a=await i.workflowRun.findUnique({where:{id:e}});if(!a)throw Error("Workflow run not found");if(!new Set(["BLOCKED","PAUSED"]).has(a.status))throw Error("Only blocked or paused workflows accept repair data");let n=(0,n$.workflowSessionData)(a.sessionDataJson),s=(0,n$.getSessionValue)(n,"workflow"),o=(0,n$.mergeSessionData)(n,r);s&&"object"==typeof s&&(o=(0,n$.setSessionValue)(o,"workflow",s));let l=JSON.stringify(o);return sY(l,"Workflow session data",2097152),await i.$transaction([i.workflowRun.update({where:{id:e},data:{sessionDataJson:l,sessionRevision:{increment:1},status:"PAUSED"===a.status?"PAUSED":"RUNNING",phase:"PAUSED"===a.status?"PAUSED":"SCHEDULING",blockedReason:null}}),i.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"),s0(e),this.run(e)}async answerQuestion(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.$transaction(async r=>{let i=await r.runQuestionBatch.findUnique({where:{id:e},include:{workflowStepAttempt:!0,answerRevisions:!0}}),a=i?.workflowStepAttempt;if(!i||!a)throw Error("Workflow question not found");if("PENDING"!==i.status)throw Error("Question was already answered");return await r.runAnswerRevision.create({data:{id:(0,y.randomUUID)(),batchId:e,revision:i.answerRevisions.length,answersJson:JSON.stringify(t)}}),await r.runQuestionBatch.update({where:{id:e},data:{status:"ANSWERED",answeredAt:new Date}}),await r.workflowWait.updateMany({where:{attemptId:a.id,status:"PENDING",kind:"HUMAN"},data:{status:"RESOLVED",resultJson:JSON.stringify({answers:t}),resolvedAt:new Date}}),a});return await this.completeWaitingAttempt(i.id,{answers:t}),r6.agentEventBus.publish(sL(i.runId),{workflowQuestionChanged:{id:e,runId:i.runId}}),this.run(i.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 (0,tX.getPrismaClient)();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 (0,tX.getPrismaClient)();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}`),s0(t.runId)}async startQueuedRuns(){let e=await (0,tX.getPrismaClient)();for(let t of(await e.workflowRun.findMany({where:{status:"QUEUED"},include:{workflow:!0,version:!0},orderBy:{queuedAt:"asc"},take:50}))){let r="CONCURRENT"===t.workflow.overlapPolicy?t.workflow.maxConcurrentRuns:1;if(await e.workflowRun.count({where:{workflowId:t.workflowId,id:{not:t.id},status:{in:sq.filter(e=>"QUEUED"!==e)}}})>=r)continue;let i=(0,ik.parseWorkflowDefinition)(sV(t.version.definitionJson)),a=new Date,n=(0,n$.setSessionValue)((0,n$.workflowSessionData)(t.sessionDataJson),"workflow.startedAt",a.toISOString());await e.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:t.id,status:"QUEUED"},data:{status:"RUNNING",phase:"SCHEDULING",startedAt:a,sessionDataJson:JSON.stringify(n),sessionRevision:{increment:1}}})).count&&(await e.workflowStepAttempt.createMany({data:i.nodes.map(e=>({id:(0,y.randomUUID)(),runId:t.id,nodeId:e.id,kind:e.kind,generation:t.generation,iterationKey:"",attempt:0,requiredPathsJson:JSON.stringify(s1(e)),providedPathsJson:JSON.stringify(s2(e)),idempotencyKey:`${t.id}:${e.id}:${t.generation}::0`}))}),!0))&&(await this.appendEvent(t.id,null,"RUN_STARTED","Workflow started"),s0(t.id))}}selectedTrigger(e,t){let r=e.trigger?.nodeId??t.triggers.find(({kind:t})=>t===e.triggerKind)?.id??null;if(!(0,iS.isChoiceTriggerKind)(e.triggerKind))return{id:r,choice:null};let i=sQ(sV(e.triggerPayloadJson),"Trigger payload");return{id:r,choice:"string"==typeof i.choice?i.choice:null}}attemptOutput(e){if(!e.outputJson)return{};let t=sV(e.outputJson);return t&&"object"==typeof t&&!Array.isArray(t)?t:{value:t}}edgeState(e,t,r,i){if(!i.has(e.source))return e.source!==t.id||t.choice&&e.sourceHandle!==t.choice?"INACTIVE":"ACTIVE";let a=r.get(e.source);if(!a||!sF.has(a.status))return"PENDING";if(new Set(["SKIPPED","CANCELLED","SUPERSEDED"]).has(a.status))return"INACTIVE";let n=i.get(e.source);if("FAILED"===a.status)return"failure"===e.sourceHandle||"catch"===e.sourceHandle||"CONTINUE"===n.failurePolicy&&"success"===e.sourceHandle?"ACTIVE":"INACTIVE";let s=this.attemptOutput(a).selectedHandles;return s?.length?s.includes(e.sourceHandle)?"ACTIVE":"INACTIVE":"success"===e.sourceHandle||"output"===e.sourceHandle?"ACTIVE":"INACTIVE"}async progressRun(e){let t=await (0,tX.getPrismaClient)(),r=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}});if(!r||sM.has(r.status))return;if("PAUSING"===r.status){await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}});let i=new Set(["AGENT_JOB","BUILD","SKILL_RUN","WORKTREE_MOVE","GITHUB_CHECKS"]),a=new Set(r.waits.filter(({status:e,kind:t})=>"PENDING"===e&&i.has(t)).map(({attemptId:e})=>e));!r.attempts.some(({id:e,status:t})=>"RUNNING"===t||"WAITING"===t&&a.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"),s0(e));return}if(!new Set(["RUNNING","WAITING"]).has(r.status))return;let i=(0,ik.parseWorkflowDefinition)(sV(r.version.definitionJson)),a=new Map(i.nodes.map(e=>[e.id,e])),n=new Map;for(let e of i.edges)n.set(e.target,[...n.get(e.target)??[],e]);let s=!0;for(;s;){if(s=!1,!(r=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let o=r.attempts.filter(({generation:e,supersededAt:t})=>e===r.generation&&!t),l=new Map;for(let e of o){let t=`${e.nodeId}:${e.iterationKey}`,r=l.get(t);(!r||r.attempt<e.attempt)&&l.set(t,e)}let u=new Map([...l.values()].filter(({iterationKey:e})=>!e).map(e=>[e.nodeId,e])),c=this.selectedTrigger(r,i);for(let e of i.nodes){let r=u.get(e.id);if(!r||"PENDING"!==r.status)continue;let o=i.nodes.find(t=>"CONTROL_FOR_EACH"===t.kind&&t.config.joinNodeId===e.id);if(o){let e=u.get(o.id);if(!e||!sF.has(e.status)||[...l.values()].filter(({iterationKey:e})=>!!e).some(({status:e})=>!sF.has(e)))continue;await t.workflowStepAttempt.update({where:{id:r.id},data:{status:"READY",phase:"ITERATIONS_JOINED"}}),s=!0;continue}let d=n.get(e.id)??[];if(!d.length)continue;let p=d.map(e=>this.edgeState(e,c,u,a)),h=p.filter(e=>"ACTIVE"===e).length,m=p.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===e.kind&&"ANY"===e.config.mode?"ANY":"ALL")?h>0:0===m&&h>0)?(await t.workflowStepAttempt.update({where:{id:r.id},data:{status:"READY",phase:"READY"}}),s=!0):0===m&&0===h&&(await t.workflowStepAttempt.update({where:{id:r.id},data:{status:"SKIPPED",phase:"INACTIVE_BRANCH",finishedAt:new Date}}),s=!0)}await this.progressIterationAttempts(i,r,c,a,n,l,u)&&(s=!0)}if(!(r=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let o=new Map;for(let e of r.attempts.filter(({generation:e,supersededAt:t})=>e===r.generation&&!t)){let t=`${e.nodeId}:${e.iterationKey}`,r=o.get(t);(!r||r.attempt<e.attempt)&&o.set(t,e)}let l=[...o.values()],u=r.waits.some(({status:e})=>"PENDING"===e),c=l.some(({status:e})=>!sF.has(e));if(u||c){let i=u?"WAITING":"RUNNING";r.status!==i&&(await t.workflowRun.updateMany({where:{id:e,status:{in:[...sK]}},data:{status:i,phase:u?"WAITING":"SCHEDULING"}})).count&&s0(e);return}let d=(0,ik.parseWorkflowDefinition)(sV(r.version.definitionJson)),p=l.find(e=>{if("FAILED"!==e.status)return!1;let t=d.nodes.find(({id:t})=>t===e.nodeId);return!!t&&"CONTINUE"!==t.failurePolicy&&!d.edges.some(e=>e.source===t.id&&new Set(["failure","catch"]).has(e.sourceHandle))});await this.finishRun(r,p?"FAILED":"SUCCEEDED",p?.error??null)}async finishRun(e,t,r){let i=await (0,tX.getPrismaClient)();await i.$transaction(async i=>!!(await i.workflowRun.updateMany({where:{id:e.id,status:{in:[...sK]}},data:{status:t,phase:t,error:r,finishedAt:new Date}})).count&&(await i.workflowResourceLease.deleteMany({where:{runId:e.id}}),!0))&&(await this.appendEvent(e.id,null,`RUN_${t}`,"SUCCEEDED"===t?"Workflow completed":"Workflow failed",r?{error:r}:null),await this.resolveExternalWait("WORKFLOW_RUN",e.id,{status:t,runId:e.id},"FAILED"===t?r||"Sub-workflow failed":null),await this.events.record({kind:"WORKFLOW_FINISHED",subjectKey:e.workflowId,dedupeKey:`workflow-finished:${e.id}`,payload:{sessionData:(0,n$.workflowSessionData)(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",r||`Workflow run ${e.displayNumber} ${t.toLowerCase()}`,t.toLowerCase()),s0(e.id))}async dispatchReadyAttempts(){let e=await (0,tX.getPrismaClient)(),t=Math.max(0,4-await e.workflowStepAttempt.count({where:{status:"RUNNING"}}));if(t)for(let r 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:r.id,status:"READY",run:{status:"RUNNING"}},data:{status:"RUNNING",phase:"RUNNING",claimOwner:this.workerId,claimExpiresAt:new Date(Date.now()+3e5),startedAt:r.startedAt??new Date}})).count)continue;t-=1;let i=new AbortController;this.activeExecutions.set(r.id,i),this.executeAttempt(r.id,i.signal).catch(e=>{console.error(`Workflow attempt ${r.id} failed unexpectedly:`,e)}).finally(()=>{this.activeExecutions.delete(r.id)})}}async acquireResourceLease(e,t,r){let i=ik.WORKFLOW_STEP_BY_KIND.get(t.kind),a=null;if(i.mutatesWorktree){let e=(0,n$.getSessionValue)(r,"worktree.id")??(0,n$.getSessionValue)(r,"worktree.path")??(0,n$.getSessionValue)(r,"codebase.id");e&&(a=`git:${String(e)}`)}else if(t.kind.startsWith("BUILD_")){let e=(0,n$.getSessionValue)(r,"build.id");e&&(a=`build:${String(e)}`)}if(!a)return!0;let n=await (0,tX.getPrismaClient)();await n.workflowResourceLease.deleteMany({where:{key:a,expiresAt:{lt:new Date}}});try{return await n.workflowResourceLease.create({data:{key:a,runId:e.runId,attemptId:e.id,expiresAt:new Date(Date.now()+3e5)}}),await n.workflowStepAttempt.update({where:{id:e.id},data:{resourceLockKey:a}}),!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 r=await (0,tX.getPrismaClient)(),i=await r.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!i||"RUNNING"!==i.status)return;let a=(0,ik.parseWorkflowDefinition)(sV(i.run.version.definitionJson)),n=a.nodes.find(({id:e})=>e===i.nodeId);if(!n)return void await this.failAttempt(i,null,Error("Workflow step definition is missing"));let s=(0,n$.workflowSessionData)(i.run.sessionDataJson);i.iterationKey&&(s=await this.iterationSessionData(i.run,i,s));let o=s1(n).filter(e=>!(0,n$.hasSessionValue)(s,e));if(o.length){await r.$transaction([r.workflowStepAttempt.update({where:{id:i.id},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",error:`Missing required session data: ${o.join(", ")}`,claimOwner:null,claimExpiresAt:null}}),r.workflowRun.update({where:{id:i.runId},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",blockedReason:`Step ${n.name??n.id} needs ${o.join(", ")}`}}),r.workflowResourceLease.deleteMany({where:{attemptId:e}})]),await this.appendEvent(i.runId,i.id,"STEP_BLOCKED",`Step blocked by missing requirements: ${o.join(", ")}`),await this.notifyRun(i.runId,"WORKFLOW_NEEDS_ATTENTION","Workflow needs data",`Step ${n.name??n.id} needs ${o.join(", ")}`,`blocked:${i.id}`),s0(i.runId);return}if(await r.workflowStepAttempt.update({where:{id:i.id},data:{inputJson:JSON.stringify(s)}}),await this.acquireResourceLease(i,n,s))try{let e,r={...n,config:(0,n$.resolveWorkflowValue)(n.config,s)};if(e=n.kind.startsWith("CONTROL_")||"HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind?await this.executeControl(i.run,i,r,s,a):await this.executor.execute({run:i.run,attempt:i,node:r,sessionData:s,signal:t}),t.aborted)throw Error("Workflow step was cancelled");e.wait?await this.parkAttempt(i,e):await this.completeAttempt(i,n,e)}catch(t){let e=t instanceof Error?t:Error(String(t));if(await this.holdForBusyCodebase(i,e))return;await this.failAttempt(i,n,e)}}async holdForBusyCodebase(e,t){if(!(0,sR.isCodebaseBusyError)(t))return!1;let r=e.startedAt??e.createdAt;if(Date.now()-r.getTime()>6e5)return!1;let i=await (0,tX.getPrismaClient)();return!!(await i.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 i.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),await i.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}),s0(e.runId),!0)}async iterationSessionData(e,t,r){let i=await (0,tX.getPrismaClient)(),a=await i.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,status:"SUCCEEDED"},orderBy:{finishedAt:"asc"}}),n=r;for(let e of(t.inputJson&&(n=(0,n$.mergeSessionData)(n,sQ(sV(t.inputJson),"Iteration input"))),a)){let t=this.attemptOutput(e);t.sessionPatch&&(n=(0,n$.mergeSessionData)(n,t.sessionPatch))}return n}async executeControl(e,t,r,i,a){switch(r.kind){case"CONTROL_IF":{let e=r.config.condition;if(!e)throw Error("If steps require a condition");let t=(0,n$.evaluateWorkflowCondition)(e,i);return{output:{matched:t},selectedHandles:[t?"true":"false"]}}case"CONTROL_JOIN":{let i=a.nodes.find(e=>"CONTROL_FOR_EACH"===e.kind&&e.config.joinNodeId===r.id);if(i){let r=await (0,tX.getPrismaClient)(),a=await r.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:{not:""},status:"FAILED"}});if(a.length&&"COLLECT_ERRORS"!==i.config.errorMode)throw Error(`${a.length} for-each iteration step(s) failed`);return{output:{iterations:await r.workflowStepAttempt.count({where:{runId:e.id,generation:t.generation,iterationKey:{not:""}}}),failures:a.map(({nodeId:e,iterationKey:t,error:r})=>({nodeId:e,iterationKey:t,error:r}))}}}return{output:{joined:!0}}}case"CONTROL_TRY":return{output:{started:!0}};case"CONTROL_DELAY":{let e=Number(r.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=r.config.condition;if(!e)throw Error("Wait-until steps require a condition");if((0,n$.evaluateWorkflowCondition)(e,i))return{output:{matched:!0}};let t=n6(r.config,15);return{wait:{kind:"PREDICATE",predicate:{condition:e,cadenceSeconds:t},resumeAfter:new Date(Date.now()+1e3*t),timeoutAt:n4(r.config)}}}case"CONTROL_SET_VARIABLE":{if("string"!=typeof r.config.path)throw Error("Set-variable steps require an output path");let e="string"==typeof r.config.script?await sP(r.config.script,i):r.config.value;return{output:e,sessionPatch:(0,n$.setSessionValue)({},r.config.path,e)}}case"CONTROL_FOR_EACH":{let n=Array.isArray(r.config.items)?r.config.items:"string"==typeof r.config.listPath?(0,n$.getSessionValue)(i,r.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,r,a,n),{output:{itemCount:n.length},selectedHandles:n.length?["body"]:["empty"],sessionPatch:(0,n$.setSessionValue)({},`steps.${r.id}.items`,n)}}case"CONTROL_SUBWORKFLOW":return this.startSubworkflow(e,t,r,i);case"HUMAN_CONFIRM":case"HUMAN_CHOICE":return this.createHumanQuestion(e,t,r);default:throw Error(`Unsupported control step ${r.kind}`)}}async progressIterationAttempts(e,t,r,i,a,n,s){let o=await (0,tX.getPrismaClient)(),l=!1;for(let e of new Set([...n.values()].map(({iterationKey:e})=>e).filter(Boolean))){let t=new Map(s);for(let r of n.values())r.iterationKey===e&&t.set(r.nodeId,r);for(let n of t.values()){if(n.iterationKey!==e||"PENDING"!==n.status)continue;let s=i.get(n.nodeId);if(!s)continue;let u=(a.get(s.id)??[]).map(e=>this.edgeState(e,r,t,i)),c=u.filter(e=>"ACTIVE"===e).length,d=u.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===s.kind&&"ANY"===s.config.mode?"ANY":"ALL")?c>0:0===d&&c>0)?(await o.workflowStepAttempt.update({where:{id:n.id},data:{status:"READY",phase:"ITERATION_READY"}}),l=!0):0===d&&0===c&&(await o.workflowStepAttempt.update({where:{id:n.id},data:{status:"SKIPPED",phase:"INACTIVE_ITERATION_BRANCH",finishedAt:new Date}}),l=!0)}}return l}async spawnForEach(e,t,r,i,a){let n="string"==typeof r.config.joinNodeId?r.config.joinNodeId:null,s=i.nodes.find(({id:e})=>e===n);if(!s||"CONTROL_JOIN"!==s.kind)throw Error("For-each steps require an explicit joinNodeId");let o=new Map;for(let e of i.edges)o.set(e.source,[...o.get(e.source)??[],e]);let l=(o.get(r.id)??[]).filter(({sourceHandle:e})=>"body"===e).map(({target:e})=>e),u=new Set;for(;l.length;){let e=l.shift();e===n||u.has(e)||(u.add(e),l.push(...(o.get(e)??[]).map(({target:e})=>e)))}if(a.length&&!u.size)throw Error("For-each body is not connected to its body handle");let c=i.nodes.filter(({id:e})=>u.has(e)),d=await (0,tX.getPrismaClient)();await d.$transaction(async i=>{await i.workflowStepAttempt.updateMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,nodeId:{in:[...u]},status:"PENDING"},data:{status:"SKIPPED",phase:"ITERATION_TEMPLATE",finishedAt:new Date}}),a.length&&c.length&&await i.workflowStepAttempt.createMany({data:a.flatMap((i,a)=>{let n=t.iterationKey?`${t.iterationKey}.${a}`:String(a),s=JSON.stringify({loop:{current:{forEachNodeId:r.id,index:a,item:i},[r.id]:{index:a,item:i}}});return c.map(r=>({id:(0,y.randomUUID)(),runId:e.id,nodeId:r.id,kind:r.kind,generation:t.generation,iterationKey:n,attempt:0,status:"PENDING",phase:"ITERATION_PENDING",inputJson:s,requiredPathsJson:JSON.stringify(s1(r)),providedPathsJson:JSON.stringify(s2(r)),idempotencyKey:`${e.id}:${r.id}:${t.generation}:${n}:0`}))})})})}async startSubworkflow(e,t,r,i){let a="string"==typeof r.config.versionId?r.config.versionId:null;if(!a)throw Error("Sub-workflow version is required");let n=await (0,tX.getPrismaClient)(),s=await n.workflowVersion.findUnique({where:{id:a},include:{workflow:{include:{activeVersion:!0}}}});if(!s)throw Error("Sub-workflow version not found");if(!s.workflow.enabled||s.workflow.archivedAt)throw Error("Sub-workflow is paused");let o=e,l=0;for(;o;){if(o.workflowId===s.workflowId)throw Error("Recursive sub-workflow invocation is not allowed");if((l+=1)>=10)throw Error("Sub-workflow depth is limited to 10");o=o.parentRunId?await n.workflowRun.findUnique({where:{id:o.parentRunId}}):null}let u={};if(r.config.inputMapping&&"object"==typeof r.config.inputMapping)for(let[e,t]of Object.entries(r.config.inputMapping))u=(0,n$.setSessionValue)(u,e,(0,n$.resolveWorkflowValue)(t,i));let c=await this.createRunForTrigger({...s.workflow,activeVersion:s},s,null,null,"SUBWORKFLOW",e.id,{sessionData:u,parentRunId:e.id},`${t.id}:subworkflow:${s.id}`,e.id);return s0(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:n8(r.config),timeoutAt:n4(r.config)}}}async createHumanQuestion(e,t,r){let i=Array.isArray(r.config.questions)?r.config.questions:[{header:r.name??null,prompt:"string"==typeof r.config.prompt?r.config.prompt:"HUMAN_CONFIRM"===r.kind?"Continue this workflow?":"Choose an option",multiSelect:!!r.config.multiSelect,allowCustom:"HUMAN_CONFIRM"!==r.kind&&!1!==r.config.allowCustom,options:"HUMAN_CONFIRM"===r.kind?[{label:"Confirm",description:null},{label:"Cancel",description:null}]:Array.isArray(r.config.options)?r.config.options:[]}];if(!i.length||i.length>10)throw Error("Workflow questions must contain between one and ten questions");let a=await (0,tX.getPrismaClient)(),n=(0,y.randomUUID)();return await a.runQuestionBatch.create({data:{id:n,workflowStepAttemptId:t.id,nativeRequestId:`workflow:${t.id}`,questions:{create:i.map((e,t)=>{let r=sQ(e,"Workflow question"),i=Array.isArray(r.options)?r.options:[];return{id:(0,y.randomUUID)(),position:t,header:"string"==typeof r.header?r.header:null,prompt:sW(String(r.prompt??""),"Question prompt",1e4),multiSelect:!!r.multiSelect,allowCustom:!1!==r.allowCustom,options:{create:i.map((e,t)=>{let r=sQ(e,"Question option");return{id:(0,y.randomUUID)(),position:t,label:sW(String(r.label??""),"Option label",500),description:"string"==typeof r.description?r.description.slice(0,2e3):null}})}}})}}}),r6.agentEventBus.publish(sL(e.id),{workflowQuestionChanged:{id:n,runId:e.id}}),{output:{questionBatchId:n},wait:{kind:"HUMAN",externalKey:n,timeoutAt:n4(r.config)}}}async parkAttempt(e,t){let r=t.wait;if(!r)throw Error("Workflow wait is missing");let i=await (0,tX.getPrismaClient)(),a=(0,y.randomUUID)();await i.$transaction(async i=>{let n=await i.workflowRun.findUnique({where:{id:e.runId},select:{status:!0}});return!(!n||sM.has(n.status))&&!!(await i.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING"},data:{status:"WAITING",phase:r.kind,outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:t.sessionPatch}),claimOwner:null,claimExpiresAt:null}})).count&&(await i.workflowWait.create({data:{id:a,runId:e.runId,attemptId:e.id,kind:r.kind,predicateJson:r.predicate?JSON.stringify(r.predicate):null,externalKey:r.externalKey??null,resumeAfter:r.resumeAfter??null,timeoutAt:r.timeoutAt??null}}),t.links?.length&&await i.workflowRunResourceLink.createMany({data:t.links.map(t=>({id:(0,y.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 i.workflowRun.updateMany({where:{id:e.runId,status:{in:[...sK]}},data:{status:"WAITING",phase:r.kind}}),await i.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_WAITING",`Step is waiting for ${r.kind.toLowerCase().replaceAll("_"," ")}`,{waitId:a}),s0(e.runId))}async completeAttempt(e,t,r){let i=await (0,tX.getPrismaClient)();await i.$transaction(async i=>{let a=await i.workflowRun.findUnique({where:{id:e.runId}});if(!a)throw Error("Workflow run disappeared");if(sM.has(a.status))return!1;let n=(0,n$.workflowSessionData)(a.sessionDataJson);e.iterationKey?n=(0,n$.setSessionValue)(n,`steps.${t.id}.iterations.${e.iterationKey.replaceAll(".","_")}`,{status:"SUCCEEDED",output:r.output??null,data:r.sessionPatch??null}):(r.sessionPatch&&(n=(0,n$.mergeSessionData)(n,r.sessionPatch)),n=(0,n$.setSessionValue)(n,`steps.${t.id}`,{status:"SUCCEEDED",output:r.output??null,snapshotId:r.links?.find(({kind:e})=>"CHECKPOINT"===e)?.resourceId??null}));let s=JSON.stringify(n);return sY(s,"Workflow session data",2097152),!!(await i.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"SUCCEEDED",phase:"SUCCEEDED",outputJson:JSON.stringify({value:r.output,selectedHandles:r.selectedHandles,sessionPatch:r.sessionPatch}),error:null,finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(r.links?.length&&await i.workflowRunResourceLink.createMany({data:r.links.map(t=>({id:(0,y.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 i.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:s,sessionRevision:{increment:1}}}),await i.workflowRun.updateMany({where:{id:e.runId,status:{in:[...sK]}},data:{status:"RUNNING",phase:"SCHEDULING"}}),await i.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_SUCCEEDED",`Step ${t.name??t.id} completed`),s0(e.runId))}async failAttempt(e,t,r){let i=await (0,tX.getPrismaClient)(),a=t??(await i.workflowRun.findUnique({where:{id:e.runId},include:{version:!0}}))?.version.definitionJson,n="string"==typeof a?(0,ik.parseWorkflowDefinition)(sV(a)).nodes.find(({id:t})=>t===e.nodeId)??null:a,s=n?.retry,o=!!(s&&e.attempt+1<s.maxAttempts),l=s?Math.min(86400,"EXPONENTIAL"===s.strategy?s.delaySeconds*2**e.attempt:s.delaySeconds):0;await i.$transaction(async t=>{let i=await t.workflowRun.findUnique({where:{id:e.runId}});if(!i||sM.has(i.status))return!1;let a=(0,n$.workflowSessionData)(i.sessionDataJson);return e.iterationKey||(a=(0,n$.setSessionValue)(a,`steps.${e.nodeId}`,{status:"FAILED",error:r.message})),!!(await t.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"FAILED",phase:o?"RETRY_SCHEDULED":"FAILED",error:r.message.slice(0,2e4),finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(o&&await t.workflowWait.create({data:{id:(0,y.randomUUID)(),runId:e.runId,attemptId:e.id,kind:"RETRY",resumeAfter:new Date(Date.now()+1e3*l)}}),await t.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:JSON.stringify(a),sessionRevision:{increment:1}}}),await t.workflowRun.updateMany({where:{id:e.runId,status:{in:[...sK]}},data:{status:o?"WAITING":"RUNNING",phase:o?"RETRY_WAIT":"SCHEDULING"}}),await t.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,o?"STEP_RETRY_SCHEDULED":"STEP_FAILED",o?`Step failed and will retry in ${l} seconds`:`Step failed: ${r.message}`,{error:r.message,retry:o}),s0(e.runId))}async resolveDueWaits(){let e=await (0,tX.getPrismaClient)(),t=new Date,r=(t,r)=>e.workflowWait.updateMany({where:{id:t,status:"PENDING",run:{status:{in:[...sK]}}},data:r});for(let i of(await e.workflowWait.findMany({where:{status:"PENDING",run:{status:{in:[...sK]}},OR:[{resumeAfter:{lte:t}},{timeoutAt:{lte:t}}]},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100}))){if(i.timeoutAt&&i.timeoutAt<=t&&"RETRY"!==i.kind&&"DELAY"!==i.kind){if(!(await r(i.id,{status:"TIMED_OUT",resolvedAt:t})).count)continue;await this.failAttempt(i.attempt,(0,ik.parseWorkflowDefinition)(sV(i.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===i.attempt.nodeId)??null,Error("Workflow wait timed out"));continue}if("RETRY"===i.kind){let r=i.attempt.attempt+1;await e.$transaction(async e=>{if(!(await e.workflowWait.updateMany({where:{id:i.id,status:"PENDING",run:{status:{in:[...sK]}}},data:{status:"RESOLVED",resolvedAt:t}})).count)return!1;if(await e.workflowStepAttempt.create({data:{id:(0,y.randomUUID)(),runId:i.runId,nodeId:i.attempt.nodeId,kind:i.attempt.kind,generation:i.attempt.generation,iterationKey:i.attempt.iterationKey,attempt:r,status:"PENDING",phase:"RETRY_PENDING",inputJson:i.attempt.inputJson,requiredPathsJson:i.attempt.requiredPathsJson,providedPathsJson:i.attempt.providedPathsJson,idempotencyKey:`${i.runId}:${i.attempt.nodeId}:${i.attempt.generation}:${i.attempt.iterationKey}:${r}`,replayedFromId:i.attempt.id}}),!(await e.workflowRun.updateMany({where:{id:i.runId,status:{in:[...sK]}},data:{status:"RUNNING",phase:"SCHEDULING"}})).count)throw Error("Workflow lifecycle changed while resuming retry");return!0})&&s0(i.runId)}else if("DELAY"===i.kind){if(!(await r(i.id,{status:"RESOLVED",resolvedAt:t})).count)continue;await this.completeWaitingAttempt(i.attemptId,{delayed:!0})}else if("PREDICATE"===i.kind){let e=i.predicateJson?sQ(sV(i.predicateJson),"Wait predicate"):{},a=e.condition,n=(0,n$.workflowSessionData)(i.attempt.run.sessionDataJson);if(a&&(0,n$.evaluateWorkflowCondition)(a,n)){if(!(await r(i.id,{status:"RESOLVED",resultJson:JSON.stringify({matched:!0}),resolvedAt:t})).count)continue;await this.completeWaitingAttempt(i.attemptId,{matched:!0})}else{let t=Math.max(1,Number(e.cadenceSeconds??15));await r(i.id,{resumeAfter:new Date(Date.now()+1e3*t)})}}else if(i.externalKey&&this.waitPollers.has(i.kind)){let e=await this.waitPollers.get(i.kind)(i.externalKey);if(e.pending){let t=(0,ik.parseWorkflowDefinition)(sV(i.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===i.attempt.nodeId)?.config??{};await r(i.id,{resumeAfter:new Date(Date.now()+1e3*n6(t,e.pollAfterSeconds??15))})}else{if(!(await r(i.id,{status:e.error?"FAILED":"RESOLVED",resultJson:JSON.stringify(e.result??{}),resolvedAt:new Date})).count)continue;if(e.error){let t=(0,ik.parseWorkflowDefinition)(sV(i.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===i.attempt.nodeId);await this.failAttempt(i.attempt,t??null,Error(e.error))}else await this.completeWaitingAttempt(i.attemptId,e.result??{})}}}}async completeWaitingAttempt(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!i||"WAITING"!==i.status)return;let a=(0,ik.parseWorkflowDefinition)(sV(i.run.version.definitionJson)).nodes.find(({id:e})=>e===i.nodeId);if(!a)throw Error("Workflow step definition is missing");let n=this.attemptOutput(i),s=n.sessionPatch;if("TERMINAL_RUN"===a.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionData&&"object"==typeof t.sessionData&&!Array.isArray(t.sessionData)){let e=structuredClone(t.sessionData),r=(0,n$.getSessionValue)((0,n$.workflowSessionData)(i.run.sessionDataJson),"workflow");s=r?(0,n$.setSessionValue)(e,"workflow",r):e}t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)&&(s=(0,n$.mergeSessionData)(s??{},t.sessionPatch)),a.kind.startsWith("RUN_")&&t&&"object"==typeof t&&!Array.isArray(t)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},`run.${a.id}`,t))),"BUILD_START"===a.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},"build",t))),"WORKTREE_WAIT_PUSH_READY"===a.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},"worktree",{id:t.id,pushStatus:t.pushStatus}))),"SKILL_APPLY"===a.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},`steps.${a.id}`,t))),("HUMAN_CONFIRM"===a.kind||"HUMAN_CHOICE"===a.kind)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},`steps.${a.id}.answer`,t))),await this.completeAttempt(i,a,{output:t??n.value,selectedHandles:n.selectedHandles,sessionPatch:s})}async resolveExternalWait(e,t,r,i=null){let a=await (0,tX.getPrismaClient)(),n=await a.workflowWait.findMany({where:{kind:e,externalKey:t,status:"PENDING"},include:{attempt:{include:{run:{include:{version:!0}}}}}});for(let e of n)if(await a.workflowWait.update({where:{id:e.id},data:{status:i?"FAILED":"RESOLVED",resultJson:JSON.stringify(r),resolvedAt:new Date}}),i){let t=(0,ik.parseWorkflowDefinition)(sV(e.attempt.run.version.definitionJson)).nodes.find(({id:t})=>t===e.attempt.nodeId);await this.failAttempt(e.attempt,t??null,Error(i))}else await this.completeWaitingAttempt(e.attemptId,r);return n.length}descendants(e,t){let r=new Map;for(let t of e.edges)r.set(t.source,[...r.get(t.source)??[],t.target]);let i=new Set([t]),a=[t];for(;a.length;){let e=a.shift();for(let t of r.get(e)??[])i.has(t)||(i.add(t),a.push(t))}return[...i]}async prepareReplay(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:{include:{checkpoints:!0,resourceLinks:!0}}}});if(!i)throw Error("Workflow run not found");if(!new Set(["PAUSED","BLOCKED","FAILED","SUCCEEDED","CANCELLED"]).has(i.status))throw Error("Pause the workflow before replaying a step");let a=(0,ik.parseWorkflowDefinition)(sV(i.version.definitionJson));if(!a.nodes.some(({id:e})=>e===t))throw Error("Workflow step not found");let n=this.descendants(a,t),s=i.attempts.filter(({generation:e,nodeId:t})=>e===i.generation&&n.includes(t)),o=s.filter(e=>e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0],l=o?.checkpoints.slice().sort((e,t)=>e.createdAt.getTime()-t.createdAt.getTime())[0],u=s.flatMap(e=>e.resourceLinks.filter(({kind:e})=>"CHECKPOINT"!==e).map(({kind:e,resourceId:t,label:r,url:i})=>({kind:e,resourceId:t,label:r,url:i}))),c=null,d=null;if(l&&this.agentControl)try{c=await this.compareCheckpointWithAgent(l.id)}catch(e){d=`Git comparison unavailable: ${e instanceof Error?e.message:String(e)}`}return{runId:e,nodeId:t,affectedNodeIds:n,affectedAttemptIds:s.map(({id:e})=>e),externalEffects:u,checkpointId:l?.id??null,gitComparison:c,warning:[u.length?"External Jira, GitHub, build, deployment, and notification effects will not be undone.":null,d].filter(Boolean).join(" ")||null}}async replay(e,t,r={}){let i=await this.prepareReplay(e,t);if(r.restore){if(!i.checkpointId)throw Error("No restorable Git checkpoint is available for this step");this.checkpointRestorer?await this.checkpointRestorer(i.checkpointId,{stash:!!r.stash}):await this.restoreCheckpointWithAgent(i.checkpointId,{stash:!!r.stash})}let a=await (0,tX.getPrismaClient)(),n=await a.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:!0}});if(!n)throw Error("Workflow run not found");let s=(0,ik.parseWorkflowDefinition)(sV(n.version.definitionJson)),o=n.attempts.filter(e=>e.generation===n.generation&&e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0];if(!o)throw Error("Selected step has no execution history");let l=o.inputJson?sQ(sV(o.inputJson),"Step input snapshot"):(0,n$.workflowSessionData)(n.sessionDataJson),u=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 d=(0,n$.setSessionValue)(l,"workflow.replay",{generation:u,fromNodeId:t,replayedAt:new Date().toISOString()});return await a.$transaction(async t=>{await t.workflowStepAttempt.updateMany({where:{runId:e,generation:n.generation,nodeId:{in:i.affectedNodeIds},supersededAt:null},data:{supersededAt:new Date}}),await t.workflowStepAttempt.createMany({data:s.nodes.map(t=>{let r=i.affectedNodeIds.includes(t.id),a=c.get(t.id);return{id:(0,y.randomUUID)(),runId:e,nodeId:t.id,kind:t.kind,generation:u,iterationKey:"",attempt:0,status:r?"PENDING":a?.status==="SKIPPED"?"SKIPPED":"SUCCEEDED",phase:r?"REPLAY_PENDING":"REUSED_FROM_PRIOR_GENERATION",inputJson:r?null:a?.inputJson,outputJson:r?null:a?.outputJson,error:null,startedAt:r?null:a?.startedAt,finishedAt:r?null:new Date,requiredPathsJson:JSON.stringify(s1(t)),providedPathsJson:JSON.stringify(s2(t)),idempotencyKey:`${e}:${t.id}:${u}::0`,replayedFromId:a?.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:u,sessionDataJson:JSON.stringify(d),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:u,affectedNodeIds:i.affectedNodeIds}),s0(e),this.run(e)}async appendEvent(e,t,r,i,a=null){let n=await (0,tX.getPrismaClient)(),s=await n.$transaction(async n=>{let s=await n.workflowRunEvent.findFirst({where:{runId:e},orderBy:{sequence:"desc"},select:{sequence:!0}});return n.workflowRunEvent.create({data:{id:(0,y.randomUUID)(),runId:e,attemptId:t,sequence:(s?.sequence??-1)+1,type:r,message:i.slice(0,2e4),detailJson:a?JSON.stringify(a):null}})});return r6.agentEventBus.publish(sj(e),{workflowRunEventAdded:s}),s}subscribeWorkflows(){return r6.agentEventBus.iterate(sU)}subscribeRun(e){return r6.agentEventBus.iterate(sB(e))}subscribeRunEvents(e){return r6.agentEventBus.iterate(sj(e))}subscribeRunQuestions(e){return r6.agentEventBus.iterate(sL(e))}}let s6=globalThis;e.s(["getServerServices",0,function(){var e,t,r,i,y,b,v,k,S,E,I,x,A,_,C,R,T,D,N;let O,P,$,U,B,j,L,q,M,F,K,V,H,G,W,J,z,Z,Y,Q,X,ee,et,er,ei,ea,en,es,eo,el,eu,ec,ed,ep,eh,em,ef,eg,ey;return s6.serverServices??(O=new g.PrismaService,P=new t0.CredentialService,$=new sI,U=new a.AgentControlService,B=new ns(P),j=new nc,L=new ir(U),(q=new nD(U,B)).startRuntime(),M=new n.CcusageService(U),F=new s.BuildDataService(U),K=new aX.TelemetryService,V=new a6(U,void 0,P),H=new nv,G=new a8.PushNotificationsService(void 0,P,j),(W=new nk.RunsService(B,U,L)).startReaper(),J=new o.BuildsService(U,K,B,L),z=new aQ(U),Z=new l.CodebasesService(U,z),Y=new u.CodebaseToolsService(Z),Q=new m.JiraService(P,$),X=new f.IosDevicesService(void 0,P),ee=new d.GitHubPipelineStatusService,et=new c.GitHubActionsNotificationsService(P,B,j,!0,$,void 0,ee),er=new p.GitHubService(!0,P,j,()=>et.configurationChanged(),ee),ei=new h.CacheServerService(P),ea=new r8.WorktreesService(U,Q,er,z,$,ee),en=new nP(M,L,j),es=new nG,eo=new as(Y,J,{codebases:Z,telemetry:K,pushNotifications:G,agents:U,diskSpace:L,worktrees:ea,runs:W,commands:q,jira:Q,github:er,buildData:F,cacheServer:ei,ccusage:M,credentials:P,iosDevices:X,modelCosts:H,notifications:B,polling:j,signingAssets:V,skills:z,systemStatus:en,workflows:()=>eu,worktreeAutomations:()=>ec},P),W.setMcpPresetResolver((e,t)=>eo.resolveRunMcpPresets(e,t)),eu=new s4($,el=new s$,void 0,P,U,B,W,ea,q,Q),ec=new aU(ea,er,Q,eu,U,j),t=eu,r=e={agentControl:U,jira:Q,github:er,worktrees:ea,worktreeAutomations:ec,codebases:Z,builds:J,skills:z,runs:W,commands:q,notifications:B,pushNotifications:G,tools:eo,diskSpace:L,buildData:F,ccusage:M,iosDevices:X,modelCosts:H,signingAssets:V},t.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?{...n5(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"}}),t.registerWaitPoller("AGENT_JOBS",async e=>{let t=n5(JSON.parse(e),"Agent jobs wait"),i=Array.isArray(t.ids)?t.ids.map(e=>n9(e,"Agent job ID",500)):[];if(!i.length)return{pending:!1,result:{jobs:[]}};let a=await Promise.all(i.map(e=>r.agentControl.getJob(e)));if(a.some(e=>!e))return{pending:!1,error:"Agent job disappeared"};let n=a.filter(e=>!!e);if(n.some(e=>new Set(["QUEUED","RUNNING"]).has(e.status)))return{pending:!0,pollAfterSeconds:2};let s=n.map(e=>({id:e.id,status:e.status,error:e.error})),o=s.filter(({status:e})=>"SUCCEEDED"!==e);return{pending:!1,result:{jobs:s,sessionPatch:{signing:{jobs:s}}},error:o.length?o.map(({id:e,status:t,error:r})=>r?`${e}: ${r}`:`${e}: ${t.toLowerCase()}`).join("; "):null}}),t.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"}}),t.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"}}),t.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"}}),t.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"}}),t.registerWaitPoller("SIGNING_OPERATIONS",async e=>{let t=n5(JSON.parse(e),"Signing operations wait"),i=Array.isArray(t.ids)?t.ids.map(e=>n9(e,"Signing operation ID",500)):[];if(!i.length)return{pending:!1,result:{operations:[]}};let a=(await r.signingAssets.operations(200)).filter(({id:e})=>i.includes(e));if(a.length!==i.length)return{pending:!1,error:"Signing operation disappeared"};let n=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]);if(a.some(({status:e})=>!n.has(e)))return{pending:!0,pollAfterSeconds:2};let s=a.filter(({status:e})=>"SUCCEEDED"!==e);return{pending:!1,result:{operations:a,sessionPatch:{signing:{operations:a}}},error:s.length?s.map(({id:e,error:t,status:r})=>t?`${e}: ${t}`:`${e}: ${r.toLowerCase()}`).join("; "):null}}),t.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"}}),t.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 i=t.targetWorktreeId?await r.worktrees.workflowSessionDataForWorktree(t.targetWorktreeId,{includeMissing:!0}):{};return{pending:!1,result:{id:t.id,status:t.status,targetWorktreeId:t.targetWorktreeId,sessionPatch:i},error:"SUCCEEDED"===t.status?null:t.error||`Worktree move ${t.status.toLowerCase()}`}}),t.registerWaitPoller("WORKTREE_PUSH_READY",async e=>{let t=await (0,tX.getPrismaClient)(),i=await t.worktree.findUnique({where:{id:e}});if(!i)return{pending:!1,error:"Worktree disappeared"};if("READY"!==i.pushStatus)return{pending:!0,pollAfterSeconds:5};let a=await r.worktrees.workflowSessionDataForWorktree(i.id,{includeMissing:!0});return{pending:!1,result:{id:i.id,pushStatus:i.pushStatus,sessionPatch:a}}}),t.registerWaitPoller("WORKFLOW_RUN",async e=>{let r=await t.run(e);return r?new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(r.status)?{pending:!1,result:{id:r.id,status:r.status,sessionData:JSON.parse(r.sessionDataJson)},error:"SUCCEEDED"===r.status?null:r.error||`Sub-workflow ${r.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:3}:{pending:!1,error:"Sub-workflow disappeared"}}),t.registerWaitPoller("RUN_ANSWER_REVISION",async e=>{let t=n5(JSON.parse(e),"Answer revision wait"),i=n9(t.batchId,"Question batch ID",500),a=await r.runs.questionBatch(i);if(!a)return{pending:!1,error:"Question batch disappeared"};if(!a.revisionPreparedAt)return{pending:!0,pollAfterSeconds:2};let n=await r.runs.reviseAnswer(i,t.answers??{},!0===t.stash,!1!==t.rollback);return n?{pending:!1,result:{id:n.id,kind:n.kind,status:n.status,phase:n.phase,parentRunId:n.parentRunId,followUpMode:n.followUpMode}}:{pending:!1,error:"Answer revision failed"}}),t.registerWaitPoller("GITHUB_CHECKS",async e=>{let t=n5(JSON.parse(e),"GitHub checks wait"),i=await r.github.autoRetryRun(n9(t.repositoryId,"Repository ID"),n9(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(i.status)?{pending:!1,result:{runId:i.id,status:i.status,jobs:i.jobs,sessionPatch:{pipeline:{runId:i.id,status:i.status,conclusion:i.status,jobs:i.jobs}}},error:"SUCCESS"===i.status?null:`GitHub checks concluded ${i.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:10}}),t.registerWaitPoller("DISK_SPACE_REPORT",async e=>{let t=n5(JSON.parse(e),"Disk-space report wait"),i=n9(t.agentId,"Agent ID",500),a=await r.diskSpace.snapshot(i);if(!a.disk.enabled)return{pending:!1,error:"Disk-space monitoring was disabled while awaiting a report"};let n=a.disk.lastReportedAt,s="string"==typeof t.previousReportedAt?t.previousReportedAt:null;return(n9(t.requestedAt,"Requested timestamp",100),n&&(!s||Date.parse(n)>Date.parse(s)))?{pending:!1,result:{...a,sessionPatch:a}}:{pending:!0,pollAfterSeconds:2}}),i=el,y=e,i.register("JIRA_LOAD_TICKET",async e=>{let t=sp(await y.jira.ticket(sm(e),!0===e.node.config.force));return{output:t,sessionPatch:{ticket:t},links:[sn(String(t.key),String(t.title??t.key))]}}),i.register("JIRA_TRANSITION",async e=>{let t=sp(await y.jira.transitionTicket(sm(e),n9(e.node.config.transitionId,"Jira transition ID",200)));return{output:t,sessionPatch:{ticket:t},links:[sn(String(t.key),String(t.title??t.key))]}}),i.register("JIRA_COMMENT",async e=>{let t=sp(await y.jira.addComment(sm(e),{value:n9(e.node.config.content,"Jira comment",1e5),format:"JIRA_WIKI"===e.node.config.format?"JIRA_WIKI":"MARKDOWN"}));return{output:t,sessionPatch:{ticket:t},links:[sn(String(t.key),String(t.title??t.key))]}}),i.register("JIRA_ASSIGN",async e=>{let t=null===e.node.config.accountId?null:n9(e.node.config.accountId,"Jira account ID",500),r=sp(await y.jira.assignTicket(sm(e),t));return{output:r,sessionPatch:{ticket:r},links:[sn(String(r.key),String(r.title??r.key))]}}),i.register("JIRA_UPDATE_FIELDS",async e=>{let t=n5(e.node.config.fields??{},"Jira fields"),r=sp(await y.jira.updateTicket({issueKey:sm(e),...t}));return{output:r,sessionPatch:{ticket:r},links:[sn(String(r.key),String(r.title??r.key))]}}),i.register("JIRA_RESOLVE_BRANCH",async e=>{let t=await y.worktrees.previewTicketBranch({codebaseId:n9(e.node.config.codebaseId??(0,n$.getSessionValue)(e.sessionData,"codebase.id"),"Codebase ID",200),worktreeId:"string"==typeof(0,n$.getSessionValue)(e.sessionData,"worktree.id")?String((0,n$.getSessionValue)(e.sessionData,"worktree.id")):null,ticketKey:sm(e)});return{output:t,sessionPatch:{worktree:{branch:t.branchName},ticket:{key:t.ticketKey,title:t.ticketTitle,type:t.ticketType}},links:[sn(t.ticketKey,t.ticketTitle)]}}),b=el,v=e,b.register("GITHUB_LOAD_PR",async e=>{let t=sd(e),r=await v.github.pullRequest(t.owner,t.name,sg(e),"WORKFLOW_AUTOMATION");if(!r)throw Error("Pull request was not found");let i=sh(r);return{output:i,sessionPatch:{pr:i},links:[sa("PULL_REQUEST",nW(t.owner,t.name,r.number),r.title,r.url)]}}),b.register("GITHUB_MERGE_PR",async e=>{let t=sd(e),r=sg(e),i=await v.github.pullRequestMergeOptions(t.owner,t.name,r,"WORKFLOW_AUTOMATION");if(!i.canMerge)throw Error(i.blockedReason||"Pull request cannot be merged");let a=await v.github.mergePullRequest({...t,number:r,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:i.defaultCommitHeadline,commitBody:"string"==typeof e.node.config.commitBody?e.node.config.commitBody:i.defaultCommitBody,authorEmail:"string"==typeof e.node.config.authorEmail?e.node.config.authorEmail:null},"WORKFLOW_AUTOMATION");return{output:a,sessionPatch:{pr:{state:a.state}},links:[ss(e)]}}),b.register("GITHUB_COLLECT_REVIEW_THREADS",async e=>{let t=sd(e),r=await v.github.pullRequest(t.owner,t.name,sg(e),"WORKFLOW_AUTOMATION");if(!r)throw Error("Pull request was not found");let i=r.reviewThreads.filter(({isResolved:e})=>!e);return{output:i,sessionPatch:{pr:{unresolvedThreads:i}},links:[ss(e,r.title,r.url)]}}),b.register("GITHUB_REPLY_REVIEW_THREAD",async e=>{let t=await v.github.replyToReviewThread(n9(e.node.config.threadId,"Review thread ID",500),n9(e.node.config.body,"Review reply",1e5),"WORKFLOW_AUTOMATION"),r=so(e);return{output:t,links:r?[r]:void 0}}),b.register("GITHUB_SET_REVIEW_THREAD_RESOLVED",async e=>{let t=await v.github.setReviewThreadResolved(n9(e.node.config.threadId,"Review thread ID",500),!1!==e.node.config.resolved,"WORKFLOW_AUTOMATION"),r=so(e);return{output:t,links:r?[r]:void 0}}),b.register("GITHUB_CREATE_PR",async e=>{let t=sd(e),r=await v.github.createPullRequest({...t,baseRefName:n9(e.node.config.baseRefName??(0,n$.getSessionValue)(e.sessionData,"worktree.baseBranch"),"Base branch",500),headRefName:n9(e.node.config.headRefName??(0,n$.getSessionValue)(e.sessionData,"worktree.branch"),"Head branch",500),title:n9(e.node.config.title??(0,n$.getSessionValue)(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 v.worktrees.attachPullRequestForBranch(`github.com/${t.owner}/${t.name}`,r.headRefName,r);let i=sh(r);return{output:i,sessionPatch:{pr:i},links:[sa("PULL_REQUEST",nW(t.owner,t.name,r.number),r.title,r.url)]}}),b.register("GITHUB_SET_PR_LABELS",async e=>{let t=sd(e),r=Array.isArray(e.node.config.labels)?e.node.config.labels.map(String):[],i=await v.github.setPullRequestLabels({...t,number:sg(e),labels:r});return{output:i.labels,sessionPatch:{pr:{labels:i.labels}},links:[ss(e)]}}),b.register("GITHUB_RETRY_PIPELINE",async e=>{let t=await v.github.retryPipeline(n9(e.node.config.repositoryId??(0,n$.getSessionValue)(e.sessionData,"pr.repositoryGithubId"),"GitHub repository ID",500),n9(e.node.config.checkSuiteId??(0,n$.getSessionValue)(e.sessionData,"pipeline.checkSuiteId"),"Check suite ID",500),"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),r=sl(e);return{output:t,sessionPatch:{pipeline:{status:t.status}},links:r?[r]:void 0}}),b.register("GITHUB_RETRY_JOB",async e=>{let t=await v.github.retryWorkflowJob(n9(e.node.config.repositoryId,"GitHub repository ID",500),n9(e.node.config.checkSuiteId,"Check suite ID",500),n9(e.node.config.jobId,"Workflow job ID",500),"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),r=sl(e);return{output:t,links:r?[r]:void 0}}),b.register("GITHUB_CANCEL_WORKFLOW_RUN",async e=>{let t=await v.github.cancelActionsWorkflowRun(n9(e.node.config.codebaseRepositoryId??(0,n$.getSessionValue)(e.sessionData,"repo.id"),"Codebase repository ID",500),n9(e.node.config.workflowRunId??(0,n$.getSessionValue)(e.sessionData,"pipeline.runId"),"Workflow run ID",500),!0===e.node.config.force,"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),r=sl(e);return{output:t,sessionPatch:{pipeline:{status:"CANCELLED"}},links:r?[r]:void 0}}),b.register("GITHUB_SAVE_AUTO_RETRY",async e=>({output:await v.github.saveAutoRetryRule(n5(e.node.config.input,"Auto-retry rule"))})),b.register("GITHUB_WAIT_CHECKS",async e=>{let t=n9(e.node.config.repositoryId??(0,n$.getSessionValue)(e.sessionData,"repo.id"),"Repository ID",500),r=n9(e.node.config.workflowRunId??(0,n$.getSessionValue)(e.sessionData,"pipeline.runId"),"Workflow run ID",500),i=sl(e);return{links:i?[i]:void 0,wait:{kind:"GITHUB_CHECKS",externalKey:JSON.stringify({repositoryId:t,workflowRunId:r}),resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}}}),k=el,S=e,k.register("WORKTREE_CREATE",async e=>{let t=sb(e),r=await S.worktrees.createWorktree({codebaseId:sw(e),selection:t,requestId:st(e,"create")});return si(e,r,{worktree:{branch:t.branchName,baseBranch:t.baseBranch}})}),k.register("WORKTREE_CHANGE_BRANCH",async e=>{let t=sy(e),r=sb(e),i=await S.worktrees.changeWorktreeBranch({worktreeId:t,selection:r,requestId:st(e,"change-branch"),stashOnFailure:!0===e.node.config.stashOnFailure});return si(e,i,{worktree:{branch:r.branchName,baseBranch:r.baseBranch}},[sa("WORKTREE",t,"Worktree")])}),k.register("WORKTREE_REFRESH_PULL_REQUEST",async e=>{let t=sy(e),r=(await S.worktrees.refreshPullRequest(t)).pullRequest,i=r?sh(r):null,a=[sa("WORKTREE",t,"Worktree")];if(r){let[e,t]=r.repositoryNameWithOwner.split("/");e&&t&&a.push(sa("PULL_REQUEST",nW(e,t,r.number),r.title,r.url))}return{output:{found:!!r,pullRequest:r},sessionPatch:{pr:i},links:a}}),k.register("WORKTREE_OPERATION",async e=>{let t=String(e.node.config.operation??"SYNC").toUpperCase();if("OPEN_EDITOR"===t||!aR.WORKTREE_OPERATIONS.includes(t))throw Error("Worktree operation is invalid for workflow execution");let r=sy(e),i=await S.worktrees.runOperation(r,t,st(e,t.toLowerCase()));return si(e,i,void 0,[sa("WORKTREE",r,"Worktree")])}),k.register("WORKTREE_SET_AUTO_SYNC",async e=>{let t=sy(e),r=String(e.node.config.action??"ENABLE").toUpperCase(),i="CANCEL"===r?{cancelled:await S.worktreeAutomations.cancelAutoSync(t)}:"RETRY"===r?await S.worktreeAutomations.retryAutoSync(t):"ENABLE"===r?await S.worktreeAutomations.configureAutoSync({worktreeId:t,conflictWorkflowId:n7(e.node.config.conflictWorkflowId,500),conflictWorkflowChoice:n7(e.node.config.conflictWorkflowChoice,500)}):null;if(!i)throw Error("Unknown Auto Sync action");return{output:i,sessionPatch:{worktree:{autoSync:i}},links:[sa("WORKTREE",t,"Worktree")]}}),k.register("WORKTREE_SET_AUTO_MERGE",async e=>{let t,r=sy(e),i=String(e.node.config.action??"ENABLE").toUpperCase();if("CANCEL"===i)t={cancelled:await S.worktreeAutomations.cancelAutoMerge(r)};else if("RETRY"===i)t=await S.worktreeAutomations.retryAutoMerge(r);else if("ENABLE"===i){let i=Number(e.node.config.pullRequestNumber??(0,n$.getSessionValue)(e.sessionData,"pr.number"));if(!Number.isInteger(i)||i<1)throw Error("Pull request number must be a positive integer");let a=String(e.node.config.method??"SQUASH").toUpperCase();if(!["MERGE","REBASE","SQUASH"].includes(a))throw Error("Merge method is invalid");t=await S.worktreeAutomations.configureAutoMerge({worktreeId:r,repositoryNameWithOwner:n9(e.node.config.repositoryNameWithOwner??(0,n$.getSessionValue)(e.sessionData,"repo.nameWithOwner"),"Repository",500),pullRequestNumber:i,method:a,commitHeadline:n9(e.node.config.commitHeadline??(0,n$.getSessionValue)(e.sessionData,"pr.title"),"Commit headline",1e3),commitBody:String(e.node.config.commitBody??""),authorEmail:n7(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:[sa("WORKTREE",r,"Worktree")]}}),k.register("WORKTREE_DELETE",async e=>{let t=await S.worktrees.deleteWorktree({worktreeId:sy(e),deleteRemoteBranch:!0===e.node.config.deleteRemoteBranch,requestId:st(e,"delete")});return si(e,t)}),k.register("WORKTREE_MOVE",async e=>{let t=await S.worktrees.moveWorktree({sourceWorktreeId:sy(e),targetCodebaseId:n9(e.node.config.targetCodebaseId,"Target codebase ID",500),targetWorktreeId:n7(e.node.config.targetWorktreeId,500),deleteSource:!0===e.node.config.deleteSource,requestId:st(e,"move")}),r=t.targetWorktreeId??(!0===e.node.config.deleteSource?null:sy(e));return{output:t,links:[...r?[sa("WORKTREE",r,"Worktree")]:[],{kind:"WORKTREE_MOVE",resourceId:t.id,label:"Worktree move"}],wait:{kind:"WORKTREE_MOVE",externalKey:t.id,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}}}),k.register("WORKTREE_INSPECT",async e=>{let t=sy(e),r=await S.worktrees.inspect(t,st(e,"inspect"));return{output:r,sessionPatch:{worktree:{commits:r.commits,changes:r.changes,branchChanges:r.branchChanges}},links:[sa("WORKTREE",t,"Worktree")]}}),k.register("WORKTREE_INSPECT_GIT",async e=>{let t=sy(e),r=await S.worktrees.inspectGitState(t,st(e,"inspect-git"));return{output:r,sessionPatch:{worktree:{...r}},links:[sa("WORKTREE",t,"Worktree")]}}),k.register("WORKTREE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!aR.WORKTREE_GIT_OPERATIONS.includes(t))throw Error("Worktree Git operation is invalid");let r=sy(e),i=await S.worktrees.runGitOperation({worktreeId:r,operation:t,branch:n7(e.node.config.branch,500),stashOid:n7(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:st(e,t.toLowerCase())});return si(e,i,void 0,[sa("WORKTREE",r,"Worktree")])}),k.register("WORKTREE_WAIT_PUSH_READY",async e=>{let t=sy(e);return{links:[sa("WORKTREE",t,"Worktree")],wait:{kind:"WORKTREE_PUSH_READY",externalKey:t,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}}}),E=el,I=e,E.register("CODEBASE_FETCH_REFRESH",async e=>{let t=sw(e),r="REFRESH"===e.node.config.operation?rm.CODEBASE_REFRESH_JOB_KIND:rm.CODEBASE_FETCH_JOB_KIND,i=await I.codebases.runOperation(r,[t],st(e,r)),a=i.jobs[0];if(!a)throw Error(i.skipped[0]?.reason??"Codebase operation was skipped");return si(e,a,void 0,[sa("CODEBASE",t,"Codebase")])}),E.register("CODEBASE_INSPECT_GIT",async e=>{let t=sw(e),r=await I.codebases.inspectGitState(t,st(e,"inspect-git"));return{output:r,sessionPatch:{codebase:{...r}},links:[sa("CODEBASE",t,"Codebase")]}}),E.register("CODEBASE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!rm.CODEBASE_GIT_OPERATIONS.includes(t))throw Error("Codebase Git operation is invalid");let r=sw(e),i=await I.codebases.runGitOperation({codebaseId:r,operation:t,branch:n7(e.node.config.branch,500),stashOid:n7(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:st(e,t.toLowerCase())});return si(e,i,void 0,[sa("CODEBASE",r,"Codebase")])}),x=el,A=e,x.register("BUILD_START",async e=>{let t=String(e.node.config.action??"BUILD").toUpperCase();if(!w.BUILD_ACTIONS.includes(t))throw Error("Build action is invalid");let r=await A.builds.startBuild({worktreeId:sy(e),configurationId:n9(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:st(e,"build"),telemetryRequestOrigin:"workflow"});return{output:r,sessionPatch:{build:{id:r.id,status:r.status,action:r.action}},links:[{kind:"BUILD",resourceId:r.id,label:`${r.action} build`,url:`/builds/${r.id}`}],wait:{kind:"BUILD",externalKey:r.id,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}}}),x.register("BUILD_READ_TEST_RESULTS",async e=>{let t,r=sv(e),i=(await A.builds.reportsForBuild(r)).filter(({kind:e,status:t})=>"TEST_RESULTS"===e&&"READY"===t).at(-1);if(!i)throw Error("Test results are not ready");let a=n5(JSON.parse(i.summaryJson),"Test summary"),n=n5(JSON.parse(i.dataJson),"Test results");return{output:{summary:a,tests:n.tests??[]},sessionPatch:{build:{testSummary:a,tests:n.tests??[]}},links:[sa("BUILD",r,"Build",t)]}}),x.register("BUILD_READ_COVERAGE",async e=>{let t=sv(e),r=(await A.builds.reportsForBuild(t)).filter(({kind:e,status:t})=>"CODE_COVERAGE"===e&&"READY"===t).at(-1);if(!r)throw Error("Coverage results are not ready");let i=n5(JSON.parse(r.summaryJson),"Coverage summary"),a=n5(JSON.parse(r.dataJson),"Coverage results");return{output:{summary:i,files:a.files??[],changedFiles:a.changedFiles??[]},sessionPatch:{build:{coverageSummary:i,coverageFiles:a.files??[],changedCoverageFiles:a.changedFiles??[]}},links:[sa("BUILD",t,"Build",`/builds/${t}/coverage`)]}}),x.register("BUILD_EXPORT",async e=>{let t,r,i=sv(e),a=await A.builds.exportArchive({buildId:i,requestId:st(e,"export"),settings:n5(e.node.config.settings,"Export settings")});return a.jobId?si(e,{id:a.jobId,timeoutSeconds:3600},{build:{exportId:a.id}},[sa("BUILD",i,"Build",t)]):{output:a,links:[sa("BUILD",i,"Build",r)]}}),x.register("BUILD_DEPLOY",async e=>{let t,r,i=sv(e),a=await A.builds.runBuild({buildId:i,destinations:Array.isArray(e.node.config.destinations)?e.node.config.destinations:[],requestId:st(e,"deploy")}),n=a.find(({jobId:e})=>!!e)?.jobId;return n?si(e,{id:n,timeoutSeconds:3600},void 0,[sa("BUILD",i,"Build",t)]):{output:a,links:[sa("BUILD",i,"Build",r)]}}),x.register("BUILD_CANCEL",async e=>{let t,r=sv(e),i=await A.builds.cancelBuild(r);return{output:i,sessionPatch:{build:{id:i?.id,status:i?.status}},links:[sa("BUILD",r,"Build",t)]}}),_=el,C=e,ep=async e=>{let t=await C.diskSpace.snapshot(e);return{output:t,sessionPatch:t,links:[sa("AGENT",e,t.agent.name,`/agents/${encodeURIComponent(e)}`)]}},_.register("DISK_SPACE_LOAD",async e=>ep(sk(e))),_.register("DISK_SPACE_REFRESH",async e=>{let t=sk(e),r=await C.diskSpace.requestRefresh(t);return{output:r,links:[sa("AGENT",t,"Agent",`/agents/${encodeURIComponent(t)}`)],wait:{kind:"DISK_SPACE_REPORT",externalKey:JSON.stringify(r),resumeAfter:n8(e.node.config,2),timeoutAt:n4(e.node.config,180)}}}),_.register("DISK_SPACE_UPDATE_THRESHOLDS",async e=>{let t=await C.diskSpace.updateSettings({normalThresholdGiB:Number(e.node.config.normalThresholdGiB),pressureThresholdGiB:Number(e.node.config.pressureThresholdGiB)});return{output:t,sessionPatch:{disk:t}}}),_.register("DISK_SPACE_SET_MONITORING",async e=>{let t=sk(e);return await C.diskSpace.setMonitoring(t,!0===e.node.config.enabled),ep(t)}),_.register("DISK_SPACE_SET_PRESSURE_MODE",async e=>{let t=sk(e);return await C.diskSpace.setManualPressureMode(t,!0===e.node.config.enabled),ep(t)}),function(e,t){for(let[r,i]of(e.register("RUN_CREATE_PLAN",async e=>{let r=await t.runs.create(sE(e,"PLAN"));if(!r)throw Error("Plan could not be created");return sr(e,r,!0)}),e.register("RUN_CREATE_SESSION",async e=>{let r=await t.runs.create(sE(e,"SESSION"));if(!r)throw Error("Session could not be created");return sr(e,r,!0)}),e.register("RUN_PLAY_PLAN",async e=>{let r=await t.runs.playPlan(sS(e),Array.isArray(e.node.config.mcpPresetIds)?e.node.config.mcpPresetIds.map(String):[]);if(!r)throw Error("Plan could not be played");return sr(e,r,!0)}),e.register("RUN_FOLLOW_UP",async e=>{let r=sE(e,"SESSION"),i=await t.runs.followUp(sS(e),{...r,followUpMode:n9(e.node.config.followUpMode??"RESUME","Follow-up mode",50),contextMode:n7(e.node.config.contextMode,50)});if(!i)throw Error("Follow-up could not be created");return sr(e,i,!0)}),e.register("RUN_STEER",async e=>{let r=await t.runs.steer(sS(e),n9(e.node.config.prompt,"Steering prompt",2e5),Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[]);if(!r)throw Error("Run could not be steered");return sr(e,r)}),e.register("RUN_ANSWER",async e=>{let r=await t.runs.answerQuestion(n9(e.node.config.batchId,"Question batch ID",500),e.node.config.answers??{});if(!r)throw Error("Question could not be answered");return sr(e,r)}),[["RUN_PAUSE","PAUSE"],["RUN_CONTINUE","CONTINUE"],["RUN_CANCEL","CANCEL"]]))e.register(r,async e=>{let r=await t.runs.lifecycle(sS(e),i);if(!r)throw Error("Run lifecycle operation failed");return sr(e,r)});e.register("RUN_REVISE_ANSWER",async e=>{let r=n9(e.node.config.batchId,"Question batch ID",500),i=await t.runs.questionBatch(r);if(!i)throw Error("Question batch was not found");if(i.revisionPreparedAt){let i=await t.runs.reviseAnswer(r,e.node.config.answers??{},!0===e.node.config.stash,!1!==e.node.config.rollback);if(!i)throw Error("Answer revision failed");return sr(e,i)}await t.runs.prepareAnswerRevision(r);let a=su(e);return{links:a?[a]:void 0,wait:{kind:"RUN_ANSWER_REVISION",externalKey:JSON.stringify({batchId:r,answers:e.node.config.answers??{},stash:!0===e.node.config.stash,rollback:!1!==e.node.config.rollback}),resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}}}),e.register("RUN_READ_RESULT",async e=>{let r=await t.runs.get(sS(e));if(!r)throw Error("Run was not found");let[i,a,n,s]=await Promise.all([t.runs.events({runId:r.id,first:500}),t.runs.questions({runId:r.id,first:200}),t.runs.usage(r.id),t.runs.linkedItems(r.id)]);return sr(e,{...r,events:i,questions:a,usage:n,links:s})}),e.register("RUN_CAPTURE_CHECKPOINT",async e=>{let t=await (0,tX.getPrismaClient)(),r=await t.runCheckpoint.findFirst({where:{runId:sS(e)},orderBy:{createdAt:"desc"}});if(!r)throw Error("Run has no captured checkpoint");let i=su(e);return{output:r,sessionPatch:{steps:{[e.node.id]:{snapshotId:r.id}}},links:[...i?[i]:[],{kind:"CHECKPOINT",resourceId:r.id,label:`${r.kind} checkpoint`}]}}),e.register("RUN_ARCHIVE_DELETE",async e=>{let r=sS(e),i=!0===e.node.config.delete,a=i?await t.runs.deleteRuns([r]):await t.runs.archive([r],!1!==e.node.config.archived),n=i?null:su(e);return{output:{id:r,affected:a},links:n?[n]:void 0}})}(el,e),R=el,T=e,R.register("SAVED_COMMAND",async e=>{let t=n9(e.node.config.commandId,"Saved command",500),r=await T.commands.getDefinition(t);if(!r||r.archivedAt)throw Error("Saved command is unavailable");let i="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT";if("WAIT_FOR_EXIT"===i&&"ALWAYS"===r.restartPolicy)throw Error("Always-restart commands require fire and forget");let a=String(e.node.config.targetMode??"CONTEXT"),n=null,s=null,o=new Set(["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME"]).has(r.targetKind);if("FIXED_AGENT"===a)n=n9(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===a)s=n9(e.node.config.worktreeId,"Fixed worktree",500);else if(o){let t=(0,n$.getSessionValue)(e.sessionData,"agent.id")??(0,n$.getSessionValue)(e.sessionData,"codebase.agentId");if("string"==typeof t&&(n=t),!n){let t=(0,n$.getSessionValue)(e.sessionData,"worktree.id");if("string"==typeof t){let e=await (0,tX.getPrismaClient)(),r=await e.worktree.findUnique({where:{id:t},select:{codebase:{select:{agentId:!0}}}});n=r?.codebase.agentId??null}}}else{let t=(0,n$.getSessionValue)(e.sessionData,"worktree.id");"string"==typeof t&&(s=t)}let l=await T.commands.startRun({commandId:t,agentId:n,worktreeId:s,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!l)throw Error("Command run could not be created");return{output:{id:l.id,displayNumber:l.displayNumber,status:l.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:l.id,displayNumber:l.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:l.id,label:`Command #${l.displayNumber}`,url:`/commands/runs/${l.id}`}],wait:"WAIT_FOR_EXIT"===i?{kind:"COMMAND_RUN",externalKey:l.id,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}:void 0}}),R.register("CUSTOM_COMMAND",async e=>{let t=n9(e.node.config.script,"Custom command",1e6),r="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT",i=String(e.node.config.targetMode??"CONTEXT"),a=null,n=null;if("FIXED_AGENT"===i)a=n9(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===i)n=n9(e.node.config.worktreeId,"Fixed worktree",500);else{let t=(0,n$.getSessionValue)(e.sessionData,"worktree.id");if("string"==typeof t)n=t;else{let t=(0,n$.getSessionValue)(e.sessionData,"agent.id")??(0,n$.getSessionValue)(e.sessionData,"codebase.agentId");"string"==typeof t&&(a=t)}}if(!a&&!n)throw Error("Custom command context has no agent or worktree target");let s=await T.commands.startCustomRun({script:t,agentId:a,worktreeId:n,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!s)throw Error("Custom command run could not be created");return{output:{id:s.id,displayNumber:s.displayNumber,status:s.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:s.id,displayNumber:s.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:s.id,label:`Command #${s.displayNumber}`,url:`/commands/runs/${s.id}`}],wait:"WAIT_FOR_EXIT"===r?{kind:"COMMAND_RUN",externalKey:s.id,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config)}:void 0}}),R.register("SKILL_APPLY",async e=>{let t=await T.skills.prepareSync(e.node.config.groupId?"GROUP":"ALL",n7(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:n8(e.node.config),timeoutAt:n4(e.node.config)}}}),R.register("NOTIFICATION_SEND",async e=>{let t=await (0,tX.getPrismaClient)(),r=await t.$transaction(t=>T.notifications.recordInTransaction(t,{dedupeKey:`${e.run.id}:${e.node.id}:${e.attempt.generation}`,typeKey:"WORKFLOW_MESSAGE",title:n9(e.node.config.title,"Notification title",240),body:n9(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(0,n$.getSessionValue)(e.sessionData,"worktree.id")?String((0,n$.getSessionValue)(e.sessionData,"worktree.id")):null}));return T.notifications.created(r),{output:r}}),R.register("IOS_PUSH_SEND",async e=>({output:await T.pushNotifications.send({requestId:st(e,"ios-push"),editor:e.node.config.editor,targetMode:n9(e.node.config.targetMode??"ALL","Push target mode",50),registrationIds:Array.isArray(e.node.config.registrationIds)?e.node.config.registrationIds.map(String):[],channelId:n7(e.node.config.channelId,500),directToken:n7(e.node.config.directToken,2e4),directTokenEncoding:"BASE64"===e.node.config.directTokenEncoding?"BASE64":"HEX",directEnvironment:"PRODUCTION"===e.node.config.directEnvironment?"PRODUCTION":"SANDBOX"})})),R.register("MCP_CALL",async e=>{let t=await T.tools.callTool({groupId:n9(e.node.config.groupId,"MCP tool group",500),name:n9(e.node.config.name,"MCP tool name",500),arguments:n5(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}}}}}),D=el,N=e,eh=async(e,t,r,i,a={})=>{let n=n5(await N.tools.callTool({groupId:t,name:r,arguments:i},{caller:`workflow:${e.run.id}`,correlationId:e.attempt.id,source:"WORKFLOW"}),`${r} tool result`),s=n5(n.structuredContent,`${r} structured content`),o=a.sessionPatch?await a.sessionPatch(s):{};return{output:s,sessionPatch:{steps:{[e.node.id]:{output:s}},...o},wait:a.wait?.(s)}},em=(e,t,r,i)=>({kind:t,externalKey:r,resumeAfter:n8(e.node.config),timeoutAt:n4(e.node.config,i)}),D.register("COMMAND_RERUN",async e=>{let t=se(e,"commandRunId","command.id","Command run ID");return eh(e,"builtin:commands","rerun_command",{id:t},{sessionPatch:e=>({command:n5(e.run,"Command run output")}),wait:t=>em(e,"COMMAND_RUN",n9(n5(t.run,"Command run output").id,"Command run ID",500))})}),D.register("COMMAND_TERMINATE",async e=>{let t=se(e,"commandRunId","command.id","Command run ID");return eh(e,"builtin:commands","terminate_command_run",{id:t},{sessionPatch:e=>({command:n5(e.run,"Command run output")})})}),D.register("COMMAND_READ_OUTPUT",async e=>{let t=se(e,"commandRunId","command.id","Command run ID");return eh(e,"builtin:commands","get_command_run_output",{runId:t,first:Number(e.node.config.first??1e3)},{sessionPatch:e=>({command:{id:t,output:e.chunks}})})}),D.register("WORKTREE_INSPECT_DIFF",async e=>{let t=se(e,"worktreeId","worktree.id","Worktree ID");return eh(e,"builtin:worktrees","inspect_worktree_diff",{worktreeId:t,scope:n9(e.node.config.scope,"Diff scope",100),path:e.node.config.path,previousPath:e.node.config.previousPath,commitSha:e.node.config.commitSha,requestId:st(e,"diff")},{sessionPatch:e=>({worktree:{id:t,diff:e.inspection}})})}),D.register("WORKTREE_UPDATE_METADATA",async e=>{let t=se(e,"worktreeId","worktree.id","Worktree ID");return eh(e,"builtin:worktrees","update_worktree_metadata",{id:t,baseBranch:e.node.config.baseBranch,highlightColor:e.node.config.highlightColor},{sessionPatch:async e=>(0,n$.mergeSessionData)(await N.worktrees.workflowSessionDataForWorktree(t,{includeMissing:!0}),{worktree:n5(e.worktree,"Worktree output")})})}),D.register("WORKTREE_MOVE_CONTROL",e=>eh(e,"builtin:worktrees","CANCEL"===e.node.config.operation?"cancel_worktree_move":"retry_worktree_move_with_stash",{id:n9(e.node.config.moveId,"Move ID",500)},{sessionPatch:async e=>{let t=n5(e.move,"Worktree move output"),r="string"==typeof t.targetWorktreeId&&t.targetWorktreeId||"string"==typeof t.sourceWorktreeId&&t.sourceWorktreeId||null,i=r?await N.worktrees.workflowSessionDataForWorktree(r,{includeMissing:!0}):{};return(0,n$.mergeSessionData)(i,{worktree:{move:t}})}})),D.register("BUILD_REBUILD",async e=>{let t=se(e,"buildId","build.id","Build ID");return eh(e,"builtin:builds","rebuild_build",{buildId:t,requestId:st(e,"rebuild")},{sessionPatch:e=>({build:n5(e.build,"Build output")}),wait:t=>em(e,"BUILD",n9(n5(t.build,"Build output").id,"Build ID",500))})}),D.register("BUILD_GENERATE_REPORT",async e=>{let t=se(e,"buildId","build.id","Build ID");return eh(e,"builtin:builds","generate_build_report",{buildId:t,kind:"TEST_RESULTS"===e.node.config.reportKind?"TEST_RESULTS":"CODE_COVERAGE",requestId:st(e,"report")},{sessionPatch:e=>({build:{id:t,report:e.report}})})}),D.register("BUILD_DELETE",e=>{let t=Array.isArray(e.node.config.buildIds)?e.node.config.buildIds.map(String):[se(e,"buildId","build.id","Build ID")];return eh(e,"builtin:builds","delete_builds",{ids:t},{sessionPatch:e=>({build:{ids:t,deletedCount:e.count}})})}),D.register("SKILL_PREPARE_SYNC",e=>eh(e,"builtin:skills","prepare_skill_sync",{kind:String(e.node.config.syncKind??"ALL"),groupId:e.node.config.groupId},{sessionPatch:e=>({skillSync:n5(e.run,"Skill sync output")})})),D.register("SKILL_RESOLVE_SYNC",e=>eh(e,"builtin:skills","resolve_skill_sync_conflict",{input:{runId:se(e,"runId","skillSync.id","Skill sync run ID"),itemId:n9(e.node.config.itemId,"Conflict item ID",500),resolution:String(e.node.config.resolution??"SKIP")}},{sessionPatch:e=>({skillSync:n5(e.run,"Skill sync output")})})),D.register("SKILL_SKIP_SYNC",e=>eh(e,"builtin:skills","skip_skill_sync",{runId:se(e,"runId","skillSync.id","Skill sync run ID")},{sessionPatch:e=>({skillSync:n5(e.run,"Skill sync output")})})),D.register("BUILD_DATA_REFRESH",e=>eh(e,"builtin:build-data","refresh_build_data",{requestId:st(e,"build-data")},{sessionPatch:e=>({buildData:n5(e.collection,"Build-data collection output")}),wait:t=>{let r=n5(t.collection,"Build-data collection output");return"COMPLETED"===r.status?void 0:em(e,"BUILD_DATA_COLLECTION",n9(r.id,"Build-data collection ID",500),90)}})),D.register("BUILD_DATA_DELETE",e=>eh(e,"builtin:build-data","delete_build_data_entries",{collectionId:se(e,"collectionId","buildData.id","Build-data collection ID"),entryIds:Array.isArray(e.node.config.entryIds)?e.node.config.entryIds.map(String):[],requestId:st(e,"build-data-delete"),overrideProtection:!0===e.node.config.overrideProtection},{sessionPatch:e=>({buildData:n5(e.collection,"Build-data collection output")})})),D.register("BUILD_DATA_SET_LOCK",e=>{let t=se(e,"collectionId","buildData.id","Build-data collection ID");return eh(e,"builtin:build-data","set_build_data_lock",{collectionId:t,entryId:n9(e.node.config.entryId,"Entry ID",500),locked:!0===e.node.config.locked},{sessionPatch:e=>({buildData:{id:t,entry:e.entry}})})}),D.register("SIGNING_REFRESH",e=>eh(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 r=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 r.length?em(e,"AGENT_JOBS",JSON.stringify({ids:r}),90):void 0}})),D.register("SIGNING_SYNC_PROFILE",e=>eh(e,"builtin:signing-assets","sync_signing_profile",{uuid:se(e,"uuid","signingProfile.id","Profile UUID"),sourceAgentId:n9(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=>em(e,"SIGNING_OPERATIONS",JSON.stringify({ids:[n9(n5(t.operation,"Signing operation output").id,"Signing operation ID",500)]}),300)})),D.register("SIGNING_DELETE_EXPIRED",e=>eh(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 r=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 r.length?em(e,"SIGNING_OPERATIONS",JSON.stringify({ids:r}),300):void 0}})),D.register("IOS_DEVICE_REGISTER",e=>eh(e,"builtin:ios-devices","register_ios_device",{id:se(e,"deviceId","device.id","Device ID")},{sessionPatch:e=>({device:n5(e.device,"iOS device output")})})),D.register("IOS_DEVICE_REJECT",e=>eh(e,"builtin:ios-devices","reject_ios_device",{id:se(e,"deviceId","device.id","Device ID")},{sessionPatch:e=>({device:n5(e.device,"iOS device output")})})),D.register("AGENT_RECONCILE",async e=>{let t=Array.isArray(e.node.config.agentIds)?e.node.config.agentIds.map(String):(await N.agentControl.listAgents()).map(({id:e})=>e),r=await N.agentControl.requestCodebaseReconcile(t);return{output:{requested:r},sessionPatch:{agent:{requested:r}}}}),D.register("AGENT_UPDATE_CADENCE",async e=>{let t=await N.agentControl.updateCadenceSettings(se(e,"agentId","agent.id","Agent ID"),n5(e.node.config.settings,"Cadence settings"));return{output:t,sessionPatch:{agent:n5(t,"Agent output")}}}),D.register("CCUSAGE_COLLECT",async e=>{let t=await N.ccusage.collect(st(e,"ccusage"));return{output:t,sessionPatch:{usage:t}}}),D.register("MODEL_COST_REFRESH",async()=>{let e=await N.modelCosts.refresh();return{output:e,sessionPatch:{modelCosts:e}}}),ef=async(e,t,r)=>{let i=await eh(e,"builtin:github",t,r),a=n5(i.output,"GitHub tool output"),n=sh(n5(a.pullRequest,"Pull request output"));return{...i,sessionPatch:{...i.sessionPatch,pr:n}}},eg=e=>({owner:n9(e.node.config.owner??(0,n$.getSessionValue)(e.sessionData,"repo.owner"),"Repository owner",200),name:n9(e.node.config.name??(0,n$.getSessionValue)(e.sessionData,"repo.name"),"Repository name",200),number:Number(e.node.config.number??(0,n$.getSessionValue)(e.sessionData,"pr.number"))}),D.register("GITHUB_UPDATE_PR",e=>ef(e,"update_pull_request",{...eg(e),title:n7(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})),D.register("GITHUB_SUBMIT_REVIEW",e=>ef(e,"submit_pull_request_review",{...eg(e),event:String(e.node.config.event??"COMMENT"),body:"string"==typeof e.node.config.body?e.node.config.body:void 0})),D.register("GITHUB_REQUEST_REVIEWERS",e=>ef(e,"request_pull_request_reviewers",{...eg(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):[]})),D.register("GITHUB_DISPATCH_WORKFLOW",e=>eh(e,"builtin:github","dispatch_github_workflow",{repositoryId:se(e,"repositoryId","repo.id","Repository ID"),workflowId:n9(e.node.config.workflowId,"Workflow ID",500),ref:n9(e.node.config.ref,"Git ref",500),inputs:e.node.config.inputs?n5(e.node.config.inputs,"Workflow inputs"):void 0},{sessionPatch:e=>({pipeline:e})})),ey=async(e,t,r)=>{let i=await eh(e,"builtin:jira",t,r),a=n5(i.output,"Jira tool output"),n=sp(n5(a.ticket,"Jira ticket output"));return{...i,sessionPatch:{...i.sessionPatch,ticket:n}}},D.register("JIRA_CREATE_TICKET",e=>ey(e,"create_jira_ticket",{projectKey:n9(e.node.config.projectKey,"Project key",100),issueTypeId:n9(e.node.config.issueTypeId,"Issue type ID",100),summary:n9(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?n5(e.node.config.fields,"Additional Jira fields"):void 0})),D.register("JIRA_ADD_WORKLOG",e=>ey(e,"add_jira_worklog",{issueKey:se(e,"issueKey","ticket.key","Issue key"),timeSpentSeconds:Number(e.node.config.timeSpentSeconds),startedAt:n7(e.node.config.startedAt,100),comment:"string"==typeof e.node.config.comment?{format:"MARKDOWN",value:e.node.config.comment}:void 0})),D.register("JIRA_LINK_TICKETS",e=>ey(e,"link_jira_tickets",{inwardIssueKey:se(e,"inwardIssueKey","ticket.key","Inward issue key"),outwardIssueKey:n9(e.node.config.outwardIssueKey,"Outward issue key",100),linkType:n9(e.node.config.linkType,"Link type",100)})),(ed=new sC($,U,ea,L,{buildData:F,commands:q,credentials:P,iosDevices:X,polling:j,pushNotifications:G,signingAssets:V,skills:z})).start(),eu.startRuntime(),ec.startRuntime(),en.startRuntime(),s6.serverServices={prismaService:O,credentialService:P,agentControlService:U,ccusageService:M,buildDataService:F,buildsService:J,codebasesService:Z,codebaseToolsService:Y,jiraService:Q,iosDevicesService:X,gitHubService:er,gitHubPipelineStatusService:ee,gitHubActionsNotificationsService:et,cacheServerService:ei,worktreesService:ea,worktreeAutomationService:ec,skillsService:z,telemetryService:K,signingAssetsService:V,pushNotificationsService:G,notificationsService:B,pollingService:j,modelCostsService:H,runsService:W,commandsService:q,diskSpaceService:L,systemStatusService:en,actionCenterService:es,toolsService:eo,workflowEventsService:$,workflowsService:eu,workflowEventBridge:ed})}],887394)}];
810
+ FROM visible`)]),n=a[0],s=nB(n?.totalCount),o=nB(n?.needsAttentionCount);return{rows:i,totalCount:s,needsAttentionCount:o,activeCount:s-o}}let nL=["PLAN","SESSION","BUILD","WORKFLOW"],nq={questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}};function nM(e){return e.toISOString()}function nF(e){try{return JSON.parse(e)}catch{return{}}}function nK(e,t,r,i){return[e,t,i??0,r.toISOString()].join(":")}function nV(e,t){return{id:e.id,sourceKind:t,createdAt:nM(e.createdAt),questions:e.questions}}function nH(e){let t=(0,n$.getSessionValue)(nF(e),"worktree.id");return"string"==typeof t&&t?t:null}class nG{async list(e={}){var t,r,i,a,n;let s=await (0,tX.getPrismaClient)(),o=Math.max(1,Math.min(e.first??50,200)),l=await nj(s,{first:o,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)}),u=l.rows.slice(0,o),c=u.flatMap(e=>"PLAN"===e.resourceKind||"SESSION"===e.resourceKind?[e.resourceId]:[]),d=u.flatMap(e=>"WORKFLOW"===e.resourceKind?[e.resourceId]:[]),p=u.flatMap(e=>"BUILD"===e.resourceKind?[e.resourceId]:[]),[h,m,f]=await Promise.all([c.length?s.agentRun.findMany({where:{id:{in:c}},take:c.length,include:{worktree:!0,questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:nq}}}):Promise.resolve([]),d.length?s.workflowRun.findMany({where:{id:{in:d}},take:d.length,include:{workflow:!0,attempts:{where:{supersededAt:null},include:{questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:nq}}}}}):Promise.resolve([]),p.length?s.build.findMany({where:{id:{in:p}},take:p.length,include:{worktree:!0,codebase:{include:{repository:!0}},configuration:!0}}):Promise.resolve([])]),g=[...new Set(m.flatMap(e=>nH(e.sessionDataJson)?[nH(e.sessionDataJson)]:[]))],y=new Map((g.length?await s.worktree.findMany({where:{id:{in:g}},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):[]).map(e=>[e.id,e])),w=new Map(u.map(e=>[e.key,e.reason])),b=[];for(let e of h){let i=`${e.kind}:${e.id}`,a=w.get(i);if(!a)continue;let n=e.questionBatches.map(e=>nV(e,null)),s="FAILED"===a?nK(e.kind,e.id,e.finishedAt??e.updatedAt):null;b.push({key:i,resourceKind:e.kind,reason:a,resourceId:e.id,href:(t=e.kind,r=e.id,`/${"PLAN"===t?"plans":"sessions"}/${encodeURIComponent(r)}`),displayNumber:e.displayNumber,label:function(e,t=220){let r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-1)}…`:r}(e.initialPrompt),summary:[e.repositoryName,e.branch].filter(Boolean).join(" · ")||null,status:e.status,phase:e.phase,error:e.error,createdAt:nM(e.createdAt),updatedAt:nM(e.updatedAt),worktree:e.worktree,questionBatches:"QUESTION"===a?n:[],buildRun:null,failureFingerprint:s})}for(let e of m){let t=`WORKFLOW:${e.id}`,r=w.get(t);if(!r)continue;let a=nH(e.sessionDataJson),n=e.attempts.flatMap(e=>e.questionBatches.map(t=>nV(t,e.kind))),s="FAILED"===r?nK("WORKFLOW",e.id,e.finishedAt??e.updatedAt,e.generation):null;b.push({key:t,resourceKind:"WORKFLOW",reason:r,resourceId:e.id,href:(i=e.id,`/workflows/runs/${encodeURIComponent(i)}`),displayNumber:e.displayNumber,label:e.workflow.name,summary:e.triggerSubjectKey||null,status:e.status,phase:e.phase,error:e.blockedReason??e.error,createdAt:nM(e.createdAt),updatedAt:nM(e.updatedAt),worktree:a?y.get(a)??null:null,questionBatches:"QUESTION"===r?n:[],buildRun:null,failureFingerprint:s})}for(let e of f){let t=`BUILD:${e.id}`,r=w.get(t);if(!r)continue;let i="FAILED"===r?nK("BUILD",e.id,e.finishedAt??e.updatedAt):null,n=e.codebase?.repository.name??null,s=e.configuration?.name??null;b.push({key:t,resourceKind:"BUILD",reason:r,resourceId:e.id,href:(a=e.id,`/builds/${encodeURIComponent(a)}`),displayNumber:null,label:s??n??"iOS build",summary:[n,e.worktree?.branch].filter(Boolean).join(" · ")||null,status:e.status,phase:null,error:e.error,createdAt:nM(e.createdAt),updatedAt:nM(e.updatedAt),worktree:e.worktree,questionBatches:[],buildRun:"UNRUN_BUILD"===r?{buildId:e.id,destinationType:e.destinationType,preferredDestination:nF(e.destinationJson)}:null,failureFingerprint:i})}let v=new Map(b.map(e=>[e.key,e])),k=u.flatMap(e=>v.has(e.key)?[v.get(e.key)]:[]);return{items:k,nextCursor:l.rows.length>o&&k.length?(n=k[k.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:l.totalCount,needsAttentionCount:l.needsAttentionCount,activeCount:l.activeCount}}async acknowledge(e){let t=e.resourceKind.trim().toUpperCase();if(!nL.includes(t))throw Error("Action Center resource kind is invalid");let r=await (0,tX.getPrismaClient)(),i=null;if("PLAN"===t||"SESSION"===t){let a=await r.agentRun.findUnique({where:{id:e.resourceId},select:{id:!0,kind:!0,status:!0,finishedAt:!0,updatedAt:!0}});a?.kind===t&&"FAILED"===a.status&&(i=nK(t,a.id,a.finishedAt??a.updatedAt))}else if("WORKFLOW"===t){let t=await r.workflowRun.findUnique({where:{id:e.resourceId},select:{id:!0,status:!0,generation:!0,finishedAt:!0,updatedAt:!0}});t?.status==="FAILED"&&(i=nK("WORKFLOW",t.id,t.finishedAt??t.updatedAt,t.generation))}else{let t=await r.build.findUnique({where:{id:e.resourceId},select:{id:!0,status:!0,finishedAt:!0,updatedAt:!0}});t?.status==="FAILED"&&(i=nK("BUILD",t.id,t.finishedAt??t.updatedAt))}if(!i||i!==e.failureFingerprint)throw Error("Action Center failure is no longer current");return await r.actionCenterAcknowledgement.upsert({where:{resourceKind_resourceId_failureFingerprint:{resourceKind:t,resourceId:e.resourceId,failureFingerprint:i}},create:{id:(0,y.randomUUID)(),resourceKind:t,resourceId:e.resourceId,failureFingerprint:i},update:{acknowledgedAt:new Date}}),r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0}),!0}subscribe(){return r6.agentEventBus.iterate(r6.SIDEBAR_STATUS_CHANGED_TOPIC)}}let nW=e=>encodeURIComponent(e),nJ=e=>e?.toISOString()??null;function nz(e){return e.trim().toLocaleLowerCase().replace(/\s+/g," ")}function nZ(e){return nz(e).split(" ").map(e=>e.replace(/^#/,"")).filter(Boolean)}function nY(e,t,r,i=[],a=[]){let n=function(e,t,r=[],i=[]){let a=nz(e).replace(/^#/,""),n=nZ(e);if(!a||0===n.length)return null;let s=nz(t),o=r.filter(e=>null!=e).map(e=>nz(String(e)).replace(/^#/,"")),l=i.filter(e=>null!=e).map(e=>nz(String(e))),u=[s,...o,...l].join(" ");return n.every(e=>u.includes(e))?o.includes(a)?1e3:s===a?900:o.some(e=>e.startsWith(a))?800:s.startsWith(a)?700:s.includes(a)?600:l.some(e=>e.startsWith(a))?500:u.includes(a)?400:300+n.filter(e=>s.includes(e)).length:null}(t,r,i,a);return null===n?null:{...e,children:e.children??[],score:n}}function nQ(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 nX(e,t){return nQ(e).slice(0,t)}function n0(e){let{score:t,...r}=e;return r}function n1(e){return`github.com/${e.toLocaleLowerCase()}`}function n2(e){let t=e.filter(e=>!!e?.trim());return t.length?t.join(" · "):null}class n3{async search(e,t=5,r=3){var i,a;let n,s=e.trim();if(!s)return{items:[]};if(s.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(r)||r<0||r>5)throw Error("relatedFirst must be an integer from 0 to 5");let o=await (0,tX.getPrismaClient)(),l=[...nZ(s)].sort((e,t)=>t.length-e.length)[0]??s,u=Number(s.replace(/^#/,"")),c=Number.isInteger(u)&&u>=0,[d,p,h,m,f,g,y,w,b,v,k,S,E,I,x,A,_,C]=await Promise.all([o.agent.findMany({where:{OR:[{id:{contains:l}},{name:{contains:l}},{hostname:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.agentJob.findMany({where:{visibility:"USER",OR:[{id:{contains:l}},{kind:{contains:l}},{status:{contains:l}},{agent:{name:{contains:l}}},{agent:{hostname:{contains:l}}}]},include:{agent:!0},orderBy:{updatedAt:"desc"},take:100}),o.codebaseRepository.findMany({where:{OR:[{id:{contains:l}},{name:{contains:l}},{description:{contains:l}},{canonicalOrigin:{contains:l}},{displayOrigin:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.codebase.findMany({where:{availability:{not:"MISSING"},OR:[{id:{contains:l}},{folder:{contains:l}},{branch:{contains:l}},{observedOrigin:{contains:l}},{repository:{name:{contains:l}}},{agent:{name:{contains:l}}}]},include:{repository:!0,agent:!0},orderBy:{updatedAt:"desc"},take:100}),o.worktree.findMany({where:{missingAt:null,availability:{not:"MISSING"},OR:[{id:{contains:l}},{folder:{contains:l}},{relativePath:{contains:l}},{branch:{contains:l}},{codebase:{repository:{name:{contains:l}}}},{codebase:{agent:{name:{contains:l}}}},{pullRequest:{title:{contains:l}}},...c?[{pullRequest:{number:u}}]:[]]},include:{codebase:{include:{repository:!0,agent:!0}},pullRequest:!0},orderBy:{updatedAt:"desc"},take:100}),o.build.findMany({where:{OR:[{id:{contains:l}},{requestId:{contains:l}},{status:{contains:l}},{action:{contains:l}},{commandSummary:{contains:l}},{configuration:{name:{contains:l}}},{worktree:{branch:{contains:l}}},{worktree:{folder:{contains:l}}},{codebase:{repository:{name:{contains:l}}}}]},include:{configuration:!0,worktree:{include:{codebase:{include:{repository:!0}}}},codebase:{include:{repository:!0}}},orderBy:{updatedAt:"desc"},take:100}),o.workflow.findMany({where:{OR:[{id:{contains:l}},{name:{contains:l}},{description:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.workflowRun.findMany({where:{OR:[{id:{contains:l}},...c?[{displayNumber:u}]:[],{status:{contains:l}},{triggerSubjectKey:{contains:l}},{workflow:{name:{contains:l}}}]},include:{workflow:!0},orderBy:{updatedAt:"desc"},take:100}),o.jiraCachedTicket.findMany({where:{OR:[{issueKey:{contains:l}},{projectKey:{contains:l}},{summaryJson:{contains:l}},{detailJson:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.worktreePullRequest.findMany({where:{worktree:{missingAt:null},OR:[{githubId:{contains:l}},...c?[{number:u}]:[],{title:{contains:l}},{repositoryNameWithOwner:{contains:l}},{headRefName:{contains:l}},{jiraKey:{contains:l}}]},include:{worktree:!0},orderBy:{updatedAt:"desc"},take:100}),o.gitHubPipelineRecord.findMany({where:{isCurrent:!0,workflowRunId:{not:null},OR:[{githubPipelineId:{contains:l}},{workflowRunId:{contains:l}},{workflowId:{contains:l}},...c?[{runNumber:u}]:[],{name:{contains:l}},{status:{contains:l}},{snapshot:{repositoryNameWithOwner:{contains:l}}}]},include:{snapshot:!0},orderBy:{updatedAt:"desc"},take:100}),o.agentRun.findMany({where:{kind:{in:["PLAN","SESSION"]},OR:[{id:{contains:l}},...c?[{displayNumber:u}]:[],{initialPrompt:{contains:l}},{repositoryName:{contains:l}},{branch:{contains:l}},{jiraIssueKey:{contains:l}},{model:{contains:l}},{status:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.commandDefinition.findMany({where:{OR:[{id:{contains:l}},{name:{contains:l}},{description:{contains:l}},{script:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.commandRun.findMany({where:{OR:[{id:{contains:l}},...c?[{displayNumber:u}]:[],{snapshotName:{contains:l}},{snapshotDescription:{contains:l}},{agentName:{contains:l}},{worktreeBranch:{contains:l}},{status:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.skill.findMany({where:{deletedAt:null,OR:[{id:{contains:l}},{name:{contains:l}},{description:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.skillGroup.findMany({where:{OR:[{id:{contains:l}},{name:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.iosDevice.findMany({where:{OR:[{id:{contains:l}},{udid:{contains:l}},{displayName:{contains:l}},{product:{contains:l}},{osVersion:{contains:l}},{status:{contains:l}}]},orderBy:{updatedAt:"desc"},take:100}),o.signingProfileAsset.findMany({where:{missingAt:null,OR:[{id:{contains:l}},{uuid:{contains:l}},{name:{contains:l}},{bundleId:{contains:l}},{teamName:{contains:l}},{profileType:{contains:l}}]},include:{agent:!0},orderBy:{observedAt:"desc"},take:100})]),R=[...new Set(k.map(e=>n1(e.snapshot.repositoryNameWithOwner)))],T=new Map([...h,...R.length?await o.codebaseRepository.findMany({where:{canonicalOrigin:{in:R}}}):[]].map(e=>[e.canonicalOrigin.toLocaleLowerCase(),e])),D=nX(f.map(e=>nY({key:`worktree:${e.id}`,kind:"WORKTREE",group:"WORKTREES",title:e.branch??e.relativePath,subtitle:n2([e.codebase.repository.name,e.relativePath,e.codebase.agent.name]),href:`/worktrees/${nW(e.id)}`,status:e.availability,updatedAt:nJ(e.updatedAt)},s,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),N=nX(y.map(e=>nY({key:`workflow:${e.id}`,kind:"WORKFLOW",group:"WORKFLOWS",title:e.name,subtitle:e.description||null,href:`/workflows/${nW(e.id)}`,status:e.archivedAt?"ARCHIVED":e.enabled?"ENABLED":"DISABLED",updatedAt:nJ(e.updatedAt)},s,e.name,[e.id],[e.description])),t);r>0&&(await this.attachWorktreeChildren(D,r),await this.attachWorkflowChildren(N,r));let O=new Set([...D,...N].flatMap(e=>e.children.map(e=>e.key))),P=nX(b.map(e=>{let t,r,i,a=(i=(r=(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 r.status&&!Array.isArray(r.status)?r.status:{},{summary:"string"==typeof r.summary?r.summary:null,status:"string"==typeof i.name?i.name:null});return nY({key:`ticket:${e.issueKey}`,kind:"JIRA_TICKET",group:"TICKETS",title:a.summary?`${e.issueKey} \xb7 ${a.summary}`:e.issueKey,subtitle:e.projectKey,href:`/jira/tickets/${nW(e.issueKey)}`,status:a.status,updatedAt:nJ(e.updatedAt)},s,a.summary??e.issueKey,[e.issueKey],[e.projectKey,a.status])}),t),$=(i=v.map(e=>{let[t,...r]=e.repositoryNameWithOwner.split("/"),i=r.join("/");return t&&i?nY({key:`pull-request:${e.repositoryNameWithOwner}:${e.number}`,kind:"GITHUB_PULL_REQUEST",group:"PULL_REQUESTS",title:`${e.repositoryNameWithOwner} #${e.number} \xb7 ${e.title}`,subtitle:n2([e.headRefName,e.jiraKey]),href:`/pull-requests/${nW(t)}/${nW(i)}/${e.number}`,status:e.state,updatedAt:nJ(e.updatedAt)},s,e.title,[e.number,`#${e.number}`,e.githubId,e.jiraKey],[e.repositoryNameWithOwner,e.headRefName]):null}),a=e=>e.key.toLocaleLowerCase(),n=new Set,nQ(i).filter(e=>{let t=a(e);return!n.has(t)&&(n.add(t),!0)}).slice(0,t)),U=nX(h.map(e=>nY({key:`repository:${e.id}`,kind:"REPOSITORY",group:"REPOSITORIES",title:e.name,subtitle:e.displayOrigin,href:`/codebases/repositories/${nW(e.id)}`,status:null,updatedAt:nJ(e.updatedAt)},s,e.name,[e.id],[e.displayOrigin,e.canonicalOrigin,e.description])),t),B=nX(m.map(e=>nY({key:`codebase:${e.id}`,kind:"CODEBASE",group:"CODEBASES",title:e.folder,subtitle:n2([e.repository.name,e.branch,e.agent.name]),href:`/codebases/${nW(e.id)}`,status:e.availability,updatedAt:nJ(e.updatedAt)},s,e.folder,[e.id,e.branch],[e.observedOrigin,e.repository.name,e.agent.name])),t),j=nX(w.map(e=>nY({key:`workflow-run:${e.id}`,kind:"WORKFLOW_RUN",group:"WORKFLOWS",title:`${e.workflow.name} #${e.displayNumber}`,subtitle:e.triggerSubjectKey||null,href:`/workflows/runs/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt)},s,e.workflow.name,[e.id,e.displayNumber,`#${e.displayNumber}`],[e.status,e.triggerSubjectKey])).filter(e=>!e||!O.has(e.key)),t),L=nX(k.map(e=>{let t=T.get(n1(e.snapshot.repositoryNameWithOwner)),r=new URLSearchParams;return t&&r.set("repository",t.id),e.workflowId&&r.set("pipeline",e.workflowId),nY({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${r.size?`?${r.toString()}`:""}`,status:e.status,updatedAt:nJ(e.updatedAt)},s,e.name,[e.githubPipelineId,e.workflowRunId,e.workflowId,e.runNumber],[e.snapshot.repositoryNameWithOwner,e.status])}),t),q=nX(g.map(e=>{let t=e.worktree?.codebase.repository??e.codebase?.repository;return nY({key:`build:${e.id}`,kind:"BUILD",group:"BUILDS",title:e.configuration?.name??`${e.action} build`,subtitle:n2([t?.name,e.worktree?.branch,e.id.slice(0,8)]),href:`/builds/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt)},s,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||!O.has(e.key)),t),M=nX(d.map(e=>nY({key:`agent:${e.id}`,kind:"AGENT",group:"AGENTS_JOBS",title:e.name,subtitle:e.hostname,href:`/agents/${nW(e.id)}`,status:e.disconnectedAt?"OFFLINE":null,updatedAt:nJ(e.updatedAt)},s,e.name,[e.id],[e.hostname])),t),F=nX(p.map(e=>nY({key:`agent-job:${e.id}`,kind:"AGENT_JOB",group:"AGENTS_JOBS",title:e.kind,subtitle:n2([e.agent.name,e.id.slice(0,8)]),href:`/jobs/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt)},s,e.kind,[e.id],[e.status,e.agent.name,e.agent.hostname])),t),K=nX(S.map(e=>{let t="PLAN"===e.kind?"PLAN":"SESSION";return nY({key:`${t.toLocaleLowerCase()}:${e.id}`,kind:t,group:"PLANS_SESSIONS",title:`${"PLAN"===t?"Plan":"Session"} #${e.displayNumber}`,subtitle:n2([e.repositoryName,e.branch,e.initialPrompt.slice(0,100)]),href:`/${"PLAN"===t?"plans":"sessions"}/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt)},s,e.initialPrompt,[e.id,e.displayNumber,`#${e.displayNumber}`,e.jiraIssueKey],[e.repositoryName,e.branch,e.model,e.status])}),t),V=nX(E.map(e=>nY({key:`command:${e.id}`,kind:"COMMAND",group:"COMMANDS_RUNS",title:e.name,subtitle:e.description||null,href:`/commands/${nW(e.id)}/edit`,status:e.archivedAt?"ARCHIVED":null,updatedAt:nJ(e.updatedAt)},s,e.name,[e.id],[e.description,e.script])),t),H=nX(I.map(e=>nY({key:`command-run:${e.id}`,kind:"COMMAND_RUN",group:"COMMANDS_RUNS",title:`${e.snapshotName} #${e.displayNumber}`,subtitle:n2([e.agentName,e.worktreeBranch]),href:`/commands/runs/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt)},s,e.snapshotName,[e.id,e.displayNumber,`#${e.displayNumber}`],[e.snapshotDescription,e.agentName,e.worktreeBranch,e.status])),t),G=nX(x.map(e=>nY({key:`skill:${e.id}`,kind:"SKILL",group:"SKILLS",title:e.name,subtitle:e.description,href:`/skills/${nW(e.id)}`,status:null,updatedAt:nJ(e.updatedAt)},s,e.name,[e.id],[e.description])),t),W=nX(A.map(e=>nY({key:`skill-group:${e.id}`,kind:"SKILL_GROUP",group:"SKILLS",title:e.name,subtitle:null,href:`/skills/groups/${nW(e.id)}`,status:null,updatedAt:nJ(e.updatedAt)},s,e.name,[e.id])),t),J=nX(_.map(e=>nY({key:`device:${e.id}`,kind:"DEVICE",group:"DEVICES_PROFILES",title:e.displayName,subtitle:n2([e.product,e.osVersion]),href:`/devices/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt)},s,e.displayName,[e.id,e.udid],[e.product,e.osVersion,e.status])),t),z=nX(C.map(e=>nY({key:`profile:${e.id}`,kind:"PROVISIONING_PROFILE",group:"DEVICES_PROFILES",title:e.name,subtitle:n2([e.bundleId,e.teamName,e.agent.name]),href:`/provisioning-profiles/${nW(e.id)}`,status:e.expired?"EXPIRED":e.profileType,updatedAt:nJ(e.observedAt)},s,e.name,[e.id,e.uuid],[e.bundleId,e.teamName,e.profileType,e.agent.name])),t);return{items:[...D,...P,...$,...U,...B,...nX([...N,...j],t),...L,...q,...nX([...M,...F],t),...K,...nX([...V,...H],t),...nX([...G,...W],t),...nX([...J,...z],t)].map(n0)}}async attachWorktreeChildren(e,t){if(!e.length)return;let r=await (0,tX.getPrismaClient)(),i=e.map(e=>e.key.slice(9)),a=new Map(await Promise.all(i.map(async e=>{let[i,a]=await Promise.all([r.workflowRun.findMany({where:{resourceLinks:{some:{kind:"WORKTREE",resourceId:e}}},include:{workflow:!0},orderBy:{createdAt:"desc"},take:t}),r.build.findMany({where:{worktreeId:e},include:{configuration:!0},orderBy:{createdAt:"desc"},take:t})]);return[e,{runs:i,builds:a}]})));for(let r of e){let e=r.key.slice(9),i=a.get(e);r.children=[...(i?.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/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt),children:[]})),...(i?.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/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt),children:[]}))]}}async attachWorkflowChildren(e,t){if(!e.length)return;let r=await (0,tX.getPrismaClient)(),i=e.map(e=>e.key.slice(9)),a=new Map(await Promise.all(i.map(async e=>[e,await r.workflowRun.findMany({where:{workflowId:e},include:{workflow:!0},orderBy:{createdAt:"desc"},take:t})])));for(let r of e){let e=r.key.slice(9);r.children=(a.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/${nW(e.id)}`,status:e.status,updatedAt:nJ(e.updatedAt),children:[]}))}}}function n4(e,t,r){let i=e.trim().toLowerCase(),a=t.trim().toLowerCase();if(!i||!a)throw Error("Pull request repository coordinates are required");if(!Number.isInteger(r)||r<1)throw Error("Pull request number must be a positive integer");return`${i}/${a}#${r}`}function n6(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function n8(e,t,r){return n6(e[t])[r]}function n5(e,t,r={}){if("string"!=typeof t&&"number"!=typeof t)return null;let i=String(t).trim();return i?{kind:e,resourceId:i,...r}:null}let n9=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"]),n7=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"]),se=new Set(["BUILD_RESULT","BUILD_TEST_THRESHOLD","BUILD_COVERAGE_THRESHOLD","BUILD_HOOK_FAILED"]),st=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"]),sr=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"]),si=new Set(["GITHUB_CHECK_FAILED","GITHUB_WORKFLOW_SUCCEEDED","GITHUB_ACTIONS_RESULT","GITHUB_PIPELINE_STATUS_CHANGED"]);function sa(e,t){let r="string"==typeof e?Number(e.trim()):e;return"number"!=typeof r||!Number.isFinite(r)||r<=0?null:Math.min(31536e3,Math.max(t,r))}function sn(e,t=null){let r=sa(e.timeoutSeconds,10)??(null===t?null:sa(t,10));return null===r?null:new Date(Date.now()+1e3*r)}function ss(e,t){return sa(e.cadenceSeconds,1)??Math.max(1,t)}function so(e,t=1){return new Date(Date.now()+1e3*ss(e,t))}let sl=(e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e},su=(e,t,r=2e4)=>{if("string"!=typeof e||!e.trim())throw Error(`${t} is required`);if(e.length>r)throw Error(`${t} is too long`);return e.trim()},sc=(e,t=2e4)=>null==e||""===e?null:su(e,"Value",t),sd=(e,t,r,i)=>su(e.node.config[t]??(0,n$.getSessionValue)(e.sessionData,r),i,500),sp=(e,t="operation")=>`${e.run.id}:${e.attempt.id}:${t}`,sh=(e,t,r=!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:r&&"string"==typeof t.id?{kind:"AGENT_RUN",externalKey:t.id,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}:void 0}),sm=(e,t,r,i=[])=>({output:{jobId:t.id},sessionPatch:r,links:[...i,{kind:"AGENT_JOB",resourceId:t.id,label:"Agent job",url:`/jobs/${t.id}`}],wait:{kind:"AGENT_JOB",externalKey:t.id,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config,t.timeoutSeconds??3600)}}),sf=(e,t,r,i,a)=>({kind:e,resourceId:t,label:r,url:i,metadata:a}),sg=(e,t)=>sf("JIRA_TICKET",e,t??e);function sy(e,t,r){let i=sS(e);return sf("PULL_REQUEST",n4(i.owner,i.name,s_(e)),t??"Pull request",r)}function sw(e){let t=sk(e),r=sA(e);return t&&r?sf("PULL_REQUEST",n4(t.owner,t.name,r),"Pull request"):null}function sb(e){let t=e.node.config.workflowRunId??(0,n$.getSessionValue)(e.sessionData,"pipeline.runId"),r=(0,n$.getSessionValue)(e.sessionData,"pipeline.url");return("string"==typeof t||"number"==typeof t)&&"string"==typeof r&&r?sf("GITHUB_WORKFLOW_RUN",String(t),"Workflow run",r):null}function sv(e){let t=(0,n$.getSessionValue)(e.sessionData,"run.kind");if("PLAN"!==t&&"SESSION"!==t)return null;let r=function(e){try{return sO(e)}catch{return null}}(e);return r?sf("AGENT_RUN",r,t,`/${"PLAN"===t?"plans":"sessions"}/${r}`,{runKind:t}):null}function sk(e){let t=e.node.config.owner,r=e.node.config.name;if("string"==typeof t&&t.trim()&&"string"==typeof r&&r.trim())return{owner:t.trim(),name:r.trim()};let i=e.sessionData.repo&&"object"==typeof e.sessionData.repo&&!Array.isArray(e.sessionData.repo)?e.sessionData.repo.displayOrigin:null,a="string"==typeof i?i.match(/(?:https?:\/\/)?github\.com[/:]([^/]+)\/([^/.]+)(?:\.git)?$/i):null,n=a?.[1]?.trim(),s=a?.[2]?.trim();return n&&s?{owner:n,name:s}:null}function sS(e){let t=sk(e);if(!t)throw Error("GitHub owner and repository are required");return t}function sE(e){let t=sl(e,"Jira ticket"),r=t.issueType&&"object"==typeof t.issueType?t.issueType:{},i=t.status&&"object"==typeof t.status?t.status:{};return{...t,key:t.key,title:t.summary??t.title,type:r.name??t.type,status:i.name??t.status,statusCategory:i.category??t.statusCategory}}function sI(e){let t=sl(e,"Pull request"),r=Array.isArray(t.reviewThreads)?t.reviewThreads:[];return{...t,headBranch:t.headRefName,headSha:t.headRefOid,merged:"MERGED"===t.state,unresolvedThreads:r.filter(e=>e&&"object"==typeof e&&!Array.isArray(e)&&!0!==e.isResolved)}}function sx(e){return su(e.node.config.issueKey??(0,n$.getSessionValue)(e.sessionData,"ticket.key"),"Jira issue key",100)}function sA(e){let t=e.node.config.number??(0,n$.getSessionValue)(e.sessionData,"pr.number"),r="string"==typeof t?Number(t):t;return"number"==typeof r&&Number.isInteger(r)&&r>=1?r:null}function s_(e){let t=sA(e);if(!t)throw Error("Pull request number is required");return t}function sC(e){return sd(e,"worktreeId","worktree.id","Worktree ID")}function sR(e){return sd(e,"codebaseId","codebase.id","Codebase ID")}function sT(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:sc(e.node.config.branchName??(0,n$.getSessionValue)(e.sessionData,"worktree.branch"),500),ticketKey:"TICKET"===t?sc(e.node.config.ticketKey??(0,n$.getSessionValue)(e.sessionData,"ticket.key"),100):null,baseBranch:su(e.node.config.baseBranch??(0,n$.getSessionValue)(e.sessionData,"worktree.baseBranch")??(0,n$.getSessionValue)(e.sessionData,"repo.defaultBranch"),"Base branch",500)}}function sD(e){return sd(e,"buildId","build.id","Build ID")}function sN(e){return su(e.node.config.agentId??(0,n$.getSessionValue)(e.sessionData,"agent.id")??(0,n$.getSessionValue)(e.sessionData,"codebase.agentId"),"Agent ID",500)}function sO(e){let t=e.node.config.runId;if("string"==typeof t&&t)return t;let r=e.node.config.sourceStepId;return"string"==typeof r?su((0,n$.getSessionValue)(e.sessionData,`run.${r}.id`),"Agent run ID",500):su((0,n$.getSessionValue)(e.sessionData,"run.id"),"Agent run ID",500)}function sP(e,t){let r,i;return{kind:t,worktreeId:(r=e.node.config.worktreeId,i=(0,n$.getSessionValue)(e.sessionData,"worktree.id"),"string"==typeof r&&r===e.run.workflowId&&"string"==typeof i&&i!==r?su(i,"Worktree ID",500):sC(e)),jiraIssueKey:sc(e.node.config.jiraIssueKey??(0,n$.getSessionValue)(e.sessionData,"ticket.key"),100),provider:su(e.node.config.provider??"CODEX","Provider",50),model:su(e.node.config.model,"Model",200),effort:sc(e.node.config.effort,50),webSearchEnabled:!0===e.node.config.webSearchEnabled,prompt:su(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 s${nextMaintenanceAt=0;async record(e){let t=await (0,tX.getPrismaClient)();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 r=await e.workflowTriggerEvent.findUnique({where:{dedupeKey:t.dedupeKey}});return r||e.workflowTriggerEvent.create({data:{id:(0,y.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 (0,tX.getPrismaClient)(),r=await t.workflowTriggerEvent.findMany({where:{status:"FAILED",receivedAt:{lt:new Date(e-6048e5)}},select:{id:!0},orderBy:{receivedAt:"asc"},take:1e3});if(r.length){await t.workflowTriggerEvent.deleteMany({where:{id:{in:r.map(({id:e})=>e)}}}),this.nextMaintenanceAt=0;return}this.nextMaintenanceAt=e+36e5}}function sU(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function sB(e,t){return{id:e.id,name:e.name,url:e.displayOrigin,canonicalOrigin:e.canonicalOrigin,displayOrigin:e.displayOrigin,defaultBranch:t??null}}function sj(e){return{id:e.id,name:e.name,hostname:e.hostname,connected:null===e.disconnectedAt,diskFreeBytes:e.diskFreeBytes,memoryFreeBytes:e.memoryFreeBytes}}class sL{events;agentControl;worktrees;diskSpace;domains;started;running;diskAuditTimer;diskStateFingerprints;constructor(e,t,r,i,a={}){this.events=e,this.agentControl=t,this.worktrees=r,this.diskSpace=i,this.domains=a,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,r,i,a={}){await this.events.record({kind:e,subjectKey:t,dedupeKey:r,payload:{...i,...a,sessionData:i}})}async worktreeSessionData(e,t=!1){return e&&this.worktrees?this.worktrees.workflowSessionDataForWorktree(e,{includeMissing:t}):{}}async observeAgentJob(e){if(e.kind===aR.WORKTREE_AUTO_SYNC_JOB_KIND&&e.worktreeId){let t=await this.worktreeSessionData(e.worktreeId,!0);await this.record("WORKTREE_AUTOMATION_RESULT",e.worktreeId,`worktree-automation:${e.id}:${e.status}`,(0,n$.mergeSessionData)(t,{worktree:{id:e.worktreeId},automation:{jobId:e.id,status:e.status,error:e.error,result:sU(e.resultJson??"{}")}}),{cursorValue:`${e.id}:${e.status}`})}if("ccusage.report"===e.kind&&"SUCCEEDED"===e.status&&e.resultJson){let t=sU(e.resultJson),r=t.report&&"object"==typeof t.report&&!Array.isArray(t.report)?t.report:{},i=r.totals&&"object"==typeof r.totals&&!Array.isArray(r.totals)?r.totals:{};await this.record("CCUSAGE_THRESHOLD",e.agentId,`ccusage:${e.ccusageCollectionId??e.id}:${e.agentId}`,{run:{usage:i},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}`,(0,n$.mergeSessionData)(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=r6.agentEventBus.iterate(r6.RUNS_CHANGED_TOPIC);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=r6.agentEventBus.iterate(r6.GITHUB_PIPELINE_STATUS_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=t.githubPipelineStatusChanged,r=e.snapshot,i=e.changedPipeline??{status:r.pipelineStatus};await this.record("GITHUB_PIPELINE_STATUS_CHANGED",`${r.repositoryGithubId}:${r.headSha}`,`github-pipeline:${r.repositoryGithubId}:${r.headSha}:${r.revision}`,{repo:{githubId:r.repositoryGithubId,nameWithOwner:r.repositoryNameWithOwner,url:r.repositoryUrl},pipeline:{...i,headSha:r.headSha,aggregateStatus:r.pipelineStatus,revision:r.revision}},{cursorValue:r.revision}).catch(e=>console.error("Could not record GitHub pipeline trigger:",e))}}finally{await e.return?.()}}async consumeCommandRuns(){let e=r6.agentEventBus.iterate(r6.COMMAND_RUNS_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.commands;if(!e)continue;let r=await e.getRun(t.commandRunsChanged.id);if(!r||!new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(r.status))continue;let i=await this.worktreeSessionData(r.worktreeId,!0),a=(0,n$.mergeSessionData)(i,{command:{id:r.id,commandId:r.commandId,name:r.snapshotName,status:r.status,exitCode:r.exitCode,signal:r.signal,error:r.error,finishedAt:r.finishedAt?.toISOString()??null},agent:{id:r.agentId,name:r.agentName},...r.worktreeId?{worktree:{id:r.worktreeId}}:{}}),n=r.finishedAt?.toISOString()??"terminal";await this.record("COMMAND_RUN_RESULT",r.id,`command-result:${r.id}:${r.status}:${n}`,a,{cursorValue:`${r.status}:${n}`}).catch(e=>console.error("Could not record command result trigger:",e))}}finally{await e.return?.()}}async consumeCommandOutput(){let e=r6.agentEventBus.iterate(r6.COMMAND_RUN_OUTPUT_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=t.commandRunOutputAdded,r=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:r,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=r6.agentEventBus.iterate(r6.SKILLS_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.skills;if(!e||!t.id)continue;let r=await e.getRun(t.id);if(!r)continue;let i=r.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})),a={skillSync:{id:r.id,kind:r.kind,status:r.status,error:r.error,conflictCount:i.length,conflicts:i,updatedAt:r.updatedAt.toISOString(),finishedAt:r.finishedAt?.toISOString()??null},...r.groupId?{skill:{groupId:r.groupId}}:{}};("NEEDS_RESOLUTION"===r.status||i.length)&&await this.record("SKILL_SYNC_CONFLICT",r.id,`skill-conflict:${r.id}:${r.updatedAt.toISOString()}`,a,{cursorValue:r.updatedAt.toISOString()}),new Set(["READY","PARTIAL","SUCCEEDED"]).has(r.status)&&await this.record("SKILL_SYNC_RESULT",r.id,`skill-result:${r.id}:${r.status}:${r.updatedAt.toISOString()}`,a,{cursorValue:`${r.status}:${r.updatedAt.toISOString()}`})}}finally{await e.return?.()}}async consumeIosDevices(){let e=r6.agentEventBus.iterate(r6.IOS_DEVICES_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.iosDevices;if(!e||!t.id)continue;let r=await e.device(t.id);if(!r)continue;let i={device:{id:r.id,udid:r.udid,name:r.displayName,product:r.product,osVersion:r.osVersion,status:r.status,error:r.registrationError,updatedAt:r.updatedAt.toISOString()}};await this.record("IOS_DEVICE_ENROLLED",r.id,`ios-device-enrolled:${r.id}:${r.createdAt.toISOString()}`,i,{cursorValue:r.createdAt.toISOString()}),new Set(["REGISTERED","REGISTRATION_FAILED","REJECTED"]).has(r.status)&&await this.record("IOS_DEVICE_REGISTRATION_RESULT",r.id,`ios-device-registration:${r.id}:${r.status}:${r.updatedAt.toISOString()}`,i,{cursorValue:`${r.status}:${r.updatedAt.toISOString()}`})}}finally{await e.return?.()}}async consumeSigningAssets(){let e=r6.agentEventBus.iterate(r6.SIGNING_ASSETS_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;if(!t.changed)continue;let e=this.domains.signingAssets;if(!e)continue;let[r,i]=await Promise.all([e.operations(200),e.profiles()]);for(let e of r.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 i.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=r6.agentEventBus.iterate(r6.PUSH_NOTIFICATIONS_CHANGED_TOPIC);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=r6.agentEventBus.iterate(r6.BUILD_DATA_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.buildData;if(!e)continue;let r=await e.getCollection(t.buildDataCollectionChanged.id);if(!r||"COMPLETED"!==r.status)continue;let i=r.entries.reduce((e,t)=>e+(t.sizeBytes??0),0),a={buildData:{id:r.id,status:r.status,finishedAt:r.finishedAt,totalBytes:i,entryCount:r.entries.length,successfulAgentCount:r.progress.successfulCount}},n=r.finishedAt??r.deadlineAt;await this.record("BUILD_DATA_THRESHOLD",r.id,`build-data-threshold:${r.id}:${n}`,a,{cursorValue:i}),await this.record("BUILD_DATA_CLEANUP_RESULT",r.id,`build-data-result:${r.id}:${n}`,a,{cursorValue:n})}}finally{await e.return?.()}}async consumePollingOperations(){let e=r6.agentEventBus.iterate(r6.POLLING_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=this.domains.polling;if(!e)continue;let r=(await e.list()).find(e=>e.id===t.pollingOperationChanged);if(!r)continue;let i=r.lastCompletedAt??r.lastStartedAt??r.nextScheduledAt??r.status;await this.record("POLLING_OPERATION_STATE",r.id,`polling-state:${r.id}:${r.status}:${i}`,{polling:r},{cursorValue:`${r.status}:${i}`}).catch(e=>console.error("Could not record polling operation trigger:",e));let a=await this.domains.credentials?.status();if(a&&"READY"!==a.state){let e=a.warnings.map(({code:e})=>e);await this.record("CREDENTIAL_STORE_DEGRADED",a.storageType,`credential-store:${a.state}:${e.join(",")}`,{credentialStore:a},{cursorValue:{state:a.state,warningCodes:e,mismatchCount:a.mismatchCount}})}}}finally{await e.return?.()}}async consumeModelCosts(){let e=r6.agentEventBus.iterate(r6.MODEL_COST_CATALOG_CHANGED_TOPIC);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=r6.agentEventBus.iterate(r6.TOOL_CALL_AUDIT_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=await (0,tX.getPrismaClient)(),r=await e.toolCallAudit.findUnique({where:{id:t.toolCallAuditChanged.id}});if(!r||"RUNNING"===r.resultStatus)continue;let i=r.caller.startsWith("workflow:")?r.caller.slice(9):null,a=i?await e.workflowRun.findUnique({where:{id:i},select:{id:!0,workflowId:!0}}):null,n=a?null:await e.workflowStepAttempt.findUnique({where:{id:r.correlationId},select:{run:{select:{id:!0,workflowId:!0}}}}),s=a??n?.run??null,o=r.finishedAt?.toISOString()??"unfinished";await this.record("TOOL_CALL_RESULT",r.id,`tool-call:${r.id}:${r.resultStatus}:${o}`,{toolCall:{id:r.id,correlationId:r.correlationId,caller:r.caller,source:r.source,groupId:r.groupId,toolName:r.toolName,argumentsSha256:r.argumentsSha256,resultStatus:r.resultStatus,durationMs:r.durationMs,finishedAt:r.finishedAt?.toISOString()??null}},{cursorValue:`${r.resultStatus}:${o}`,...s?{workflowCorrelation:{workflowId:s.workflowId,runId:s.id}}:{}})}}finally{await e.return?.()}}async observeRun(e){let t=await (0,tX.getPrismaClient)(),r=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(!r)return;let i=await t.workflowRunResourceLink.findFirst({where:{kind:"AGENT_RUN",resourceId:r.id},include:{run:!0},orderBy:{createdAt:"desc"}}),a=await this.worktreeSessionData(r.worktree?.id??null),n=(0,n$.mergeSessionData)(a,{run:{id:r.id,kind:r.kind,status:r.status,phase:r.phase,origin:r.origin,provider:r.provider,model:r.model,finalOutput:r.finalOutput,error:r.error,sourcePlanId:r.sourcePlanId,parentRunId:r.parentRunId,followUpMode:r.followUpMode,usage:{inputTokens:r.inputTokens,outputTokens:r.outputTokens,reasoningTokens:r.reasoningTokens,cacheReadTokens:r.cacheReadTokens,cacheWriteTokens:r.cacheWriteTokens,toolCallCount:r.toolCallCount,estimatedCost:r.estimatedCost}},...r.worktree?{worktree:{id:r.worktree.id,path:r.worktree.folder,branch:r.worktree.branch,headSha:r.worktree.headSha},codebase:{id:r.worktree.codebase.id,folder:r.worktree.codebase.folder,agentId:r.worktree.codebase.agentId},repo:sB(r.worktree.codebase.repository,r.worktree.codebase.defaultBranch)}:{},...r.agent?{agent:sj(r.agent)}:{},...r.jiraIssueKey?{ticket:{key:r.jiraIssueKey}}:{}}),s=i?{workflowId:i.run.workflowId,runId:i.runId,attemptId:i.attemptId}:null,o={cursorValue:`${r.status}:${r.phase}`,workflowCorrelation:s};r.startedAt&&await this.record("RUN_STARTED",r.id,`run-started:${r.id}:${r.startedAt.toISOString()}`,n,o);let l="COMPLETED"===r.status?"RUN_COMPLETED":"FAILED"===r.status?"RUN_FAILED":"CANCELLED"===r.status?"RUN_CANCELLED":"PAUSED"===r.status?"RUN_PAUSED":null;l&&await this.record(l,r.id,`run-status:${r.id}:${r.status}:${r.finishedAt?.toISOString()??r.updatedAt.toISOString()}`,n,o),"RUNNING"===r.phase&&r.startedAt&&r.updatedAt>r.startedAt&&await this.record("RUN_CONTINUED",r.id,`run-continued:${r.id}:${r.updatedAt.toISOString()}`,n,o),r.sourcePlanId&&await this.record("RUN_PLAN_PLAYED",r.id,`run-plan-played:${r.id}:${r.sourcePlanId}`,n,o),r.parentRunId&&"PLAN_PLAY"!==r.followUpMode&&await this.record("RUN_FOLLOW_UP",r.id,`run-follow-up:${r.id}:${r.parentRunId}`,n,o),"IMPORTED"===r.origin&&await this.record("RUN_IMPORTED",r.id,`run-imported:${r.id}:${r.updatedAt.toISOString()}`,n,o),await this.record("RUN_USAGE_THRESHOLD",r.id,`run-usage:${r.id}:${r.updatedAt.toISOString()}`,n,{...o,cursorValue:r.updatedAt.toISOString()});let u=r.questionBatches[0];if(u){let e={...n,run:{...n.run,questions:u.questions}};"PENDING"===u.status?await this.record("RUN_QUESTION_NEEDED",r.id,`run-question:${u.id}:pending`,e,o):"ANSWERED"===u.status&&await this.record("RUN_QUESTION_ANSWERED",r.id,`run-question:${u.id}:answered`,e,o)}let c=r.events[0];c&&await this.record("RUN_EVENT_MATCH",r.id,`run-event:${c.id}`,n,{...o,event:c});let d=r.toolCalls[0];d&&await this.record("RUN_EVENT_MATCH",r.id,`run-tool:${d.id}:${d.status}`,n,{...o,toolCall:d})}async consumeBuilds(){let e=r6.agentEventBus.iterate(r6.BUILDS_CHANGED_TOPIC);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 (0,tX.getPrismaClient)(),r=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(!r)return;let i=await this.worktreeSessionData(r.worktree?.id??null),a=(0,n$.mergeSessionData)(i,{build:{id:r.id,status:r.status,action:r.action,error:r.error},...r.codebase?{codebase:{id:r.codebase.id,folder:r.codebase.folder,agentId:r.codebase.agentId},repo:sB(r.codebase.repository,r.codebase.defaultBranch),agent:sj(r.codebase.agent)}:{},...r.worktree?{worktree:{id:r.worktree.id,path:r.worktree.folder,branch:r.worktree.branch,headSha:r.worktree.headSha}}:{}});for(let e of(new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(r.status)&&await this.record("BUILD_RESULT",r.id,`build-result:${r.id}:${r.status}`,a,{cursorValue:r.status}),r.reports.filter(({status:e})=>"READY"===e))){let t=sU(e.summaryJson),i={...a,build:{...a.build,..."TEST_RESULTS"===e.kind?{testSummary:t}:{coverageSummary:t}}};await this.record("TEST_RESULTS"===e.kind?"BUILD_TEST_THRESHOLD":"BUILD_COVERAGE_THRESHOLD",r.id,`build-report:${e.id}:${e.updatedAt.toISOString()}`,i,{cursorValue:e.updatedAt.toISOString()})}for(let e of r.scriptExecutions.filter(({causedBuildFailure:e})=>e))await this.record("BUILD_HOOK_FAILED",r.id,`build-hook:${e.id}:failed`,a,{cursorValue:e.id,script:{id:e.id,name:e.nameSnapshot,phase:e.phase}})}async consumeWorktrees(){let e=r6.agentEventBus.iterate(r6.WORKTREE_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=t.worktreeOverviewChanged,r=await (0,tX.getPrismaClient)();for(let t of(await r.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,r=e.hasStagedChanges||e.hasUnstagedChanges,i=await this.worktreeSessionData(e.id,!0),a=(0,n$.mergeSessionData)(i,{repo:sB(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:r,missingAt:e.missingAt?.toISOString()??null,dirtySince:r?e.updatedAt.toISOString():null}}),n={cursorValue:t.toISOString()};await this.record("WORKTREE_SYNC_STATE_CHANGED",e.id,`worktree-sync:${e.id}:${e.syncState}:${t.toISOString()}`,a,{cursorValue:e.syncState}),await this.record("WORKTREE_CLEAN",e.id,`worktree-clean:${e.id}:${t.toISOString()}`,a,{cursorValue:r}),(e.baseBehind??0)>0&&await this.record("WORKTREE_BEHIND",e.id,`worktree-behind:${e.id}:${t.toISOString()}`,a,n),await this.record("WORKTREE_DIRTY_DURATION",e.id,`worktree-dirty:${e.id}:${t.toISOString()}`,a,n),await this.record("WORKTREE_MISSING",e.id,`worktree-missing:${e.id}:${t.toISOString()}`,a,{cursorValue:!!e.missingAt}),await this.record("WORKTREE_DIVERGED",e.id,`worktree-diverged:${e.id}:${t.toISOString()}`,a,{cursorValue:"DIVERGED"===e.pushStatus}),e.headSha&&await this.record("WORKTREE_NEW_COMMIT",e.id,`worktree-commit:${e.id}:${e.headSha}`,a,{cursorValue:e.headSha})}async consumeCodebases(){let e=r6.agentEventBus.iterate(r6.CODEBASE_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=await (0,tX.getPrismaClient)(),r=t.codebaseOverviewChanged;for(let t of(await e.codebase.findMany({where:r.codebaseId?{id:r.codebaseId}:r.repositoryId?{repositoryId:r.repositoryId}:{},include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}},take:r.codebaseId?1:500}))){let e={repo:sB(t.repository,t.defaultBranch),agent:sj(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)}},r=(t.lastCheckedAt??t.updatedAt).toISOString();await this.record("CODEBASE_SYNC_STATE_CHANGED",t.id,`codebase-sync:${t.id}:${t.syncState}:${r}`,e,{cursorValue:t.syncState}),(t.statusError||t.lastFetchError)&&await this.record("CODEBASE_OPERATION_FAILED",t.id,`codebase-failed:${t.id}:${r}`,e,{cursorValue:r,error:t.statusError??t.lastFetchError});let i=e.codebase.remoteBranches;if(Array.isArray(i))for(let r of i.filter(e=>"string"==typeof e))await this.record("CODEBASE_REMOTE_BRANCH",t.id,`codebase-remote-branch:${t.id}:${r}`,e,{cursorValue:r,branch:r})}}}finally{await e.return?.()}}async emitDiskSnapshot(e,t){let r=e.agent.id;t.report&&await this.record("AGENT_DISK_REPORT",r,`agent-disk-report:${r}:${e.disk.lastReportedAt??t.changeId}`,e,{cursorValue:e.disk.lastReportedAt}),t.threshold&&await this.record("AGENT_DISK_THRESHOLD",r,`agent-disk-threshold:${r}:${t.changeId}`,e);let i=r7(e);if(await this.record("AGENT_DISK_STATE_CHANGED",r,`agent-disk-state:${r}:${t.changeId}`,e,{cursorValue:i}),this.diskStateFingerprints.set(r,JSON.stringify(i)),t.cleanup){let i={...e,cleanup:t.cleanup};await this.record("AGENT_DISK_CLEANUP_RESULT",r,`agent-disk-cleanup:${t.cleanup.jobId}:${t.cleanup.status}`,i,{cleanup:t.cleanup})}}async observeDiskChange(e){if(!this.diskSpace)return;let{id:t,reason:r,cleanup:i}=e.diskSpaceChange;if("settings"===e.diskSpaceChanged){let e=await this.diskSpace.overview();for(let i of e.agents)await this.emitDiskSnapshot(r9(e.settings,i,r),{changeId:t,report:!1,threshold:!0});return}let a=await this.diskSpace.snapshot(e.diskSpaceChanged,r);await this.emitDiskSnapshot(a,{changeId:t,report:"REPORT_RECEIVED"===r,threshold:!0,cleanup:i})}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 r of t.agents){let i=r9(t.settings,r,e?"STARTUP_RECONCILE":"STATE_AUDIT"),a=JSON.stringify(r7(i));(e||this.diskStateFingerprints.get(r.agent.id)!==a)&&await this.emitDiskSnapshot(i,{changeId:(0,y.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),1e3*r4.DISK_SPACE_POLL_INTERVAL_SECONDS),this.diskAuditTimer.unref?.())}}async consumeAgents(){let e=r6.agentEventBus.iterate(r6.AGENT_CHANGED_TOPIC);try{for await(let t of e){if(!this.running)break;let e=await (0,tX.getPrismaClient)(),r=await e.agent.findUnique({where:{id:t.agentChanged.id}});if(!r)continue;let i=null===r.disconnectedAt,a={codebase:{agentId:r.id},agent:{id:r.id,name:r.name,connected:i,diskFreeBytes:r.diskFreeBytes,memoryFreeBytes:r.memoryFreeBytes}};await this.record("AGENT_CONNECTION",r.id,`agent-connection:${r.id}:${r.updatedAt.toISOString()}`,a,{cursorValue:i}),await this.record("AGENT_RESOURCE_THRESHOLD",r.id,`agent-resource:${r.id}:${r.updatedAt.toISOString()}`,a,{cursorValue:{diskFreeBytes:r.diskFreeBytes,memoryFreeBytes:r.memoryFreeBytes}}),await this.record("AGENT_VERSION_CHANGED",r.id,`agent-version:${r.id}:${r.version}`,{...a,agent:{...a.agent,version:r.version,osVersion:r.osVersion,architecture:r.architecture}},{cursorValue:r.version})}}finally{await e.return?.()}}}var sq=e.i(988349),sM=e.i(248626),sF=e.i(336921),sK=e.i(53803),sV=e.i(264977);async function sH(e,t){let r=e.trim();if(!r||r.length>5e4)throw Error(`Workflow script must contain 1–${5e4.toLocaleString()} characters`);let i=await (0,sK.getQuickJS)(),a=Date.now()+250;try{return i.evalCode(`"use strict"; const session = Object.freeze(${JSON.stringify(t)}); (${r})(session);`,{memoryLimitBytes:8388608,maxStackSizeBytes:524288,shouldInterrupt:(0,sV.shouldInterruptAfterDeadline)(a)})}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 sG{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 sW="workflows:changed",sJ=e=>`workflow-run:${e}`,sz=e=>`workflow-run:${e}:events`,sZ=e=>`workflow-run:${e}:questions`,sY=["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED"],sQ=new Set(["SUCCEEDED","FAILED","CANCELLED"]),sX=new Set(["SUCCEEDED","FAILED","CANCELLED","SKIPPED","SUPERSEDED"]),s0=new Set(["RUNNING","WAITING"]),s1=e=>JSON.parse(e);function s2(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()<=(0,a.agentOnlineWindowMs)(e)}:{},...void 0!==e.diskFreeBytes?{diskFreeBytes:e.diskFreeBytes}:{},...void 0!==e.memoryFreeBytes?{memoryFreeBytes:e.memoryFreeBytes}:{}}}}function s3(e){return(0,n$.mergeSessionData)(s2(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 s4(e,t,r){let i=e.trim();if(!i)throw Error(`${t} is required`);if(i.length>r)throw Error(`${t} is too long`);return i}function s6(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 s8(e,t){let r=e??("CONCURRENT"===t?4:1);if(!Number.isInteger(r)||r<1||r>32)throw Error("Maximum concurrent runs must be between 1 and 32");return r}function s5(e){return Array.isArray(e)?`[${e.map(s5).join(",")}]`:e&&"object"==typeof e?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${s5(t)}`).join(",")}}`:JSON.stringify(e)}function s9(e,t,r){if(Buffer.byteLength(e,"utf8")>r)throw Error(`${t} is too large`)}function s7(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e}function oe(e){r6.agentEventBus.publish(sW,{workflowChanged:{id:e}})}function ot(e){r6.agentEventBus.publish(sJ(e),{workflowRunChanged:{id:e}}),r6.agentEventBus.publish(sW,{workflowChanged:{id:"runs",runId:e}}),r6.agentEventBus.publish(r6.SIDEBAR_STATUS_CHANGED_TOPIC,{sidebarStatusChanged:!0})}function or(e){return[...ik.WORKFLOW_STEP_BY_KIND.get(e.kind).requiredPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.requiredPaths,...(0,sM.requiredConfigSessionPaths)(e.kind,"step",e.config)]}function oi(e){return[...ik.WORKFLOW_STEP_BY_KIND.get(e.kind).providedPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.providedPaths,`steps.${e.id}.*`]}async function oa(e){return(await e.workflowRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:2},update:{nextValue:{increment:1}}})).nextValue-1}class on{events;executor;checkpointRestorer;credentials;agentControl;notifications;runsService;worktrees;commandsService;jiraService;runtimeTimer;ticking;workerId;activeExecutions;claimedSecretJobs;waitPollers;constructor(e,t=new sG,r,i,a,n,s,o,l,u){this.events=e,this.executor=t,this.checkpointRestorer=r,this.credentials=i,this.agentControl=a,this.notifications=n,this.runsService=s,this.worktrees=o,this.commandsService=l,this.jiraService=u,this.ticking=!1,this.workerId=(0,y.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(sF.WORKFLOW_TERMINAL_JOB_KIND,e=>this.workflowAgentJobCompleted(e)),this.agentControl.registerCompletionObserver(e=>this.genericAgentJobCompleted(e)),this.agentControl.registerCompletionHandler(sF.WORKFLOW_GIT_CHECKPOINT_JOB_KIND,e=>this.workflowAgentJobCompleted(e)))}async controlLinkedAgentRuns(e,t){if(!this.runsService)return;let r=await (0,tX.getPrismaClient)(),i=await r.workflowRunResourceLink.findMany({where:{runId:e,kind:"AGENT_RUN",attempt:{status:{in:["RUNNING","WAITING"]}}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(i.map(async({resourceId:e})=>{let r=await this.runsService.get(e);!r||"MANAGED"!==r.origin||"PAUSE"===t&&"IN_PROGRESS"!==r.status||"CONTINUE"===t&&"PAUSED"!==r.status||"CANCEL"===t&&new Set(["COMPLETED","FAILED","CANCELLED"]).has(r.status)||await this.runsService.lifecycle(e,t)}))}async cancelWaitingCommandRuns(e){if(!this.commandsService)return;let t=await (0,tX.getPrismaClient)(),r=await t.workflowRunResourceLink.findMany({where:{runId:e,kind:"COMMAND_RUN",attempt:{status:"WAITING"}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(r.map(({resourceId:e})=>this.commandsService.terminateRun(e)))}async runWorktree(e){let t=(0,n$.getSessionValue)(s1(e),"worktree.id");return"string"==typeof t&&t?(await (0,tX.getPrismaClient)()).worktree.findUnique({where:{id:t},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):null}async notifyRun(e,t,r,i,a){if(!this.notifications)return;let n=await (0,tX.getPrismaClient)(),s=await n.workflowRun.findUnique({where:{id:e},select:{sessionDataJson:!0}}),o=s?await this.runWorktree(s.sessionDataJson):null,l=await n.$transaction(n=>this.notifications.recordInTransaction(n,{dedupeKey:`workflow:${e}:${a}`,typeKey:t,title:r,body:i,href:`/workflows/runs/${e}`,resourceKind:"WORKFLOW_RUN",resourceId:e,worktreeId:o?.id??null,highlightColor:o?.highlightColor??null}));this.notifications.created(l)}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:ik.WORKFLOW_SCHEMA_VERSION,globalConcurrency:4,steps:ik.WORKFLOW_STEP_CATALOG,triggers:ik.WORKFLOW_TRIGGER_CATALOG}}registerWaitPoller(e,t){this.waitPollers.set(e,t)}async list(e={}){let t=await (0,tX.getPrismaClient)(),r=Math.min(Math.max(e.first??100,1),200),i=e.archive?.toUpperCase()??"ACTIVE",a=e.search?.trim(),n=await t.workflow.findMany({where:{..."ALL"===i?{}:"ARCHIVED"===i?{archivedAt:{not:null}}:{archivedAt:null},...null===e.enabled||void 0===e.enabled?{}:{enabled:e.enabled},...a?{OR:[{name:{contains:a}},{description:{contains:a}}]}:{}},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}},_count:{select:{versions:!0,runs:!0}}},orderBy:[{updatedAt:"desc"},{id:"desc"}],take:r+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:n.slice(0,r),nextCursor:n.length>r?n[r-1].id:null,totalCount:await t.workflow.count()}}async get(e){return(await (0,tX.getPrismaClient)()).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 (0,tX.getPrismaClient)()).workflowVersion.findUnique({where:{id:e},include:{triggers:!0}})}async create(e){let t=s4(e.name,"Workflow name",200),r=(0,ik.parseWorkflowDefinition)(e.definition??(0,ik.emptyWorkflowDefinition)(t)),i=JSON.stringify({...r,name:t,description:e.description?.trim()??r.description});s9(i,"Workflow definition",2097152);let a=s6(e.overlapPolicy),n=await (0,tX.getPrismaClient)(),s=await n.workflow.create({data:{id:(0,y.randomUUID)(),name:t,description:e.description?.trim()??r.description,draftDefinitionJson:i,draftSchemaVersion:ik.WORKFLOW_SCHEMA_VERSION,overlapPolicy:a,maxConcurrentRuns:s8(e.maxConcurrentRuns,a)}});return oe(s.id),this.get(s.id)}async saveDraft(e){let t=(0,ik.parseWorkflowDefinition)(e.definition),r=JSON.stringify(t);s9(r,"Workflow definition",2097152);let i=await this.get(e.id);if(!i)throw Error("Workflow not found");let a=s6(e.overlapPolicy??i.overlapPolicy),n=await (0,tX.getPrismaClient)();return await n.workflow.update({where:{id:e.id},data:{name:t.name,description:t.description,draftDefinitionJson:r,draftSchemaVersion:t.schemaVersion,overlapPolicy:a,maxConcurrentRuns:s8(e.maxConcurrentRuns??i.maxConcurrentRuns,a)}}),oe(e.id),this.get(e.id)}async validateDraft(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let r=(0,ik.validateWorkflowDefinition)(s1(t.draftDefinitionJson)),i=[...r.diagnostics];return r.definition&&i.push(...await this.validateSubworkflows(t.id,r.definition)),{valid:!(0,ik.hasWorkflowErrors)(i),diagnostics:i}}async validateSubworkflows(e,t){let r=t.nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(e=>({node:e,versionId:e.config.versionId})).filter(e=>"string"==typeof e.versionId);if(!r.length)return[];let i=await (0,tX.getPrismaClient)(),a=new Map,n=new Map,s=new Set,o=new Set,l=r.map(({versionId:e})=>e);for(;l.length;){let e=[...new Set(l)].filter(e=>!o.has(e));if(!e.length)break;for(let t of(e.forEach(e=>o.add(e)),l=[],await i.workflowVersion.findMany({where:{id:{in:e}}}))){a.set(t.id,t);try{let e=(0,ik.parseWorkflowDefinition)(s1(t.definitionJson)).nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(({config:e})=>e.versionId).filter(e=>"string"==typeof e);n.set(t.id,e),l.push(...e)}catch{s.add(t.id)}}}let u=(e,t)=>{let r=a.get(e);if(!r)return"MISSING";if(s.has(e))return"INVALID";if(t.has(r.workflowId))return"RECURSIVE";let i=new Set(t).add(r.workflowId);for(let t of n.get(e)??[]){let e=u(t,i);if(e)return e}return null},c=[];for(let{node:t,versionId:i}of r){let r=u(i,new Set([e]));"MISSING"===r?c.push({severity:"ERROR",code:"SUBWORKFLOW_NOT_FOUND",message:"Pinned sub-workflow chain contains a missing version",nodeId:t.id}):"INVALID"===r?c.push({severity:"ERROR",code:"SUBWORKFLOW_INVALID",message:"Pinned sub-workflow chain contains an invalid definition",nodeId:t.id}):"RECURSIVE"===r&&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 r=(0,ik.parseWorkflowDefinition)(s1(t.draftDefinitionJson)),i=await this.validateDraft(e);if(!i.valid)throw Error(`Workflow cannot be published: ${i.diagnostics.filter(({severity:e})=>"ERROR"===e).map(({message:e})=>e).slice(0,5).join("; ")}`);let a=await (0,tX.getPrismaClient)(),n=await a.$transaction(async t=>{let i=await t.workflowVersion.findFirst({where:{workflowId:e},orderBy:{version:"desc"}}),a=(0,y.randomUUID)(),n=await t.workflowVersion.create({data:{id:a,workflowId:e,version:(i?.version??0)+1,name:r.name,description:r.description,schemaVersion:r.schemaVersion,definitionJson:JSON.stringify(r),contentHash:(0,y.createHash)("sha256").update(s5(r)).digest("hex"),triggers:{create:r.triggers.map(e=>({id:(0,y.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:a}}),n});return oe(e),n}async setEnabled(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.workflow.findUnique({where:{id:e}});if(!i)throw Error("Workflow not found");if(t&&!i.activeVersionId)throw Error("Publish the workflow before enabling it");return await r.workflow.update({where:{id:e},data:{enabled:t}}),oe(e),this.get(e)}async setQuickAction(e){let t=await (0,tX.getPrismaClient)(),r=[...new Set(e.repositoryIds.map(e=>e.trim()).filter(Boolean))],[i,a]=await Promise.all([t.workflow.findUnique({where:{id:e.id},select:{id:!0}}),t.codebaseRepository.count({where:{id:{in:r}}})]);if(!i)throw Error("Workflow not found");if(a!==r.length)throw Error("One or more repositories were not found");let n=e.quickActionIconKey.trim();if(!iS.WORKFLOW_QUICK_ACTION_KINDS.includes(e.kind))throw Error("Quick action kind is invalid");if("none"!==n&&!w.BUILD_CONFIGURATION_ICON_KEYS.includes(n))throw Error("Quick action icon is invalid");let s=e.quickActionButtonVariant.trim();if(!["default","outline","secondary","destructive"].includes(s))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:s}}),await t.workflowQuickActionRepository.deleteMany({where:{workflowId:e.id}}),r.length&&await t.workflowQuickActionRepository.createMany({data:r.map(t=>({workflowId:e.id,repositoryId:t}))})}),oe(e.id),this.get(e.id)}async archive(e,t){let r=await (0,tX.getPrismaClient)();return await r.workflow.update({where:{id:e},data:{archivedAt:t?new Date:null,...t?{enabled:!1}:{}}}),oe(e),this.get(e)}async delete(e){let t=await (0,tX.getPrismaClient)();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}}),oe(e),!0}export(e,t){return this.exportInternal(e,t)}async exportInternal(e,t){let 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 a=(0,ik.parseWorkflowDefinition)(s1(i?.definitionJson??r.draftDefinitionJson));return{format:"aide.workflow.export",schemaVersion:ik.WORKFLOW_SCHEMA_VERSION,exportedAt:new Date().toISOString(),workflow:{name:i?.name??r.name,description:i?.description??r.description,overlapPolicy:r.overlapPolicy,maxConcurrentRuns:r.maxConcurrentRuns,definition:(0,ik.sanitizeWorkflowExportDefinition)(a)}}}async import(e){s9("string"==typeof e.payload?e.payload:JSON.stringify(e.payload),"Workflow import",2097152);let t=s7("string"==typeof e.payload?JSON.parse(e.payload):e.payload,"Workflow import"),r="aide.workflow.export"===t.format,i=r?s7(t.workflow,"Exported workflow"):t,a=(0,ik.parseWorkflowDefinition)(r?i.definition:i);return this.create({name:e.name?.trim()||a.name,description:a.description,definition:{...a,name:e.name?.trim()||a.name},overlapPolicy:"string"==typeof i.overlapPolicy?i.overlapPolicy:"QUEUE",maxConcurrentRuns:"number"==typeof i.maxConcurrentRuns?i.maxConcurrentRuns:1})}async runs(e={}){let t=await (0,tX.getPrismaClient)(),r=Math.min(Math.max(e.first??100,1),200),i=Number(e.search),a=e.archive?.toUpperCase()??"ACTIVE",n="ALL"===a?{}:"ARCHIVED"===a?{archivedAt:{not:null}}:{archivedAt:null},s=await t.workflowRun.findMany({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{},...e.status?{status:e.status.toUpperCase()}:{},...Number.isInteger(i)&&i>0?{displayNumber:i}: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:r+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:s.slice(0,r),nextCursor:s.length>r?s[r-1].id:null,totalCount:await t.workflowRun.count({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{}}})}}async archiveRuns(e,t){let r=await (0,tX.getPrismaClient)(),i=[...new Set(e)],a=await r.workflowRun.updateMany({where:{id:{in:i}},data:{archivedAt:t?new Date:null}});for(let e of i)ot(e);return a.count}async deleteRuns(e){let t=await (0,tX.getPrismaClient)(),r=[...new Set(e)];if(await t.workflowRun.count({where:{id:{in:r},status:{notIn:["SUCCEEDED","FAILED","CANCELLED"]}}}))throw Error("Cancel runs that have not finished before deleting them");let i=await t.workflowRun.deleteMany({where:{id:{in:r}}});for(let e of r)ot(e);return i.count}async run(e){return(await (0,tX.getPrismaClient)()).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,r=500){return(await (0,tX.getPrismaClient)()).workflowRunEvent.findMany({where:{runId:e,sequence:{gt:t}},orderBy:{sequence:"asc"},take:Math.min(Math.max(r,1),1e3)})}async questionBatch(e){return(await (0,tX.getPrismaClient)()).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 r=await this.agentControl.getJob(t);if(!r||r.agentId!==e||"workflow.terminal.run"!==r.kind||"RUNNING"!==r.status)throw Error("Workflow job is not eligible to claim secrets");let i=(0,sF.parseWorkflowTerminalPayload)(s1(r.payloadJson)),a=new Set(Object.values(t1.CREDENTIAL_KINDS)),n=[];for(let e of i.credentialEnvironment){if(!a.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 (0,tX.getPrismaClient)(),r=(0,n$.getSessionValue)(e,"worktree.id");if("string"==typeof r){let e=await t.worktree.findUnique({where:{id:r},include:{codebase:{include:{agent:!0}}}});if(!e)throw Error("Workflow worktree is unavailable");let i=JSON.parse(e.codebase.agent.capabilitiesJson);return{agentId:e.codebase.agentId,codebaseId:e.codebaseId,worktreeId:e.id,cwd:e.folder,capabilities:Array.isArray(i)?i.filter(e=>"string"==typeof e):[]}}let i=(0,n$.getSessionValue)(e,"codebase.id");if("string"!=typeof i)throw Error("Workflow requires a codebase or worktree");let a=await t.codebase.findUnique({where:{id:i},include:{agent:!0}});if(!a)throw Error("Workflow codebase is unavailable");let n=JSON.parse(a.agent.capabilitiesJson);return{agentId:a.agentId,codebaseId:a.id,worktreeId:null,cwd:a.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(sF.WORKFLOW_TERMINAL_JOB_KIND))throw Error("The selected agent must be updated to run workflow terminal steps");let r={...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((0,n$.getSessionValue)(e.sessionData,"ticket.key")??""),AIDE_TICKET_TITLE:String((0,n$.getSessionValue)(e.sessionData,"ticket.title")??""),AIDE_BRANCH:String((0,n$.getSessionValue)(e.sessionData,"worktree.branch")??""),AIDE_BASE_BRANCH:String((0,n$.getSessionValue)(e.sessionData,"worktree.baseBranch")??""),AIDE_WORKTREE_PATH:String((0,n$.getSessionValue)(e.sessionData,"worktree.path")??t.cwd),AIDE_CODEBASE_PATH:String((0,n$.getSessionValue)(e.sessionData,"codebase.folder")??t.cwd),AIDE_REPO_ORIGIN:String((0,n$.getSessionValue)(e.sessionData,"repo.displayOrigin")??"")},i=Array.isArray(e.node.config.credentials)?e.node.config.credentials:[],a=await this.agentControl.createJob({agentId:t.agentId,kind:sF.WORKFLOW_TERMINAL_JOB_KIND,payload:{workflowRunId:e.run.id,stepAttemptId:e.attempt.id,stepId:e.node.id,codebaseId:t.codebaseId,worktreeId:t.worktreeId,cwd:t.cwd,script:s4(String(e.node.config.script??""),"Terminal script",1e6),interpreter:"NODE"===e.node.config.interpreter?"NODE":"SHELL",sessionData:e.sessionData,environment:r,credentialEnvironment:i},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:Number(e.node.config.timeoutSeconds??900),codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:a.id},links:[{kind:"AGENT_JOB",resourceId:a.id,label:"Workflow terminal job",url:`/jobs/${a.id}`}],wait:{kind:"AGENT_JOB",externalKey:a.id,resumeAfter:so(e.node.config),timeoutAt:sn(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(sF.WORKFLOW_GIT_CHECKPOINT_JOB_KIND))throw Error("The selected agent must be updated to capture workflow checkpoints");let r=await this.agentControl.createJob({agentId:t.agentId,kind:sF.WORKFLOW_GIT_CHECKPOINT_JOB_KIND,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:r.id},links:[{kind:"AGENT_JOB",resourceId:r.id,label:"Workflow checkpoint job",url:`/jobs/${r.id}`}],wait:{kind:"AGENT_JOB",externalKey:r.id,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}}}async workflowAgentJobCompleted(e){if(e.kind===sF.WORKFLOW_TERMINAL_JOB_KIND){let t=(0,sF.parseWorkflowTerminalPayload)(s1(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 r=s7(s1(e.resultJson),"Workflow terminal result");return void await this.resolveExternalWait("AGENT_JOB",e.id,{...r,jobId:e.id,stepAttemptId:t.stepAttemptId})}if(e.kind!==sF.WORKFLOW_GIT_CHECKPOINT_JOB_KIND)return;let t=(0,sF.parseWorkflowGitCheckpointPayload)(s1(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 r=s7(s1(e.resultJson),"Workflow checkpoint result"),i=null;if(r.checkpoint&&"object"==typeof r.checkpoint){let e=r.checkpoint,a=await (0,tX.getPrismaClient)();i=(0,y.randomUUID)(),await a.$transaction([a.runCheckpoint.create({data:{id:i,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 r.stashRef?r.stashRef:"string"==typeof e.stashRef?e.stashRef:null}}),a.workflowRunResourceLink.create({data:{id:(0,y.randomUUID)(),runId:t.workflowRunId,attemptId:t.stepAttemptId,kind:"CHECKPOINT",resourceId:i,label:`${String(e.kind??t.kind)} checkpoint`}})])}await this.resolveExternalWait("AGENT_JOB",e.id,{...r,jobId:e.id,checkpointId:i})}async genericAgentJobCompleted(e){if(e.kind===sF.WORKFLOW_TERMINAL_JOB_KIND||e.kind===sF.WORKFLOW_GIT_CHECKPOINT_JOB_KIND)return;let t=e.resultJson?s7(s1(e.resultJson),"Agent job result"):{status:e.status};if("SUCCEEDED"===e.status){let r=await (0,tX.getPrismaClient)(),i=t.worktree&&"object"==typeof t.worktree&&!Array.isArray(t.worktree)?t.worktree:null,a=i&&"string"==typeof i.gitDirectory?i.gitDirectory:null,n=e.codebaseId?await r.worktree.findFirst({where:{codebaseId:e.codebaseId,...e.worktreeId?{id:e.worktreeId}:a?{gitDirectory:a}:{id:"__missing__"}},include:{codebase:{include:{repository:!0,agent:!0}}}}):null,s=n?.codebase??(e.codebaseId?await r.codebase.findUnique({where:{id:e.codebaseId},include:{repository:!0,agent:!0}}):null),o={};if(n&&this.worktrees?.workflowSessionDataForWorktree)try{o=await this.worktrees.workflowSessionDataForWorktree(n.id,{includeMissing:!0})}catch{}if(s&&!o.codebase&&(o.repo={id:s.repository.id,name:s.repository.name,url:s.repository.displayOrigin,canonicalOrigin:s.repository.canonicalOrigin,displayOrigin:s.repository.displayOrigin,defaultBranch:s.defaultBranch},o.codebase={id:s.id,folder:s.folder,agentId:s.agentId,branch:s.defaultBranch,headSha:s.headSha},o.agent={id:s.agent.id,name:s.agent.name,hostname:s.agent.hostname}),n&&!o.worktree&&(o.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(o).length){let e=t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)?t.sessionPatch:{};t={...t,sessionPatch:(0,n$.mergeSessionData)(e,o)}}}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 r=await (0,tX.getPrismaClient)(),i=await r.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),a=i?.workflowStepAttempt;if(!i||!a)throw Error("Workflow checkpoint not found");let n=await this.workflowAgentContext((0,n$.workflowSessionData)(a.run.sessionDataJson)),s=await this.agentControl.createJob({agentId:n.agentId,kind:sF.WORKFLOW_GIT_CHECKPOINT_JOB_KIND,payload:{operation:"RESTORE",workflowRunId:a.runId,stepAttemptId:a.id,cwd:n.cwd,kind:"REPLAY_RESTORE",checkpoint:{headSha:i.headSha,branch:i.branch,upstreamSha:i.upstreamSha,indexTree:i.indexTree,worktreeTree:i.worktreeTree,refName:i.refName},stash:t.stash},idempotencyKey:`workflow:restore:${e}:${(0,y.randomUUID)()}`,timeoutSeconds:300,codebaseId:n.codebaseId,worktreeId:n.worktreeId,visibility:"SYSTEM"}),o=Date.now()+3e5;for(;Date.now()<o;){let e=await this.agentControl.getJob(s.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(s.id),Error("Workflow restore job timed out")}async compareCheckpointWithAgent(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await (0,tX.getPrismaClient)(),r=await t.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow checkpoint not found");let a=await this.workflowAgentContext((0,n$.workflowSessionData)(i.run.sessionDataJson)),n=await this.agentControl.createJob({agentId:a.agentId,kind:sF.WORKFLOW_GIT_CHECKPOINT_JOB_KIND,payload:{operation:"COMPARE",workflowRunId:i.runId,stepAttemptId:i.id,cwd:a.cwd,kind:"REPLAY_PREVIEW",checkpoint:{headSha:r.headSha,branch:r.branch,upstreamSha:r.upstreamSha,indexTree:r.indexTree,worktreeTree:r.worktreeTree,refName:r.refName},stash:!1},idempotencyKey:`workflow:compare:${e}:${(0,y.randomUUID)()}`,timeoutSeconds:60,codebaseId:a.codebaseId,worktreeId:a.worktreeId,visibility:"SYSTEM"}),s=Date.now()+6e4;for(;Date.now()<s;){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=s7(s1(e.resultJson),"Workflow comparison result");return s7(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 r=await (0,tX.getPrismaClient)(),i=await r.workflowRunResourceLink.findMany({where:{kind:e.trim().toUpperCase(),resourceId:t.trim()},select:{runId:!0},distinct:["runId"],orderBy:{createdAt:"desc"}});return r.workflowRun.findMany({where:{id:{in:i.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(),r=await (0,tX.getPrismaClient)();return(await r.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:!0},orderBy:{name:"asc"}})).filter(e=>!!e.activeVersion&&(0,ik.parseWorkflowDefinition)(s1(e.activeVersion.definitionJson)).triggers.some(e=>(0,iS.isResourceTriggerKind)(e.kind)&&(0,ik.workflowResourceKind)(e.config)===t))}async quickActions(e){let t=await (0,tX.getPrismaClient)();if(!iS.WORKFLOW_QUICK_ACTION_KINDS.includes(e.kind))throw Error("Quick action kind is invalid");let r=e.resourceKind.trim().toUpperCase(),i=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:i??""}}}]},include:{activeVersion:!0},orderBy:[{name:"asc"},{id:"asc"}]})).filter(e=>!!e.activeVersion&&(0,ik.parseWorkflowDefinition)(s1(e.activeVersion.definitionJson)).triggers.some(e=>(0,iS.isResourceTriggerKind)(e.kind)&&(0,ik.workflowResourceKind)(e.config)===r))}async recordEvent(e){return this.events.record(e)}async hydrateResourceSessionData(e,t,r){let i=e?.toUpperCase()??null,a=await (0,tX.getPrismaClient)(),n={},s=null;if("CODEBASE"===i&&t){let e=await a.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=s3(e))}if("BUILD"===i&&t){let e=await a.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){s=e.worktreeId;let t=t=>{let r=e.reports.find(e=>e.kind===t);if(r)try{return(0,n$.workflowSessionData)(r.summaryJson)}catch{return}},r=t("TEST_RESULTS"),i=t("CODE_COVERAGE");n=(0,n$.mergeSessionData)(e.codebase?s3(e.codebase):e.agent?s2(e.agent):{},{build:{id:e.id,status:e.status,action:e.action,error:e.error,artifactDirectory:e.artifactDirectory,artifacts:e.artifacts,...r?{testSummary:r}:{},...i?{coverageSummary:i}:{}}})}}if("AGENT_RUN"===i&&t){let e=await a.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&&(s=e.worktreeId,n=(0,n$.mergeSessionData)(e.agent?s2(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"===i&&t&&this.worktrees?.workflowSessionDataForPullRequest){let e=/^([^/]+)\/([^#]+)#([1-9]\d*)$/.exec(t);e&&(n=(0,n$.mergeSessionData)(n,await this.worktrees.workflowSessionDataForPullRequest(e[1],e[2],Number(e[3]))))}if("JIRA_TICKET"===i&&t&&this.jiraService)try{let e=await this.jiraService.ticket(t),r=e.comments.at(-1)??null;n=(0,n$.mergeSessionData)(n,{ticket:{...e,title:e.summary,type:e.issueType,url:e.jiraUrl},...r?{comment:{id:r.id,body:r.content?.rawText??"",author:r.author}}:{}})}catch{}let o=(0,n$.getSessionValue)(r,"worktree.id"),l="WORKTREE"===i?t:"GITHUB_PIPELINE"===i||"GITHUB_JOB"===i?"string"==typeof o?o:null:s;if(l&&this.worktrees)if(this.worktrees.workflowSessionDataForWorktree)n=(0,n$.mergeSessionData)(await this.worktrees.workflowSessionDataForWorktree(l),n);else{let e=await this.worktrees.ticketKeyForWorktree(l);e&&(n=(0,n$.mergeSessionData)({ticket:{key:e}},n))}let u=(0,n$.getSessionValue)(r,"pipeline.pullRequests");!(0,n$.getSessionValue)(n,"pr")&&!(0,n$.getSessionValue)(r,"pr")&&Array.isArray(u)&&u[0]&&"object"==typeof u[0]&&!Array.isArray(u[0])&&(n=(0,n$.mergeSessionData)(n,{pr:u[0]}));let c=(0,n$.getSessionValue)(r,"pr.jiraKey")??(0,n$.getSessionValue)(r,"pipeline.jiraKey");return"string"!=typeof(0,n$.getSessionValue)(n,"ticket.key")&&"string"==typeof c&&c.trim()&&(n=(0,n$.mergeSessionData)(n,{ticket:{key:c}})),(0,n$.mergeSessionData)(n,r)}async trigger(e){let t=await (0,tX.getPrismaClient)(),r=await t.workflow.findUnique({where:{id:e.workflowId},include:{activeVersion:{include:{triggers:!0}}}});if(!r?.activeVersion)throw Error("Published workflow not found");if(!r.enabled||r.archivedAt)throw Error("Workflow is paused");let i=e.resourceKind?.toUpperCase()??null,a=e.choice?.trim()||null,{triggers:n}=r.activeVersion,s=i?"RESOURCE_MANUAL":"MANUAL",o=i?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE",l=e=>n.find(t=>t.kind===e&&(!i||(0,ik.workflowResourceKind)(s7(s1(t.configJson),"Trigger configuration"))===i))??null,u=l(o),c=l(s),d=a?u:c;if(a&&!u)throw Error(i?`No resource trigger offers choices for ${i} resources`:"This workflow has no manual trigger with choices");if(!a&&!c&&u){let e=(0,ik.workflowTriggerChoices)(s7(s1(u.configJson),"Trigger configuration"));throw Error(`This workflow needs a choice: ${e.map(({key:e})=>e).join(", ")}`)}if(i&&!d)throw Error(`No resource trigger accepts ${e.resourceKind} resources`);if(a&&u&&!(0,ik.workflowTriggerChoices)(s7(s1(u.configJson),"Trigger configuration")).some(({key:e})=>e===a))throw Error(`Unknown choice ${a}`);let p=e.subjectKey?.trim()||(i&&e.resourceId?`${i}:${e.resourceId}`:`manual:${(0,y.randomUUID)()}`),h={sessionData:await this.hydrateResourceSessionData(e.resourceKind,e.resourceId,e.sessionData??{}),resourceKind:e.resourceKind??null,resourceId:e.resourceId??null,choice:a,manual:!0},m=await this.createRunForTrigger(r,r.activeVersion,d,null,a?o:s,p,h,`manual:${r.id}:${(0,y.randomUUID)()}`);return ot(m.id),this.run(m.id)}async createRunForTrigger(e,t,r,i,a,n,s,o,l=null,u=null){return(await (0,tX.getPrismaClient)()).$transaction(async c=>{if(u){let e=await c.workflowTriggerDelivery.findUnique({where:{id:u},include:{run:!0}});if(e)return e.run}let d=async e=>(u&&await c.workflowTriggerDelivery.create({data:{id:u,runId:e.id}}),e),p=await c.workflowRun.findUnique({where:{idempotencyKey:o}});if(p)return d(p);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 d(await c.workflowRun.update({where:{id:t.id},data:{triggerId:r?.id??null,triggerEventId:i,triggerKind:a,triggerPayloadJson:JSON.stringify(s),queuedAt:new Date}}))}let h=(0,y.randomUUID)(),m=s7(s.sessionData??{},"Session data"),f=JSON.stringify((0,n$.mergeSessionData)({workflow:{id:e.id,name:t.name,runId:h,startedAt:null,trigger:{id:r?.nodeId??null,kind:a,subjectKey:n,choice:"string"==typeof s.choice?s.choice:null}},steps:{}},m));s9(f,"Workflow session data",2097152);let g=await c.workflowRun.create({data:{id:h,displayNumber:await oa(c),workflowId:e.id,versionId:t.id,triggerId:r?.id??null,triggerEventId:i,parentRunId:l,idempotencyKey:o,triggerKind:a,triggerSubjectKey:n,triggerPayloadJson:JSON.stringify(s),sessionDataJson:f}}),w=function(e,t){let r=e.trim().toUpperCase(),i=n6(t.sessionData);if((0,iS.isResourceTriggerKind)(r)){let e=t.resourceKind,r="string"==typeof e?e.toUpperCase():null,a="GITHUB_JOB"===r?n8(i,"job","url"):"GITHUB_PIPELINE"===r?n8(i,"pipeline","url"):null;return"string"==typeof e?n5(e.toUpperCase(),t.resourceId,{url:"string"==typeof a?a:null,metadata:"AGENT_RUN"===e.toUpperCase()?{runKind:n8(i,"run","kind")}:null}):null}if(n9.has(r))return n5("JIRA_TICKET",n8(i,"ticket","key"));if(n7.has(r))return n5("AGENT_RUN",n8(i,"run","id"),{metadata:{runKind:n8(i,"run","kind")}});if(se.has(r))return n5("BUILD",n8(i,"build","id"));if(st.has(r))return n5("WORKTREE",n8(i,"worktree","id"));if("CODEBASE_REMOTE_BRANCH"===r||"CODEBASE_SYNC_STATE_CHANGED"===r||"CODEBASE_OPERATION_FAILED"===r)return n5("CODEBASE",n8(i,"codebase","id"));if("COMMAND_RUN_RESULT"===r||"COMMAND_OUTPUT_MATCH"===r)return n5("COMMAND_RUN",n8(i,"command","id"));if("SKILL_SYNC_RESULT"===r||"SKILL_SYNC_CONFLICT"===r)return n5("SKILL_SYNC",n8(i,"skillSync","id"));if("IOS_DEVICE_ENROLLED"===r||"IOS_DEVICE_REGISTRATION_RESULT"===r)return n5("IOS_DEVICE",n8(i,"device","id"));if("SIGNING_OPERATION_RESULT"===r||"SIGNING_ASSET_EXPIRING"===r)return n5("SIGNING_PROFILE",n8(i,"signingProfile","id"));if("PUSH_NOTIFICATION_RESULT"===r)return n5("PUSH_NOTIFICATION_BATCH",n8(i,"pushBatch","id"));if("BUILD_DATA_THRESHOLD"===r||"BUILD_DATA_CLEANUP_RESULT"===r)return n5("BUILD_DATA_COLLECTION",n8(i,"buildData","id"));if("AGENT_JOB_FAILED"===r)return n5("AGENT_JOB",n8(n6(i.steps),"trigger","id"));if("AGENT_CONNECTION"===r||"AGENT_DISK_REPORT"===r||"AGENT_DISK_THRESHOLD"===r||"AGENT_DISK_STATE_CHANGED"===r||"AGENT_DISK_CLEANUP_RESULT"===r||"CCUSAGE_THRESHOLD"===r)return n5("AGENT",n8(i,"agent","id")??n8(i,"codebase","agentId"));if("WORKFLOW_FINISHED"===r)return n5("WORKFLOW_RUN",n8(t,"run","id"));if(sr.has(r)){let e=function(e){if("string"!=typeof e)return null;let t=e.trim(),r=t.match(/(?:https?:\/\/|ssh:\/\/git@|git@)?github\.com[/:]([^/]+)\/([^/#]+?)(?:\.git)?$/i)??t.match(/^([^/:]+)\/([^/#]+?)(?:\.git)?$/);return r?.[1]&&r[2]?{owner:r[1],repository:r[2]}:null}(n8(i,"repo","displayOrigin")),t=Number(n8(i,"pr","number"));return e&&Number.isInteger(t)&&t>0?n5("PULL_REQUEST",n4(e.owner,e.repository,t)):null}if(si.has(r)){let e=n8(i,"pipeline","url");return n5("GITHUB_WORKFLOW_RUN",n8(i,"pipeline","runId"),{url:"string"==typeof e?e:null})}return"GITHUB_PUSH_DEFAULT"===r?n5("CODEBASE_REPOSITORY",n8(i,"repo","id")):null}(a,s);return w&&await c.workflowRunResourceLink.create({data:{id:(0,y.randomUUID)(),runId:g.id,kind:w.kind.toUpperCase(),resourceId:w.resourceId,label:w.label??null,url:w.url??null,metadataJson:w.metadata?JSON.stringify(w.metadata):null}}),d(g)})}async processTriggerEvents(){let e=await (0,tX.getPrismaClient)(),t=await e.workflowTriggerEvent.findMany({where:{status:"PENDING"},orderBy:{receivedAt:"asc"},take:50});if(!t.length)return;let r=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:!0}}}});for(let s of t)try{let t=s7(s1(s.payloadJson),"Trigger payload");for(let o of r)if(o.activeVersion)for(let r of o.activeVersion.triggers.filter(({kind:e})=>e===s.kind)){var i,a,n;if(t.workflowCorrelation&&"object"==typeof t.workflowCorrelation&&t.workflowCorrelation.workflowId===o.id)continue;let l=(i=s.dedupeKey,a=o.id,n=r.nodeId,(0,y.createHash)("sha256").update(JSON.stringify([i,a,n])).digest("hex"));if(await e.workflowTriggerDelivery.findUnique({where:{id:l},select:{id:!0}})||!await this.triggerMatches(r,s.subjectKey,t))continue;let u=await this.createRunForTrigger({...o,activeVersion:o.activeVersion},o.activeVersion,r,s.id,s.kind,s.subjectKey,t,l,null,l);ot(u.id)}await e.workflowTriggerEvent.delete({where:{id:s.id}})}catch(t){await e.workflowTriggerEvent.update({where:{id:s.id},data:{status:"FAILED",processedAt:new Date,error:t instanceof Error?t.message:String(t)}})}}async triggerMatches(e,t,r){let i,a=(0,n$.resolveWorkflowValue)(s7(s1(e.configJson),"Trigger configuration"),r),n=null;if(void 0!==r.cursorValue&&("string"!=typeof a.thresholdPath||"string"!=typeof a.thresholdOperator)){let a=await (0,tX.getPrismaClient)(),s=await a.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});if(n=s5(i=s?.cursorJson?s7(s1(s.cursorJson),"Trigger cursor").value:void 0)!==s5(r.cursorValue),"WORKTREE_CLEAN"===e.kind&&(n=!0===i&&!1===r.cursorValue),"JIRA_SPRINT_STARTED"===e.kind||"JIRA_SPRINT_ENDED"===e.kind){let e=Array.isArray(i)?i:null,t=Array.isArray(r.cursorValue)?r.cursorValue:null;n=null!==e&&null!==t&&t.some(t=>!e.some(e=>s5(e)===s5(t)))}await a.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,y.randomUUID)(),triggerId:e.id,subjectKey:t,cursorJson:JSON.stringify({value:r.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}},update:{cursorJson:JSON.stringify({value:r.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}}})}if("GITHUB_ISSUE_COMMAND"===e.kind){let e=(0,n$.getSessionValue)(r,"comment.author.login"),t=(0,n$.getSessionValue)(r,"comment.body"),i=Array.isArray(a.allowedLogins)?a.allowedLogins:[];if("string"!=typeof e||!i.includes(e)||"string"!=typeof t||"string"!=typeof a.commandPattern||!new RegExp(a.commandPattern).test(t))return!1}if("COMMAND_OUTPUT_MATCH"===e.kind){let e=(0,n$.getSessionValue)(r,"output.data");if("string"!=typeof e||"string"!=typeof a.outputPattern||!new RegExp(a.outputPattern).test(e))return!1}if("WORKTREE_CONFLICT"===e.kind&&!0!==(0,n$.getSessionValue)(r,"worktree.conflicted")||"WORKTREE_MISSING"===e.kind&&null==(0,n$.getSessionValue)(r,"worktree.missingAt")||"WORKTREE_DIVERGED"===e.kind&&"DIVERGED"!==(0,n$.getSessionValue)(r,"worktree.pushStatus"))return!1;if(a.filters&&"object"==typeof a.filters)for(let[e,t]of Object.entries(a.filters)){let i=(0,n$.getSessionValue)(r,e);if(Array.isArray(t)){if(!t.some(e=>s5(e)===s5(i)))return!1}else if(s5(t)!==s5(i))return!1}if("string"==typeof a.thresholdPath&&"string"==typeof a.thresholdOperator){let i={op:a.thresholdOperator,left:{source:"SESSION",path:a.thresholdPath},right:a.thresholdValue},n=(0,n$.evaluateWorkflowCondition)(i,r),s=await (0,tX.getPrismaClient)(),o=await s.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});return await s.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,y.randomUUID)(),triggerId:e.id,subjectKey:t,lastMatched:n,cursorJson:JSON.stringify({value:(0,n$.getSessionValue)(r,a.thresholdPath)}),...n?{lastFiredAt:new Date}:{}},update:{lastMatched:n,cursorJson:JSON.stringify({value:(0,n$.getSessionValue)(r,a.thresholdPath)}),...n&&!o?.lastMatched?{lastFiredAt:new Date}:{}}}),n&&!o?.lastMatched}return n??!0}async processSchedules(){let e=await (0,tX.getPrismaClient)(),t=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:{where:{kind:"SCHEDULE"},include:{states:!0}}}}}}),r=new Date;for(let i of t)for(let t of i.activeVersion?.triggers??[]){let a=s7(s1(t.configJson),"Schedule configuration"),n=Number(a.cadenceSeconds);if(!Number.isInteger(n)||n<1)continue;let s=i.id,o=t.states.find(e=>e.subjectKey===s);if(!o){let i="string"==typeof a.firstRunAt?new Date(a.firstRunAt):null,l=i&&Number.isFinite(i.getTime())?i:new Date(r.getTime()+1e3*n);o=await e.workflowTriggerState.create({data:{id:(0,y.randomUUID)(),triggerId:t.id,subjectKey:s,nextScheduledAt:l}})}if(!o.nextScheduledAt||o.nextScheduledAt>r)continue;let l=o.nextScheduledAt,u=new Date(Math.max(r.getTime(),l.getTime())+1e3*n);await e.workflowTriggerState.update({where:{id:o.id},data:{lastFiredAt:r,nextScheduledAt:u}}),await this.events.record({kind:"SCHEDULE",subjectKey:s,dedupeKey:`schedule:${t.id}:${l.toISOString()}`,payload:{sessionData:{},scheduledFor:l.toISOString(),cadenceSeconds:n}})}}async lifecycle(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.workflowRun.findUnique({where:{id:e}});if(!i)throw Error("Workflow run not found");if("PAUSE"===t){if(!new Set(["RUNNING","WAITING","BLOCKED"]).has(i.status))throw Error("Only an active workflow run can be paused");if(!await r.$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"!==i.status)throw Error("Only a paused workflow run can be resumed");if(!(await r.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(sQ.has(i.status))return this.run(e);for(let[t,i]of(await this.controlLinkedAgentRuns(e,"CANCEL"),await this.cancelWaitingCommandRuns(e),this.activeExecutions)){let a=await r.workflowStepAttempt.findUnique({where:{id:t},select:{runId:!0}});a?.runId===e&&i.abort()}if(!await r.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{notIn:[...sQ]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:{notIn:[...sX]}},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 ot(e),this.run(e)}async repairRunData(e,t){let r=s7(t,"Session data patch"),i=await (0,tX.getPrismaClient)(),a=await i.workflowRun.findUnique({where:{id:e}});if(!a)throw Error("Workflow run not found");if(!new Set(["BLOCKED","PAUSED"]).has(a.status))throw Error("Only blocked or paused workflows accept repair data");let n=(0,n$.workflowSessionData)(a.sessionDataJson),s=(0,n$.getSessionValue)(n,"workflow"),o=(0,n$.mergeSessionData)(n,r);s&&"object"==typeof s&&(o=(0,n$.setSessionValue)(o,"workflow",s));let l=JSON.stringify(o);return s9(l,"Workflow session data",2097152),await i.$transaction([i.workflowRun.update({where:{id:e},data:{sessionDataJson:l,sessionRevision:{increment:1},status:"PAUSED"===a.status?"PAUSED":"RUNNING",phase:"PAUSED"===a.status?"PAUSED":"SCHEDULING",blockedReason:null}}),i.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"),ot(e),this.run(e)}async answerQuestion(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.$transaction(async r=>{let i=await r.runQuestionBatch.findUnique({where:{id:e},include:{workflowStepAttempt:!0,answerRevisions:!0}}),a=i?.workflowStepAttempt;if(!i||!a)throw Error("Workflow question not found");if("PENDING"!==i.status)throw Error("Question was already answered");return await r.runAnswerRevision.create({data:{id:(0,y.randomUUID)(),batchId:e,revision:i.answerRevisions.length,answersJson:JSON.stringify(t)}}),await r.runQuestionBatch.update({where:{id:e},data:{status:"ANSWERED",answeredAt:new Date}}),await r.workflowWait.updateMany({where:{attemptId:a.id,status:"PENDING",kind:"HUMAN"},data:{status:"RESOLVED",resultJson:JSON.stringify({answers:t}),resolvedAt:new Date}}),a});return await this.completeWaitingAttempt(i.id,{answers:t}),r6.agentEventBus.publish(sZ(i.runId),{workflowQuestionChanged:{id:e,runId:i.runId}}),this.run(i.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 (0,tX.getPrismaClient)();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 (0,tX.getPrismaClient)();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}`),ot(t.runId)}async startQueuedRuns(){let e=await (0,tX.getPrismaClient)();for(let t of(await e.workflowRun.findMany({where:{status:"QUEUED"},include:{workflow:!0,version:!0},orderBy:{queuedAt:"asc"},take:50}))){let r="CONCURRENT"===t.workflow.overlapPolicy?t.workflow.maxConcurrentRuns:1;if(await e.workflowRun.count({where:{workflowId:t.workflowId,id:{not:t.id},status:{in:sY.filter(e=>"QUEUED"!==e)}}})>=r)continue;let i=(0,ik.parseWorkflowDefinition)(s1(t.version.definitionJson)),a=new Date,n=(0,n$.setSessionValue)((0,n$.workflowSessionData)(t.sessionDataJson),"workflow.startedAt",a.toISOString());await e.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:t.id,status:"QUEUED"},data:{status:"RUNNING",phase:"SCHEDULING",startedAt:a,sessionDataJson:JSON.stringify(n),sessionRevision:{increment:1}}})).count&&(await e.workflowStepAttempt.createMany({data:i.nodes.map(e=>({id:(0,y.randomUUID)(),runId:t.id,nodeId:e.id,kind:e.kind,generation:t.generation,iterationKey:"",attempt:0,requiredPathsJson:JSON.stringify(or(e)),providedPathsJson:JSON.stringify(oi(e)),idempotencyKey:`${t.id}:${e.id}:${t.generation}::0`}))}),!0))&&(await this.appendEvent(t.id,null,"RUN_STARTED","Workflow started"),ot(t.id))}}selectedTrigger(e,t){let r=e.trigger?.nodeId??t.triggers.find(({kind:t})=>t===e.triggerKind)?.id??null;if(!(0,iS.isChoiceTriggerKind)(e.triggerKind))return{id:r,choice:null};let i=s7(s1(e.triggerPayloadJson),"Trigger payload");return{id:r,choice:"string"==typeof i.choice?i.choice:null}}attemptOutput(e){if(!e.outputJson)return{};let t=s1(e.outputJson);return t&&"object"==typeof t&&!Array.isArray(t)?t:{value:t}}edgeState(e,t,r,i){if(!i.has(e.source))return e.source!==t.id||t.choice&&e.sourceHandle!==t.choice?"INACTIVE":"ACTIVE";let a=r.get(e.source);if(!a||!sX.has(a.status))return"PENDING";if(new Set(["SKIPPED","CANCELLED","SUPERSEDED"]).has(a.status))return"INACTIVE";let n=i.get(e.source);if("FAILED"===a.status)return"failure"===e.sourceHandle||"catch"===e.sourceHandle||"CONTINUE"===n.failurePolicy&&"success"===e.sourceHandle?"ACTIVE":"INACTIVE";let s=this.attemptOutput(a).selectedHandles;return s?.length?s.includes(e.sourceHandle)?"ACTIVE":"INACTIVE":"success"===e.sourceHandle||"output"===e.sourceHandle?"ACTIVE":"INACTIVE"}async progressRun(e){let t=await (0,tX.getPrismaClient)(),r=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}});if(!r||sQ.has(r.status))return;if("PAUSING"===r.status){await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}});let i=new Set(["AGENT_JOB","BUILD","SKILL_RUN","WORKTREE_MOVE","GITHUB_CHECKS"]),a=new Set(r.waits.filter(({status:e,kind:t})=>"PENDING"===e&&i.has(t)).map(({attemptId:e})=>e));!r.attempts.some(({id:e,status:t})=>"RUNNING"===t||"WAITING"===t&&a.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"),ot(e));return}if(!new Set(["RUNNING","WAITING"]).has(r.status))return;let i=(0,ik.parseWorkflowDefinition)(s1(r.version.definitionJson)),a=new Map(i.nodes.map(e=>[e.id,e])),n=new Map;for(let e of i.edges)n.set(e.target,[...n.get(e.target)??[],e]);let s=!0;for(;s;){if(s=!1,!(r=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let o=r.attempts.filter(({generation:e,supersededAt:t})=>e===r.generation&&!t),l=new Map;for(let e of o){let t=`${e.nodeId}:${e.iterationKey}`,r=l.get(t);(!r||r.attempt<e.attempt)&&l.set(t,e)}let u=new Map([...l.values()].filter(({iterationKey:e})=>!e).map(e=>[e.nodeId,e])),c=this.selectedTrigger(r,i);for(let e of i.nodes){let r=u.get(e.id);if(!r||"PENDING"!==r.status)continue;let o=i.nodes.find(t=>"CONTROL_FOR_EACH"===t.kind&&t.config.joinNodeId===e.id);if(o){let e=u.get(o.id);if(!e||!sX.has(e.status)||[...l.values()].filter(({iterationKey:e})=>!!e).some(({status:e})=>!sX.has(e)))continue;await t.workflowStepAttempt.update({where:{id:r.id},data:{status:"READY",phase:"ITERATIONS_JOINED"}}),s=!0;continue}let d=n.get(e.id)??[];if(!d.length)continue;let p=d.map(e=>this.edgeState(e,c,u,a)),h=p.filter(e=>"ACTIVE"===e).length,m=p.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===e.kind&&"ANY"===e.config.mode?"ANY":"ALL")?h>0:0===m&&h>0)?(await t.workflowStepAttempt.update({where:{id:r.id},data:{status:"READY",phase:"READY"}}),s=!0):0===m&&0===h&&(await t.workflowStepAttempt.update({where:{id:r.id},data:{status:"SKIPPED",phase:"INACTIVE_BRANCH",finishedAt:new Date}}),s=!0)}await this.progressIterationAttempts(i,r,c,a,n,l,u)&&(s=!0)}if(!(r=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let o=new Map;for(let e of r.attempts.filter(({generation:e,supersededAt:t})=>e===r.generation&&!t)){let t=`${e.nodeId}:${e.iterationKey}`,r=o.get(t);(!r||r.attempt<e.attempt)&&o.set(t,e)}let l=[...o.values()],u=r.waits.some(({status:e})=>"PENDING"===e),c=l.some(({status:e})=>!sX.has(e));if(u||c){let i=u?"WAITING":"RUNNING";r.status!==i&&(await t.workflowRun.updateMany({where:{id:e,status:{in:[...s0]}},data:{status:i,phase:u?"WAITING":"SCHEDULING"}})).count&&ot(e);return}let d=(0,ik.parseWorkflowDefinition)(s1(r.version.definitionJson)),p=l.find(e=>{if("FAILED"!==e.status)return!1;let t=d.nodes.find(({id:t})=>t===e.nodeId);return!!t&&"CONTINUE"!==t.failurePolicy&&!d.edges.some(e=>e.source===t.id&&new Set(["failure","catch"]).has(e.sourceHandle))});await this.finishRun(r,p?"FAILED":"SUCCEEDED",p?.error??null)}async finishRun(e,t,r){let i=await (0,tX.getPrismaClient)();await i.$transaction(async i=>!!(await i.workflowRun.updateMany({where:{id:e.id,status:{in:[...s0]}},data:{status:t,phase:t,error:r,finishedAt:new Date}})).count&&(await i.workflowResourceLease.deleteMany({where:{runId:e.id}}),!0))&&(await this.appendEvent(e.id,null,`RUN_${t}`,"SUCCEEDED"===t?"Workflow completed":"Workflow failed",r?{error:r}:null),await this.resolveExternalWait("WORKFLOW_RUN",e.id,{status:t,runId:e.id},"FAILED"===t?r||"Sub-workflow failed":null),await this.events.record({kind:"WORKFLOW_FINISHED",subjectKey:e.workflowId,dedupeKey:`workflow-finished:${e.id}`,payload:{sessionData:(0,n$.workflowSessionData)(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",r||`Workflow run ${e.displayNumber} ${t.toLowerCase()}`,t.toLowerCase()),ot(e.id))}async dispatchReadyAttempts(){let e=await (0,tX.getPrismaClient)(),t=Math.max(0,4-await e.workflowStepAttempt.count({where:{status:"RUNNING"}}));if(t)for(let r 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:r.id,status:"READY",run:{status:"RUNNING"}},data:{status:"RUNNING",phase:"RUNNING",claimOwner:this.workerId,claimExpiresAt:new Date(Date.now()+3e5),startedAt:r.startedAt??new Date}})).count)continue;t-=1;let i=new AbortController;this.activeExecutions.set(r.id,i),this.executeAttempt(r.id,i.signal).catch(e=>{console.error(`Workflow attempt ${r.id} failed unexpectedly:`,e)}).finally(()=>{this.activeExecutions.delete(r.id)})}}async acquireResourceLease(e,t,r){let i=ik.WORKFLOW_STEP_BY_KIND.get(t.kind),a=null;if(i.mutatesWorktree){let e=(0,n$.getSessionValue)(r,"worktree.id")??(0,n$.getSessionValue)(r,"worktree.path")??(0,n$.getSessionValue)(r,"codebase.id");e&&(a=`git:${String(e)}`)}else if(t.kind.startsWith("BUILD_")){let e=(0,n$.getSessionValue)(r,"build.id");e&&(a=`build:${String(e)}`)}if(!a)return!0;let n=await (0,tX.getPrismaClient)();await n.workflowResourceLease.deleteMany({where:{key:a,expiresAt:{lt:new Date}}});try{return await n.workflowResourceLease.create({data:{key:a,runId:e.runId,attemptId:e.id,expiresAt:new Date(Date.now()+3e5)}}),await n.workflowStepAttempt.update({where:{id:e.id},data:{resourceLockKey:a}}),!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 r=await (0,tX.getPrismaClient)(),i=await r.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!i||"RUNNING"!==i.status)return;let a=(0,ik.parseWorkflowDefinition)(s1(i.run.version.definitionJson)),n=a.nodes.find(({id:e})=>e===i.nodeId);if(!n)return void await this.failAttempt(i,null,Error("Workflow step definition is missing"));let s=(0,n$.workflowSessionData)(i.run.sessionDataJson);i.iterationKey&&(s=await this.iterationSessionData(i.run,i,s));let o=or(n).filter(e=>!(0,n$.hasSessionValue)(s,e));if(o.length){await r.$transaction([r.workflowStepAttempt.update({where:{id:i.id},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",error:`Missing required session data: ${o.join(", ")}`,claimOwner:null,claimExpiresAt:null}}),r.workflowRun.update({where:{id:i.runId},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",blockedReason:`Step ${n.name??n.id} needs ${o.join(", ")}`}}),r.workflowResourceLease.deleteMany({where:{attemptId:e}})]),await this.appendEvent(i.runId,i.id,"STEP_BLOCKED",`Step blocked by missing requirements: ${o.join(", ")}`),await this.notifyRun(i.runId,"WORKFLOW_NEEDS_ATTENTION","Workflow needs data",`Step ${n.name??n.id} needs ${o.join(", ")}`,`blocked:${i.id}`),ot(i.runId);return}if(await r.workflowStepAttempt.update({where:{id:i.id},data:{inputJson:JSON.stringify(s)}}),await this.acquireResourceLease(i,n,s))try{let e,r={...n,config:(0,n$.resolveWorkflowValue)(n.config,s)};if(e=n.kind.startsWith("CONTROL_")||"HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind?await this.executeControl(i.run,i,r,s,a):await this.executor.execute({run:i.run,attempt:i,node:r,sessionData:s,signal:t}),t.aborted)throw Error("Workflow step was cancelled");e.wait?await this.parkAttempt(i,e):await this.completeAttempt(i,n,e)}catch(t){let e=t instanceof Error?t:Error(String(t));if(await this.holdForBusyCodebase(i,e))return;await this.failAttempt(i,n,e)}}async holdForBusyCodebase(e,t){if(!(0,sq.isCodebaseBusyError)(t))return!1;let r=e.startedAt??e.createdAt;if(Date.now()-r.getTime()>6e5)return!1;let i=await (0,tX.getPrismaClient)();return!!(await i.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 i.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),await i.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}),ot(e.runId),!0)}async iterationSessionData(e,t,r){let i=await (0,tX.getPrismaClient)(),a=await i.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,status:"SUCCEEDED"},orderBy:{finishedAt:"asc"}}),n=r;for(let e of(t.inputJson&&(n=(0,n$.mergeSessionData)(n,s7(s1(t.inputJson),"Iteration input"))),a)){let t=this.attemptOutput(e);t.sessionPatch&&(n=(0,n$.mergeSessionData)(n,t.sessionPatch))}return n}async executeControl(e,t,r,i,a){switch(r.kind){case"CONTROL_IF":{let e=r.config.condition;if(!e)throw Error("If steps require a condition");let t=(0,n$.evaluateWorkflowCondition)(e,i);return{output:{matched:t},selectedHandles:[t?"true":"false"]}}case"CONTROL_JOIN":{let i=a.nodes.find(e=>"CONTROL_FOR_EACH"===e.kind&&e.config.joinNodeId===r.id);if(i){let r=await (0,tX.getPrismaClient)(),a=await r.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:{not:""},status:"FAILED"}});if(a.length&&"COLLECT_ERRORS"!==i.config.errorMode)throw Error(`${a.length} for-each iteration step(s) failed`);return{output:{iterations:await r.workflowStepAttempt.count({where:{runId:e.id,generation:t.generation,iterationKey:{not:""}}}),failures:a.map(({nodeId:e,iterationKey:t,error:r})=>({nodeId:e,iterationKey:t,error:r}))}}}return{output:{joined:!0}}}case"CONTROL_TRY":return{output:{started:!0}};case"CONTROL_DELAY":{let e=Number(r.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=r.config.condition;if(!e)throw Error("Wait-until steps require a condition");if((0,n$.evaluateWorkflowCondition)(e,i))return{output:{matched:!0}};let t=ss(r.config,15);return{wait:{kind:"PREDICATE",predicate:{condition:e,cadenceSeconds:t},resumeAfter:new Date(Date.now()+1e3*t),timeoutAt:sn(r.config)}}}case"CONTROL_SET_VARIABLE":{if("string"!=typeof r.config.path)throw Error("Set-variable steps require an output path");let e="string"==typeof r.config.script?await sH(r.config.script,i):r.config.value;return{output:e,sessionPatch:(0,n$.setSessionValue)({},r.config.path,e)}}case"CONTROL_FOR_EACH":{let n=Array.isArray(r.config.items)?r.config.items:"string"==typeof r.config.listPath?(0,n$.getSessionValue)(i,r.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,r,a,n),{output:{itemCount:n.length},selectedHandles:n.length?["body"]:["empty"],sessionPatch:(0,n$.setSessionValue)({},`steps.${r.id}.items`,n)}}case"CONTROL_SUBWORKFLOW":return this.startSubworkflow(e,t,r,i);case"HUMAN_CONFIRM":case"HUMAN_CHOICE":return this.createHumanQuestion(e,t,r);default:throw Error(`Unsupported control step ${r.kind}`)}}async progressIterationAttempts(e,t,r,i,a,n,s){let o=await (0,tX.getPrismaClient)(),l=!1;for(let e of new Set([...n.values()].map(({iterationKey:e})=>e).filter(Boolean))){let t=new Map(s);for(let r of n.values())r.iterationKey===e&&t.set(r.nodeId,r);for(let n of t.values()){if(n.iterationKey!==e||"PENDING"!==n.status)continue;let s=i.get(n.nodeId);if(!s)continue;let u=(a.get(s.id)??[]).map(e=>this.edgeState(e,r,t,i)),c=u.filter(e=>"ACTIVE"===e).length,d=u.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===s.kind&&"ANY"===s.config.mode?"ANY":"ALL")?c>0:0===d&&c>0)?(await o.workflowStepAttempt.update({where:{id:n.id},data:{status:"READY",phase:"ITERATION_READY"}}),l=!0):0===d&&0===c&&(await o.workflowStepAttempt.update({where:{id:n.id},data:{status:"SKIPPED",phase:"INACTIVE_ITERATION_BRANCH",finishedAt:new Date}}),l=!0)}}return l}async spawnForEach(e,t,r,i,a){let n="string"==typeof r.config.joinNodeId?r.config.joinNodeId:null,s=i.nodes.find(({id:e})=>e===n);if(!s||"CONTROL_JOIN"!==s.kind)throw Error("For-each steps require an explicit joinNodeId");let o=new Map;for(let e of i.edges)o.set(e.source,[...o.get(e.source)??[],e]);let l=(o.get(r.id)??[]).filter(({sourceHandle:e})=>"body"===e).map(({target:e})=>e),u=new Set;for(;l.length;){let e=l.shift();e===n||u.has(e)||(u.add(e),l.push(...(o.get(e)??[]).map(({target:e})=>e)))}if(a.length&&!u.size)throw Error("For-each body is not connected to its body handle");let c=i.nodes.filter(({id:e})=>u.has(e)),d=await (0,tX.getPrismaClient)();await d.$transaction(async i=>{await i.workflowStepAttempt.updateMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,nodeId:{in:[...u]},status:"PENDING"},data:{status:"SKIPPED",phase:"ITERATION_TEMPLATE",finishedAt:new Date}}),a.length&&c.length&&await i.workflowStepAttempt.createMany({data:a.flatMap((i,a)=>{let n=t.iterationKey?`${t.iterationKey}.${a}`:String(a),s=JSON.stringify({loop:{current:{forEachNodeId:r.id,index:a,item:i},[r.id]:{index:a,item:i}}});return c.map(r=>({id:(0,y.randomUUID)(),runId:e.id,nodeId:r.id,kind:r.kind,generation:t.generation,iterationKey:n,attempt:0,status:"PENDING",phase:"ITERATION_PENDING",inputJson:s,requiredPathsJson:JSON.stringify(or(r)),providedPathsJson:JSON.stringify(oi(r)),idempotencyKey:`${e.id}:${r.id}:${t.generation}:${n}:0`}))})})})}async startSubworkflow(e,t,r,i){let a="string"==typeof r.config.versionId?r.config.versionId:null;if(!a)throw Error("Sub-workflow version is required");let n=await (0,tX.getPrismaClient)(),s=await n.workflowVersion.findUnique({where:{id:a},include:{workflow:{include:{activeVersion:!0}}}});if(!s)throw Error("Sub-workflow version not found");if(!s.workflow.enabled||s.workflow.archivedAt)throw Error("Sub-workflow is paused");let o=e,l=0;for(;o;){if(o.workflowId===s.workflowId)throw Error("Recursive sub-workflow invocation is not allowed");if((l+=1)>=10)throw Error("Sub-workflow depth is limited to 10");o=o.parentRunId?await n.workflowRun.findUnique({where:{id:o.parentRunId}}):null}let u={};if(r.config.inputMapping&&"object"==typeof r.config.inputMapping)for(let[e,t]of Object.entries(r.config.inputMapping))u=(0,n$.setSessionValue)(u,e,(0,n$.resolveWorkflowValue)(t,i));let c=await this.createRunForTrigger({...s.workflow,activeVersion:s},s,null,null,"SUBWORKFLOW",e.id,{sessionData:u,parentRunId:e.id},`${t.id}:subworkflow:${s.id}`,e.id);return ot(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:so(r.config),timeoutAt:sn(r.config)}}}async createHumanQuestion(e,t,r){let i=Array.isArray(r.config.questions)?r.config.questions:[{header:r.name??null,prompt:"string"==typeof r.config.prompt?r.config.prompt:"HUMAN_CONFIRM"===r.kind?"Continue this workflow?":"Choose an option",multiSelect:!!r.config.multiSelect,allowCustom:"HUMAN_CONFIRM"!==r.kind&&!1!==r.config.allowCustom,options:"HUMAN_CONFIRM"===r.kind?[{label:"Confirm",description:null},{label:"Cancel",description:null}]:Array.isArray(r.config.options)?r.config.options:[]}];if(!i.length||i.length>10)throw Error("Workflow questions must contain between one and ten questions");let a=await (0,tX.getPrismaClient)(),n=(0,y.randomUUID)();return await a.runQuestionBatch.create({data:{id:n,workflowStepAttemptId:t.id,nativeRequestId:`workflow:${t.id}`,questions:{create:i.map((e,t)=>{let r=s7(e,"Workflow question"),i=Array.isArray(r.options)?r.options:[];return{id:(0,y.randomUUID)(),position:t,header:"string"==typeof r.header?r.header:null,prompt:s4(String(r.prompt??""),"Question prompt",1e4),multiSelect:!!r.multiSelect,allowCustom:!1!==r.allowCustom,options:{create:i.map((e,t)=>{let r=s7(e,"Question option");return{id:(0,y.randomUUID)(),position:t,label:s4(String(r.label??""),"Option label",500),description:"string"==typeof r.description?r.description.slice(0,2e3):null}})}}})}}}),r6.agentEventBus.publish(sZ(e.id),{workflowQuestionChanged:{id:n,runId:e.id}}),{output:{questionBatchId:n},wait:{kind:"HUMAN",externalKey:n,timeoutAt:sn(r.config)}}}async parkAttempt(e,t){let r=t.wait;if(!r)throw Error("Workflow wait is missing");let i=await (0,tX.getPrismaClient)(),a=(0,y.randomUUID)();await i.$transaction(async i=>{let n=await i.workflowRun.findUnique({where:{id:e.runId},select:{status:!0}});return!(!n||sQ.has(n.status))&&!!(await i.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING"},data:{status:"WAITING",phase:r.kind,outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:t.sessionPatch}),claimOwner:null,claimExpiresAt:null}})).count&&(await i.workflowWait.create({data:{id:a,runId:e.runId,attemptId:e.id,kind:r.kind,predicateJson:r.predicate?JSON.stringify(r.predicate):null,externalKey:r.externalKey??null,resumeAfter:r.resumeAfter??null,timeoutAt:r.timeoutAt??null}}),t.links?.length&&await i.workflowRunResourceLink.createMany({data:t.links.map(t=>({id:(0,y.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 i.workflowRun.updateMany({where:{id:e.runId,status:{in:[...s0]}},data:{status:"WAITING",phase:r.kind}}),await i.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_WAITING",`Step is waiting for ${r.kind.toLowerCase().replaceAll("_"," ")}`,{waitId:a}),ot(e.runId))}async completeAttempt(e,t,r){let i=await (0,tX.getPrismaClient)();await i.$transaction(async i=>{let a=await i.workflowRun.findUnique({where:{id:e.runId}});if(!a)throw Error("Workflow run disappeared");if(sQ.has(a.status))return!1;let n=(0,n$.workflowSessionData)(a.sessionDataJson);e.iterationKey?n=(0,n$.setSessionValue)(n,`steps.${t.id}.iterations.${e.iterationKey.replaceAll(".","_")}`,{status:"SUCCEEDED",output:r.output??null,data:r.sessionPatch??null}):(r.sessionPatch&&(n=(0,n$.mergeSessionData)(n,r.sessionPatch)),n=(0,n$.setSessionValue)(n,`steps.${t.id}`,{status:"SUCCEEDED",output:r.output??null,snapshotId:r.links?.find(({kind:e})=>"CHECKPOINT"===e)?.resourceId??null}));let s=JSON.stringify(n);return s9(s,"Workflow session data",2097152),!!(await i.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"SUCCEEDED",phase:"SUCCEEDED",outputJson:JSON.stringify({value:r.output,selectedHandles:r.selectedHandles,sessionPatch:r.sessionPatch}),error:null,finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(r.links?.length&&await i.workflowRunResourceLink.createMany({data:r.links.map(t=>({id:(0,y.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 i.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:s,sessionRevision:{increment:1}}}),await i.workflowRun.updateMany({where:{id:e.runId,status:{in:[...s0]}},data:{status:"RUNNING",phase:"SCHEDULING"}}),await i.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_SUCCEEDED",`Step ${t.name??t.id} completed`),ot(e.runId))}async failAttempt(e,t,r){let i=await (0,tX.getPrismaClient)(),a=t??(await i.workflowRun.findUnique({where:{id:e.runId},include:{version:!0}}))?.version.definitionJson,n="string"==typeof a?(0,ik.parseWorkflowDefinition)(s1(a)).nodes.find(({id:t})=>t===e.nodeId)??null:a,s=n?.retry,o=!!(s&&e.attempt+1<s.maxAttempts),l=s?Math.min(86400,"EXPONENTIAL"===s.strategy?s.delaySeconds*2**e.attempt:s.delaySeconds):0;await i.$transaction(async t=>{let i=await t.workflowRun.findUnique({where:{id:e.runId}});if(!i||sQ.has(i.status))return!1;let a=(0,n$.workflowSessionData)(i.sessionDataJson);return e.iterationKey||(a=(0,n$.setSessionValue)(a,`steps.${e.nodeId}`,{status:"FAILED",error:r.message})),!!(await t.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"FAILED",phase:o?"RETRY_SCHEDULED":"FAILED",error:r.message.slice(0,2e4),finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(o&&await t.workflowWait.create({data:{id:(0,y.randomUUID)(),runId:e.runId,attemptId:e.id,kind:"RETRY",resumeAfter:new Date(Date.now()+1e3*l)}}),await t.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:JSON.stringify(a),sessionRevision:{increment:1}}}),await t.workflowRun.updateMany({where:{id:e.runId,status:{in:[...s0]}},data:{status:o?"WAITING":"RUNNING",phase:o?"RETRY_WAIT":"SCHEDULING"}}),await t.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,o?"STEP_RETRY_SCHEDULED":"STEP_FAILED",o?`Step failed and will retry in ${l} seconds`:`Step failed: ${r.message}`,{error:r.message,retry:o}),ot(e.runId))}async resolveDueWaits(){let e=await (0,tX.getPrismaClient)(),t=new Date,r=(t,r)=>e.workflowWait.updateMany({where:{id:t,status:"PENDING",run:{status:{in:[...s0]}}},data:r});for(let i of(await e.workflowWait.findMany({where:{status:"PENDING",run:{status:{in:[...s0]}},OR:[{resumeAfter:{lte:t}},{timeoutAt:{lte:t}}]},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100}))){if(i.timeoutAt&&i.timeoutAt<=t&&"RETRY"!==i.kind&&"DELAY"!==i.kind){if(!(await r(i.id,{status:"TIMED_OUT",resolvedAt:t})).count)continue;await this.failAttempt(i.attempt,(0,ik.parseWorkflowDefinition)(s1(i.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===i.attempt.nodeId)??null,Error("Workflow wait timed out"));continue}if("RETRY"===i.kind){let r=i.attempt.attempt+1;await e.$transaction(async e=>{if(!(await e.workflowWait.updateMany({where:{id:i.id,status:"PENDING",run:{status:{in:[...s0]}}},data:{status:"RESOLVED",resolvedAt:t}})).count)return!1;if(await e.workflowStepAttempt.create({data:{id:(0,y.randomUUID)(),runId:i.runId,nodeId:i.attempt.nodeId,kind:i.attempt.kind,generation:i.attempt.generation,iterationKey:i.attempt.iterationKey,attempt:r,status:"PENDING",phase:"RETRY_PENDING",inputJson:i.attempt.inputJson,requiredPathsJson:i.attempt.requiredPathsJson,providedPathsJson:i.attempt.providedPathsJson,idempotencyKey:`${i.runId}:${i.attempt.nodeId}:${i.attempt.generation}:${i.attempt.iterationKey}:${r}`,replayedFromId:i.attempt.id}}),!(await e.workflowRun.updateMany({where:{id:i.runId,status:{in:[...s0]}},data:{status:"RUNNING",phase:"SCHEDULING"}})).count)throw Error("Workflow lifecycle changed while resuming retry");return!0})&&ot(i.runId)}else if("DELAY"===i.kind){if(!(await r(i.id,{status:"RESOLVED",resolvedAt:t})).count)continue;await this.completeWaitingAttempt(i.attemptId,{delayed:!0})}else if("PREDICATE"===i.kind){let e=i.predicateJson?s7(s1(i.predicateJson),"Wait predicate"):{},a=e.condition,n=(0,n$.workflowSessionData)(i.attempt.run.sessionDataJson);if(a&&(0,n$.evaluateWorkflowCondition)(a,n)){if(!(await r(i.id,{status:"RESOLVED",resultJson:JSON.stringify({matched:!0}),resolvedAt:t})).count)continue;await this.completeWaitingAttempt(i.attemptId,{matched:!0})}else{let t=Math.max(1,Number(e.cadenceSeconds??15));await r(i.id,{resumeAfter:new Date(Date.now()+1e3*t)})}}else if(i.externalKey&&this.waitPollers.has(i.kind)){let e=await this.waitPollers.get(i.kind)(i.externalKey);if(e.pending){let t=(0,ik.parseWorkflowDefinition)(s1(i.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===i.attempt.nodeId)?.config??{};await r(i.id,{resumeAfter:new Date(Date.now()+1e3*ss(t,e.pollAfterSeconds??15))})}else{if(!(await r(i.id,{status:e.error?"FAILED":"RESOLVED",resultJson:JSON.stringify(e.result??{}),resolvedAt:new Date})).count)continue;if(e.error){let t=(0,ik.parseWorkflowDefinition)(s1(i.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===i.attempt.nodeId);await this.failAttempt(i.attempt,t??null,Error(e.error))}else await this.completeWaitingAttempt(i.attemptId,e.result??{})}}}}async completeWaitingAttempt(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!i||"WAITING"!==i.status)return;let a=(0,ik.parseWorkflowDefinition)(s1(i.run.version.definitionJson)).nodes.find(({id:e})=>e===i.nodeId);if(!a)throw Error("Workflow step definition is missing");let n=this.attemptOutput(i),s=n.sessionPatch;if("TERMINAL_RUN"===a.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionData&&"object"==typeof t.sessionData&&!Array.isArray(t.sessionData)){let e=structuredClone(t.sessionData),r=(0,n$.getSessionValue)((0,n$.workflowSessionData)(i.run.sessionDataJson),"workflow");s=r?(0,n$.setSessionValue)(e,"workflow",r):e}t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)&&(s=(0,n$.mergeSessionData)(s??{},t.sessionPatch)),a.kind.startsWith("RUN_")&&t&&"object"==typeof t&&!Array.isArray(t)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},`run.${a.id}`,t))),"BUILD_START"===a.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},"build",t))),"WORKTREE_WAIT_PUSH_READY"===a.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},"worktree",{id:t.id,pushStatus:t.pushStatus}))),"SKILL_APPLY"===a.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},`steps.${a.id}`,t))),("HUMAN_CONFIRM"===a.kind||"HUMAN_CHOICE"===a.kind)&&(s=(0,n$.mergeSessionData)(s??{},(0,n$.setSessionValue)({},`steps.${a.id}.answer`,t))),await this.completeAttempt(i,a,{output:t??n.value,selectedHandles:n.selectedHandles,sessionPatch:s})}async resolveExternalWait(e,t,r,i=null){let a=await (0,tX.getPrismaClient)(),n=await a.workflowWait.findMany({where:{kind:e,externalKey:t,status:"PENDING"},include:{attempt:{include:{run:{include:{version:!0}}}}}});for(let e of n)if(await a.workflowWait.update({where:{id:e.id},data:{status:i?"FAILED":"RESOLVED",resultJson:JSON.stringify(r),resolvedAt:new Date}}),i){let t=(0,ik.parseWorkflowDefinition)(s1(e.attempt.run.version.definitionJson)).nodes.find(({id:t})=>t===e.attempt.nodeId);await this.failAttempt(e.attempt,t??null,Error(i))}else await this.completeWaitingAttempt(e.attemptId,r);return n.length}descendants(e,t){let r=new Map;for(let t of e.edges)r.set(t.source,[...r.get(t.source)??[],t.target]);let i=new Set([t]),a=[t];for(;a.length;){let e=a.shift();for(let t of r.get(e)??[])i.has(t)||(i.add(t),a.push(t))}return[...i]}async prepareReplay(e,t){let r=await (0,tX.getPrismaClient)(),i=await r.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:{include:{checkpoints:!0,resourceLinks:!0}}}});if(!i)throw Error("Workflow run not found");if(!new Set(["PAUSED","BLOCKED","FAILED","SUCCEEDED","CANCELLED"]).has(i.status))throw Error("Pause the workflow before replaying a step");let a=(0,ik.parseWorkflowDefinition)(s1(i.version.definitionJson));if(!a.nodes.some(({id:e})=>e===t))throw Error("Workflow step not found");let n=this.descendants(a,t),s=i.attempts.filter(({generation:e,nodeId:t})=>e===i.generation&&n.includes(t)),o=s.filter(e=>e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0],l=o?.checkpoints.slice().sort((e,t)=>e.createdAt.getTime()-t.createdAt.getTime())[0],u=s.flatMap(e=>e.resourceLinks.filter(({kind:e})=>"CHECKPOINT"!==e).map(({kind:e,resourceId:t,label:r,url:i})=>({kind:e,resourceId:t,label:r,url:i}))),c=null,d=null;if(l&&this.agentControl)try{c=await this.compareCheckpointWithAgent(l.id)}catch(e){d=`Git comparison unavailable: ${e instanceof Error?e.message:String(e)}`}return{runId:e,nodeId:t,affectedNodeIds:n,affectedAttemptIds:s.map(({id:e})=>e),externalEffects:u,checkpointId:l?.id??null,gitComparison:c,warning:[u.length?"External Jira, GitHub, build, deployment, and notification effects will not be undone.":null,d].filter(Boolean).join(" ")||null}}async replay(e,t,r={}){let i=await this.prepareReplay(e,t);if(r.restore){if(!i.checkpointId)throw Error("No restorable Git checkpoint is available for this step");this.checkpointRestorer?await this.checkpointRestorer(i.checkpointId,{stash:!!r.stash}):await this.restoreCheckpointWithAgent(i.checkpointId,{stash:!!r.stash})}let a=await (0,tX.getPrismaClient)(),n=await a.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:!0}});if(!n)throw Error("Workflow run not found");let s=(0,ik.parseWorkflowDefinition)(s1(n.version.definitionJson)),o=n.attempts.filter(e=>e.generation===n.generation&&e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0];if(!o)throw Error("Selected step has no execution history");let l=o.inputJson?s7(s1(o.inputJson),"Step input snapshot"):(0,n$.workflowSessionData)(n.sessionDataJson),u=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 d=(0,n$.setSessionValue)(l,"workflow.replay",{generation:u,fromNodeId:t,replayedAt:new Date().toISOString()});return await a.$transaction(async t=>{await t.workflowStepAttempt.updateMany({where:{runId:e,generation:n.generation,nodeId:{in:i.affectedNodeIds},supersededAt:null},data:{supersededAt:new Date}}),await t.workflowStepAttempt.createMany({data:s.nodes.map(t=>{let r=i.affectedNodeIds.includes(t.id),a=c.get(t.id);return{id:(0,y.randomUUID)(),runId:e,nodeId:t.id,kind:t.kind,generation:u,iterationKey:"",attempt:0,status:r?"PENDING":a?.status==="SKIPPED"?"SKIPPED":"SUCCEEDED",phase:r?"REPLAY_PENDING":"REUSED_FROM_PRIOR_GENERATION",inputJson:r?null:a?.inputJson,outputJson:r?null:a?.outputJson,error:null,startedAt:r?null:a?.startedAt,finishedAt:r?null:new Date,requiredPathsJson:JSON.stringify(or(t)),providedPathsJson:JSON.stringify(oi(t)),idempotencyKey:`${e}:${t.id}:${u}::0`,replayedFromId:a?.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:u,sessionDataJson:JSON.stringify(d),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:u,affectedNodeIds:i.affectedNodeIds}),ot(e),this.run(e)}async appendEvent(e,t,r,i,a=null){let n=await (0,tX.getPrismaClient)(),s=await n.$transaction(async n=>{let s=await n.workflowRunEvent.findFirst({where:{runId:e},orderBy:{sequence:"desc"},select:{sequence:!0}});return n.workflowRunEvent.create({data:{id:(0,y.randomUUID)(),runId:e,attemptId:t,sequence:(s?.sequence??-1)+1,type:r,message:i.slice(0,2e4),detailJson:a?JSON.stringify(a):null}})});return r6.agentEventBus.publish(sz(e),{workflowRunEventAdded:s}),s}subscribeWorkflows(){return r6.agentEventBus.iterate(sW)}subscribeRun(e){return r6.agentEventBus.iterate(sJ(e))}subscribeRunEvents(e){return r6.agentEventBus.iterate(sz(e))}subscribeRunQuestions(e){return r6.agentEventBus.iterate(sZ(e))}}let os=globalThis;e.s(["getServerServices",0,function(){var e,t,r,i,y,b,v,k,S,E,I,x,A,_,C,R,T,D,N;let O,P,$,U,B,j,L,q,M,F,K,V,H,G,W,J,z,Z,Y,Q,X,ee,et,er,ei,ea,en,es,eo,el,eu,ec,ed,ep,eh,em,ef,eg,ey,ew;return os.serverServices??(O=new g.PrismaService,P=new t0.CredentialService,$=new s$,U=new a.AgentControlService,B=new ns(P),j=new nc,L=new ir(U),(q=new nD(U,B)).startRuntime(),M=new n.CcusageService(U),F=new s.BuildDataService(U),K=new aX.TelemetryService,V=new a6(U,void 0,P),H=new nv,G=new a8.PushNotificationsService(void 0,P,j),(W=new nk.RunsService(B,U,L)).startReaper(),J=new o.BuildsService(U,K,B,L),z=new aQ(U),Z=new l.CodebasesService(U,z),Y=new u.CodebaseToolsService(Z),Q=new m.JiraService(P,$),X=new f.IosDevicesService(void 0,P),ee=new d.GitHubPipelineStatusService,et=new c.GitHubActionsNotificationsService(P,B,j,!0,$,void 0,ee),er=new p.GitHubService(!0,P,j,()=>et.configurationChanged(),ee),ei=new h.CacheServerService(P),ea=new r8.WorktreesService(U,Q,er,z,$,ee),en=new nP(M,L,j),es=new nG,eo=new n3,el=new as(Y,J,{codebases:Z,telemetry:K,pushNotifications:G,agents:U,diskSpace:L,worktrees:ea,runs:W,commands:q,jira:Q,github:er,buildData:F,cacheServer:ei,ccusage:M,credentials:P,iosDevices:X,modelCosts:H,notifications:B,polling:j,signingAssets:V,skills:z,systemStatus:en,workflows:()=>ec,worktreeAutomations:()=>ed},P),W.setMcpPresetResolver((e,t)=>el.resolveRunMcpPresets(e,t)),ec=new on($,eu=new sG,void 0,P,U,B,W,ea,q,Q),ed=new aU(ea,er,Q,ec,U,j),t=ec,r=e={agentControl:U,jira:Q,github:er,worktrees:ea,worktreeAutomations:ed,codebases:Z,builds:J,skills:z,runs:W,commands:q,notifications:B,pushNotifications:G,tools:el,diskSpace:L,buildData:F,ccusage:M,iosDevices:X,modelCosts:H,signingAssets:V},t.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?{...sl(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"}}),t.registerWaitPoller("AGENT_JOBS",async e=>{let t=sl(JSON.parse(e),"Agent jobs wait"),i=Array.isArray(t.ids)?t.ids.map(e=>su(e,"Agent job ID",500)):[];if(!i.length)return{pending:!1,result:{jobs:[]}};let a=await Promise.all(i.map(e=>r.agentControl.getJob(e)));if(a.some(e=>!e))return{pending:!1,error:"Agent job disappeared"};let n=a.filter(e=>!!e);if(n.some(e=>new Set(["QUEUED","RUNNING"]).has(e.status)))return{pending:!0,pollAfterSeconds:2};let s=n.map(e=>({id:e.id,status:e.status,error:e.error})),o=s.filter(({status:e})=>"SUCCEEDED"!==e);return{pending:!1,result:{jobs:s,sessionPatch:{signing:{jobs:s}}},error:o.length?o.map(({id:e,status:t,error:r})=>r?`${e}: ${r}`:`${e}: ${t.toLowerCase()}`).join("; "):null}}),t.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"}}),t.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"}}),t.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"}}),t.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"}}),t.registerWaitPoller("SIGNING_OPERATIONS",async e=>{let t=sl(JSON.parse(e),"Signing operations wait"),i=Array.isArray(t.ids)?t.ids.map(e=>su(e,"Signing operation ID",500)):[];if(!i.length)return{pending:!1,result:{operations:[]}};let a=(await r.signingAssets.operations(200)).filter(({id:e})=>i.includes(e));if(a.length!==i.length)return{pending:!1,error:"Signing operation disappeared"};let n=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]);if(a.some(({status:e})=>!n.has(e)))return{pending:!0,pollAfterSeconds:2};let s=a.filter(({status:e})=>"SUCCEEDED"!==e);return{pending:!1,result:{operations:a,sessionPatch:{signing:{operations:a}}},error:s.length?s.map(({id:e,error:t,status:r})=>t?`${e}: ${t}`:`${e}: ${r.toLowerCase()}`).join("; "):null}}),t.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"}}),t.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 i=t.targetWorktreeId?await r.worktrees.workflowSessionDataForWorktree(t.targetWorktreeId,{includeMissing:!0}):{};return{pending:!1,result:{id:t.id,status:t.status,targetWorktreeId:t.targetWorktreeId,sessionPatch:i},error:"SUCCEEDED"===t.status?null:t.error||`Worktree move ${t.status.toLowerCase()}`}}),t.registerWaitPoller("WORKTREE_PUSH_READY",async e=>{let t=await (0,tX.getPrismaClient)(),i=await t.worktree.findUnique({where:{id:e}});if(!i)return{pending:!1,error:"Worktree disappeared"};if("READY"!==i.pushStatus)return{pending:!0,pollAfterSeconds:5};let a=await r.worktrees.workflowSessionDataForWorktree(i.id,{includeMissing:!0});return{pending:!1,result:{id:i.id,pushStatus:i.pushStatus,sessionPatch:a}}}),t.registerWaitPoller("WORKFLOW_RUN",async e=>{let r=await t.run(e);return r?new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(r.status)?{pending:!1,result:{id:r.id,status:r.status,sessionData:JSON.parse(r.sessionDataJson)},error:"SUCCEEDED"===r.status?null:r.error||`Sub-workflow ${r.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:3}:{pending:!1,error:"Sub-workflow disappeared"}}),t.registerWaitPoller("RUN_ANSWER_REVISION",async e=>{let t=sl(JSON.parse(e),"Answer revision wait"),i=su(t.batchId,"Question batch ID",500),a=await r.runs.questionBatch(i);if(!a)return{pending:!1,error:"Question batch disappeared"};if(!a.revisionPreparedAt)return{pending:!0,pollAfterSeconds:2};let n=await r.runs.reviseAnswer(i,t.answers??{},!0===t.stash,!1!==t.rollback);return n?{pending:!1,result:{id:n.id,kind:n.kind,status:n.status,phase:n.phase,parentRunId:n.parentRunId,followUpMode:n.followUpMode}}:{pending:!1,error:"Answer revision failed"}}),t.registerWaitPoller("GITHUB_CHECKS",async e=>{let t=sl(JSON.parse(e),"GitHub checks wait"),i=await r.github.autoRetryRun(su(t.repositoryId,"Repository ID"),su(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(i.status)?{pending:!1,result:{runId:i.id,status:i.status,jobs:i.jobs,sessionPatch:{pipeline:{runId:i.id,status:i.status,conclusion:i.status,jobs:i.jobs}}},error:"SUCCESS"===i.status?null:`GitHub checks concluded ${i.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:10}}),t.registerWaitPoller("DISK_SPACE_REPORT",async e=>{let t=sl(JSON.parse(e),"Disk-space report wait"),i=su(t.agentId,"Agent ID",500),a=await r.diskSpace.snapshot(i);if(!a.disk.enabled)return{pending:!1,error:"Disk-space monitoring was disabled while awaiting a report"};let n=a.disk.lastReportedAt,s="string"==typeof t.previousReportedAt?t.previousReportedAt:null;return(su(t.requestedAt,"Requested timestamp",100),n&&(!s||Date.parse(n)>Date.parse(s)))?{pending:!1,result:{...a,sessionPatch:a}}:{pending:!0,pollAfterSeconds:2}}),i=eu,y=e,i.register("JIRA_LOAD_TICKET",async e=>{let t=sE(await y.jira.ticket(sx(e),!0===e.node.config.force));return{output:t,sessionPatch:{ticket:t},links:[sg(String(t.key),String(t.title??t.key))]}}),i.register("JIRA_TRANSITION",async e=>{let t=sE(await y.jira.transitionTicket(sx(e),su(e.node.config.transitionId,"Jira transition ID",200)));return{output:t,sessionPatch:{ticket:t},links:[sg(String(t.key),String(t.title??t.key))]}}),i.register("JIRA_COMMENT",async e=>{let t=sE(await y.jira.addComment(sx(e),{value:su(e.node.config.content,"Jira comment",1e5),format:"JIRA_WIKI"===e.node.config.format?"JIRA_WIKI":"MARKDOWN"}));return{output:t,sessionPatch:{ticket:t},links:[sg(String(t.key),String(t.title??t.key))]}}),i.register("JIRA_ASSIGN",async e=>{let t=null===e.node.config.accountId?null:su(e.node.config.accountId,"Jira account ID",500),r=sE(await y.jira.assignTicket(sx(e),t));return{output:r,sessionPatch:{ticket:r},links:[sg(String(r.key),String(r.title??r.key))]}}),i.register("JIRA_UPDATE_FIELDS",async e=>{let t=sl(e.node.config.fields??{},"Jira fields"),r=sE(await y.jira.updateTicket({issueKey:sx(e),...t}));return{output:r,sessionPatch:{ticket:r},links:[sg(String(r.key),String(r.title??r.key))]}}),i.register("JIRA_RESOLVE_BRANCH",async e=>{let t=await y.worktrees.previewTicketBranch({codebaseId:su(e.node.config.codebaseId??(0,n$.getSessionValue)(e.sessionData,"codebase.id"),"Codebase ID",200),worktreeId:"string"==typeof(0,n$.getSessionValue)(e.sessionData,"worktree.id")?String((0,n$.getSessionValue)(e.sessionData,"worktree.id")):null,ticketKey:sx(e)});return{output:t,sessionPatch:{worktree:{branch:t.branchName},ticket:{key:t.ticketKey,title:t.ticketTitle,type:t.ticketType}},links:[sg(t.ticketKey,t.ticketTitle)]}}),b=eu,v=e,b.register("GITHUB_LOAD_PR",async e=>{let t=sS(e),r=await v.github.pullRequest(t.owner,t.name,s_(e),"WORKFLOW_AUTOMATION");if(!r)throw Error("Pull request was not found");let i=sI(r);return{output:i,sessionPatch:{pr:i},links:[sf("PULL_REQUEST",n4(t.owner,t.name,r.number),r.title,r.url)]}}),b.register("GITHUB_MERGE_PR",async e=>{let t=sS(e),r=s_(e),i=await v.github.pullRequestMergeOptions(t.owner,t.name,r,"WORKFLOW_AUTOMATION");if(!i.canMerge)throw Error(i.blockedReason||"Pull request cannot be merged");let a=await v.github.mergePullRequest({...t,number:r,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:i.defaultCommitHeadline,commitBody:"string"==typeof e.node.config.commitBody?e.node.config.commitBody:i.defaultCommitBody,authorEmail:"string"==typeof e.node.config.authorEmail?e.node.config.authorEmail:null},"WORKFLOW_AUTOMATION");return{output:a,sessionPatch:{pr:{state:a.state}},links:[sy(e)]}}),b.register("GITHUB_COLLECT_REVIEW_THREADS",async e=>{let t=sS(e),r=await v.github.pullRequest(t.owner,t.name,s_(e),"WORKFLOW_AUTOMATION");if(!r)throw Error("Pull request was not found");let i=r.reviewThreads.filter(({isResolved:e})=>!e);return{output:i,sessionPatch:{pr:{unresolvedThreads:i}},links:[sy(e,r.title,r.url)]}}),b.register("GITHUB_REPLY_REVIEW_THREAD",async e=>{let t=await v.github.replyToReviewThread(su(e.node.config.threadId,"Review thread ID",500),su(e.node.config.body,"Review reply",1e5),"WORKFLOW_AUTOMATION"),r=sw(e);return{output:t,links:r?[r]:void 0}}),b.register("GITHUB_SET_REVIEW_THREAD_RESOLVED",async e=>{let t=await v.github.setReviewThreadResolved(su(e.node.config.threadId,"Review thread ID",500),!1!==e.node.config.resolved,"WORKFLOW_AUTOMATION"),r=sw(e);return{output:t,links:r?[r]:void 0}}),b.register("GITHUB_CREATE_PR",async e=>{let t=sS(e),r=await v.github.createPullRequest({...t,baseRefName:su(e.node.config.baseRefName??(0,n$.getSessionValue)(e.sessionData,"worktree.baseBranch"),"Base branch",500),headRefName:su(e.node.config.headRefName??(0,n$.getSessionValue)(e.sessionData,"worktree.branch"),"Head branch",500),title:su(e.node.config.title??(0,n$.getSessionValue)(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 v.worktrees.attachPullRequestForBranch(`github.com/${t.owner}/${t.name}`,r.headRefName,r);let i=sI(r);return{output:i,sessionPatch:{pr:i},links:[sf("PULL_REQUEST",n4(t.owner,t.name,r.number),r.title,r.url)]}}),b.register("GITHUB_SET_PR_LABELS",async e=>{let t=sS(e),r=Array.isArray(e.node.config.labels)?e.node.config.labels.map(String):[],i=await v.github.setPullRequestLabels({...t,number:s_(e),labels:r});return{output:i.labels,sessionPatch:{pr:{labels:i.labels}},links:[sy(e)]}}),b.register("GITHUB_RETRY_PIPELINE",async e=>{let t=await v.github.retryPipeline(su(e.node.config.repositoryId??(0,n$.getSessionValue)(e.sessionData,"pr.repositoryGithubId"),"GitHub repository ID",500),su(e.node.config.checkSuiteId??(0,n$.getSessionValue)(e.sessionData,"pipeline.checkSuiteId"),"Check suite ID",500),"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),r=sb(e);return{output:t,sessionPatch:{pipeline:{status:t.status}},links:r?[r]:void 0}}),b.register("GITHUB_RETRY_JOB",async e=>{let t=await v.github.retryWorkflowJob(su(e.node.config.repositoryId,"GitHub repository ID",500),su(e.node.config.checkSuiteId,"Check suite ID",500),su(e.node.config.jobId,"Workflow job ID",500),"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),r=sb(e);return{output:t,links:r?[r]:void 0}}),b.register("GITHUB_CANCEL_WORKFLOW_RUN",async e=>{let t=await v.github.cancelActionsWorkflowRun(su(e.node.config.codebaseRepositoryId??(0,n$.getSessionValue)(e.sessionData,"repo.id"),"Codebase repository ID",500),su(e.node.config.workflowRunId??(0,n$.getSessionValue)(e.sessionData,"pipeline.runId"),"Workflow run ID",500),!0===e.node.config.force,"WORKFLOW_AUTOMATION",{actor:"workflow",ipAddress:null}),r=sb(e);return{output:t,sessionPatch:{pipeline:{status:"CANCELLED"}},links:r?[r]:void 0}}),b.register("GITHUB_SAVE_AUTO_RETRY",async e=>({output:await v.github.saveAutoRetryRule(sl(e.node.config.input,"Auto-retry rule"))})),b.register("GITHUB_WAIT_CHECKS",async e=>{let t=su(e.node.config.repositoryId??(0,n$.getSessionValue)(e.sessionData,"repo.id"),"Repository ID",500),r=su(e.node.config.workflowRunId??(0,n$.getSessionValue)(e.sessionData,"pipeline.runId"),"Workflow run ID",500),i=sb(e);return{links:i?[i]:void 0,wait:{kind:"GITHUB_CHECKS",externalKey:JSON.stringify({repositoryId:t,workflowRunId:r}),resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}}}),k=eu,S=e,k.register("WORKTREE_CREATE",async e=>{let t=sT(e),r=await S.worktrees.createWorktree({codebaseId:sR(e),selection:t,requestId:sp(e,"create")});return sm(e,r,{worktree:{branch:t.branchName,baseBranch:t.baseBranch}})}),k.register("WORKTREE_CHANGE_BRANCH",async e=>{let t=sC(e),r=sT(e),i=await S.worktrees.changeWorktreeBranch({worktreeId:t,selection:r,requestId:sp(e,"change-branch"),stashOnFailure:!0===e.node.config.stashOnFailure});return sm(e,i,{worktree:{branch:r.branchName,baseBranch:r.baseBranch}},[sf("WORKTREE",t,"Worktree")])}),k.register("WORKTREE_REFRESH_PULL_REQUEST",async e=>{let t=sC(e),r=(await S.worktrees.refreshPullRequest(t)).pullRequest,i=r?sI(r):null,a=[sf("WORKTREE",t,"Worktree")];if(r){let[e,t]=r.repositoryNameWithOwner.split("/");e&&t&&a.push(sf("PULL_REQUEST",n4(e,t,r.number),r.title,r.url))}return{output:{found:!!r,pullRequest:r},sessionPatch:{pr:i},links:a}}),k.register("WORKTREE_OPERATION",async e=>{let t=String(e.node.config.operation??"SYNC").toUpperCase();if("OPEN_EDITOR"===t||!aR.WORKTREE_OPERATIONS.includes(t))throw Error("Worktree operation is invalid for workflow execution");let r=sC(e),i=await S.worktrees.runOperation(r,t,sp(e,t.toLowerCase()));return sm(e,i,void 0,[sf("WORKTREE",r,"Worktree")])}),k.register("WORKTREE_SET_AUTO_SYNC",async e=>{let t=sC(e),r=String(e.node.config.action??"ENABLE").toUpperCase(),i="CANCEL"===r?{cancelled:await S.worktreeAutomations.cancelAutoSync(t)}:"RETRY"===r?await S.worktreeAutomations.retryAutoSync(t):"ENABLE"===r?await S.worktreeAutomations.configureAutoSync({worktreeId:t,conflictWorkflowId:sc(e.node.config.conflictWorkflowId,500),conflictWorkflowChoice:sc(e.node.config.conflictWorkflowChoice,500)}):null;if(!i)throw Error("Unknown Auto Sync action");return{output:i,sessionPatch:{worktree:{autoSync:i}},links:[sf("WORKTREE",t,"Worktree")]}}),k.register("WORKTREE_SET_AUTO_MERGE",async e=>{let t,r=sC(e),i=String(e.node.config.action??"ENABLE").toUpperCase();if("CANCEL"===i)t={cancelled:await S.worktreeAutomations.cancelAutoMerge(r)};else if("RETRY"===i)t=await S.worktreeAutomations.retryAutoMerge(r);else if("ENABLE"===i){let i=Number(e.node.config.pullRequestNumber??(0,n$.getSessionValue)(e.sessionData,"pr.number"));if(!Number.isInteger(i)||i<1)throw Error("Pull request number must be a positive integer");let a=String(e.node.config.method??"SQUASH").toUpperCase();if(!["MERGE","REBASE","SQUASH"].includes(a))throw Error("Merge method is invalid");t=await S.worktreeAutomations.configureAutoMerge({worktreeId:r,repositoryNameWithOwner:su(e.node.config.repositoryNameWithOwner??(0,n$.getSessionValue)(e.sessionData,"repo.nameWithOwner"),"Repository",500),pullRequestNumber:i,method:a,commitHeadline:su(e.node.config.commitHeadline??(0,n$.getSessionValue)(e.sessionData,"pr.title"),"Commit headline",1e3),commitBody:String(e.node.config.commitBody??""),authorEmail:sc(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:[sf("WORKTREE",r,"Worktree")]}}),k.register("WORKTREE_DELETE",async e=>{let t=await S.worktrees.deleteWorktree({worktreeId:sC(e),deleteRemoteBranch:!0===e.node.config.deleteRemoteBranch,requestId:sp(e,"delete")});return sm(e,t)}),k.register("WORKTREE_MOVE",async e=>{let t=await S.worktrees.moveWorktree({sourceWorktreeId:sC(e),targetCodebaseId:su(e.node.config.targetCodebaseId,"Target codebase ID",500),targetWorktreeId:sc(e.node.config.targetWorktreeId,500),deleteSource:!0===e.node.config.deleteSource,requestId:sp(e,"move")}),r=t.targetWorktreeId??(!0===e.node.config.deleteSource?null:sC(e));return{output:t,links:[...r?[sf("WORKTREE",r,"Worktree")]:[],{kind:"WORKTREE_MOVE",resourceId:t.id,label:"Worktree move"}],wait:{kind:"WORKTREE_MOVE",externalKey:t.id,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}}}),k.register("WORKTREE_INSPECT",async e=>{let t=sC(e),r=await S.worktrees.inspect(t,sp(e,"inspect"));return{output:r,sessionPatch:{worktree:{commits:r.commits,changes:r.changes,branchChanges:r.branchChanges}},links:[sf("WORKTREE",t,"Worktree")]}}),k.register("WORKTREE_INSPECT_GIT",async e=>{let t=sC(e),r=await S.worktrees.inspectGitState(t,sp(e,"inspect-git"));return{output:r,sessionPatch:{worktree:{...r}},links:[sf("WORKTREE",t,"Worktree")]}}),k.register("WORKTREE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!aR.WORKTREE_GIT_OPERATIONS.includes(t))throw Error("Worktree Git operation is invalid");let r=sC(e),i=await S.worktrees.runGitOperation({worktreeId:r,operation:t,branch:sc(e.node.config.branch,500),stashOid:sc(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:sp(e,t.toLowerCase())});return sm(e,i,void 0,[sf("WORKTREE",r,"Worktree")])}),k.register("WORKTREE_WAIT_PUSH_READY",async e=>{let t=sC(e);return{links:[sf("WORKTREE",t,"Worktree")],wait:{kind:"WORKTREE_PUSH_READY",externalKey:t,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}}}),E=eu,I=e,E.register("CODEBASE_FETCH_REFRESH",async e=>{let t=sR(e),r="REFRESH"===e.node.config.operation?rm.CODEBASE_REFRESH_JOB_KIND:rm.CODEBASE_FETCH_JOB_KIND,i=await I.codebases.runOperation(r,[t],sp(e,r)),a=i.jobs[0];if(!a)throw Error(i.skipped[0]?.reason??"Codebase operation was skipped");return sm(e,a,void 0,[sf("CODEBASE",t,"Codebase")])}),E.register("CODEBASE_INSPECT_GIT",async e=>{let t=sR(e),r=await I.codebases.inspectGitState(t,sp(e,"inspect-git"));return{output:r,sessionPatch:{codebase:{...r}},links:[sf("CODEBASE",t,"Codebase")]}}),E.register("CODEBASE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!rm.CODEBASE_GIT_OPERATIONS.includes(t))throw Error("Codebase Git operation is invalid");let r=sR(e),i=await I.codebases.runGitOperation({codebaseId:r,operation:t,branch:sc(e.node.config.branch,500),stashOid:sc(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:sp(e,t.toLowerCase())});return sm(e,i,void 0,[sf("CODEBASE",r,"Codebase")])}),x=eu,A=e,x.register("BUILD_START",async e=>{let t=String(e.node.config.action??"BUILD").toUpperCase();if(!w.BUILD_ACTIONS.includes(t))throw Error("Build action is invalid");let r=await A.builds.startBuild({worktreeId:sC(e),configurationId:su(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:sp(e,"build"),telemetryRequestOrigin:"workflow"});return{output:r,sessionPatch:{build:{id:r.id,status:r.status,action:r.action}},links:[{kind:"BUILD",resourceId:r.id,label:`${r.action} build`,url:`/builds/${r.id}`}],wait:{kind:"BUILD",externalKey:r.id,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}}}),x.register("BUILD_READ_TEST_RESULTS",async e=>{let t,r=sD(e),i=(await A.builds.reportsForBuild(r)).filter(({kind:e,status:t})=>"TEST_RESULTS"===e&&"READY"===t).at(-1);if(!i)throw Error("Test results are not ready");let a=sl(JSON.parse(i.summaryJson),"Test summary"),n=sl(JSON.parse(i.dataJson),"Test results");return{output:{summary:a,tests:n.tests??[]},sessionPatch:{build:{testSummary:a,tests:n.tests??[]}},links:[sf("BUILD",r,"Build",t)]}}),x.register("BUILD_READ_COVERAGE",async e=>{let t=sD(e),r=(await A.builds.reportsForBuild(t)).filter(({kind:e,status:t})=>"CODE_COVERAGE"===e&&"READY"===t).at(-1);if(!r)throw Error("Coverage results are not ready");let i=sl(JSON.parse(r.summaryJson),"Coverage summary"),a=sl(JSON.parse(r.dataJson),"Coverage results");return{output:{summary:i,files:a.files??[],changedFiles:a.changedFiles??[]},sessionPatch:{build:{coverageSummary:i,coverageFiles:a.files??[],changedCoverageFiles:a.changedFiles??[]}},links:[sf("BUILD",t,"Build",`/builds/${t}/coverage`)]}}),x.register("BUILD_EXPORT",async e=>{let t,r,i=sD(e),a=await A.builds.exportArchive({buildId:i,requestId:sp(e,"export"),settings:sl(e.node.config.settings,"Export settings")});return a.jobId?sm(e,{id:a.jobId,timeoutSeconds:3600},{build:{exportId:a.id}},[sf("BUILD",i,"Build",t)]):{output:a,links:[sf("BUILD",i,"Build",r)]}}),x.register("BUILD_DEPLOY",async e=>{let t,r,i=sD(e),a=await A.builds.runBuild({buildId:i,destinations:Array.isArray(e.node.config.destinations)?e.node.config.destinations:[],requestId:sp(e,"deploy")}),n=a.find(({jobId:e})=>!!e)?.jobId;return n?sm(e,{id:n,timeoutSeconds:3600},void 0,[sf("BUILD",i,"Build",t)]):{output:a,links:[sf("BUILD",i,"Build",r)]}}),x.register("BUILD_CANCEL",async e=>{let t,r=sD(e),i=await A.builds.cancelBuild(r);return{output:i,sessionPatch:{build:{id:i?.id,status:i?.status}},links:[sf("BUILD",r,"Build",t)]}}),_=eu,C=e,eh=async e=>{let t=await C.diskSpace.snapshot(e);return{output:t,sessionPatch:t,links:[sf("AGENT",e,t.agent.name,`/agents/${encodeURIComponent(e)}`)]}},_.register("DISK_SPACE_LOAD",async e=>eh(sN(e))),_.register("DISK_SPACE_REFRESH",async e=>{let t=sN(e),r=await C.diskSpace.requestRefresh(t);return{output:r,links:[sf("AGENT",t,"Agent",`/agents/${encodeURIComponent(t)}`)],wait:{kind:"DISK_SPACE_REPORT",externalKey:JSON.stringify(r),resumeAfter:so(e.node.config,2),timeoutAt:sn(e.node.config,180)}}}),_.register("DISK_SPACE_UPDATE_THRESHOLDS",async e=>{let t=await C.diskSpace.updateSettings({normalThresholdGiB:Number(e.node.config.normalThresholdGiB),pressureThresholdGiB:Number(e.node.config.pressureThresholdGiB)});return{output:t,sessionPatch:{disk:t}}}),_.register("DISK_SPACE_SET_MONITORING",async e=>{let t=sN(e);return await C.diskSpace.setMonitoring(t,!0===e.node.config.enabled),eh(t)}),_.register("DISK_SPACE_SET_PRESSURE_MODE",async e=>{let t=sN(e);return await C.diskSpace.setManualPressureMode(t,!0===e.node.config.enabled),eh(t)}),function(e,t){for(let[r,i]of(e.register("RUN_CREATE_PLAN",async e=>{let r=await t.runs.create(sP(e,"PLAN"));if(!r)throw Error("Plan could not be created");return sh(e,r,!0)}),e.register("RUN_CREATE_SESSION",async e=>{let r=await t.runs.create(sP(e,"SESSION"));if(!r)throw Error("Session could not be created");return sh(e,r,!0)}),e.register("RUN_PLAY_PLAN",async e=>{let r=await t.runs.playPlan(sO(e),Array.isArray(e.node.config.mcpPresetIds)?e.node.config.mcpPresetIds.map(String):[]);if(!r)throw Error("Plan could not be played");return sh(e,r,!0)}),e.register("RUN_FOLLOW_UP",async e=>{let r=sP(e,"SESSION"),i=await t.runs.followUp(sO(e),{...r,followUpMode:su(e.node.config.followUpMode??"RESUME","Follow-up mode",50),contextMode:sc(e.node.config.contextMode,50)});if(!i)throw Error("Follow-up could not be created");return sh(e,i,!0)}),e.register("RUN_STEER",async e=>{let r=await t.runs.steer(sO(e),su(e.node.config.prompt,"Steering prompt",2e5),Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[]);if(!r)throw Error("Run could not be steered");return sh(e,r)}),e.register("RUN_ANSWER",async e=>{let r=await t.runs.answerQuestion(su(e.node.config.batchId,"Question batch ID",500),e.node.config.answers??{});if(!r)throw Error("Question could not be answered");return sh(e,r)}),[["RUN_PAUSE","PAUSE"],["RUN_CONTINUE","CONTINUE"],["RUN_CANCEL","CANCEL"]]))e.register(r,async e=>{let r=await t.runs.lifecycle(sO(e),i);if(!r)throw Error("Run lifecycle operation failed");return sh(e,r)});e.register("RUN_REVISE_ANSWER",async e=>{let r=su(e.node.config.batchId,"Question batch ID",500),i=await t.runs.questionBatch(r);if(!i)throw Error("Question batch was not found");if(i.revisionPreparedAt){let i=await t.runs.reviseAnswer(r,e.node.config.answers??{},!0===e.node.config.stash,!1!==e.node.config.rollback);if(!i)throw Error("Answer revision failed");return sh(e,i)}await t.runs.prepareAnswerRevision(r);let a=sv(e);return{links:a?[a]:void 0,wait:{kind:"RUN_ANSWER_REVISION",externalKey:JSON.stringify({batchId:r,answers:e.node.config.answers??{},stash:!0===e.node.config.stash,rollback:!1!==e.node.config.rollback}),resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}}}),e.register("RUN_READ_RESULT",async e=>{let r=await t.runs.get(sO(e));if(!r)throw Error("Run was not found");let[i,a,n,s]=await Promise.all([t.runs.events({runId:r.id,first:500}),t.runs.questions({runId:r.id,first:200}),t.runs.usage(r.id),t.runs.linkedItems(r.id)]);return sh(e,{...r,events:i,questions:a,usage:n,links:s})}),e.register("RUN_CAPTURE_CHECKPOINT",async e=>{let t=await (0,tX.getPrismaClient)(),r=await t.runCheckpoint.findFirst({where:{runId:sO(e)},orderBy:{createdAt:"desc"}});if(!r)throw Error("Run has no captured checkpoint");let i=sv(e);return{output:r,sessionPatch:{steps:{[e.node.id]:{snapshotId:r.id}}},links:[...i?[i]:[],{kind:"CHECKPOINT",resourceId:r.id,label:`${r.kind} checkpoint`}]}}),e.register("RUN_ARCHIVE_DELETE",async e=>{let r=sO(e),i=!0===e.node.config.delete,a=i?await t.runs.deleteRuns([r]):await t.runs.archive([r],!1!==e.node.config.archived),n=i?null:sv(e);return{output:{id:r,affected:a},links:n?[n]:void 0}})}(eu,e),R=eu,T=e,R.register("SAVED_COMMAND",async e=>{let t=su(e.node.config.commandId,"Saved command",500),r=await T.commands.getDefinition(t);if(!r||r.archivedAt)throw Error("Saved command is unavailable");let i="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT";if("WAIT_FOR_EXIT"===i&&"ALWAYS"===r.restartPolicy)throw Error("Always-restart commands require fire and forget");let a=String(e.node.config.targetMode??"CONTEXT"),n=null,s=null,o=new Set(["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME"]).has(r.targetKind);if("FIXED_AGENT"===a)n=su(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===a)s=su(e.node.config.worktreeId,"Fixed worktree",500);else if(o){let t=(0,n$.getSessionValue)(e.sessionData,"agent.id")??(0,n$.getSessionValue)(e.sessionData,"codebase.agentId");if("string"==typeof t&&(n=t),!n){let t=(0,n$.getSessionValue)(e.sessionData,"worktree.id");if("string"==typeof t){let e=await (0,tX.getPrismaClient)(),r=await e.worktree.findUnique({where:{id:t},select:{codebase:{select:{agentId:!0}}}});n=r?.codebase.agentId??null}}}else{let t=(0,n$.getSessionValue)(e.sessionData,"worktree.id");"string"==typeof t&&(s=t)}let l=await T.commands.startRun({commandId:t,agentId:n,worktreeId:s,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!l)throw Error("Command run could not be created");return{output:{id:l.id,displayNumber:l.displayNumber,status:l.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:l.id,displayNumber:l.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:l.id,label:`Command #${l.displayNumber}`,url:`/commands/runs/${l.id}`}],wait:"WAIT_FOR_EXIT"===i?{kind:"COMMAND_RUN",externalKey:l.id,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}:void 0}}),R.register("CUSTOM_COMMAND",async e=>{let t=su(e.node.config.script,"Custom command",1e6),r="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT",i=String(e.node.config.targetMode??"CONTEXT"),a=null,n=null;if("FIXED_AGENT"===i)a=su(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===i)n=su(e.node.config.worktreeId,"Fixed worktree",500);else{let t=(0,n$.getSessionValue)(e.sessionData,"worktree.id");if("string"==typeof t)n=t;else{let t=(0,n$.getSessionValue)(e.sessionData,"agent.id")??(0,n$.getSessionValue)(e.sessionData,"codebase.agentId");"string"==typeof t&&(a=t)}}if(!a&&!n)throw Error("Custom command context has no agent or worktree target");let s=await T.commands.startCustomRun({script:t,agentId:a,worktreeId:n,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!s)throw Error("Custom command run could not be created");return{output:{id:s.id,displayNumber:s.displayNumber,status:s.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:s.id,displayNumber:s.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:s.id,label:`Command #${s.displayNumber}`,url:`/commands/runs/${s.id}`}],wait:"WAIT_FOR_EXIT"===r?{kind:"COMMAND_RUN",externalKey:s.id,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config)}:void 0}}),R.register("SKILL_APPLY",async e=>{let t=await T.skills.prepareSync(e.node.config.groupId?"GROUP":"ALL",sc(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:so(e.node.config),timeoutAt:sn(e.node.config)}}}),R.register("NOTIFICATION_SEND",async e=>{let t=await (0,tX.getPrismaClient)(),r=await t.$transaction(t=>T.notifications.recordInTransaction(t,{dedupeKey:`${e.run.id}:${e.node.id}:${e.attempt.generation}`,typeKey:"WORKFLOW_MESSAGE",title:su(e.node.config.title,"Notification title",240),body:su(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(0,n$.getSessionValue)(e.sessionData,"worktree.id")?String((0,n$.getSessionValue)(e.sessionData,"worktree.id")):null}));return T.notifications.created(r),{output:r}}),R.register("IOS_PUSH_SEND",async e=>({output:await T.pushNotifications.send({requestId:sp(e,"ios-push"),editor:e.node.config.editor,targetMode:su(e.node.config.targetMode??"ALL","Push target mode",50),registrationIds:Array.isArray(e.node.config.registrationIds)?e.node.config.registrationIds.map(String):[],channelId:sc(e.node.config.channelId,500),directToken:sc(e.node.config.directToken,2e4),directTokenEncoding:"BASE64"===e.node.config.directTokenEncoding?"BASE64":"HEX",directEnvironment:"PRODUCTION"===e.node.config.directEnvironment?"PRODUCTION":"SANDBOX"})})),R.register("MCP_CALL",async e=>{let t=await T.tools.callTool({groupId:su(e.node.config.groupId,"MCP tool group",500),name:su(e.node.config.name,"MCP tool name",500),arguments:sl(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}}}}}),D=eu,N=e,em=async(e,t,r,i,a={})=>{let n=sl(await N.tools.callTool({groupId:t,name:r,arguments:i},{caller:`workflow:${e.run.id}`,correlationId:e.attempt.id,source:"WORKFLOW"}),`${r} tool result`),s=sl(n.structuredContent,`${r} structured content`),o=a.sessionPatch?await a.sessionPatch(s):{};return{output:s,sessionPatch:{steps:{[e.node.id]:{output:s}},...o},wait:a.wait?.(s)}},ef=(e,t,r,i)=>({kind:t,externalKey:r,resumeAfter:so(e.node.config),timeoutAt:sn(e.node.config,i)}),D.register("COMMAND_RERUN",async e=>{let t=sd(e,"commandRunId","command.id","Command run ID");return em(e,"builtin:commands","rerun_command",{id:t},{sessionPatch:e=>({command:sl(e.run,"Command run output")}),wait:t=>ef(e,"COMMAND_RUN",su(sl(t.run,"Command run output").id,"Command run ID",500))})}),D.register("COMMAND_TERMINATE",async e=>{let t=sd(e,"commandRunId","command.id","Command run ID");return em(e,"builtin:commands","terminate_command_run",{id:t},{sessionPatch:e=>({command:sl(e.run,"Command run output")})})}),D.register("COMMAND_READ_OUTPUT",async e=>{let t=sd(e,"commandRunId","command.id","Command run ID");return em(e,"builtin:commands","get_command_run_output",{runId:t,first:Number(e.node.config.first??1e3)},{sessionPatch:e=>({command:{id:t,output:e.chunks}})})}),D.register("WORKTREE_INSPECT_DIFF",async e=>{let t=sd(e,"worktreeId","worktree.id","Worktree ID");return em(e,"builtin:worktrees","inspect_worktree_diff",{worktreeId:t,scope:su(e.node.config.scope,"Diff scope",100),path:e.node.config.path,previousPath:e.node.config.previousPath,commitSha:e.node.config.commitSha,requestId:sp(e,"diff")},{sessionPatch:e=>({worktree:{id:t,diff:e.inspection}})})}),D.register("WORKTREE_UPDATE_METADATA",async e=>{let t=sd(e,"worktreeId","worktree.id","Worktree ID");return em(e,"builtin:worktrees","update_worktree_metadata",{id:t,baseBranch:e.node.config.baseBranch,highlightColor:e.node.config.highlightColor},{sessionPatch:async e=>(0,n$.mergeSessionData)(await N.worktrees.workflowSessionDataForWorktree(t,{includeMissing:!0}),{worktree:sl(e.worktree,"Worktree output")})})}),D.register("WORKTREE_MOVE_CONTROL",e=>em(e,"builtin:worktrees","CANCEL"===e.node.config.operation?"cancel_worktree_move":"retry_worktree_move_with_stash",{id:su(e.node.config.moveId,"Move ID",500)},{sessionPatch:async e=>{let t=sl(e.move,"Worktree move output"),r="string"==typeof t.targetWorktreeId&&t.targetWorktreeId||"string"==typeof t.sourceWorktreeId&&t.sourceWorktreeId||null,i=r?await N.worktrees.workflowSessionDataForWorktree(r,{includeMissing:!0}):{};return(0,n$.mergeSessionData)(i,{worktree:{move:t}})}})),D.register("BUILD_REBUILD",async e=>{let t=sd(e,"buildId","build.id","Build ID");return em(e,"builtin:builds","rebuild_build",{buildId:t,requestId:sp(e,"rebuild")},{sessionPatch:e=>({build:sl(e.build,"Build output")}),wait:t=>ef(e,"BUILD",su(sl(t.build,"Build output").id,"Build ID",500))})}),D.register("BUILD_GENERATE_REPORT",async e=>{let t=sd(e,"buildId","build.id","Build ID");return em(e,"builtin:builds","generate_build_report",{buildId:t,kind:"TEST_RESULTS"===e.node.config.reportKind?"TEST_RESULTS":"CODE_COVERAGE",requestId:sp(e,"report")},{sessionPatch:e=>({build:{id:t,report:e.report}})})}),D.register("BUILD_DELETE",e=>{let t=Array.isArray(e.node.config.buildIds)?e.node.config.buildIds.map(String):[sd(e,"buildId","build.id","Build ID")];return em(e,"builtin:builds","delete_builds",{ids:t},{sessionPatch:e=>({build:{ids:t,deletedCount:e.count}})})}),D.register("SKILL_PREPARE_SYNC",e=>em(e,"builtin:skills","prepare_skill_sync",{kind:String(e.node.config.syncKind??"ALL"),groupId:e.node.config.groupId},{sessionPatch:e=>({skillSync:sl(e.run,"Skill sync output")})})),D.register("SKILL_RESOLVE_SYNC",e=>em(e,"builtin:skills","resolve_skill_sync_conflict",{input:{runId:sd(e,"runId","skillSync.id","Skill sync run ID"),itemId:su(e.node.config.itemId,"Conflict item ID",500),resolution:String(e.node.config.resolution??"SKIP")}},{sessionPatch:e=>({skillSync:sl(e.run,"Skill sync output")})})),D.register("SKILL_SKIP_SYNC",e=>em(e,"builtin:skills","skip_skill_sync",{runId:sd(e,"runId","skillSync.id","Skill sync run ID")},{sessionPatch:e=>({skillSync:sl(e.run,"Skill sync output")})})),D.register("BUILD_DATA_REFRESH",e=>em(e,"builtin:build-data","refresh_build_data",{requestId:sp(e,"build-data")},{sessionPatch:e=>({buildData:sl(e.collection,"Build-data collection output")}),wait:t=>{let r=sl(t.collection,"Build-data collection output");return"COMPLETED"===r.status?void 0:ef(e,"BUILD_DATA_COLLECTION",su(r.id,"Build-data collection ID",500),90)}})),D.register("BUILD_DATA_DELETE",e=>em(e,"builtin:build-data","delete_build_data_entries",{collectionId:sd(e,"collectionId","buildData.id","Build-data collection ID"),entryIds:Array.isArray(e.node.config.entryIds)?e.node.config.entryIds.map(String):[],requestId:sp(e,"build-data-delete"),overrideProtection:!0===e.node.config.overrideProtection},{sessionPatch:e=>({buildData:sl(e.collection,"Build-data collection output")})})),D.register("BUILD_DATA_SET_LOCK",e=>{let t=sd(e,"collectionId","buildData.id","Build-data collection ID");return em(e,"builtin:build-data","set_build_data_lock",{collectionId:t,entryId:su(e.node.config.entryId,"Entry ID",500),locked:!0===e.node.config.locked},{sessionPatch:e=>({buildData:{id:t,entry:e.entry}})})}),D.register("SIGNING_REFRESH",e=>em(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 r=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 r.length?ef(e,"AGENT_JOBS",JSON.stringify({ids:r}),90):void 0}})),D.register("SIGNING_SYNC_PROFILE",e=>em(e,"builtin:signing-assets","sync_signing_profile",{uuid:sd(e,"uuid","signingProfile.id","Profile UUID"),sourceAgentId:su(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=>ef(e,"SIGNING_OPERATIONS",JSON.stringify({ids:[su(sl(t.operation,"Signing operation output").id,"Signing operation ID",500)]}),300)})),D.register("SIGNING_DELETE_EXPIRED",e=>em(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 r=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 r.length?ef(e,"SIGNING_OPERATIONS",JSON.stringify({ids:r}),300):void 0}})),D.register("IOS_DEVICE_REGISTER",e=>em(e,"builtin:ios-devices","register_ios_device",{id:sd(e,"deviceId","device.id","Device ID")},{sessionPatch:e=>({device:sl(e.device,"iOS device output")})})),D.register("IOS_DEVICE_REJECT",e=>em(e,"builtin:ios-devices","reject_ios_device",{id:sd(e,"deviceId","device.id","Device ID")},{sessionPatch:e=>({device:sl(e.device,"iOS device output")})})),D.register("AGENT_RECONCILE",async e=>{let t=Array.isArray(e.node.config.agentIds)?e.node.config.agentIds.map(String):(await N.agentControl.listAgents()).map(({id:e})=>e),r=await N.agentControl.requestCodebaseReconcile(t);return{output:{requested:r},sessionPatch:{agent:{requested:r}}}}),D.register("AGENT_UPDATE_CADENCE",async e=>{let t=await N.agentControl.updateCadenceSettings(sd(e,"agentId","agent.id","Agent ID"),sl(e.node.config.settings,"Cadence settings"));return{output:t,sessionPatch:{agent:sl(t,"Agent output")}}}),D.register("CCUSAGE_COLLECT",async e=>{let t=await N.ccusage.collect(sp(e,"ccusage"));return{output:t,sessionPatch:{usage:t}}}),D.register("MODEL_COST_REFRESH",async()=>{let e=await N.modelCosts.refresh();return{output:e,sessionPatch:{modelCosts:e}}}),eg=async(e,t,r)=>{let i=await em(e,"builtin:github",t,r),a=sl(i.output,"GitHub tool output"),n=sI(sl(a.pullRequest,"Pull request output"));return{...i,sessionPatch:{...i.sessionPatch,pr:n}}},ey=e=>({owner:su(e.node.config.owner??(0,n$.getSessionValue)(e.sessionData,"repo.owner"),"Repository owner",200),name:su(e.node.config.name??(0,n$.getSessionValue)(e.sessionData,"repo.name"),"Repository name",200),number:Number(e.node.config.number??(0,n$.getSessionValue)(e.sessionData,"pr.number"))}),D.register("GITHUB_UPDATE_PR",e=>eg(e,"update_pull_request",{...ey(e),title:sc(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})),D.register("GITHUB_SUBMIT_REVIEW",e=>eg(e,"submit_pull_request_review",{...ey(e),event:String(e.node.config.event??"COMMENT"),body:"string"==typeof e.node.config.body?e.node.config.body:void 0})),D.register("GITHUB_REQUEST_REVIEWERS",e=>eg(e,"request_pull_request_reviewers",{...ey(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):[]})),D.register("GITHUB_DISPATCH_WORKFLOW",e=>em(e,"builtin:github","dispatch_github_workflow",{repositoryId:sd(e,"repositoryId","repo.id","Repository ID"),workflowId:su(e.node.config.workflowId,"Workflow ID",500),ref:su(e.node.config.ref,"Git ref",500),inputs:e.node.config.inputs?sl(e.node.config.inputs,"Workflow inputs"):void 0},{sessionPatch:e=>({pipeline:e})})),ew=async(e,t,r)=>{let i=await em(e,"builtin:jira",t,r),a=sl(i.output,"Jira tool output"),n=sE(sl(a.ticket,"Jira ticket output"));return{...i,sessionPatch:{...i.sessionPatch,ticket:n}}},D.register("JIRA_CREATE_TICKET",e=>ew(e,"create_jira_ticket",{projectKey:su(e.node.config.projectKey,"Project key",100),issueTypeId:su(e.node.config.issueTypeId,"Issue type ID",100),summary:su(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?sl(e.node.config.fields,"Additional Jira fields"):void 0})),D.register("JIRA_ADD_WORKLOG",e=>ew(e,"add_jira_worklog",{issueKey:sd(e,"issueKey","ticket.key","Issue key"),timeSpentSeconds:Number(e.node.config.timeSpentSeconds),startedAt:sc(e.node.config.startedAt,100),comment:"string"==typeof e.node.config.comment?{format:"MARKDOWN",value:e.node.config.comment}:void 0})),D.register("JIRA_LINK_TICKETS",e=>ew(e,"link_jira_tickets",{inwardIssueKey:sd(e,"inwardIssueKey","ticket.key","Inward issue key"),outwardIssueKey:su(e.node.config.outwardIssueKey,"Outward issue key",100),linkType:su(e.node.config.linkType,"Link type",100)})),(ep=new sL($,U,ea,L,{buildData:F,commands:q,credentials:P,iosDevices:X,polling:j,pushNotifications:G,signingAssets:V,skills:z})).start(),ec.startRuntime(),ed.startRuntime(),en.startRuntime(),os.serverServices={prismaService:O,credentialService:P,agentControlService:U,ccusageService:M,buildDataService:F,buildsService:J,codebasesService:Z,codebaseToolsService:Y,jiraService:Q,iosDevicesService:X,gitHubService:er,gitHubPipelineStatusService:ee,gitHubActionsNotificationsService:et,cacheServerService:ei,worktreesService:ea,worktreeAutomationService:ed,skillsService:z,telemetryService:K,signingAssetsService:V,pushNotificationsService:G,notificationsService:B,pollingService:j,modelCostsService:H,runsService:W,commandsService:q,diskSpaceService:L,systemStatusService:en,actionCenterService:es,globalSearchService:eo,toolsService:el,workflowEventsService:$,workflowsService:ec,workflowEventBridge:ep})}],887394)}];
811
811
 
812
812
  //# sourceMappingURL=_0rjgtla._.js.map