@ai-development-environment/server 0.0.29 → 0.0.31

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 (357) hide show
  1. package/package.json +1 -1
  2. package/prisma-runtime/prisma/migrations/20260719010000_add_build_reports/migration.sql +29 -0
  3. package/prisma-runtime/prisma/schema.prisma +23 -0
  4. package/standalone/.next/BUILD_ID +1 -1
  5. package/standalone/.next/app-path-routes-manifest.json +3 -0
  6. package/standalone/.next/build-manifest.json +6 -6
  7. package/standalone/.next/prerender-manifest.json +3 -3
  8. package/standalone/.next/routes-manifest.json +26 -0
  9. package/standalone/.next/server/app/[locale]/actions/page/build-manifest.json +3 -3
  10. package/standalone/.next/server/app/[locale]/actions/page.js.nft.json +1 -1
  11. package/standalone/.next/server/app/[locale]/actions/page_client-reference-manifest.js +1 -1
  12. package/standalone/.next/server/app/[locale]/agents/[id]/page/build-manifest.json +3 -3
  13. package/standalone/.next/server/app/[locale]/agents/[id]/page.js.nft.json +1 -1
  14. package/standalone/.next/server/app/[locale]/agents/[id]/page_client-reference-manifest.js +1 -1
  15. package/standalone/.next/server/app/[locale]/agents/page/build-manifest.json +3 -3
  16. package/standalone/.next/server/app/[locale]/agents/page.js.nft.json +1 -1
  17. package/standalone/.next/server/app/[locale]/agents/page_client-reference-manifest.js +1 -1
  18. package/standalone/.next/server/app/[locale]/build-data/page/build-manifest.json +3 -3
  19. package/standalone/.next/server/app/[locale]/build-data/page.js.nft.json +1 -1
  20. package/standalone/.next/server/app/[locale]/build-data/page_client-reference-manifest.js +1 -1
  21. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page/app-paths-manifest.json +3 -0
  22. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page/build-manifest.json +16 -0
  23. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page/next-font-manifest.json +11 -0
  24. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page/react-loadable-manifest.json +1 -0
  25. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page/server-reference-manifest.json +4 -0
  26. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page.js +16 -0
  27. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page.js.map +5 -0
  28. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page.js.nft.json +1 -0
  29. package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page_client-reference-manifest.js +3 -0
  30. package/standalone/.next/server/app/[locale]/builds/[buildId]/page/build-manifest.json +3 -3
  31. package/standalone/.next/server/app/[locale]/builds/[buildId]/page.js.nft.json +1 -1
  32. package/standalone/.next/server/app/[locale]/builds/[buildId]/page_client-reference-manifest.js +1 -1
  33. package/standalone/.next/server/app/[locale]/builds/page/build-manifest.json +3 -3
  34. package/standalone/.next/server/app/[locale]/builds/page.js.nft.json +1 -1
  35. package/standalone/.next/server/app/[locale]/builds/page_client-reference-manifest.js +1 -1
  36. package/standalone/.next/server/app/[locale]/codebases/[codebaseId]/page/build-manifest.json +3 -3
  37. package/standalone/.next/server/app/[locale]/codebases/[codebaseId]/page.js.nft.json +1 -1
  38. package/standalone/.next/server/app/[locale]/codebases/[codebaseId]/page_client-reference-manifest.js +1 -1
  39. package/standalone/.next/server/app/[locale]/codebases/page/build-manifest.json +3 -3
  40. package/standalone/.next/server/app/[locale]/codebases/page.js.nft.json +1 -1
  41. package/standalone/.next/server/app/[locale]/codebases/page_client-reference-manifest.js +1 -1
  42. package/standalone/.next/server/app/[locale]/codebases/repositories/[repositoryId]/page/build-manifest.json +3 -3
  43. package/standalone/.next/server/app/[locale]/codebases/repositories/[repositoryId]/page.js.nft.json +1 -1
  44. package/standalone/.next/server/app/[locale]/codebases/repositories/[repositoryId]/page_client-reference-manifest.js +1 -1
  45. package/standalone/.next/server/app/[locale]/comments/page/build-manifest.json +3 -3
  46. package/standalone/.next/server/app/[locale]/comments/page.js.nft.json +1 -1
  47. package/standalone/.next/server/app/[locale]/comments/page_client-reference-manifest.js +1 -1
  48. package/standalone/.next/server/app/[locale]/jira/cache/page/build-manifest.json +3 -3
  49. package/standalone/.next/server/app/[locale]/jira/cache/page.js.nft.json +1 -1
  50. package/standalone/.next/server/app/[locale]/jira/cache/page_client-reference-manifest.js +1 -1
  51. package/standalone/.next/server/app/[locale]/jira/cache/tickets/[issueKey]/page/build-manifest.json +3 -3
  52. package/standalone/.next/server/app/[locale]/jira/cache/tickets/[issueKey]/page.js.nft.json +1 -1
  53. package/standalone/.next/server/app/[locale]/jira/cache/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
  54. package/standalone/.next/server/app/[locale]/jira/tickets/[issueKey]/page/build-manifest.json +3 -3
  55. package/standalone/.next/server/app/[locale]/jira/tickets/[issueKey]/page.js.nft.json +1 -1
  56. package/standalone/.next/server/app/[locale]/jira/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
  57. package/standalone/.next/server/app/[locale]/jira/tickets/page/build-manifest.json +3 -3
  58. package/standalone/.next/server/app/[locale]/jira/tickets/page.js.nft.json +1 -1
  59. package/standalone/.next/server/app/[locale]/jira/tickets/page_client-reference-manifest.js +1 -1
  60. package/standalone/.next/server/app/[locale]/jobs/[jobId]/page/build-manifest.json +3 -3
  61. package/standalone/.next/server/app/[locale]/jobs/[jobId]/page.js.nft.json +1 -1
  62. package/standalone/.next/server/app/[locale]/jobs/[jobId]/page_client-reference-manifest.js +1 -1
  63. package/standalone/.next/server/app/[locale]/page/build-manifest.json +3 -3
  64. package/standalone/.next/server/app/[locale]/page.js.nft.json +1 -1
  65. package/standalone/.next/server/app/[locale]/page_client-reference-manifest.js +1 -1
  66. package/standalone/.next/server/app/[locale]/pull-requests/[owner]/[repository]/[number]/page/build-manifest.json +3 -3
  67. package/standalone/.next/server/app/[locale]/pull-requests/[owner]/[repository]/[number]/page.js.nft.json +1 -1
  68. package/standalone/.next/server/app/[locale]/pull-requests/[owner]/[repository]/[number]/page_client-reference-manifest.js +1 -1
  69. package/standalone/.next/server/app/[locale]/pull-requests/page/build-manifest.json +3 -3
  70. package/standalone/.next/server/app/[locale]/pull-requests/page.js.nft.json +1 -1
  71. package/standalone/.next/server/app/[locale]/pull-requests/page_client-reference-manifest.js +1 -1
  72. package/standalone/.next/server/app/[locale]/settings/page/build-manifest.json +3 -3
  73. package/standalone/.next/server/app/[locale]/settings/page.js.nft.json +1 -1
  74. package/standalone/.next/server/app/[locale]/settings/page_client-reference-manifest.js +1 -1
  75. package/standalone/.next/server/app/[locale]/skills/[skillId]/page/build-manifest.json +3 -3
  76. package/standalone/.next/server/app/[locale]/skills/[skillId]/page.js.nft.json +1 -1
  77. package/standalone/.next/server/app/[locale]/skills/[skillId]/page_client-reference-manifest.js +1 -1
  78. package/standalone/.next/server/app/[locale]/skills/groups/[groupId]/page/build-manifest.json +3 -3
  79. package/standalone/.next/server/app/[locale]/skills/groups/[groupId]/page.js.nft.json +1 -1
  80. package/standalone/.next/server/app/[locale]/skills/groups/[groupId]/page_client-reference-manifest.js +1 -1
  81. package/standalone/.next/server/app/[locale]/skills/groups/page/build-manifest.json +3 -3
  82. package/standalone/.next/server/app/[locale]/skills/groups/page.js.nft.json +1 -1
  83. package/standalone/.next/server/app/[locale]/skills/groups/page_client-reference-manifest.js +1 -1
  84. package/standalone/.next/server/app/[locale]/skills/page/build-manifest.json +3 -3
  85. package/standalone/.next/server/app/[locale]/skills/page.js.nft.json +1 -1
  86. package/standalone/.next/server/app/[locale]/skills/page_client-reference-manifest.js +1 -1
  87. package/standalone/.next/server/app/[locale]/skills/sync/[runId]/page/build-manifest.json +3 -3
  88. package/standalone/.next/server/app/[locale]/skills/sync/[runId]/page.js.nft.json +1 -1
  89. package/standalone/.next/server/app/[locale]/skills/sync/[runId]/page_client-reference-manifest.js +1 -1
  90. package/standalone/.next/server/app/[locale]/tools/page/build-manifest.json +3 -3
  91. package/standalone/.next/server/app/[locale]/tools/page.js.nft.json +1 -1
  92. package/standalone/.next/server/app/[locale]/tools/page_client-reference-manifest.js +1 -1
  93. package/standalone/.next/server/app/[locale]/usage/page/build-manifest.json +3 -3
  94. package/standalone/.next/server/app/[locale]/usage/page.js.nft.json +1 -1
  95. package/standalone/.next/server/app/[locale]/usage/page_client-reference-manifest.js +1 -1
  96. package/standalone/.next/server/app/[locale]/worktrees/[worktreeId]/page/build-manifest.json +3 -3
  97. package/standalone/.next/server/app/[locale]/worktrees/[worktreeId]/page.js.nft.json +1 -1
  98. package/standalone/.next/server/app/[locale]/worktrees/[worktreeId]/page_client-reference-manifest.js +1 -1
  99. package/standalone/.next/server/app/[locale]/worktrees/page/build-manifest.json +3 -3
  100. package/standalone/.next/server/app/[locale]/worktrees/page.js.nft.json +1 -1
  101. package/standalone/.next/server/app/[locale]/worktrees/page_client-reference-manifest.js +1 -1
  102. package/standalone/.next/server/app/_global-error/page/build-manifest.json +3 -3
  103. package/standalone/.next/server/app/_global-error.html +1 -1
  104. package/standalone/.next/server/app/_global-error.rsc +1 -1
  105. package/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  106. package/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  107. package/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  108. package/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  109. package/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  110. package/standalone/.next/server/app/_not-found/page/build-manifest.json +3 -3
  111. package/standalone/.next/server/app/_not-found.html +1 -1
  112. package/standalone/.next/server/app/_not-found.rsc +1 -1
  113. package/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  114. package/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  115. package/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  116. package/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  117. package/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  118. package/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  119. package/standalone/.next/server/app/api/build-artifact-uploads/[uploadId]/route.js +1 -1
  120. package/standalone/.next/server/app/api/build-artifact-uploads/[uploadId]/route.js.nft.json +1 -1
  121. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route/app-paths-manifest.json +3 -0
  122. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route/build-manifest.json +9 -0
  123. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route/server-reference-manifest.json +4 -0
  124. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route.js +11 -0
  125. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route.js.map +5 -0
  126. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route.js.nft.json +1 -0
  127. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route_client-reference-manifest.js +3 -0
  128. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/route.js +4 -3
  129. package/standalone/.next/server/app/api/builds/[buildId]/artifacts/[artifactId]/route.js.nft.json +1 -1
  130. package/standalone/.next/server/app/api/codebases/by-path/route.js.nft.json +1 -1
  131. package/standalone/.next/server/app/api/codebases/route.js.nft.json +1 -1
  132. package/standalone/.next/server/app/api/graphql/route.js.nft.json +1 -1
  133. package/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  134. package/standalone/.next/server/app/api/tools/call/route.js.nft.json +1 -1
  135. package/standalone/.next/server/app/api/tools/catalog/route.js.nft.json +1 -1
  136. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route/app-paths-manifest.json +3 -0
  137. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route/build-manifest.json +9 -0
  138. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route/server-reference-manifest.json +4 -0
  139. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route.js +10 -0
  140. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route.js.map +5 -0
  141. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route.js.nft.json +1 -0
  142. package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route_client-reference-manifest.js +3 -0
  143. package/standalone/.next/server/app-paths-manifest.json +3 -0
  144. package/standalone/.next/server/chunks/07_e_builds_[buildId]_artifacts_[artifactId]_manifest_plist_route_actions_18mzaf3.js +3 -0
  145. package/standalone/.next/server/chunks/1oeh_server_app_api_worktrees_[worktreeId]_diff-image_route_actions_0nie5n3.js +3 -0
  146. package/standalone/.next/server/chunks/[root-of-the-server]__08mnmfs._.js +3 -0
  147. package/standalone/.next/server/chunks/[root-of-the-server]__0906ea6._.js +3 -0
  148. package/standalone/.next/server/chunks/{[root-of-the-server]__0-ypkf7._.js → [root-of-the-server]__09v6swg._.js} +1 -1
  149. package/standalone/.next/server/chunks/{[root-of-the-server]__1wtng3p._.js → [root-of-the-server]__0aiyd05._.js} +1 -1
  150. package/standalone/.next/server/chunks/{[root-of-the-server]__09skp6r._.js → [root-of-the-server]__0cz4ap5._.js} +1 -1
  151. package/standalone/.next/server/chunks/[root-of-the-server]__0nvcazp._.js +3 -0
  152. package/standalone/.next/server/chunks/[root-of-the-server]__12807ia._.js +3 -0
  153. package/standalone/.next/server/chunks/[root-of-the-server]__15_clsj._.js +3 -0
  154. package/standalone/.next/server/chunks/[root-of-the-server]__1csx222._.js +3 -0
  155. package/standalone/.next/server/chunks/[root-of-the-server]__1ix62p0._.js +122 -0
  156. package/standalone/.next/server/chunks/[root-of-the-server]__1j-hk6b._.js +3 -0
  157. package/standalone/.next/server/chunks/{[root-of-the-server]__15aat79._.js → [root-of-the-server]__1j0u03u._.js} +1 -1
  158. package/standalone/.next/server/chunks/{[root-of-the-server]__0c02fce._.js → [root-of-the-server]__1oa-sy6._.js} +2 -2
  159. package/standalone/.next/server/chunks/[root-of-the-server]__1qmvsu_._.js +3 -0
  160. package/standalone/.next/server/chunks/[root-of-the-server]__1vxtcsq._.js +3 -0
  161. package/standalone/.next/server/chunks/[root-of-the-server]__1w59u6o._.js +3 -0
  162. package/standalone/.next/server/chunks/[root-of-the-server]__1z-3x8k._.js +3 -0
  163. package/standalone/.next/server/chunks/_0exkna-._.js +193 -8
  164. package/standalone/.next/server/chunks/_0jurkow._.js +1 -1
  165. package/standalone/.next/server/chunks/_0rx5rfm._.js +1 -1
  166. package/standalone/.next/server/chunks/_0tufgj0._.js +263 -78
  167. package/standalone/.next/server/chunks/_0w2eghf._.js +193 -8
  168. package/standalone/.next/server/chunks/_152rnkf._.js +17 -17
  169. package/standalone/.next/server/chunks/_16x77b_._.js +1 -1
  170. package/standalone/.next/server/chunks/_1dbqy8c._.js +17 -17
  171. package/standalone/.next/server/chunks/_1vrixpc._.js +17 -17
  172. package/standalone/.next/server/chunks/_1yfz-9u._.js +17 -17
  173. package/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_08x37wy.js +6 -0
  174. package/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0eghv0a.js +3 -0
  175. package/standalone/.next/server/chunks/src_0o4-snj._.js +1 -1
  176. package/standalone/.next/server/chunks/ssr/1oeh_server_app_[locale]_builds_[buildId]_coverage_page_actions_20i_0zd.js +3 -0
  177. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__08bbv6z._.js +9 -0
  178. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ckj6wg._.js +13 -0
  179. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0eit075._.js +3 -0
  180. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qy28ku._.js +3 -0
  181. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tsac-e._.js +15 -0
  182. package/standalone/.next/server/chunks/ssr/{_19fwji0._.js → [root-of-the-server]__0uo4dhz._.js} +2 -2
  183. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__15v1geo._.js +3 -0
  184. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__1qm_j4s._.js +3 -0
  185. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__1s6_fta._.js +3 -0
  186. package/standalone/.next/server/chunks/ssr/_0-o77zz._.js +3 -0
  187. package/standalone/.next/server/chunks/ssr/_00m30gw._.js +3 -0
  188. package/standalone/.next/server/chunks/ssr/_03961l6._.js +3 -0
  189. package/standalone/.next/server/chunks/ssr/{_00ye62k._.js → _08q5hnx._.js} +2 -2
  190. package/standalone/.next/server/chunks/ssr/_093--4s._.js +3 -0
  191. package/standalone/.next/server/chunks/ssr/{_1kaz2gq._.js → _09lh67h._.js} +2 -2
  192. package/standalone/.next/server/chunks/ssr/_0a1ligo._.js +3 -0
  193. package/standalone/.next/server/chunks/ssr/{_1h3p6oi._.js → _0cw_tqx._.js} +2 -2
  194. package/standalone/.next/server/chunks/ssr/_0dq-84j._.js +22 -0
  195. package/standalone/.next/server/chunks/ssr/_0dy1ovj._.js +3 -0
  196. package/standalone/.next/server/chunks/ssr/_0ezo890._.js +3 -0
  197. package/standalone/.next/server/chunks/ssr/{_1_1j9nd._.js → _0id1774._.js} +3 -3
  198. package/standalone/.next/server/chunks/ssr/_0j48up8._.js +1 -1
  199. package/standalone/.next/server/chunks/ssr/_0nhtqty._.js +1 -1
  200. package/standalone/.next/server/chunks/ssr/_0oh246z._.js +3 -0
  201. package/standalone/.next/server/chunks/ssr/_0q8sy0w._.js +3 -0
  202. package/standalone/.next/server/chunks/ssr/_0qra30j._.js +3 -0
  203. package/standalone/.next/server/chunks/ssr/_0t2jwg3._.js +109 -0
  204. package/standalone/.next/server/chunks/ssr/{_1zyjq9y._.js → _0ufkrvm._.js} +2 -2
  205. package/standalone/.next/server/chunks/ssr/{_07tglcd._.js → _0vjihfb._.js} +2 -10
  206. package/standalone/.next/server/chunks/ssr/_0xh-lyy._.js +3 -0
  207. package/standalone/.next/server/chunks/ssr/_15erjna._.js +3 -0
  208. package/standalone/.next/server/chunks/ssr/_17a3xuq._.js +3 -0
  209. package/standalone/.next/server/chunks/ssr/_17p59oz._.js +1 -1
  210. package/standalone/.next/server/chunks/ssr/_1bzibio._.js +109 -0
  211. package/standalone/.next/server/chunks/ssr/{_12ws_f2._.js → _1c2fde9._.js} +2 -2
  212. package/standalone/.next/server/chunks/ssr/{_0mr9u9p._.js → _1dnm1d4._.js} +2 -2
  213. package/standalone/.next/server/chunks/ssr/_1ekznx8._.js +3 -0
  214. package/standalone/.next/server/chunks/ssr/{_1r2rmfp._.js → _1f5k6bj._.js} +2 -2
  215. package/standalone/.next/server/chunks/ssr/_1k1tyz4._.js +3 -0
  216. package/standalone/.next/server/chunks/ssr/_1och_zk._.js +3 -0
  217. package/standalone/.next/server/chunks/ssr/{_0xrpdyy._.js → _1tpguta._.js} +2 -2
  218. package/standalone/.next/server/chunks/ssr/_1v1lo7c._.js +3 -0
  219. package/standalone/.next/server/chunks/ssr/_1vv-dg-._.js +3 -0
  220. package/standalone/.next/server/chunks/ssr/_1zgu74l._.js +1 -1
  221. package/standalone/.next/server/chunks/ssr/messages_de_json_[json]_cjs_1uig1ud._.js +1 -1
  222. package/standalone/.next/server/chunks/ssr/messages_en_json_[json]_cjs_206072-._.js +1 -1
  223. package/standalone/.next/server/chunks/ssr/messages_es_json_[json]_cjs_082yukd._.js +1 -1
  224. package/standalone/.next/server/chunks/ssr/messages_fr_json_[json]_cjs_0j6-w0i._.js +1 -1
  225. package/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uzalot.js +4 -0
  226. package/standalone/.next/server/chunks/ssr/src_components_builds_build-detail-page_tsx_0q1lvps._.js +25 -9
  227. package/standalone/.next/server/chunks/ssr/src_components_builds_coverage-report-page_tsx_1nhwba1._.js +11 -0
  228. package/standalone/.next/server/chunks/ssr/src_components_codebases_repository-detail-page_tsx_20_7wk_._.js +5 -5
  229. package/standalone/.next/server/chunks/ssr/src_components_jira_cache-page_tsx_1znt1yl._.js +1 -1
  230. package/standalone/.next/server/chunks/ssr/src_components_skills_skill-sync-page_tsx_15sidhb._.js +1 -1
  231. package/standalone/.next/server/chunks/ssr/src_components_skills_skills-page_tsx_0o1nlbg._.js +3 -3
  232. package/standalone/.next/server/chunks/ssr/src_components_worktrees_worktree-detail-page_tsx_1oexgu_._.js +13 -5
  233. package/standalone/.next/server/functions-config-manifest.json +7 -1
  234. package/standalone/.next/server/middleware-build-manifest.js +6 -6
  235. package/standalone/.next/server/next-font-manifest.js +1 -1
  236. package/standalone/.next/server/next-font-manifest.json +4 -0
  237. package/standalone/.next/server/pages/404.html +1 -1
  238. package/standalone/.next/server/pages/500.html +1 -1
  239. package/standalone/.next/server/server-reference-manifest.js +1 -1
  240. package/standalone/.next/server/server-reference-manifest.json +1 -1
  241. package/standalone/.next/static/chunks/08ujwkhzkokhf.js +1 -0
  242. package/standalone/.next/static/chunks/{16tfdsma_h0r5.js → 0a82bgw37ev__.js} +1 -1
  243. package/standalone/.next/static/chunks/0cw4z7_m01m5f.js +31 -0
  244. package/standalone/.next/static/chunks/0emxr8tr7kji0.js +33 -0
  245. package/standalone/.next/static/chunks/0h8zu6aywqh1-.js +27 -0
  246. package/standalone/.next/static/chunks/0hwbkceik59kx.js +35 -0
  247. package/standalone/.next/static/chunks/0mq066ue0yufb.js +7 -0
  248. package/standalone/.next/static/chunks/0ng892ycfzv2q.js +1 -0
  249. package/standalone/.next/static/chunks/0tgtji0dbbefa.js +107 -0
  250. package/standalone/.next/static/chunks/15_8kla24ff9f.js +1 -0
  251. package/standalone/.next/static/chunks/16-l4kp9o217d.js +1 -0
  252. package/standalone/.next/static/chunks/175269y15-grc.js +48 -0
  253. package/standalone/.next/static/chunks/1c7ci5ai5qyfo.js +1 -0
  254. package/standalone/.next/static/chunks/1egccqmgk3kbi.js +1 -0
  255. package/standalone/.next/static/chunks/1gwvywh0e6i17.js +3 -0
  256. package/standalone/.next/static/chunks/1hehq94hslvbl.js +7 -0
  257. package/standalone/.next/static/chunks/1k5cw41bd4e5r.js +51 -0
  258. package/standalone/.next/static/chunks/{2rjf8o4g23no8.js → 1mprxk0uebv70.js} +1 -1
  259. package/standalone/.next/static/chunks/1rus13s58mkxy.js +1 -0
  260. package/standalone/.next/static/chunks/{2fzxwi39odugq.js → 1rwqeg_l_plzt.js} +1 -1
  261. package/standalone/.next/static/chunks/1u_jwc-bo10k3.js +1 -0
  262. package/standalone/.next/static/chunks/1w_zvfx_jdyv_.js +29 -0
  263. package/standalone/.next/static/chunks/2-wrd12dmwbo-.js +1 -0
  264. package/standalone/.next/static/chunks/208k3moxxd_53.js +51 -0
  265. package/standalone/.next/static/chunks/23kut2_l2y2-w.js +9 -0
  266. package/standalone/.next/static/chunks/{1nnp0crt0mi_-.js → 23xyv764-kx8z.js} +12 -12
  267. package/standalone/.next/static/chunks/{1wihkuyju-wa-.js → 25haryfoj4x3h.js} +1 -1
  268. package/standalone/.next/static/chunks/{0fr0zp4cwlyrr.js → 28ljy-uz6n_g9.js} +2 -2
  269. package/standalone/.next/static/chunks/{4013cp3x6bvuw.js → 2__bi79el56lb.js} +5 -5
  270. package/standalone/.next/static/chunks/2aq80hyo4l8a2.js +7 -0
  271. package/standalone/.next/static/chunks/{24a_ux27e8jj4.js → 2l_wayk-ioguc.js} +1 -1
  272. package/standalone/.next/static/chunks/2swvzbwm_dr9y.js +1 -0
  273. package/standalone/.next/static/chunks/2zwijj9t6y7gn.js +7 -0
  274. package/standalone/.next/static/chunks/{0m26h4h36cb_0.js → 3120xcqaqci82.js} +1 -1
  275. package/standalone/.next/static/chunks/{3-u7pvogc5_bx.js → 315cis1es_5t3.js} +12 -12
  276. package/standalone/.next/static/chunks/321feys_9vp2v.js +33 -0
  277. package/standalone/.next/static/chunks/{0d-e51sawr2y8.js → 34oyci46fsc5w.js} +1 -1
  278. package/standalone/.next/static/chunks/37mczlawlcx5l.js +1 -0
  279. package/standalone/.next/static/chunks/398uw5_4-ciaz.css +1 -0
  280. package/standalone/.next/static/chunks/{1tcqtaedz7922.js → 3d4ijy7zglgv5.js} +1 -1
  281. package/standalone/.next/static/chunks/3ir4b8po439x7.js +40 -0
  282. package/standalone/.next/static/chunks/3l2g83119oyl0.js +1 -0
  283. package/standalone/.next/static/chunks/3r-6igcofcwxj.js +107 -0
  284. package/standalone/.next/static/chunks/{0m--47yk9j-ec.js → 3tycetq7o8g3h.js} +1 -1
  285. package/standalone/.next/static/chunks/{0biu8z1f8c42u.js → 40ovzayigkz_-.js} +1 -1
  286. package/standalone/.next/static/chunks/41wq-96yyl0uw.js +1 -0
  287. package/standalone/.next/static/chunks/44xu63hsh11xp.js +1 -0
  288. package/standalone/.next/static/chunks/{turbopack-1rw7om86c18dg.js → turbopack-1v9ogj_5hv56l.js} +1 -1
  289. package/standalone/src/services/builds/artifact-cache.test.ts +241 -0
  290. package/standalone/src/services/builds/artifact-cache.ts +235 -0
  291. package/standalone/src/services/builds/artifact-transfer.ts +2 -1
  292. package/standalone/src/services/builds/builds.service.test.ts +55 -0
  293. package/standalone/src/services/builds/builds.service.ts +499 -17
  294. package/standalone/.next/server/chunks/[root-of-the-server]__02vqwey._.js +0 -3
  295. package/standalone/.next/server/chunks/[root-of-the-server]__1oahp4o._.js +0 -122
  296. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0361lgt._.js +0 -33
  297. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__06f05jg._.js +0 -3
  298. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ay4_3d._.js +0 -37
  299. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dm8osz._.js +0 -3
  300. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__1349-us._.js +0 -3
  301. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__1xv798-._.js +0 -3
  302. package/standalone/.next/server/chunks/ssr/[root-of-the-server]__1z955gh._.js +0 -3
  303. package/standalone/.next/server/chunks/ssr/_0bvpmhm._.js +0 -101
  304. package/standalone/.next/server/chunks/ssr/_0eb36qa._.js +0 -3
  305. package/standalone/.next/server/chunks/ssr/_0ndnmkz._.js +0 -3
  306. package/standalone/.next/server/chunks/ssr/_0nm6upn._.js +0 -3
  307. package/standalone/.next/server/chunks/ssr/_0pe56xv._.js +0 -3
  308. package/standalone/.next/server/chunks/ssr/_0quhjav._.js +0 -3
  309. package/standalone/.next/server/chunks/ssr/_0w05v7m._.js +0 -3
  310. package/standalone/.next/server/chunks/ssr/_0xozjkz._.js +0 -3
  311. package/standalone/.next/server/chunks/ssr/_1-1mnp6._.js +0 -3
  312. package/standalone/.next/server/chunks/ssr/_1-7r8vu._.js +0 -3
  313. package/standalone/.next/server/chunks/ssr/_1-grolz._.js +0 -3
  314. package/standalone/.next/server/chunks/ssr/_10evhql._.js +0 -3
  315. package/standalone/.next/server/chunks/ssr/_142x9wn._.js +0 -22
  316. package/standalone/.next/server/chunks/ssr/_1_ta7g1._.js +0 -3
  317. package/standalone/.next/server/chunks/ssr/_1ey5mmy._.js +0 -3
  318. package/standalone/.next/server/chunks/ssr/_1fdyu2w._.js +0 -3
  319. package/standalone/.next/server/chunks/ssr/_1g3i459._.js +0 -15
  320. package/standalone/.next/server/chunks/ssr/_1g_aflc._.js +0 -3
  321. package/standalone/.next/server/chunks/ssr/_1lcwubl._.js +0 -3
  322. package/standalone/.next/server/chunks/ssr/_1lseili._.js +0 -3
  323. package/standalone/.next/server/chunks/ssr/_1za3z6k._.js +0 -101
  324. package/standalone/.next/server/chunks/ssr/_20ufqtr._.js +0 -3
  325. package/standalone/.next/static/chunks/0a3s519wuzjet.js +0 -1
  326. package/standalone/.next/static/chunks/0newuocvg03xy.js +0 -3
  327. package/standalone/.next/static/chunks/0rlomhlt6030e.js +0 -1
  328. package/standalone/.next/static/chunks/1802j8gq2g47d.js +0 -7
  329. package/standalone/.next/static/chunks/1_tnhhn4f122y.js +0 -9
  330. package/standalone/.next/static/chunks/1eny65xy2ho48.js +0 -1
  331. package/standalone/.next/static/chunks/1joeb4m-mmn69.js +0 -7
  332. package/standalone/.next/static/chunks/1l4bkigul15i3.js +0 -25
  333. package/standalone/.next/static/chunks/1qd6cse_d9ae1.js +0 -99
  334. package/standalone/.next/static/chunks/2-mxmazwsh-wz.js +0 -1
  335. package/standalone/.next/static/chunks/24sd_kmnetibb.js +0 -1
  336. package/standalone/.next/static/chunks/27k7_zc-iuppd.js +0 -1
  337. package/standalone/.next/static/chunks/2baaj4mpr6i-i.js +0 -1
  338. package/standalone/.next/static/chunks/2cj2ndz_e0hbz.js +0 -1
  339. package/standalone/.next/static/chunks/2fzwgr2iq_783.css +0 -1
  340. package/standalone/.next/static/chunks/2hv6pkoloju0g.js +0 -33
  341. package/standalone/.next/static/chunks/2jbygfc0lzu0t.js +0 -55
  342. package/standalone/.next/static/chunks/2n7u72nxziv_5.js +0 -7
  343. package/standalone/.next/static/chunks/2sqprazdqp7f7.js +0 -1
  344. package/standalone/.next/static/chunks/2x8qovg070057.js +0 -1
  345. package/standalone/.next/static/chunks/3-zh9b0tcttiw.js +0 -33
  346. package/standalone/.next/static/chunks/31wyih3wwkeid.js +0 -1
  347. package/standalone/.next/static/chunks/33y_b6dqfx3tk.js +0 -1
  348. package/standalone/.next/static/chunks/3h1pxh5fd97ym.js +0 -27
  349. package/standalone/.next/static/chunks/3jbfibit05k5o.js +0 -29
  350. package/standalone/.next/static/chunks/3jd8_7lna-j_x.js +0 -40
  351. package/standalone/.next/static/chunks/3jv2gnnn4vx-j.js +0 -43
  352. package/standalone/.next/static/chunks/3k0oakdayt9yt.js +0 -40
  353. package/standalone/.next/static/chunks/3pgngh8lg3be3.js +0 -99
  354. package/standalone/.next/static/chunks/43gw6_6hbw18w.js +0 -51
  355. /package/standalone/.next/static/{8uBWJ8MOV-OEPe88M3PhU → sJ09NBDjsLncJEkHNWbdR}/_buildManifest.js +0 -0
  356. /package/standalone/.next/static/{8uBWJ8MOV-OEPe88M3PhU → sJ09NBDjsLncJEkHNWbdR}/_clientMiddlewareManifest.js +0 -0
  357. /package/standalone/.next/static/{8uBWJ8MOV-OEPe88M3PhU → sJ09NBDjsLncJEkHNWbdR}/_ssgManifest.js +0 -0
@@ -13,16 +13,21 @@ import {
13
13
  IOS_DEPLOY_JOB_KIND,
14
14
  IOS_DESTINATIONS_JOB_KIND,
15
15
  IOS_EXPORT_JOB_KIND,
16
+ IOS_TEST_RESULTS_JOB_KIND,
17
+ IOS_COVERAGE_REPORT_JOB_KIND,
16
18
  IOS_RUN_DESTINATIONS_JOB_KIND,
19
+ IOS_SIGNING_INSPECT_JOB_KIND,
17
20
  IOS_SOURCE_DISCOVER_JOB_KIND,
18
21
  IOS_SOURCE_PARSE_JOB_KIND,
19
22
  parseBuildAdvancedSettings,
23
+ parseBuildArtifactSnapshots,
20
24
  parseBuildDestination,
21
25
  parseBuildExportSettings,
22
26
  parseBuildSource,
23
27
  type BuildAction,
24
28
  type BuildAdvancedSettings,
25
29
  type BuildDestination,
30
+ type BuildReportKind,
26
31
  type BuildSourceKind,
27
32
  } from "@ai-development-environment/agent-contract/builds";
28
33
 
@@ -372,6 +377,14 @@ export class BuildsService {
372
377
  this.agentControl.registerCompletionHandler(IOS_EXPORT_JOB_KIND, (job) =>
373
378
  this.projectExportCompletion(job),
374
379
  );
380
+ this.agentControl.registerCompletionHandler(
381
+ IOS_TEST_RESULTS_JOB_KIND,
382
+ (job) => this.projectGeneratedReportCompletion(job),
383
+ );
384
+ this.agentControl.registerCompletionHandler(
385
+ IOS_COVERAGE_REPORT_JOB_KIND,
386
+ (job) => this.projectGeneratedReportCompletion(job),
387
+ );
375
388
  }
376
389
 
377
390
  private publish(buildId: string): void {
@@ -416,6 +429,8 @@ export class BuildsService {
416
429
  gitDirectory: worktree.gitDirectory,
417
430
  expectedOrigin: worktree.codebase.repository.canonicalOrigin,
418
431
  headSha: worktree.headSha,
432
+ baseBranch:
433
+ worktree.baseBranchOverride ?? worktree.codebase.defaultBranch ?? null,
419
434
  };
420
435
  }
421
436
 
@@ -950,6 +965,57 @@ export class BuildsService {
950
965
  }
951
966
  }
952
967
 
968
+ /**
969
+ * Lists the teams, certificates, and profiles installed on the build's agent,
970
+ * along with the bundles inside the archive that manual signing must map.
971
+ */
972
+ async signingOptionsForBuild(buildId: string) {
973
+ const prisma = await getPrismaClient();
974
+ const build = await prisma.build.findUnique({
975
+ where: { id: buildId },
976
+ include: { artifacts: true },
977
+ });
978
+ const archive = build?.artifacts.find(
979
+ (artifact) => artifact.kind === "ARCHIVE",
980
+ );
981
+ if (!build || build.status !== "SUCCEEDED" || !build.worktreeId) {
982
+ throw new Error("A successful archive build is required");
983
+ }
984
+ if (!archive) throw new Error("Build does not contain an archive");
985
+ const worktree = await this.requireWorktree(
986
+ build.worktreeId,
987
+ IOS_SIGNING_INSPECT_JOB_KIND,
988
+ );
989
+ const job = await this.agentControl.createJob({
990
+ agentId: worktree.codebase.agentId,
991
+ codebaseId: worktree.codebaseId,
992
+ worktreeId: worktree.id,
993
+ kind: IOS_SIGNING_INSPECT_JOB_KIND,
994
+ payload: {
995
+ buildId: build.id,
996
+ codebaseId: worktree.codebaseId,
997
+ artifactDirectory: build.artifactDirectory,
998
+ archiveRelativePath: archive.relativePath,
999
+ },
1000
+ idempotencyKey: `ios:signing:${build.id}:${archive.id}`,
1001
+ timeoutSeconds: 120,
1002
+ visibility: "SYSTEM",
1003
+ });
1004
+ try {
1005
+ const result = this.result(await this.waitForJob(job.id));
1006
+ return {
1007
+ teams: Array.isArray(result.teams) ? result.teams : [],
1008
+ identities: Array.isArray(result.identities) ? result.identities : [],
1009
+ profiles: Array.isArray(result.profiles) ? result.profiles : [],
1010
+ bundles: Array.isArray(result.bundles) ? result.bundles : [],
1011
+ };
1012
+ } finally {
1013
+ await prisma.agentJob.deleteMany({
1014
+ where: { id: job.id, visibility: "SYSTEM" },
1015
+ });
1016
+ }
1017
+ }
1018
+
953
1019
  async destinationsForBuild(buildId: string, requestId: string) {
954
1020
  const prisma = await getPrismaClient();
955
1021
  const build = await prisma.build.findUnique({
@@ -1009,6 +1075,7 @@ export class BuildsService {
1009
1075
  scriptIds?: string[] | null;
1010
1076
  action?: BuildAction | null;
1011
1077
  advancedSettings?: unknown;
1078
+ worktreeCoverage?: boolean;
1012
1079
  requestId: string;
1013
1080
  }) {
1014
1081
  const requestId = cleanName(input.requestId, "Request ID", 200);
@@ -1023,6 +1090,14 @@ export class BuildsService {
1023
1090
  input.worktreeId,
1024
1091
  IOS_BUILD_JOB_KIND,
1025
1092
  );
1093
+ if (
1094
+ input.worktreeCoverage &&
1095
+ !capabilities(worktree.codebase.agent).includes(
1096
+ IOS_COVERAGE_REPORT_JOB_KIND,
1097
+ )
1098
+ ) {
1099
+ throw new Error("Build agent must be updated for worktree coverage");
1100
+ }
1026
1101
  const configuration = await prisma.buildConfiguration.findUnique({
1027
1102
  where: { id: input.configurationId },
1028
1103
  include: { source: { include: { project: true } } },
@@ -1302,6 +1377,7 @@ export class BuildsService {
1302
1377
  },
1303
1378
  destination,
1304
1379
  scripts,
1380
+ worktreeCoverage: input.worktreeCoverage === true,
1305
1381
  };
1306
1382
  await prisma.build.create({
1307
1383
  data: {
@@ -1370,6 +1446,7 @@ export class BuildsService {
1370
1446
  destination,
1371
1447
  advancedSettings,
1372
1448
  scripts,
1449
+ worktreeCoverage: input.worktreeCoverage === true,
1373
1450
  },
1374
1451
  idempotencyKey: `ios:build:${requestId}:${worktree.id}`,
1375
1452
  timeoutSeconds: 7 * 24 * 60 * 60,
@@ -1455,6 +1532,210 @@ export class BuildsService {
1455
1532
  });
1456
1533
  }
1457
1534
 
1535
+ async startWorktreeCoverage(input: {
1536
+ worktreeId: string;
1537
+ configurationId: string;
1538
+ destination: unknown;
1539
+ scriptIds?: string[] | null;
1540
+ advancedSettings?: unknown;
1541
+ requestId: string;
1542
+ }) {
1543
+ const prisma = await getPrismaClient();
1544
+ const coverageWorktree = await prisma.worktree.findUnique({
1545
+ where: { id: input.worktreeId },
1546
+ select: {
1547
+ baseBranchOverride: true,
1548
+ codebase: { select: { defaultBranch: true } },
1549
+ },
1550
+ });
1551
+ if (
1552
+ !coverageWorktree ||
1553
+ !(
1554
+ coverageWorktree.baseBranchOverride ??
1555
+ coverageWorktree.codebase.defaultBranch
1556
+ )
1557
+ ) {
1558
+ throw new Error("A base branch is required for worktree coverage");
1559
+ }
1560
+ const advanced = objectValue(
1561
+ input.advancedSettings ?? {},
1562
+ "coverage advanced settings",
1563
+ );
1564
+ return this.startBuild({
1565
+ ...input,
1566
+ action: "TEST",
1567
+ advancedSettings: {
1568
+ ...advanced,
1569
+ codeCoverage: true,
1570
+ parseTestResults: true,
1571
+ },
1572
+ worktreeCoverage: true,
1573
+ });
1574
+ }
1575
+
1576
+ async generateReport(
1577
+ buildId: string,
1578
+ kind: BuildReportKind,
1579
+ requestId: string,
1580
+ ) {
1581
+ const prisma = await getPrismaClient();
1582
+ const existing = await prisma.buildReport.findUnique({
1583
+ where: { buildId_kind: { buildId, kind } },
1584
+ include: { artifact: true },
1585
+ });
1586
+ if (existing?.status === "READY") return existing;
1587
+ const build = await prisma.build.findUnique({
1588
+ where: { id: buildId },
1589
+ include: { agent: true, artifacts: true },
1590
+ });
1591
+ if (!build) throw new Error("Build not found");
1592
+ if (ACTIVE_BUILD_STATUSES.includes(build.status)) {
1593
+ throw new Error("Wait for the build to finish before generating reports");
1594
+ }
1595
+ if (!build.agentId || !build.agent || !online(build.agent)) {
1596
+ throw new Error("Build agent is offline");
1597
+ }
1598
+ const capability =
1599
+ kind === "TEST_RESULTS"
1600
+ ? IOS_TEST_RESULTS_JOB_KIND
1601
+ : IOS_COVERAGE_REPORT_JOB_KIND;
1602
+ if (!capabilities(build.agent).includes(capability)) {
1603
+ throw new Error("Build agent must be updated to generate reports");
1604
+ }
1605
+ if (
1606
+ !build.artifacts.some((artifact) => artifact.kind === "RESULT_BUNDLE")
1607
+ ) {
1608
+ throw new Error("The build result bundle is unavailable");
1609
+ }
1610
+ if (
1611
+ kind === "TEST_RESULTS" &&
1612
+ !["TEST", "TEST_WITHOUT_BUILDING"].includes(build.action)
1613
+ ) {
1614
+ throw new Error("This build did not run tests");
1615
+ }
1616
+ const report = await prisma.buildReport.upsert({
1617
+ where: { buildId_kind: { buildId, kind } },
1618
+ create: {
1619
+ id: randomUUID(),
1620
+ buildId,
1621
+ kind,
1622
+ source: "MANUAL",
1623
+ status: "PENDING",
1624
+ },
1625
+ update: {
1626
+ source: "MANUAL",
1627
+ status: "PENDING",
1628
+ error: null,
1629
+ finishedAt: null,
1630
+ },
1631
+ });
1632
+ this.publish(buildId);
1633
+ const codebaseId = coordinationCodebaseId(build);
1634
+ const job = await this.agentControl.createJob({
1635
+ agentId: build.agentId,
1636
+ codebaseId,
1637
+ worktreeId: build.worktreeId,
1638
+ kind: capability,
1639
+ payload: {
1640
+ buildId,
1641
+ artifactDirectory: build.artifactDirectory,
1642
+ codebaseId,
1643
+ reportKind: kind,
1644
+ source: "MANUAL",
1645
+ },
1646
+ idempotencyKey: `ios:report:${kind}:${cleanName(requestId, "Request ID", 200)}:${buildId}`,
1647
+ timeoutSeconds: 180,
1648
+ visibility: "SYSTEM",
1649
+ });
1650
+ try {
1651
+ await this.waitForJob(job.id, 170_000);
1652
+ return prisma.buildReport.findUniqueOrThrow({
1653
+ where: { id: report.id },
1654
+ include: { artifact: true },
1655
+ });
1656
+ } finally {
1657
+ await prisma.agentJob.deleteMany({
1658
+ where: { id: job.id, visibility: "SYSTEM" },
1659
+ });
1660
+ }
1661
+ }
1662
+
1663
+ async coverageHistory(worktreeId: string) {
1664
+ const prisma = await getPrismaClient();
1665
+ return prisma.buildReport.findMany({
1666
+ where: {
1667
+ kind: "CODE_COVERAGE",
1668
+ source: "WORKTREE",
1669
+ build: { worktreeId },
1670
+ },
1671
+ orderBy: { createdAt: "desc" },
1672
+ take: 50,
1673
+ select: {
1674
+ id: true,
1675
+ buildId: true,
1676
+ artifactId: true,
1677
+ kind: true,
1678
+ source: true,
1679
+ status: true,
1680
+ summaryJson: true,
1681
+ error: true,
1682
+ createdAt: true,
1683
+ updatedAt: true,
1684
+ finishedAt: true,
1685
+ artifact: true,
1686
+ build: {
1687
+ select: {
1688
+ id: true,
1689
+ status: true,
1690
+ action: true,
1691
+ destinationType: true,
1692
+ destinationJson: true,
1693
+ snapshotJson: true,
1694
+ createdAt: true,
1695
+ startedAt: true,
1696
+ finishedAt: true,
1697
+ updatedAt: true,
1698
+ worktree: {
1699
+ select: {
1700
+ headSha: true,
1701
+ codeStateHash: true,
1702
+ hasStagedChanges: true,
1703
+ hasUnstagedChanges: true,
1704
+ lastCheckedAt: true,
1705
+ _count: {
1706
+ select: {
1707
+ builds: {
1708
+ where: { status: { in: ACTIVE_BUILD_STATUSES } },
1709
+ },
1710
+ },
1711
+ },
1712
+ },
1713
+ },
1714
+ artifacts: { orderBy: { createdAt: "asc" } },
1715
+ },
1716
+ },
1717
+ },
1718
+ });
1719
+ }
1720
+
1721
+ async reportsForBuild(buildId: string) {
1722
+ const prisma = await getPrismaClient();
1723
+ return prisma.buildReport.findMany({
1724
+ where: { buildId },
1725
+ orderBy: { createdAt: "asc" },
1726
+ include: { artifact: true },
1727
+ });
1728
+ }
1729
+
1730
+ async reportData(id: string): Promise<string> {
1731
+ const prisma = await getPrismaClient();
1732
+ const report = await prisma.buildReport.findUnique({
1733
+ where: { id },
1734
+ select: { dataJson: true },
1735
+ });
1736
+ return report?.dataJson ?? "{}";
1737
+ }
1738
+
1458
1739
  async builds(
1459
1740
  input: {
1460
1741
  first?: number | null;
@@ -1565,10 +1846,36 @@ export class BuildsService {
1565
1846
  return removed.count;
1566
1847
  }
1567
1848
 
1849
+ /**
1850
+ * Artifact metadata for the over-the-air install manifest. Deliberately does
1851
+ * not contact the agent: iOS fetches the manifest before anything else and
1852
+ * gives up quickly, so this must answer from the database alone.
1853
+ */
1854
+ async artifactForInstall(buildId: string, artifactId: string) {
1855
+ const prisma = await getPrismaClient();
1856
+ const artifact = await prisma.buildArtifact.findFirst({
1857
+ where: { id: artifactId, buildId },
1858
+ });
1859
+ if (!artifact) return null;
1860
+ return {
1861
+ id: artifact.id,
1862
+ kind: artifact.kind,
1863
+ relativePath: artifact.relativePath,
1864
+ sizeBytes: artifact.sizeBytes,
1865
+ checksum: artifact.checksum,
1866
+ createdAt: artifact.createdAt.toISOString(),
1867
+ metadata: objectValue(
1868
+ parseJson(artifact.metadataJson, {}),
1869
+ "build artifact metadata",
1870
+ ),
1871
+ };
1872
+ }
1873
+
1568
1874
  async prepareArtifactDownload(
1569
1875
  buildId: string,
1570
1876
  artifactId: string,
1571
1877
  uploadId: string,
1878
+ timeoutMs = 170_000,
1572
1879
  ): Promise<void> {
1573
1880
  const prisma = await getPrismaClient();
1574
1881
  const artifact = await prisma.buildArtifact.findFirst({
@@ -1602,11 +1909,11 @@ export class BuildsService {
1602
1909
  codebaseId,
1603
1910
  },
1604
1911
  idempotencyKey: `ios:artifact:download:${uploadId}`,
1605
- timeoutSeconds: 180,
1912
+ timeoutSeconds: Math.ceil(timeoutMs / 1_000) + 10,
1606
1913
  visibility: "SYSTEM",
1607
1914
  });
1608
1915
  try {
1609
- this.result(await this.waitForJob(job.id, 170_000));
1916
+ this.result(await this.waitForJob(job.id, timeoutMs));
1610
1917
  } finally {
1611
1918
  await prisma.agentJob.deleteMany({
1612
1919
  where: { id: job.id, visibility: "SYSTEM" },
@@ -1937,6 +2244,107 @@ export class BuildsService {
1937
2244
  return updated;
1938
2245
  }
1939
2246
 
2247
+ /**
2248
+ * Records artifacts an agent reported in a job result. Size, checksum, and
2249
+ * metadata are refreshed on conflict so that re-running a job against the same
2250
+ * relative path does not leave a stale checksum behind — downstream callers
2251
+ * key their download cache on it.
2252
+ */
2253
+ private async upsertArtifacts(
2254
+ transaction: Prisma.TransactionClient,
2255
+ buildId: string,
2256
+ raw: unknown,
2257
+ ) {
2258
+ for (const artifact of parseBuildArtifactSnapshots(raw)) {
2259
+ const values = {
2260
+ kind: artifact.kind,
2261
+ sizeBytes: artifact.sizeBytes,
2262
+ checksum: artifact.checksum,
2263
+ metadataJson: JSON.stringify(artifact.metadata),
2264
+ };
2265
+ await transaction.buildArtifact.upsert({
2266
+ where: {
2267
+ buildId_relativePath: {
2268
+ buildId,
2269
+ relativePath: artifact.relativePath,
2270
+ },
2271
+ },
2272
+ create: {
2273
+ id: randomUUID(),
2274
+ buildId,
2275
+ relativePath: artifact.relativePath,
2276
+ ...values,
2277
+ },
2278
+ update: values,
2279
+ });
2280
+ }
2281
+ }
2282
+
2283
+ private async upsertReportProjection(
2284
+ transaction: Prisma.TransactionClient,
2285
+ buildId: string,
2286
+ raw: unknown,
2287
+ source: "AUTOMATIC" | "MANUAL" | "WORKTREE",
2288
+ ) {
2289
+ const report = objectValue(raw, "build report");
2290
+ if (report.kind !== "TEST_RESULTS" && report.kind !== "CODE_COVERAGE") {
2291
+ return;
2292
+ }
2293
+ const kind = report.kind;
2294
+ const artifactValue =
2295
+ report.artifact && typeof report.artifact === "object"
2296
+ ? objectValue(report.artifact, "build report artifact")
2297
+ : null;
2298
+ const artifact =
2299
+ artifactValue && typeof artifactValue.relativePath === "string"
2300
+ ? await transaction.buildArtifact.findUnique({
2301
+ where: {
2302
+ buildId_relativePath: {
2303
+ buildId,
2304
+ relativePath: artifactValue.relativePath,
2305
+ },
2306
+ },
2307
+ })
2308
+ : null;
2309
+ const status = report.status === "READY" ? "READY" : "FAILED";
2310
+ await transaction.buildReport.upsert({
2311
+ where: { buildId_kind: { buildId, kind } },
2312
+ create: {
2313
+ id: randomUUID(),
2314
+ buildId,
2315
+ artifactId: artifact?.id ?? null,
2316
+ kind,
2317
+ source,
2318
+ status,
2319
+ summaryJson: JSON.stringify(
2320
+ report.summary && typeof report.summary === "object"
2321
+ ? report.summary
2322
+ : {},
2323
+ ),
2324
+ dataJson: JSON.stringify(
2325
+ report.data && typeof report.data === "object" ? report.data : {},
2326
+ ),
2327
+ error: typeof report.error === "string" ? report.error : null,
2328
+ finishedAt: new Date(),
2329
+ },
2330
+ update: {
2331
+ artifactId: artifact?.id ?? null,
2332
+ source,
2333
+ status,
2334
+ summaryJson: JSON.stringify(
2335
+ report.summary && typeof report.summary === "object"
2336
+ ? report.summary
2337
+ : {},
2338
+ ),
2339
+ dataJson: JSON.stringify(
2340
+ report.data && typeof report.data === "object" ? report.data : {},
2341
+ ),
2342
+ error: typeof report.error === "string" ? report.error : null,
2343
+ finishedAt: new Date(),
2344
+ },
2345
+ });
2346
+ }
2347
+
1940
2348
  private async projectBuildCompletion(job: {
1941
2349
  id: string;
1942
2350
  status: string;
@@ -2090,10 +2498,78 @@ export class BuildsService {
2090
2498
  });
2091
2499
  }
2092
2500
  }
2501
+ if (Array.isArray(result.reports)) {
2502
+ for (const raw of result.reports) {
2503
+ const candidate =
2504
+ raw && typeof raw === "object" && !Array.isArray(raw)
2505
+ ? (raw as JsonObject)
2506
+ : {};
2507
+ await this.upsertReportProjection(
2508
+ transaction,
2509
+ build.id,
2510
+ raw,
2511
+ candidate.kind === "CODE_COVERAGE" ? "WORKTREE" : "AUTOMATIC",
2512
+ );
2513
+ }
2514
+ }
2093
2515
  });
2094
2516
  this.publish(build.id);
2095
2517
  }
2096
2518
 
2519
+ private async projectGeneratedReportCompletion(job: {
2520
+ id: string;
2521
+ status: string;
2522
+ payloadJson: string;
2523
+ resultJson: string | null;
2524
+ error: string | null;
2525
+ }) {
2526
+ const payload = objectValue(
2527
+ parseJson(job.payloadJson, {}),
2528
+ "build report payload",
2529
+ );
2530
+ if (typeof payload.buildId !== "string") return;
2531
+ const buildId = payload.buildId;
2532
+ const result = objectValue(
2533
+ parseJson(job.resultJson, {}),
2534
+ "build report result",
2535
+ );
2536
+ const prisma = await getPrismaClient();
2537
+ await prisma.$transaction(async (transaction) => {
2538
+ await this.upsertArtifacts(transaction, buildId, result.artifacts);
2539
+ if (result.report && typeof result.report === "object") {
2540
+ await this.upsertReportProjection(
2541
+ transaction,
2542
+ buildId,
2543
+ result.report,
2544
+ payload.source === "WORKTREE" ? "WORKTREE" : "MANUAL",
2545
+ );
2546
+ } else {
2547
+ const kind =
2548
+ payload.reportKind === "CODE_COVERAGE"
2549
+ ? "CODE_COVERAGE"
2550
+ : "TEST_RESULTS";
2551
+ await transaction.buildReport.upsert({
2552
+ where: { buildId_kind: { buildId, kind } },
2553
+ create: {
2554
+ id: randomUUID(),
2555
+ buildId,
2556
+ kind,
2557
+ source: payload.source === "WORKTREE" ? "WORKTREE" : "MANUAL",
2558
+ status: "FAILED",
2559
+ error: job.error || "Report generation failed",
2560
+ finishedAt: new Date(),
2561
+ },
2562
+ update: {
2563
+ status: "FAILED",
2564
+ error: job.error || "Report generation failed",
2565
+ finishedAt: new Date(),
2566
+ },
2567
+ });
2568
+ }
2569
+ });
2570
+ this.publish(buildId);
2571
+ }
2572
+
2097
2573
  private async projectDeploymentCompletion(job: {
2098
2574
  id: string;
2099
2575
  status: string;
@@ -2166,23 +2642,29 @@ export class BuildsService {
2166
2642
  job.status === "SUCCEEDED" &&
2167
2643
  typeof result.outputRelativePath === "string"
2168
2644
  ) {
2169
- await prisma.buildArtifact.upsert({
2170
- where: {
2171
- buildId_relativePath: {
2645
+ const outputRelativePath = result.outputRelativePath;
2646
+ // One transaction so a subscriber woken by publish() never observes the
2647
+ // export directory without the IPA that was exported into it.
2648
+ await prisma.$transaction(async (transaction) => {
2649
+ await transaction.buildArtifact.upsert({
2650
+ where: {
2651
+ buildId_relativePath: {
2652
+ buildId: row.buildId,
2653
+ relativePath: outputRelativePath,
2654
+ },
2655
+ },
2656
+ create: {
2657
+ id: randomUUID(),
2172
2658
  buildId: row.buildId,
2173
- relativePath: result.outputRelativePath,
2659
+ kind: "EXPORT",
2660
+ relativePath: outputRelativePath,
2661
+ sizeBytes:
2662
+ typeof result.sizeBytes === "number" ? result.sizeBytes : null,
2663
+ metadataJson: JSON.stringify({ exportId: row.id }),
2174
2664
  },
2175
- },
2176
- create: {
2177
- id: randomUUID(),
2178
- buildId: row.buildId,
2179
- kind: "EXPORT",
2180
- relativePath: result.outputRelativePath,
2181
- sizeBytes:
2182
- typeof result.sizeBytes === "number" ? result.sizeBytes : null,
2183
- metadataJson: JSON.stringify({ exportId: row.id }),
2184
- },
2185
- update: {},
2665
+ update: {},
2666
+ });
2667
+ await this.upsertArtifacts(transaction, row.buildId, result.artifacts);
2186
2668
  });
2187
2669
  }
2188
2670
  this.publish(row.buildId);
@@ -1,3 +0,0 @@
1
- module.exports=[193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},778568,e=>{"use strict";e.s(["EvalFlags",0,{JS_EVAL_TYPE_GLOBAL:0,JS_EVAL_TYPE_MODULE:1,JS_EVAL_TYPE_DIRECT:2,JS_EVAL_TYPE_INDIRECT:3,JS_EVAL_TYPE_MASK:3,JS_EVAL_FLAG_STRICT:8,JS_EVAL_FLAG_STRIP:16,JS_EVAL_FLAG_COMPILE_ONLY:32,JS_EVAL_FLAG_BACKTRACE_BARRIER:64},"GetOwnPropertyNamesFlags",0,{JS_GPN_STRING_MASK:1,JS_GPN_SYMBOL_MASK:2,JS_GPN_PRIVATE_MASK:4,JS_GPN_ENUM_ONLY:16,JS_GPN_SET_ENUM:32,QTS_GPN_NUMBER_MASK:64,QTS_STANDARD_COMPLIANT_NUMBER:128},"IntrinsicsFlags",0,{BaseObjects:1,Date:2,Eval:4,StringNormalize:8,RegExp:16,RegExpCompiler:32,JSON:64,Proxy:128,MapSet:256,TypedArrays:512,Promise:1024,BigInt:2048,BigFloat:4096,BigDecimal:8192,OperatorOverloading:16384,BignumExt:32768},"IsEqualOp",0,{IsStrictlyEqual:0,IsSameValue:1,IsSameValueZero:2},"JSPromiseStateEnum",0,{Pending:0,Fulfilled:1,Rejected:2},"assertSync",0,function(e){return function(...t){let r=e(...t);if(r&&"object"==typeof r&&r instanceof Promise)throw Error("Function unexpectedly returned a Promise");return r}}])},215402,e=>{"use strict";var t=e.i(469064),r=class extends t.QuickJSContext{async evalCodeAsync(e,r="eval.js",s){let i=+(void 0===s),a=(0,t.evalOptionsToFlags)(s),n=0;try{n=await this.memory.newHeapCharPointer(e).consume(e=>this.ffi.QTS_Eval_MaybeAsync(this.ctx.value,e.value.ptr,e.value.strlen,r,i,a))}catch(e){throw this.runtime.debugLog("QTS_Eval_MaybeAsync threw",e),e}let o=this.ffi.QTS_ResolveException(this.ctx.value,n);return o?(this.ffi.QTS_FreeValuePointer(this.ctx.value,n),this.fail(this.memory.heapValueHandle(o))):this.success(this.memory.heapValueHandle(n))}newAsyncifiedFunction(e,t){return this.newFunction(e,t)}},s=class extends t.QuickJSRuntime{constructor(e){super(e)}newContext(e={}){let s=(0,t.intrinsicsToFlags)(e.intrinsics),i=new t.Lifetime(this.ffi.QTS_NewContext(this.rt.value,s),void 0,e=>{this.contextMap.delete(e),this.callbacks.deleteContext(e),this.ffi.QTS_FreeContext(e)}),a=new r({module:this.module,ctx:i,ffi:this.ffi,rt:this.rt,ownedLifetimes:[],runtime:this,callbacks:this.callbacks});return this.contextMap.set(i.value,a),a}setModuleLoader(e,t){super.setModuleLoader(e,t)}setMaxStackSize(e){return super.setMaxStackSize(e)}},i=class extends t.QuickJSWASMModule{constructor(e,t){super(e,t),this.ffi=t,this.module=e}newRuntime(e={}){let r=new t.Lifetime(this.ffi.QTS_NewRuntime(),void 0,e=>{this.callbacks.deleteRuntime(e),this.ffi.QTS_FreeRuntime(e)}),i=new s({module:this.module,ffi:this.ffi,rt:r,callbacks:this.callbacks});return(0,t.applyBaseRuntimeOptions)(i,e),e.moduleLoader&&i.setModuleLoader(e.moduleLoader),i}newContext(e={}){let t=this.newRuntime(),r=e.ownedLifetimes?e.ownedLifetimes.concat([t]):[t],s=t.newContext({...e,ownedLifetimes:r});return t.context=s,s}evalCode(){throw new t.QuickJSNotImplemented("QuickJSWASMModuleAsyncify.evalCode: use evalCodeAsync instead")}evalCodeAsync(e,r){return t.Scope.withScopeAsync(async s=>{let i=s.manage(this.newContext());(0,t.applyModuleEvalRuntimeOptions)(i.runtime,r);let a=await i.evalCodeAsync(e,"eval.js");if(void 0!==r.memoryLimitBytes&&i.runtime.setMemoryLimit(-1),a.error)throw i.dump(s.manage(a.error));return i.dump(s.manage(a.value))})}};e.s(["QuickJSAsyncContext",0,r,"QuickJSAsyncRuntime",0,s,"QuickJSAsyncWASMModule",0,i])},210749,e=>{"use strict";var t=Object.defineProperty,r=Object.getOwnPropertyNames,s=e.z;e.s(["__commonJS",0,(e,t)=>function(){return t||(0,e[r(e)[0]])((t={exports:{}}).exports,t),t.exports},"__publicField",0,(e,r,s)=>{let i;return(i="symbol"!=typeof r?r+"":r)in e?t(e,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[i]=s},"__require",0,s])},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},857764,(e,t,r)=>{t.exports=e.x("node:url",()=>require("node:url"))},59639,(e,t,r)=>{t.exports=e.x("node:process",()=>require("node:process"))},462711,651212,316552,e=>{"use strict";var t=e.i(750227);e.s(["minpath",()=>t.default],462711);var r=e.i(59639);e.s(["minproc",()=>r.default],651212);var s=e.i(857764);e.s(["urlToPath",()=>s.fileURLToPath],316552)},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},785148,(e,t,r)=>{t.exports=e.x("better-sqlite3-90e2652d1716b047",()=>require("better-sqlite3-90e2652d1716b047"))},784941,(e,t,r)=>{t.exports=e.x("@prisma/client-2c3a283f134fdcb6/runtime/client",()=>require("@prisma/client-2c3a283f134fdcb6/runtime/client"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},449719,(e,t,r)=>{t.exports=e.x("assert",()=>require("assert"))},870722,(e,t,r)=>{t.exports=e.x("tty",()=>require("tty"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},925328,(e,t,r)=>{t.exports=e.x("http2",()=>require("http2"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},188646,(e,t,r)=>{t.exports=e.x("node:stream/promises",()=>require("node:stream/promises"))},503675,e=>{"use strict";var t=e.i(902157),r=e.i(912714),s=e.i(660526),i=e.i(750227),a=e.i(81111),n=e.i(188646);let o=globalThis,l=o.buildArtifactTransfers??(o.buildArtifactTransfers=new Map);function u(e,t){let r=l.get(e);r&&(l.delete(e),clearTimeout(r.timeout),r.reject(t instanceof Error?t:Error(String(t))))}async function d(e,o,d){let c=l.get(e);if(!c||c.agentId!==o)throw Error("Artifact upload is not expected");if(!d.body)throw Error("Artifact upload body is required");let p=(0,i.join)((0,s.tmpdir)(),`ade-build-artifact-upload-${e}`);try{await (0,n.pipeline)(a.Readable.fromWeb(d.body),(0,t.createWriteStream)(p,{mode:384}));let r=d.headers.get("x-artifact-filename")??"artifact",s="artifact";try{s=decodeURIComponent(r)}catch{}l.delete(e),clearTimeout(c.timeout);let i=d.headers.get("content-length");c.resolve({path:p,filename:s,contentType:d.headers.get("content-type")??"application/octet-stream",size:null!==i&&Number.isFinite(Number(i))?Number(i):null})}catch(t){throw await (0,r.rm)(p,{force:!0}),u(e,t),t}}e.s(["cancelArtifactTransfer",0,u,"expectArtifactTransfer",0,function(e,t){return new Promise((r,s)=>{let i=setTimeout(()=>{l.delete(e),s(Error("The agent did not upload the artifact in time"))},17e4);i.unref(),l.set(e,{agentId:t,resolve:r,reject:s,timeout:i})})},"receiveArtifactTransfer",0,d])},448650,e=>{"use strict";var t=e.i(747909),r=e.i(174017),s=e.i(996250),i=e.i(759756),a=e.i(561916),n=e.i(174677),o=e.i(869741),l=e.i(316795),u=e.i(487718),d=e.i(995169),c=e.i(47587),p=e.i(666012),m=e.i(570101),_=e.i(626937),f=e.i(10372),h=e.i(193695);e.i(820232);var x=e.i(600220),v=e.i(666680),y=e.i(902157),w=e.i(912714),g=e.i(81111),R=e.i(503675),b=e.i(887394);async function S(e,t){let r=(0,v.randomUUID)();try{var s;let e,{buildId:i,artifactId:a}=await t.params,n=(0,b.getServerServices)(),o=await n.buildsService.getBuild(i);if(!o?.agentId)return new Response("Build agent is unavailable",{status:409});let l=(0,R.expectArtifactTransfer)(r,o.agentId),[u]=await Promise.all([l,n.buildsService.prepareArtifactDownload(i,a,r)]),d=(0,y.createReadStream)(u.path);return d.once("close",()=>void(0,w.rm)(u.path,{force:!0})),new Response(g.Readable.toWeb(d),{headers:{"content-disposition":(e=(s=u.filename).replace(/["\r\n]/g,"_"),`attachment; filename="${e}"; filename*=UTF-8''${encodeURIComponent(s)}`),...null===u.size?{}:{"content-length":String(u.size)},"content-type":u.contentType}})}catch(t){(0,R.cancelArtifactTransfer)(r,t);let e=t instanceof Error?t.message:String(t);if(/not found/i.test(e))return new Response("Artifact not found",{status:404});if(/offline|unavailable|must be updated/i.test(e))return new Response(e,{status:409});return console.error("Build artifact download failed:",t),new Response("Could not download artifact",{status:500})}}e.s(["GET",0,S,"maxDuration",0,180,"runtime",0,"nodejs"],977498);var E=e.i(977498);let A=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/builds/[buildId]/artifacts/[artifactId]/route",pathname:"/api/builds/[buildId]/artifacts/[artifactId]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/builds/[buildId]/artifacts/[artifactId]/route.ts",nextConfigOutput:"standalone",userland:E,...{}}),{workAsyncStorage:T,workUnitAsyncStorage:P,serverHooks:j}=A;async function q(e,t,s){s.requestMeta&&(0,i.setRequestMeta)(e,s.requestMeta),A.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/builds/[buildId]/artifacts/[artifactId]/route";v=v.replace(/\/index$/,"")||"/";let y=await A.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:w,deploymentId:g,params:R,nextConfig:b,parsedUrl:S,isDraftMode:E,prerenderManifest:T,routerServerContext:P,isOnDemandRevalidate:j,revalidateOnlyGenerated:q,resolvedPathname:k,clientReferenceManifest:C,serverActionsManifest:N}=y,I=(0,o.normalizeAppPath)(v),M=!!(T.dynamicRoutes[I]||T.routes[k]),L=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,S,!1):t.end("This page could not be found"),null);if(M&&!E){let e=!!T.routes[k],t=T.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(b.adapterPath)return await L();throw new h.NoFallbackError}}let O=null;!M||A.isDev||E||(O="/index"===(O=k)?"/":O);let U=!0===A.isDev||!M,F=M&&!U;N&&C&&(0,n.setManifestsSingleton)({page:v,clientReferenceManifest:C,serverActionsManifest:N});let J=e.method||"GET",B=(0,a.getTracer)(),D=B.getActiveScopeSpan(),H=!!(null==P?void 0:P.isWrappedByNextServer),G=!!(0,i.getRequestMeta)(e,"minimalMode"),Q=(0,i.getRequestMeta)(e,"incrementalCache")||await A.getIncrementalCache(e,b,T,G);null==Q||Q.resetRequestCache(),globalThis.__incrementalCache=Q;let V={params:R,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!b.experimental.authInterrupts},cacheComponents:!!b.cacheComponents,supportsDynamicResponse:U,incrementalCache:Q,cacheLifeProfiles:b.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,i)=>A.onRequestError(e,t,s,i,P)},sharedContext:{buildId:w,deploymentId:g}},K=new l.NodeNextRequest(e),z=new l.NodeNextResponse(t),$=u.NextRequestAdapter.fromNodeNextRequest(K,(0,u.signalFromNodeResponse)(t));try{let i,n=async e=>A.handle($,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=B.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${J} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",s),i.updateName(t))}else e.updateName(`${J} ${v}`)}),o=async i=>{var a,o;let l=async({previousCacheEntry:r})=>{try{if(!G&&j&&q&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await n(i);e.fetchMetrics=V.renderOpts.fetchMetrics;let o=V.renderOpts.pendingWaitUntil;o&&s.waitUntil&&(s.waitUntil(o),o=void 0);let l=V.renderOpts.collectedTags;if(!M)return await (0,p.sendResponse)(K,z,a,V.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(a.headers);l&&(t[f.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,s=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await A.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:j})},!1,P),t}},u=await A.handleResponse({req:e,nextConfig:b,cacheKey:O,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:j,revalidateOnlyGenerated:q,responseGenerator:l,waitUntil:s.waitUntil,isMinimalMode:G});if(!M)return null;if((null==u||null==(a=u.value)?void 0:a.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(o=u.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});G||t.setHeader("x-nextjs-cache",j?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),E&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,m.fromNodeOutgoingHttpHeaders)(u.value.headers);return G&&M||d.delete(f.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,_.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(K,z,new Response(u.value.body,{headers:d,status:u.value.status||200})),null};H&&D?await o(D):(i=B.getActiveScopeSpan(),await B.withPropagatedContext(e.headers,()=>B.trace(d.BaseServerSpan.handleRequest,{spanName:`${J} ${v}`,kind:a.SpanKind.SERVER,attributes:{"http.method":J,"http.target":e.url}},o),void 0,!H))}catch(t){if(t instanceof h.NoFallbackError||await A.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:j})},!1,P),M)throw t;return await (0,p.sendResponse)(K,z,new Response(null,{status:500})),null}}e.s(["handler",0,q,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:T,workUnitAsyncStorage:P})},"routeModule",0,A,"serverHooks",0,j,"workAsyncStorage",0,T,"workUnitAsyncStorage",0,P],448650)},916005,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_buffer_00a6lhv._.js"].map(t=>e.l(t))).then(()=>t(951615)))},408839,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_@prisma_client_runtime_query_compiler_fast_bg_sqlite_mjs_15lig9w._.js"].map(t=>e.l(t))).then(()=>t(53315)))},900998,e=>{e.v(t=>Promise.all(["server/chunks/0d-b_@prisma_client_runtime_query_compiler_fast_bg_sqlite_wasm-base64_mjs_1jb9bv_._.js"].map(t=>e.l(t))).then(()=>t(699802)))},68797,e=>{e.v(e=>Promise.resolve().then(()=>e(81111)))},465520,e=>{e.v(t=>Promise.all(["server/chunks/node_modules_@jitl_quickjs-wasmfile-debug-asyncify_dist_ffi_mjs_144ckx_._.js"].map(t=>e.l(t))).then(()=>t(437918)))},250588,e=>{e.v(t=>Promise.all(["server/chunks/[root-of-the-server]__0-ypkf7._.js","server/chunks/1daa_@jitl_quickjs-wasmfile-debug-asyncify_dist_emscripten-module_mjs_1u58-9a._.js"].map(t=>e.l(t))).then(()=>t(452979)))},835153,e=>{e.v(t=>Promise.all(["server/chunks/node_modules_@jitl_quickjs-wasmfile-debug-sync_dist_ffi_mjs_06ojbau._.js"].map(t=>e.l(t))).then(()=>t(896934)))},591520,e=>{e.v(t=>Promise.all(["server/chunks/[root-of-the-server]__15aat79._.js","server/chunks/1q96_modules_@jitl_quickjs-wasmfile-debug-sync_dist_emscripten-module_mjs_1bzxzsr._.js"].map(t=>e.l(t))).then(()=>t(355384)))},329313,e=>{e.v(t=>Promise.all(["server/chunks/node_modules_@jitl_quickjs-wasmfile-release-asyncify_dist_ffi_mjs_1cj0ga-._.js"].map(t=>e.l(t))).then(()=>t(497569)))},529413,e=>{e.v(t=>Promise.all(["server/chunks/[root-of-the-server]__1wtng3p._.js"].map(t=>e.l(t))).then(()=>t(790919)))},175367,e=>{e.v(t=>Promise.all(["server/chunks/node_modules_@jitl_quickjs-wasmfile-release-sync_dist_ffi_mjs_0ge8g9f._.js"].map(t=>e.l(t))).then(()=>t(644796)))},674591,e=>{e.v(t=>Promise.all(["server/chunks/[root-of-the-server]__09skp6r._.js"].map(t=>e.l(t))).then(()=>t(984782)))},969484,e=>{e.v(t=>Promise.all(["server/chunks/node_modules_quickjs-emscripten-core_dist_module-ES6BEMUI_mjs_145exi1._.js"].map(t=>e.l(t))).then(()=>t(807057)))},706986,e=>{e.v(t=>Promise.all(["server/chunks/node_modules_quickjs-emscripten-core_dist_module-asyncify-2EFITU5U_mjs_0eswnkg._.js"].map(t=>e.l(t))).then(()=>t(741366)))},323970,e=>{e.v(e=>Promise.resolve().then(()=>e(522734)))},589793,e=>{e.v(e=>Promise.resolve().then(()=>e(814747)))},628028,e=>{e.v(t=>Promise.all(["server/chunks/node_modules_extended-markdown-adf-parser_dist_js-yaml-GWBS3D3U_mjs_1anug9s._.js"].map(t=>e.l(t))).then(()=>t(591073)))},70729,e=>{e.v(e=>Promise.resolve().then(()=>e(666680)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__02vqwey._.js.map