@ai-development-environment/server 0.0.56 → 0.0.57
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.
- package/package.json +1 -1
- package/standalone/.next/BUILD_ID +1 -1
- package/standalone/.next/app-path-routes-manifest.json +2 -0
- package/standalone/.next/build-manifest.json +3 -3
- package/standalone/.next/prerender-manifest.json +3 -3
- package/standalone/.next/routes-manifest.json +18 -0
- package/standalone/.next/server/app/[locale]/actions/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/actions/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/actions-cache/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/actions-cache/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/agents/[id]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/agents/[id]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/agents/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/agents/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/analytics-events/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/analytics-events/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/build-data/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/build-data/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/builds/[buildId]/coverage/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route/app-paths-manifest.json +3 -0
- package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route/build-manifest.json +9 -0
- package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route/server-reference-manifest.json +4 -0
- package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route.js +12 -0
- package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route.js.map +5 -0
- package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route.js.nft.json +1 -0
- package/standalone/.next/server/app/[locale]/builds/[buildId]/output/route_client-reference-manifest.js +3 -0
- package/standalone/.next/server/app/[locale]/builds/[buildId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/builds/[buildId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/builds/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/builds/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/codebases/[codebaseId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/codebases/[codebaseId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/codebases/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/codebases/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/codebases/repositories/[repositoryId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/codebases/repositories/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/commands/[commandId]/edit/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/commands/[commandId]/edit/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/commands/new/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/commands/new/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/commands/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/commands/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route/app-paths-manifest.json +3 -0
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route/build-manifest.json +9 -0
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route/server-reference-manifest.json +4 -0
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route.js +12 -0
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route.js.map +5 -0
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route.js.nft.json +1 -0
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/output/route_client-reference-manifest.js +3 -0
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/commands/runs/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/comments/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/comments/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/console-logs/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/console-logs/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/costs/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/costs/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/credentials/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/credentials/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/devices/[id]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/devices/[id]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/devices/enroll/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/devices/enroll/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/devices/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/devices/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/drafts/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/drafts/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/jira/cache/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/jira/cache/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/jira/cache/tickets/[issueKey]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/jira/cache/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/jira/tickets/[issueKey]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/jira/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/jira/tickets/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/jira/tickets/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/jobs/[jobId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/jobs/[jobId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/notifications/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/notifications/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/plans/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/plans/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/plans/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/plans/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/polling/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/polling/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/provisioning-profiles/[profileId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/provisioning-profiles/[profileId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/provisioning-profiles/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/provisioning-profiles/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/pull-requests/[owner]/[repository]/[number]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/pull-requests/[owner]/[repository]/[number]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/pull-requests/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/pull-requests/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/push-notifications/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/push-notifications/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/runs/new/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/runs/new/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/sessions/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/sessions/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/sessions/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/sessions/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/settings/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/settings/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/skills/[skillId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/skills/groups/[groupId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/skills/groups/[groupId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/skills/groups/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/skills/groups/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/skills/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/skills/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/skills/sync/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/skills/sync/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/tools/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/tools/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/unified-events/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/unified-events/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/usage/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/usage/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/workflows/[workflowId]/edit/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/workflows/[workflowId]/edit/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/workflows/[workflowId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/workflows/new/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/workflows/new/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/workflows/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/workflows/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/workflows/runs/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/workflows/runs/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/worktrees/[worktreeId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/worktrees/[worktreeId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/worktrees/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/worktrees/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/_global-error.html +1 -1
- package/standalone/.next/server/app/_global-error.rsc +1 -1
- package/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/standalone/.next/server/app/_not-found.html +1 -1
- package/standalone/.next/server/app/_not-found.rsc +1 -1
- package/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/standalone/.next/server/app-paths-manifest.json +2 -0
- package/standalone/.next/server/chunks/1oeh_server_app_[locale]_commands_runs_[runId]_output_route_actions_1cukkg_.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__0690e_i._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__0g-b1k_._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__0jwejc1._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__19aveol._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1d8yo1w._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1gjcicg._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1kb6o8v._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1m-eb8h._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1tl064i._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1y28_j-._.js +3 -0
- package/standalone/.next/server/chunks/_04easfx._.js +1 -1
- package/standalone/.next/server/chunks/_060s_2_._.js +1 -1
- package/standalone/.next/server/chunks/_0mno1rd._.js +1 -1
- package/standalone/.next/server/chunks/_17vom8o._.js +1 -1
- package/standalone/.next/server/chunks/_1_97_xc._.js +1 -1
- package/standalone/.next/server/chunks/_1hmzed-._.js +1 -1
- package/standalone/.next/server/chunks/_1ua7367._.js +1 -1
- package/standalone/.next/server/chunks/_next-internal_server_app_[locale]_builds_[buildId]_output_route_actions_1taut05.js +3 -0
- package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__12ujp5k._.js → [root-of-the-server]__0lmk9bz._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__163pha9._.js → [root-of-the-server]__1102h2k._.js} +10 -2
- package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__04vu2d2._.js → [root-of-the-server]__1246vo_._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1zdw3xq._.js → [root-of-the-server]__13y5te1._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__14x7em1._.js → [root-of-the-server]__15g2tdw._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1urzzjr._.js → [root-of-the-server]__1c5ldng._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0szkx1z._.js → [root-of-the-server]__1etlhw0._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/_02c2d4f._.js +24 -0
- package/standalone/.next/server/chunks/ssr/{_0mpp4zy._.js → _046yruk._.js} +3 -3
- package/standalone/.next/server/chunks/ssr/{_17qauas._.js → _04o65jz._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/{_1i8x-4q._.js → _0bobqfl._.js} +3 -3
- package/standalone/.next/server/chunks/ssr/{_0u5fbj1._.js → _0lkknxk._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/_0ywojby._.js +24 -0
- package/standalone/.next/server/chunks/ssr/{_0ts0l7b._.js → _0zjisu4._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/{_182yko5._.js → _18cp9pu._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/_1eryu4w._.js +19 -0
- package/standalone/.next/server/chunks/ssr/{_0cc1vi6._.js → _1l052-e._.js} +2 -2
- package/standalone/.next/server/chunks/ssr/_1lic210._.js +3 -0
- package/standalone/.next/server/chunks/ssr/_1zgu74l._.js +10 -10
- package/standalone/.next/server/chunks/ssr/messages_de_json_[json]_cjs_1uig1ud._.js +1 -1
- package/standalone/.next/server/chunks/ssr/messages_en_json_[json]_cjs_206072-._.js +1 -1
- package/standalone/.next/server/chunks/ssr/messages_es_json_[json]_cjs_082yukd._.js +1 -1
- package/standalone/.next/server/chunks/ssr/messages_fr_json_[json]_cjs_0j6-w0i._.js +1 -1
- package/standalone/.next/server/chunks/ssr/node_modules_0k28hjd._.js +3 -0
- package/standalone/.next/server/chunks/ssr/src_components_builds_build-detail-page_tsx_0q1lvps._.js +5 -5
- package/standalone/.next/server/functions-config-manifest.json +2 -0
- package/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/standalone/.next/server/pages/404.html +1 -1
- package/standalone/.next/server/pages/500.html +1 -1
- package/standalone/.next/server/server-reference-manifest.js +1 -1
- package/standalone/.next/server/server-reference-manifest.json +1 -1
- package/standalone/.next/static/chunks/{0n2u5wjjmaseb.js → 04zmk6cyju031.js} +1 -1
- package/standalone/.next/static/chunks/{09q-nz-e_tbiy.js → 0f6x_7136ws5e.js} +1 -1
- package/standalone/.next/static/chunks/{3tfj2uhflnkvu.js → 0fm8vlctux_d4.js} +7 -7
- package/standalone/.next/static/chunks/{27a270srtknzi.js → 0k-tj18pj2jw3.js} +3 -3
- package/standalone/.next/static/chunks/{3r2wqa5gcorck.js → 0ntu55tvqo74a.js} +7 -7
- package/standalone/.next/static/chunks/0qo8_-dnk-8es.js +22 -0
- package/standalone/.next/static/chunks/{1kwddx0lygohb.js → 12pz55savz83-.js} +1 -1
- package/standalone/.next/static/chunks/18-qgh9p9g9gn.js +17 -0
- package/standalone/.next/static/chunks/{0tm88xq1je0ik.js → 1ehd9ff-t9y4q.js} +1 -1
- package/standalone/.next/static/chunks/{3ege33ljteolq.js → 1gsma655t74si.js} +1 -1
- package/standalone/.next/static/chunks/{1mmo8lspdk0y2.js → 1kas2cg1m9t70.js} +8 -8
- package/standalone/.next/static/chunks/{446mel_yhca9u.js → 2a7-21p5ltjf0.js} +2 -2
- package/standalone/.next/static/chunks/{3_tux_4hkdpja.js → 2buxoh6cj1vav.js} +1 -1
- package/standalone/.next/static/chunks/{1-v397t7o9cqz.js → 2grj-b5r57kpq.js} +2 -2
- package/standalone/.next/static/chunks/2kc9nohdlg9t0.js +1 -0
- package/standalone/.next/static/chunks/{3o8__1my6dk1_.js → 2yqx6j1xnzns8.js} +1 -1
- package/standalone/.next/static/chunks/{2ne14u5xzix6t.js → 3atzn4uq1z4g-.js} +1 -1
- package/standalone/.next/static/chunks/3cuivj8-h9d2a.js +1 -0
- package/standalone/.next/static/chunks/{1y-end2fvx0wt.js → 3kz00cbmpyo2-.js} +1 -1
- package/standalone/.next/static/chunks/{26dvl4pn5yw16.js → 3nxz8k1j8fgad.js} +7 -7
- package/standalone/.next/static/chunks/3sr3c0rfmkyg2.js +23 -0
- package/standalone/.next/static/chunks/3xx3qtf7ebz58.css +1 -0
- package/standalone/.next/server/chunks/ssr/_03tz2ed._.js +0 -3
- package/standalone/.next/server/chunks/ssr/_0_7xzsn._.js +0 -19
- package/standalone/.next/server/chunks/ssr/_0brpuee._.js +0 -24
- package/standalone/.next/server/chunks/ssr/_0jklnn-._.js +0 -11
- package/standalone/.next/server/chunks/ssr/_0qppm0k._.js +0 -24
- package/standalone/.next/server/chunks/ssr/node_modules_@radix-ui_react-menu_dist_index_mjs_0r8d9ly._.js +0 -3
- package/standalone/.next/server/chunks/ssr/src_096v3r6._.js +0 -3
- package/standalone/.next/static/chunks/0oyi9lj201nul.css +0 -1
- package/standalone/.next/static/chunks/168hnxx43r6g0.js +0 -27
- package/standalone/.next/static/chunks/193zouh7q03-q.js +0 -22
- package/standalone/.next/static/chunks/19fy68juspikd.js +0 -23
- package/standalone/.next/static/chunks/1c42xu-oct3-l.js +0 -1
- package/standalone/.next/static/chunks/33u7b61cg10r7.js +0 -17
- /package/standalone/.next/static/{PEh7pBYRizgKlQhA6uiAl → pMygSj2GOth47wwuxgqsB}/_buildManifest.js +0 -0
- /package/standalone/.next/static/{PEh7pBYRizgKlQhA6uiAl → pMygSj2GOth47wwuxgqsB}/_clientMiddlewareManifest.js +0 -0
- /package/standalone/.next/static/{PEh7pBYRizgKlQhA6uiAl → pMygSj2GOth47wwuxgqsB}/_ssgManifest.js +0 -0
|
@@ -6130,6 +6130,6 @@ ${a}`].join("\n\n").slice(0,2e6)),this.createInternal({...t,attachmentIds:n,kind
|
|
|
6130
6130
|
${e.prompt}`).join("\n\n"),n.run.events.filter(e=>null===n.eventSequence?e.createdAt<=n.createdAt:e.sequence<=n.eventSequence).map(e=>`[${e.type}] ${e.summary}${e.detailMarkdown?`
|
|
6131
6131
|
${e.detailMarkdown}`:""}`).join("\n\n"),`Questions:
|
|
6132
6132
|
${n.questions.map(e=>`- ${e.prompt}`).join("\n")}`,`Revised answer:
|
|
6133
|
-
${JSON.stringify(t,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),c=await euu(i,"SESSION"),u=(0,AB.randomUUID)(),d=(0,AB.randomUUID)(),h=new Date,p=await i.agentRun.create({data:{id:u,kind:"SESSION",displayNumber:c,status:"IN_PROGRESS",phase:"ANSWER_REVISION_QUEUED",provider:n.run.provider,worktreeId:n.run.worktreeId,agentId:n.run.agentId,jiraIssueKey:n.run.jiraIssueKey,repositoryName:n.run.repositoryName,branch:n.run.branch,model:n.run.model,effort:n.run.effort,webSearchEnabled:n.run.webSearchEnabled,initialPrompt:l,parentRunId:n.runId,parentRunNumber:n.run.displayNumber,followUpMode:"ANSWER_REVISION",inputs:{create:{id:d,sequence:0,kind:"ANSWER_REVISION",prompt:l}}}});if(await i.worktreeRunLease.deleteMany({where:{worktreeId:n.run.worktreeId,runId:n.runId}}),await i.worktreeRunLease.findUnique({where:{worktreeId:n.run.worktreeId}}))throw Error("Another Session owns this worktree");await i.worktreeRunLease.create({data:{worktreeId:n.run.worktreeId,runId:u}}),await i.agentRun.update({where:{id:n.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:h}});let g=await eup(i,{runId:u,agentId:n.run.agentId,type:"REVISE_ANSWER",payload:{batchId:e,revisionId:s,inputId:d,stash:!!A,rollback:r,checkpoint:n.checkpoint}});return{batch:n,run:p,command:g,sourceRunId:n.runId,sourceAgentId:n.run.agentId}});return eul(n.sourceRunId),eul(n.run.id),euc(n.command,n.sourceAgentId),this.get(n.run.id)}async pendingCommands(e){return(await ag()).runCommand.findMany({where:{agentId:e,status:{in:["QUEUED","RUNNING"]}},orderBy:[{createdAt:"asc"},{sequence:"asc"}],take:200,include:euh})}async claimCommand(e,t){let A=await ag(),r=await A.runCommand.findUnique({where:{id:t},select:{agentId:!0,status:!0,run:{select:{worktreeId:!0}}}});if(!r||r.agentId!==e)throw Error("Run command not found");"QUEUED"===r.status&&r.run.worktreeId&&await this.diskSpace?.assertWorktreeCanStart(r.run.worktreeId),await A.runCommand.updateMany({where:{id:t,agentId:e,status:"QUEUED"},data:{status:"RUNNING",claimedAt:new Date}});let i=await A.runCommand.findUnique({where:{id:t},include:euh});if(!i||i.agentId!==e)throw Error("Run command not found");if("RUNNING"!==i.status)throw Error("Run command cannot be claimed");return i}async completeCommand(e,t,A,r){let i=await ag(),n=await i.runCommand.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run command not found");let a=await i.runCommand.update({where:{id:t},data:{status:"SUCCEEDED"===A?"SUCCEEDED":"FAILED",error:eun(r,2e4),finishedAt:new Date}});if("DELETE_NATIVE"===a.type&&"SUCCEEDED"===a.status){let e=await i.agentRun.findUnique({where:{id:a.runId},include:{inputs:{include:{attachments:!0}}}});if(e){let t=e.inputs.flatMap(e=>e.attachments.map(({storagePath:e})=>e));await i.agentRun.delete({where:{id:e.id}}),await ec6(t)}}else if("FAILED"===a.status)await i.agentRun.updateMany({where:{id:a.runId,status:{notIn:[...eut]}},data:{error:a.error,phase:`${a.type}_FAILED`,...["START","PLAY_PLAN","CONTINUE"].includes(a.type)?{status:"FAILED",finishedAt:new Date}:{},...["PREPARE_ANSWER_REVISION","REVISE_ANSWER"].includes(a.type)?{status:"PAUSED",finishedAt:null}:{}}}),["START","PLAY_PLAN","CONTINUE"].includes(a.type)&&await i.worktreeRunLease.deleteMany({where:{runId:a.runId}});else if(["PAUSE","CANCEL"].includes(a.type)){let e="CANCEL"===a.type;await i.agentRun.updateMany({where:{id:a.runId,status:{notIn:[...eut]}},data:{status:e?"CANCELLED":"PAUSED",phase:e?"CANCELLED":"PAUSED",finishedAt:e?new Date:null}}),e&&await i.worktreeRunLease.deleteMany({where:{runId:a.runId}})}return eul(a.runId),a}async beginAttempt(e,t,A){let r=await ag(),i=await r.agentRun.findUnique({where:{id:t},include:{attempts:!0}});if(!i||i.agentId!==e)throw Error("Run not found for this agent");if(eut.has(i.status))throw Error("Run is already finished");let n=i.attempts.length,a=await r.runAttempt.create({data:{id:(0,AB.randomUUID)(),runId:t,generation:n,nativeId:A||null,nativeKey:A?`${e}:${i.provider}:${A}`:null,status:"RUNNING"}});return await r.agentRun.update({where:{id:t},data:{phase:"RUNNING",startedAt:i.startedAt??new Date}}),eul(t),a}async updateAttemptNativeId(e,t,A,r){let i=await ag(),n=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:t},include:{run:!0}});if(!n||n.run.agentId!==e)throw Error("Attempt not found");let a=`${e}:${n.run.provider}:${A}`,s=await i.runAttempt.findUnique({where:{nativeKey:a}});if(s&&s.id!==t){if(s.runId!==n.runId)throw Error("Native provider session belongs to another run");await i.runAttempt.update({where:{id:s.id},data:{nativeKey:null}})}let o=await i.runAttempt.update({where:{id:t},data:{nativeId:A,nativeKey:a}});return r&&await i.agentRun.update({where:{id:n.runId},data:{providerVersion:r}}),o});return eul(n.runId),n}async appendEvents(e,t,A,r){let i=await ag(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");let a=r.slice(0,500).map(e=>{let r=eui(e.summary,"Event summary",2e3);return{id:e.id,runId:t,attemptId:A,sequence:e.sequence,type:eui(e.type,"Event type",100).toUpperCase(),summary:r,searchText:eun(e.searchText,1e5)??r,detailMarkdown:eun(e.detailMarkdown,5e5),rawJson:void 0===e.raw?null:JSON.stringify(e.raw),createdAt:eus(e.createdAt)}});if(!a.length)return[];let s=await i.$transaction(async e=>{let r=new Set((await e.runEvent.findMany({where:{id:{in:a.map(e=>e.id)}},select:{id:!0}})).map(({id:e})=>e)),i=a.filter(e=>!r.has(e.id));if(i.length){await e.runEvent.createMany({data:i});let r=i.filter(e=>e.type.includes("TOOL")&&!e.type.includes("QUESTION")).map(e=>({id:`event:${e.id}`,runId:t,attemptId:A,sequence:e.sequence,name:e.summary.split(/[\s:(]/,1)[0]||e.type,status:e.type.includes("FAIL")||e.type.includes("ERROR")?"FAILED":e.type.includes("COMPLETE")||e.type.includes("RESULT")?"COMPLETED":"OBSERVED",inputJson:e.rawJson,error:e.type.includes("FAIL")||e.type.includes("ERROR")?e.summary:null,finishedAt:e.createdAt}));r.length&&(await e.runToolCall.createMany({data:r}),await e.agentRun.update({where:{id:t},data:{toolCallCount:await e.runToolCall.count({where:{runId:t}})}}))}return e.runEvent.findMany({where:{id:{in:a.map(e=>e.id)}},orderBy:{sequence:"asc"}})});for(let e of s)af.publish(a_(t),{runEventAdded:e});return eul(t),s}async reportQuestion(e,t,A,r,i,n){if(!n.length||n.length>10)throw Error("Question batch is invalid");let a=await ag(),s=await a.$transaction(async a=>{let s=await a.agentRun.findUnique({where:{id:t},include:{worktree:!0}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");if(r){let e=await a.runQuestionBatch.findUnique({where:{runId_nativeRequestId:{runId:t,nativeRequestId:r}},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}});if(e)return{batch:e,notification:null}}let o=(0,AB.randomUUID)(),l=await a.runQuestionBatch.create({data:{id:o,runId:t,attemptId:A,nativeRequestId:r,eventSequence:Number.isInteger(i)&&(i??-1)>=-1?i:null,questions:{create:n.map((e,t)=>({id:`${o}:${t}:${e.id||"question"}`,position:t,header:eun(e.header,200),prompt:eui(e.prompt,"Question",1e4),multiSelect:!!e.multiSelect,allowCustom:!1!==e.allowCustom,options:{create:(e.options??[]).map((e,t)=>({id:(0,AB.randomUUID)(),position:t,label:eui(e.label,"Option label",500),description:eun(e.description,2e3)}))}}))}},include:{questions:{include:{options:!0}}}});return await a.agentRun.update({where:{id:t},data:{phase:"WAITING_FOR_ANSWER"}}),{batch:l,notification:this.notifications?await this.notifications.recordInTransaction(a,{dedupeKey:`run:${t}:question:${o}`,typeKey:"RUN_NEEDS_ANSWER",title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} needs an answer`,body:n[0].prompt.slice(0,1e3),href:euo(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:s.worktree?.highlightColor}):null}});return this.notifications?.created(s.notification),eul(t),af.publish(aL(t),{runQuestionChanged:{id:s.batch.id,runId:t}}),s.batch}async reportUsage(e,t,A,r){let i=await ag(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");let a=e=>Number.isFinite(e)&&(e??0)>=0?Math.floor(e):0;return await i.$transaction(async e=>{let i=await e.runModelUsage.findFirst({where:{runId:t,attemptId:A,model:r.model}}),n={inputTokens:a(r.inputTokens),outputTokens:a(r.outputTokens),reasoningTokens:a(r.reasoningTokens),cacheReadTokens:a(r.cacheReadTokens),cacheWriteTokens:a(r.cacheWriteTokens),estimatedCost:r.estimatedCost??null};i?await e.runModelUsage.update({where:{id:i.id},data:n}):await e.runModelUsage.create({data:{id:(0,AB.randomUUID)(),runId:t,attemptId:A,model:r.model,...n}});let s=await e.runModelUsage.aggregate({where:{runId:t},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}}),o=await e.runModelUsage.findMany({where:{runId:t,estimatedCost:{not:null}},select:{model:!0,estimatedCost:!0}}),l=o.find(({model:e})=>"estimated-total"===e)?.estimatedCost,c=await e.runToolCall.count({where:{runId:t}});await e.agentRun.update({where:{id:t},data:{inputTokens:s._sum.inputTokens??0,outputTokens:s._sum.outputTokens??0,reasoningTokens:s._sum.reasoningTokens??0,cacheReadTokens:s._sum.cacheReadTokens??0,cacheWriteTokens:s._sum.cacheWriteTokens??0,toolCallCount:Math.max(c,a(r.toolCallCount)),estimatedCost:l??(o.length?o.reduce((e,t)=>e+(t.estimatedCost??0),0):null),pricingSource:eun(r.pricingSource,200),pricingUpdatedAt:new Date}})}),eul(t),this.get(t)}async finishAttempt(e,t,A){let r=A.status.toUpperCase();if(!["PAUSED","COMPLETED","CANCELLED","FAILED"].includes(r))throw Error("Run completion status is invalid");let i=await ag(),n=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:t},include:{run:{include:{worktree:!0}}}});if(!n||n.run.agentId!==e)throw Error("Attempt not found");let a=eut.has(n.run.status)?n.run.status:r;await i.runAttempt.update({where:{id:t},data:{status:a,finishedAt:new Date}}),await i.runQuestionBatch.updateMany({where:{runId:n.runId,status:"PENDING"},data:{status:"SUPERSEDED",supersededAt:new Date}});let s=eut.has(n.run.status)?n.run:await i.agentRun.update({where:{id:n.runId},data:{status:r,phase:A.phase?.trim().toUpperCase()||r,finalOutput:eun(A.finalOutput,2e6),error:eun(A.error,2e4),finishedAt:"PAUSED"===r?null:new Date}});eut.has(a)&&await i.worktreeRunLease.deleteMany({where:{runId:s.id}});let o="COMPLETED"===a?"RUN_COMPLETED":"FAILED"===a?"RUN_FAILED":"CANCELLED"===a?"RUN_CANCELLED":"RECOVERY_PAUSED"===A.phase?"RUN_RECOVERY_PAUSED":null,l=o&&this.notifications?await this.notifications.recordInTransaction(i,{dedupeKey:`run:${s.id}:status:${a}:${n.generation}`,typeKey:o,title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} ${a.toLowerCase()}`,body:A.error||A.finalOutput?.slice(0,1e3)||`The ${s.kind.toLowerCase()} is ${a.toLowerCase()}.`,href:euo(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:n.run.worktree?.highlightColor}):null;return{run:s,notification:l}});return this.notifications?.created(n.notification),eul(n.run.id),this.get(n.run.id)}async reportCheckpoint(e,t,A,r){let i=await ag(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");if(r.questionBatchId){let e=await i.runQuestionBatch.findUnique({where:{id:r.questionBatchId}});if(!e||e.runId!==t)throw Error("Question batch not found")}let a=await i.runCheckpoint.create({data:{id:(0,AB.randomUUID)(),runId:t,attemptId:A,questionBatchId:r.questionBatchId??null,kind:eui(r.kind,"Checkpoint kind",100).toUpperCase(),headSha:eun(r.headSha,100),branch:eun(r.branch,500),upstreamSha:eun(r.upstreamSha,100),indexTree:eun(r.indexTree,100),worktreeTree:eun(r.worktreeTree,100),refName:eun(r.refName,1e3),manifestJson:eun(r.manifestJson,2e6),diffSummary:eun(r.diffSummary,5e5),diffPatch:eun(r.diffPatch,2e6),stashRef:eun(r.stashRef,1e3)}});return eul(t),a}async reportAnswerRevisionPreview(e,t,A,r){let i=await ag(),n=await i.runQuestionBatch.findUnique({where:{id:t},include:{run:!0}});if(!n?.runId||!n.run||n.run.agentId!==e||"MANAGED"!==n.run.origin)throw Error("Question batch not found for this agent");let a=await i.runQuestionBatch.update({where:{id:t},data:{revisionPreparedAt:new Date,rollbackPatch:A.slice(0,2e6),pushedCommitWarning:eun(r,2e4)},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}}}});return eul(n.runId),af.publish(aL(n.runId),{runQuestionChanged:{id:t,runId:n.runId}}),a}async applyAnswerRevision(e,t,A,r){let i=await ag(),n=await i.$transaction(async i=>{let n=await i.runQuestionBatch.findUnique({where:{id:t},include:{run:!0,attempt:!0}}),a=await i.runAttempt.findUnique({where:{id:r},include:{run:!0}}),s=await i.runAnswerRevision.findUnique({where:{id:A}});if(!n?.runId||!n.run||n.run.agentId!==e||!n.attempt||!a||a.run.parentRunId!==n.runId||"ANSWER_REVISION"!==a.run.followUpMode||!s||s.batchId!==t)throw Error("Answer revision cannot be applied");let o=new Date,l=(await i.runAttempt.findMany({where:{runId:n.runId,generation:{gte:n.attempt.generation}},select:{id:!0}})).map(({id:e})=>e);await i.runAttempt.updateMany({where:{id:{in:l}},data:{status:"SUPERSEDED",supersededAt:o,finishedAt:o}}),await i.runEvent.updateMany({where:{runId:n.runId,sequence:{gt:n.eventSequence??-1},supersededAt:null},data:{supersededAt:o}}),await i.runToolCall.updateMany({where:{attemptId:{in:l},supersededAt:null},data:{supersededAt:o}}),await i.runModelUsage.updateMany({where:{attemptId:{in:l}},data:{superseded:!0}});let c=(await i.runQuestionBatch.findMany({where:{runId:n.runId,createdAt:{gt:n.createdAt}},select:{id:!0}})).map(({id:e})=>e);return await i.runQuestionBatch.updateMany({where:{id:{in:c}},data:{status:"SUPERSEDED",supersededAt:o}}),await i.runAnswerRevision.updateMany({where:{OR:[{batchId:{in:c}},{batchId:t,id:{not:A}}],supersededAt:null},data:{supersededAt:o}}),await i.runAnswerRevision.update({where:{id:A},data:{replacementAttemptId:r}}),await i.agentRun.update({where:{id:n.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:o}}),await i.agentRun.update({where:{id:a.runId},data:{status:"IN_PROGRESS",phase:"RUNNING"}}),{sourceRunId:n.runId,replacementRunId:a.runId}});return eul(n.sourceRunId),eul(n.replacementRunId),this.get(n.replacementRunId)}async importRuns(e,t,A){let r=eur(eue,t,"Provider"),i=await ag(),n=0;for(let t of A){let A=`${e}:${r}:${eui(t.nativeId,"Native ID",500)}`,a=(()=>{let e=t.status?.toUpperCase()??"COMPLETED";return["ACTIVE","RUNNING","STARTING","IN_PROGRESS","WAITING_FOR_ANSWER"].includes(e)?"IN_PROGRESS":"PAUSED"===e?"PAUSED":"CANCELLED"===e||"CANCELED"===e?"CANCELLED":"FAILED"===e||"ERROR"===e?"FAILED":"COMPLETED"})(),s=await i.runAttempt.findUnique({where:{nativeKey:A},include:{run:!0}});if(s){if("IMPORTED"===s.run.origin){let e="SESSION"===s.run.kind&&"IN_PROGRESS"===a?await i.worktreeRunLease.findUnique({where:{worktreeId:s.run.worktreeId??""}}):null;await i.$transaction([i.runAttempt.update({where:{id:s.id},data:{rawMetadataJson:JSON.stringify(t.rawMetadata??{})}}),i.agentRun.update({where:{id:s.runId},data:{status:a,phase:e?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",model:t.model||s.run.model,effort:eun(t.effort,100),finalOutput:eun(t.finalOutput,2e6),branch:t.branch??s.run.branch,jiraIssueKey:eua(t.jiraIssueKey),nativeArchivedAt:t.archived?new Date:null,startedAt:eus(t.createdAt)??s.run.startedAt,finishedAt:"IN_PROGRESS"===a?null:eus(t.updatedAt)??s.run.finishedAt}})]),eul(s.runId)}continue}let o=await i.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{repository:!0}}}});if(!o||o.codebase.agentId!==e)continue;let l=t.kind?.toUpperCase()==="PLAN"?"PLAN":"SESSION",c="SESSION"===l&&"IN_PROGRESS"===a?await i.worktreeRunLease.findUnique({where:{worktreeId:o.id}}):null,u=await i.$transaction(e=>euu(e,l)),d=(0,AB.randomUUID)();await i.agentRun.create({data:{id:d,kind:l,displayNumber:u,status:a,phase:c?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",origin:"IMPORTED",provider:r,worktreeId:o.id,agentId:e,jiraIssueKey:eua(t.jiraIssueKey),repositoryName:o.codebase.repository.name,branch:t.branch??o.branch,model:t.model||"unknown",effort:eun(t.effort,100),initialPrompt:t.prompt?.trim()||"Imported provider history",finalOutput:eun(t.finalOutput,2e6),archivedAt:t.archived?new Date:null,nativeArchivedAt:t.archived?new Date:null,startedAt:eus(t.createdAt),finishedAt:eus(t.updatedAt),createdAt:eus(t.createdAt),attempts:{create:{id:(0,AB.randomUUID)(),generation:0,nativeId:t.nativeId,nativeKey:A,status:"IMPORTED",rawMetadataJson:JSON.stringify(t.rawMetadata??{})}},inputs:{create:{id:(0,AB.randomUUID)(),sequence:0,kind:"INITIAL",prompt:t.prompt?.trim()||"Imported provider history"}}}}),eul(d),n+=1}return await i.runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:r}},create:{id:(0,AB.randomUUID)(),agentId:e,provider:r,status:"IDLE",lastCompletedAt:new Date,importedCount:n},update:{status:"IDLE",lastCompletedAt:new Date,lastError:null,importedCount:{increment:n}}}),n}async providerCatalog(e={}){let t=await ag(),A=!!(e.runId||e.worktreeId),r=e.runId?(await t.agentRun.findUnique({where:{id:e.runId},select:{agentId:!0}}))?.agentId:e.worktreeId?(await t.worktree.findUnique({where:{id:e.worktreeId},select:{codebase:{select:{agentId:!0}}}}))?.codebase.agentId:null,[i,n]=A&&!r?[[],[]]:await Promise.all([t.agent.findMany({where:r?{id:r}:void 0,select:{id:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),t.runProviderSync.findMany({where:r?{agentId:r}:void 0,orderBy:{updatedAt:"desc"}})]);return eue.map(e=>{let t=`runs.provider.${e.toLowerCase()}`,A=i.some(A=>{let r=n.find(t=>t.agentId===A.id&&t.provider===e);return!A.disconnectedAt&&!!A.lastSeenAt&&Date.now()-A.lastSeenAt.getTime()<=aZ(A)&&JSON.parse(A.capabilitiesJson).includes(t)&&r?.status!=="FAILED"}),r=n.find(({provider:t})=>t===e)?.catalogJson,a=r?JSON.parse(r):null;return{key:e,label:"OPENCODE"===e?"OpenCode":"CLAUDE"===e?"Claude":"Codex",available:A,models:a?.models?.length?a.models:[{id:"default",label:"Provider default",efforts:["auto","low","medium","high"]}],supportsWebSearch:a?.capabilities?.webSearch??!0,supportsQuestions:a?.capabilities?.questions??!0,supportsImport:a?.capabilities?.import??!0,supportsPause:a?.capabilities?.pause??!0,supportsSteering:a?.capabilities?.steering??!0,supportsResume:a?.capabilities?.resume??!0,supportsNativeDelete:a?.capabilities?.nativeDelete??!0}})}async providerImportStatus(){return(await ag()).runProviderSync.findMany({orderBy:[{agentId:"asc"},{provider:"asc"}]})}async reportProviderImportStatus(e,t,A,r,i){let n=eur(eue,t,"Provider"),a=A.trim().toUpperCase();if(!["SYNCING","IDLE","FAILED"].includes(a))throw Error("Import status is invalid");return(await ag()).runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:n}},create:{id:(0,AB.randomUUID)(),agentId:e,provider:n,status:a,lastStartedAt:"SYNCING"===a?new Date:void 0,lastCompletedAt:"IDLE"===a?new Date:void 0,lastError:eun(r,2e4),catalogJson:void 0===i?void 0:JSON.stringify(i)},update:{status:a,lastStartedAt:"SYNCING"===a?new Date:void 0,lastCompletedAt:"IDLE"===a?new Date:void 0,lastError:"FAILED"===a?eun(r,2e4):null,catalogJson:void 0===i?void 0:JSON.stringify(i)}})}subscribeRuns(){return af.iterate(aT)}subscribeRun(e){return af.iterate(aH(e))}subscribeEvents(e){return af.iterate(a_(e))}subscribeQuestions(e){return af.iterate(aL(e))}async requireWorktree(e,t){let A=await ag(),r=await A.worktree.findUnique({where:{id:eui(e,"Worktree",500)},include:{codebase:{include:{repository:!0,agent:!0}}}});if(!r||"AVAILABLE"!==r.availability)throw Error("Worktree is unavailable");if(t){let e=r.codebase.agent,i=JSON.parse(e.capabilitiesJson);if(e.disconnectedAt||!e.lastSeenAt||Date.now()-e.lastSeenAt.getTime()>aZ(e)||!i.includes(`runs.provider.${t.toLowerCase()}`))throw Error(`${t} is unavailable on this worktree's agent`);let n=await A.runProviderSync.findUnique({where:{agentId_provider:{agentId:r.codebase.agentId,provider:t}}});if(n?.status==="FAILED")throw Error(`${t} is unavailable: ${n.lastError??"provider capability check failed"}`)}return r}async requireAttachments(e,t){if(!e.length)return;if(e.length>100)throw Error("Too many attachments");let A=await ag(),r=await A.runAttachment.findMany({where:{id:{in:e},inputId:null,...t?{OR:[{draftId:t},{draftId:null}]}:{draftId:null}}});if(r.length!==e.length)throw Error("One or more attachments are unavailable");if(r.reduce((e,t)=>e+t.size,0)>0x6400000)throw Error("Attachments exceed the 100 MB input limit")}}let euI=["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME","ANY_WORKTREE","REPOSITORY_WORKTREE"],euf=["NEVER","ON_FAILURE","ALWAYS"],eum=["QUEUED","RUNNING","RESTARTING","CANCELLING"],euC=["SUCCEEDED","FAILED","CANCELLED"];function euy(e,t,A){let r=t.trim().toUpperCase();if(!e.includes(r))throw Error(`${A} is not supported`);return r}function euQ(e,t,A){let r=e.trim();if(!r)throw Error(`${t} is required`);if(r.length>A)throw Error(`${t} is too long`);return r}function euw(e){af.publish(aM,{commandsChanged:e})}function euB(e){af.publish(aO,{commandRunsChanged:e}),af.publish(aF(e.id),{commandRunChanged:e})}class euS{agentControl;notifications;timer;reconciliation;constructor(e,t){this.agentControl=e,this.notifications=t,this.timer=null,this.reconciliation=null,this.agentControl.registerCompletionHandler(AC,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 ag()).commandDefinition.findMany({where:e?{}:{archivedAt:null},include:{targetAgent:!0,targetRepository:!0},orderBy:[{archivedAt:"asc"},{name:"asc"}]})}async getDefinition(e){return(await ag()).commandDefinition.findUnique({where:{id:e},include:{targetAgent:!0,targetRepository:!0}})}normalizeDefinition(e){let t=euy(euI,e.targetKind,"Target scope"),A=euy(euf,e.restartPolicy??"NEVER","Restart policy"),r=void 0===e.restartLimit?3:e.restartLimit;if(null!==r&&(!Number.isInteger(r)||r<0||r>100))throw Error("Restart limit must be null or an integer from 0 to 100");let i="SPECIFIC_AGENT_HOME"===t,n="REPOSITORY_WORKTREE"===t;if(!!e.targetAgentId!==i)throw Error(i?"A specific-agent command requires an agent":"This target scope does not accept a specific agent");if(!!e.targetRepositoryId!==n)throw Error(n?"A repository-worktree command requires a repository":"This target scope does not accept a repository");return{name:euQ(e.name,"Name",120),description:(e.description??"").trim().slice(0,2e3),script:euQ(e.script,"Script",1e6),targetKind:t,targetAgentId:e.targetAgentId??null,targetRepositoryId:e.targetRepositoryId??null,restartPolicy:A,restartLimit:r,quickActionEnabled:e.quickActionEnabled??!1,quickActionIconKey:euQ(e.quickActionIconKey??"terminal","Quick action icon",40),quickActionButtonVariant:euQ(e.quickActionButtonVariant??"default","Quick action style",40),notificationsEnabled:e.notificationsEnabled??!0}}async createDefinition(e){let t=await ag(),A=await t.commandDefinition.create({data:{id:(0,AB.randomUUID)(),...this.normalizeDefinition(e)},include:{targetAgent:!0,targetRepository:!0}});return euw(A),A}async updateDefinition(e,t){let A=await ag(),r=await A.commandDefinition.update({where:{id:e},data:this.normalizeDefinition(t),include:{targetAgent:!0,targetRepository:!0}});return euw(r),r}async archiveDefinition(e,t){let A=await ag(),r=await A.commandDefinition.update({where:{id:e},data:{archivedAt:t?new Date:null},include:{targetAgent:!0,targetRepository:!0}});return euw(r),r}async eligibleForAgent(e){return(await ag()).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 ag(),A=await t.worktree.findUnique({where:{id:e},select:{codebase:{select:{repositoryId:!0}}}});if(!A)throw Error("Worktree not found");return t.commandDefinition.findMany({where:{archivedAt:null,OR:[{targetKind:"ANY_WORKTREE"},{targetKind:"REPOSITORY_WORKTREE",targetRepositoryId:A.codebase.repositoryId}]},include:{targetAgent:!0,targetRepository:!0},orderBy:{name:"asc"}})}async listRuns(e){let t=await ag(),A=Math.max(1,Math.min(e.first??50,200)),r=e.search?.trim(),i={...e.includeArchived?{}:{archivedAt:null},...e.agentId?{agentId:e.agentId}:{},...e.worktreeId?{worktreeId:e.worktreeId}:{},...r?{OR:[{snapshotName:{contains:r}},{agentName:{contains:r}},{worktreePath:{contains:r}}]}:{}},[n,a]=await Promise.all([t.commandRun.findMany({where:i,include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{orderBy:{attempt:"asc"}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}}),t.commandRun.count({where:i})]),s=n.length>A,o=n.slice(0,A);return{nodes:o,totalCount:a,pageInfo:{hasNextPage:s,endCursor:o.at(-1)?.id??null}}}async getRun(e){return(await ag()).commandRun.findUnique({where:{id:e},include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{include:{agentJob:!0},orderBy:{attempt:"asc"}},predecessor:!0,successor:!0}})}async listOutput(e,t=0,A=-1,r=1e3){let i=await ag();return r<1?[]:i.commandRunOutputChunk.findMany({where:{OR:[{attempt:{runId:e,attempt:{gt:t}}},{attempt:{runId:e,attempt:t},sequence:{gt:A}}]},include:{attempt:{select:{attempt:!0,runId:!0}}},orderBy:[{attempt:{attempt:"asc"}},{sequence:"asc"}],take:Math.max(1,Math.min(r,5e3))})}async resolveTarget(e,t){let A=await ag();if("ANY_AGENT_HOME"===e.targetKind||"SPECIFIC_AGENT_HOME"===e.targetKind){if(!t.agentId||t.worktreeId)throw Error("This command requires an agent-home target");if("SPECIFIC_AGENT_HOME"===e.targetKind&&e.targetAgentId!==t.agentId)throw Error("This command is not eligible for the selected agent");let r=await A.agent.findUnique({where:{id:t.agentId}});if(!r)throw Error("Agent not found");return this.requireCapability(r.capabilitiesJson),{agent:r,worktree:null}}if(!t.worktreeId||t.agentId)throw Error("This command requires a worktree target");let r=await A.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{agent:!0,repository:!0}}}});if(!r||r.missingAt)throw Error("Worktree is unavailable");if("REPOSITORY_WORKTREE"===e.targetKind&&e.targetRepositoryId!==r.codebase.repositoryId)throw Error("This command is not eligible for the selected repository");return this.requireCapability(r.codebase.agent.capabilitiesJson),{agent:r.codebase.agent,worktree:r}}requireCapability(e){if(!(function(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}})(e).includes(AC))throw Error("The selected agent must be upgraded before it can run commands")}async startRun(e){let t,A=await ag(),r=e.idempotencyKey?.trim()||(0,AB.randomUUID)(),i=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(i)return this.getRun(i.id);let n=await A.commandDefinition.findUnique({where:{id:e.commandId}});if(!n||n.archivedAt)throw Error("Command not found");let{agent:a,worktree:s}=await this.resolveTarget(n,e);try{t=await A.$transaction(async t=>{let A=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:A.nextValue,commandId:n.id,idempotencyKey:r,origin:(e.origin??"MANUAL").trim().toUpperCase(),snapshotName:n.name,snapshotDescription:n.description,snapshotScript:n.script,snapshotTargetKind:n.targetKind,snapshotRestartPolicy:n.restartPolicy,snapshotRestartLimit:n.restartLimit,snapshotNotificationsEnabled:n.notificationsEnabled,snapshotJson:JSON.stringify(n),agentId:a.id,worktreeId:s?.id??null,agentName:a.name,agentHostname:a.hostname,worktreePath:s?.folder??null,worktreeBranch:s?.branch??null}})})}catch(t){let e=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(!e)throw t;return this.getRun(e.id)}return euB(t),await this.dispatch(t.id),this.getRun(t.id)}async startCustomRun(e){let t,A=await ag(),r=e.idempotencyKey?.trim()||(0,AB.randomUUID)(),i=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(i)return this.getRun(i.id);let n=euQ(e.script,"Script",1e6),a=e.agentId&&!e.worktreeId?"ANY_AGENT_HOME":e.worktreeId&&!e.agentId?"ANY_WORKTREE":null;if(!a)throw Error("A custom command requires exactly one agent-home or worktree target");let{agent:s,worktree:o}=await this.resolveTarget({targetKind:a,targetAgentId:null,targetRepositoryId:null},e),l={name:"Custom command",description:"",script:n,targetKind:a,restartPolicy:"NEVER",restartLimit:null,notificationsEnabled:!0};try{t=await A.$transaction(async t=>{let A=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:A.nextValue,commandId:null,idempotencyKey:r,origin:(e.origin??"MANUAL").trim().toUpperCase(),status:"QUEUED",snapshotName:l.name,snapshotDescription:l.description,snapshotScript:l.script,snapshotTargetKind:l.targetKind,snapshotRestartPolicy:l.restartPolicy,snapshotRestartLimit:l.restartLimit,snapshotNotificationsEnabled:l.notificationsEnabled,snapshotJson:JSON.stringify(l),agentId:s.id,worktreeId:o?.id??null,agentName:s.name,agentHostname:s.hostname,worktreePath:o?.folder??null,worktreeBranch:o?.branch??null}})})}catch(t){let e=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(!e)throw t;return this.getRun(e.id)}euB(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 ag(),A=await t.commandRun.findUnique({where:{id:e},include:{agent:!0,worktree:{include:{codebase:!0}},attempts:!0}});if(!A||A.stopRequested)return;if(!A.agentId||!A.agent)return void await this.failDispatch(A.id,"The command agent is no longer available");if(A.predecessorRunId){let e=await t.commandRun.findUnique({where:{id:A.predecessorRunId},select:{status:!0}});if(e&&!euC.includes(e.status))return}if(new Set(["ANY_WORKTREE","REPOSITORY_WORKTREE"]).has(A.snapshotTargetKind)&&(!A.worktreeId||!A.worktree||A.worktree.missingAt))return void await this.failDispatch(A.id,"The command worktree is no longer available");if(A.worktree&&A.worktree.codebase.agentId!==A.agentId)return void await this.failDispatch(A.id,"The worktree is no longer assigned to the command agent");try{this.requireCapability(A.agent.capabilitiesJson)}catch(e){await this.failDispatch(A.id,e instanceof Error?e.message:String(e));return}let r=A.attempts.reduce((e,t)=>!e||t.attempt>e.attempt?t:e,null),i=!r||r.agentJobId||r.completionProcessedAt||r.finishedAt?(r?.attempt??0)+1:r.attempt,n=r?.attempt===i?r:await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:i}}});if(!n)try{n=await t.commandRunAttempt.create({data:{id:(0,AB.randomUUID)(),runId:e,attempt:i}})}catch(A){if(!(n=await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:i}}})))throw A}if(!n.agentJobId){let e=await this.agentControl.createJob({agentId:A.agentId,kind:AC,payload:{commandRunId:A.id,attemptId:n.id,targetKind:A.worktreeId?"WORKTREE":"AGENT_HOME",cwd:A.worktree?.folder??null,script:A.snapshotScript},idempotencyKey:`command-run:${A.id}:attempt:${i}`,timeoutSeconds:0,worktreeId:A.worktreeId,codebaseId:A.worktree?.codebaseId??null,visibility:"SYSTEM"});n=await t.commandRunAttempt.update({where:{id:n.id},data:{agentJobId:e.id,status:e.status}})}euB(await t.commandRun.update({where:{id:A.id},data:{status:"RUNNING"===n.status?"RUNNING":"QUEUED",startedAt:"RUNNING"===n.status?A.startedAt??new Date:null,nextRestartAt:null,error:null}}))}async failDispatch(e,t){let A=await ag(),r=await A.commandRun.update({where:{id:e},data:{status:"FAILED",error:t,finishedAt:new Date,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});euB(r),await this.notifyFinishedRun(r)}async terminateRun(e){let t=await ag(),A=await t.commandRun.findUnique({where:{id:e},include:{attempts:{orderBy:{attempt:"desc"},take:1}}});if(!A)throw Error("Command run not found");if(euC.includes(A.status))return A;let r=await t.commandRun.update({where:{id:e},data:{stopRequested:!0,status:"CANCELLING",nextRestartAt:null}}),i=A.attempts[0]?.agentJobId;return i?await this.agentControl.cancelJob(i):await this.finishCancelled(e),euB(r),this.getRun(e)}async rerun(e){let t=await ag(),A=await t.commandRun.findUnique({where:{id:e}});if(!A)throw Error("Command run not found");let r=await t.commandRun.findUnique({where:{predecessorRunId:A.id}});if(r)return this.getRun(r.id);let i=await t.$transaction(async e=>{let t=await e.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return e.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:t.nextValue,commandId:A.commandId,idempotencyKey:`rerun:${A.id}:${(0,AB.randomUUID)()}`,origin:"RERUN",snapshotName:A.snapshotName,snapshotDescription:A.snapshotDescription,snapshotScript:A.snapshotScript,snapshotTargetKind:A.snapshotTargetKind,snapshotRestartPolicy:A.snapshotRestartPolicy,snapshotRestartLimit:A.snapshotRestartLimit,snapshotNotificationsEnabled:A.snapshotNotificationsEnabled,snapshotJson:A.snapshotJson,agentId:A.agentId,worktreeId:A.worktreeId,agentName:A.agentName,agentHostname:A.agentHostname,worktreePath:A.worktreePath,worktreeBranch:A.worktreeBranch,predecessorRunId:A.id}})});return euB(i),euC.includes(A.status)?await this.dispatch(i.id):await this.terminateRun(A.id),this.getRun(i.id)}async archiveRuns(e,t){let A=await ag();for(let r of(await A.commandRun.updateMany({where:{id:{in:e},status:{in:[...euC]}},data:{archivedAt:t?new Date:null}}),e)){let e=await A.commandRun.findUnique({where:{id:r}});e&&euB(e)}return!0}async deleteRuns(e){let t=await ag();return(await t.commandRun.deleteMany({where:{id:{in:e},status:{in:[...euC]}}})).count}async appendOutput(e,t,A,r){if(!r.length||r.length>200)throw Error("Output batches must contain 1 to 200 chunks");let i=await ag(),n=await i.commandRunAttempt.findUnique({where:{id:A},include:{run:!0}});if(!n||n.agentJobId!==t||n.run.agentId!==e)throw Error("Command attempt not found for this agent job");let a=r.map(e=>{if(!Number.isInteger(e.sequence)||e.sequence<0)throw Error("Output sequence must be a non-negative integer");if(!["STDOUT","STDERR","SYSTEM"].includes(e.stream))throw Error("Output stream is invalid");let t=Buffer.from(e.dataBase64,"base64");if(t.length!==e.byteLength||t.length>262144)throw Error("Output byte length is invalid");let A=new Date(e.createdAt);if(Number.isNaN(A.valueOf()))throw Error("Output date is invalid");return{...e,createdAt:A}});await Promise.all(a.map(e=>i.commandRunOutputChunk.upsert({where:{attemptId_sequence:{attemptId:A,sequence:e.sequence}},create:{id:(0,AB.randomUUID)(),attemptId:A,...e},update:{}})));let s=await i.commandRunOutputChunk.findMany({where:{attemptId:A,sequence:{in:a.map(e=>e.sequence)}},orderBy:{sequence:"asc"}});for(let e of s)af.publish(aU(n.runId),{commandRunOutputAdded:{...e,attemptNumber:n.attempt}});return s}async finishCancelled(e){let t=await ag();euB(await t.commandRun.update({where:{id:e},data:{status:"CANCELLED",finishedAt:new Date,nextRestartAt:null}}));let A=await t.commandRun.findUnique({where:{predecessorRunId:e}});A&&await this.dispatch(A.id)}async notifyFinishedRun(e){if(!this.notifications||!e.snapshotNotificationsEnabled||"SUCCEEDED"!==e.status&&"FAILED"!==e.status)return;let t=[e.worktreeBranch??e.worktreePath??`${e.agentName} \xb7 ${e.agentHostname}`,"FAILED"===e.status?e.error:null].filter(e=>!!e).join(" · ").slice(0,1e3);try{let A=await ag(),r=await A.$transaction(A=>this.notifications.recordInTransaction(A,{dedupeKey:`command-run:${e.id}:${e.status}`,typeKey:"SUCCEEDED"===e.status?"COMMAND_RUN_SUCCEEDED":"COMMAND_RUN_FAILED",title:`${e.snapshotName} ${e.status.toLowerCase()}`,body:t,href:`/commands/runs/${e.id}`,resourceKind:"COMMAND_RUN",resourceId:e.id,worktreeId:e.worktreeId,highlightColor:e.worktree?.highlightColor??null}));this.notifications.created(r)}catch(e){console.error("Command run notification failed:",e)}}async handleAttemptCompletion(e){let t=await ag(),A=await t.commandRunAttempt.findUnique({where:{agentJobId:e.id},include:{run:!0,agentJob:!0}});if(!A||A.completionProcessedAt)return;let r=new Date,i=function(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t?t:{}}catch{return{}}}(e.resultJson);if(1!==(await t.commandRunAttempt.updateMany({where:{id:A.id,completionProcessedAt:null},data:{status:e.status,exitCode:i.exitCode??null,signal:i.signal??null,error:e.error,startedAt:A.agentJob?.startedAt??A.startedAt,finishedAt:A.agentJob?.finishedAt??r,completionProcessedAt:r}})).count)return;if(A.run.stopRequested||"CANCELLED"===e.status)return void await this.finishCancelled(A.runId);let n="SUCCEEDED"===e.status&&0===i.exitCode,a=euy(euf,A.run.snapshotRestartPolicy,"Restart policy"),s=A.agentJob?.startedAt??A.createdAt,o=function(e){if(e.manualStop||!("ALWAYS"===e.policy||"ON_FAILURE"===e.policy&&!e.clean))return{restart:!1,restartCount:e.restartCount,exhausted:!1};let t=(e.durationMs>=6e4?0:e.restartCount)+1,A=null!==e.limit&&t>e.limit;return{restart:!A,restartCount:t,exhausted:A}}({policy:a,limit:A.run.snapshotRestartLimit,restartCount:A.run.restartCount,durationMs:r.getTime()-s.getTime(),clean:n,manualStop:A.run.stopRequested});if(o.restart)return void euB(await t.commandRun.update({where:{id:A.runId},data:{status:"RESTARTING",restartCount:o.restartCount,nextRestartAt:new Date(r.getTime()+1e3),exitCode:i.exitCode??null,signal:i.signal??null,error:e.error}}));let l=await t.commandRun.update({where:{id:A.runId},data:{status:n?"SUCCEEDED":"FAILED",exitCode:i.exitCode??null,signal:i.signal??null,error:e.error??(o.exhausted?"Restart limit reached":n?null:"Command failed"),finishedAt:r,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});euB(l),await this.notifyFinishedRun(l)}async reconcile(e={}){let t=await ag(),A=new Date;for(let r of(await t.commandRun.findMany({where:{status:{in:[...eum]},...e.agentId?{agentId:e.agentId}:{}},include:{attempts:{include:{agentJob:!0},orderBy:{attempt:"desc"},take:1}}}))){let e=r.attempts[0];if(r.stopRequested){e?.agentJobId&&e.agentJob&&!["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(e.agentJob.status)?await this.agentControl.cancelJob(e.agentJobId):e&&e.agentJob?.status!=="CANCELLED"||await this.finishCancelled(r.id);continue}if("RESTARTING"===r.status&&(!r.nextRestartAt||r.nextRestartAt<=A)){await this.dispatch(r.id);continue}if(e?.agentJob&&["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(e.agentJob.status)){await this.handleAttemptCompletion(e.agentJob);continue}if(e?.agentJob&&["QUEUED","RUNNING"].includes(e.agentJob.status)){let i="RUNNING"===e.agentJob.status?"RUNNING":"QUEUED";e.status!==e.agentJob.status&&await t.commandRunAttempt.update({where:{id:e.id},data:{status:e.agentJob.status,startedAt:e.agentJob.startedAt}}),r.status!==i&&euB(await t.commandRun.update({where:{id:r.id},data:{status:i,startedAt:"RUNNING"===i?r.startedAt??e.agentJob.startedAt??A:r.startedAt}}));continue}"QUEUED"!==r.status||e&&(e.agentJobId||e.completionProcessedAt||e.finishedAt)||await this.dispatch(r.id)}}}function euD(e=new Date){let t=e.getFullYear(),A=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${A}-${r}`}class eub{ccusage;diskSpace;polling;usageTimer;usageRunning;constructor(e,t,A){this.ccusage=e,this.diskSpace=t,this.polling=A,this.usageRunning=!1,this.ccusage.registerCompletionObserver(e=>this.recordCompletedUsage(e))}async recordCompletedUsage(e){if(0===e.progress.successfulCount)return;let t=euD(),A=e.aggregate.days.find(e=>e.period===t);await this.persistUsage(t,A?.totalCost??0,new Date)}startRuntime(){this.polling.register({id:"sidebar-usage",kind:"SIDEBAR_USAGE",runtime:"SERVER",enabled:!0,cadenceSeconds:300,details:{}}),this.pruneInterruptedCollections().finally(()=>this.runUsagePoll())}stopRuntime(){this.usageTimer&&clearTimeout(this.usageTimer),this.usageTimer=void 0}scheduleUsagePoll(){this.usageTimer&&clearTimeout(this.usageTimer);let e=new Date(Date.now()+3e5);this.polling.schedule("sidebar-usage",e),this.usageTimer=setTimeout(()=>void this.runUsagePoll(),3e5),this.usageTimer.unref()}async runUsagePoll(){if(!this.usageRunning){this.usageRunning=!0,this.polling.schedule("sidebar-usage",null);try{await this.polling.run("sidebar-usage",()=>this.collectUsage(),e=>({period:e.period,successfulAgents:e.successfulAgents}))}catch(e){console.error("Sidebar usage refresh failed:",e instanceof Error?e.message:e)}finally{this.usageRunning=!1,this.scheduleUsagePoll()}}}async collectUsage(){let e=`sidebar-usage:${(0,AB.randomUUID)()}`;try{let t=await this.ccusage.collect(e);return{period:euD(),successfulAgents:t.progress.successfulCount}}finally{await this.removeCollection(e)}}async persistUsage(e,t,A){let r=await ag();await r.sidebarUsageSummary.upsert({where:{id:"default"},create:{id:"default",period:e,totalCost:t,collectedAt:A},update:{period:e,totalCost:t,collectedAt:A}}),this.publish()}async latestSuccessfulUsage(e){let t=await ag(),A=await t.agentJob.findMany({where:{kind:AS,status:"SUCCEEDED",resultJson:{not:null}},orderBy:[{finishedAt:"desc"},{createdAt:"desc"}],distinct:["agentId"],select:{resultJson:!0,finishedAt:!0,createdAt:!0,agent:{select:{id:!0,name:!0,hostname:!0}}}}),r=A.flatMap(e=>{try{let t=Ax(JSON.parse(e.resultJson));return[{agent:e.agent,report:t.report}]}catch{return[]}});if(!r.length)return null;let i=si(r).days.find(t=>t.period===e);return i?{totalCost:i.totalCost,collectedAt:A.reduce((e,t)=>{let A=t.finishedAt??t.createdAt;return A>e?A:e},new Date(0))}:null}async removeCollection(e){let t=await ag();await t.agentJob.deleteMany({where:{ccusageCollectionId:e}}),await t.ccusageCollection.deleteMany({where:{id:e}})}async pruneInterruptedCollections(){let e=await ag(),t=await e.ccusageCollection.findMany({where:{id:{startsWith:"sidebar-usage:"}},select:{id:!0}});if(!t.length)return;let A=t.map(({id:e})=>e);await e.agentJob.deleteMany({where:{ccusageCollectionId:{in:A}}}),await e.ccusageCollection.deleteMany({where:{id:{in:A}}})}async status(){let e=await ag(),t=euD(),[A,r,i,n,a,s]=await Promise.all([e.sidebarUsageSummary.findUnique({where:{id:"default"}}),e.agentRun.count({where:{kind:"PLAN",archivedAt:null,status:"IN_PROGRESS",attempts:{some:{status:{in:["STARTING","RUNNING"]},supersededAt:null}}}}),e.agentRun.count({where:{kind:"SESSION",archivedAt:null,status:"IN_PROGRESS",attempts:{some:{status:{in:["STARTING","RUNNING"]},supersededAt:null}}}}),e.build.count({where:{status:{in:["PREPARING","RUNNING"]}}}),e.workflowRun.count({where:{archivedAt:null,status:"RUNNING"}}),this.diskSpace.overview()]),o=A?.period===t?{totalCost:A.totalCost,collectedAt:A.collectedAt}:null;if(!o){let e=await this.latestSuccessfulUsage(t);e&&(o=e,this.persistUsage(t,e.totalCost,e.collectedAt)),this.runUsagePoll()}return{usageToday:{totalCost:o?.totalCost??null,collectedAt:o?.collectedAt.toISOString()??null},activity:{plans:r,sessions:i,builds:n,workflows:a},diskSpace:s}}subscribe(){return af.iterate(aJ)}publish(){af.publish(aJ,{sidebarStatusChanged:!0})}}function euv(e,t,A){let r=e.trim().toLowerCase(),i=t.trim().toLowerCase();if(!r||!i)throw Error("Pull request repository coordinates are required");if(!Number.isInteger(A)||A<1)throw Error("Pull request number must be a positive integer");return`${r}/${i}#${A}`}function euk(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function euR(e,t,A){return euk(e[t])[A]}function eux(e,t,A={}){if("string"!=typeof t&&"number"!=typeof t)return null;let r=String(t).trim();return r?{kind:e,resourceId:r,...A}:null}let euN=new Set(["JIRA_STATUS","JIRA_LABEL","JIRA_ASSIGNED_SELF","JIRA_SOURCE_NEW_TICKET","JIRA_MENTION","JIRA_SPRINT_STARTED"]),euT=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"]),euM=new Set(["BUILD_RESULT","BUILD_TEST_THRESHOLD","BUILD_COVERAGE_THRESHOLD","BUILD_HOOK_FAILED"]),euO=new Set(["WORKTREE_CREATED","WORKTREE_BEHIND","WORKTREE_CONFLICT","WORKTREE_MISSING","WORKTREE_DIVERGED","WORKTREE_DIRTY_DURATION","WORKTREE_NEW_COMMIT"]),euF=new Set(["GITHUB_PR_STATE","GITHUB_REVIEW_CHANGES_REQUESTED","GITHUB_REVIEW_COMMENT","GITHUB_PR_CLOSED","GITHUB_ISSUE_COMMAND","GITHUB_PR_LABEL"]),euU=new Set(["GITHUB_CHECK_FAILED","GITHUB_WORKFLOW_SUCCEEDED","GITHUB_ACTIONS_RESULT"]);function euH(e,t){let A="string"==typeof e?Number(e.trim()):e;return"number"!=typeof A||!Number.isFinite(A)||A<=0?null:Math.min(31536e3,Math.max(t,A))}function eu_(e,t=null){let A=euH(e.timeoutSeconds,10)??(null===t?null:euH(t,10));return null===A?null:new Date(Date.now()+1e3*A)}function euL(e,t){return euH(e.cadenceSeconds,1)??Math.max(1,t)}function euG(e,t=1){return new Date(Date.now()+1e3*euL(e,t))}let euP=(e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e},euJ=(e,t,A=2e4)=>{if("string"!=typeof e||!e.trim())throw Error(`${t} is required`);if(e.length>A)throw Error(`${t} is too long`);return e.trim()},euY=(e,t=2e4)=>null==e||""===e?null:euJ(e,"Value",t),euj=(e,t,A,r)=>euJ(e.node.config[t]??Cb(e.sessionData,A),r,500),euV=(e,t="operation")=>`${e.run.id}:${e.attempt.id}:${t}`,eu$=(e,t,A=!1)=>({output:t,sessionPatch:{run:{[e.node.id]:t}},links:"string"==typeof t.id?[{kind:"AGENT_RUN",resourceId:t.id,label:"string"==typeof t.kind?t.kind:"Agent run",url:`/${"PLAN"===t.kind?"plans":"sessions"}/${t.id}`,metadata:{runKind:t.kind}}]:void 0,wait:A&&"string"==typeof t.id?{kind:"AGENT_RUN",externalKey:t.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}:void 0}),euq=(e,t,A,r=[])=>({output:{jobId:t.id},sessionPatch:A,links:[...r,{kind:"AGENT_JOB",resourceId:t.id,label:"Agent job",url:`/jobs/${t.id}`}],wait:{kind:"AGENT_JOB",externalKey:t.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config,t.timeoutSeconds??3600)}}),euK=(e,t,A,r,i)=>({kind:e,resourceId:t,label:A,url:r,metadata:i}),euW=(e,t)=>euK("JIRA_TICKET",e,t??e);function euz(e,t,A){let r=eu2(e);return euK("PULL_REQUEST",euv(r.owner,r.name,eu9(e)),t??"Pull request",A)}function euZ(e){let t=eu1(e),A=eu5(e);return t&&A?euK("PULL_REQUEST",euv(t.owner,t.name,A),"Pull request"):null}function euX(e){let t=e.node.config.workflowRunId??Cb(e.sessionData,"pipeline.runId"),A=Cb(e.sessionData,"pipeline.url");return("string"==typeof t||"number"==typeof t)&&"string"==typeof A&&A?euK("GITHUB_WORKFLOW_RUN",String(t),"Workflow run",A):null}function eu0(e){let t=Cb(e.sessionData,"run.kind");if("PLAN"!==t&&"SESSION"!==t)return null;let A=function(e){try{return edr(e)}catch{return null}}(e);return A?euK("AGENT_RUN",A,t,`/${"PLAN"===t?"plans":"sessions"}/${A}`,{runKind:t}):null}function eu1(e){let t=e.node.config.owner,A=e.node.config.name;if("string"==typeof t&&t.trim()&&"string"==typeof A&&A.trim())return{owner:t.trim(),name:A.trim()};let r=e.sessionData.repo&&"object"==typeof e.sessionData.repo&&!Array.isArray(e.sessionData.repo)?e.sessionData.repo.displayOrigin:null,i="string"==typeof r?r.match(/(?:https?:\/\/)?github\.com[/:]([^/]+)\/([^/.]+)(?:\.git)?$/i):null,n=i?.[1]?.trim(),a=i?.[2]?.trim();return n&&a?{owner:n,name:a}:null}function eu2(e){let t=eu1(e);if(!t)throw Error("GitHub owner and repository are required");return t}function eu4(e){let t=euP(e,"Jira ticket"),A=t.issueType&&"object"==typeof t.issueType?t.issueType:{},r=t.status&&"object"==typeof t.status?t.status:{};return{...t,key:t.key,title:t.summary??t.title,type:A.name??t.type,status:r.name??t.status,statusCategory:r.category??t.statusCategory}}function eu3(e){let t=euP(e,"Pull request"),A=Array.isArray(t.reviewThreads)?t.reviewThreads:[];return{...t,unresolvedThreads:A.filter(e=>e&&"object"==typeof e&&!Array.isArray(e)&&!0!==e.isResolved)}}function eu8(e){return euJ(e.node.config.issueKey??Cb(e.sessionData,"ticket.key"),"Jira issue key",100)}function eu5(e){let t=e.node.config.number??Cb(e.sessionData,"pr.number"),A="string"==typeof t?Number(t):t;return"number"==typeof A&&Number.isInteger(A)&&A>=1?A:null}function eu9(e){let t=eu5(e);if(!t)throw Error("Pull request number is required");return t}function eu6(e){return euj(e,"worktreeId","worktree.id","Worktree ID")}function eu7(e){return euj(e,"codebaseId","codebase.id","Codebase ID")}function ede(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:euY(e.node.config.branchName??Cb(e.sessionData,"worktree.branch"),500),ticketKey:"TICKET"===t?euY(e.node.config.ticketKey??Cb(e.sessionData,"ticket.key"),100):null,baseBranch:euJ(e.node.config.baseBranch??Cb(e.sessionData,"worktree.baseBranch")??Cb(e.sessionData,"repo.defaultBranch"),"Base branch",500)}}function edt(e){return euj(e,"buildId","build.id","Build ID")}function edA(e){return euJ(e.node.config.agentId??Cb(e.sessionData,"agent.id")??Cb(e.sessionData,"codebase.agentId"),"Agent ID",500)}function edr(e){let t=e.node.config.runId;if("string"==typeof t&&t)return t;let A=e.node.config.sourceStepId;return"string"==typeof A?euJ(Cb(e.sessionData,`run.${A}.id`),"Agent run ID",500):euJ(Cb(e.sessionData,"run.id"),"Agent run ID",500)}function edi(e,t){let A,r;return{kind:t,worktreeId:(A=e.node.config.worktreeId,r=Cb(e.sessionData,"worktree.id"),"string"==typeof A&&A===e.run.workflowId&&"string"==typeof r&&r!==A?euJ(r,"Worktree ID",500):eu6(e)),jiraIssueKey:euY(e.node.config.jiraIssueKey??Cb(e.sessionData,"ticket.key"),100),provider:euJ(e.node.config.provider??"CODEX","Provider",50),model:euJ(e.node.config.model,"Model",200),effort:euY(e.node.config.effort,50),webSearchEnabled:!0===e.node.config.webSearchEnabled,prompt:euJ(e.node.config.prompt,"Prompt",2e5),attachmentIds:Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[]}}let edn="workflow:trigger-events";class eda{async record(e){let t=await ag(),A=await this.recordInTransaction(t,e);return this.created(A.id),A}async recordInTransaction(e,t){let A=await e.workflowTriggerEvent.findUnique({where:{dedupeKey:t.dedupeKey}});return A||e.workflowTriggerEvent.create({data:{id:(0,AB.randomUUID)(),kind:t.kind,subjectKey:t.subjectKey,dedupeKey:t.dedupeKey,payloadJson:JSON.stringify(t.payload)}})}created(e){af.publish(edn,{workflowTriggerEventCreated:{id:e}})}subscribe(){return af.iterate(edn)}}function eds(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function edo(e,t){return{id:e.id,name:e.name,url:e.displayOrigin,canonicalOrigin:e.canonicalOrigin,displayOrigin:e.displayOrigin,defaultBranch:t??null}}function edl(e){return{id:e.id,name:e.name,hostname:e.hostname,connected:null===e.disconnectedAt,diskFreeBytes:e.diskFreeBytes,memoryFreeBytes:e.memoryFreeBytes}}class edc{events;agentControl;worktrees;diskSpace;started;running;diskAuditTimer;diskStateFingerprints;constructor(e,t,A,r){this.events=e,this.agentControl=t,this.worktrees=A,this.diskSpace=r,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.diskSpace&&(this.consumeDiskSpace(),this.auditDiskSpace(!0)))}stop(){this.running=!1,this.diskAuditTimer&&clearTimeout(this.diskAuditTimer),this.diskAuditTimer=void 0}async record(e,t,A,r,i={}){await this.events.record({kind:e,subjectKey:t,dedupeKey:A,payload:{...r,...i,sessionData:r}})}async worktreeSessionData(e,t=!1){return e&&this.worktrees?this.worktrees.workflowSessionDataForWorktree(e,{includeMissing:t}):{}}async observeAgentJob(e){if("ccusage.report"===e.kind&&"SUCCEEDED"===e.status&&e.resultJson){let t=eds(e.resultJson),A=t.report&&"object"==typeof t.report&&!Array.isArray(t.report)?t.report:{},r=A.totals&&"object"==typeof A.totals&&!Array.isArray(A.totals)?A.totals:{};await this.record("CCUSAGE_THRESHOLD",e.agentId,`ccusage:${e.ccusageCollectionId??e.id}:${e.agentId}`,{run:{usage:r},agent:{id:e.agentId}},{cursorValue:e.ccusageCollectionId??e.id});return}if(!new Set(["FAILED","TIMED_OUT"]).has(e.status))return;let t=await this.worktreeSessionData(e.worktreeId,!0);await this.record("AGENT_JOB_FAILED",e.agentId,`agent-job:${e.id}:${e.status}`,Ck(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=af.iterate(aT);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 observeRun(e){let t=await ag(),A=await t.agentRun.findUnique({where:{id:e},include:{worktree:{include:{codebase:{include:{repository:!0}}}},agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},questionBatches:{orderBy:{createdAt:"desc"},take:1,include:{questions:{include:{options:!0}}}},events:{orderBy:{sequence:"desc"},take:1},toolCalls:{orderBy:{sequence:"desc"},take:1}}});if(!A)return;let r=await t.workflowRunResourceLink.findFirst({where:{kind:"AGENT_RUN",resourceId:A.id},include:{run:!0},orderBy:{createdAt:"desc"}}),i=Ck(await this.worktreeSessionData(A.worktree?.id??null),{run:{id:A.id,kind:A.kind,status:A.status,phase:A.phase,origin:A.origin,provider:A.provider,model:A.model,finalOutput:A.finalOutput,error:A.error,sourcePlanId:A.sourcePlanId,parentRunId:A.parentRunId,followUpMode:A.followUpMode,usage:{inputTokens:A.inputTokens,outputTokens:A.outputTokens,reasoningTokens:A.reasoningTokens,cacheReadTokens:A.cacheReadTokens,cacheWriteTokens:A.cacheWriteTokens,toolCallCount:A.toolCallCount,estimatedCost:A.estimatedCost}},...A.worktree?{worktree:{id:A.worktree.id,path:A.worktree.folder,branch:A.worktree.branch,headSha:A.worktree.headSha},codebase:{id:A.worktree.codebase.id,folder:A.worktree.codebase.folder,agentId:A.worktree.codebase.agentId},repo:edo(A.worktree.codebase.repository,A.worktree.codebase.defaultBranch)}:{},...A.agent?{agent:edl(A.agent)}:{},...A.jiraIssueKey?{ticket:{key:A.jiraIssueKey}}:{}}),n=r?{workflowId:r.run.workflowId,runId:r.runId,attemptId:r.attemptId}:null,a={cursorValue:`${A.status}:${A.phase}`,workflowCorrelation:n};A.startedAt&&await this.record("RUN_STARTED",A.id,`run-started:${A.id}:${A.startedAt.toISOString()}`,i,a);let s="COMPLETED"===A.status?"RUN_COMPLETED":"FAILED"===A.status?"RUN_FAILED":"CANCELLED"===A.status?"RUN_CANCELLED":"PAUSED"===A.status?"RUN_PAUSED":null;s&&await this.record(s,A.id,`run-status:${A.id}:${A.status}:${A.finishedAt?.toISOString()??A.updatedAt.toISOString()}`,i,a),"RUNNING"===A.phase&&A.startedAt&&A.updatedAt>A.startedAt&&await this.record("RUN_CONTINUED",A.id,`run-continued:${A.id}:${A.updatedAt.toISOString()}`,i,a),A.sourcePlanId&&await this.record("RUN_PLAN_PLAYED",A.id,`run-plan-played:${A.id}:${A.sourcePlanId}`,i,a),A.parentRunId&&"PLAN_PLAY"!==A.followUpMode&&await this.record("RUN_FOLLOW_UP",A.id,`run-follow-up:${A.id}:${A.parentRunId}`,i,a),"IMPORTED"===A.origin&&await this.record("RUN_IMPORTED",A.id,`run-imported:${A.id}:${A.updatedAt.toISOString()}`,i,a),await this.record("RUN_USAGE_THRESHOLD",A.id,`run-usage:${A.id}:${A.updatedAt.toISOString()}`,i,{...a,cursorValue:A.updatedAt.toISOString()});let o=A.questionBatches[0];if(o){let e={...i,run:{...i.run,questions:o.questions}};"PENDING"===o.status?await this.record("RUN_QUESTION_NEEDED",A.id,`run-question:${o.id}:pending`,e,a):"ANSWERED"===o.status&&await this.record("RUN_QUESTION_ANSWERED",A.id,`run-question:${o.id}:answered`,e,a)}let l=A.events[0];l&&await this.record("RUN_EVENT_MATCH",A.id,`run-event:${l.id}`,i,{...a,event:l});let c=A.toolCalls[0];c&&await this.record("RUN_EVENT_MATCH",A.id,`run-tool:${c.id}:${c.status}`,i,{...a,toolCall:c})}async consumeBuilds(){let e=af.iterate(av);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 ag(),A=await t.build.findUnique({where:{id:e},include:{codebase:{include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}}},worktree:!0,reports:!0,scriptExecutions:!0}});if(!A)return;let r=Ck(await this.worktreeSessionData(A.worktree?.id??null),{build:{id:A.id,status:A.status,action:A.action,error:A.error},...A.codebase?{codebase:{id:A.codebase.id,folder:A.codebase.folder,agentId:A.codebase.agentId},repo:edo(A.codebase.repository,A.codebase.defaultBranch),agent:edl(A.codebase.agent)}:{},...A.worktree?{worktree:{id:A.worktree.id,path:A.worktree.folder,branch:A.worktree.branch,headSha:A.worktree.headSha}}:{}});for(let e of(new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(A.status)&&await this.record("BUILD_RESULT",A.id,`build-result:${A.id}:${A.status}`,r,{cursorValue:A.status}),A.reports.filter(({status:e})=>"READY"===e))){let t=eds(e.summaryJson),i={...r,build:{...r.build,..."TEST_RESULTS"===e.kind?{testSummary:t}:{coverageSummary:t}}};await this.record("TEST_RESULTS"===e.kind?"BUILD_TEST_THRESHOLD":"BUILD_COVERAGE_THRESHOLD",A.id,`build-report:${e.id}:${e.updatedAt.toISOString()}`,i,{cursorValue:e.updatedAt.toISOString()})}for(let e of A.scriptExecutions.filter(({causedBuildFailure:e})=>e))await this.record("BUILD_HOOK_FAILED",A.id,`build-hook:${e.id}:failed`,r,{cursorValue:e.id,script:{id:e.id,name:e.nameSnapshot,phase:e.phase}})}async consumeWorktrees(){let e=af.iterate(aD);try{for await(let t of e){if(!this.running)break;let e=t.worktreeOverviewChanged,A=await ag();for(let t of(await A.worktree.findMany({where:e.worktreeId?{id:e.worktreeId}:e.codebaseId?{codebaseId:e.codebaseId}:{},include:{codebase:{include:{repository:!0}}},take:e.worktreeId?1:500})))await this.observeWorktree(t).catch(e=>console.error("Could not record workflow worktree trigger:",e))}}finally{await e.return?.()}}async observeWorktree(e){let t=e.lastCheckedAt??e.updatedAt,A=e.hasStagedChanges||e.hasUnstagedChanges,r=Ck(await this.worktreeSessionData(e.id,!0),{repo:edo(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,pushStatus:e.pushStatus,baseBehind:e.baseBehind,dirty:A,missingAt:e.missingAt?.toISOString()??null,dirtySince:A?e.updatedAt.toISOString():null}}),i={cursorValue:t.toISOString()};(e.baseBehind??0)>0&&await this.record("WORKTREE_BEHIND",e.id,`worktree-behind:${e.id}:${t.toISOString()}`,r,i),await this.record("WORKTREE_DIRTY_DURATION",e.id,`worktree-dirty:${e.id}:${t.toISOString()}`,r,i),await this.record("WORKTREE_MISSING",e.id,`worktree-missing:${e.id}:${t.toISOString()}`,r,{cursorValue:!!e.missingAt}),await this.record("WORKTREE_DIVERGED",e.id,`worktree-diverged:${e.id}:${t.toISOString()}`,r,{cursorValue:"DIVERGED"===e.pushStatus}),e.headSha&&await this.record("WORKTREE_NEW_COMMIT",e.id,`worktree-commit:${e.id}:${e.headSha}`,r,{cursorValue:e.headSha})}async consumeCodebases(){let e=af.iterate(aS);try{for await(let t of e){if(!this.running)break;let e=await ag(),A=t.codebaseOverviewChanged;for(let t of(await e.codebase.findMany({where:A.codebaseId?{id:A.codebaseId}:A.repositoryId?{repositoryId:A.repositoryId}:{},include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}},take:A.codebaseId?1:500}))){let e={repo:edo(t.repository,t.defaultBranch),agent:edl(t.agent),codebase:{id:t.id,folder:t.folder,agentId:t.agentId,branch:t.defaultBranch,remoteBranches:JSON.parse(t.remoteBranchesJson)}},A=e.codebase.remoteBranches;if(Array.isArray(A))for(let r of A.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 A=e.agent.id;t.report&&await this.record("AGENT_DISK_REPORT",A,`agent-disk-report:${A}:${e.disk.lastReportedAt??t.changeId}`,e,{cursorValue:e.disk.lastReportedAt}),t.threshold&&await this.record("AGENT_DISK_THRESHOLD",A,`agent-disk-threshold:${A}:${t.changeId}`,e);let r=eo9(e);if(await this.record("AGENT_DISK_STATE_CHANGED",A,`agent-disk-state:${A}:${t.changeId}`,e,{cursorValue:r}),this.diskStateFingerprints.set(A,JSON.stringify(r)),t.cleanup){let r={...e,cleanup:t.cleanup};await this.record("AGENT_DISK_CLEANUP_RESULT",A,`agent-disk-cleanup:${t.cleanup.jobId}:${t.cleanup.status}`,r,{cleanup:t.cleanup})}}async observeDiskChange(e){if(!this.diskSpace)return;let{id:t,reason:A,cleanup:r}=e.diskSpaceChange;if("settings"===e.diskSpaceChanged){let e=await this.diskSpace.overview();for(let r of e.agents)await this.emitDiskSnapshot(eo5(e.settings,r,A),{changeId:t,report:!1,threshold:!0});return}let i=await this.diskSpace.snapshot(e.diskSpaceChanged,A);await this.emitDiskSnapshot(i,{changeId:t,report:"REPORT_RECEIVED"===A,threshold:!0,cleanup:r})}async consumeDiskSpace(){if(!this.diskSpace)return;let e=this.diskSpace.subscribe();try{for await(let t of e){if(!this.running)break;await this.observeDiskChange(t).catch(e=>console.error("Could not record disk-space workflow trigger:",e))}}finally{await e.return?.()}}async auditDiskSpace(e){if(this.diskSpace&&this.running)try{let t=await this.diskSpace.overview();for(let A of t.agents){let r=eo5(t.settings,A,e?"STARTUP_RECONCILE":"STATE_AUDIT"),i=JSON.stringify(eo9(r));(e||this.diskStateFingerprints.get(A.agent.id)!==i)&&await this.emitDiskSnapshot(r,{changeId:(0,AB.randomUUID)(),report:!1,threshold:e})}}catch(e){console.error("Could not audit disk-space workflow state:",e)}finally{this.running&&(this.diskAuditTimer=setTimeout(()=>void this.auditDiskSpace(!1),6e4),this.diskAuditTimer.unref?.())}}async consumeAgents(){let e=af.iterate(am);try{for await(let t of e){if(!this.running)break;let e=await ag(),A=await e.agent.findUnique({where:{id:t.agentChanged.id}});if(!A)continue;let r=null===A.disconnectedAt,i={codebase:{agentId:A.id},agent:{id:A.id,name:A.name,connected:r,diskFreeBytes:A.diskFreeBytes,memoryFreeBytes:A.memoryFreeBytes}};await this.record("AGENT_CONNECTION",A.id,`agent-connection:${A.id}:${A.updatedAt.toISOString()}`,i,{cursorValue:r})}}finally{await e.return?.()}}}async function edu(e,t){let A=e.trim();if(!A||A.length>5e4)throw Error(`Workflow script must contain 1–${5e4.toLocaleString()} characters`);let r=await bl(),i=Date.now()+250;try{return r.evalCode(`"use strict"; const session = Object.freeze(${JSON.stringify(t)}); (${A})(session);`,{memoryLimitBytes:8388608,maxStackSizeBytes:524288,shouldInterrupt:bs(i)})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Workflow script failed: ${"interrupted"===e?"execution timed out after 250ms":e}`)}}class edd{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 edh="workflows:changed",edp=e=>`workflow-run:${e}`,edg=e=>`workflow-run:${e}:events`,edE=e=>`workflow-run:${e}:questions`,edI=["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED"],edf=new Set(["SUCCEEDED","FAILED","CANCELLED"]),edm=new Set(["SUCCEEDED","FAILED","CANCELLED","SKIPPED","SUPERSEDED"]),edC=new Set(["RUNNING","WAITING"]),edy=e=>JSON.parse(e);function edQ(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()<=aZ(e)}:{},...void 0!==e.diskFreeBytes?{diskFreeBytes:e.diskFreeBytes}:{},...void 0!==e.memoryFreeBytes?{memoryFreeBytes:e.memoryFreeBytes}:{}}}}function edw(e){return Ck(edQ(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 edB(e,t,A){let r=e.trim();if(!r)throw Error(`${t} is required`);if(r.length>A)throw Error(`${t} is too long`);return r}function edS(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 edD(e,t){let A=e??("CONCURRENT"===t?4:1);if(!Number.isInteger(A)||A<1||A>32)throw Error("Maximum concurrent runs must be between 1 and 32");return A}function edb(e){return Array.isArray(e)?`[${e.map(edb).join(",")}]`:e&&"object"==typeof e?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${edb(t)}`).join(",")}}`:JSON.stringify(e)}function edv(e,t,A){if(Buffer.byteLength(e,"utf8")>A)throw Error(`${t} is too large`)}function edk(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e}function edR(e){af.publish(edh,{workflowChanged:{id:e}})}function edx(e){af.publish(edp(e),{workflowRunChanged:{id:e}}),af.publish(edh,{workflowChanged:{id:"runs",runId:e}}),af.publish(aJ,{sidebarStatusChanged:!0})}function edN(e){return[...yE.get(e.kind).requiredPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.requiredPaths,...ye(e.kind,"step",e.config)]}function edT(e){return[...yE.get(e.kind).providedPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.providedPaths,`steps.${e.id}.*`]}async function edM(e){return(await e.workflowRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:2},update:{nextValue:{increment:1}}})).nextValue-1}class edO{events;executor;checkpointRestorer;credentials;agentControl;notifications;runsService;worktrees;commandsService;githubService;jiraService;runtimeTimer;ticking;workerId;activeExecutions;claimedSecretJobs;waitPollers;constructor(e,t=new edd,A,r,i,n,a,s,o,l,c){this.events=e,this.executor=t,this.checkpointRestorer=A,this.credentials=r,this.agentControl=i,this.notifications=n,this.runsService=a,this.worktrees=s,this.commandsService=o,this.githubService=l,this.jiraService=c,this.ticking=!1,this.workerId=(0,AB.randomUUID)(),this.activeExecutions=new Map,this.claimedSecretJobs=new Set,this.waitPollers=new Map,this.agentControl&&(this.executor.register("TERMINAL_RUN",e=>this.startTerminalJob(e)),this.executor.register("WORKTREE_SNAPSHOT",e=>this.startCheckpointJob(e)),this.agentControl.registerCompletionHandler(iZ,e=>this.workflowAgentJobCompleted(e)),this.agentControl.registerCompletionObserver(e=>this.genericAgentJobCompleted(e)),this.agentControl.registerCompletionHandler(iX,e=>this.workflowAgentJobCompleted(e)))}async controlLinkedAgentRuns(e,t){if(!this.runsService)return;let A=await ag(),r=await A.workflowRunResourceLink.findMany({where:{runId:e,kind:"AGENT_RUN",attempt:{status:{in:["RUNNING","WAITING"]}}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(r.map(async({resourceId:e})=>{let A=await this.runsService.get(e);!A||"MANAGED"!==A.origin||"PAUSE"===t&&"IN_PROGRESS"!==A.status||"CONTINUE"===t&&"PAUSED"!==A.status||"CANCEL"===t&&new Set(["COMPLETED","FAILED","CANCELLED"]).has(A.status)||await this.runsService.lifecycle(e,t)}))}async cancelWaitingCommandRuns(e){if(!this.commandsService)return;let t=await ag(),A=await t.workflowRunResourceLink.findMany({where:{runId:e,kind:"COMMAND_RUN",attempt:{status:"WAITING"}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(A.map(({resourceId:e})=>this.commandsService.terminateRun(e)))}async runWorktree(e){let t=Cb(edy(e),"worktree.id");return"string"==typeof t&&t?(await ag()).worktree.findUnique({where:{id:t},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):null}async notifyRun(e,t,A,r,i){if(!this.notifications)return;let n=await ag(),a=await n.workflowRun.findUnique({where:{id:e},select:{sessionDataJson:!0}}),s=a?await this.runWorktree(a.sessionDataJson):null,o=await n.$transaction(n=>this.notifications.recordInTransaction(n,{dedupeKey:`workflow:${e}:${i}`,typeKey:t,title:A,body:r,href:`/workflows/runs/${e}`,resourceKind:"WORKFLOW_RUN",resourceId:e,worktreeId:s?.id??null,highlightColor:s?.highlightColor??null}));this.notifications.created(o)}startRuntime(){this.runtimeTimer||(this.runtimeTimer=setInterval(()=>{this.tick().catch(e=>{console.error("Workflow runtime tick failed:",e)})},1e3),this.runtimeTimer.unref?.(),this.tick().catch(e=>{console.error("Workflow runtime startup failed:",e)}))}stopRuntime(){for(let e of(this.runtimeTimer&&clearInterval(this.runtimeTimer),this.runtimeTimer=void 0,this.activeExecutions.values()))e.abort();this.activeExecutions.clear()}catalog(){return{schemaVersion:1,globalConcurrency:4,steps:yg,triggers:yD}}registerWaitPoller(e,t){this.waitPollers.set(e,t)}async list(e={}){let t=await ag(),A=Math.min(Math.max(e.first??100,1),200),r=e.archive?.toUpperCase()??"ACTIVE",i=e.search?.trim(),n=await t.workflow.findMany({where:{..."ALL"===r?{}:"ARCHIVED"===r?{archivedAt:{not:null}}:{archivedAt:null},...null===e.enabled||void 0===e.enabled?{}:{enabled:e.enabled},...i?{OR:[{name:{contains:i}},{description:{contains:i}}]}:{}},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}},_count:{select:{versions:!0,runs:!0}}},orderBy:[{updatedAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:n.slice(0,A),nextCursor:n.length>A?n[A-1].id:null,totalCount:await t.workflow.count()}}async get(e){return(await ag()).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 ag()).workflowVersion.findUnique({where:{id:e},include:{triggers:!0}})}async create(e){let t=edB(e.name,"Workflow name",200),A=yO(e.definition??function(e="Untitled workflow"){return yM.parse({format:ys,schemaVersion:1,name:e,description:"",triggers:[{id:"manual",kind:"MANUAL",position:{x:0,y:100},config:{}}],nodes:[],edges:[],editor:{}})}(t)),r=JSON.stringify({...A,name:t,description:e.description?.trim()??A.description});edv(r,"Workflow definition",2097152);let i=edS(e.overlapPolicy),n=await ag(),a=await n.workflow.create({data:{id:(0,AB.randomUUID)(),name:t,description:e.description?.trim()??A.description,draftDefinitionJson:r,draftSchemaVersion:1,overlapPolicy:i,maxConcurrentRuns:edD(e.maxConcurrentRuns,i)}});return edR(a.id),this.get(a.id)}async saveDraft(e){let t=yO(e.definition),A=JSON.stringify(t);edv(A,"Workflow definition",2097152);let r=await this.get(e.id);if(!r)throw Error("Workflow not found");let i=edS(e.overlapPolicy??r.overlapPolicy),n=await ag();return await n.workflow.update({where:{id:e.id},data:{name:t.name,description:t.description,draftDefinitionJson:A,draftSchemaVersion:t.schemaVersion,overlapPolicy:i,maxConcurrentRuns:edD(e.maxConcurrentRuns??r.maxConcurrentRuns,i)}}),edR(e.id),this.get(e.id)}async validateDraft(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let A=function(e){let t=yM.safeParse(e);if(!t.success)return{definition:null,diagnostics:t.error.issues.map(e=>({severity:"ERROR",code:"SCHEMA_INVALID",message:e.message,path:e.path.join(".")}))};let A=t.data,r=[],i=new Set;for(let e of[...A.triggers,...A.nodes])i.has(e.id)&&r.push({severity:"ERROR",code:"DUPLICATE_NODE_ID",message:`Duplicate graph id ${e.id}`,nodeId:e.id}),i.add(e.id);let n=new Set;for(let e of A.edges)n.has(e.id)&&r.push({severity:"ERROR",code:"DUPLICATE_EDGE_ID",message:`Duplicate edge id ${e.id}`}),n.add(e.id),i.has(e.source)&&i.has(e.target)||r.push({severity:"ERROR",code:"EDGE_ENDPOINT_MISSING",message:`Edge ${e.id} references a missing endpoint`}),A.triggers.some(({id:t})=>t===e.target)&&r.push({severity:"ERROR",code:"TRIGGER_HAS_INPUT",message:"Triggers cannot have incoming edges",triggerId:e.target});A.triggers.length||r.push({severity:"ERROR",code:"TRIGGER_REQUIRED",message:"At least one trigger is required"}),A.nodes.length||r.push({severity:"ERROR",code:"STEP_REQUIRED",message:"At least one step is required"});let a=new Set(A.nodes.map(({id:e})=>e)),s=new Map,o=new Map;for(let e of A.edges)s.set(e.source,[...s.get(e.source)??[],e.target]),o.set(e.target,[...o.get(e.target)??[],e.source]);for(let e of A.nodes)(o.get(e.id)??[]).filter(e=>a.has(e)).length>1&&"CONTROL_JOIN"!==e.kind&&r.push({severity:"ERROR",code:"EXPLICIT_JOIN_REQUIRED",message:"Nodes with multiple incoming branches must be explicit join nodes",nodeId:e.id});let l=new Map(A.nodes.map(e=>[e.id,0]));for(let e of A.edges)a.has(e.source)&&a.has(e.target)&&l.set(e.target,(l.get(e.target)??0)+1);let c=[...l].filter(([,e])=>0===e).map(([e])=>e),u=[];for(;c.length;){let e=c.shift();for(let t of(u.push(e),s.get(e)??[])){if(!a.has(t))continue;let e=(l.get(t)??0)-1;l.set(t,e),0===e&&c.push(t)}}u.length!==A.nodes.length&&r.push({severity:"ERROR",code:"DAG_CYCLE",message:"Workflow graphs cannot contain free-form cycles"});let d=new Map,h=e=>{let t=new Set,A=[...s.get(e)??[]];for(;A.length;){let e=A.shift();t.has(e)||(t.add(e),A.push(...s.get(e)??[]))}return t};for(let e of[...A.triggers,...A.nodes])d.set(e.id,h(e.id));for(let e of A.nodes){for(let t of(A.triggers.some(t=>d.get(t.id)?.has(e.id))||r.push({severity:"ERROR",code:"UNREACHABLE_STEP",message:"Step is not reachable from a trigger",nodeId:e.id}),yP(e.config)&&r.push({severity:"ERROR",code:"SECRET_LITERAL",message:"Store secrets as credential references, not workflow literals",nodeId:e.id}),yJ(e.config)&&r.push({severity:"ERROR",code:"UNRESOLVED_REFERENCE",message:"Resolve imported references before publishing",nodeId:e.id}),new Set(CN(e.config))))r.push({severity:"ERROR",code:"SESSION_BINDING_INVALID",message:t,nodeId:e.id});"CONTROL_SUBWORKFLOW"===e.kind&&"string"!=typeof e.config.versionId&&r.push({severity:"ERROR",code:"SUBWORKFLOW_VERSION_REQUIRED",message:"Sub-workflows must pin a published version",nodeId:e.id})}for(let e of A.triggers){for(let t of((s.get(e.id)??[]).length||r.push({severity:"ERROR",code:"TRIGGER_DISCONNECTED",message:"Trigger is not connected to a step",triggerId:e.id}),yP(e.config)&&r.push({severity:"ERROR",code:"SECRET_LITERAL",message:"Store secrets as credential references, not trigger literals",triggerId:e.id}),yJ(e.config)&&r.push({severity:"ERROR",code:"UNRESOLVED_REFERENCE",message:"Resolve imported references before publishing",triggerId:e.id}),new Set(CN(e.config))))r.push({severity:"ERROR",code:"SESSION_BINDING_INVALID",message:t,triggerId:e.id});if(Cm(e.kind)&&!yc(e.config)&&r.push({severity:"ERROR",code:"RESOURCE_KIND_REQUIRED",message:"Resource triggers must target a single resource kind; add one trigger per kind",triggerId:e.id}),Cf(e.kind)){let t=yo(e.config),i=Array.isArray(e.config.choices)?e.config.choices.length:0;t.length&&t.length===i||r.push({severity:"ERROR",code:"TRIGGER_CHOICES_REQUIRED",message:"Choice triggers need at least one option, each with a unique key",triggerId:e.id});let n=new Set(t.map(({key:e})=>e));for(let t of A.edges)t.source===e.id&&(n.has(t.sourceHandle)||r.push({severity:"ERROR",code:"TRIGGER_CHOICE_HANDLE_UNKNOWN",message:`Connection ${t.id} leaves an option that no longer exists`,triggerId:e.id}))}if("GITHUB_ISSUE_COMMAND"===e.kind){let t=e.config.allowedLogins,A=e.config.commandPattern;(!Array.isArray(t)||!t.length||t.some(e=>"string"!=typeof e||!e.trim()))&&r.push({severity:"ERROR",code:"ISSUE_COMMAND_ALLOWLIST_REQUIRED",message:"Issue command triggers require an explicit GitHub login allow-list",triggerId:e.id}),"string"==typeof A&&A.startsWith("^")&&A.endsWith("$")||r.push({severity:"ERROR",code:"ISSUE_COMMAND_PATTERN_ANCHORED",message:"Issue command patterns must be anchored with ^ and $",triggerId:e.id})}}for(let e of yG(A).requirementViolations)r.push({severity:"ERROR",code:"REQUIREMENT_UNSATISFIED",message:`${e.path} is not guaranteed on the path from ${e.triggerName}`,nodeId:e.nodeId,triggerId:e.triggerId,path:e.path});for(let e=0;e<A.nodes.length;e+=1){let t=A.nodes[e],i=[...yF(t,yE.get(t.kind).providedPaths),...t.providedPaths].filter(e=>!e.startsWith(`steps.${t.id}.`));for(let n=e+1;n<A.nodes.length;n+=1){let e=A.nodes[n];if(d.get(t.id)?.has(e.id)||d.get(e.id)?.has(t.id))continue;let a=[...yF(e,yE.get(e.kind).providedPaths),...e.providedPaths].filter(t=>!t.startsWith(`steps.${e.id}.`));i.some(e=>a.some(t=>yU(e,t)||yU(t,e)))&&r.push({severity:"ERROR",code:"PARALLEL_WRITE_CONFLICT",message:`Parallel steps ${t.name??t.id} and ${e.name??e.id} can write the same session-data path`,nodeId:e.id})}}return{definition:A,diagnostics:r}}(edy(t.draftDefinitionJson)),r=[...A.diagnostics];return A.definition&&r.push(...await this.validateSubworkflows(t.id,A.definition)),{valid:!r.some(({severity:e})=>"ERROR"===e),diagnostics:r}}async validateSubworkflows(e,t){let A=t.nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(e=>({node:e,versionId:e.config.versionId})).filter(e=>"string"==typeof e.versionId);if(!A.length)return[];let r=await ag(),i=new Map,n=new Map,a=new Set,s=new Set,o=A.map(({versionId:e})=>e);for(;o.length;){let e=[...new Set(o)].filter(e=>!s.has(e));if(!e.length)break;for(let t of(e.forEach(e=>s.add(e)),o=[],await r.workflowVersion.findMany({where:{id:{in:e}}}))){i.set(t.id,t);try{let e=yO(edy(t.definitionJson)).nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(({config:e})=>e.versionId).filter(e=>"string"==typeof e);n.set(t.id,e),o.push(...e)}catch{a.add(t.id)}}}let l=(e,t)=>{let A=i.get(e);if(!A)return"MISSING";if(a.has(e))return"INVALID";if(t.has(A.workflowId))return"RECURSIVE";let r=new Set(t).add(A.workflowId);for(let t of n.get(e)??[]){let e=l(t,r);if(e)return e}return null},c=[];for(let{node:t,versionId:r}of A){let A=l(r,new Set([e]));"MISSING"===A?c.push({severity:"ERROR",code:"SUBWORKFLOW_NOT_FOUND",message:"Pinned sub-workflow chain contains a missing version",nodeId:t.id}):"INVALID"===A?c.push({severity:"ERROR",code:"SUBWORKFLOW_INVALID",message:"Pinned sub-workflow chain contains an invalid definition",nodeId:t.id}):"RECURSIVE"===A&&c.push({severity:"ERROR",code:"SUBWORKFLOW_RECURSION",message:"Pinned sub-workflow calls cannot form a recursive chain",nodeId:t.id})}return c}async publish(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let A=yO(edy(t.draftDefinitionJson)),r=await this.validateDraft(e);if(!r.valid)throw Error(`Workflow cannot be published: ${r.diagnostics.filter(({severity:e})=>"ERROR"===e).map(({message:e})=>e).slice(0,5).join("; ")}`);let i=await ag(),n=await i.$transaction(async t=>{let r=await t.workflowVersion.findFirst({where:{workflowId:e},orderBy:{version:"desc"}}),i=(0,AB.randomUUID)(),n=await t.workflowVersion.create({data:{id:i,workflowId:e,version:(r?.version??0)+1,name:A.name,description:A.description,schemaVersion:A.schemaVersion,definitionJson:JSON.stringify(A),contentHash:(0,AB.createHash)("sha256").update(edb(A)).digest("hex"),triggers:{create:A.triggers.map(e=>({id:(0,AB.randomUUID)(),nodeId:e.id,kind:e.kind,configJson:JSON.stringify(e.config)}))}},include:{triggers:!0}});return await t.workflow.update({where:{id:e},data:{activeVersionId:i}}),n});return edR(e),n}async setEnabled(e,t){let A=await ag(),r=await A.workflow.findUnique({where:{id:e}});if(!r)throw Error("Workflow not found");if(t&&!r.activeVersionId)throw Error("Publish the workflow before enabling it");return await A.workflow.update({where:{id:e},data:{enabled:t}}),edR(e),this.get(e)}async setQuickAction(e){let t=await ag(),A=[...new Set(e.repositoryIds.map(e=>e.trim()).filter(Boolean))],[r,i]=await Promise.all([t.workflow.findUnique({where:{id:e.id},select:{id:!0}}),t.codebaseRepository.count({where:{id:{in:A}}})]);if(!r)throw Error("Workflow not found");if(i!==A.length)throw Error("One or more repositories were not found");let n=e.quickActionIconKey.trim();if(!Cg.includes(e.kind))throw Error("Quick action kind is invalid");if("none"!==n&&!Aq.includes(n))throw Error("Quick action icon is invalid");let a=e.quickActionButtonVariant.trim();if(!["default","outline","secondary","destructive"].includes(a))throw Error("Quick action button style is invalid");return await t.$transaction(async t=>{await t.workflow.update({where:{id:e.id},data:{quickActionKind:e.kind,quickActionIconKey:n,quickActionButtonVariant:a}}),await t.workflowQuickActionRepository.deleteMany({where:{workflowId:e.id}}),A.length&&await t.workflowQuickActionRepository.createMany({data:A.map(t=>({workflowId:e.id,repositoryId:t}))})}),edR(e.id),this.get(e.id)}async archive(e,t){let A=await ag();return await A.workflow.update({where:{id:e},data:{archivedAt:t?new Date:null,...t?{enabled:!1}:{}}}),edR(e),this.get(e)}async delete(e){let t=await ag();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}}),edR(e),!0}export(e,t){return this.exportInternal(e,t)}async exportInternal(e,t){let A,r=await this.get(e);if(!r)throw Error("Workflow not found");let i=t?r.versions.find(e=>e.id===t):null;if(t&&!i)throw Error("Workflow version not found");let n=yO(edy(i?.definitionJson??r.draftDefinitionJson));return{format:"aide.workflow.export",schemaVersion:1,exportedAt:new Date().toISOString(),workflow:{name:i?.name??r.name,description:i?.description??r.description,overlapPolicy:r.overlapPolicy,maxConcurrentRuns:r.maxConcurrentRuns,definition:(A=(e,t="")=>Array.isArray(e)?e.map(e=>A(e,t)):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,A(t,e)])):"string"==typeof e&&/(token|secret|password|passwd|private.?key|api.?key|authorization)/i.test(t)&&!/(credential.?id|credential.?ids)$/i.test(t)||"string"==typeof e&&/^(?:\/|[A-Za-z]:[\\/]|\\\\)/.test(e)&&/^(?:cwd|folder|path|directory)$/i.test(t)?null:e,yM.parse(A(n)))}}}async import(e){edv("string"==typeof e.payload?e.payload:JSON.stringify(e.payload),"Workflow import",2097152);let t=edk("string"==typeof e.payload?JSON.parse(e.payload):e.payload,"Workflow import"),A="aide.workflow.export"===t.format,r=A?edk(t.workflow,"Exported workflow"):t,i=yO(A?r.definition:r);return this.create({name:e.name?.trim()||i.name,description:i.description,definition:{...i,name:e.name?.trim()||i.name},overlapPolicy:"string"==typeof r.overlapPolicy?r.overlapPolicy:"QUEUE",maxConcurrentRuns:"number"==typeof r.maxConcurrentRuns?r.maxConcurrentRuns:1})}async runs(e={}){let t=await ag(),A=Math.min(Math.max(e.first??100,1),200),r=Number(e.search),i=e.archive?.toUpperCase()??"ACTIVE",n="ALL"===i?{}:"ARCHIVED"===i?{archivedAt:{not:null}}:{archivedAt:null},a=await t.workflowRun.findMany({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{},...e.status?{status:e.status.toUpperCase()}:{},...Number.isInteger(r)&&r>0?{displayNumber:r}:e.search?.trim()?{workflow:{name:{contains:e.search.trim()}}}:{}},include:{workflow:!0,version:!0,trigger:!0,_count:{select:{attempts:!0,events:!0}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:a.slice(0,A),nextCursor:a.length>A?a[A-1].id:null,totalCount:await t.workflowRun.count({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{}}})}}async archiveRuns(e,t){let A=await ag(),r=[...new Set(e)],i=await A.workflowRun.updateMany({where:{id:{in:r}},data:{archivedAt:t?new Date:null}});for(let e of r)edx(e);return i.count}async deleteRuns(e){let t=await ag(),A=[...new Set(e)];if(await t.workflowRun.count({where:{id:{in:A},status:{notIn:["SUCCEEDED","FAILED","CANCELLED"]}}}))throw Error("Cancel runs that have not finished before deleting them");let r=await t.workflowRun.deleteMany({where:{id:{in:A}}});for(let e of A)edx(e);return r.count}async run(e){return(await ag()).workflowRun.findUnique({where:{id:e},include:{workflow:!0,version:!0,trigger:!0,parentRun:!0,childRuns:{orderBy:{createdAt:"asc"}},attempts:{orderBy:[{generation:"asc"},{nodeId:"asc"},{iterationKey:"asc"},{attempt:"asc"}],include:{waits:{orderBy:{createdAt:"asc"}},resourceLinks:{orderBy:{createdAt:"asc"}},questionBatches:{orderBy:{createdAt:"asc"},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}},checkpoints:{orderBy:{createdAt:"asc"}}}},waits:{orderBy:{createdAt:"asc"}},events:{orderBy:{sequence:"asc"}},resourceLinks:{orderBy:{createdAt:"asc"}}}})}async runEvents(e,t=-1,A=500){return(await ag()).workflowRunEvent.findMany({where:{runId:e,sequence:{gt:t}},orderBy:{sequence:"asc"},take:Math.min(Math.max(A,1),1e3)})}async questionBatch(e){return(await ag()).runQuestionBatch.findUnique({where:{id:e},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}})}async jobSecrets(e,t){if(!this.credentials||!this.agentControl)throw Error("Workflow credentials are unavailable");if(this.claimedSecretJobs.has(t))throw Error("Workflow job secrets were already claimed");let A=await this.agentControl.getJob(t);if(!A||A.agentId!==e||"workflow.terminal.run"!==A.kind||"RUNNING"!==A.status)throw Error("Workflow job is not eligible to claim secrets");let r=i3(edy(A.payloadJson)),i=new Set(Object.values(sb)),n=[];for(let e of r.credentialEnvironment){if(!i.has(e.credential.kind))throw Error("Workflow references an unsupported credential kind");let t=await this.credentials.getText(e.credential);if(null===t)throw Error(`Credential ${e.credential.id} is unavailable`);n.push({name:e.name,value:t})}return this.claimedSecretJobs.add(t),n}async workflowAgentContext(e){let t=await ag(),A=Cb(e,"worktree.id");if("string"==typeof A){let e=await t.worktree.findUnique({where:{id:A},include:{codebase:{include:{agent:!0}}}});if(!e)throw Error("Workflow worktree is unavailable");let r=JSON.parse(e.codebase.agent.capabilitiesJson);return{agentId:e.codebase.agentId,codebaseId:e.codebaseId,worktreeId:e.id,cwd:e.folder,capabilities:Array.isArray(r)?r.filter(e=>"string"==typeof e):[]}}let r=Cb(e,"codebase.id");if("string"!=typeof r)throw Error("Workflow requires a codebase or worktree");let i=await t.codebase.findUnique({where:{id:r},include:{agent:!0}});if(!i)throw Error("Workflow codebase is unavailable");let n=JSON.parse(i.agent.capabilitiesJson);return{agentId:i.agentId,codebaseId:i.id,worktreeId:null,cwd:i.folder,capabilities:Array.isArray(n)?n.filter(e=>"string"==typeof e):[]}}async startTerminalJob(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await this.workflowAgentContext(e.sessionData);if(!t.capabilities.includes(iZ))throw Error("The selected agent must be updated to run workflow terminal steps");let A={...e.node.config.environment&&"object"==typeof e.node.config.environment&&!Array.isArray(e.node.config.environment)?Object.fromEntries(Object.entries(e.node.config.environment).map(([e,t])=>[e,String(t)])):{},AIDE_TICKET_KEY:String(Cb(e.sessionData,"ticket.key")??""),AIDE_TICKET_TITLE:String(Cb(e.sessionData,"ticket.title")??""),AIDE_BRANCH:String(Cb(e.sessionData,"worktree.branch")??""),AIDE_BASE_BRANCH:String(Cb(e.sessionData,"worktree.baseBranch")??""),AIDE_WORKTREE_PATH:String(Cb(e.sessionData,"worktree.path")??t.cwd),AIDE_CODEBASE_PATH:String(Cb(e.sessionData,"codebase.folder")??t.cwd),AIDE_REPO_ORIGIN:String(Cb(e.sessionData,"repo.displayOrigin")??"")},r=Array.isArray(e.node.config.credentials)?e.node.config.credentials:[],i=await this.agentControl.createJob({agentId:t.agentId,kind:iZ,payload:{workflowRunId:e.run.id,stepAttemptId:e.attempt.id,stepId:e.node.id,codebaseId:t.codebaseId,worktreeId:t.worktreeId,cwd:t.cwd,script:edB(String(e.node.config.script??""),"Terminal script",1e6),interpreter:"NODE"===e.node.config.interpreter?"NODE":"SHELL",sessionData:e.sessionData,environment:A,credentialEnvironment:r},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:Number(e.node.config.timeoutSeconds??900),codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:i.id},links:[{kind:"AGENT_JOB",resourceId:i.id,label:"Workflow terminal job",url:`/jobs/${i.id}`}],wait:{kind:"AGENT_JOB",externalKey:i.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(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(iX))throw Error("The selected agent must be updated to capture workflow checkpoints");let A=await this.agentControl.createJob({agentId:t.agentId,kind:iX,payload:{operation:"CAPTURE",workflowRunId:e.run.id,stepAttemptId:e.attempt.id,cwd:t.cwd,kind:String(e.node.config.kind??"STEP"),checkpoint:null,stash:!1},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:300,codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:A.id},links:[{kind:"AGENT_JOB",resourceId:A.id,label:"Workflow checkpoint job",url:`/jobs/${A.id}`}],wait:{kind:"AGENT_JOB",externalKey:A.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}async workflowAgentJobCompleted(e){if(e.kind===iZ){let t=i3(edy(e.payloadJson));if("SUCCEEDED"!==e.status||!e.resultJson)return void await this.resolveExternalWait("AGENT_JOB",e.id,{jobId:e.id,status:e.status},e.error||`Workflow terminal job ${e.status.toLowerCase()}`);let A=edk(edy(e.resultJson),"Workflow terminal result");return void await this.resolveExternalWait("AGENT_JOB",e.id,{...A,jobId:e.id,stepAttemptId:t.stepAttemptId})}if(e.kind!==iX)return;let t=i8(edy(e.payloadJson));if("SUCCEEDED"!==e.status||!e.resultJson)return void await this.resolveExternalWait("AGENT_JOB",e.id,{jobId:e.id,status:e.status},e.error||`Workflow checkpoint job ${e.status.toLowerCase()}`);let A=edk(edy(e.resultJson),"Workflow checkpoint result"),r=null;if(A.checkpoint&&"object"==typeof A.checkpoint){let e=A.checkpoint,i=await ag();r=(0,AB.randomUUID)(),await i.$transaction([i.runCheckpoint.create({data:{id:r,workflowStepAttemptId:t.stepAttemptId,kind:String(e.kind??t.kind),headSha:"string"==typeof e.headSha?e.headSha:null,branch:"string"==typeof e.branch?e.branch:null,upstreamSha:"string"==typeof e.upstreamSha?e.upstreamSha:null,indexTree:"string"==typeof e.indexTree?e.indexTree:null,worktreeTree:"string"==typeof e.worktreeTree?e.worktreeTree:null,refName:"string"==typeof e.refName?e.refName:null,manifestJson:"string"==typeof e.manifestJson?e.manifestJson:null,diffSummary:"string"==typeof e.diffSummary?e.diffSummary:null,diffPatch:"string"==typeof e.diffPatch?e.diffPatch:null,stashRef:"string"==typeof A.stashRef?A.stashRef:"string"==typeof e.stashRef?e.stashRef:null}}),i.workflowRunResourceLink.create({data:{id:(0,AB.randomUUID)(),runId:t.workflowRunId,attemptId:t.stepAttemptId,kind:"CHECKPOINT",resourceId:r,label:`${String(e.kind??t.kind)} checkpoint`}})])}await this.resolveExternalWait("AGENT_JOB",e.id,{...A,jobId:e.id,checkpointId:r})}async genericAgentJobCompleted(e){if(e.kind===iZ||e.kind===iX)return;let t=e.resultJson?edk(edy(e.resultJson),"Agent job result"):{status:e.status};if("SUCCEEDED"===e.status){let A=await ag(),r=t.worktree&&"object"==typeof t.worktree&&!Array.isArray(t.worktree)?t.worktree:null,i=r&&"string"==typeof r.gitDirectory?r.gitDirectory:null,n=e.codebaseId?await A.worktree.findFirst({where:{codebaseId:e.codebaseId,...e.worktreeId?{id:e.worktreeId}:i?{gitDirectory:i}:{id:"__missing__"}},include:{codebase:{include:{repository:!0,agent:!0}}}}):null,a=n?.codebase??(e.codebaseId?await A.codebase.findUnique({where:{id:e.codebaseId},include:{repository:!0,agent:!0}}):null),s={};if(n&&this.worktrees?.workflowSessionDataForWorktree)try{s=await this.worktrees.workflowSessionDataForWorktree(n.id,{includeMissing:!0})}catch{}if(a&&!s.codebase&&(s.repo={id:a.repository.id,name:a.repository.name,url:a.repository.displayOrigin,canonicalOrigin:a.repository.canonicalOrigin,displayOrigin:a.repository.displayOrigin,defaultBranch:a.defaultBranch},s.codebase={id:a.id,folder:a.folder,agentId:a.agentId,branch:a.defaultBranch,headSha:a.headSha},s.agent={id:a.agent.id,name:a.agent.name,hostname:a.agent.hostname}),n&&!s.worktree&&(s.worktree={id:n.id,path:n.folder,branch:n.branch,baseBranch:n.baseBranchOverride??n.codebase.defaultBranch,headSha:n.headSha,pushStatus:n.pushStatus,ahead:n.ahead,behind:n.behind,baseBehind:n.baseBehind,dirty:n.hasStagedChanges||n.hasUnstagedChanges}),Object.keys(s).length){let e=t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)?t.sessionPatch:{};t={...t,sessionPatch:Ck(e,s)}}}await this.resolveExternalWait("AGENT_JOB",e.id,{...t,jobId:e.id,status:e.status},"SUCCEEDED"===e.status?null:e.error||`Agent job ${e.status.toLowerCase()}`)}async restoreCheckpointWithAgent(e,t){if(!this.agentControl)throw Error("Agent control is unavailable");let A=await ag(),r=await A.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow checkpoint not found");let n=await this.workflowAgentContext(CO(i.run.sessionDataJson)),a=await this.agentControl.createJob({agentId:n.agentId,kind:iX,payload:{operation:"RESTORE",workflowRunId:i.runId,stepAttemptId:i.id,cwd:n.cwd,kind:"REPLAY_RESTORE",checkpoint:{headSha:r.headSha,branch:r.branch,upstreamSha:r.upstreamSha,indexTree:r.indexTree,worktreeTree:r.worktreeTree,refName:r.refName},stash:t.stash},idempotencyKey:`workflow:restore:${e}:${(0,AB.randomUUID)()}`,timeoutSeconds:300,codebaseId:n.codebaseId,worktreeId:n.worktreeId,visibility:"SYSTEM"}),s=Date.now()+3e5;for(;Date.now()<s;){let e=await this.agentControl.getJob(a.id);if(!e)throw Error("Workflow restore job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(e.status)){if("SUCCEEDED"!==e.status)throw Error(e.error||`Workflow restore job ${e.status.toLowerCase()}`);return}await new Promise(e=>setTimeout(e,250))}throw await this.agentControl.cancelJob(a.id),Error("Workflow restore job timed out")}async compareCheckpointWithAgent(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await ag(),A=await t.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),r=A?.workflowStepAttempt;if(!A||!r)throw Error("Workflow checkpoint not found");let i=await this.workflowAgentContext(CO(r.run.sessionDataJson)),n=await this.agentControl.createJob({agentId:i.agentId,kind:iX,payload:{operation:"COMPARE",workflowRunId:r.runId,stepAttemptId:r.id,cwd:i.cwd,kind:"REPLAY_PREVIEW",checkpoint:{headSha:A.headSha,branch:A.branch,upstreamSha:A.upstreamSha,indexTree:A.indexTree,worktreeTree:A.worktreeTree,refName:A.refName},stash:!1},idempotencyKey:`workflow:compare:${e}:${(0,AB.randomUUID)()}`,timeoutSeconds:60,codebaseId:i.codebaseId,worktreeId:i.worktreeId,visibility:"SYSTEM"}),a=Date.now()+6e4;for(;Date.now()<a;){let e=await this.agentControl.getJob(n.id);if(!e)throw Error("Workflow comparison job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(e.status)){if("SUCCEEDED"!==e.status||!e.resultJson)throw Error(e.error||`Workflow comparison job ${e.status.toLowerCase()}`);let t=edk(edy(e.resultJson),"Workflow comparison result");return edk(t.comparison,"Git checkpoint comparison")}await new Promise(e=>setTimeout(e,250))}throw await this.agentControl.cancelJob(n.id),Error("Workflow comparison job timed out")}async runsForResource(e,t){let A=await ag(),r=await A.workflowRunResourceLink.findMany({where:{kind:e.trim().toUpperCase(),resourceId:t.trim()},select:{runId:!0},distinct:["runId"],orderBy:{createdAt:"desc"}});return A.workflowRun.findMany({where:{id:{in:r.map(({runId:e})=>e)}},include:{workflow:!0,version:!0,trigger:!0,attempts:{orderBy:[{generation:"asc"},{createdAt:"asc"}],include:{resourceLinks:{orderBy:{createdAt:"asc"}},questionBatches:{orderBy:{createdAt:"asc"},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}}}},resourceLinks:{orderBy:{createdAt:"asc"}}},orderBy:{createdAt:"desc"}})}async acceptingResource(e){let t=e.trim().toUpperCase(),A=await ag();return(await A.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:!0},orderBy:{name:"asc"}})).filter(e=>!!e.activeVersion&&yO(edy(e.activeVersion.definitionJson)).triggers.some(e=>Cm(e.kind)&&yc(e.config)===t))}async quickActions(e){let t=await ag();if(!Cg.includes(e.kind))throw Error("Quick action kind is invalid");let A=e.resourceKind.trim().toUpperCase(),r=e.repositoryId?.trim()||null;return(await t.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null},quickActionKind:e.kind,OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:r??""}}}]},include:{activeVersion:!0},orderBy:[{name:"asc"},{id:"asc"}]})).filter(e=>!!e.activeVersion&&yO(edy(e.activeVersion.definitionJson)).triggers.some(e=>Cm(e.kind)&&yc(e.config)===A))}async recordEvent(e){return this.events.record(e)}async hydrateResourceSessionData(e,t,A){let r=e?.toUpperCase()??null,i=await ag(),n={},a=null;if("CODEBASE"===r&&t){let e=await i.codebase.findUnique({where:{id:t},select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},repository:{select:{id:!0,name:!0,canonicalOrigin:!0,displayOrigin:!0}}}});e&&(n=edw(e))}if("BUILD"===r&&t){let e=await i.build.findUnique({where:{id:t},select:{id:!0,status:!0,action:!0,error:!0,artifactDirectory:!0,worktreeId:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},codebase:{select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},repository:{select:{id:!0,name:!0,canonicalOrigin:!0,displayOrigin:!0}}}},artifacts:{select:{id:!0,kind:!0,relativePath:!0,sizeBytes:!0,checksum:!0}},reports:{where:{status:"READY"},select:{kind:!0,summaryJson:!0}}}});if(e){a=e.worktreeId;let t=t=>{let A=e.reports.find(e=>e.kind===t);if(A)try{return CO(A.summaryJson)}catch{return}},A=t("TEST_RESULTS"),r=t("CODE_COVERAGE");n=Ck(e.codebase?edw(e.codebase):e.agent?edQ(e.agent):{},{build:{id:e.id,status:e.status,action:e.action,error:e.error,artifactDirectory:e.artifactDirectory,artifacts:e.artifacts,...A?{testSummary:A}:{},...r?{coverageSummary:r}:{}}})}}if("AGENT_RUN"===r&&t){let e=await i.agentRun.findUnique({where:{id:t},select:{id:!0,kind:!0,status:!0,phase:!0,origin:!0,provider:!0,model:!0,branch:!0,finalOutput:!0,error:!0,jiraIssueKey:!0,worktreeId:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,toolCallCount:!0,estimatedCost:!0}});e&&(a=e.worktreeId,n=Ck(e.agent?edQ(e.agent):{},{run:{id:e.id,kind:e.kind,status:e.status,phase:e.phase,origin:e.origin,provider:e.provider,model:e.model,branch:e.branch,finalOutput:e.finalOutput,error:e.error,usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,reasoningTokens:e.reasoningTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,toolCallCount:e.toolCallCount,estimatedCost:e.estimatedCost}},...e.jiraIssueKey?{ticket:{key:e.jiraIssueKey}}:{}}))}if("PULL_REQUEST"===r&&t&&this.githubService){let e=/^([^/]+)\/([^#]+)#([1-9]\d*)$/.exec(t);if(e)try{let t=await this.githubService.pullRequest(e[1],e[2],Number(e[3]));t&&(a=t.worktreeId,n=Ck(n,{repo:{id:t.codebaseRepositoryId,githubId:t.repositoryGithubId,name:t.repositoryNameWithOwner.split("/").at(-1),displayOrigin:t.repositoryNameWithOwner,url:t.repositoryUrl},pr:{...t,headBranch:t.headRefName,baseBranch:t.baseRefName,unresolvedThreads:t.reviewThreads.filter(({isResolved:e})=>!e)},...t.jiraKey?{ticket:{key:t.jiraKey}}:{}}))}catch{}}if("JIRA_TICKET"===r&&t&&this.jiraService)try{let e=await this.jiraService.ticket(t),A=e.comments.at(-1)??null;n=Ck(n,{ticket:{...e,title:e.summary,type:e.issueType,url:e.jiraUrl},...A?{comment:{id:A.id,body:A.content?.rawText??"",author:A.author}}:{}})}catch{}let s=Cb(A,"worktree.id"),o="WORKTREE"===r?t:"GITHUB_PIPELINE"===r||"GITHUB_JOB"===r?"string"==typeof s?s:null:a;if(o&&this.worktrees)if(this.worktrees.workflowSessionDataForWorktree)n=Ck(await this.worktrees.workflowSessionDataForWorktree(o),n);else{let e=await this.worktrees.ticketKeyForWorktree(o);e&&(n=Ck({ticket:{key:e}},n))}let l=Cb(A,"pipeline.pullRequests");!Cb(n,"pr")&&!Cb(A,"pr")&&Array.isArray(l)&&l[0]&&"object"==typeof l[0]&&!Array.isArray(l[0])&&(n=Ck(n,{pr:l[0]}));let c=Cb(A,"pr.jiraKey")??Cb(A,"pipeline.jiraKey");return"string"!=typeof Cb(n,"ticket.key")&&"string"==typeof c&&c.trim()&&(n=Ck(n,{ticket:{key:c}})),Ck(n,A)}async trigger(e){let t=await ag(),A=await t.workflow.findUnique({where:{id:e.workflowId},include:{activeVersion:{include:{triggers:!0}}}});if(!A?.activeVersion)throw Error("Published workflow not found");if(!A.enabled||A.archivedAt)throw Error("Workflow is paused");let r=e.resourceKind?.toUpperCase()??null,i=e.choice?.trim()||null,{triggers:n}=A.activeVersion,a=r?"RESOURCE_MANUAL":"MANUAL",s=r?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE",o=e=>n.find(t=>t.kind===e&&(!r||yc(edk(edy(t.configJson),"Trigger configuration"))===r))??null,l=o(s),c=o(a),u=i?l:c;if(i&&!l)throw Error(r?`No resource trigger offers choices for ${r} resources`:"This workflow has no manual trigger with choices");if(!i&&!c&&l){let e=yo(edk(edy(l.configJson),"Trigger configuration"));throw Error(`This workflow needs a choice: ${e.map(({key:e})=>e).join(", ")}`)}if(r&&!u)throw Error(`No resource trigger accepts ${e.resourceKind} resources`);if(i&&l&&!yo(edk(edy(l.configJson),"Trigger configuration")).some(({key:e})=>e===i))throw Error(`Unknown choice ${i}`);let d=e.subjectKey?.trim()||(r&&e.resourceId?`${r}:${e.resourceId}`:`manual:${(0,AB.randomUUID)()}`),h={sessionData:await this.hydrateResourceSessionData(e.resourceKind,e.resourceId,e.sessionData??{}),resourceKind:e.resourceKind??null,resourceId:e.resourceId??null,choice:i,manual:!0},p=await this.createRunForTrigger(A,A.activeVersion,u,null,i?s:a,d,h,`manual:${A.id}:${(0,AB.randomUUID)()}`);return edx(p.id),this.run(p.id)}async createRunForTrigger(e,t,A,r,i,n,a,s,o=null){return(await ag()).$transaction(async l=>{let c=await l.workflowRun.findUnique({where:{idempotencyKey:s}});if(c)return c;if("COALESCE_LATEST"===e.overlapPolicy){let t=await l.workflowRun.findFirst({where:{workflowId:e.id,triggerSubjectKey:n,status:"QUEUED"},orderBy:{queuedAt:"desc"}});if(t)return l.workflowRun.update({where:{id:t.id},data:{triggerId:A?.id??null,triggerEventId:r,triggerKind:i,triggerPayloadJson:JSON.stringify(a),queuedAt:new Date}})}let u=(0,AB.randomUUID)(),d=edk(a.sessionData??{},"Session data"),h=JSON.stringify(Ck({workflow:{id:e.id,name:t.name,runId:u,startedAt:null,trigger:{id:A?.nodeId??null,kind:i,subjectKey:n,choice:"string"==typeof a.choice?a.choice:null}},steps:{}},d));edv(h,"Workflow session data",2097152);let p=await l.workflowRun.create({data:{id:u,displayNumber:await edM(l),workflowId:e.id,versionId:t.id,triggerId:A?.id??null,triggerEventId:r,parentRunId:o,idempotencyKey:s,triggerKind:i,triggerSubjectKey:n,triggerPayloadJson:JSON.stringify(a),sessionDataJson:h}}),g=function(e,t){let A=e.trim().toUpperCase(),r=euk(t.sessionData);if(Cm(A)){let e=t.resourceKind,A="string"==typeof e?e.toUpperCase():null,i="GITHUB_JOB"===A?euR(r,"job","url"):"GITHUB_PIPELINE"===A?euR(r,"pipeline","url"):null;return"string"==typeof e?eux(e.toUpperCase(),t.resourceId,{url:"string"==typeof i?i:null,metadata:"AGENT_RUN"===e.toUpperCase()?{runKind:euR(r,"run","kind")}:null}):null}if(euN.has(A))return eux("JIRA_TICKET",euR(r,"ticket","key"));if(euT.has(A))return eux("AGENT_RUN",euR(r,"run","id"),{metadata:{runKind:euR(r,"run","kind")}});if(euM.has(A))return eux("BUILD",euR(r,"build","id"));if(euO.has(A))return eux("WORKTREE",euR(r,"worktree","id"));if("CODEBASE_REMOTE_BRANCH"===A)return eux("CODEBASE",euR(r,"codebase","id"));if("AGENT_JOB_FAILED"===A)return eux("AGENT_JOB",euR(euk(r.steps),"trigger","id"));if("AGENT_CONNECTION"===A||"AGENT_DISK_REPORT"===A||"AGENT_DISK_THRESHOLD"===A||"AGENT_DISK_STATE_CHANGED"===A||"AGENT_DISK_CLEANUP_RESULT"===A||"CCUSAGE_THRESHOLD"===A)return eux("AGENT",euR(r,"agent","id")??euR(r,"codebase","agentId"));if("WORKFLOW_FINISHED"===A)return eux("WORKFLOW_RUN",euR(t,"run","id"));if(euF.has(A)){let e=function(e){if("string"!=typeof e)return null;let t=e.trim(),A=t.match(/(?:https?:\/\/|ssh:\/\/git@|git@)?github\.com[/:]([^/]+)\/([^/#]+?)(?:\.git)?$/i)??t.match(/^([^/:]+)\/([^/#]+?)(?:\.git)?$/);return A?.[1]&&A[2]?{owner:A[1],repository:A[2]}:null}(euR(r,"repo","displayOrigin")),t=Number(euR(r,"pr","number"));return e&&Number.isInteger(t)&&t>0?eux("PULL_REQUEST",euv(e.owner,e.repository,t)):null}if(euU.has(A)){let e=euR(r,"pipeline","url");return eux("GITHUB_WORKFLOW_RUN",euR(r,"pipeline","runId"),{url:"string"==typeof e?e:null})}return"GITHUB_PUSH_DEFAULT"===A?eux("CODEBASE_REPOSITORY",euR(r,"repo","id")):null}(i,a);return g&&await l.workflowRunResourceLink.create({data:{id:(0,AB.randomUUID)(),runId:p.id,kind:g.kind.toUpperCase(),resourceId:g.resourceId,label:g.label??null,url:g.url??null,metadataJson:g.metadata?JSON.stringify(g.metadata):null}}),p})}async processTriggerEvents(){let e=await ag();for(let t of(await e.workflowTriggerEvent.findMany({where:{status:"PENDING"},orderBy:{receivedAt:"asc"},take:50})))try{let A=edk(edy(t.payloadJson),"Trigger payload");for(let r of(await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:!0}}}})))if(r.activeVersion)for(let e of r.activeVersion.triggers.filter(({kind:e})=>e===t.kind)){if(!await this.triggerMatches(e,t.subjectKey,A)||A.workflowCorrelation&&"object"==typeof A.workflowCorrelation&&A.workflowCorrelation.workflowId===r.id)continue;let i=await this.createRunForTrigger({...r,activeVersion:r.activeVersion},r.activeVersion,e,t.id,t.kind,t.subjectKey,A,`${t.id}:${r.id}:${e.id}`);edx(i.id)}await e.workflowTriggerEvent.update({where:{id:t.id},data:{status:"PROCESSED",processedAt:new Date,error:null}})}catch(A){await e.workflowTriggerEvent.update({where:{id:t.id},data:{status:"FAILED",processedAt:new Date,error:A instanceof Error?A.message:String(A)}})}}async triggerMatches(e,t,A){let r=CR(edk(edy(e.configJson),"Trigger configuration"),A),i=null;if(void 0!==A.cursorValue&&("string"!=typeof r.thresholdPath||"string"!=typeof r.thresholdOperator)){let r=await ag(),n=await r.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});i=edb(n?.cursorJson?edk(edy(n.cursorJson),"Trigger cursor").value:void 0)!==edb(A.cursorValue),await r.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,AB.randomUUID)(),triggerId:e.id,subjectKey:t,cursorJson:JSON.stringify({value:A.cursorValue}),lastMatched:i,...i?{lastFiredAt:new Date}:{}},update:{cursorJson:JSON.stringify({value:A.cursorValue}),lastMatched:i,...i?{lastFiredAt:new Date}:{}}})}if("GITHUB_ISSUE_COMMAND"===e.kind){let e=Cb(A,"comment.author.login"),t=Cb(A,"comment.body"),i=Array.isArray(r.allowedLogins)?r.allowedLogins:[];if("string"!=typeof e||!i.includes(e)||"string"!=typeof t||"string"!=typeof r.commandPattern||!new RegExp(r.commandPattern).test(t))return!1}if("WORKTREE_CONFLICT"===e.kind&&!0!==Cb(A,"worktree.conflicted")||"WORKTREE_MISSING"===e.kind&&null==Cb(A,"worktree.missingAt")||"WORKTREE_DIVERGED"===e.kind&&"DIVERGED"!==Cb(A,"worktree.pushStatus"))return!1;if(r.filters&&"object"==typeof r.filters)for(let[e,t]of Object.entries(r.filters)){let r=Cb(A,e);if(Array.isArray(t)){if(!t.some(e=>edb(e)===edb(r)))return!1}else if(edb(t)!==edb(r))return!1}if("string"==typeof r.thresholdPath&&"string"==typeof r.thresholdOperator){let i=CM({op:r.thresholdOperator,left:{source:"SESSION",path:r.thresholdPath},right:r.thresholdValue},A),n=await ag(),a=await n.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});return await n.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,AB.randomUUID)(),triggerId:e.id,subjectKey:t,lastMatched:i,cursorJson:JSON.stringify({value:Cb(A,r.thresholdPath)}),...i?{lastFiredAt:new Date}:{}},update:{lastMatched:i,cursorJson:JSON.stringify({value:Cb(A,r.thresholdPath)}),...i&&!a?.lastMatched?{lastFiredAt:new Date}:{}}}),i&&!a?.lastMatched}return i??!0}async processSchedules(){let e=await ag(),t=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:{where:{kind:"SCHEDULE"},include:{states:!0}}}}}}),A=new Date;for(let r of t)for(let t of r.activeVersion?.triggers??[]){let i=edk(edy(t.configJson),"Schedule configuration"),n=Number(i.cadenceSeconds);if(!Number.isInteger(n)||n<1)continue;let a=r.id,s=t.states.find(e=>e.subjectKey===a);if(!s){let r="string"==typeof i.firstRunAt?new Date(i.firstRunAt):null,o=r&&Number.isFinite(r.getTime())?r:new Date(A.getTime()+1e3*n);s=await e.workflowTriggerState.create({data:{id:(0,AB.randomUUID)(),triggerId:t.id,subjectKey:a,nextScheduledAt:o}})}if(!s.nextScheduledAt||s.nextScheduledAt>A)continue;let o=s.nextScheduledAt,l=new Date(Math.max(A.getTime(),o.getTime())+1e3*n);await e.workflowTriggerState.update({where:{id:s.id},data:{lastFiredAt:A,nextScheduledAt:l}}),await this.events.record({kind:"SCHEDULE",subjectKey:a,dedupeKey:`schedule:${t.id}:${o.toISOString()}`,payload:{sessionData:{},scheduledFor:o.toISOString(),cadenceSeconds:n}})}}async lifecycle(e,t){let A=await ag(),r=await A.workflowRun.findUnique({where:{id:e}});if(!r)throw Error("Workflow run not found");if("PAUSE"===t){if(!new Set(["RUNNING","WAITING","BLOCKED"]).has(r.status))throw Error("Only an active workflow run can be paused");if(!await A.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{in:["RUNNING","WAITING","BLOCKED"]}},data:{status:"PAUSING",phase:"DRAINING"}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}}),!0)))return this.run(e);await this.controlLinkedAgentRuns(e,"PAUSE"),await this.appendEvent(e,null,"RUN_PAUSING","Workflow pause requested")}else if("RESUME"===t){if("PAUSED"!==r.status)throw Error("Only a paused workflow run can be resumed");if(!(await A.workflowRun.updateMany({where:{id:e,status:"PAUSED"},data:{status:"RUNNING",phase:"SCHEDULING",pausedAt:null}})).count)return this.run(e);await this.controlLinkedAgentRuns(e,"CONTINUE"),await this.appendEvent(e,null,"RUN_RESUMED","Workflow resumed")}else{if(edf.has(r.status))return this.run(e);for(let[t,r]of(await this.controlLinkedAgentRuns(e,"CANCEL"),await this.cancelWaitingCommandRuns(e),this.activeExecutions)){let i=await A.workflowStepAttempt.findUnique({where:{id:t},select:{runId:!0}});i?.runId===e&&r.abort()}if(!await A.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{notIn:[...edf]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:{notIn:[...edm]}},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 edx(e),this.run(e)}async repairRunData(e,t){let A=edk(t,"Session data patch"),r=await ag(),i=await r.workflowRun.findUnique({where:{id:e}});if(!i)throw Error("Workflow run not found");if(!new Set(["BLOCKED","PAUSED"]).has(i.status))throw Error("Only blocked or paused workflows accept repair data");let n=CO(i.sessionDataJson),a=Cb(n,"workflow"),s=Ck(n,A);a&&"object"==typeof a&&(s=Cv(s,"workflow",a));let o=JSON.stringify(s);return edv(o,"Workflow session data",2097152),await r.$transaction([r.workflowRun.update({where:{id:e},data:{sessionDataJson:o,sessionRevision:{increment:1},status:"PAUSED"===i.status?"PAUSED":"RUNNING",phase:"PAUSED"===i.status?"PAUSED":"SCHEDULING",blockedReason:null}}),r.workflowStepAttempt.updateMany({where:{runId:e,status:"BLOCKED"},data:{status:"PENDING",phase:"PENDING",error:null}})]),await this.appendEvent(e,null,"RUN_DATA_REPAIRED","Workflow session data repaired"),edx(e),this.run(e)}async answerQuestion(e,t){let A=await ag(),r=await A.$transaction(async A=>{let r=await A.runQuestionBatch.findUnique({where:{id:e},include:{workflowStepAttempt:!0,answerRevisions:!0}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow question not found");if("PENDING"!==r.status)throw Error("Question was already answered");return await A.runAnswerRevision.create({data:{id:(0,AB.randomUUID)(),batchId:e,revision:r.answerRevisions.length,answersJson:JSON.stringify(t)}}),await A.runQuestionBatch.update({where:{id:e},data:{status:"ANSWERED",answeredAt:new Date}}),await A.workflowWait.updateMany({where:{attemptId:i.id,status:"PENDING",kind:"HUMAN"},data:{status:"RESOLVED",resultJson:JSON.stringify({answers:t}),resolvedAt:new Date}}),i});return await this.completeWaitingAttempt(r.id,{answers:t}),af.publish(edE(r.runId),{workflowQuestionChanged:{id:e,runId:r.runId}}),this.run(r.runId)}async tick(){if(!this.ticking){this.ticking=!0;try{await this.recoverExpiredClaims(),await this.processSchedules(),await this.processTriggerEvents(),await this.resolveDueWaits(),await this.startQueuedRuns();let e=await ag();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 ag();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}`),edx(t.runId)}async startQueuedRuns(){let e=await ag();for(let t of(await e.workflowRun.findMany({where:{status:"QUEUED"},include:{workflow:!0,version:!0},orderBy:{queuedAt:"asc"},take:50}))){let A="CONCURRENT"===t.workflow.overlapPolicy?t.workflow.maxConcurrentRuns:1;if(await e.workflowRun.count({where:{workflowId:t.workflowId,id:{not:t.id},status:{in:edI.filter(e=>"QUEUED"!==e)}}})>=A)continue;let r=yO(edy(t.version.definitionJson)),i=new Date,n=Cv(CO(t.sessionDataJson),"workflow.startedAt",i.toISOString());await e.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:t.id,status:"QUEUED"},data:{status:"RUNNING",phase:"SCHEDULING",startedAt:i,sessionDataJson:JSON.stringify(n),sessionRevision:{increment:1}}})).count&&(await e.workflowStepAttempt.createMany({data:r.nodes.map(e=>({id:(0,AB.randomUUID)(),runId:t.id,nodeId:e.id,kind:e.kind,generation:t.generation,iterationKey:"",attempt:0,requiredPathsJson:JSON.stringify(edN(e)),providedPathsJson:JSON.stringify(edT(e)),idempotencyKey:`${t.id}:${e.id}:${t.generation}::0`}))}),!0))&&(await this.appendEvent(t.id,null,"RUN_STARTED","Workflow started"),edx(t.id))}}selectedTrigger(e,t){let A=e.trigger?.nodeId??t.triggers.find(({kind:t})=>t===e.triggerKind)?.id??null;if(!Cf(e.triggerKind))return{id:A,choice:null};let r=edk(edy(e.triggerPayloadJson),"Trigger payload");return{id:A,choice:"string"==typeof r.choice?r.choice:null}}attemptOutput(e){if(!e.outputJson)return{};let t=edy(e.outputJson);return t&&"object"==typeof t&&!Array.isArray(t)?t:{value:t}}edgeState(e,t,A,r){if(!r.has(e.source))return e.source!==t.id||t.choice&&e.sourceHandle!==t.choice?"INACTIVE":"ACTIVE";let i=A.get(e.source);if(!i||!edm.has(i.status))return"PENDING";if(new Set(["SKIPPED","CANCELLED","SUPERSEDED"]).has(i.status))return"INACTIVE";let n=r.get(e.source);if("FAILED"===i.status)return"failure"===e.sourceHandle||"catch"===e.sourceHandle||"CONTINUE"===n.failurePolicy&&"success"===e.sourceHandle?"ACTIVE":"INACTIVE";let a=this.attemptOutput(i).selectedHandles;return a?.length?a.includes(e.sourceHandle)?"ACTIVE":"INACTIVE":"success"===e.sourceHandle||"output"===e.sourceHandle?"ACTIVE":"INACTIVE"}async progressRun(e){let t=await ag(),A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}});if(!A||edf.has(A.status))return;if("PAUSING"===A.status){await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}});let r=new Set(["AGENT_JOB","BUILD","SKILL_RUN","WORKTREE_MOVE","GITHUB_CHECKS"]),i=new Set(A.waits.filter(({status:e,kind:t})=>"PENDING"===e&&r.has(t)).map(({attemptId:e})=>e));!A.attempts.some(({id:e,status:t})=>"RUNNING"===t||"WAITING"===t&&i.has(e))&&(await t.workflowRun.updateMany({where:{id:e,status:"PAUSING"},data:{status:"PAUSED",phase:"PAUSED",pausedAt:new Date}})).count&&(await this.appendEvent(e,null,"RUN_PAUSED","Workflow paused"),edx(e));return}if(!new Set(["RUNNING","WAITING"]).has(A.status))return;let r=yO(edy(A.version.definitionJson)),i=new Map(r.nodes.map(e=>[e.id,e])),n=new Map;for(let e of r.edges)n.set(e.target,[...n.get(e.target)??[],e]);let a=!0;for(;a;){if(a=!1,!(A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=A.attempts.filter(({generation:e,supersededAt:t})=>e===A.generation&&!t),o=new Map;for(let e of s){let t=`${e.nodeId}:${e.iterationKey}`,A=o.get(t);(!A||A.attempt<e.attempt)&&o.set(t,e)}let l=new Map([...o.values()].filter(({iterationKey:e})=>!e).map(e=>[e.nodeId,e])),c=this.selectedTrigger(A,r);for(let e of r.nodes){let A=l.get(e.id);if(!A||"PENDING"!==A.status)continue;let s=r.nodes.find(t=>"CONTROL_FOR_EACH"===t.kind&&t.config.joinNodeId===e.id);if(s){let e=l.get(s.id);if(!e||!edm.has(e.status)||[...o.values()].filter(({iterationKey:e})=>!!e).some(({status:e})=>!edm.has(e)))continue;await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"ITERATIONS_JOINED"}}),a=!0;continue}let u=n.get(e.id)??[];if(!u.length)continue;let d=u.map(e=>this.edgeState(e,c,l,i)),h=d.filter(e=>"ACTIVE"===e).length,p=d.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===e.kind&&"ANY"===e.config.mode?"ANY":"ALL")?h>0:0===p&&h>0)?(await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"READY"}}),a=!0):0===p&&0===h&&(await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"SKIPPED",phase:"INACTIVE_BRANCH",finishedAt:new Date}}),a=!0)}await this.progressIterationAttempts(r,A,c,i,n,o,l)&&(a=!0)}if(!(A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=new Map;for(let e of A.attempts.filter(({generation:e,supersededAt:t})=>e===A.generation&&!t)){let t=`${e.nodeId}:${e.iterationKey}`,A=s.get(t);(!A||A.attempt<e.attempt)&&s.set(t,e)}let o=[...s.values()],l=A.waits.some(({status:e})=>"PENDING"===e),c=o.some(({status:e})=>!edm.has(e));if(l||c){let r=l?"WAITING":"RUNNING";A.status!==r&&(await t.workflowRun.updateMany({where:{id:e,status:{in:[...edC]}},data:{status:r,phase:l?"WAITING":"SCHEDULING"}})).count&&edx(e);return}let u=yO(edy(A.version.definitionJson)),d=o.find(e=>{if("FAILED"!==e.status)return!1;let t=u.nodes.find(({id:t})=>t===e.nodeId);return!!t&&"CONTINUE"!==t.failurePolicy&&!u.edges.some(e=>e.source===t.id&&new Set(["failure","catch"]).has(e.sourceHandle))});await this.finishRun(A,d?"FAILED":"SUCCEEDED",d?.error??null)}async finishRun(e,t,A){let r=await ag();await r.$transaction(async r=>!!(await r.workflowRun.updateMany({where:{id:e.id,status:{in:[...edC]}},data:{status:t,phase:t,error:A,finishedAt:new Date}})).count&&(await r.workflowResourceLease.deleteMany({where:{runId:e.id}}),!0))&&(await this.appendEvent(e.id,null,`RUN_${t}`,"SUCCEEDED"===t?"Workflow completed":"Workflow failed",A?{error:A}:null),await this.resolveExternalWait("WORKFLOW_RUN",e.id,{status:t,runId:e.id},"FAILED"===t?A||"Sub-workflow failed":null),await this.events.record({kind:"WORKFLOW_FINISHED",subjectKey:e.workflowId,dedupeKey:`workflow-finished:${e.id}`,payload:{sessionData:CO(e.sessionDataJson),run:{id:e.id,status:t},workflowCorrelation:{workflowId:e.workflowId,runId:e.id}}}),await this.notifyRun(e.id,"SUCCEEDED"===t?"WORKFLOW_COMPLETED":"WORKFLOW_FAILED","SUCCEEDED"===t?"Workflow completed":"Workflow failed",A||`Workflow run ${e.displayNumber} ${t.toLowerCase()}`,t.toLowerCase()),edx(e.id))}async dispatchReadyAttempts(){let e=await ag(),t=Math.max(0,4-await e.workflowStepAttempt.count({where:{status:"RUNNING"}}));if(t)for(let A of(await e.workflowStepAttempt.findMany({where:{status:"READY",run:{status:"RUNNING"}},orderBy:{createdAt:"asc"},take:2*t}))){if(t<=0)break;if(!(await e.workflowStepAttempt.updateMany({where:{id:A.id,status:"READY",run:{status:"RUNNING"}},data:{status:"RUNNING",phase:"RUNNING",claimOwner:this.workerId,claimExpiresAt:new Date(Date.now()+3e5),startedAt:A.startedAt??new Date}})).count)continue;t-=1;let r=new AbortController;this.activeExecutions.set(A.id,r),this.executeAttempt(A.id,r.signal).catch(e=>{console.error(`Workflow attempt ${A.id} failed unexpectedly:`,e)}).finally(()=>{this.activeExecutions.delete(A.id)})}}async acquireResourceLease(e,t,A){let r=yE.get(t.kind),i=null;if(r.mutatesWorktree){let e=Cb(A,"worktree.id")??Cb(A,"worktree.path")??Cb(A,"codebase.id");e&&(i=`git:${String(e)}`)}else if(t.kind.startsWith("BUILD_")){let e=Cb(A,"build.id");e&&(i=`build:${String(e)}`)}if(!i)return!0;let n=await ag();await n.workflowResourceLease.deleteMany({where:{key:i,expiresAt:{lt:new Date}}});try{return await n.workflowResourceLease.create({data:{key:i,runId:e.runId,attemptId:e.id,expiresAt:new Date(Date.now()+3e5)}}),await n.workflowStepAttempt.update({where:{id:e.id},data:{resourceLockKey:i}}),!0}catch{return await n.workflowStepAttempt.update({where:{id:e.id},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",claimOwner:null,claimExpiresAt:null}}),!1}}async executeAttempt(e,t){let A=await ag(),r=await A.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!r||"RUNNING"!==r.status)return;let i=yO(edy(r.run.version.definitionJson)),n=i.nodes.find(({id:e})=>e===r.nodeId);if(!n)return void await this.failAttempt(r,null,Error("Workflow step definition is missing"));let a=CO(r.run.sessionDataJson);r.iterationKey&&(a=await this.iterationSessionData(r.run,r,a));let s=edN(n).filter(e=>void 0===Cb(a,e));if(s.length){await A.$transaction([A.workflowStepAttempt.update({where:{id:r.id},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",error:`Missing required session data: ${s.join(", ")}`,claimOwner:null,claimExpiresAt:null}}),A.workflowRun.update({where:{id:r.runId},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",blockedReason:`Step ${n.name??n.id} needs ${s.join(", ")}`}}),A.workflowResourceLease.deleteMany({where:{attemptId:e}})]),await this.appendEvent(r.runId,r.id,"STEP_BLOCKED",`Step blocked by missing requirements: ${s.join(", ")}`),await this.notifyRun(r.runId,"WORKFLOW_NEEDS_ATTENTION","Workflow needs data",`Step ${n.name??n.id} needs ${s.join(", ")}`,`blocked:${r.id}`),edx(r.runId);return}if(await A.workflowStepAttempt.update({where:{id:r.id},data:{inputJson:JSON.stringify(a)}}),await this.acquireResourceLease(r,n,a))try{let e,A={...n,config:CR(n.config,a)};if(e=n.kind.startsWith("CONTROL_")||"HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind?await this.executeControl(r.run,r,A,a,i):await this.executor.execute({run:r.run,attempt:r,node:A,sessionData:a,signal:t}),t.aborted)throw Error("Workflow step was cancelled");e.wait?await this.parkAttempt(r,e):await this.completeAttempt(r,n,e)}catch(t){let e=t instanceof Error?t:Error(String(t));if(await this.holdForBusyCodebase(r,e))return;await this.failAttempt(r,n,e)}}async holdForBusyCodebase(e,t){if(!(t instanceof Error&&"CodebaseBusyError"===t.name))return!1;let A=e.startedAt??e.createdAt;if(Date.now()-A.getTime()>6e5)return!1;let r=await ag();return!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING",claimOwner:this.workerId},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",error:t.message,claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),await r.workflowRunEvent.findFirst({where:{attemptId:e.id,type:"STEP_WAITING_FOR_RESOURCE"},select:{id:!0}})||await this.appendEvent(e.runId,e.id,"STEP_WAITING_FOR_RESOURCE","Step is waiting for the codebase to become available",{error:t.message}),edx(e.runId),!0)}async iterationSessionData(e,t,A){let r=await ag(),i=await r.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,status:"SUCCEEDED"},orderBy:{finishedAt:"asc"}}),n=A;for(let e of(t.inputJson&&(n=Ck(n,edk(edy(t.inputJson),"Iteration input"))),i)){let t=this.attemptOutput(e);t.sessionPatch&&(n=Ck(n,t.sessionPatch))}return n}async executeControl(e,t,A,r,i){switch(A.kind){case"CONTROL_IF":{let e=A.config.condition;if(!e)throw Error("If steps require a condition");let t=CM(e,r);return{output:{matched:t},selectedHandles:[t?"true":"false"]}}case"CONTROL_JOIN":{let r=i.nodes.find(e=>"CONTROL_FOR_EACH"===e.kind&&e.config.joinNodeId===A.id);if(r){let A=await ag(),i=await A.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:{not:""},status:"FAILED"}});if(i.length&&"COLLECT_ERRORS"!==r.config.errorMode)throw Error(`${i.length} for-each iteration step(s) failed`);return{output:{iterations:await A.workflowStepAttempt.count({where:{runId:e.id,generation:t.generation,iterationKey:{not:""}}}),failures:i.map(({nodeId:e,iterationKey:t,error:A})=>({nodeId:e,iterationKey:t,error:A}))}}}return{output:{joined:!0}}}case"CONTROL_TRY":return{output:{started:!0}};case"CONTROL_DELAY":{let e=Number(A.config.seconds??0);if(!Number.isFinite(e)||e<0||e>31536e3)throw Error("Delay must be between zero and 31,536,000 seconds");return{wait:{kind:"DELAY",resumeAfter:new Date(Date.now()+1e3*e)}}}case"CONTROL_WAIT_UNTIL":{let e=A.config.condition;if(!e)throw Error("Wait-until steps require a condition");if(CM(e,r))return{output:{matched:!0}};let t=euL(A.config,15);return{wait:{kind:"PREDICATE",predicate:{condition:e,cadenceSeconds:t},resumeAfter:new Date(Date.now()+1e3*t),timeoutAt:eu_(A.config)}}}case"CONTROL_SET_VARIABLE":{if("string"!=typeof A.config.path)throw Error("Set-variable steps require an output path");let e="string"==typeof A.config.script?await edu(A.config.script,r):A.config.value;return{output:e,sessionPatch:Cv({},A.config.path,e)}}case"CONTROL_FOR_EACH":{let n=Array.isArray(A.config.items)?A.config.items:"string"==typeof A.config.listPath?Cb(r,A.config.listPath):null;if(!Array.isArray(n))throw Error("For-each source must be an array");if(n.length>1e3)throw Error("For-each is limited to 1,000 items");return await this.spawnForEach(e,t,A,i,n),{output:{itemCount:n.length},selectedHandles:n.length?["body"]:["empty"],sessionPatch:Cv({},`steps.${A.id}.items`,n)}}case"CONTROL_SUBWORKFLOW":return this.startSubworkflow(e,t,A,r);case"HUMAN_CONFIRM":case"HUMAN_CHOICE":return this.createHumanQuestion(e,t,A);default:throw Error(`Unsupported control step ${A.kind}`)}}async progressIterationAttempts(e,t,A,r,i,n,a){let s=await ag(),o=!1;for(let e of new Set([...n.values()].map(({iterationKey:e})=>e).filter(Boolean))){let t=new Map(a);for(let A of n.values())A.iterationKey===e&&t.set(A.nodeId,A);for(let n of t.values()){if(n.iterationKey!==e||"PENDING"!==n.status)continue;let a=r.get(n.nodeId);if(!a)continue;let l=(i.get(a.id)??[]).map(e=>this.edgeState(e,A,t,r)),c=l.filter(e=>"ACTIVE"===e).length,u=l.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===a.kind&&"ANY"===a.config.mode?"ANY":"ALL")?c>0:0===u&&c>0)?(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"READY",phase:"ITERATION_READY"}}),o=!0):0===u&&0===c&&(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"SKIPPED",phase:"INACTIVE_ITERATION_BRANCH",finishedAt:new Date}}),o=!0)}}return o}async spawnForEach(e,t,A,r,i){let n="string"==typeof A.config.joinNodeId?A.config.joinNodeId:null,a=r.nodes.find(({id:e})=>e===n);if(!a||"CONTROL_JOIN"!==a.kind)throw Error("For-each steps require an explicit joinNodeId");let s=new Map;for(let e of r.edges)s.set(e.source,[...s.get(e.source)??[],e]);let o=(s.get(A.id)??[]).filter(({sourceHandle:e})=>"body"===e).map(({target:e})=>e),l=new Set;for(;o.length;){let e=o.shift();e===n||l.has(e)||(l.add(e),o.push(...(s.get(e)??[]).map(({target:e})=>e)))}if(i.length&&!l.size)throw Error("For-each body is not connected to its body handle");let c=r.nodes.filter(({id:e})=>l.has(e)),u=await ag();await u.$transaction(async r=>{await r.workflowStepAttempt.updateMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,nodeId:{in:[...l]},status:"PENDING"},data:{status:"SKIPPED",phase:"ITERATION_TEMPLATE",finishedAt:new Date}}),i.length&&c.length&&await r.workflowStepAttempt.createMany({data:i.flatMap((r,i)=>{let n=t.iterationKey?`${t.iterationKey}.${i}`:String(i),a=JSON.stringify({loop:{current:{forEachNodeId:A.id,index:i,item:r},[A.id]:{index:i,item:r}}});return c.map(A=>({id:(0,AB.randomUUID)(),runId:e.id,nodeId:A.id,kind:A.kind,generation:t.generation,iterationKey:n,attempt:0,status:"PENDING",phase:"ITERATION_PENDING",inputJson:a,requiredPathsJson:JSON.stringify(edN(A)),providedPathsJson:JSON.stringify(edT(A)),idempotencyKey:`${e.id}:${A.id}:${t.generation}:${n}:0`}))})})})}async startSubworkflow(e,t,A,r){let i="string"==typeof A.config.versionId?A.config.versionId:null;if(!i)throw Error("Sub-workflow version is required");let n=await ag(),a=await n.workflowVersion.findUnique({where:{id:i},include:{workflow:{include:{activeVersion:!0}}}});if(!a)throw Error("Sub-workflow version not found");if(!a.workflow.enabled||a.workflow.archivedAt)throw Error("Sub-workflow is paused");let s=e,o=0;for(;s;){if(s.workflowId===a.workflowId)throw Error("Recursive sub-workflow invocation is not allowed");if((o+=1)>=10)throw Error("Sub-workflow depth is limited to 10");s=s.parentRunId?await n.workflowRun.findUnique({where:{id:s.parentRunId}}):null}let l={};if(A.config.inputMapping&&"object"==typeof A.config.inputMapping)for(let[e,t]of Object.entries(A.config.inputMapping))l=Cv(l,e,CR(t,r));let c=await this.createRunForTrigger({...a.workflow,activeVersion:a},a,null,null,"SUBWORKFLOW",e.id,{sessionData:l,parentRunId:e.id},`${t.id}:subworkflow:${a.id}`,e.id);return edx(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:euG(A.config),timeoutAt:eu_(A.config)}}}async createHumanQuestion(e,t,A){let r=Array.isArray(A.config.questions)?A.config.questions:[{header:A.name??null,prompt:"string"==typeof A.config.prompt?A.config.prompt:"HUMAN_CONFIRM"===A.kind?"Continue this workflow?":"Choose an option",multiSelect:!!A.config.multiSelect,allowCustom:"HUMAN_CONFIRM"!==A.kind&&!1!==A.config.allowCustom,options:"HUMAN_CONFIRM"===A.kind?[{label:"Confirm",description:null},{label:"Cancel",description:null}]:Array.isArray(A.config.options)?A.config.options:[]}];if(!r.length||r.length>10)throw Error("Workflow questions must contain between one and ten questions");let i=await ag(),n=(0,AB.randomUUID)();return await i.runQuestionBatch.create({data:{id:n,workflowStepAttemptId:t.id,nativeRequestId:`workflow:${t.id}`,questions:{create:r.map((e,t)=>{let A=edk(e,"Workflow question"),r=Array.isArray(A.options)?A.options:[];return{id:(0,AB.randomUUID)(),position:t,header:"string"==typeof A.header?A.header:null,prompt:edB(String(A.prompt??""),"Question prompt",1e4),multiSelect:!!A.multiSelect,allowCustom:!1!==A.allowCustom,options:{create:r.map((e,t)=>{let A=edk(e,"Question option");return{id:(0,AB.randomUUID)(),position:t,label:edB(String(A.label??""),"Option label",500),description:"string"==typeof A.description?A.description.slice(0,2e3):null}})}}})}}}),af.publish(edE(e.id),{workflowQuestionChanged:{id:n,runId:e.id}}),{output:{questionBatchId:n},wait:{kind:"HUMAN",externalKey:n,timeoutAt:eu_(A.config)}}}async parkAttempt(e,t){let A=t.wait;if(!A)throw Error("Workflow wait is missing");let r=await ag(),i=(0,AB.randomUUID)();await r.$transaction(async r=>{let n=await r.workflowRun.findUnique({where:{id:e.runId},select:{status:!0}});return!(!n||edf.has(n.status))&&!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING"},data:{status:"WAITING",phase:A.kind,outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:t.sessionPatch}),claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowWait.create({data:{id:i,runId:e.runId,attemptId:e.id,kind:A.kind,predicateJson:A.predicate?JSON.stringify(A.predicate):null,externalKey:A.externalKey??null,resumeAfter:A.resumeAfter??null,timeoutAt:A.timeoutAt??null}}),t.links?.length&&await r.workflowRunResourceLink.createMany({data:t.links.map(t=>({id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:t.kind.toUpperCase(),resourceId:t.resourceId,label:t.label??null,url:t.url??null,metadataJson:t.metadata?JSON.stringify(t.metadata):null}))}),await r.workflowRun.updateMany({where:{id:e.runId,status:{in:[...edC]}},data:{status:"WAITING",phase:A.kind}}),await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_WAITING",`Step is waiting for ${A.kind.toLowerCase().replaceAll("_"," ")}`,{waitId:i}),edx(e.runId))}async completeAttempt(e,t,A){let r=await ag();await r.$transaction(async r=>{let i=await r.workflowRun.findUnique({where:{id:e.runId}});if(!i)throw Error("Workflow run disappeared");if(edf.has(i.status))return!1;let n=CO(i.sessionDataJson);e.iterationKey?n=Cv(n,`steps.${t.id}.iterations.${e.iterationKey.replaceAll(".","_")}`,{status:"SUCCEEDED",output:A.output??null,data:A.sessionPatch??null}):(A.sessionPatch&&(n=Ck(n,A.sessionPatch)),n=Cv(n,`steps.${t.id}`,{status:"SUCCEEDED",output:A.output??null,snapshotId:A.links?.find(({kind:e})=>"CHECKPOINT"===e)?.resourceId??null}));let a=JSON.stringify(n);return edv(a,"Workflow session data",2097152),!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"SUCCEEDED",phase:"SUCCEEDED",outputJson:JSON.stringify({value:A.output,selectedHandles:A.selectedHandles,sessionPatch:A.sessionPatch}),error:null,finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(A.links?.length&&await r.workflowRunResourceLink.createMany({data:A.links.map(t=>({id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:t.kind.toUpperCase(),resourceId:t.resourceId,label:t.label??null,url:t.url??null,metadataJson:t.metadata?JSON.stringify(t.metadata):null}))}),await r.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:a,sessionRevision:{increment:1}}}),await r.workflowRun.updateMany({where:{id:e.runId,status:{in:[...edC]}},data:{status:"RUNNING",phase:"SCHEDULING"}}),await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_SUCCEEDED",`Step ${t.name??t.id} completed`),edx(e.runId))}async failAttempt(e,t,A){let r=await ag(),i=t??(await r.workflowRun.findUnique({where:{id:e.runId},include:{version:!0}}))?.version.definitionJson,n="string"==typeof i?yO(edy(i)).nodes.find(({id:t})=>t===e.nodeId)??null:i,a=n?.retry,s=!!(a&&e.attempt+1<a.maxAttempts),o=a?Math.min(86400,"EXPONENTIAL"===a.strategy?a.delaySeconds*2**e.attempt:a.delaySeconds):0;await r.$transaction(async t=>{let r=await t.workflowRun.findUnique({where:{id:e.runId}});if(!r||edf.has(r.status))return!1;let i=CO(r.sessionDataJson);return e.iterationKey||(i=Cv(i,`steps.${e.nodeId}`,{status:"FAILED",error:A.message})),!!(await t.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"FAILED",phase:s?"RETRY_SCHEDULED":"FAILED",error:A.message.slice(0,2e4),finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(s&&await t.workflowWait.create({data:{id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:"RETRY",resumeAfter:new Date(Date.now()+1e3*o)}}),await t.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:JSON.stringify(i),sessionRevision:{increment:1}}}),await t.workflowRun.updateMany({where:{id:e.runId,status:{in:[...edC]}},data:{status:s?"WAITING":"RUNNING",phase:s?"RETRY_WAIT":"SCHEDULING"}}),await t.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,s?"STEP_RETRY_SCHEDULED":"STEP_FAILED",s?`Step failed and will retry in ${o} seconds`:`Step failed: ${A.message}`,{error:A.message,retry:s}),edx(e.runId))}async resolveDueWaits(){let e=await ag(),t=new Date,A=(t,A)=>e.workflowWait.updateMany({where:{id:t,status:"PENDING",run:{status:{in:[...edC]}}},data:A});for(let r of(await e.workflowWait.findMany({where:{status:"PENDING",run:{status:{in:[...edC]}},OR:[{resumeAfter:{lte:t}},{timeoutAt:{lte:t}}]},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100}))){if(r.timeoutAt&&r.timeoutAt<=t&&"RETRY"!==r.kind&&"DELAY"!==r.kind){if(!(await A(r.id,{status:"TIMED_OUT",resolvedAt:t})).count)continue;await this.failAttempt(r.attempt,yO(edy(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId)??null,Error("Workflow wait timed out"));continue}if("RETRY"===r.kind){let A=r.attempt.attempt+1;await e.$transaction(async e=>{if(!(await e.workflowWait.updateMany({where:{id:r.id,status:"PENDING",run:{status:{in:[...edC]}}},data:{status:"RESOLVED",resolvedAt:t}})).count)return!1;if(await e.workflowStepAttempt.create({data:{id:(0,AB.randomUUID)(),runId:r.runId,nodeId:r.attempt.nodeId,kind:r.attempt.kind,generation:r.attempt.generation,iterationKey:r.attempt.iterationKey,attempt:A,status:"PENDING",phase:"RETRY_PENDING",inputJson:r.attempt.inputJson,requiredPathsJson:r.attempt.requiredPathsJson,providedPathsJson:r.attempt.providedPathsJson,idempotencyKey:`${r.runId}:${r.attempt.nodeId}:${r.attempt.generation}:${r.attempt.iterationKey}:${A}`,replayedFromId:r.attempt.id}}),!(await e.workflowRun.updateMany({where:{id:r.runId,status:{in:[...edC]}},data:{status:"RUNNING",phase:"SCHEDULING"}})).count)throw Error("Workflow lifecycle changed while resuming retry");return!0})&&edx(r.runId)}else if("DELAY"===r.kind){if(!(await A(r.id,{status:"RESOLVED",resolvedAt:t})).count)continue;await this.completeWaitingAttempt(r.attemptId,{delayed:!0})}else if("PREDICATE"===r.kind){let e=r.predicateJson?edk(edy(r.predicateJson),"Wait predicate"):{},i=e.condition,n=CO(r.attempt.run.sessionDataJson);if(i&&CM(i,n)){if(!(await A(r.id,{status:"RESOLVED",resultJson:JSON.stringify({matched:!0}),resolvedAt:t})).count)continue;await this.completeWaitingAttempt(r.attemptId,{matched:!0})}else{let t=Math.max(1,Number(e.cadenceSeconds??15));await A(r.id,{resumeAfter:new Date(Date.now()+1e3*t)})}}else if(r.externalKey&&this.waitPollers.has(r.kind)){let e=await this.waitPollers.get(r.kind)(r.externalKey);if(e.pending){let t=yO(edy(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId)?.config??{};await A(r.id,{resumeAfter:new Date(Date.now()+1e3*euL(t,e.pollAfterSeconds??15))})}else{if(!(await A(r.id,{status:e.error?"FAILED":"RESOLVED",resultJson:JSON.stringify(e.result??{}),resolvedAt:new Date})).count)continue;if(e.error){let t=yO(edy(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId);await this.failAttempt(r.attempt,t??null,Error(e.error))}else await this.completeWaitingAttempt(r.attemptId,e.result??{})}}}}async completeWaitingAttempt(e,t){let A=await ag(),r=await A.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!r||"WAITING"!==r.status)return;let i=yO(edy(r.run.version.definitionJson)).nodes.find(({id:e})=>e===r.nodeId);if(!i)throw Error("Workflow step definition is missing");let n=this.attemptOutput(r),a=n.sessionPatch;if("TERMINAL_RUN"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionData&&"object"==typeof t.sessionData&&!Array.isArray(t.sessionData)){let e=structuredClone(t.sessionData),A=Cb(CO(r.run.sessionDataJson),"workflow");a=A?Cv(e,"workflow",A):e}t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)&&(a=Ck(a??{},t.sessionPatch)),i.kind.startsWith("RUN_")&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=Ck(a??{},Cv({},`run.${i.id}`,t))),"BUILD_START"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=Ck(a??{},Cv({},"build",t))),"WORKTREE_WAIT_PUSH_READY"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=Ck(a??{},Cv({},"worktree",{id:t.id,pushStatus:t.pushStatus}))),"SKILL_APPLY"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=Ck(a??{},Cv({},`steps.${i.id}`,t))),("HUMAN_CONFIRM"===i.kind||"HUMAN_CHOICE"===i.kind)&&(a=Ck(a??{},Cv({},`steps.${i.id}.answer`,t))),await this.completeAttempt(r,i,{output:t??n.value,selectedHandles:n.selectedHandles,sessionPatch:a})}async resolveExternalWait(e,t,A,r=null){let i=await ag(),n=await i.workflowWait.findMany({where:{kind:e,externalKey:t,status:"PENDING"},include:{attempt:{include:{run:{include:{version:!0}}}}}});for(let e of n)if(await i.workflowWait.update({where:{id:e.id},data:{status:r?"FAILED":"RESOLVED",resultJson:JSON.stringify(A),resolvedAt:new Date}}),r){let t=yO(edy(e.attempt.run.version.definitionJson)).nodes.find(({id:t})=>t===e.attempt.nodeId);await this.failAttempt(e.attempt,t??null,Error(r))}else await this.completeWaitingAttempt(e.attemptId,A);return n.length}descendants(e,t){let A=new Map;for(let t of e.edges)A.set(t.source,[...A.get(t.source)??[],t.target]);let r=new Set([t]),i=[t];for(;i.length;){let e=i.shift();for(let t of A.get(e)??[])r.has(t)||(r.add(t),i.push(t))}return[...r]}async prepareReplay(e,t){let A=await ag(),r=await A.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:{include:{checkpoints:!0,resourceLinks:!0}}}});if(!r)throw Error("Workflow run not found");if(!new Set(["PAUSED","BLOCKED","FAILED","SUCCEEDED","CANCELLED"]).has(r.status))throw Error("Pause the workflow before replaying a step");let i=yO(edy(r.version.definitionJson));if(!i.nodes.some(({id:e})=>e===t))throw Error("Workflow step not found");let n=this.descendants(i,t),a=r.attempts.filter(({generation:e,nodeId:t})=>e===r.generation&&n.includes(t)),s=a.filter(e=>e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0],o=s?.checkpoints.slice().sort((e,t)=>e.createdAt.getTime()-t.createdAt.getTime())[0],l=a.flatMap(e=>e.resourceLinks.filter(({kind:e})=>"CHECKPOINT"!==e).map(({kind:e,resourceId:t,label:A,url:r})=>({kind:e,resourceId:t,label:A,url:r}))),c=null,u=null;if(o&&this.agentControl)try{c=await this.compareCheckpointWithAgent(o.id)}catch(e){u=`Git comparison unavailable: ${e instanceof Error?e.message:String(e)}`}return{runId:e,nodeId:t,affectedNodeIds:n,affectedAttemptIds:a.map(({id:e})=>e),externalEffects:l,checkpointId:o?.id??null,gitComparison:c,warning:[l.length?"External Jira, GitHub, build, deployment, and notification effects will not be undone.":null,u].filter(Boolean).join(" ")||null}}async replay(e,t,A={}){let r=await this.prepareReplay(e,t);if(A.restore){if(!r.checkpointId)throw Error("No restorable Git checkpoint is available for this step");this.checkpointRestorer?await this.checkpointRestorer(r.checkpointId,{stash:!!A.stash}):await this.restoreCheckpointWithAgent(r.checkpointId,{stash:!!A.stash})}let i=await ag(),n=await i.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:!0}});if(!n)throw Error("Workflow run not found");let a=yO(edy(n.version.definitionJson)),s=n.attempts.filter(e=>e.generation===n.generation&&e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0];if(!s)throw Error("Selected step has no execution history");let o=s.inputJson?edk(edy(s.inputJson),"Step input snapshot"):CO(n.sessionDataJson),l=n.generation+1,c=new Map;for(let e of n.attempts.filter(({generation:e,iterationKey:t})=>e===n.generation&&!t)){let t=c.get(e.nodeId);(!t||t.attempt<e.attempt)&&c.set(e.nodeId,e)}let u=Cv(o,"workflow.replay",{generation:l,fromNodeId:t,replayedAt:new Date().toISOString()});return await i.$transaction(async t=>{await t.workflowStepAttempt.updateMany({where:{runId:e,generation:n.generation,nodeId:{in:r.affectedNodeIds},supersededAt:null},data:{supersededAt:new Date}}),await t.workflowStepAttempt.createMany({data:a.nodes.map(t=>{let A=r.affectedNodeIds.includes(t.id),i=c.get(t.id);return{id:(0,AB.randomUUID)(),runId:e,nodeId:t.id,kind:t.kind,generation:l,iterationKey:"",attempt:0,status:A?"PENDING":i?.status==="SKIPPED"?"SKIPPED":"SUCCEEDED",phase:A?"REPLAY_PENDING":"REUSED_FROM_PRIOR_GENERATION",inputJson:A?null:i?.inputJson,outputJson:A?null:i?.outputJson,error:null,startedAt:A?null:i?.startedAt,finishedAt:A?null:new Date,requiredPathsJson:JSON.stringify(edN(t)),providedPathsJson:JSON.stringify(edT(t)),idempotencyKey:`${e}:${t.id}:${l}::0`,replayedFromId:i?.id??null}})}),await t.workflowWait.updateMany({where:{runId:e,status:"PENDING"},data:{status:"SUPERSEDED",resolvedAt:new Date}}),await t.workflowRun.update({where:{id:e},data:{generation:l,sessionDataJson:JSON.stringify(u),sessionRevision:{increment:1},status:"RUNNING",phase:"REPLAYING",blockedReason:null,error:null,pausedAt:null,finishedAt:null}})}),await this.appendEvent(e,null,"RUN_REPLAYED",`Replaying from step ${t}`,{generation:l,affectedNodeIds:r.affectedNodeIds}),edx(e),this.run(e)}async appendEvent(e,t,A,r,i=null){let n=await ag(),a=await n.$transaction(async n=>{let a=await n.workflowRunEvent.findFirst({where:{runId:e},orderBy:{sequence:"desc"},select:{sequence:!0}});return n.workflowRunEvent.create({data:{id:(0,AB.randomUUID)(),runId:e,attemptId:t,sequence:(a?.sequence??-1)+1,type:A,message:r.slice(0,2e4),detailJson:i?JSON.stringify(i):null}})});return af.publish(edg(e),{workflowRunEventAdded:a}),a}subscribeWorkflows(){return af.iterate(edh)}subscribeRun(e){return af.iterate(edp(e))}subscribeRunEvents(e){return af.iterate(edg(e))}subscribeRunQuestions(e){return af.iterate(edE(e))}}let edF=globalThis,edU=new Set(["localhost","::1","[::1]","0.0.0.0"]);function edH(e,t){var A=e.get(t);if(!A)return null;let r=A.split(",")[0].trim();return!r||/[\s/\\]/.test(r)?null:r}function ed_(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"");return!!(edU.has(t)||"::1"===t||t.endsWith(".local")||t.endsWith(".localhost")||/^127\./.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t))}function edL(e,t,A){let r;try{r=new URL(`${e}//${t}`)}catch{return null}return"http:"!==r.protocol&&"https:"!==r.protocol?null:{origin:r.origin,secure:"https:"===r.protocol,loopback:ed_(r.hostname),source:A}}function edG(e){if(e instanceof Headers)return e;let t=new Headers;for(let[A,r]of Object.entries(e))Array.isArray(r)?t.set(A,r.join(", ")):void 0!==r&&t.set(A,r);return t}let edP=new class{server=null;services=null;schema=null;initPromise=null;async initializeServer(){if(null===this.server)return this.initPromise||(this.initPromise=this.buildServer().finally(()=>{this.initPromise=null})),this.initPromise}async buildServer(){var e,t,A,r,i,n,a,s,o,l,c,u,d,h,p,g,E,I,f,m,C,y,Q,w,B,S,D,b,v,k,R,x,N,T,M,O,F,U,H,_,L,P,J;let Y,j,V,$,q,K,W,z,Z,X,ee,et,eA,er,ei,en,ea,es,eo,el,ec,eu,ed,eh,ep,eg,eE,eI,ef,em,eC,ey;this.services=edF.serverServices??(Y=new eeN,j=new s_,V=new eda,$=new a4,q=new ec$(j),K=new ecW,W=new ele($),(z=new euS($,q)).startRuntime(),Z=new y0($),X=new Ti($),ee=new ecx,et=new ecU($,void 0,j),eA=new ec5,er=new ci(void 0,j,K),(ei=new euE(q,$,W)).startReaper(),en=new Tf($,ee,q,W),ea=new el4($),eo=new T1(es=new TL($,ea)),el=new NJ(j,V),ec=new eex(void 0,j),eu=new lQ(j,q,K,!0,V),ed=new lg(!0,j,K,()=>eu.configurationChanged()),eh=new T5(j),ep=new N2($,el,ed,ea,V),eg=new elJ(eo,en,{codebases:es,telemetry:ee,pushNotifications:er,agents:$,diskSpace:W,workflows:()=>eI},j),e=eI=new edO(V,eE=new edd,void 0,j,$,q,ei,ep,z,ed,el),b=e,v=t={agentControl:$,jira:el,github:ed,worktrees:ep,codebases:es,builds:en,skills:ea,runs:ei,commands:z,notifications:q,pushNotifications:er,tools:eg,diskSpace:W},b.registerWaitPoller("AGENT_JOB",async e=>{let t=await v.agentControl.getJob(e);return t?new Set(["QUEUED","RUNNING"]).has(t.status)?{pending:!0,pollAfterSeconds:2}:{pending:!1,result:t.resultJson?{...euP(JSON.parse(t.resultJson),"Agent job result"),jobId:e}:{jobId:e,status:t.status},error:"SUCCEEDED"===t.status?null:t.error||`Agent job ${t.status.toLowerCase()}`}:{pending:!1,error:"Agent job disappeared"}}),b.registerWaitPoller("AGENT_RUN",async e=>{let t=await v.runs.get(e);return t?new Set(["IN_PROGRESS","PAUSED"]).has(t.status)?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:t.id,kind:t.kind,status:t.status,phase:t.phase,finalOutput:t.finalOutput,error:t.error,usage:{inputTokens:t.inputTokens,outputTokens:t.outputTokens,reasoningTokens:t.reasoningTokens,estimatedCost:t.estimatedCost}},error:"COMPLETED"===t.status?null:t.error||`Run ${t.status.toLowerCase()}`}:{pending:!1,error:"Plan or session disappeared"}}),b.registerWaitPoller("COMMAND_RUN",async e=>{let t=await v.commands.getRun(e);return t?new Set(["QUEUED","RUNNING","RESTARTING","CANCELLING"]).has(t.status)?{pending:!0,pollAfterSeconds:1}:{pending:!1,result:{id:t.id,displayNumber:t.displayNumber,status:t.status,exitCode:t.exitCode,signal:t.signal,error:t.error},error:"SUCCEEDED"===t.status?null:t.error||`Command run ${t.status.toLowerCase()}`}:{pending:!1,error:"Command run disappeared"}}),b.registerWaitPoller("BUILD",async e=>{let t=await v.builds.getBuild(e);return t?new Set(["QUEUED","PREPARING","RUNNING"]).has(t.status)?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:t.id,status:t.status,action:t.action},error:"SUCCEEDED"===t.status?null:t.error||`Build ${t.status.toLowerCase()}`}:{pending:!1,error:"Build disappeared"}}),b.registerWaitPoller("SKILL_RUN",async e=>{let t=await v.skills.getRun(e);return t?("READY"===t.status&&(t=await v.skills.applyRun(e)),new Set(["PREPARING","READY","APPLYING"]).has(t?.status??""))?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:e,status:t?.status},error:t?.status==="SUCCEEDED"?null:t?.error||`Skill run ${t?.status?.toLowerCase()}`}:{pending:!1,error:"Skill run disappeared"}}),b.registerWaitPoller("WORKTREE_MOVE",async e=>{let t=await v.worktrees.getMove(e);if(!t)return{pending:!1,error:"Worktree move disappeared"};if(new Set(["PUSHING","CHECKING_OUT","DELETING_SOURCE"]).has(t.status))return{pending:!0,pollAfterSeconds:3};let A=t.targetWorktreeId?await v.worktrees.workflowSessionDataForWorktree(t.targetWorktreeId,{includeMissing:!0}):{};return{pending:!1,result:{id:t.id,status:t.status,targetWorktreeId:t.targetWorktreeId,sessionPatch:A},error:"SUCCEEDED"===t.status?null:t.error||`Worktree move ${t.status.toLowerCase()}`}}),b.registerWaitPoller("WORKTREE_PUSH_READY",async e=>{let t=await ag(),A=await t.worktree.findUnique({where:{id:e}});if(!A)return{pending:!1,error:"Worktree disappeared"};if("READY"!==A.pushStatus)return{pending:!0,pollAfterSeconds:5};let r=await v.worktrees.workflowSessionDataForWorktree(A.id,{includeMissing:!0});return{pending:!1,result:{id:A.id,pushStatus:A.pushStatus,sessionPatch:r}}}),b.registerWaitPoller("WORKFLOW_RUN",async e=>{let t=await b.run(e);return t?new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(t.status)?{pending:!1,result:{id:t.id,status:t.status,sessionData:JSON.parse(t.sessionDataJson)},error:"SUCCEEDED"===t.status?null:t.error||`Sub-workflow ${t.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:3}:{pending:!1,error:"Sub-workflow disappeared"}}),b.registerWaitPoller("RUN_ANSWER_REVISION",async e=>{let t=euP(JSON.parse(e),"Answer revision wait"),A=euJ(t.batchId,"Question batch ID",500),r=await v.runs.questionBatch(A);if(!r)return{pending:!1,error:"Question batch disappeared"};if(!r.revisionPreparedAt)return{pending:!0,pollAfterSeconds:2};let i=await v.runs.reviseAnswer(A,t.answers??{},!0===t.stash,!1!==t.rollback);return i?{pending:!1,result:{id:i.id,kind:i.kind,status:i.status,phase:i.phase,parentRunId:i.parentRunId,followUpMode:i.followUpMode}}:{pending:!1,error:"Answer revision failed"}}),b.registerWaitPoller("GITHUB_CHECKS",async e=>{let t=euP(JSON.parse(e),"GitHub checks wait"),A=await v.github.autoRetryRun(euJ(t.repositoryId,"Repository ID"),euJ(t.workflowRunId,"Workflow run ID"),!0);return new Set(["SUCCESS","FAILURE","CANCELLED","SKIPPED","TIMED_OUT","ACTION_REQUIRED","ERROR","NEUTRAL","STALE","STARTUP_FAILURE"]).has(A.status)?{pending:!1,result:{runId:A.id,status:A.status,jobs:A.jobs,sessionPatch:{pipeline:{runId:A.id,status:A.status,conclusion:A.status,jobs:A.jobs}}},error:"SUCCESS"===A.status?null:`GitHub checks concluded ${A.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:10}}),b.registerWaitPoller("DISK_SPACE_REPORT",async e=>{let t=euP(JSON.parse(e),"Disk-space report wait"),A=euJ(t.agentId,"Agent ID",500),r=await v.diskSpace.snapshot(A);if(!r.disk.enabled)return{pending:!1,error:"Disk-space monitoring was disabled while awaiting a report"};let i=r.disk.lastReportedAt,n="string"==typeof t.previousReportedAt?t.previousReportedAt:null;return(euJ(t.requestedAt,"Requested timestamp",100),i&&(!n||Date.parse(i)>Date.parse(n)))?{pending:!1,result:{...r,sessionPatch:r}}:{pending:!0,pollAfterSeconds:2}}),k=eE,R=t,k.register("JIRA_LOAD_TICKET",async e=>{let t=eu4(await R.jira.ticket(eu8(e),!0===e.node.config.force));return{output:t,sessionPatch:{ticket:t},links:[euW(String(t.key),String(t.title??t.key))]}}),k.register("JIRA_TRANSITION",async e=>{let t=eu4(await R.jira.transitionTicket(eu8(e),euJ(e.node.config.transitionId,"Jira transition ID",200)));return{output:t,sessionPatch:{ticket:t},links:[euW(String(t.key),String(t.title??t.key))]}}),k.register("JIRA_COMMENT",async e=>{let t=eu4(await R.jira.addComment(eu8(e),{value:euJ(e.node.config.content,"Jira comment",1e5),format:"JIRA_WIKI"===e.node.config.format?"JIRA_WIKI":"MARKDOWN"}));return{output:t,sessionPatch:{ticket:t},links:[euW(String(t.key),String(t.title??t.key))]}}),k.register("JIRA_ASSIGN",async e=>{let t=null===e.node.config.accountId?null:euJ(e.node.config.accountId,"Jira account ID",500),A=eu4(await R.jira.assignTicket(eu8(e),t));return{output:A,sessionPatch:{ticket:A},links:[euW(String(A.key),String(A.title??A.key))]}}),k.register("JIRA_UPDATE_FIELDS",async e=>{let t=euP(e.node.config.fields??{},"Jira fields"),A=eu4(await R.jira.updateTicket({issueKey:eu8(e),...t}));return{output:A,sessionPatch:{ticket:A},links:[euW(String(A.key),String(A.title??A.key))]}}),k.register("JIRA_RESOLVE_BRANCH",async e=>{let t=await R.worktrees.previewTicketBranch({codebaseId:euJ(e.node.config.codebaseId??Cb(e.sessionData,"codebase.id"),"Codebase ID",200),worktreeId:"string"==typeof Cb(e.sessionData,"worktree.id")?String(Cb(e.sessionData,"worktree.id")):null,ticketKey:eu8(e)});return{output:t,sessionPatch:{worktree:{branch:t.branchName},ticket:{key:t.ticketKey,title:t.ticketTitle,type:t.ticketType}},links:[euW(t.ticketKey,t.ticketTitle)]}}),x=eE,N=t,x.register("GITHUB_LOAD_PR",async e=>{let t=eu2(e),A=await N.github.pullRequest(t.owner,t.name,eu9(e));if(!A)throw Error("Pull request was not found");let r=eu3(A);return{output:r,sessionPatch:{pr:r},links:[euK("PULL_REQUEST",euv(t.owner,t.name,A.number),A.title,A.url)]}}),x.register("GITHUB_MERGE_PR",async e=>{let t=eu2(e),A=eu9(e),r=await N.github.pullRequestMergeOptions(t.owner,t.name,A);if(!r.canMerge)throw Error(r.blockedReason||"Pull request cannot be merged");let i=await N.github.mergePullRequest({...t,number:A,method:"MERGE"===e.node.config.method||"REBASE"===e.node.config.method?e.node.config.method:"SQUASH",commitHeadline:"string"==typeof e.node.config.commitHeadline?e.node.config.commitHeadline:r.defaultCommitHeadline,commitBody:"string"==typeof e.node.config.commitBody?e.node.config.commitBody:r.defaultCommitBody,authorEmail:"string"==typeof e.node.config.authorEmail?e.node.config.authorEmail:null});return{output:i,sessionPatch:{pr:{state:i.state}},links:[euz(e)]}}),x.register("GITHUB_COLLECT_REVIEW_THREADS",async e=>{let t=eu2(e),A=await N.github.pullRequest(t.owner,t.name,eu9(e));if(!A)throw Error("Pull request was not found");let r=A.reviewThreads.filter(({isResolved:e})=>!e);return{output:r,sessionPatch:{pr:{unresolvedThreads:r}},links:[euz(e,A.title,A.url)]}}),x.register("GITHUB_REPLY_REVIEW_THREAD",async e=>{let t=await N.github.replyToReviewThread(euJ(e.node.config.threadId,"Review thread ID",500),euJ(e.node.config.body,"Review reply",1e5)),A=euZ(e);return{output:t,links:A?[A]:void 0}}),x.register("GITHUB_SET_REVIEW_THREAD_RESOLVED",async e=>{let t=await N.github.setReviewThreadResolved(euJ(e.node.config.threadId,"Review thread ID",500),!1!==e.node.config.resolved),A=euZ(e);return{output:t,links:A?[A]:void 0}}),x.register("GITHUB_CREATE_PR",async e=>{let t=eu2(e),A=await N.github.createPullRequest({...t,baseRefName:euJ(e.node.config.baseRefName??Cb(e.sessionData,"worktree.baseBranch"),"Base branch",500),headRefName:euJ(e.node.config.headRefName??Cb(e.sessionData,"worktree.branch"),"Head branch",500),title:euJ(e.node.config.title??Cb(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}),r=eu3(A);return{output:r,sessionPatch:{pr:r},links:[euK("PULL_REQUEST",euv(t.owner,t.name,A.number),A.title,A.url)]}}),x.register("GITHUB_SET_PR_LABELS",async e=>{let t=eu2(e),A=Array.isArray(e.node.config.labels)?e.node.config.labels.map(String):[],r=await N.github.setPullRequestLabels({...t,number:eu9(e),labels:A});return{output:r.labels,sessionPatch:{pr:{labels:r.labels}},links:[euz(e)]}}),x.register("GITHUB_RETRY_PIPELINE",async e=>{let t=await N.github.retryPipeline(euJ(e.node.config.repositoryId??Cb(e.sessionData,"pr.repositoryGithubId"),"GitHub repository ID",500),euJ(e.node.config.checkSuiteId??Cb(e.sessionData,"pipeline.checkSuiteId"),"Check suite ID",500),{actor:"workflow",ipAddress:null}),A=euX(e);return{output:t,sessionPatch:{pipeline:{status:t.status}},links:A?[A]:void 0}}),x.register("GITHUB_RETRY_JOB",async e=>{let t=await N.github.retryWorkflowJob(euJ(e.node.config.repositoryId,"GitHub repository ID",500),euJ(e.node.config.checkSuiteId,"Check suite ID",500),euJ(e.node.config.jobId,"Workflow job ID",500),{actor:"workflow",ipAddress:null}),A=euX(e);return{output:t,links:A?[A]:void 0}}),x.register("GITHUB_CANCEL_WORKFLOW_RUN",async e=>{let t=await N.github.cancelActionsWorkflowRun(euJ(e.node.config.codebaseRepositoryId??Cb(e.sessionData,"repo.id"),"Codebase repository ID",500),euJ(e.node.config.workflowRunId??Cb(e.sessionData,"pipeline.runId"),"Workflow run ID",500),!0===e.node.config.force,{actor:"workflow",ipAddress:null}),A=euX(e);return{output:t,sessionPatch:{pipeline:{status:"CANCELLED"}},links:A?[A]:void 0}}),x.register("GITHUB_SAVE_AUTO_RETRY",async e=>({output:await N.github.saveAutoRetryRule(euP(e.node.config.input,"Auto-retry rule"))})),x.register("GITHUB_WAIT_CHECKS",async e=>{let t=euJ(e.node.config.repositoryId??Cb(e.sessionData,"repo.id"),"Repository ID",500),A=euJ(e.node.config.workflowRunId??Cb(e.sessionData,"pipeline.runId"),"Workflow run ID",500),r=euX(e);return{links:r?[r]:void 0,wait:{kind:"GITHUB_CHECKS",externalKey:JSON.stringify({repositoryId:t,workflowRunId:A}),resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),T=eE,M=t,T.register("WORKTREE_CREATE",async e=>{let t=ede(e),A=await M.worktrees.createWorktree({codebaseId:eu7(e),selection:t,requestId:euV(e,"create")});return euq(e,A,{worktree:{branch:t.branchName,baseBranch:t.baseBranch}})}),T.register("WORKTREE_CHANGE_BRANCH",async e=>{let t=eu6(e),A=ede(e),r=await M.worktrees.changeWorktreeBranch({worktreeId:t,selection:A,requestId:euV(e,"change-branch"),stashOnFailure:!0===e.node.config.stashOnFailure});return euq(e,r,{worktree:{branch:A.branchName,baseBranch:A.baseBranch}},[euK("WORKTREE",t,"Worktree")])}),T.register("WORKTREE_OPERATION",async e=>{let t=String(e.node.config.operation??"SYNC").toUpperCase();if("OPEN_EDITOR"===t||!r7.includes(t))throw Error("Worktree operation is invalid for workflow execution");let A=eu6(e),r=await M.worktrees.runOperation(A,t,euV(e,t.toLowerCase()));return euq(e,r,void 0,[euK("WORKTREE",A,"Worktree")])}),T.register("WORKTREE_DELETE",async e=>{let t=await M.worktrees.deleteWorktree({worktreeId:eu6(e),deleteRemoteBranch:!0===e.node.config.deleteRemoteBranch,requestId:euV(e,"delete")});return euq(e,t)}),T.register("WORKTREE_MOVE",async e=>{let t=await M.worktrees.moveWorktree({sourceWorktreeId:eu6(e),targetCodebaseId:euJ(e.node.config.targetCodebaseId,"Target codebase ID",500),targetWorktreeId:euY(e.node.config.targetWorktreeId,500),deleteSource:!0===e.node.config.deleteSource,requestId:euV(e,"move")}),A=t.targetWorktreeId??(!0===e.node.config.deleteSource?null:eu6(e));return{output:t,links:[...A?[euK("WORKTREE",A,"Worktree")]:[],{kind:"WORKTREE_MOVE",resourceId:t.id,label:"Worktree move"}],wait:{kind:"WORKTREE_MOVE",externalKey:t.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),T.register("WORKTREE_INSPECT",async e=>{let t=eu6(e),A=await M.worktrees.inspect(t,euV(e,"inspect"));return{output:A,sessionPatch:{worktree:{commits:A.commits,changes:A.changes,branchChanges:A.branchChanges}},links:[euK("WORKTREE",t,"Worktree")]}}),T.register("WORKTREE_INSPECT_GIT",async e=>{let t=eu6(e),A=await M.worktrees.inspectGitState(t,euV(e,"inspect-git"));return{output:A,sessionPatch:{worktree:{...A}},links:[euK("WORKTREE",t,"Worktree")]}}),T.register("WORKTREE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!r9.includes(t))throw Error("Worktree Git operation is invalid");let A=eu6(e),r=await M.worktrees.runGitOperation({worktreeId:A,operation:t,branch:euY(e.node.config.branch,500),stashOid:euY(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:euV(e,t.toLowerCase())});return euq(e,r,void 0,[euK("WORKTREE",A,"Worktree")])}),T.register("WORKTREE_WAIT_PUSH_READY",async e=>{let t=eu6(e);return{links:[euK("WORKTREE",t,"Worktree")],wait:{kind:"WORKTREE_PUSH_READY",externalKey:t,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),O=eE,F=t,O.register("CODEBASE_FETCH_REFRESH",async e=>{let t=eu7(e),A="REFRESH"===e.node.config.operation?rN:rT,r=await F.codebases.runOperation(A,[t],euV(e,A)),i=r.jobs[0];if(!i)throw Error(r.skipped[0]?.reason??"Codebase operation was skipped");return euq(e,i,void 0,[euK("CODEBASE",t,"Codebase")])}),O.register("CODEBASE_INSPECT_GIT",async e=>{let t=eu7(e),A=await F.codebases.inspectGitState(t,euV(e,"inspect-git"));return{output:A,sessionPatch:{codebase:{...A}},links:[euK("CODEBASE",t,"Codebase")]}}),O.register("CODEBASE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!rF.includes(t))throw Error("Codebase Git operation is invalid");let A=eu7(e),r=await F.codebases.runGitOperation({codebaseId:A,operation:t,branch:euY(e.node.config.branch,500),stashOid:euY(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:euV(e,t.toLowerCase())});return euq(e,r,void 0,[euK("CODEBASE",A,"Codebase")])}),U=eE,H=t,U.register("BUILD_START",async e=>{let t=String(e.node.config.action??"BUILD").toUpperCase();if(!Aj.includes(t))throw Error("Build action is invalid");let A=await H.builds.startBuild({worktreeId:eu6(e),configurationId:euJ(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:euV(e,"build"),telemetryRequestOrigin:"workflow"});return{output:A,sessionPatch:{build:{id:A.id,status:A.status,action:A.action}},links:[{kind:"BUILD",resourceId:A.id,label:`${A.action} build`,url:`/builds/${A.id}`}],wait:{kind:"BUILD",externalKey:A.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),U.register("BUILD_READ_TEST_RESULTS",async e=>{let t,A=edt(e),r=(await H.builds.reportsForBuild(A)).filter(({kind:e,status:t})=>"TEST_RESULTS"===e&&"READY"===t).at(-1);if(!r)throw Error("Test results are not ready");let i=euP(JSON.parse(r.summaryJson),"Test summary"),n=euP(JSON.parse(r.dataJson),"Test results");return{output:{summary:i,tests:n.tests??[]},sessionPatch:{build:{testSummary:i,tests:n.tests??[]}},links:[euK("BUILD",A,"Build",t)]}}),U.register("BUILD_READ_COVERAGE",async e=>{let t=edt(e),A=(await H.builds.reportsForBuild(t)).filter(({kind:e,status:t})=>"CODE_COVERAGE"===e&&"READY"===t).at(-1);if(!A)throw Error("Coverage results are not ready");let r=euP(JSON.parse(A.summaryJson),"Coverage summary"),i=euP(JSON.parse(A.dataJson),"Coverage results");return{output:{summary:r,files:i.files??[],changedFiles:i.changedFiles??[]},sessionPatch:{build:{coverageSummary:r,coverageFiles:i.files??[],changedCoverageFiles:i.changedFiles??[]}},links:[euK("BUILD",t,"Build",`/builds/${t}/coverage`)]}}),U.register("BUILD_EXPORT",async e=>{let t,A,r=edt(e),i=await H.builds.exportArchive({buildId:r,requestId:euV(e,"export"),settings:euP(e.node.config.settings,"Export settings")});return i.jobId?euq(e,{id:i.jobId,timeoutSeconds:3600},{build:{exportId:i.id}},[euK("BUILD",r,"Build",t)]):{output:i,links:[euK("BUILD",r,"Build",A)]}}),U.register("BUILD_DEPLOY",async e=>{let t,A,r=edt(e),i=await H.builds.runBuild({buildId:r,destinations:Array.isArray(e.node.config.destinations)?e.node.config.destinations:[],requestId:euV(e,"deploy")}),n=i.find(({jobId:e})=>!!e)?.jobId;return n?euq(e,{id:n,timeoutSeconds:3600},void 0,[euK("BUILD",r,"Build",t)]):{output:i,links:[euK("BUILD",r,"Build",A)]}}),U.register("BUILD_CANCEL",async e=>{let t,A=edt(e),r=await H.builds.cancelBuild(A);return{output:r,sessionPatch:{build:{id:r?.id,status:r?.status}},links:[euK("BUILD",A,"Build",t)]}}),_=eE,L=t,ey=async e=>{let t=await L.diskSpace.snapshot(e);return{output:t,sessionPatch:t,links:[euK("AGENT",e,t.agent.name,`/agents/${encodeURIComponent(e)}`)]}},_.register("DISK_SPACE_LOAD",async e=>ey(edA(e))),_.register("DISK_SPACE_REFRESH",async e=>{let t=edA(e),A=await L.diskSpace.requestRefresh(t);return{output:A,links:[euK("AGENT",t,"Agent",`/agents/${encodeURIComponent(t)}`)],wait:{kind:"DISK_SPACE_REPORT",externalKey:JSON.stringify(A),resumeAfter:euG(e.node.config,2),timeoutAt:eu_(e.node.config,180)}}}),_.register("DISK_SPACE_UPDATE_THRESHOLDS",async e=>{let t=await L.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=edA(e);return await L.diskSpace.setMonitoring(t,!0===e.node.config.enabled),ey(t)}),_.register("DISK_SPACE_SET_PRESSURE_MODE",async e=>{let t=edA(e);return await L.diskSpace.setManualPressureMode(t,!0===e.node.config.enabled),ey(t)}),function(e,t){for(let[A,r]of(e.register("RUN_CREATE_PLAN",async e=>{let A=await t.runs.create(edi(e,"PLAN"));if(!A)throw Error("Plan could not be created");return eu$(e,A,!0)}),e.register("RUN_CREATE_SESSION",async e=>{let A=await t.runs.create(edi(e,"SESSION"));if(!A)throw Error("Session could not be created");return eu$(e,A,!0)}),e.register("RUN_PLAY_PLAN",async e=>{let A=await t.runs.playPlan(edr(e));if(!A)throw Error("Plan could not be played");return eu$(e,A,!0)}),e.register("RUN_FOLLOW_UP",async e=>{let A=edi(e,"SESSION"),r=await t.runs.followUp(edr(e),{...A,followUpMode:euJ(e.node.config.followUpMode??"RESUME","Follow-up mode",50),contextMode:euY(e.node.config.contextMode,50)});if(!r)throw Error("Follow-up could not be created");return eu$(e,r,!0)}),e.register("RUN_STEER",async e=>{let A=await t.runs.steer(edr(e),euJ(e.node.config.prompt,"Steering prompt",2e5),Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[]);if(!A)throw Error("Run could not be steered");return eu$(e,A)}),e.register("RUN_ANSWER",async e=>{let A=await t.runs.answerQuestion(euJ(e.node.config.batchId,"Question batch ID",500),e.node.config.answers??{});if(!A)throw Error("Question could not be answered");return eu$(e,A)}),[["RUN_PAUSE","PAUSE"],["RUN_CONTINUE","CONTINUE"],["RUN_CANCEL","CANCEL"]]))e.register(A,async e=>{let A=await t.runs.lifecycle(edr(e),r);if(!A)throw Error("Run lifecycle operation failed");return eu$(e,A)});e.register("RUN_REVISE_ANSWER",async e=>{let A=euJ(e.node.config.batchId,"Question batch ID",500),r=await t.runs.questionBatch(A);if(!r)throw Error("Question batch was not found");if(r.revisionPreparedAt){let r=await t.runs.reviseAnswer(A,e.node.config.answers??{},!0===e.node.config.stash,!1!==e.node.config.rollback);if(!r)throw Error("Answer revision failed");return eu$(e,r)}await t.runs.prepareAnswerRevision(A);let i=eu0(e);return{links:i?[i]:void 0,wait:{kind:"RUN_ANSWER_REVISION",externalKey:JSON.stringify({batchId:A,answers:e.node.config.answers??{},stash:!0===e.node.config.stash,rollback:!1!==e.node.config.rollback}),resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),e.register("RUN_READ_RESULT",async e=>{let A=await t.runs.get(edr(e));if(!A)throw Error("Run was not found");let[r,i,n,a]=await Promise.all([t.runs.events({runId:A.id,first:500}),t.runs.questions({runId:A.id,first:200}),t.runs.usage(A.id),t.runs.linkedItems(A.id)]);return eu$(e,{...A,events:r,questions:i,usage:n,links:a})}),e.register("RUN_CAPTURE_CHECKPOINT",async e=>{let t=await ag(),A=await t.runCheckpoint.findFirst({where:{runId:edr(e)},orderBy:{createdAt:"desc"}});if(!A)throw Error("Run has no captured checkpoint");let r=eu0(e);return{output:A,sessionPatch:{steps:{[e.node.id]:{snapshotId:A.id}}},links:[...r?[r]:[],{kind:"CHECKPOINT",resourceId:A.id,label:`${A.kind} checkpoint`}]}}),e.register("RUN_ARCHIVE_DELETE",async e=>{let A=edr(e),r=!0===e.node.config.delete,i=r?await t.runs.deleteRuns([A]):await t.runs.archive([A],!1!==e.node.config.archived),n=r?null:eu0(e);return{output:{id:A,affected:i},links:n?[n]:void 0}})}(eE,t),P=eE,J=t,P.register("SAVED_COMMAND",async e=>{let t=euJ(e.node.config.commandId,"Saved command",500),A=await J.commands.getDefinition(t);if(!A||A.archivedAt)throw Error("Saved command is unavailable");let r="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT";if("WAIT_FOR_EXIT"===r&&"ALWAYS"===A.restartPolicy)throw Error("Always-restart commands require fire and forget");let i=String(e.node.config.targetMode??"CONTEXT"),n=null,a=null,s=new Set(["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME"]).has(A.targetKind);if("FIXED_AGENT"===i)n=euJ(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===i)a=euJ(e.node.config.worktreeId,"Fixed worktree",500);else if(s){let t=Cb(e.sessionData,"agent.id")??Cb(e.sessionData,"codebase.agentId");if("string"==typeof t&&(n=t),!n){let t=Cb(e.sessionData,"worktree.id");if("string"==typeof t){let e=await ag(),A=await e.worktree.findUnique({where:{id:t},select:{codebase:{select:{agentId:!0}}}});n=A?.codebase.agentId??null}}}else{let t=Cb(e.sessionData,"worktree.id");"string"==typeof t&&(a=t)}let o=await J.commands.startRun({commandId:t,agentId:n,worktreeId:a,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!o)throw Error("Command run could not be created");return{output:{id:o.id,displayNumber:o.displayNumber,status:o.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:o.id,displayNumber:o.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:o.id,label:`Command #${o.displayNumber}`,url:`/commands/runs/${o.id}`}],wait:"WAIT_FOR_EXIT"===r?{kind:"COMMAND_RUN",externalKey:o.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}:void 0}}),P.register("CUSTOM_COMMAND",async e=>{let t=euJ(e.node.config.script,"Custom command",1e6),A="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT",r=String(e.node.config.targetMode??"CONTEXT"),i=null,n=null;if("FIXED_AGENT"===r)i=euJ(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===r)n=euJ(e.node.config.worktreeId,"Fixed worktree",500);else{let t=Cb(e.sessionData,"worktree.id");if("string"==typeof t)n=t;else{let t=Cb(e.sessionData,"agent.id")??Cb(e.sessionData,"codebase.agentId");"string"==typeof t&&(i=t)}}if(!i&&!n)throw Error("Custom command context has no agent or worktree target");let a=await J.commands.startCustomRun({script:t,agentId:i,worktreeId:n,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!a)throw Error("Custom command run could not be created");return{output:{id:a.id,displayNumber:a.displayNumber,status:a.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:a.id,displayNumber:a.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:a.id,label:`Command #${a.displayNumber}`,url:`/commands/runs/${a.id}`}],wait:"WAIT_FOR_EXIT"===A?{kind:"COMMAND_RUN",externalKey:a.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}:void 0}}),P.register("SKILL_APPLY",async e=>{let t=await J.skills.prepareSync(e.node.config.groupId?"GROUP":"ALL",euY(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:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),P.register("NOTIFICATION_SEND",async e=>{let t=await ag(),A=await t.$transaction(t=>J.notifications.recordInTransaction(t,{dedupeKey:`${e.run.id}:${e.node.id}:${e.attempt.generation}`,typeKey:"WORKFLOW_MESSAGE",title:euJ(e.node.config.title,"Notification title",240),body:euJ(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 Cb(e.sessionData,"worktree.id")?String(Cb(e.sessionData,"worktree.id")):null}));return J.notifications.created(A),{output:A}}),P.register("IOS_PUSH_SEND",async e=>({output:await J.pushNotifications.send({requestId:euV(e,"ios-push"),editor:e.node.config.editor,targetMode:euJ(e.node.config.targetMode??"ALL","Push target mode",50),registrationIds:Array.isArray(e.node.config.registrationIds)?e.node.config.registrationIds.map(String):[],channelId:euY(e.node.config.channelId,500),directToken:euY(e.node.config.directToken,2e4),directTokenEncoding:"BASE64"===e.node.config.directTokenEncoding?"BASE64":"HEX",directEnvironment:"PRODUCTION"===e.node.config.directEnvironment?"PRODUCTION":"SANDBOX"})})),P.register("MCP_CALL",async e=>{let t=await J.tools.callTool({groupId:euJ(e.node.config.groupId,"MCP tool group",500),name:euJ(e.node.config.name,"MCP tool name",500),arguments:euP(e.node.config.arguments??{},"MCP arguments")});return{output:t,sessionPatch:{steps:{[e.node.id]:{output:t}}}}}),(ef=new edc(V,$,ep,W)).start(),eI.startRuntime(),(em=new eub(Z,W,K)).startRuntime(),edF.serverServices={prismaService:Y,credentialService:j,agentControlService:$,ccusageService:Z,buildDataService:X,buildsService:en,codebasesService:es,codebaseToolsService:eo,jiraService:el,iosDevicesService:ec,gitHubService:ed,gitHubActionsNotificationsService:eu,cacheServerService:eh,worktreesService:ep,skillsService:ea,telemetryService:ee,signingAssetsService:et,pushNotificationsService:er,notificationsService:q,pollingService:K,modelCostsService:eA,runsService:ei,commandsService:z,diskSpaceService:W,systemStatusService:em,toolsService:eg,workflowEventsService:V,workflowsService:eI,workflowEventBridge:ef}),this.schema=(A=this.services.prismaService,r=this.services.agentControlService,i=this.services.jiraService,n=this.services.gitHubService,a=this.services.ccusageService,s=this.services.codebasesService,o=this.services.toolsService,l=this.services.worktreesService,c=this.services.buildDataService,u=this.services.skillsService,d=this.services.buildsService,h=this.services.iosDevicesService,p=this.services.telemetryService,g=this.services.signingAssetsService,E=this.services.pushNotificationsService,I=this.services.cacheServerService,f=this.services.credentialService,m=this.services.notificationsService,C=this.services.pollingService,y=this.services.modelCostsService,Q=this.services.runsService,w=this.services.workflowsService,B=this.services.commandsService,S=this.services.diskSpaceService,D=this.services.systemStatusService,eC=G([{Query:{health:async()=>await A.healthCheck()?"ok":"degraded"}},{JSON:a7,Agent:{capabilities:e=>a6(e.capabilitiesJson),connectionStatus:e=>null!==e.lastSeenAt&&Date.now()-e.lastSeenAt.getTime()<=aZ(e)&&null===e.disconnectedAt?"ONLINE":"OFFLINE",effectiveBuildsDirectory:e=>Aw(e),lastSeenAt:e=>e.lastSeenAt?.toISOString()??null,disconnectedAt:e=>e.disconnectedAt?.toISOString()??null,createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},AgentJob:{payload:e=>a6(e.payloadJson),result:e=>a6(e.resultJson),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>e.startedAt?.toISOString()??null,finishedAt:e=>e.finishedAt?.toISOString()??null,updatedAt:e=>e.updatedAt.toISOString()},AgentJobLog:{createdAt:e=>e.createdAt.toISOString()},AgentEnrollmentToken:{expiresAt:e=>e.expiresAt.toISOString()},Query:{agents:(e,t,A)=>(a8(A),r.listAgents()),agent:(e,{id:t},A)=>(a5(A,t),r.getAgent(t)),agentSelf:(e,t,A)=>{let i=a3(A);return r.getAgent(i)},agentCadenceSettings:(e,{agentId:t},A)=>(a5(A,t),r.cadenceSettings(t)),agentJobs:(e,{agentId:t,limit:A},i)=>(a5(i,t),r.listJobs(t,A,!!i.agentId)),agentJob:async(e,{id:t},A)=>a9(A,r,t),agentJobLogs:async(e,{jobId:t,afterSequence:A},i)=>(await a9(i,r,t),r.listLogs(t,A))},Mutation:{createAgentEnrollmentToken:(e,{expiresInMinutes:t},A)=>(a8(A),r.createEnrollmentToken(t)),enrollAgent:(e,{input:t},A)=>r.enroll({...t,ipAddress:A.ipAddress}),heartbeatAgent:(e,{input:t},A)=>r.heartbeat(a3(A),{...t,ipAddress:A.ipAddress}),createAgentJob:(e,{input:t},A)=>{if(a8(A),t.kind===AC)throw Error("Saved commands must be launched through startCommandRun");return r.createJob(t)},claimAgentJob:(e,{jobId:t},A)=>r.claimJob(a3(A),t),claimSigningSecretTransfer:(e,{transferId:t},A)=>r.claimSigningSecretTransfer(a3(A),t),appendAgentJobLogs:(e,{jobId:t,logs:A},i)=>r.appendLogs(a3(i),t,A),completeAgentJob:(e,t,A)=>r.completeJob(a3(A),t.jobId,t.status,t.result,t.error??null),cancelAgentJob:(e,{jobId:t},A)=>(a8(A),r.cancelJob(t)),requestAgentCodebaseReconcile:async(e,{agentId:t},A)=>(a8(A),await r.requestCodebaseReconcile([t])===1),updateAgentBaseRepoDirectory:(e,{agentId:t,baseRepoDirectory:A},i)=>(a8(i),r.updateBaseRepoDirectory(t,A??null)),updateAgentBuildsDirectory:(e,{agentId:t,buildsDirectory:A},i)=>(a8(i),r.updateBuildsDirectory(t,A??null)),updateAgentDerivedDataSettings:(e,{agentId:t,input:A},i)=>(a8(i),r.updateDerivedDataSettings(t,A.mode,A.path??null)),updateAgentCadenceSettings:(e,{agentId:t,input:A},i)=>(a8(i),r.updateCadenceSettings(t,A)),deleteAgent:(e,{agentId:t},A)=>(a8(A),r.deleteAgent(t))},Subscription:{agentEvents:{subscribe:(e,{agentId:t},A)=>{if(a3(A)!==t)throw Error("An agent may only subscribe to its own events");return af.iterate(aC(t))}},agentChanged:{subscribe:(e,{agentId:t},A)=>(t?a5(A,t):a8(A),af.iterate(am,t?e=>e.agentChanged.id===t:void 0))},agentJobChanged:{subscribe:async(e,{jobId:t},A)=>(await a9(A,r,t),af.iterate(ay(t)))},agentJobLogAdded:{subscribe:async(e,{jobId:t},A)=>(await a9(A,r,t),af.iterate(aQ(t)))}}},{Query:{jiraSettings:(e,t,A)=>(so(A),i.getSettings()),jiraAvailableProjects:(e,t,A)=>(so(A),i.availableProjects()),jiraProjects:(e,t,A)=>(so(A),i.listProjects()),jiraProjectStatuses:(e,{projectId:t},A)=>(so(A),i.projectStatuses(t)),jiraTicketBoard:(e,{sourceId:t},A)=>(so(A),i.ticketBoard(t)),jiraTicket:(e,{issueKey:t},A)=>(so(A),i.ticket(t)),jiraAssignableUsers:(e,{issueKey:t,query:A},r)=>(so(r),i.assignableUsers(t,A)),jiraTicketTransitions:(e,{issueKey:t},A)=>(so(A),i.ticketTransitions(t)),jiraTicketEditFields:(e,{issueKey:t},A)=>(so(A),i.ticketEditFields(t)),jiraTicketChanges:(e,{issueKey:t,limit:A,offset:r},n)=>(so(n),i.ticketChanges(t,A,r)),jiraTicketWorklogs:(e,{issueKey:t,limit:A,offset:r},n)=>(so(n),i.ticketWorklogs(t,A,r)),jiraCacheMetrics:(e,t,A)=>(so(A),i.cacheMetrics()),jiraApiCalls:(e,{limit:t,offset:A},r)=>(so(r),i.listApiCalls(t,A)),jiraCachedTickets:(e,{limit:t,offset:A},r)=>(so(r),i.listCachedTickets(t,A)),jiraCachedTicket:(e,{issueKey:t},A)=>(so(A),i.cachedTicket(t))},Mutation:{saveJiraSettings:(e,{input:t},A)=>(so(A),i.saveSettings(t)),testJiraConnection:(e,t,A)=>(so(A),i.testConnection()),clearJiraCredentials:(e,t,A)=>(so(A),i.clearCredentials()),addJiraProject:(e,{jiraId:t},A)=>(so(A),i.addProject(t)),removeJiraProject:(e,{projectId:t},A)=>(so(A),i.removeProject(t)),createJiraSource:(e,{input:t},A)=>(so(A),i.createSource(t)),updateJiraSource:(e,{input:t},A)=>(so(A),i.updateSource(t)),deleteJiraSource:(e,{id:t},A)=>(so(A),i.deleteSource(t)),updateJiraProjectDisplaySettings:(e,{input:t},A)=>(so(A),i.updateProjectDisplaySettings(t)),updateJiraProjectBranchNaming:(e,{projectId:t,branchNamingScript:A},r)=>(so(r),i.updateProjectBranchNaming(t,A)),refreshJiraSource:(e,{sourceId:t},A)=>(so(A),i.ticketBoard(t,!0)),updateJiraCacheTtl:(e,{ttlMinutes:t},A)=>(so(A),i.updateCacheTtl(t)),clearJiraCache:(e,t,A)=>(so(A),i.clearCache()),refreshJiraCachedTicket:(e,{issueKey:t},A)=>(so(A),i.refreshCachedTicket(t)),deleteJiraCachedTicket:(e,{issueKey:t},A)=>(so(A),i.deleteCachedTicket(t)),addJiraComment:(e,{issueKey:t,content:A},r)=>(so(r),i.addComment(t,A)),assignJiraTicket:(e,{issueKey:t,accountId:A},r)=>(so(r),i.assignTicket(t,A??null)),transitionJiraTicket:(e,{issueKey:t,transitionId:A},r)=>(so(r),i.transitionTicket(t,A)),updateJiraTicket:(e,{input:t},A)=>(so(A),i.updateTicket(t))}},{Query:{githubSettings:(e,t,A)=>(lw(A),n.getSettings()),githubAppSettings:(e,t,A)=>(lw(A),n.getAppSettings()),githubRepositories:(e,t,A)=>(lw(A),n.listRepositories()),githubAvailableRepositories:(e,{after:t},A)=>(lw(A),n.availableRepositories(t)),githubActionsWorkflowRuns:(e,{codebaseRepositoryId:t,branch:A,workflowId:r,first:i,after:a},s)=>(lw(s),n.actionsWorkflowRuns(t,i??25,a,A,r)),githubActionsWorkflowJobs:(e,{codebaseRepositoryId:t,workflowRunId:A},r)=>(lw(r),n.actionsWorkflowJobs(t,A)),githubActionsWorkflowRunAttempt:(e,{repositoryId:t,workflowRunId:A,attempt:r},i,a)=>(lw(i),n.actionsWorkflowRunAttempt(t,A,r,lS(a))),githubWorktreeWorkflowRuns:(e,{worktreeId:t},A)=>(lw(A),n.worktreeWorkflowRuns(t)),githubRepositoryWorkflows:(e,{codebaseRepositoryId:t},A)=>(lw(A),n.repositoryWorkflows(t)),githubAutoRetryRules:(e,{codebaseRepositoryId:t,workflowRunId:A},r)=>(lw(r),n.autoRetryRules({codebaseRepositoryId:t,workflowRunId:A})),githubPullRequests:(e,{scope:t,repositoryId:A,state:r,first:i,after:a},s,o)=>(lw(s),n.pullRequests(t,A,{includePipelineJobs:lS(o),state:r??"OPEN",first:i??25,after:a})),githubPullRequest:(e,{owner:t,name:A,number:r},i)=>(lw(i),n.pullRequest(t,A,r)),githubPullRequestMergeOptions:(e,{owner:t,name:A,number:r},i)=>(lw(i),n.pullRequestMergeOptions(t,A,r)),githubReviewThreads:(e,t,A)=>(lw(A),n.reviewThreads())},Mutation:{saveGitHubSettings:(e,{input:t},A)=>(lw(A),n.saveSettings(t)),saveGitHubAppSettings:(e,{input:t},A)=>(lw(A),n.saveAppSettings(t,lB(A),A.requestOrigin)),testGitHubConnection:(e,t,A)=>(lw(A),n.testConnection()),testGitHubAppConnection:(e,t,A)=>(lw(A),n.testAppConnection(lB(A))),clearGitHubCredentials:(e,t,A)=>(lw(A),n.clearCredentials()),clearGitHubAppCredentials:(e,t,A)=>(lw(A),n.clearAppCredentials(lB(A))),addGitHubRepository:(e,{input:t},A)=>(lw(A),n.addRepository(t)),updateGitHubRepository:(e,{input:t},A)=>(lw(A),n.updateRepository(t)),removeGitHubRepository:(e,{id:t},A)=>(lw(A),n.removeRepository(t)),mergeGitHubPullRequest:async(e,{input:t},A)=>{lw(A);let r=await n.mergePullRequest(t),{owner:i,name:a}=li(`${t.owner}/${t.name}`);return l.invalidatePullRequestsForOrigin(`github.com/${i}/${a}`),r},createGitHubPullRequest:(e,{input:t},A)=>(lw(A),n.createPullRequest(t)),setGitHubPullRequestLabels:(e,{input:t},A)=>(lw(A),n.setPullRequestLabels(t)),retryGitHubPipeline:(e,{repositoryId:t,checkSuiteId:A},r)=>(lw(r),n.retryPipeline(t,A,lB(r))),retryGitHubWorkflowJob:(e,{repositoryId:t,checkSuiteId:A,jobId:r},i)=>(lw(i),n.retryWorkflowJob(t,A,r,lB(i))),cancelGitHubActionsWorkflowRun:(e,{codebaseRepositoryId:t,workflowRunId:A,force:r},i)=>(lw(i),n.cancelActionsWorkflowRun(t,A,r,lB(i))),saveGitHubAutoRetryRule:(e,{input:t},A)=>(lw(A),n.saveAutoRetryRule(t)),setGitHubAutoRetryRuleEnabled:(e,{id:t,enabled:A},r)=>(lw(r),n.setAutoRetryRuleEnabled(t,A)),deleteGitHubAutoRetryRule:(e,{id:t},A)=>(lw(A),n.deleteAutoRetryRule(t)),replyToGitHubReviewThread:(e,{threadId:t,body:A},r)=>(lw(r),n.replyToReviewThread(t,A)),setGitHubReviewThreadResolved:(e,{threadId:t,resolved:A},r)=>(lw(r),n.setReviewThreadResolved(t,A))}},{CcusageCollection:{aggregate:(e,{range:t="ALL"})=>(function(e,t,A=new Date){let r;if(null===t)return e;let i=new Date(A);i.setHours(0,0,0,0),i.setDate(i.getDate()-(t-1));let n=(r=e=>String(e).padStart(2,"0"),`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`),a=e.days.filter(e=>e.period>=n),s=st();return a.forEach(e=>sA(s,e)),{days:a,totals:s}})(e.aggregate,sn[t])},CcusageModelUsage:{unattributed:e=>e.unattributed??!1},Query:{ccusageCollection:async(e,{id:t},A)=>(sa(A),await a.initialize(),a.getCollection(t))},Mutation:{collectCcusage:async(e,{requestId:t},A)=>(sa(A),await a.initialize(),a.collect(t))},Subscription:{ccusageCollectionChanged:{subscribe:async(e,{id:t},A)=>(sa(A),await a.initialize(),a.subscribe(t)),resolve:e=>e}}},{DerivedDataDeletionHistory:{deletedAt:e=>e.deletedAt.toISOString()},Query:{derivedDataCollection:(e,{id:t},A)=>(ss(A),c.getCollection(t)),derivedDataDeletionHistory:(e,{first:t,after:A},r)=>(ss(r),c.history(t,A))},Mutation:{refreshDerivedData:(e,{requestId:t},A)=>(ss(A),c.refresh(t)),calculateDerivedDataSizes:(e,{collectionId:t,entryIds:A,requestId:r},i)=>(ss(i),c.calculateSizes(t,A,r)),deleteDerivedDataEntries:(e,{collectionId:t,entryIds:A,requestId:r,overrideProtection:i},n)=>(ss(n),c.deleteEntries(t,A,r,i)),setDerivedDataEntryLocked:(e,{collectionId:t,entryId:A,locked:r},i)=>(ss(i),c.setEntryLocked(t,A,r)),clearDerivedDataDeletionHistory:(e,t,A)=>(ss(A),c.clearHistory())},Subscription:{derivedDataCollectionChanged:{subscribe:(e,{id:t},A)=>(ss(A),c.subscribe(t)),resolve:e=>e}}},{CodebaseOverview:{repositories:e=>Array.isArray(e)?e:e.repositories??[]},CodebaseRepository:{quickActionWorkflows:async e=>(await ag()).workflow.findMany({where:{archivedAt:null,quickActionKind:{not:"NONE"},OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:e.id}}}]},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}}},orderBy:[{name:"asc"},{id:"asc"}]}),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},CodebaseSettings:{updatedAt:e=>e.updatedAt.toISOString()},Codebase:{lastCheckedAt:e=>lk(e.lastCheckedAt),lastFetchedAt:e=>lk(e.lastFetchedAt),lastFetchAttemptAt:e=>lk(e.lastFetchAttemptAt),localBranches:e=>{try{let t=JSON.parse(e.localBranchesJson);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}},remoteBranches:e=>{try{let t=JSON.parse(e.remoteBranchesJson);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}},createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),activeJob:e=>e.jobs?.[0]??null},AgentCodebaseRegistration:{canonicalOrigin:e=>e.repository.canonicalOrigin,keepBaseBranchUpToDate:e=>e.repository.keepBaseBranchUpToDate,worktrees:e=>e.worktrees??[],lastFetchedAt:e=>lk(e.lastFetchedAt),lastFetchAttemptAt:e=>lk(e.lastFetchAttemptAt)},Query:{codebaseOverview:async(e,t,A)=>(lv(A),s.overview()),codebaseRepository:(e,{id:t},A)=>(lv(A),s.repositoryDetail(t)),codebase:(e,{id:t},A)=>(lv(A),s.detail(t)),codebaseSettings:(e,t,A)=>(lv(A),s.settings()),agentCodebases:(e,t,A)=>s.agentCodebases(lb(A)),agentCodebaseConfiguration:(e,t,A)=>s.agentConfiguration(lb(A))},Mutation:{browseAgentDirectory:(e,{input:t},A)=>(lv(A),s.browse(t.agentId,t.path??null,t.requestId)),inspectAgentCodebase:(e,{input:t},A)=>(lv(A),s.inspect(t.agentId,t.folder,t.requestId)),confirmCodebase:(e,{input:t},A)=>(lv(A),s.confirm(t)),updateCodebaseRepository:(e,{input:t},A)=>(lv(A),s.updateRepository(t.id,t.name,t.description,t.jiraBranchRegex,t.keepBaseBranchUpToDate,t.skillGroupIds)),updateCodebaseSettings:(e,{input:t},A)=>(lv(A),s.updateSettings(t)),removeCodebase:(e,{id:t},A)=>(lv(A),s.removeCodebase(t)),refreshCodebases:(e,{input:t},A)=>(lv(A),s.runOperation(rN,t.codebaseIds,t.requestId)),fetchCodebases:(e,{input:t},A)=>(lv(A),s.runOperation(rT,t.codebaseIds,t.requestId)),inspectCodebaseGitState:(e,{input:t},A)=>(lv(A),s.inspectGitState(t.codebaseId,t.requestId)),inspectCodebaseStash:(e,{input:t},A)=>(lv(A),s.inspectStash(t.codebaseId,t.stashOid,t.requestId)),runCodebaseGitOperation:(e,{input:t},A)=>(lv(A),s.runGitOperation(t)),reportCodebaseStatuses:(e,{reports:t},A)=>s.report(lb(A),t)},Subscription:{codebaseOverviewChanged:{subscribe:(e,t,A)=>(lv(A),s.subscribe())}}},{Query:{externalMcpServers:(e,t,A)=>(lR(A),o.externalServers())},Mutation:{createExternalMcpServer:(e,{input:t},A)=>(lR(A),o.createExternalServer(t)),updateExternalMcpServer:(e,{id:t,input:A},r)=>(lR(r),o.updateExternalServer(t,A)),deleteExternalMcpServer:(e,{id:t},A)=>(lR(A),o.deleteExternalServer(t))}},{WorktreeLatestBuild:{destination:e=>JSON.parse(e.destinationJson),createdAt:e=>e.createdAt.toISOString()},Worktree:{lastCheckedAt:e=>lT(e.lastCheckedAt),missingAt:e=>lT(e.missingAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorktreeTag:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorktreeSettings:{updatedAt:e=>e.updatedAt.toISOString()},WorktreeMove:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>lT(e.finishedAt)},Query:{worktreeOverview:(e,t,A)=>(lN(A),l.overview()),hiddenWorktrees:(e,t,A)=>(lN(A),l.hidden()),worktreeSettings:(e,t,A)=>(lN(A),l.settings()),previewWorktreeTicketBranch:(e,{input:t},A)=>(lN(A),l.previewTicketBranch(t)),worktreeMove:(e,{id:t},A)=>(lN(A),l.getMove(t))},Mutation:{refreshWorktrees:(e,t,A)=>(lN(A),l.requestRefresh()),reportWorktrees:(e,{reports:t},A)=>l.report(lx(A),t),reportWorktreeActivity:(e,{input:t},A)=>l.reportActivity(lx(A),t),inspectWorktree:(e,{id:t,requestId:A},r)=>(lN(r),l.inspect(t,A)),inspectWorktreeDiff:(e,{input:t},A)=>(lN(A),l.inspectDiff(t.worktreeId,{scope:t.scope,path:t.path,previousPath:t.previousPath,commitSha:t.commitSha},t.requestId)),runWorktreeOperation:(e,{input:t},A)=>(lN(A),l.runOperation(t.worktreeId,t.operation,t.requestId)),createWorktree:(e,{input:t},A)=>(lN(A),l.createWorktree(t)),changeWorktreeBranch:(e,{input:t},A)=>(lN(A),l.changeWorktreeBranch(t)),moveWorktree:(e,{input:t},A)=>(lN(A),l.moveWorktree(t)),retryWorktreeMoveWithStash:(e,{id:t},A)=>(lN(A),l.retryWorktreeMoveWithStash(t)),cancelWorktreeMove:(e,{id:t},A)=>(lN(A),l.cancelWorktreeMove(t)),deleteWorktree:(e,{input:t},A)=>(lN(A),l.deleteWorktree(t)),updateWorktreeBaseBranch:(e,{id:t,baseBranch:A},r)=>(lN(r),l.updateBaseBranch(t,A??null)),updateWorktreeHighlight:(e,{id:t,color:A},r)=>(lN(r),l.updateHighlight(t,A??null)),setWorktreeTags:(e,{id:t,tagIds:A},r)=>(lN(r),l.setTags(t,A)),saveWorktreeTag:(e,{input:t},A)=>(lN(A),l.saveTag(t)),deleteWorktreeTag:(e,{id:t},A)=>(lN(A),l.deleteTag(t)),saveWorktreeSettings:(e,{editorVariant:t},A)=>(lN(A),l.saveSettings(t)),purgeHiddenWorktree:(e,{id:t},A)=>(lN(A),l.purge(t)),purgeAllHiddenWorktrees:(e,t,A)=>(lN(A),l.purgeAll())},Subscription:{worktreeOverviewChanged:{subscribe:(e,t,A)=>(lN(A),l.subscribe())},worktreeInspectionChanged:{subscribe:(e,{worktreeId:t},A)=>(lN(A),l.subscribeInspection(t))}}},{CodebaseRepository:{skillGroups:e=>u.groupsForRepository(e.id)},Skill:{groups:e=>e.groups?.map(e=>e.group)??[],createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillFile:{contentsBase64:e=>Buffer.from(e.contents).toString("base64"),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillGroup:{skills:e=>e.skills?.map(e=>e.skill)??[],repositories:e=>e.repositories?.map(e=>e.repository)??[],createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillSettings:{updatedAt:e=>e.updatedAt.toISOString()},SkillToolObservation:{checkedAt:e=>e.checkedAt.toISOString()},SkillInstallation:{consumers:e=>{try{return JSON.parse(e.consumersJson)}catch{return[]}},lastSeenAt:e=>e.lastSeenAt.toISOString()},SkillSyncItem:{candidatePackage:e=>{try{return e.candidatePackageJson?JSON.parse(e.candidatePackageJson):null}catch{return null}},createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillSyncRun:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>{let t;return t=e.finishedAt,t?.toISOString()??null}},Query:{skillsOverview:(e,{search:t},A)=>(lM(A),u.overview(t??"")),skill:(e,{id:t},A)=>(lM(A),u.getSkill(t)),skillSyncRun:(e,{id:t},A)=>(lM(A),u.getRun(t))},Mutation:{saveSkill:(e,{input:t},A)=>(lM(A),u.saveSkill(t)),deleteSkill:(e,{id:t},A)=>(lM(A),u.deleteSkill(t)),saveSkillGroup:(e,{input:t},A)=>(lM(A),u.saveGroup(t)),deleteSkillGroup:(e,{id:t},A)=>(lM(A),u.deleteGroup(t)),saveSkillSettings:(e,{input:t},A)=>(lM(A),u.saveSettings(t)),prepareSkillSync:(e,{kind:t,groupId:A},r)=>(lM(r),u.prepareSync(t,A??null)),skipPendingSkillSync:(e,{runId:t},A)=>(lM(A),u.skipPending(t)),resolveSkillSyncItem:(e,{input:t},A)=>{var r;return lM(A),u.resolveItem({...t,package:t.package?iT({...r=t.package,packageHash:r.packageHash||iD(r.files)}):null})},applySkillSync:(e,{runId:t},A)=>(lM(A),u.applyRun(t))},Subscription:{skillsChanged:{subscribe:(e,t,A)=>(lM(A),u.subscribe()),resolve:()=>u.overview()},skillSyncRunChanged:{subscribe:(e,{runId:t},A)=>(lM(A),u.subscribeRun(t)),resolve:(e,{runId:t})=>u.getRun(t)}}},{CodebaseProject:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildConfiguration:{advancedSettings:e=>lL(e.advancedSettingsJson,{}),exportSettings:e=>e.exportSettingsJson?lL(e.exportSettingsJson,null):null,observation:e=>e.source?.observations?.[0]??null,createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildSourceObservation:{schemes:e=>lL(e.schemesJson,[]),configurations:e=>lL(e.configurationsJson,[]),testPlans:e=>lL(e.testPlansJson,[]),lastParseAttemptAt:e=>e.lastParseAttemptAt.toISOString(),lastParsedAt:e=>l_(e.lastParsedAt)},BuildScript:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildArtifact:{metadata:e=>lL(e.metadataJson,{}),createdAt:e=>e.createdAt.toISOString()},BuildReport:{summary:e=>lL(e.summaryJson,{}),data:async e=>lL("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{}),testSummary:e=>"TEST_RESULTS"===e.kind&&"READY"===e.status?lL(e.summaryJson,{}):null,tests:async e=>{if("TEST_RESULTS"!==e.kind)return[];let t=lL("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.tests)?t.tests:[]},coverageSummary:e=>"CODE_COVERAGE"===e.kind&&"READY"===e.status?lL(e.summaryJson,{}):null,coverageFiles:async e=>{if("CODE_COVERAGE"!==e.kind)return[];let t=lL("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.files)?t.files:[]},changedCoverageFiles:async e=>{if("CODE_COVERAGE"!==e.kind)return[];let t=lL("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.changedFiles)?t.changedFiles:[]},build:e=>e.build??d.getBuild(e.buildId),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>l_(e.finishedAt)},BuildDeployment:{destination:e=>lL(e.destinationJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>l_(e.startedAt),finishedAt:e=>l_(e.finishedAt)},BuildExport:{settings:e=>lL(e.settingsSnapshotJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>l_(e.startedAt),finishedAt:e=>l_(e.finishedAt)},Build:{reports:e=>e.reports??d.reportsForBuild(e.id),destination:e=>lL(e.destinationJson,{}),snapshot:e=>lL(e.snapshotJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>l_(e.startedAt),finishedAt:e=>l_(e.finishedAt),updatedAt:e=>e.updatedAt.toISOString(),durationMs:e=>e.startedAt&&e.finishedAt?Math.max(0,e.finishedAt.getTime()-e.startedAt.getTime()):null,outOfDate:lF},BuildLogChunk:{createdAt:e=>e.createdAt instanceof Date?e.createdAt.toISOString():e.createdAt},Query:{iosAppProject:(e,{codebaseId:t},A)=>(lU(A),d.project(t)),buildSigningOptions:(e,{buildId:t},A)=>(lU(A),d.signingOptionsForBuild(t)),buildScripts:(e,t,A)=>(lU(A),d.scripts()),builds:(e,t,A)=>(lU(A),d.builds(t)),build:(e,{id:t},A)=>(lU(A),d.getBuild(t)),buildLogChunks:(e,t,A)=>(lU(A),d.logChunks(t.buildId,t.after,t.first)),worktreeCoverageReports:(e,{worktreeId:t},A)=>(lU(A),d.coverageHistory(t))},Mutation:{createIosAppProject:(e,{codebaseId:t},A)=>(lU(A),d.createProject(t)),saveBuildConfiguration:(e,{input:t},A)=>(lU(A),d.saveConfiguration(t)),deleteBuildConfiguration:(e,{id:t},A)=>(lU(A),d.deleteConfiguration(t)),discoverBuildSources:(e,t,A)=>(lU(A),d.discoverSources(t.worktreeId,t.requestId)),inspectBuildSource:(e,{input:t},A)=>(lU(A),d.inspectSource(t)),reparseBuildConfiguration:(e,t,A)=>(lU(A),d.reparse(t.configurationId,t.worktreeId,t.requestId)),inspectBuildDestinations:(e,{input:t},A)=>(lU(A),d.destinations(t)),inspectBuildRunDestinations:(e,t,A)=>(lU(A),d.destinationsForBuild(t.buildId,t.requestId)),saveBuildScript:(e,{input:t},A)=>(lU(A),d.saveScript(t)),deleteBuildScript:(e,{id:t},A)=>(lU(A),d.deleteScript(t)),setCodebaseBuildScripts:(e,t,A)=>(lU(A),d.setAllowedScripts(t.codebaseId,t.scriptIds)),startBuild:(e,{input:t},A)=>(lU(A),d.startBuild({...t,telemetryRequestOrigin:A.requestOrigin})),rebuildBuild:(e,{id:t,requestId:A},r)=>(lU(r),d.rebuildBuild(t,A,r.requestOrigin)),cancelBuild:(e,{id:t},A)=>(lU(A),d.cancelBuild(t)),deleteBuilds:(e,{ids:t},A)=>(lU(A),d.deleteBuilds(t)),runBuild:(e,{input:t},A)=>(lU(A),d.runBuild(t)),exportBuildArchive:(e,{input:t},A)=>(lU(A),d.exportArchive(t)),parseBuildTestResults:(e,t,A)=>(lU(A),d.generateReport(t.buildId,"TEST_RESULTS",t.requestId)),generateBuildCoverageReport:(e,t,A)=>(lU(A),d.generateReport(t.buildId,"CODE_COVERAGE",t.requestId)),startWorktreeCoverage:(e,{input:t},A)=>(lU(A),d.startWorktreeCoverage({...t,telemetryRequestOrigin:A.requestOrigin})),reportBuildProgress:(e,{input:t},A)=>d.reportProgress(lH(A),t),appendBuildLogChunks:(e,{buildId:t,chunks:A},r)=>d.appendLogChunks(lH(r),t,A)},Subscription:{buildsChanged:{subscribe:(e,t,A)=>(lU(A),af.iterate(av))},buildChanged:{subscribe:(e,{id:t},A)=>(lU(A),af.iterate(aV(t)))},buildLogChunkAdded:{subscribe:(e,{buildId:t},A)=>(lU(A),af.iterate(a$(t)))}}},{IosDevice:lJ,IosDeviceSummary:lJ,IosDeviceEnrollment:{expiresAt:e=>e.expiresAt.toISOString(),downloadedAt:e=>lP(e.downloadedAt),consumedAt:e=>lP(e.consumedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},IosDeviceIpObservation:{observedAt:e=>e.observedAt.toISOString()},Query:{iosDevices:(e,{status:t},A)=>(lG(A),h.devices(t)),iosDevice:(e,{id:t},A)=>(lG(A),h.device(t)),iosDeviceFirmware:(e,{id:t},A)=>(lG(A),h.deviceFirmware(t)),iosDeviceSettings:(e,t,A)=>(lG(A),h.getSettings())},Mutation:{renameIosDevice:(e,{id:t,displayName:A},r)=>(lG(r),h.renameDevice(t,A)),rejectIosDevice:(e,{id:t},A)=>(lG(A),h.rejectDevice(t)),deleteIosDevice:(e,{id:t},A)=>(lG(A),h.deleteDevice(t)),registerIosDevice:(e,{id:t},A)=>(lG(A),h.registerDevice(t)),saveIosProfileSettings:(e,{input:t},A)=>(lG(A),h.saveProfileSettings(t)),regenerateIosProfileSigner:(e,t,A)=>(lG(A),h.regenerateProfileSignerView()),saveAppStoreConnectSettings:(e,{input:t},A)=>(lG(A),h.saveAppStoreConnectSettings(t)),testAppStoreConnectSettings:(e,t,A)=>(lG(A),h.testAppStoreConnectSettings()),clearAppStoreConnectSettings:(e,t,A)=>(lG(A),h.clearAppStoreConnectSettings())},Subscription:{iosDevicesChanged:{subscribe:(e,t,A)=>(lG(A),h.subscribe()),resolve:e=>e}}},{Query:{telemetryTimeline:(e,{input:t},A)=>(lY(A),p.timeline(t)),telemetryEntries:(e,{ids:t},A)=>(lY(A),p.entries(t)),telemetryFacets:(e,{view:t},A)=>(lY(A),p.facets(t)),telemetryFields:(e,{view:t},A)=>(lY(A),p.fields(t)),telemetrySettings:(e,{requestOrigin:t},A)=>(lY(A),p.settings(lj(t))),telemetryViewSettings:(e,{view:t},A)=>(lY(A),p.viewSettings(t)),telemetryColumnPresets:(e,{view:t},A)=>(lY(A),p.columnPresets(t)),telemetrySavedFilters:(e,{view:t},A)=>(lY(A),p.savedFilters(t))},Mutation:{saveTelemetrySettings:(e,{input:t,requestOrigin:A},r)=>(lY(r),p.saveSettings(t,lj(A))),saveTelemetryViewSettings:(e,{input:t},A)=>(lY(A),p.saveViewSettings(t)),saveTelemetryColumnPreset:(e,{input:t},A)=>(lY(A),p.saveColumnPreset(t)),deleteTelemetryColumnPreset:(e,{id:t},A)=>(lY(A),p.deleteColumnPreset(t)),saveTelemetryFilter:(e,{input:t},A)=>(lY(A),p.saveFilter(t)),deleteTelemetryFilter:(e,{id:t},A)=>(lY(A),p.deleteFilter(t)),addTelemetrySeparator:(e,{name:t},A)=>(lY(A),p.addSeparator(t)),updateTelemetryHighlight:(e,{id:t,color:A},r)=>(lY(r),p.highlight(t,A??null)),clearSelectedTelemetry:(e,{selection:t},A)=>(lY(A),p.clearSelected(t)),clearTelemetry:(e,{view:t,includeSeparators:A},r)=>(lY(r),p.clearAll(t,A)),clearTelemetryBeforeLatestSeparator:(e,{view:t},A)=>(lY(A),p.clearBeforeLatestSeparator(t))},Subscription:{telemetryEntriesChanged:{subscribe:(e,t,A)=>(lY(A),p.subscribe()),resolve:e=>e},telemetrySettingsChanged:{subscribe:(e,t,A)=>(lY(A),p.subscribeSettings()),resolve:e=>e}}},{LocalSigningProfile:{provisionedDevices:e=>g.profileDevices(e.deviceUdids)},SigningOperation:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>l$(e.finishedAt)},SigningOperationItem:{createdAt:e=>e.createdAt.toISOString(),finishedAt:e=>l$(e.finishedAt)},Query:{signingAgents:(e,t,A)=>(lV(A),g.agents()),signingProfiles:(e,t,A)=>(lV(A),g.profiles()),signingProfile:(e,{id:t},A)=>(lV(A),g.profile(t)),signingCertificates:(e,t,A)=>(lV(A),g.certificates()),signingOperations:(e,{limit:t},A)=>(lV(A),g.operations(t)),appleDeveloperInventory:(e,t,A)=>(lV(A),g.portalInventory())},Mutation:{refreshSigningAssets:(e,{agentIds:t},A)=>(lV(A),g.refresh(t??void 0)),uploadSigningProfile:(e,t,A)=>(lV(A),g.uploadProfile(t.contentBase64,t.targetAgentIds)),downloadSigningProfile:(e,t,A)=>(lV(A),g.downloadProfile(t.uuid,t.agentId)),syncSigningProfile:(e,t,A)=>(lV(A),g.syncProfile(t.uuid,t.sourceAgentId,t.targetAgentIds)),deleteSigningProfile:(e,t,A)=>(lV(A),g.deleteProfile(t.uuid,t.agentIds)),deleteExpiredSigningProfiles:(e,{agentIds:t},A)=>(lV(A),g.deleteExpiredProfiles(t??void 0)),importSigningIdentity:(e,t,A)=>(lV(A),g.importIdentity(t)),deleteSigningIdentity:(e,t,A)=>(lV(A),g.deleteIdentity(t.sha1,t.agentIds)),createApplePortalProfile:(e,{input:t},A)=>(lV(A),g.createPortalProfile(t)),deleteApplePortalProfile:(e,{id:t},A)=>(lV(A),g.deletePortalProfile(t)),revokeApplePortalCertificate:(e,{id:t},A)=>(lV(A),g.revokePortalCertificate(t))},Subscription:{signingAssetsChanged:{subscribe:(e,t,A)=>(lV(A),g.subscribe()),resolve:()=>!0}}},{ApnsRegistration:{...cs,tokenMasked:e=>e.tokenMasked??(e.token?`${e.token.slice(0,8)}…${e.token.slice(-8)}`:"—"),supportedPushTypes:e=>e.supportedPushTypes??(e.pushTypesJson?JSON.parse(e.pushTypesJson):[]),pushMagicConfigured:e=>!!e.pushMagic,invalidatedAt:e=>ca(e.invalidatedAt),lastFailureAt:e=>ca(e.lastFailureAt),lastRegisteredAt:e=>e.lastRegisteredAt.toISOString(),lastSentAt:e=>ca(e.lastSentAt)},ApnsCertificateCredential:{...cs,expiresAt:e=>ca(e.expiresAt),lastTestedAt:e=>ca(e.lastTestedAt)},PushNotificationSettings:{updatedAt:e=>e.updatedAt.toISOString(),tokenConfiguredAt:e=>ca(e.tokenConfiguredAt),tokenLastUsedAt:e=>ca(e.tokenLastUsedAt)},ApnsBroadcastChannel:cs,PushNotificationPreset:{...cs,editor:e=>JSON.parse(e.editorJson)},PushNotificationBatch:{...cs,editor:e=>JSON.parse(e.editorJson),payload:e=>JSON.parse(e.payloadJson),headers:e=>JSON.parse(e.headersJson),startedAt:e=>ca(e.startedAt),finishedAt:e=>ca(e.finishedAt)},PushNotificationDelivery:{createdAt:e=>e.createdAt.toISOString(),startedAt:e=>ca(e.startedAt),finishedAt:e=>ca(e.finishedAt),responseTimestamp:e=>ca(e.responseTimestamp)},Query:{apnsRegistrations:(e,t,A)=>(cn(A),E.registrations()),pushNotificationSettings:(e,t,A)=>(cn(A),E.settings()),apnsBroadcastChannels:(e,t,A)=>(cn(A),E.channels()),pushNotificationPresets:(e,t,A)=>(cn(A),E.presets()),pushNotificationHistory:(e,{limit:t},A)=>(cn(A),E.history(t)),validatePushNotification:(e,{editor:t},A)=>(cn(A),l8(t))},Mutation:{renameApnsRegistration:(e,t,A)=>(cn(A),E.renameRegistration(t.id,t.displayName)),setApnsRegistrationActive:(e,t,A)=>(cn(A),E.setRegistrationActive(t.id,t.active)),deleteApnsRegistration:(e,{id:t},A)=>(cn(A),E.deleteRegistration(t)),saveApnsTokenSettings:(e,{input:t},A)=>(cn(A),E.saveTokenSettings(t)),clearApnsTokenSettings:(e,t,A)=>(cn(A),E.clearTokenSettings()),addApnsCertificateCredential:(e,{input:t},A)=>(cn(A),E.addCertificateCredential(t)),retestApnsCertificateCredential:(e,{id:t},A)=>(cn(A),E.retestCertificateCredential(t)),deleteApnsCertificateCredential:(e,{id:t},A)=>(cn(A),E.deleteCertificateCredential(t)),createApnsBroadcastChannel:(e,{input:t},A)=>(cn(A),E.createChannel(t)),deleteApnsBroadcastChannel:(e,{id:t},A)=>(cn(A),E.deleteChannel(t)),savePushNotificationPreset:(e,t,A)=>(cn(A),E.savePreset(t.name,t.editor,t.id)),deletePushNotificationPreset:(e,{id:t},A)=>(cn(A),E.deletePreset(t)),savePushNotificationDraft:(e,{editor:t},A)=>(cn(A),E.saveDraft(t)),sendPushNotification:(e,{input:t},A)=>(cn(A),E.send(t)),resendPushNotification:(e,t,A)=>(cn(A),E.resend(t.id,t.requestId)),deletePushNotificationHistory:(e,{id:t},A)=>(cn(A),E.deleteHistory(t)),clearPushNotificationHistory:(e,t,A)=>(cn(A),E.clearHistory())},Subscription:{pushNotificationsChanged:{subscribe:(e,t,A)=>(cn(A),E.subscribe()),resolve:()=>!0}}},{Query:{cacheServerSettings:(e,t,A)=>(lD(A),I.getSettings()),cacheEntries:(e,t,A)=>(lD(A),I.listCacheEntries(t)),cacheEntryDetail:(e,{id:t},A)=>(lD(A),I.getCacheEntryDetail(t)),cacheStorageLocation:(e,{id:t},A)=>(lD(A),I.getStorageLocation(t)),cacheEntryMatch:(e,t,A)=>(lD(A),I.matchCacheEntry(t))},Mutation:{saveCacheServerSettings:(e,{input:t},A)=>(lD(A),I.saveSettings(t)),testCacheServerConnection:(e,t,A)=>(lD(A),I.testConnection()),clearCacheServerSettings:(e,t,A)=>(lD(A),I.clearSettings()),deleteCacheEntry:(e,{id:t},A)=>(lD(A),I.deleteCacheEntry(t)),deleteCacheEntriesByIds:(e,{ids:t},A)=>(lD(A),I.deleteCacheEntriesByIds(t)),deleteCacheEntries:(e,t,A)=>(lD(A),I.deleteCacheEntries(t)),deleteCacheStorageLocation:(e,{id:t},A)=>(lD(A),I.deleteStorageLocation(t))}},{CredentialStorageType:{DATABASE:"database",VAULT:"vault",KEYCHAIN:"keychain",UNKNOWN:"unknown"},Query:{credentialStoreStatus:(e,t,A)=>(co(A),f.status()),credentials:(e,t,A)=>(co(A),f.list())}},{AppNotification:{sidebarDismissedAt:e=>cc(e.sidebarDismissedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},NotificationPreference:{updatedAt:e=>cc(e.updatedAt)},WebPushSubscription:{expirationTime:e=>cc(e.expirationTime),lastSeenAt:e=>e.lastSeenAt.toISOString(),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},Query:{notifications:(e,t,A)=>(cl(A),m.history(t)),sidebarNotifications:(e,{limit:t},A)=>(cl(A),m.sidebar(t??void 0)),notificationPreferences:(e,t,A)=>(cl(A),m.preferences()),webPushState:(e,t,A)=>(cl(A),m.webPushState()),webPushSubscriptions:(e,t,A)=>(cl(A),m.webPushSubscriptions())},Mutation:{saveNotificationPreference:(e,{input:t},A)=>(cl(A),m.savePreference(t)),dismissNotification:(e,{id:t},A)=>(cl(A),m.dismiss(t)),dismissAllSidebarNotifications:(e,t,A)=>(cl(A),m.dismissAll()),deleteNotifications:(e,{selection:t},A)=>(cl(A),m.deleteSelection(t)),deleteAllNotifications:(e,t,A)=>(cl(A),m.deleteAll()),prepareWebPush:async(e,t,A)=>(cl(A),await m.prepareWebPush(),m.webPushState()),registerWebPushSubscription:async(e,{input:t},A)=>(cl(A),await m.registerWebPush(t),m.webPushState()),unregisterWebPushSubscription:(e,{endpoint:t},A)=>(cl(A),m.unregisterWebPush(t)),deleteWebPushSubscription:(e,{id:t},A)=>(cl(A),m.deleteWebPushSubscription(t)),testWebPushSubscription:(e,{id:t},A)=>(cl(A),m.testWebPushSubscription(t))},Subscription:{notificationsChanged:{subscribe:(e,t,A)=>(cl(A),m.subscribe())}}},{Query:{pollingOperations:(e,t,A)=>(cu(A),C.list())},Subscription:{pollingOperationChanged:{subscribe:(e,t,A)=>(cu(A),C.subscribe())}}},{AgentRun:{catalogCost:async e=>{await y.ensureFresh();let t=e.modelUsage?.length?e.modelUsage:[e],A=await y.lookup(t.map(({model:e})=>e)),r=0,i=!1;for(let e of t){let t=y.estimate(A.get(e.model),e);null!==t&&(r+=t,i=!0)}return i?r:null}},RunModelUsage:{catalogCost:async e=>{await y.ensureFresh();let t=await y.lookup([e.model]);return y.estimate(t.get(e.model),e)}},Query:{modelCostCatalog:async(e,t,A)=>(cE(A),await y.ensureFresh(),y.getCatalog()),modelCostEntries:(e,t,A)=>(cE(A),y.listEntries(t))},Mutation:{saveModelCostSettings:(e,{catalogUrl:t},A)=>(cE(A),y.saveSettings(t??null)),refreshModelCosts:(e,t,A)=>(cE(A),y.refresh())}},{AgentRun:{archivedAt:e=>cp(e.archivedAt),nativeArchivedAt:e=>cp(e.nativeArchivedAt),startedAt:e=>cp(e.startedAt),finishedAt:e=>cp(e.finishedAt),pricingUpdatedAt:e=>cp(e.pricingUpdatedAt),playedAt:e=>cp(e.playedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},RunAttempt:{startedAt:e=>e.startedAt.toISOString(),finishedAt:e=>cp(e.finishedAt),supersededAt:e=>cp(e.supersededAt)},RunInput:{createdAt:e=>e.createdAt.toISOString()},RunAttachment:{downloadPath:e=>`/api/run-attachments/${encodeURIComponent(e.id)}`,createdAt:e=>e.createdAt.toISOString()},RunEvent:{raw:e=>cg(e.rawJson),createdAt:e=>e.createdAt.toISOString(),supersededAt:e=>cp(e.supersededAt)},RunToolCall:{input:e=>cg(e.inputJson),output:e=>cg(e.outputJson),startedAt:e=>e.startedAt.toISOString(),finishedAt:e=>cp(e.finishedAt),supersededAt:e=>cp(e.supersededAt)},RunAnswerRevision:{answers:e=>JSON.parse(e.answersJson),createdAt:e=>e.createdAt.toISOString(),supersededAt:e=>cp(e.supersededAt)},RunQuestionBatch:{createdAt:e=>e.createdAt.toISOString(),answeredAt:e=>cp(e.answeredAt),supersededAt:e=>cp(e.supersededAt),revisionPreparedAt:e=>cp(e.revisionPreparedAt)},RunCheckpoint:{createdAt:e=>e.createdAt.toISOString()},RunDraft:{archivedAt:e=>cp(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},RunCommand:{payload:e=>JSON.parse(e.payloadJson),createdAt:e=>e.createdAt.toISOString(),claimedAt:e=>cp(e.claimedAt),finishedAt:e=>cp(e.finishedAt)},RunProviderImportStatus:{catalog:e=>cg(e.catalogJson),lastStartedAt:e=>cp(e.lastStartedAt),lastCompletedAt:e=>cp(e.lastCompletedAt),updatedAt:e=>e.updatedAt.toISOString()},Query:{agentRuns:(e,t,A)=>(cd(A),Q.list(t)),agentRun:(e,{id:t},A)=>(cd(A),Q.get(t)),runEvents:(e,t,A)=>(cd(A),Q.events(t)),runQuestionBatches:(e,t,A)=>(cd(A),Q.questions(t)),runUsage:(e,{runId:t},A)=>(cd(A),Q.usage(t)),runNativeSessionFile:(e,{runId:t},A)=>(cd(A),Q.nativeSessionFile(t)),runLinkedItems:(e,{runId:t},A)=>(cd(A),Q.linkedItems(t)),runDrafts:(e,t,A)=>(cd(A),Q.drafts(t)),runDraft:(e,{id:t},A)=>(cd(A),Q.draft(t)),runProviderCatalog:(e,t,A)=>(cd(A),Q.providerCatalog(t)),runProviderImportStatus:(e,t,A)=>(cd(A),Q.providerImportStatus()),pendingRunCommands:(e,t,A)=>Q.pendingCommands(ch(A))},Mutation:{createAgentRun:(e,{input:t},A)=>(cd(A),Q.create(t)),playPlan:(e,{planId:t},A)=>(cd(A),Q.playPlan(t)),createRunFollowUp:(e,{sourceId:t,input:A},r)=>(cd(r),Q.followUp(t,A)),saveRunDraft:(e,{input:t},A)=>(cd(A),Q.saveDraft(t)),archiveAgentRuns:(e,{ids:t,archived:A},r)=>(cd(r),Q.archive(t,A)),deleteAgentRuns:(e,{ids:t},A)=>(cd(A),Q.deleteRuns(t)),archiveRunDrafts:(e,{ids:t,archived:A},r)=>(cd(r),Q.archiveDrafts(t,A)),deleteRunDrafts:(e,{ids:t},A)=>(cd(A),Q.deleteDrafts(t)),pauseAgentRun:(e,{id:t},A)=>(cd(A),Q.lifecycle(t,"PAUSE")),continueAgentRun:(e,{id:t},A)=>(cd(A),Q.lifecycle(t,"CONTINUE")),cancelAgentRun:(e,{id:t},A)=>(cd(A),Q.lifecycle(t,"CANCEL")),steerAgentRun:(e,{id:t,prompt:A,attachmentIds:r},i)=>(cd(i),Q.steer(t,A,r)),answerRunQuestion:(e,{batchId:t,answers:A},r)=>(cd(r),Q.answerQuestion(t,A)),prepareRunAnswerRevision:(e,{batchId:t},A)=>(cd(A),Q.prepareAnswerRevision(t)),reviseRunAnswer:(e,{batchId:t,answers:A,stash:r,rollback:i},n)=>(cd(n),Q.reviseAnswer(t,A,!!r,!1!==i)),claimRunCommand:(e,{id:t},A)=>Q.claimCommand(ch(A),t),completeRunCommand:(e,{id:t,status:A,error:r},i)=>Q.completeCommand(ch(i),t,A,r),beginRunAttempt:(e,{runId:t,nativeId:A},r)=>Q.beginAttempt(ch(r),t,A),updateRunAttemptNativeId:(e,t,A)=>Q.updateAttemptNativeId(ch(A),t.attemptId,t.nativeId,t.providerVersion),appendRunEvents:(e,t,A)=>Q.appendEvents(ch(A),t.runId,t.attemptId??null,t.events),reportRunQuestion:(e,t,A)=>Q.reportQuestion(ch(A),t.runId,t.attemptId??null,t.nativeRequestId??null,t.eventSequence??null,t.questions),reportRunUsage:(e,t,A)=>Q.reportUsage(ch(A),t.runId,t.attemptId??null,t.input),finishRunAttempt:(e,t,A)=>Q.finishAttempt(ch(A),t.attemptId,t.input),reportRunCheckpoint:(e,t,A)=>Q.reportCheckpoint(ch(A),t.runId,t.attemptId??null,t.input),reportRunAnswerRevisionPreview:(e,t,A)=>Q.reportAnswerRevisionPreview(ch(A),t.batchId,t.rollbackPatch,t.pushedCommitWarning),applyRunAnswerRevision:(e,t,A)=>Q.applyAnswerRevision(ch(A),t.batchId,t.revisionId,t.replacementAttemptId),importProviderRuns:(e,{provider:t,runs:A},r)=>Q.importRuns(ch(r),t,A),reportRunProviderImportStatus:(e,t,A)=>Q.reportProviderImportStatus(ch(A),t.provider,t.status,t.error,t.catalog)},Subscription:{agentRunsChanged:{subscribe:(e,t,A)=>(cd(A),Q.subscribeRuns()),resolve:e=>Q.get(e.runChanged.id)},agentRunChanged:{subscribe:(e,{runId:t},A)=>(cd(A),Q.subscribeRun(t)),resolve:e=>Q.get(e.runChanged.id)},runEventAdded:{subscribe:(e,{runId:t},A)=>(cd(A),Q.subscribeEvents(t))},runQuestionChanged:{subscribe:(e,{runId:t},A)=>(cd(A),Q.subscribeQuestions(t)),resolve:e=>Q.questionBatch(e.runQuestionChanged.id)}}},{Workflow:{draftDefinition:e=>JSON.parse(e.draftDefinitionJson),versionCount:e=>e._count?.versions??e.versions?.length??0,runCount:e=>e._count?.runs??0,quickActionRepositories:e=>e.quickActionRepositories?.map(({repository:e})=>e)??[],triggerChoices:(e,{resourceKind:t})=>{if(!e.activeVersion)return[];let A=t?.trim().toUpperCase()??null,r=yO(JSON.parse(e.activeVersion.definitionJson)).triggers.find(e=>e.kind===(A?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE")&&(!A||yc(e.config)===A));return r?yo(r.config):[]},hasPlainTrigger:(e,{resourceKind:t})=>{if(!e.activeVersion)return!1;let A=t?.trim().toUpperCase()??null;return yO(JSON.parse(e.activeVersion.definitionJson)).triggers.some(e=>e.kind===(A?"RESOURCE_MANUAL":"MANUAL")&&(!A||yc(e.config)===A))},archivedAt:e=>yj(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowVersion:{definition:e=>JSON.parse(e.definitionJson),publishedAt:e=>e.publishedAt.toISOString(),createdAt:e=>e.createdAt.toISOString()},WorkflowTrigger:{config:e=>JSON.parse(e.configJson),createdAt:e=>e.createdAt.toISOString()},WorkflowRun:{triggerPayload:e=>JSON.parse(e.triggerPayloadJson),sessionData:e=>JSON.parse(e.sessionDataJson),worktree:e=>w.runWorktree(e.sessionDataJson),attemptCount:e=>e._count?.attempts??e.attempts?.length??0,eventCount:e=>e._count?.events??e.events?.length??0,queuedAt:e=>e.queuedAt.toISOString(),startedAt:e=>yj(e.startedAt),pausedAt:e=>yj(e.pausedAt),finishedAt:e=>yj(e.finishedAt),archivedAt:e=>yj(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowStepAttempt:{input:e=>yV(e.inputJson),output:e=>yV(e.outputJson),requiredPaths:e=>JSON.parse(e.requiredPathsJson),providedPaths:e=>JSON.parse(e.providedPathsJson),startedAt:e=>yj(e.startedAt),finishedAt:e=>yj(e.finishedAt),supersededAt:e=>yj(e.supersededAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowWait:{predicate:e=>yV(e.predicateJson),result:e=>yV(e.resultJson),resumeAfter:e=>yj(e.resumeAfter),timeoutAt:e=>yj(e.timeoutAt),createdAt:e=>e.createdAt.toISOString(),resolvedAt:e=>yj(e.resolvedAt),updatedAt:e=>e.updatedAt.toISOString()},WorkflowRunEvent:{detail:e=>yV(e.detailJson),createdAt:e=>e.createdAt.toISOString()},WorkflowRunResourceLink:{metadata:e=>yV(e.metadataJson),createdAt:e=>e.createdAt.toISOString()},Query:{workflows:(e,t,A)=>(yY(A),w.list(t)),workflow:(e,{id:t},A)=>(yY(A),w.get(t)),workflowVersion:(e,{id:t},A)=>(yY(A),w.version(t)),workflowCatalog:(e,t,A)=>(yY(A),w.catalog()),validateWorkflowDraft:(e,{id:t},A)=>(yY(A),w.validateDraft(t)),workflowRuns:(e,t,A)=>(yY(A),w.runs(t)),workflowRun:(e,{id:t},A)=>(yY(A),w.run(t)),workflowRunEvents:(e,t,A)=>(yY(A),w.runEvents(t.runId,t.afterSequence,t.first)),workflowRunsForResource:(e,t,A)=>(yY(A),w.runsForResource(t.kind,t.resourceId)),workflowsAcceptingResource:(e,{kind:t},A)=>(yY(A),w.acceptingResource(t)),workflowQuickActions:(e,t,A)=>(yY(A),w.quickActions(t)),exportWorkflow:(e,{id:t,versionId:A},r)=>(yY(r),w.export(t,A)),prepareWorkflowReplay:(e,t,A)=>(yY(A),w.prepareReplay(t.runId,t.nodeId)),workflowJobSecrets:(e,{jobId:t},A)=>w.jobSecrets(function(e){if(!e.agentId)throw Error("Agent authentication is required");return e.agentId}(A),t)},Mutation:{createWorkflow:(e,{input:t},A)=>(yY(A),w.create(t)),saveWorkflowDraft:(e,{input:t},A)=>(yY(A),w.saveDraft(t)),importWorkflow:(e,{input:t},A)=>(yY(A),w.import(t)),publishWorkflow:(e,{id:t},A)=>(yY(A),w.publish(t)),setWorkflowEnabled:(e,t,A)=>(yY(A),w.setEnabled(t.id,t.enabled)),setWorkflowQuickAction:(e,{input:t},A)=>(yY(A),w.setQuickAction(t)),archiveWorkflow:(e,t,A)=>(yY(A),w.archive(t.id,t.archived)),deleteWorkflow:(e,{id:t},A)=>(yY(A),w.delete(t)),archiveWorkflowRuns:(e,{ids:t,archived:A},r)=>(yY(r),w.archiveRuns(t,A)),deleteWorkflowRuns:(e,{ids:t},A)=>(yY(A),w.deleteRuns(t)),triggerWorkflow:(e,{input:t},A)=>(yY(A),w.trigger(t)),pauseWorkflowRun:(e,{id:t},A)=>(yY(A),w.lifecycle(t,"PAUSE")),resumeWorkflowRun:(e,{id:t},A)=>(yY(A),w.lifecycle(t,"RESUME")),cancelWorkflowRun:(e,{id:t},A)=>(yY(A),w.lifecycle(t,"CANCEL")),repairWorkflowRunData:(e,{id:t,patch:A},r)=>(yY(r),w.repairRunData(t,A)),answerWorkflowQuestion:(e,{batchId:t,answers:A},r)=>(yY(r),w.answerQuestion(t,A)),replayWorkflowRun:(e,t,A)=>(yY(A),w.replay(t.runId,t.nodeId,t))},Subscription:{workflowsChanged:{subscribe:(e,t,A)=>(yY(A),w.subscribeWorkflows()),resolve:e=>"runs"===e.workflowChanged.id?null:w.get(e.workflowChanged.id)},workflowRunChanged:{subscribe:(e,{runId:t},A)=>(yY(A),w.subscribeRun(t)),resolve:e=>w.run(e.workflowRunChanged.id)},workflowRunEventAdded:{subscribe:(e,{runId:t},A)=>(yY(A),w.subscribeRunEvents(t))},workflowQuestionChanged:{subscribe:(e,{runId:t},A)=>(yY(A),w.subscribeRunQuestions(t)),resolve:e=>w.questionBatch(e.workflowQuestionChanged.id)}}},{CommandDefinition:yK,CommandRun:{snapshot:e=>JSON.parse(e.snapshotJson),queuedAt:e=>e.queuedAt.toISOString(),startedAt:e=>yq(e.startedAt),finishedAt:e=>yq(e.finishedAt),nextRestartAt:e=>yq(e.nextRestartAt),...yK},CommandRunAttempt:{startedAt:e=>yq(e.startedAt),finishedAt:e=>yq(e.finishedAt),...yK},CommandRunOutputChunk:{attemptNumber:e=>e.attemptNumber??e.attempt?.attempt??1,createdAt:e=>"string"==typeof e.createdAt?e.createdAt:e.createdAt.toISOString()},Query:{commandDefinitions:(e,{includeArchived:t},A)=>(y$(A),B.listDefinitions(t)),commandDefinition:(e,{id:t},A)=>(y$(A),B.getDefinition(t)),commandRuns:(e,t,A)=>(y$(A),B.listRuns(t)),commandRun:(e,{id:t},A)=>(y$(A),B.getRun(t)),commandRunOutput:(e,t,A)=>(y$(A),B.listOutput(t.runId,t.afterAttempt,t.afterSequence,t.first)),eligibleCommandsForAgent:(e,{agentId:t},A)=>(y$(A),B.eligibleForAgent(t)),eligibleCommandsForWorktree:(e,{worktreeId:t},A)=>(y$(A),B.eligibleForWorktree(t))},Mutation:{createCommandDefinition:(e,{input:t},A)=>(y$(A),B.createDefinition(t)),updateCommandDefinition:(e,{id:t,input:A},r)=>(y$(r),B.updateDefinition(t,A)),archiveCommandDefinition:(e,t,A)=>(y$(A),B.archiveDefinition(t.id,t.archived)),startCommandRun:(e,{input:t},A)=>(y$(A),B.startRun(t)),startCustomCommandRun:(e,{input:t},A)=>(y$(A),B.startCustomRun(t)),terminateCommandRun:(e,{id:t},A)=>(y$(A),B.terminateRun(t)),rerunCommandRun:(e,{id:t},A)=>(y$(A),B.rerun(t)),archiveCommandRuns:(e,t,A)=>(y$(A),B.archiveRuns(t.ids,t.archived)),deleteCommandRuns:(e,{ids:t},A)=>(y$(A),B.deleteRuns(t)),appendCommandRunOutput:(e,t,A)=>B.appendOutput(function(e){if(!e.agentId)throw Error("Agent authentication is required");return e.agentId}(A),t.jobId,t.attemptId,t.chunks)},Subscription:{commandsChanged:{subscribe:(e,t,A)=>(y$(A),af.iterate(aM))},commandRunsChanged:{subscribe:(e,t,A)=>(y$(A),af.iterate(aO))},commandRunChanged:{subscribe:(e,{runId:t},A)=>(y$(A),af.iterate(aF(t))),resolve:e=>B.getRun(e.commandRunChanged.id)},commandRunOutputAdded:{subscribe:(e,{runId:t},A)=>(y$(A),af.iterate(aU(t)))}}},{Query:{diskSpaceSettings:(e,t,A)=>(yW(A),S.settings()),diskSpaceOverview:(e,t,A)=>(yW(A),S.overview()),agentDiskSpace:(e,{agentId:t},A)=>(yW(A),S.agentView(t)),sidebarStatus:(e,t,A)=>(yW(A),D.status()),agentDiskSpaceConfiguration:(e,t,A)=>S.configuration(yz(A))},Mutation:{updateDiskSpaceSettings:(e,{input:t},A)=>(yW(A),S.updateSettings(t)),setAgentDiskSpaceMonitoring:(e,{agentId:t,enabled:A},r)=>(yW(r),S.setMonitoring(t,A)),setAgentDiskSpacePressureMode:(e,{agentId:t,enabled:A},r)=>(yW(r),S.setManualPressureMode(t,A)),reportAgentDiskSpace:(e,{input:t},A)=>S.report(yz(A),t).then(()=>!0)},Subscription:{diskSpaceChanged:{subscribe:(e,t,A)=>(yW(A),S.subscribe()),resolve:e=>e.diskSpaceChanged},sidebarStatusChanged:{subscribe:(e,t,A)=>(yW(A),D.subscribe()),resolve:()=>!0}}}]),(0,As.buildSubgraphSchema)({typeDefs:yZ,resolvers:eC}));let eQ="true"===process.env.APOLLO_SANDBOX;this.server=new At({schema:this.schema,introspection:eQ,plugins:eQ?[(0,Aa.ApolloServerPluginLandingPageLocalDefault)({footer:!1})]:[(0,Aa.ApolloServerPluginLandingPageProductionDefault)({footer:!1})]})}async createContext(e=new Headers){let t;if(await this.initializeServer(),!this.services)throw Error("GraphQL services not initialized");let A=edG(e),r=await this.services.agentControlService.authenticate((t=A.get("authorization"),!t?.startsWith("Bearer ")?null:t.slice(7).trim()||null));return{prismaService:this.services.prismaService,agentControlService:this.services.agentControlService,agentId:r,ipAddress:A.get("x-forwarded-for")?.split(",")[0]?.trim()||null,requestOrigin:function(e,t=process.env){let A=t.PUBLIC_BASE_URL?.trim();if(A)try{let e=new URL(A);if("http:"===e.protocol||"https:"===e.protocol)return{origin:e.origin,secure:"https:"===e.protocol,loopback:ed_(e.hostname),source:"env"}}catch{}let r=edH(e,"x-forwarded-proto"),i=edH(e,"x-forwarded-host"),n=edH(e,"host");if(r&&(i??n)){let e=edL(`${r}:`,i??n,"forwarded");if(e)return e}if(i){let e=edL("http:",i,"forwarded");if(e)return e}return n?edL("http:",n,"host"):null}(A)?.origin??null}}async getSchema(){if(await this.initializeServer(),!this.schema)throw Error("GraphQL schema not properly initialized");return this.schema}async getServer(){if(await this.initializeServer(),!this.server)throw Error("GraphQL server not properly initialized");return this.server}},edJ=globalThis;async function edY(){if(edJ.agentWebSocketServer)return;if(edJ.agentWebSocketStartPromise)return edJ.agentWebSocketStartPromise;let e=function(e){let t=Number(e?.trim()||"3091");if(!Number.isInteger(t)||t<1||t>65535)throw Error(`Invalid AGENT_WS_PORT: ${e}`);return t}(process.env.AGENT_WS_PORT),t=process.env.AGENT_WS_HOSTNAME??process.env.HOSTNAME??"127.0.0.1",A=(async()=>{let A=await edP.getSchema(),r=new k.default({host:t,port:e,path:"/graphql"}),i=function(e,t,A=12e3){let r=function(e){let{schema:t,context:A,roots:r,validate:i,execute:n,subscribe:a,connectionInitWaitTimeout:s=3e3,onConnect:o,onDisconnect:l,onClose:c,onSubscribe:p,onOperation:g,onNext:b,onError:v,onComplete:k,jsonMessageReviver:R,jsonMessageReplacer:x}=e;return{opened(e,N){let T={connectionInitReceived:!1,acknowledged:!1,subscriptions:{},extra:N};if(e.protocol!==h)return e.close(E.SubprotocolNotAcceptable,"Subprotocol not acceptable"),async(e,t)=>{await c?.(T,e,t)};let M=s>0&&isFinite(s)?setTimeout(()=>{T.connectionInitReceived||e.close(E.ConnectionInitialisationTimeout,"Connection initialisation timeout")},s):null;return e.onMessage(async function(s){var l,c;let h;try{h=f("string"==typeof s?JSON.parse(s,R):s)}catch(t){return e.close(E.BadRequest,"Invalid message received")}switch(h.type){case I.ConnectionInit:{if(T.connectionInitReceived)return e.close(E.TooManyInitialisationRequests,"Too many initialisation requests");T.connectionInitReceived=!0,u(h.payload)&&(T.connectionParams=h.payload);let t=await o?.(T);if(!1===t)return e.close(E.Forbidden,"Forbidden");T.acknowledged=!0,await e.send(m(u(t)?{type:I.ConnectionAck,payload:t}:{type:I.ConnectionAck},x));return}case I.Ping:if(e.onPing)return await e.onPing(h.payload);await e.send(m(h.payload?{type:I.Pong,payload:h.payload}:{type:I.Pong}));return;case I.Pong:return await e.onPong?.(h.payload);case I.Subscribe:{if(!T.acknowledged)return e.close(E.Unauthorized,"Unauthorized");let{id:s,payload:o}=h;if(s in T.subscriptions)return e.close(E.SubscriberAlreadyExists,`Subscriber for ${s} already exists`);T.subscriptions[s]=null;let u=async(t,{id:A,payload:r},i)=>{let{errors:n,...a}=t,s=await b?.(T,A,r,i,t);await e.send(m({id:A,type:I.Next,payload:s||{...a,...n?{errors:n.map(e=>e.toJSON())}:{}}},x))},f=async(t,{id:A,payload:r})=>{let i=await v?.(T,A,r,t);await e.send(m({id:A,type:I.Error,payload:i||t.map(e=>e.toJSON())},x))},R=async(t,{id:A,payload:r})=>{await k?.(T,A,r),t&&await e.send(m({id:A,type:I.Complete},x))};try{let e,E,I=await p?.(T,h.id,h.payload);if(I){if(c=I,Array.isArray(c)&&c.length>0&&c.every(e=>e instanceof w.GraphQLError))return s in T.subscriptions?await f(I,h):void 0;if(Array.isArray(I))throw Error("Invalid return value from onSubscribe hook, expected an array of GraphQLError objects");e=I}else{if(!t)throw Error("The GraphQL schema is not provided");let A={operationName:o.operationName,document:(0,C.parse)(o.query),variableValues:o.variables};e={...A,schema:"function"==typeof t?await t(T,s,o,A):t};let r=(i??y.validate)(e.schema,e.document);if(r.length>0)return s in T.subscriptions?await f(r,h):void 0}let m=(0,Q.getOperationAST)(e.document,e.operationName);if(!m)return s in T.subscriptions?await f([new w.GraphQLError("Unable to identify operation")],h):void 0;"rootValue"in e||(e.rootValue=r?.[m.operation]),"contextValue"in e||(e.contextValue="function"==typeof A?await A(T,s,o,e):A),E="subscription"===m.operation?await (a??B.subscribe)(e):await (n??S.execute)(e);let b=await g?.(T,s,o,e,E);if(b&&(E=b),l=E,"function"==typeof Object(l)[Symbol.asyncIterator])if(s in T.subscriptions){T.subscriptions[s]=E;try{for await(let t of E)await u(t,h,e)}catch(t){let e=t instanceof Error?t:Error(String(t));await f([D.versionInfo.major>=17?new w.GraphQLError(e.message,{cause:e}):D.versionInfo.major>=16?new w.GraphQLError(e.message,{originalError:e}):new w.GraphQLError(e.message,null,null,null,null,e)],h),delete T.subscriptions[s]}}else d(E)&&E.return(void 0);else s in T.subscriptions&&await u(E,h,e);await R(s in T.subscriptions,h)}finally{delete T.subscriptions[s]}return}case I.Complete:{let e=T.subscriptions[h.id];delete T.subscriptions[h.id],d(e)&&await e.return(void 0);return}default:throw Error(`Unexpected message of type ${h.type} received`)}}),async(e,t)=>{M&&clearTimeout(M);let A={...T.subscriptions};T.subscriptions={},await Promise.all(Object.values(A).filter(d).map(e=>e.return(void 0))),T.acknowledged&&await l?.(T,e,t),await c?.(T,e,t)}}}}(e);return t.options.handleProtocols=b,t.once("error",e=>{console.error("Internal error emitted on the WebSocket server. Please check your implementation.",e);let A=null;for(let e of t.clients)try{e.close(E.InternalServerError,"Internal server error")}catch(e){A=A??e}if(A)throw A}),t.on("connection",(e,t)=>{e.once("error",t=>{console.error("Internal error emitted on a WebSocket socket. Please check your implementation.",t),e.close(E.InternalServerError,"Internal server error")});let i=null,n=A>0&&isFinite(A)?setInterval(()=>{e.readyState===e.OPEN&&(i=setTimeout(()=>{e.terminate()},A),e.once("pong",()=>{i&&(clearTimeout(i),i=null)}),e.ping())},A):null,a=r.opened({protocol:e.protocol,send:t=>new Promise((A,r)=>{if(e.readyState!==e.OPEN)return A();e.send(t,e=>e?r(e):A())}),close:(t,A)=>e.close(t,A),onMessage:t=>e.on("message",async A=>{try{await t(String(A))}catch(t){console.error("Internal error occurred during message handling. Please check your implementation.",t),e.close(E.InternalServerError,"Internal server error")}})},{socket:e,request:t});e.once("close",(e,t)=>{i&&clearTimeout(i),n&&clearInterval(n),a(e,String(t))})}),{dispose:async()=>{for(let e of t.clients)e.close(1001,"Going away");t.removeAllListeners(),await new Promise((e,A)=>{t.close(t=>t?A(t):e())})}}}({schema:A,context:async e=>{let t=edG(e.extra.request.headers),A=e.extra.request.socket.remoteAddress;!t.has("x-forwarded-for")&&A&&t.set("x-forwarded-for",A);let r=function(e){if(!e||"object"!=typeof e)return null;let t=e.authorization??e.Authorization;return"string"==typeof t?t:null}(e.connectionParams);return r&&t.set("authorization",r),edP.createContext(t)}},r);try{await new Promise((e,t)=>{r.once("listening",e),r.once("error",t)})}catch(e){throw await i.dispose(),e}edJ.agentWebSocketServer=r,r.on("error",e=>{console.error("Agent GraphQL WebSocket server error:",e)}),console.log(`Agent GraphQL WebSocket listening on ws://${t}:${e}/graphql`)})();edJ.agentWebSocketStartPromise=A;try{await A}finally{edJ.agentWebSocketStartPromise=void 0}}e.s(["startAgentWebSocketServer",0,edY],544112)}];
|
|
6133
|
+
${JSON.stringify(t,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),c=await euu(i,"SESSION"),u=(0,AB.randomUUID)(),d=(0,AB.randomUUID)(),h=new Date,p=await i.agentRun.create({data:{id:u,kind:"SESSION",displayNumber:c,status:"IN_PROGRESS",phase:"ANSWER_REVISION_QUEUED",provider:n.run.provider,worktreeId:n.run.worktreeId,agentId:n.run.agentId,jiraIssueKey:n.run.jiraIssueKey,repositoryName:n.run.repositoryName,branch:n.run.branch,model:n.run.model,effort:n.run.effort,webSearchEnabled:n.run.webSearchEnabled,initialPrompt:l,parentRunId:n.runId,parentRunNumber:n.run.displayNumber,followUpMode:"ANSWER_REVISION",inputs:{create:{id:d,sequence:0,kind:"ANSWER_REVISION",prompt:l}}}});if(await i.worktreeRunLease.deleteMany({where:{worktreeId:n.run.worktreeId,runId:n.runId}}),await i.worktreeRunLease.findUnique({where:{worktreeId:n.run.worktreeId}}))throw Error("Another Session owns this worktree");await i.worktreeRunLease.create({data:{worktreeId:n.run.worktreeId,runId:u}}),await i.agentRun.update({where:{id:n.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:h}});let g=await eup(i,{runId:u,agentId:n.run.agentId,type:"REVISE_ANSWER",payload:{batchId:e,revisionId:s,inputId:d,stash:!!A,rollback:r,checkpoint:n.checkpoint}});return{batch:n,run:p,command:g,sourceRunId:n.runId,sourceAgentId:n.run.agentId}});return eul(n.sourceRunId),eul(n.run.id),euc(n.command,n.sourceAgentId),this.get(n.run.id)}async pendingCommands(e){return(await ag()).runCommand.findMany({where:{agentId:e,status:{in:["QUEUED","RUNNING"]}},orderBy:[{createdAt:"asc"},{sequence:"asc"}],take:200,include:euh})}async claimCommand(e,t){let A=await ag(),r=await A.runCommand.findUnique({where:{id:t},select:{agentId:!0,status:!0,run:{select:{worktreeId:!0}}}});if(!r||r.agentId!==e)throw Error("Run command not found");"QUEUED"===r.status&&r.run.worktreeId&&await this.diskSpace?.assertWorktreeCanStart(r.run.worktreeId),await A.runCommand.updateMany({where:{id:t,agentId:e,status:"QUEUED"},data:{status:"RUNNING",claimedAt:new Date}});let i=await A.runCommand.findUnique({where:{id:t},include:euh});if(!i||i.agentId!==e)throw Error("Run command not found");if("RUNNING"!==i.status)throw Error("Run command cannot be claimed");return i}async completeCommand(e,t,A,r){let i=await ag(),n=await i.runCommand.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run command not found");let a=await i.runCommand.update({where:{id:t},data:{status:"SUCCEEDED"===A?"SUCCEEDED":"FAILED",error:eun(r,2e4),finishedAt:new Date}});if("DELETE_NATIVE"===a.type&&"SUCCEEDED"===a.status){let e=await i.agentRun.findUnique({where:{id:a.runId},include:{inputs:{include:{attachments:!0}}}});if(e){let t=e.inputs.flatMap(e=>e.attachments.map(({storagePath:e})=>e));await i.agentRun.delete({where:{id:e.id}}),await ec6(t)}}else if("FAILED"===a.status)await i.agentRun.updateMany({where:{id:a.runId,status:{notIn:[...eut]}},data:{error:a.error,phase:`${a.type}_FAILED`,...["START","PLAY_PLAN","CONTINUE"].includes(a.type)?{status:"FAILED",finishedAt:new Date}:{},...["PREPARE_ANSWER_REVISION","REVISE_ANSWER"].includes(a.type)?{status:"PAUSED",finishedAt:null}:{}}}),["START","PLAY_PLAN","CONTINUE"].includes(a.type)&&await i.worktreeRunLease.deleteMany({where:{runId:a.runId}});else if(["PAUSE","CANCEL"].includes(a.type)){let e="CANCEL"===a.type;await i.agentRun.updateMany({where:{id:a.runId,status:{notIn:[...eut]}},data:{status:e?"CANCELLED":"PAUSED",phase:e?"CANCELLED":"PAUSED",finishedAt:e?new Date:null}}),e&&await i.worktreeRunLease.deleteMany({where:{runId:a.runId}})}return eul(a.runId),a}async beginAttempt(e,t,A){let r=await ag(),i=await r.agentRun.findUnique({where:{id:t},include:{attempts:!0}});if(!i||i.agentId!==e)throw Error("Run not found for this agent");if(eut.has(i.status))throw Error("Run is already finished");let n=i.attempts.length,a=await r.runAttempt.create({data:{id:(0,AB.randomUUID)(),runId:t,generation:n,nativeId:A||null,nativeKey:A?`${e}:${i.provider}:${A}`:null,status:"RUNNING"}});return await r.agentRun.update({where:{id:t},data:{phase:"RUNNING",startedAt:i.startedAt??new Date}}),eul(t),a}async updateAttemptNativeId(e,t,A,r){let i=await ag(),n=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:t},include:{run:!0}});if(!n||n.run.agentId!==e)throw Error("Attempt not found");let a=`${e}:${n.run.provider}:${A}`,s=await i.runAttempt.findUnique({where:{nativeKey:a}});if(s&&s.id!==t){if(s.runId!==n.runId)throw Error("Native provider session belongs to another run");await i.runAttempt.update({where:{id:s.id},data:{nativeKey:null}})}let o=await i.runAttempt.update({where:{id:t},data:{nativeId:A,nativeKey:a}});return r&&await i.agentRun.update({where:{id:n.runId},data:{providerVersion:r}}),o});return eul(n.runId),n}async appendEvents(e,t,A,r){let i=await ag(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");let a=r.slice(0,500).map(e=>{let r=eui(e.summary,"Event summary",2e3);return{id:e.id,runId:t,attemptId:A,sequence:e.sequence,type:eui(e.type,"Event type",100).toUpperCase(),summary:r,searchText:eun(e.searchText,1e5)??r,detailMarkdown:eun(e.detailMarkdown,5e5),rawJson:void 0===e.raw?null:JSON.stringify(e.raw),createdAt:eus(e.createdAt)}});if(!a.length)return[];let s=await i.$transaction(async e=>{let r=new Set((await e.runEvent.findMany({where:{id:{in:a.map(e=>e.id)}},select:{id:!0}})).map(({id:e})=>e)),i=a.filter(e=>!r.has(e.id));if(i.length){await e.runEvent.createMany({data:i});let r=i.filter(e=>e.type.includes("TOOL")&&!e.type.includes("QUESTION")).map(e=>({id:`event:${e.id}`,runId:t,attemptId:A,sequence:e.sequence,name:e.summary.split(/[\s:(]/,1)[0]||e.type,status:e.type.includes("FAIL")||e.type.includes("ERROR")?"FAILED":e.type.includes("COMPLETE")||e.type.includes("RESULT")?"COMPLETED":"OBSERVED",inputJson:e.rawJson,error:e.type.includes("FAIL")||e.type.includes("ERROR")?e.summary:null,finishedAt:e.createdAt}));r.length&&(await e.runToolCall.createMany({data:r}),await e.agentRun.update({where:{id:t},data:{toolCallCount:await e.runToolCall.count({where:{runId:t}})}}))}return e.runEvent.findMany({where:{id:{in:a.map(e=>e.id)}},orderBy:{sequence:"asc"}})});for(let e of s)af.publish(a_(t),{runEventAdded:e});return eul(t),s}async reportQuestion(e,t,A,r,i,n){if(!n.length||n.length>10)throw Error("Question batch is invalid");let a=await ag(),s=await a.$transaction(async a=>{let s=await a.agentRun.findUnique({where:{id:t},include:{worktree:!0}});if(!s||s.agentId!==e)throw Error("Run not found for this agent");if(r){let e=await a.runQuestionBatch.findUnique({where:{runId_nativeRequestId:{runId:t,nativeRequestId:r}},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}});if(e)return{batch:e,notification:null}}let o=(0,AB.randomUUID)(),l=await a.runQuestionBatch.create({data:{id:o,runId:t,attemptId:A,nativeRequestId:r,eventSequence:Number.isInteger(i)&&(i??-1)>=-1?i:null,questions:{create:n.map((e,t)=>({id:`${o}:${t}:${e.id||"question"}`,position:t,header:eun(e.header,200),prompt:eui(e.prompt,"Question",1e4),multiSelect:!!e.multiSelect,allowCustom:!1!==e.allowCustom,options:{create:(e.options??[]).map((e,t)=>({id:(0,AB.randomUUID)(),position:t,label:eui(e.label,"Option label",500),description:eun(e.description,2e3)}))}}))}},include:{questions:{include:{options:!0}}}});return await a.agentRun.update({where:{id:t},data:{phase:"WAITING_FOR_ANSWER"}}),{batch:l,notification:this.notifications?await this.notifications.recordInTransaction(a,{dedupeKey:`run:${t}:question:${o}`,typeKey:"RUN_NEEDS_ANSWER",title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} needs an answer`,body:n[0].prompt.slice(0,1e3),href:euo(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:s.worktree?.highlightColor}):null}});return this.notifications?.created(s.notification),eul(t),af.publish(aL(t),{runQuestionChanged:{id:s.batch.id,runId:t}}),s.batch}async reportUsage(e,t,A,r){let i=await ag(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");let a=e=>Number.isFinite(e)&&(e??0)>=0?Math.floor(e):0;return await i.$transaction(async e=>{let i=await e.runModelUsage.findFirst({where:{runId:t,attemptId:A,model:r.model}}),n={inputTokens:a(r.inputTokens),outputTokens:a(r.outputTokens),reasoningTokens:a(r.reasoningTokens),cacheReadTokens:a(r.cacheReadTokens),cacheWriteTokens:a(r.cacheWriteTokens),estimatedCost:r.estimatedCost??null};i?await e.runModelUsage.update({where:{id:i.id},data:n}):await e.runModelUsage.create({data:{id:(0,AB.randomUUID)(),runId:t,attemptId:A,model:r.model,...n}});let s=await e.runModelUsage.aggregate({where:{runId:t},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}}),o=await e.runModelUsage.findMany({where:{runId:t,estimatedCost:{not:null}},select:{model:!0,estimatedCost:!0}}),l=o.find(({model:e})=>"estimated-total"===e)?.estimatedCost,c=await e.runToolCall.count({where:{runId:t}});await e.agentRun.update({where:{id:t},data:{inputTokens:s._sum.inputTokens??0,outputTokens:s._sum.outputTokens??0,reasoningTokens:s._sum.reasoningTokens??0,cacheReadTokens:s._sum.cacheReadTokens??0,cacheWriteTokens:s._sum.cacheWriteTokens??0,toolCallCount:Math.max(c,a(r.toolCallCount)),estimatedCost:l??(o.length?o.reduce((e,t)=>e+(t.estimatedCost??0),0):null),pricingSource:eun(r.pricingSource,200),pricingUpdatedAt:new Date}})}),eul(t),this.get(t)}async finishAttempt(e,t,A){let r=A.status.toUpperCase();if(!["PAUSED","COMPLETED","CANCELLED","FAILED"].includes(r))throw Error("Run completion status is invalid");let i=await ag(),n=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:t},include:{run:{include:{worktree:!0}}}});if(!n||n.run.agentId!==e)throw Error("Attempt not found");let a=eut.has(n.run.status)?n.run.status:r;await i.runAttempt.update({where:{id:t},data:{status:a,finishedAt:new Date}}),await i.runQuestionBatch.updateMany({where:{runId:n.runId,status:"PENDING"},data:{status:"SUPERSEDED",supersededAt:new Date}});let s=eut.has(n.run.status)?n.run:await i.agentRun.update({where:{id:n.runId},data:{status:r,phase:A.phase?.trim().toUpperCase()||r,finalOutput:eun(A.finalOutput,2e6),error:eun(A.error,2e4),finishedAt:"PAUSED"===r?null:new Date}});eut.has(a)&&await i.worktreeRunLease.deleteMany({where:{runId:s.id}});let o="COMPLETED"===a?"RUN_COMPLETED":"FAILED"===a?"RUN_FAILED":"CANCELLED"===a?"RUN_CANCELLED":"RECOVERY_PAUSED"===A.phase?"RUN_RECOVERY_PAUSED":null,l=o&&this.notifications?await this.notifications.recordInTransaction(i,{dedupeKey:`run:${s.id}:status:${a}:${n.generation}`,typeKey:o,title:`${"PLAN"===s.kind?"Plan":"Session"} #${s.displayNumber} ${a.toLowerCase()}`,body:A.error||A.finalOutput?.slice(0,1e3)||`The ${s.kind.toLowerCase()} is ${a.toLowerCase()}.`,href:euo(s),resourceKind:s.kind,resourceId:s.id,worktreeId:s.worktreeId,highlightColor:n.run.worktree?.highlightColor}):null;return{run:s,notification:l}});return this.notifications?.created(n.notification),eul(n.run.id),this.get(n.run.id)}async reportCheckpoint(e,t,A,r){let i=await ag(),n=await i.agentRun.findUnique({where:{id:t}});if(!n||n.agentId!==e)throw Error("Run not found for this agent");if(r.questionBatchId){let e=await i.runQuestionBatch.findUnique({where:{id:r.questionBatchId}});if(!e||e.runId!==t)throw Error("Question batch not found")}let a=await i.runCheckpoint.create({data:{id:(0,AB.randomUUID)(),runId:t,attemptId:A,questionBatchId:r.questionBatchId??null,kind:eui(r.kind,"Checkpoint kind",100).toUpperCase(),headSha:eun(r.headSha,100),branch:eun(r.branch,500),upstreamSha:eun(r.upstreamSha,100),indexTree:eun(r.indexTree,100),worktreeTree:eun(r.worktreeTree,100),refName:eun(r.refName,1e3),manifestJson:eun(r.manifestJson,2e6),diffSummary:eun(r.diffSummary,5e5),diffPatch:eun(r.diffPatch,2e6),stashRef:eun(r.stashRef,1e3)}});return eul(t),a}async reportAnswerRevisionPreview(e,t,A,r){let i=await ag(),n=await i.runQuestionBatch.findUnique({where:{id:t},include:{run:!0}});if(!n?.runId||!n.run||n.run.agentId!==e||"MANAGED"!==n.run.origin)throw Error("Question batch not found for this agent");let a=await i.runQuestionBatch.update({where:{id:t},data:{revisionPreparedAt:new Date,rollbackPatch:A.slice(0,2e6),pushedCommitWarning:eun(r,2e4)},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}}}});return eul(n.runId),af.publish(aL(n.runId),{runQuestionChanged:{id:t,runId:n.runId}}),a}async applyAnswerRevision(e,t,A,r){let i=await ag(),n=await i.$transaction(async i=>{let n=await i.runQuestionBatch.findUnique({where:{id:t},include:{run:!0,attempt:!0}}),a=await i.runAttempt.findUnique({where:{id:r},include:{run:!0}}),s=await i.runAnswerRevision.findUnique({where:{id:A}});if(!n?.runId||!n.run||n.run.agentId!==e||!n.attempt||!a||a.run.parentRunId!==n.runId||"ANSWER_REVISION"!==a.run.followUpMode||!s||s.batchId!==t)throw Error("Answer revision cannot be applied");let o=new Date,l=(await i.runAttempt.findMany({where:{runId:n.runId,generation:{gte:n.attempt.generation}},select:{id:!0}})).map(({id:e})=>e);await i.runAttempt.updateMany({where:{id:{in:l}},data:{status:"SUPERSEDED",supersededAt:o,finishedAt:o}}),await i.runEvent.updateMany({where:{runId:n.runId,sequence:{gt:n.eventSequence??-1},supersededAt:null},data:{supersededAt:o}}),await i.runToolCall.updateMany({where:{attemptId:{in:l},supersededAt:null},data:{supersededAt:o}}),await i.runModelUsage.updateMany({where:{attemptId:{in:l}},data:{superseded:!0}});let c=(await i.runQuestionBatch.findMany({where:{runId:n.runId,createdAt:{gt:n.createdAt}},select:{id:!0}})).map(({id:e})=>e);return await i.runQuestionBatch.updateMany({where:{id:{in:c}},data:{status:"SUPERSEDED",supersededAt:o}}),await i.runAnswerRevision.updateMany({where:{OR:[{batchId:{in:c}},{batchId:t,id:{not:A}}],supersededAt:null},data:{supersededAt:o}}),await i.runAnswerRevision.update({where:{id:A},data:{replacementAttemptId:r}}),await i.agentRun.update({where:{id:n.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:o}}),await i.agentRun.update({where:{id:a.runId},data:{status:"IN_PROGRESS",phase:"RUNNING"}}),{sourceRunId:n.runId,replacementRunId:a.runId}});return eul(n.sourceRunId),eul(n.replacementRunId),this.get(n.replacementRunId)}async importRuns(e,t,A){let r=eur(eue,t,"Provider"),i=await ag(),n=0;for(let t of A){let A=`${e}:${r}:${eui(t.nativeId,"Native ID",500)}`,a=(()=>{let e=t.status?.toUpperCase()??"COMPLETED";return["ACTIVE","RUNNING","STARTING","IN_PROGRESS","WAITING_FOR_ANSWER"].includes(e)?"IN_PROGRESS":"PAUSED"===e?"PAUSED":"CANCELLED"===e||"CANCELED"===e?"CANCELLED":"FAILED"===e||"ERROR"===e?"FAILED":"COMPLETED"})(),s=await i.runAttempt.findUnique({where:{nativeKey:A},include:{run:!0}});if(s){if("IMPORTED"===s.run.origin){let e="SESSION"===s.run.kind&&"IN_PROGRESS"===a?await i.worktreeRunLease.findUnique({where:{worktreeId:s.run.worktreeId??""}}):null;await i.$transaction([i.runAttempt.update({where:{id:s.id},data:{rawMetadataJson:JSON.stringify(t.rawMetadata??{})}}),i.agentRun.update({where:{id:s.runId},data:{status:a,phase:e?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",model:t.model||s.run.model,effort:eun(t.effort,100),finalOutput:eun(t.finalOutput,2e6),branch:t.branch??s.run.branch,jiraIssueKey:eua(t.jiraIssueKey),nativeArchivedAt:t.archived?new Date:null,startedAt:eus(t.createdAt)??s.run.startedAt,finishedAt:"IN_PROGRESS"===a?null:eus(t.updatedAt)??s.run.finishedAt}})]),eul(s.runId)}continue}let o=await i.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{repository:!0}}}});if(!o||o.codebase.agentId!==e)continue;let l=t.kind?.toUpperCase()==="PLAN"?"PLAN":"SESSION",c="SESSION"===l&&"IN_PROGRESS"===a?await i.worktreeRunLease.findUnique({where:{worktreeId:o.id}}):null,u=await i.$transaction(e=>euu(e,l)),d=(0,AB.randomUUID)();await i.agentRun.create({data:{id:d,kind:l,displayNumber:u,status:a,phase:c?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",origin:"IMPORTED",provider:r,worktreeId:o.id,agentId:e,jiraIssueKey:eua(t.jiraIssueKey),repositoryName:o.codebase.repository.name,branch:t.branch??o.branch,model:t.model||"unknown",effort:eun(t.effort,100),initialPrompt:t.prompt?.trim()||"Imported provider history",finalOutput:eun(t.finalOutput,2e6),archivedAt:t.archived?new Date:null,nativeArchivedAt:t.archived?new Date:null,startedAt:eus(t.createdAt),finishedAt:eus(t.updatedAt),createdAt:eus(t.createdAt),attempts:{create:{id:(0,AB.randomUUID)(),generation:0,nativeId:t.nativeId,nativeKey:A,status:"IMPORTED",rawMetadataJson:JSON.stringify(t.rawMetadata??{})}},inputs:{create:{id:(0,AB.randomUUID)(),sequence:0,kind:"INITIAL",prompt:t.prompt?.trim()||"Imported provider history"}}}}),eul(d),n+=1}return await i.runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:r}},create:{id:(0,AB.randomUUID)(),agentId:e,provider:r,status:"IDLE",lastCompletedAt:new Date,importedCount:n},update:{status:"IDLE",lastCompletedAt:new Date,lastError:null,importedCount:{increment:n}}}),n}async providerCatalog(e={}){let t=await ag(),A=!!(e.runId||e.worktreeId),r=e.runId?(await t.agentRun.findUnique({where:{id:e.runId},select:{agentId:!0}}))?.agentId:e.worktreeId?(await t.worktree.findUnique({where:{id:e.worktreeId},select:{codebase:{select:{agentId:!0}}}}))?.codebase.agentId:null,[i,n]=A&&!r?[[],[]]:await Promise.all([t.agent.findMany({where:r?{id:r}:void 0,select:{id:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),t.runProviderSync.findMany({where:r?{agentId:r}:void 0,orderBy:{updatedAt:"desc"}})]);return eue.map(e=>{let t=`runs.provider.${e.toLowerCase()}`,A=i.some(A=>{let r=n.find(t=>t.agentId===A.id&&t.provider===e);return!A.disconnectedAt&&!!A.lastSeenAt&&Date.now()-A.lastSeenAt.getTime()<=aZ(A)&&JSON.parse(A.capabilitiesJson).includes(t)&&r?.status!=="FAILED"}),r=n.find(({provider:t})=>t===e)?.catalogJson,a=r?JSON.parse(r):null;return{key:e,label:"OPENCODE"===e?"OpenCode":"CLAUDE"===e?"Claude":"Codex",available:A,models:a?.models?.length?a.models:[{id:"default",label:"Provider default",efforts:["auto","low","medium","high"]}],supportsWebSearch:a?.capabilities?.webSearch??!0,supportsQuestions:a?.capabilities?.questions??!0,supportsImport:a?.capabilities?.import??!0,supportsPause:a?.capabilities?.pause??!0,supportsSteering:a?.capabilities?.steering??!0,supportsResume:a?.capabilities?.resume??!0,supportsNativeDelete:a?.capabilities?.nativeDelete??!0}})}async providerImportStatus(){return(await ag()).runProviderSync.findMany({orderBy:[{agentId:"asc"},{provider:"asc"}]})}async reportProviderImportStatus(e,t,A,r,i){let n=eur(eue,t,"Provider"),a=A.trim().toUpperCase();if(!["SYNCING","IDLE","FAILED"].includes(a))throw Error("Import status is invalid");return(await ag()).runProviderSync.upsert({where:{agentId_provider:{agentId:e,provider:n}},create:{id:(0,AB.randomUUID)(),agentId:e,provider:n,status:a,lastStartedAt:"SYNCING"===a?new Date:void 0,lastCompletedAt:"IDLE"===a?new Date:void 0,lastError:eun(r,2e4),catalogJson:void 0===i?void 0:JSON.stringify(i)},update:{status:a,lastStartedAt:"SYNCING"===a?new Date:void 0,lastCompletedAt:"IDLE"===a?new Date:void 0,lastError:"FAILED"===a?eun(r,2e4):null,catalogJson:void 0===i?void 0:JSON.stringify(i)}})}subscribeRuns(){return af.iterate(aT)}subscribeRun(e){return af.iterate(aH(e))}subscribeEvents(e){return af.iterate(a_(e))}subscribeQuestions(e){return af.iterate(aL(e))}async requireWorktree(e,t){let A=await ag(),r=await A.worktree.findUnique({where:{id:eui(e,"Worktree",500)},include:{codebase:{include:{repository:!0,agent:!0}}}});if(!r||"AVAILABLE"!==r.availability)throw Error("Worktree is unavailable");if(t){let e=r.codebase.agent,i=JSON.parse(e.capabilitiesJson);if(e.disconnectedAt||!e.lastSeenAt||Date.now()-e.lastSeenAt.getTime()>aZ(e)||!i.includes(`runs.provider.${t.toLowerCase()}`))throw Error(`${t} is unavailable on this worktree's agent`);let n=await A.runProviderSync.findUnique({where:{agentId_provider:{agentId:r.codebase.agentId,provider:t}}});if(n?.status==="FAILED")throw Error(`${t} is unavailable: ${n.lastError??"provider capability check failed"}`)}return r}async requireAttachments(e,t){if(!e.length)return;if(e.length>100)throw Error("Too many attachments");let A=await ag(),r=await A.runAttachment.findMany({where:{id:{in:e},inputId:null,...t?{OR:[{draftId:t},{draftId:null}]}:{draftId:null}}});if(r.length!==e.length)throw Error("One or more attachments are unavailable");if(r.reduce((e,t)=>e+t.size,0)>0x6400000)throw Error("Attachments exceed the 100 MB input limit")}}let euI=["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME","ANY_WORKTREE","REPOSITORY_WORKTREE"],euf=["NEVER","ON_FAILURE","ALWAYS"],eum=["QUEUED","RUNNING","RESTARTING","CANCELLING"],euC=["SUCCEEDED","FAILED","CANCELLED"];function euy(e,t,A){let r=t.trim().toUpperCase();if(!e.includes(r))throw Error(`${A} is not supported`);return r}function euQ(e,t,A){let r=e.trim();if(!r)throw Error(`${t} is required`);if(r.length>A)throw Error(`${t} is too long`);return r}function euw(e){af.publish(aM,{commandsChanged:e})}function euB(e){af.publish(aO,{commandRunsChanged:e}),af.publish(aF(e.id),{commandRunChanged:e})}class euS{agentControl;notifications;timer;reconciliation;constructor(e,t){this.agentControl=e,this.notifications=t,this.timer=null,this.reconciliation=null,this.agentControl.registerCompletionHandler(AC,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 ag()).commandDefinition.findMany({where:e?{}:{archivedAt:null},include:{targetAgent:!0,targetRepository:!0},orderBy:[{archivedAt:"asc"},{name:"asc"}]})}async getDefinition(e){return(await ag()).commandDefinition.findUnique({where:{id:e},include:{targetAgent:!0,targetRepository:!0}})}normalizeDefinition(e){let t=euy(euI,e.targetKind,"Target scope"),A=euy(euf,e.restartPolicy??"NEVER","Restart policy"),r=void 0===e.restartLimit?3:e.restartLimit;if(null!==r&&(!Number.isInteger(r)||r<0||r>100))throw Error("Restart limit must be null or an integer from 0 to 100");let i="SPECIFIC_AGENT_HOME"===t,n="REPOSITORY_WORKTREE"===t;if(!!e.targetAgentId!==i)throw Error(i?"A specific-agent command requires an agent":"This target scope does not accept a specific agent");if(!!e.targetRepositoryId!==n)throw Error(n?"A repository-worktree command requires a repository":"This target scope does not accept a repository");return{name:euQ(e.name,"Name",120),description:(e.description??"").trim().slice(0,2e3),script:euQ(e.script,"Script",1e6),targetKind:t,targetAgentId:e.targetAgentId??null,targetRepositoryId:e.targetRepositoryId??null,restartPolicy:A,restartLimit:r,quickActionEnabled:e.quickActionEnabled??!1,quickActionIconKey:euQ(e.quickActionIconKey??"terminal","Quick action icon",40),quickActionButtonVariant:euQ(e.quickActionButtonVariant??"default","Quick action style",40),notificationsEnabled:e.notificationsEnabled??!0}}async createDefinition(e){let t=await ag(),A=await t.commandDefinition.create({data:{id:(0,AB.randomUUID)(),...this.normalizeDefinition(e)},include:{targetAgent:!0,targetRepository:!0}});return euw(A),A}async updateDefinition(e,t){let A=await ag(),r=await A.commandDefinition.update({where:{id:e},data:this.normalizeDefinition(t),include:{targetAgent:!0,targetRepository:!0}});return euw(r),r}async archiveDefinition(e,t){let A=await ag(),r=await A.commandDefinition.update({where:{id:e},data:{archivedAt:t?new Date:null},include:{targetAgent:!0,targetRepository:!0}});return euw(r),r}async eligibleForAgent(e){return(await ag()).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 ag(),A=await t.worktree.findUnique({where:{id:e},select:{codebase:{select:{repositoryId:!0}}}});if(!A)throw Error("Worktree not found");return t.commandDefinition.findMany({where:{archivedAt:null,OR:[{targetKind:"ANY_WORKTREE"},{targetKind:"REPOSITORY_WORKTREE",targetRepositoryId:A.codebase.repositoryId}]},include:{targetAgent:!0,targetRepository:!0},orderBy:{name:"asc"}})}async listRuns(e){let t=await ag(),A=Math.max(1,Math.min(e.first??50,200)),r=e.search?.trim(),i={...e.includeArchived?{}:{archivedAt:null},...e.agentId?{agentId:e.agentId}:{},...e.worktreeId?{worktreeId:e.worktreeId}:{},...r?{OR:[{snapshotName:{contains:r}},{agentName:{contains:r}},{worktreePath:{contains:r}}]}:{}},[n,a]=await Promise.all([t.commandRun.findMany({where:i,include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{orderBy:{attempt:"asc"}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}}),t.commandRun.count({where:i})]),s=n.length>A,o=n.slice(0,A);return{nodes:o,totalCount:a,pageInfo:{hasNextPage:s,endCursor:o.at(-1)?.id??null}}}async getRun(e){return(await ag()).commandRun.findUnique({where:{id:e},include:{command:!0,agent:!0,worktree:{include:{codebase:{include:{repository:!0}}}},attempts:{include:{agentJob:!0},orderBy:{attempt:"asc"}},predecessor:!0,successor:!0}})}async listOutput(e,t=0,A=-1,r=1e3){let i=await ag();return r<1?[]:i.commandRunOutputChunk.findMany({where:{OR:[{attempt:{runId:e,attempt:{gt:t}}},{attempt:{runId:e,attempt:t},sequence:{gt:A}}]},include:{attempt:{select:{attempt:!0,runId:!0}}},orderBy:[{attempt:{attempt:"asc"}},{sequence:"asc"}],take:Math.max(1,Math.min(r,5e3))})}async resolveTarget(e,t){let A=await ag();if("ANY_AGENT_HOME"===e.targetKind||"SPECIFIC_AGENT_HOME"===e.targetKind){if(!t.agentId||t.worktreeId)throw Error("This command requires an agent-home target");if("SPECIFIC_AGENT_HOME"===e.targetKind&&e.targetAgentId!==t.agentId)throw Error("This command is not eligible for the selected agent");let r=await A.agent.findUnique({where:{id:t.agentId}});if(!r)throw Error("Agent not found");return this.requireCapability(r.capabilitiesJson),{agent:r,worktree:null}}if(!t.worktreeId||t.agentId)throw Error("This command requires a worktree target");let r=await A.worktree.findUnique({where:{id:t.worktreeId},include:{codebase:{include:{agent:!0,repository:!0}}}});if(!r||r.missingAt)throw Error("Worktree is unavailable");if("REPOSITORY_WORKTREE"===e.targetKind&&e.targetRepositoryId!==r.codebase.repositoryId)throw Error("This command is not eligible for the selected repository");return this.requireCapability(r.codebase.agent.capabilitiesJson),{agent:r.codebase.agent,worktree:r}}requireCapability(e){if(!(function(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}})(e).includes(AC))throw Error("The selected agent must be upgraded before it can run commands")}async startRun(e){let t,A=await ag(),r=e.idempotencyKey?.trim()||(0,AB.randomUUID)(),i=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(i)return this.getRun(i.id);let n=await A.commandDefinition.findUnique({where:{id:e.commandId}});if(!n||n.archivedAt)throw Error("Command not found");let{agent:a,worktree:s}=await this.resolveTarget(n,e);try{t=await A.$transaction(async t=>{let A=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:A.nextValue,commandId:n.id,idempotencyKey:r,origin:(e.origin??"MANUAL").trim().toUpperCase(),snapshotName:n.name,snapshotDescription:n.description,snapshotScript:n.script,snapshotTargetKind:n.targetKind,snapshotRestartPolicy:n.restartPolicy,snapshotRestartLimit:n.restartLimit,snapshotNotificationsEnabled:n.notificationsEnabled,snapshotJson:JSON.stringify(n),agentId:a.id,worktreeId:s?.id??null,agentName:a.name,agentHostname:a.hostname,worktreePath:s?.folder??null,worktreeBranch:s?.branch??null}})})}catch(t){let e=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(!e)throw t;return this.getRun(e.id)}return euB(t),await this.dispatch(t.id),this.getRun(t.id)}async startCustomRun(e){let t,A=await ag(),r=e.idempotencyKey?.trim()||(0,AB.randomUUID)(),i=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(i)return this.getRun(i.id);let n=euQ(e.script,"Script",1e6),a=e.agentId&&!e.worktreeId?"ANY_AGENT_HOME":e.worktreeId&&!e.agentId?"ANY_WORKTREE":null;if(!a)throw Error("A custom command requires exactly one agent-home or worktree target");let{agent:s,worktree:o}=await this.resolveTarget({targetKind:a,targetAgentId:null,targetRepositoryId:null},e),l={name:"Custom command",description:"",script:n,targetKind:a,restartPolicy:"NEVER",restartLimit:null,notificationsEnabled:!0};try{t=await A.$transaction(async t=>{let A=await t.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return t.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:A.nextValue,commandId:null,idempotencyKey:r,origin:(e.origin??"MANUAL").trim().toUpperCase(),status:"QUEUED",snapshotName:l.name,snapshotDescription:l.description,snapshotScript:l.script,snapshotTargetKind:l.targetKind,snapshotRestartPolicy:l.restartPolicy,snapshotRestartLimit:l.restartLimit,snapshotNotificationsEnabled:l.notificationsEnabled,snapshotJson:JSON.stringify(l),agentId:s.id,worktreeId:o?.id??null,agentName:s.name,agentHostname:s.hostname,worktreePath:o?.folder??null,worktreeBranch:o?.branch??null}})})}catch(t){let e=await A.commandRun.findUnique({where:{idempotencyKey:r}});if(!e)throw t;return this.getRun(e.id)}euB(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 ag(),A=await t.commandRun.findUnique({where:{id:e},include:{agent:!0,worktree:{include:{codebase:!0}},attempts:!0}});if(!A||A.stopRequested)return;if(!A.agentId||!A.agent)return void await this.failDispatch(A.id,"The command agent is no longer available");if(A.predecessorRunId){let e=await t.commandRun.findUnique({where:{id:A.predecessorRunId},select:{status:!0}});if(e&&!euC.includes(e.status))return}if(new Set(["ANY_WORKTREE","REPOSITORY_WORKTREE"]).has(A.snapshotTargetKind)&&(!A.worktreeId||!A.worktree||A.worktree.missingAt))return void await this.failDispatch(A.id,"The command worktree is no longer available");if(A.worktree&&A.worktree.codebase.agentId!==A.agentId)return void await this.failDispatch(A.id,"The worktree is no longer assigned to the command agent");try{this.requireCapability(A.agent.capabilitiesJson)}catch(e){await this.failDispatch(A.id,e instanceof Error?e.message:String(e));return}let r=A.attempts.reduce((e,t)=>!e||t.attempt>e.attempt?t:e,null),i=!r||r.agentJobId||r.completionProcessedAt||r.finishedAt?(r?.attempt??0)+1:r.attempt,n=r?.attempt===i?r:await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:i}}});if(!n)try{n=await t.commandRunAttempt.create({data:{id:(0,AB.randomUUID)(),runId:e,attempt:i}})}catch(A){if(!(n=await t.commandRunAttempt.findUnique({where:{runId_attempt:{runId:e,attempt:i}}})))throw A}if(!n.agentJobId){let e=await this.agentControl.createJob({agentId:A.agentId,kind:AC,payload:{commandRunId:A.id,attemptId:n.id,targetKind:A.worktreeId?"WORKTREE":"AGENT_HOME",cwd:A.worktree?.folder??null,script:A.snapshotScript},idempotencyKey:`command-run:${A.id}:attempt:${i}`,timeoutSeconds:0,worktreeId:A.worktreeId,codebaseId:A.worktree?.codebaseId??null,visibility:"SYSTEM"});n=await t.commandRunAttempt.update({where:{id:n.id},data:{agentJobId:e.id,status:e.status}})}euB(await t.commandRun.update({where:{id:A.id},data:{status:"RUNNING"===n.status?"RUNNING":"QUEUED",startedAt:"RUNNING"===n.status?A.startedAt??new Date:null,nextRestartAt:null,error:null}}))}async failDispatch(e,t){let A=await ag(),r=await A.commandRun.update({where:{id:e},data:{status:"FAILED",error:t,finishedAt:new Date,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});euB(r),await this.notifyFinishedRun(r)}async terminateRun(e){let t=await ag(),A=await t.commandRun.findUnique({where:{id:e},include:{attempts:{orderBy:{attempt:"desc"},take:1}}});if(!A)throw Error("Command run not found");if(euC.includes(A.status))return A;let r=await t.commandRun.update({where:{id:e},data:{stopRequested:!0,status:"CANCELLING",nextRestartAt:null}}),i=A.attempts[0]?.agentJobId;return i?await this.agentControl.cancelJob(i):await this.finishCancelled(e),euB(r),this.getRun(e)}async rerun(e){let t=await ag(),A=await t.commandRun.findUnique({where:{id:e}});if(!A)throw Error("Command run not found");let r=await t.commandRun.findUnique({where:{predecessorRunId:A.id}});if(r)return this.getRun(r.id);let i=await t.$transaction(async e=>{let t=await e.commandRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:1},update:{nextValue:{increment:1}}});return e.commandRun.create({data:{id:(0,AB.randomUUID)(),displayNumber:t.nextValue,commandId:A.commandId,idempotencyKey:`rerun:${A.id}:${(0,AB.randomUUID)()}`,origin:"RERUN",snapshotName:A.snapshotName,snapshotDescription:A.snapshotDescription,snapshotScript:A.snapshotScript,snapshotTargetKind:A.snapshotTargetKind,snapshotRestartPolicy:A.snapshotRestartPolicy,snapshotRestartLimit:A.snapshotRestartLimit,snapshotNotificationsEnabled:A.snapshotNotificationsEnabled,snapshotJson:A.snapshotJson,agentId:A.agentId,worktreeId:A.worktreeId,agentName:A.agentName,agentHostname:A.agentHostname,worktreePath:A.worktreePath,worktreeBranch:A.worktreeBranch,predecessorRunId:A.id}})});return euB(i),euC.includes(A.status)?await this.dispatch(i.id):await this.terminateRun(A.id),this.getRun(i.id)}async archiveRuns(e,t){let A=await ag();for(let r of(await A.commandRun.updateMany({where:{id:{in:e},status:{in:[...euC]}},data:{archivedAt:t?new Date:null}}),e)){let e=await A.commandRun.findUnique({where:{id:r}});e&&euB(e)}return!0}async deleteRuns(e){let t=await ag();return(await t.commandRun.deleteMany({where:{id:{in:e},status:{in:[...euC]}}})).count}async appendOutput(e,t,A,r){if(!r.length||r.length>200)throw Error("Output batches must contain 1 to 200 chunks");let i=await ag(),n=await i.commandRunAttempt.findUnique({where:{id:A},include:{run:!0}});if(!n||n.agentJobId!==t||n.run.agentId!==e)throw Error("Command attempt not found for this agent job");let a=r.map(e=>{if(!Number.isInteger(e.sequence)||e.sequence<0)throw Error("Output sequence must be a non-negative integer");if(!["STDOUT","STDERR","SYSTEM"].includes(e.stream))throw Error("Output stream is invalid");let t=Buffer.from(e.dataBase64,"base64");if(t.length!==e.byteLength||t.length>262144)throw Error("Output byte length is invalid");let A=new Date(e.createdAt);if(Number.isNaN(A.valueOf()))throw Error("Output date is invalid");return{...e,createdAt:A}});await Promise.all(a.map(e=>i.commandRunOutputChunk.upsert({where:{attemptId_sequence:{attemptId:A,sequence:e.sequence}},create:{id:(0,AB.randomUUID)(),attemptId:A,...e},update:{}})));let s=await i.commandRunOutputChunk.findMany({where:{attemptId:A,sequence:{in:a.map(e=>e.sequence)}},orderBy:{sequence:"asc"}});for(let e of s)af.publish(aU(n.runId),{commandRunOutputAdded:{...e,attemptNumber:n.attempt}});return s}async finishCancelled(e){let t=await ag();euB(await t.commandRun.update({where:{id:e},data:{status:"CANCELLED",finishedAt:new Date,nextRestartAt:null}}));let A=await t.commandRun.findUnique({where:{predecessorRunId:e}});A&&await this.dispatch(A.id)}async notifyFinishedRun(e){if(!this.notifications||!e.snapshotNotificationsEnabled||"SUCCEEDED"!==e.status&&"FAILED"!==e.status)return;let t=[e.worktreeBranch??e.worktreePath??`${e.agentName} \xb7 ${e.agentHostname}`,"FAILED"===e.status?e.error:null].filter(e=>!!e).join(" · ").slice(0,1e3);try{let A=await ag(),r=await A.$transaction(A=>this.notifications.recordInTransaction(A,{dedupeKey:`command-run:${e.id}:${e.status}`,typeKey:"SUCCEEDED"===e.status?"COMMAND_RUN_SUCCEEDED":"COMMAND_RUN_FAILED",title:`${e.snapshotName} ${e.status.toLowerCase()}`,body:t,href:`/commands/runs/${e.id}`,resourceKind:"COMMAND_RUN",resourceId:e.id,worktreeId:e.worktreeId,highlightColor:e.worktree?.highlightColor??null}));this.notifications.created(r)}catch(e){console.error("Command run notification failed:",e)}}async handleAttemptCompletion(e){let t=await ag(),A=await t.commandRunAttempt.findUnique({where:{agentJobId:e.id},include:{run:!0,agentJob:!0}});if(!A||A.completionProcessedAt)return;let r=new Date,i=function(e){if(!e)return{};try{let t=JSON.parse(e);return t&&"object"==typeof t?t:{}}catch{return{}}}(e.resultJson);if(1!==(await t.commandRunAttempt.updateMany({where:{id:A.id,completionProcessedAt:null},data:{status:e.status,exitCode:i.exitCode??null,signal:i.signal??null,error:e.error,startedAt:A.agentJob?.startedAt??A.startedAt,finishedAt:A.agentJob?.finishedAt??r,completionProcessedAt:r}})).count)return;if(A.run.stopRequested||"CANCELLED"===e.status)return void await this.finishCancelled(A.runId);let n="SUCCEEDED"===e.status&&0===i.exitCode,a=euy(euf,A.run.snapshotRestartPolicy,"Restart policy"),s=A.agentJob?.startedAt??A.createdAt,o=function(e){if(e.manualStop||!("ALWAYS"===e.policy||"ON_FAILURE"===e.policy&&!e.clean))return{restart:!1,restartCount:e.restartCount,exhausted:!1};let t=(e.durationMs>=6e4?0:e.restartCount)+1,A=null!==e.limit&&t>e.limit;return{restart:!A,restartCount:t,exhausted:A}}({policy:a,limit:A.run.snapshotRestartLimit,restartCount:A.run.restartCount,durationMs:r.getTime()-s.getTime(),clean:n,manualStop:A.run.stopRequested});if(o.restart)return void euB(await t.commandRun.update({where:{id:A.runId},data:{status:"RESTARTING",restartCount:o.restartCount,nextRestartAt:new Date(r.getTime()+1e3),exitCode:i.exitCode??null,signal:i.signal??null,error:e.error}}));let l=await t.commandRun.update({where:{id:A.runId},data:{status:n?"SUCCEEDED":"FAILED",exitCode:i.exitCode??null,signal:i.signal??null,error:e.error??(o.exhausted?"Restart limit reached":n?null:"Command failed"),finishedAt:r,nextRestartAt:null},include:{worktree:{select:{highlightColor:!0}}}});euB(l),await this.notifyFinishedRun(l)}async reconcile(e={}){let t=await ag(),A=new Date;for(let r of(await t.commandRun.findMany({where:{status:{in:[...eum]},...e.agentId?{agentId:e.agentId}:{}},include:{attempts:{include:{agentJob:!0},orderBy:{attempt:"desc"},take:1}}}))){let e=r.attempts[0];if(r.stopRequested){e?.agentJobId&&e.agentJob&&!["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(e.agentJob.status)?await this.agentControl.cancelJob(e.agentJobId):e&&e.agentJob?.status!=="CANCELLED"||await this.finishCancelled(r.id);continue}if("RESTARTING"===r.status&&(!r.nextRestartAt||r.nextRestartAt<=A)){await this.dispatch(r.id);continue}if(e?.agentJob&&["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(e.agentJob.status)){await this.handleAttemptCompletion(e.agentJob);continue}if(e?.agentJob&&["QUEUED","RUNNING"].includes(e.agentJob.status)){let i="RUNNING"===e.agentJob.status?"RUNNING":"QUEUED";e.status!==e.agentJob.status&&await t.commandRunAttempt.update({where:{id:e.id},data:{status:e.agentJob.status,startedAt:e.agentJob.startedAt}}),r.status!==i&&euB(await t.commandRun.update({where:{id:r.id},data:{status:i,startedAt:"RUNNING"===i?r.startedAt??e.agentJob.startedAt??A:r.startedAt}}));continue}"QUEUED"!==r.status||e&&(e.agentJobId||e.completionProcessedAt||e.finishedAt)||await this.dispatch(r.id)}}}function euD(e=new Date){let t=e.getFullYear(),A=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${A}-${r}`}class eub{ccusage;diskSpace;polling;usageTimer;usageRunning;constructor(e,t,A){this.ccusage=e,this.diskSpace=t,this.polling=A,this.usageRunning=!1,this.ccusage.registerCompletionObserver(e=>this.recordCompletedUsage(e))}async recordCompletedUsage(e){if(0===e.progress.successfulCount)return;let t=euD(),A=e.aggregate.days.find(e=>e.period===t);await this.persistUsage(t,A?.totalCost??0,new Date)}startRuntime(){this.polling.register({id:"sidebar-usage",kind:"SIDEBAR_USAGE",runtime:"SERVER",enabled:!0,cadenceSeconds:300,details:{}}),this.pruneInterruptedCollections().catch(e=>{console.error("Sidebar usage cleanup failed:",e instanceof Error?e.message:e)}).finally(()=>void this.runUsagePoll())}stopRuntime(){this.usageTimer&&clearTimeout(this.usageTimer),this.usageTimer=void 0}scheduleUsagePoll(){this.usageTimer&&clearTimeout(this.usageTimer);let e=new Date(Date.now()+3e5);this.polling.schedule("sidebar-usage",e),this.usageTimer=setTimeout(()=>void this.runUsagePoll(),3e5),this.usageTimer.unref()}async runUsagePoll(){if(!this.usageRunning){this.usageRunning=!0,this.polling.schedule("sidebar-usage",null);try{await this.polling.run("sidebar-usage",()=>this.collectUsage(),e=>({period:e.period,successfulAgents:e.successfulAgents}))}catch(e){console.error("Sidebar usage refresh failed:",e instanceof Error?e.message:e)}finally{this.usageRunning=!1,this.scheduleUsagePoll()}}}async collectUsage(){let e=`sidebar-usage:${(0,AB.randomUUID)()}`;try{let t=await this.ccusage.collect(e);return{period:euD(),successfulAgents:t.progress.successfulCount}}finally{await this.removeCollection(e)}}async persistUsage(e,t,A){let r=await ag();await r.sidebarUsageSummary.upsert({where:{id:"default"},create:{id:"default",period:e,totalCost:t,collectedAt:A},update:{period:e,totalCost:t,collectedAt:A}}),this.publish()}async latestSuccessfulUsage(e){let t=await ag(),A=await t.agentJob.findMany({where:{kind:AS,status:"SUCCEEDED",resultJson:{not:null}},orderBy:[{finishedAt:"desc"},{createdAt:"desc"}],distinct:["agentId"],select:{resultJson:!0,finishedAt:!0,createdAt:!0,agent:{select:{id:!0,name:!0,hostname:!0}}}}),r=A.flatMap(e=>{try{let t=Ax(JSON.parse(e.resultJson));return[{agent:e.agent,report:t.report}]}catch{return[]}});if(!r.length)return null;let i=si(r).days.find(t=>t.period===e);return i?{totalCost:i.totalCost,collectedAt:A.reduce((e,t)=>{let A=t.finishedAt??t.createdAt;return A>e?A:e},new Date(0))}:null}async removeCollection(e){let t=await ag();await t.agentJob.deleteMany({where:{ccusageCollectionId:e}}),await t.ccusageCollection.deleteMany({where:{id:e}})}async pruneInterruptedCollections(){let e=await ag(),t=await e.ccusageCollection.findMany({where:{id:{startsWith:"sidebar-usage:"}},select:{id:!0}});if(!t.length)return;let A=t.map(({id:e})=>e);await e.agentJob.deleteMany({where:{ccusageCollectionId:{in:A}}}),await e.ccusageCollection.deleteMany({where:{id:{in:A}}})}async status(){let e=await ag(),t=euD(),[A,r,i,n,a,s]=await Promise.all([e.sidebarUsageSummary.findUnique({where:{id:"default"}}),e.agentRun.count({where:{kind:"PLAN",archivedAt:null,status:"IN_PROGRESS",attempts:{some:{status:{in:["STARTING","RUNNING"]},supersededAt:null}}}}),e.agentRun.count({where:{kind:"SESSION",archivedAt:null,status:"IN_PROGRESS",attempts:{some:{status:{in:["STARTING","RUNNING"]},supersededAt:null}}}}),e.build.count({where:{status:{in:["PREPARING","RUNNING"]}}}),e.workflowRun.count({where:{archivedAt:null,status:"RUNNING"}}),this.diskSpace.overview()]),o=A?.period===t?{totalCost:A.totalCost,collectedAt:A.collectedAt}:null;if(!o){let e=await this.latestSuccessfulUsage(t);e&&(o=e,this.persistUsage(t,e.totalCost,e.collectedAt)),this.runUsagePoll()}return{usageToday:{totalCost:o?.totalCost??null,collectedAt:o?.collectedAt.toISOString()??null},activity:{plans:r,sessions:i,builds:n,workflows:a},diskSpace:s}}subscribe(){return af.iterate(aJ)}publish(){af.publish(aJ,{sidebarStatusChanged:!0})}}function euv(e,t,A){let r=e.trim().toLowerCase(),i=t.trim().toLowerCase();if(!r||!i)throw Error("Pull request repository coordinates are required");if(!Number.isInteger(A)||A<1)throw Error("Pull request number must be a positive integer");return`${r}/${i}#${A}`}function euk(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function euR(e,t,A){return euk(e[t])[A]}function eux(e,t,A={}){if("string"!=typeof t&&"number"!=typeof t)return null;let r=String(t).trim();return r?{kind:e,resourceId:r,...A}:null}let euN=new Set(["JIRA_STATUS","JIRA_LABEL","JIRA_ASSIGNED_SELF","JIRA_SOURCE_NEW_TICKET","JIRA_MENTION","JIRA_SPRINT_STARTED"]),euT=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"]),euM=new Set(["BUILD_RESULT","BUILD_TEST_THRESHOLD","BUILD_COVERAGE_THRESHOLD","BUILD_HOOK_FAILED"]),euO=new Set(["WORKTREE_CREATED","WORKTREE_BEHIND","WORKTREE_CONFLICT","WORKTREE_MISSING","WORKTREE_DIVERGED","WORKTREE_DIRTY_DURATION","WORKTREE_NEW_COMMIT"]),euF=new Set(["GITHUB_PR_STATE","GITHUB_REVIEW_CHANGES_REQUESTED","GITHUB_REVIEW_COMMENT","GITHUB_PR_CLOSED","GITHUB_ISSUE_COMMAND","GITHUB_PR_LABEL"]),euU=new Set(["GITHUB_CHECK_FAILED","GITHUB_WORKFLOW_SUCCEEDED","GITHUB_ACTIONS_RESULT"]);function euH(e,t){let A="string"==typeof e?Number(e.trim()):e;return"number"!=typeof A||!Number.isFinite(A)||A<=0?null:Math.min(31536e3,Math.max(t,A))}function eu_(e,t=null){let A=euH(e.timeoutSeconds,10)??(null===t?null:euH(t,10));return null===A?null:new Date(Date.now()+1e3*A)}function euL(e,t){return euH(e.cadenceSeconds,1)??Math.max(1,t)}function euG(e,t=1){return new Date(Date.now()+1e3*euL(e,t))}let euP=(e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e},euJ=(e,t,A=2e4)=>{if("string"!=typeof e||!e.trim())throw Error(`${t} is required`);if(e.length>A)throw Error(`${t} is too long`);return e.trim()},euY=(e,t=2e4)=>null==e||""===e?null:euJ(e,"Value",t),euj=(e,t,A,r)=>euJ(e.node.config[t]??Cb(e.sessionData,A),r,500),euV=(e,t="operation")=>`${e.run.id}:${e.attempt.id}:${t}`,eu$=(e,t,A=!1)=>({output:t,sessionPatch:{run:{[e.node.id]:t}},links:"string"==typeof t.id?[{kind:"AGENT_RUN",resourceId:t.id,label:"string"==typeof t.kind?t.kind:"Agent run",url:`/${"PLAN"===t.kind?"plans":"sessions"}/${t.id}`,metadata:{runKind:t.kind}}]:void 0,wait:A&&"string"==typeof t.id?{kind:"AGENT_RUN",externalKey:t.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}:void 0}),euq=(e,t,A,r=[])=>({output:{jobId:t.id},sessionPatch:A,links:[...r,{kind:"AGENT_JOB",resourceId:t.id,label:"Agent job",url:`/jobs/${t.id}`}],wait:{kind:"AGENT_JOB",externalKey:t.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config,t.timeoutSeconds??3600)}}),euK=(e,t,A,r,i)=>({kind:e,resourceId:t,label:A,url:r,metadata:i}),euW=(e,t)=>euK("JIRA_TICKET",e,t??e);function euz(e,t,A){let r=eu2(e);return euK("PULL_REQUEST",euv(r.owner,r.name,eu9(e)),t??"Pull request",A)}function euZ(e){let t=eu1(e),A=eu5(e);return t&&A?euK("PULL_REQUEST",euv(t.owner,t.name,A),"Pull request"):null}function euX(e){let t=e.node.config.workflowRunId??Cb(e.sessionData,"pipeline.runId"),A=Cb(e.sessionData,"pipeline.url");return("string"==typeof t||"number"==typeof t)&&"string"==typeof A&&A?euK("GITHUB_WORKFLOW_RUN",String(t),"Workflow run",A):null}function eu0(e){let t=Cb(e.sessionData,"run.kind");if("PLAN"!==t&&"SESSION"!==t)return null;let A=function(e){try{return edr(e)}catch{return null}}(e);return A?euK("AGENT_RUN",A,t,`/${"PLAN"===t?"plans":"sessions"}/${A}`,{runKind:t}):null}function eu1(e){let t=e.node.config.owner,A=e.node.config.name;if("string"==typeof t&&t.trim()&&"string"==typeof A&&A.trim())return{owner:t.trim(),name:A.trim()};let r=e.sessionData.repo&&"object"==typeof e.sessionData.repo&&!Array.isArray(e.sessionData.repo)?e.sessionData.repo.displayOrigin:null,i="string"==typeof r?r.match(/(?:https?:\/\/)?github\.com[/:]([^/]+)\/([^/.]+)(?:\.git)?$/i):null,n=i?.[1]?.trim(),a=i?.[2]?.trim();return n&&a?{owner:n,name:a}:null}function eu2(e){let t=eu1(e);if(!t)throw Error("GitHub owner and repository are required");return t}function eu4(e){let t=euP(e,"Jira ticket"),A=t.issueType&&"object"==typeof t.issueType?t.issueType:{},r=t.status&&"object"==typeof t.status?t.status:{};return{...t,key:t.key,title:t.summary??t.title,type:A.name??t.type,status:r.name??t.status,statusCategory:r.category??t.statusCategory}}function eu3(e){let t=euP(e,"Pull request"),A=Array.isArray(t.reviewThreads)?t.reviewThreads:[];return{...t,unresolvedThreads:A.filter(e=>e&&"object"==typeof e&&!Array.isArray(e)&&!0!==e.isResolved)}}function eu8(e){return euJ(e.node.config.issueKey??Cb(e.sessionData,"ticket.key"),"Jira issue key",100)}function eu5(e){let t=e.node.config.number??Cb(e.sessionData,"pr.number"),A="string"==typeof t?Number(t):t;return"number"==typeof A&&Number.isInteger(A)&&A>=1?A:null}function eu9(e){let t=eu5(e);if(!t)throw Error("Pull request number is required");return t}function eu6(e){return euj(e,"worktreeId","worktree.id","Worktree ID")}function eu7(e){return euj(e,"codebaseId","codebase.id","Codebase ID")}function ede(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:euY(e.node.config.branchName??Cb(e.sessionData,"worktree.branch"),500),ticketKey:"TICKET"===t?euY(e.node.config.ticketKey??Cb(e.sessionData,"ticket.key"),100):null,baseBranch:euJ(e.node.config.baseBranch??Cb(e.sessionData,"worktree.baseBranch")??Cb(e.sessionData,"repo.defaultBranch"),"Base branch",500)}}function edt(e){return euj(e,"buildId","build.id","Build ID")}function edA(e){return euJ(e.node.config.agentId??Cb(e.sessionData,"agent.id")??Cb(e.sessionData,"codebase.agentId"),"Agent ID",500)}function edr(e){let t=e.node.config.runId;if("string"==typeof t&&t)return t;let A=e.node.config.sourceStepId;return"string"==typeof A?euJ(Cb(e.sessionData,`run.${A}.id`),"Agent run ID",500):euJ(Cb(e.sessionData,"run.id"),"Agent run ID",500)}function edi(e,t){let A,r;return{kind:t,worktreeId:(A=e.node.config.worktreeId,r=Cb(e.sessionData,"worktree.id"),"string"==typeof A&&A===e.run.workflowId&&"string"==typeof r&&r!==A?euJ(r,"Worktree ID",500):eu6(e)),jiraIssueKey:euY(e.node.config.jiraIssueKey??Cb(e.sessionData,"ticket.key"),100),provider:euJ(e.node.config.provider??"CODEX","Provider",50),model:euJ(e.node.config.model,"Model",200),effort:euY(e.node.config.effort,50),webSearchEnabled:!0===e.node.config.webSearchEnabled,prompt:euJ(e.node.config.prompt,"Prompt",2e5),attachmentIds:Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[]}}let edn="workflow:trigger-events";class eda{async record(e){let t=await ag(),A=await this.recordInTransaction(t,e);return this.created(A.id),A}async recordInTransaction(e,t){let A=await e.workflowTriggerEvent.findUnique({where:{dedupeKey:t.dedupeKey}});return A||e.workflowTriggerEvent.create({data:{id:(0,AB.randomUUID)(),kind:t.kind,subjectKey:t.subjectKey,dedupeKey:t.dedupeKey,payloadJson:JSON.stringify(t.payload)}})}created(e){af.publish(edn,{workflowTriggerEventCreated:{id:e}})}subscribe(){return af.iterate(edn)}}function eds(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}catch{return{}}}function edo(e,t){return{id:e.id,name:e.name,url:e.displayOrigin,canonicalOrigin:e.canonicalOrigin,displayOrigin:e.displayOrigin,defaultBranch:t??null}}function edl(e){return{id:e.id,name:e.name,hostname:e.hostname,connected:null===e.disconnectedAt,diskFreeBytes:e.diskFreeBytes,memoryFreeBytes:e.memoryFreeBytes}}class edc{events;agentControl;worktrees;diskSpace;started;running;diskAuditTimer;diskStateFingerprints;constructor(e,t,A,r){this.events=e,this.agentControl=t,this.worktrees=A,this.diskSpace=r,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.diskSpace&&(this.consumeDiskSpace(),this.auditDiskSpace(!0)))}stop(){this.running=!1,this.diskAuditTimer&&clearTimeout(this.diskAuditTimer),this.diskAuditTimer=void 0}async record(e,t,A,r,i={}){await this.events.record({kind:e,subjectKey:t,dedupeKey:A,payload:{...r,...i,sessionData:r}})}async worktreeSessionData(e,t=!1){return e&&this.worktrees?this.worktrees.workflowSessionDataForWorktree(e,{includeMissing:t}):{}}async observeAgentJob(e){if("ccusage.report"===e.kind&&"SUCCEEDED"===e.status&&e.resultJson){let t=eds(e.resultJson),A=t.report&&"object"==typeof t.report&&!Array.isArray(t.report)?t.report:{},r=A.totals&&"object"==typeof A.totals&&!Array.isArray(A.totals)?A.totals:{};await this.record("CCUSAGE_THRESHOLD",e.agentId,`ccusage:${e.ccusageCollectionId??e.id}:${e.agentId}`,{run:{usage:r},agent:{id:e.agentId}},{cursorValue:e.ccusageCollectionId??e.id});return}if(!new Set(["FAILED","TIMED_OUT"]).has(e.status))return;let t=await this.worktreeSessionData(e.worktreeId,!0);await this.record("AGENT_JOB_FAILED",e.agentId,`agent-job:${e.id}:${e.status}`,Ck(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=af.iterate(aT);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 observeRun(e){let t=await ag(),A=await t.agentRun.findUnique({where:{id:e},include:{worktree:{include:{codebase:{include:{repository:!0}}}},agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},questionBatches:{orderBy:{createdAt:"desc"},take:1,include:{questions:{include:{options:!0}}}},events:{orderBy:{sequence:"desc"},take:1},toolCalls:{orderBy:{sequence:"desc"},take:1}}});if(!A)return;let r=await t.workflowRunResourceLink.findFirst({where:{kind:"AGENT_RUN",resourceId:A.id},include:{run:!0},orderBy:{createdAt:"desc"}}),i=Ck(await this.worktreeSessionData(A.worktree?.id??null),{run:{id:A.id,kind:A.kind,status:A.status,phase:A.phase,origin:A.origin,provider:A.provider,model:A.model,finalOutput:A.finalOutput,error:A.error,sourcePlanId:A.sourcePlanId,parentRunId:A.parentRunId,followUpMode:A.followUpMode,usage:{inputTokens:A.inputTokens,outputTokens:A.outputTokens,reasoningTokens:A.reasoningTokens,cacheReadTokens:A.cacheReadTokens,cacheWriteTokens:A.cacheWriteTokens,toolCallCount:A.toolCallCount,estimatedCost:A.estimatedCost}},...A.worktree?{worktree:{id:A.worktree.id,path:A.worktree.folder,branch:A.worktree.branch,headSha:A.worktree.headSha},codebase:{id:A.worktree.codebase.id,folder:A.worktree.codebase.folder,agentId:A.worktree.codebase.agentId},repo:edo(A.worktree.codebase.repository,A.worktree.codebase.defaultBranch)}:{},...A.agent?{agent:edl(A.agent)}:{},...A.jiraIssueKey?{ticket:{key:A.jiraIssueKey}}:{}}),n=r?{workflowId:r.run.workflowId,runId:r.runId,attemptId:r.attemptId}:null,a={cursorValue:`${A.status}:${A.phase}`,workflowCorrelation:n};A.startedAt&&await this.record("RUN_STARTED",A.id,`run-started:${A.id}:${A.startedAt.toISOString()}`,i,a);let s="COMPLETED"===A.status?"RUN_COMPLETED":"FAILED"===A.status?"RUN_FAILED":"CANCELLED"===A.status?"RUN_CANCELLED":"PAUSED"===A.status?"RUN_PAUSED":null;s&&await this.record(s,A.id,`run-status:${A.id}:${A.status}:${A.finishedAt?.toISOString()??A.updatedAt.toISOString()}`,i,a),"RUNNING"===A.phase&&A.startedAt&&A.updatedAt>A.startedAt&&await this.record("RUN_CONTINUED",A.id,`run-continued:${A.id}:${A.updatedAt.toISOString()}`,i,a),A.sourcePlanId&&await this.record("RUN_PLAN_PLAYED",A.id,`run-plan-played:${A.id}:${A.sourcePlanId}`,i,a),A.parentRunId&&"PLAN_PLAY"!==A.followUpMode&&await this.record("RUN_FOLLOW_UP",A.id,`run-follow-up:${A.id}:${A.parentRunId}`,i,a),"IMPORTED"===A.origin&&await this.record("RUN_IMPORTED",A.id,`run-imported:${A.id}:${A.updatedAt.toISOString()}`,i,a),await this.record("RUN_USAGE_THRESHOLD",A.id,`run-usage:${A.id}:${A.updatedAt.toISOString()}`,i,{...a,cursorValue:A.updatedAt.toISOString()});let o=A.questionBatches[0];if(o){let e={...i,run:{...i.run,questions:o.questions}};"PENDING"===o.status?await this.record("RUN_QUESTION_NEEDED",A.id,`run-question:${o.id}:pending`,e,a):"ANSWERED"===o.status&&await this.record("RUN_QUESTION_ANSWERED",A.id,`run-question:${o.id}:answered`,e,a)}let l=A.events[0];l&&await this.record("RUN_EVENT_MATCH",A.id,`run-event:${l.id}`,i,{...a,event:l});let c=A.toolCalls[0];c&&await this.record("RUN_EVENT_MATCH",A.id,`run-tool:${c.id}:${c.status}`,i,{...a,toolCall:c})}async consumeBuilds(){let e=af.iterate(av);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 ag(),A=await t.build.findUnique({where:{id:e},include:{codebase:{include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}}},worktree:!0,reports:!0,scriptExecutions:!0}});if(!A)return;let r=Ck(await this.worktreeSessionData(A.worktree?.id??null),{build:{id:A.id,status:A.status,action:A.action,error:A.error},...A.codebase?{codebase:{id:A.codebase.id,folder:A.codebase.folder,agentId:A.codebase.agentId},repo:edo(A.codebase.repository,A.codebase.defaultBranch),agent:edl(A.codebase.agent)}:{},...A.worktree?{worktree:{id:A.worktree.id,path:A.worktree.folder,branch:A.worktree.branch,headSha:A.worktree.headSha}}:{}});for(let e of(new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(A.status)&&await this.record("BUILD_RESULT",A.id,`build-result:${A.id}:${A.status}`,r,{cursorValue:A.status}),A.reports.filter(({status:e})=>"READY"===e))){let t=eds(e.summaryJson),i={...r,build:{...r.build,..."TEST_RESULTS"===e.kind?{testSummary:t}:{coverageSummary:t}}};await this.record("TEST_RESULTS"===e.kind?"BUILD_TEST_THRESHOLD":"BUILD_COVERAGE_THRESHOLD",A.id,`build-report:${e.id}:${e.updatedAt.toISOString()}`,i,{cursorValue:e.updatedAt.toISOString()})}for(let e of A.scriptExecutions.filter(({causedBuildFailure:e})=>e))await this.record("BUILD_HOOK_FAILED",A.id,`build-hook:${e.id}:failed`,r,{cursorValue:e.id,script:{id:e.id,name:e.nameSnapshot,phase:e.phase}})}async consumeWorktrees(){let e=af.iterate(aD);try{for await(let t of e){if(!this.running)break;let e=t.worktreeOverviewChanged,A=await ag();for(let t of(await A.worktree.findMany({where:e.worktreeId?{id:e.worktreeId}:e.codebaseId?{codebaseId:e.codebaseId}:{},include:{codebase:{include:{repository:!0}}},take:e.worktreeId?1:500})))await this.observeWorktree(t).catch(e=>console.error("Could not record workflow worktree trigger:",e))}}finally{await e.return?.()}}async observeWorktree(e){let t=e.lastCheckedAt??e.updatedAt,A=e.hasStagedChanges||e.hasUnstagedChanges,r=Ck(await this.worktreeSessionData(e.id,!0),{repo:edo(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,pushStatus:e.pushStatus,baseBehind:e.baseBehind,dirty:A,missingAt:e.missingAt?.toISOString()??null,dirtySince:A?e.updatedAt.toISOString():null}}),i={cursorValue:t.toISOString()};(e.baseBehind??0)>0&&await this.record("WORKTREE_BEHIND",e.id,`worktree-behind:${e.id}:${t.toISOString()}`,r,i),await this.record("WORKTREE_DIRTY_DURATION",e.id,`worktree-dirty:${e.id}:${t.toISOString()}`,r,i),await this.record("WORKTREE_MISSING",e.id,`worktree-missing:${e.id}:${t.toISOString()}`,r,{cursorValue:!!e.missingAt}),await this.record("WORKTREE_DIVERGED",e.id,`worktree-diverged:${e.id}:${t.toISOString()}`,r,{cursorValue:"DIVERGED"===e.pushStatus}),e.headSha&&await this.record("WORKTREE_NEW_COMMIT",e.id,`worktree-commit:${e.id}:${e.headSha}`,r,{cursorValue:e.headSha})}async consumeCodebases(){let e=af.iterate(aS);try{for await(let t of e){if(!this.running)break;let e=await ag(),A=t.codebaseOverviewChanged;for(let t of(await e.codebase.findMany({where:A.codebaseId?{id:A.codebaseId}:A.repositoryId?{repositoryId:A.repositoryId}:{},include:{repository:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}}},take:A.codebaseId?1:500}))){let e={repo:edo(t.repository,t.defaultBranch),agent:edl(t.agent),codebase:{id:t.id,folder:t.folder,agentId:t.agentId,branch:t.defaultBranch,remoteBranches:JSON.parse(t.remoteBranchesJson)}},A=e.codebase.remoteBranches;if(Array.isArray(A))for(let r of A.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 A=e.agent.id;t.report&&await this.record("AGENT_DISK_REPORT",A,`agent-disk-report:${A}:${e.disk.lastReportedAt??t.changeId}`,e,{cursorValue:e.disk.lastReportedAt}),t.threshold&&await this.record("AGENT_DISK_THRESHOLD",A,`agent-disk-threshold:${A}:${t.changeId}`,e);let r=eo9(e);if(await this.record("AGENT_DISK_STATE_CHANGED",A,`agent-disk-state:${A}:${t.changeId}`,e,{cursorValue:r}),this.diskStateFingerprints.set(A,JSON.stringify(r)),t.cleanup){let r={...e,cleanup:t.cleanup};await this.record("AGENT_DISK_CLEANUP_RESULT",A,`agent-disk-cleanup:${t.cleanup.jobId}:${t.cleanup.status}`,r,{cleanup:t.cleanup})}}async observeDiskChange(e){if(!this.diskSpace)return;let{id:t,reason:A,cleanup:r}=e.diskSpaceChange;if("settings"===e.diskSpaceChanged){let e=await this.diskSpace.overview();for(let r of e.agents)await this.emitDiskSnapshot(eo5(e.settings,r,A),{changeId:t,report:!1,threshold:!0});return}let i=await this.diskSpace.snapshot(e.diskSpaceChanged,A);await this.emitDiskSnapshot(i,{changeId:t,report:"REPORT_RECEIVED"===A,threshold:!0,cleanup:r})}async consumeDiskSpace(){if(!this.diskSpace)return;let e=this.diskSpace.subscribe();try{for await(let t of e){if(!this.running)break;await this.observeDiskChange(t).catch(e=>console.error("Could not record disk-space workflow trigger:",e))}}finally{await e.return?.()}}async auditDiskSpace(e){if(this.diskSpace&&this.running)try{let t=await this.diskSpace.overview();for(let A of t.agents){let r=eo5(t.settings,A,e?"STARTUP_RECONCILE":"STATE_AUDIT"),i=JSON.stringify(eo9(r));(e||this.diskStateFingerprints.get(A.agent.id)!==i)&&await this.emitDiskSnapshot(r,{changeId:(0,AB.randomUUID)(),report:!1,threshold:e})}}catch(e){console.error("Could not audit disk-space workflow state:",e)}finally{this.running&&(this.diskAuditTimer=setTimeout(()=>void this.auditDiskSpace(!1),6e4),this.diskAuditTimer.unref?.())}}async consumeAgents(){let e=af.iterate(am);try{for await(let t of e){if(!this.running)break;let e=await ag(),A=await e.agent.findUnique({where:{id:t.agentChanged.id}});if(!A)continue;let r=null===A.disconnectedAt,i={codebase:{agentId:A.id},agent:{id:A.id,name:A.name,connected:r,diskFreeBytes:A.diskFreeBytes,memoryFreeBytes:A.memoryFreeBytes}};await this.record("AGENT_CONNECTION",A.id,`agent-connection:${A.id}:${A.updatedAt.toISOString()}`,i,{cursorValue:r})}}finally{await e.return?.()}}}async function edu(e,t){let A=e.trim();if(!A||A.length>5e4)throw Error(`Workflow script must contain 1–${5e4.toLocaleString()} characters`);let r=await bl(),i=Date.now()+250;try{return r.evalCode(`"use strict"; const session = Object.freeze(${JSON.stringify(t)}); (${A})(session);`,{memoryLimitBytes:8388608,maxStackSizeBytes:524288,shouldInterrupt:bs(i)})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Workflow script failed: ${"interrupted"===e?"execution timed out after 250ms":e}`)}}class edd{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 edh="workflows:changed",edp=e=>`workflow-run:${e}`,edg=e=>`workflow-run:${e}:events`,edE=e=>`workflow-run:${e}:questions`,edI=["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED"],edf=new Set(["SUCCEEDED","FAILED","CANCELLED"]),edm=new Set(["SUCCEEDED","FAILED","CANCELLED","SKIPPED","SUPERSEDED"]),edC=new Set(["RUNNING","WAITING"]),edy=e=>JSON.parse(e);function edQ(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()<=aZ(e)}:{},...void 0!==e.diskFreeBytes?{diskFreeBytes:e.diskFreeBytes}:{},...void 0!==e.memoryFreeBytes?{memoryFreeBytes:e.memoryFreeBytes}:{}}}}function edw(e){return Ck(edQ(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 edB(e,t,A){let r=e.trim();if(!r)throw Error(`${t} is required`);if(r.length>A)throw Error(`${t} is too long`);return r}function edS(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 edD(e,t){let A=e??("CONCURRENT"===t?4:1);if(!Number.isInteger(A)||A<1||A>32)throw Error("Maximum concurrent runs must be between 1 and 32");return A}function edb(e){return Array.isArray(e)?`[${e.map(edb).join(",")}]`:e&&"object"==typeof e?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${edb(t)}`).join(",")}}`:JSON.stringify(e)}function edv(e,t,A){if(Buffer.byteLength(e,"utf8")>A)throw Error(`${t} is too large`)}function edk(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`${t} must be an object`);return e}function edR(e){af.publish(edh,{workflowChanged:{id:e}})}function edx(e){af.publish(edp(e),{workflowRunChanged:{id:e}}),af.publish(edh,{workflowChanged:{id:"runs",runId:e}}),af.publish(aJ,{sidebarStatusChanged:!0})}function edN(e){return[...yE.get(e.kind).requiredPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.requiredPaths,...ye(e.kind,"step",e.config)]}function edT(e){return[...yE.get(e.kind).providedPaths.map(t=>t.replaceAll("<stepId>",e.id)),...e.providedPaths,`steps.${e.id}.*`]}async function edM(e){return(await e.workflowRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:2},update:{nextValue:{increment:1}}})).nextValue-1}class edO{events;executor;checkpointRestorer;credentials;agentControl;notifications;runsService;worktrees;commandsService;githubService;jiraService;runtimeTimer;ticking;workerId;activeExecutions;claimedSecretJobs;waitPollers;constructor(e,t=new edd,A,r,i,n,a,s,o,l,c){this.events=e,this.executor=t,this.checkpointRestorer=A,this.credentials=r,this.agentControl=i,this.notifications=n,this.runsService=a,this.worktrees=s,this.commandsService=o,this.githubService=l,this.jiraService=c,this.ticking=!1,this.workerId=(0,AB.randomUUID)(),this.activeExecutions=new Map,this.claimedSecretJobs=new Set,this.waitPollers=new Map,this.agentControl&&(this.executor.register("TERMINAL_RUN",e=>this.startTerminalJob(e)),this.executor.register("WORKTREE_SNAPSHOT",e=>this.startCheckpointJob(e)),this.agentControl.registerCompletionHandler(iZ,e=>this.workflowAgentJobCompleted(e)),this.agentControl.registerCompletionObserver(e=>this.genericAgentJobCompleted(e)),this.agentControl.registerCompletionHandler(iX,e=>this.workflowAgentJobCompleted(e)))}async controlLinkedAgentRuns(e,t){if(!this.runsService)return;let A=await ag(),r=await A.workflowRunResourceLink.findMany({where:{runId:e,kind:"AGENT_RUN",attempt:{status:{in:["RUNNING","WAITING"]}}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(r.map(async({resourceId:e})=>{let A=await this.runsService.get(e);!A||"MANAGED"!==A.origin||"PAUSE"===t&&"IN_PROGRESS"!==A.status||"CONTINUE"===t&&"PAUSED"!==A.status||"CANCEL"===t&&new Set(["COMPLETED","FAILED","CANCELLED"]).has(A.status)||await this.runsService.lifecycle(e,t)}))}async cancelWaitingCommandRuns(e){if(!this.commandsService)return;let t=await ag(),A=await t.workflowRunResourceLink.findMany({where:{runId:e,kind:"COMMAND_RUN",attempt:{status:"WAITING"}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(A.map(({resourceId:e})=>this.commandsService.terminateRun(e)))}async runWorktree(e){let t=Cb(edy(e),"worktree.id");return"string"==typeof t&&t?(await ag()).worktree.findUnique({where:{id:t},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):null}async notifyRun(e,t,A,r,i){if(!this.notifications)return;let n=await ag(),a=await n.workflowRun.findUnique({where:{id:e},select:{sessionDataJson:!0}}),s=a?await this.runWorktree(a.sessionDataJson):null,o=await n.$transaction(n=>this.notifications.recordInTransaction(n,{dedupeKey:`workflow:${e}:${i}`,typeKey:t,title:A,body:r,href:`/workflows/runs/${e}`,resourceKind:"WORKFLOW_RUN",resourceId:e,worktreeId:s?.id??null,highlightColor:s?.highlightColor??null}));this.notifications.created(o)}startRuntime(){this.runtimeTimer||(this.runtimeTimer=setInterval(()=>{this.tick().catch(e=>{console.error("Workflow runtime tick failed:",e)})},1e3),this.runtimeTimer.unref?.(),this.tick().catch(e=>{console.error("Workflow runtime startup failed:",e)}))}stopRuntime(){for(let e of(this.runtimeTimer&&clearInterval(this.runtimeTimer),this.runtimeTimer=void 0,this.activeExecutions.values()))e.abort();this.activeExecutions.clear()}catalog(){return{schemaVersion:1,globalConcurrency:4,steps:yg,triggers:yD}}registerWaitPoller(e,t){this.waitPollers.set(e,t)}async list(e={}){let t=await ag(),A=Math.min(Math.max(e.first??100,1),200),r=e.archive?.toUpperCase()??"ACTIVE",i=e.search?.trim(),n=await t.workflow.findMany({where:{..."ALL"===r?{}:"ARCHIVED"===r?{archivedAt:{not:null}}:{archivedAt:null},...null===e.enabled||void 0===e.enabled?{}:{enabled:e.enabled},...i?{OR:[{name:{contains:i}},{description:{contains:i}}]}:{}},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}},_count:{select:{versions:!0,runs:!0}}},orderBy:[{updatedAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:n.slice(0,A),nextCursor:n.length>A?n[A-1].id:null,totalCount:await t.workflow.count()}}async get(e){return(await ag()).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 ag()).workflowVersion.findUnique({where:{id:e},include:{triggers:!0}})}async create(e){let t=edB(e.name,"Workflow name",200),A=yO(e.definition??function(e="Untitled workflow"){return yM.parse({format:ys,schemaVersion:1,name:e,description:"",triggers:[{id:"manual",kind:"MANUAL",position:{x:0,y:100},config:{}}],nodes:[],edges:[],editor:{}})}(t)),r=JSON.stringify({...A,name:t,description:e.description?.trim()??A.description});edv(r,"Workflow definition",2097152);let i=edS(e.overlapPolicy),n=await ag(),a=await n.workflow.create({data:{id:(0,AB.randomUUID)(),name:t,description:e.description?.trim()??A.description,draftDefinitionJson:r,draftSchemaVersion:1,overlapPolicy:i,maxConcurrentRuns:edD(e.maxConcurrentRuns,i)}});return edR(a.id),this.get(a.id)}async saveDraft(e){let t=yO(e.definition),A=JSON.stringify(t);edv(A,"Workflow definition",2097152);let r=await this.get(e.id);if(!r)throw Error("Workflow not found");let i=edS(e.overlapPolicy??r.overlapPolicy),n=await ag();return await n.workflow.update({where:{id:e.id},data:{name:t.name,description:t.description,draftDefinitionJson:A,draftSchemaVersion:t.schemaVersion,overlapPolicy:i,maxConcurrentRuns:edD(e.maxConcurrentRuns??r.maxConcurrentRuns,i)}}),edR(e.id),this.get(e.id)}async validateDraft(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let A=function(e){let t=yM.safeParse(e);if(!t.success)return{definition:null,diagnostics:t.error.issues.map(e=>({severity:"ERROR",code:"SCHEMA_INVALID",message:e.message,path:e.path.join(".")}))};let A=t.data,r=[],i=new Set;for(let e of[...A.triggers,...A.nodes])i.has(e.id)&&r.push({severity:"ERROR",code:"DUPLICATE_NODE_ID",message:`Duplicate graph id ${e.id}`,nodeId:e.id}),i.add(e.id);let n=new Set;for(let e of A.edges)n.has(e.id)&&r.push({severity:"ERROR",code:"DUPLICATE_EDGE_ID",message:`Duplicate edge id ${e.id}`}),n.add(e.id),i.has(e.source)&&i.has(e.target)||r.push({severity:"ERROR",code:"EDGE_ENDPOINT_MISSING",message:`Edge ${e.id} references a missing endpoint`}),A.triggers.some(({id:t})=>t===e.target)&&r.push({severity:"ERROR",code:"TRIGGER_HAS_INPUT",message:"Triggers cannot have incoming edges",triggerId:e.target});A.triggers.length||r.push({severity:"ERROR",code:"TRIGGER_REQUIRED",message:"At least one trigger is required"}),A.nodes.length||r.push({severity:"ERROR",code:"STEP_REQUIRED",message:"At least one step is required"});let a=new Set(A.nodes.map(({id:e})=>e)),s=new Map,o=new Map;for(let e of A.edges)s.set(e.source,[...s.get(e.source)??[],e.target]),o.set(e.target,[...o.get(e.target)??[],e.source]);for(let e of A.nodes)(o.get(e.id)??[]).filter(e=>a.has(e)).length>1&&"CONTROL_JOIN"!==e.kind&&r.push({severity:"ERROR",code:"EXPLICIT_JOIN_REQUIRED",message:"Nodes with multiple incoming branches must be explicit join nodes",nodeId:e.id});let l=new Map(A.nodes.map(e=>[e.id,0]));for(let e of A.edges)a.has(e.source)&&a.has(e.target)&&l.set(e.target,(l.get(e.target)??0)+1);let c=[...l].filter(([,e])=>0===e).map(([e])=>e),u=[];for(;c.length;){let e=c.shift();for(let t of(u.push(e),s.get(e)??[])){if(!a.has(t))continue;let e=(l.get(t)??0)-1;l.set(t,e),0===e&&c.push(t)}}u.length!==A.nodes.length&&r.push({severity:"ERROR",code:"DAG_CYCLE",message:"Workflow graphs cannot contain free-form cycles"});let d=new Map,h=e=>{let t=new Set,A=[...s.get(e)??[]];for(;A.length;){let e=A.shift();t.has(e)||(t.add(e),A.push(...s.get(e)??[]))}return t};for(let e of[...A.triggers,...A.nodes])d.set(e.id,h(e.id));for(let e of A.nodes){for(let t of(A.triggers.some(t=>d.get(t.id)?.has(e.id))||r.push({severity:"ERROR",code:"UNREACHABLE_STEP",message:"Step is not reachable from a trigger",nodeId:e.id}),yP(e.config)&&r.push({severity:"ERROR",code:"SECRET_LITERAL",message:"Store secrets as credential references, not workflow literals",nodeId:e.id}),yJ(e.config)&&r.push({severity:"ERROR",code:"UNRESOLVED_REFERENCE",message:"Resolve imported references before publishing",nodeId:e.id}),new Set(CN(e.config))))r.push({severity:"ERROR",code:"SESSION_BINDING_INVALID",message:t,nodeId:e.id});"CONTROL_SUBWORKFLOW"===e.kind&&"string"!=typeof e.config.versionId&&r.push({severity:"ERROR",code:"SUBWORKFLOW_VERSION_REQUIRED",message:"Sub-workflows must pin a published version",nodeId:e.id})}for(let e of A.triggers){for(let t of((s.get(e.id)??[]).length||r.push({severity:"ERROR",code:"TRIGGER_DISCONNECTED",message:"Trigger is not connected to a step",triggerId:e.id}),yP(e.config)&&r.push({severity:"ERROR",code:"SECRET_LITERAL",message:"Store secrets as credential references, not trigger literals",triggerId:e.id}),yJ(e.config)&&r.push({severity:"ERROR",code:"UNRESOLVED_REFERENCE",message:"Resolve imported references before publishing",triggerId:e.id}),new Set(CN(e.config))))r.push({severity:"ERROR",code:"SESSION_BINDING_INVALID",message:t,triggerId:e.id});if(Cm(e.kind)&&!yc(e.config)&&r.push({severity:"ERROR",code:"RESOURCE_KIND_REQUIRED",message:"Resource triggers must target a single resource kind; add one trigger per kind",triggerId:e.id}),Cf(e.kind)){let t=yo(e.config),i=Array.isArray(e.config.choices)?e.config.choices.length:0;t.length&&t.length===i||r.push({severity:"ERROR",code:"TRIGGER_CHOICES_REQUIRED",message:"Choice triggers need at least one option, each with a unique key",triggerId:e.id});let n=new Set(t.map(({key:e})=>e));for(let t of A.edges)t.source===e.id&&(n.has(t.sourceHandle)||r.push({severity:"ERROR",code:"TRIGGER_CHOICE_HANDLE_UNKNOWN",message:`Connection ${t.id} leaves an option that no longer exists`,triggerId:e.id}))}if("GITHUB_ISSUE_COMMAND"===e.kind){let t=e.config.allowedLogins,A=e.config.commandPattern;(!Array.isArray(t)||!t.length||t.some(e=>"string"!=typeof e||!e.trim()))&&r.push({severity:"ERROR",code:"ISSUE_COMMAND_ALLOWLIST_REQUIRED",message:"Issue command triggers require an explicit GitHub login allow-list",triggerId:e.id}),"string"==typeof A&&A.startsWith("^")&&A.endsWith("$")||r.push({severity:"ERROR",code:"ISSUE_COMMAND_PATTERN_ANCHORED",message:"Issue command patterns must be anchored with ^ and $",triggerId:e.id})}}for(let e of yG(A).requirementViolations)r.push({severity:"ERROR",code:"REQUIREMENT_UNSATISFIED",message:`${e.path} is not guaranteed on the path from ${e.triggerName}`,nodeId:e.nodeId,triggerId:e.triggerId,path:e.path});for(let e=0;e<A.nodes.length;e+=1){let t=A.nodes[e],i=[...yF(t,yE.get(t.kind).providedPaths),...t.providedPaths].filter(e=>!e.startsWith(`steps.${t.id}.`));for(let n=e+1;n<A.nodes.length;n+=1){let e=A.nodes[n];if(d.get(t.id)?.has(e.id)||d.get(e.id)?.has(t.id))continue;let a=[...yF(e,yE.get(e.kind).providedPaths),...e.providedPaths].filter(t=>!t.startsWith(`steps.${e.id}.`));i.some(e=>a.some(t=>yU(e,t)||yU(t,e)))&&r.push({severity:"ERROR",code:"PARALLEL_WRITE_CONFLICT",message:`Parallel steps ${t.name??t.id} and ${e.name??e.id} can write the same session-data path`,nodeId:e.id})}}return{definition:A,diagnostics:r}}(edy(t.draftDefinitionJson)),r=[...A.diagnostics];return A.definition&&r.push(...await this.validateSubworkflows(t.id,A.definition)),{valid:!r.some(({severity:e})=>"ERROR"===e),diagnostics:r}}async validateSubworkflows(e,t){let A=t.nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(e=>({node:e,versionId:e.config.versionId})).filter(e=>"string"==typeof e.versionId);if(!A.length)return[];let r=await ag(),i=new Map,n=new Map,a=new Set,s=new Set,o=A.map(({versionId:e})=>e);for(;o.length;){let e=[...new Set(o)].filter(e=>!s.has(e));if(!e.length)break;for(let t of(e.forEach(e=>s.add(e)),o=[],await r.workflowVersion.findMany({where:{id:{in:e}}}))){i.set(t.id,t);try{let e=yO(edy(t.definitionJson)).nodes.filter(({kind:e})=>"CONTROL_SUBWORKFLOW"===e).map(({config:e})=>e.versionId).filter(e=>"string"==typeof e);n.set(t.id,e),o.push(...e)}catch{a.add(t.id)}}}let l=(e,t)=>{let A=i.get(e);if(!A)return"MISSING";if(a.has(e))return"INVALID";if(t.has(A.workflowId))return"RECURSIVE";let r=new Set(t).add(A.workflowId);for(let t of n.get(e)??[]){let e=l(t,r);if(e)return e}return null},c=[];for(let{node:t,versionId:r}of A){let A=l(r,new Set([e]));"MISSING"===A?c.push({severity:"ERROR",code:"SUBWORKFLOW_NOT_FOUND",message:"Pinned sub-workflow chain contains a missing version",nodeId:t.id}):"INVALID"===A?c.push({severity:"ERROR",code:"SUBWORKFLOW_INVALID",message:"Pinned sub-workflow chain contains an invalid definition",nodeId:t.id}):"RECURSIVE"===A&&c.push({severity:"ERROR",code:"SUBWORKFLOW_RECURSION",message:"Pinned sub-workflow calls cannot form a recursive chain",nodeId:t.id})}return c}async publish(e){let t=await this.get(e);if(!t)throw Error("Workflow not found");let A=yO(edy(t.draftDefinitionJson)),r=await this.validateDraft(e);if(!r.valid)throw Error(`Workflow cannot be published: ${r.diagnostics.filter(({severity:e})=>"ERROR"===e).map(({message:e})=>e).slice(0,5).join("; ")}`);let i=await ag(),n=await i.$transaction(async t=>{let r=await t.workflowVersion.findFirst({where:{workflowId:e},orderBy:{version:"desc"}}),i=(0,AB.randomUUID)(),n=await t.workflowVersion.create({data:{id:i,workflowId:e,version:(r?.version??0)+1,name:A.name,description:A.description,schemaVersion:A.schemaVersion,definitionJson:JSON.stringify(A),contentHash:(0,AB.createHash)("sha256").update(edb(A)).digest("hex"),triggers:{create:A.triggers.map(e=>({id:(0,AB.randomUUID)(),nodeId:e.id,kind:e.kind,configJson:JSON.stringify(e.config)}))}},include:{triggers:!0}});return await t.workflow.update({where:{id:e},data:{activeVersionId:i}}),n});return edR(e),n}async setEnabled(e,t){let A=await ag(),r=await A.workflow.findUnique({where:{id:e}});if(!r)throw Error("Workflow not found");if(t&&!r.activeVersionId)throw Error("Publish the workflow before enabling it");return await A.workflow.update({where:{id:e},data:{enabled:t}}),edR(e),this.get(e)}async setQuickAction(e){let t=await ag(),A=[...new Set(e.repositoryIds.map(e=>e.trim()).filter(Boolean))],[r,i]=await Promise.all([t.workflow.findUnique({where:{id:e.id},select:{id:!0}}),t.codebaseRepository.count({where:{id:{in:A}}})]);if(!r)throw Error("Workflow not found");if(i!==A.length)throw Error("One or more repositories were not found");let n=e.quickActionIconKey.trim();if(!Cg.includes(e.kind))throw Error("Quick action kind is invalid");if("none"!==n&&!Aq.includes(n))throw Error("Quick action icon is invalid");let a=e.quickActionButtonVariant.trim();if(!["default","outline","secondary","destructive"].includes(a))throw Error("Quick action button style is invalid");return await t.$transaction(async t=>{await t.workflow.update({where:{id:e.id},data:{quickActionKind:e.kind,quickActionIconKey:n,quickActionButtonVariant:a}}),await t.workflowQuickActionRepository.deleteMany({where:{workflowId:e.id}}),A.length&&await t.workflowQuickActionRepository.createMany({data:A.map(t=>({workflowId:e.id,repositoryId:t}))})}),edR(e.id),this.get(e.id)}async archive(e,t){let A=await ag();return await A.workflow.update({where:{id:e},data:{archivedAt:t?new Date:null,...t?{enabled:!1}:{}}}),edR(e),this.get(e)}async delete(e){let t=await ag();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}}),edR(e),!0}export(e,t){return this.exportInternal(e,t)}async exportInternal(e,t){let A,r=await this.get(e);if(!r)throw Error("Workflow not found");let i=t?r.versions.find(e=>e.id===t):null;if(t&&!i)throw Error("Workflow version not found");let n=yO(edy(i?.definitionJson??r.draftDefinitionJson));return{format:"aide.workflow.export",schemaVersion:1,exportedAt:new Date().toISOString(),workflow:{name:i?.name??r.name,description:i?.description??r.description,overlapPolicy:r.overlapPolicy,maxConcurrentRuns:r.maxConcurrentRuns,definition:(A=(e,t="")=>Array.isArray(e)?e.map(e=>A(e,t)):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,A(t,e)])):"string"==typeof e&&/(token|secret|password|passwd|private.?key|api.?key|authorization)/i.test(t)&&!/(credential.?id|credential.?ids)$/i.test(t)||"string"==typeof e&&/^(?:\/|[A-Za-z]:[\\/]|\\\\)/.test(e)&&/^(?:cwd|folder|path|directory)$/i.test(t)?null:e,yM.parse(A(n)))}}}async import(e){edv("string"==typeof e.payload?e.payload:JSON.stringify(e.payload),"Workflow import",2097152);let t=edk("string"==typeof e.payload?JSON.parse(e.payload):e.payload,"Workflow import"),A="aide.workflow.export"===t.format,r=A?edk(t.workflow,"Exported workflow"):t,i=yO(A?r.definition:r);return this.create({name:e.name?.trim()||i.name,description:i.description,definition:{...i,name:e.name?.trim()||i.name},overlapPolicy:"string"==typeof r.overlapPolicy?r.overlapPolicy:"QUEUE",maxConcurrentRuns:"number"==typeof r.maxConcurrentRuns?r.maxConcurrentRuns:1})}async runs(e={}){let t=await ag(),A=Math.min(Math.max(e.first??100,1),200),r=Number(e.search),i=e.archive?.toUpperCase()??"ACTIVE",n="ALL"===i?{}:"ARCHIVED"===i?{archivedAt:{not:null}}:{archivedAt:null},a=await t.workflowRun.findMany({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{},...e.status?{status:e.status.toUpperCase()}:{},...Number.isInteger(r)&&r>0?{displayNumber:r}:e.search?.trim()?{workflow:{name:{contains:e.search.trim()}}}:{}},include:{workflow:!0,version:!0,trigger:!0,_count:{select:{attempts:!0,events:!0}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:A+1,...e.after?{cursor:{id:e.after},skip:1}:{}});return{items:a.slice(0,A),nextCursor:a.length>A?a[A-1].id:null,totalCount:await t.workflowRun.count({where:{...n,...e.workflowId?{workflowId:e.workflowId}:{}}})}}async archiveRuns(e,t){let A=await ag(),r=[...new Set(e)],i=await A.workflowRun.updateMany({where:{id:{in:r}},data:{archivedAt:t?new Date:null}});for(let e of r)edx(e);return i.count}async deleteRuns(e){let t=await ag(),A=[...new Set(e)];if(await t.workflowRun.count({where:{id:{in:A},status:{notIn:["SUCCEEDED","FAILED","CANCELLED"]}}}))throw Error("Cancel runs that have not finished before deleting them");let r=await t.workflowRun.deleteMany({where:{id:{in:A}}});for(let e of A)edx(e);return r.count}async run(e){return(await ag()).workflowRun.findUnique({where:{id:e},include:{workflow:!0,version:!0,trigger:!0,parentRun:!0,childRuns:{orderBy:{createdAt:"asc"}},attempts:{orderBy:[{generation:"asc"},{nodeId:"asc"},{iterationKey:"asc"},{attempt:"asc"}],include:{waits:{orderBy:{createdAt:"asc"}},resourceLinks:{orderBy:{createdAt:"asc"}},questionBatches:{orderBy:{createdAt:"asc"},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}},checkpoints:{orderBy:{createdAt:"asc"}}}},waits:{orderBy:{createdAt:"asc"}},events:{orderBy:{sequence:"asc"}},resourceLinks:{orderBy:{createdAt:"asc"}}}})}async runEvents(e,t=-1,A=500){return(await ag()).workflowRunEvent.findMany({where:{runId:e,sequence:{gt:t}},orderBy:{sequence:"asc"},take:Math.min(Math.max(A,1),1e3)})}async questionBatch(e){return(await ag()).runQuestionBatch.findUnique({where:{id:e},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}})}async jobSecrets(e,t){if(!this.credentials||!this.agentControl)throw Error("Workflow credentials are unavailable");if(this.claimedSecretJobs.has(t))throw Error("Workflow job secrets were already claimed");let A=await this.agentControl.getJob(t);if(!A||A.agentId!==e||"workflow.terminal.run"!==A.kind||"RUNNING"!==A.status)throw Error("Workflow job is not eligible to claim secrets");let r=i3(edy(A.payloadJson)),i=new Set(Object.values(sb)),n=[];for(let e of r.credentialEnvironment){if(!i.has(e.credential.kind))throw Error("Workflow references an unsupported credential kind");let t=await this.credentials.getText(e.credential);if(null===t)throw Error(`Credential ${e.credential.id} is unavailable`);n.push({name:e.name,value:t})}return this.claimedSecretJobs.add(t),n}async workflowAgentContext(e){let t=await ag(),A=Cb(e,"worktree.id");if("string"==typeof A){let e=await t.worktree.findUnique({where:{id:A},include:{codebase:{include:{agent:!0}}}});if(!e)throw Error("Workflow worktree is unavailable");let r=JSON.parse(e.codebase.agent.capabilitiesJson);return{agentId:e.codebase.agentId,codebaseId:e.codebaseId,worktreeId:e.id,cwd:e.folder,capabilities:Array.isArray(r)?r.filter(e=>"string"==typeof e):[]}}let r=Cb(e,"codebase.id");if("string"!=typeof r)throw Error("Workflow requires a codebase or worktree");let i=await t.codebase.findUnique({where:{id:r},include:{agent:!0}});if(!i)throw Error("Workflow codebase is unavailable");let n=JSON.parse(i.agent.capabilitiesJson);return{agentId:i.agentId,codebaseId:i.id,worktreeId:null,cwd:i.folder,capabilities:Array.isArray(n)?n.filter(e=>"string"==typeof e):[]}}async startTerminalJob(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await this.workflowAgentContext(e.sessionData);if(!t.capabilities.includes(iZ))throw Error("The selected agent must be updated to run workflow terminal steps");let A={...e.node.config.environment&&"object"==typeof e.node.config.environment&&!Array.isArray(e.node.config.environment)?Object.fromEntries(Object.entries(e.node.config.environment).map(([e,t])=>[e,String(t)])):{},AIDE_TICKET_KEY:String(Cb(e.sessionData,"ticket.key")??""),AIDE_TICKET_TITLE:String(Cb(e.sessionData,"ticket.title")??""),AIDE_BRANCH:String(Cb(e.sessionData,"worktree.branch")??""),AIDE_BASE_BRANCH:String(Cb(e.sessionData,"worktree.baseBranch")??""),AIDE_WORKTREE_PATH:String(Cb(e.sessionData,"worktree.path")??t.cwd),AIDE_CODEBASE_PATH:String(Cb(e.sessionData,"codebase.folder")??t.cwd),AIDE_REPO_ORIGIN:String(Cb(e.sessionData,"repo.displayOrigin")??"")},r=Array.isArray(e.node.config.credentials)?e.node.config.credentials:[],i=await this.agentControl.createJob({agentId:t.agentId,kind:iZ,payload:{workflowRunId:e.run.id,stepAttemptId:e.attempt.id,stepId:e.node.id,codebaseId:t.codebaseId,worktreeId:t.worktreeId,cwd:t.cwd,script:edB(String(e.node.config.script??""),"Terminal script",1e6),interpreter:"NODE"===e.node.config.interpreter?"NODE":"SHELL",sessionData:e.sessionData,environment:A,credentialEnvironment:r},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:Number(e.node.config.timeoutSeconds??900),codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:i.id},links:[{kind:"AGENT_JOB",resourceId:i.id,label:"Workflow terminal job",url:`/jobs/${i.id}`}],wait:{kind:"AGENT_JOB",externalKey:i.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(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(iX))throw Error("The selected agent must be updated to capture workflow checkpoints");let A=await this.agentControl.createJob({agentId:t.agentId,kind:iX,payload:{operation:"CAPTURE",workflowRunId:e.run.id,stepAttemptId:e.attempt.id,cwd:t.cwd,kind:String(e.node.config.kind??"STEP"),checkpoint:null,stash:!1},idempotencyKey:e.attempt.idempotencyKey,timeoutSeconds:300,codebaseId:t.codebaseId,worktreeId:t.worktreeId,visibility:"SYSTEM"});return{output:{jobId:A.id},links:[{kind:"AGENT_JOB",resourceId:A.id,label:"Workflow checkpoint job",url:`/jobs/${A.id}`}],wait:{kind:"AGENT_JOB",externalKey:A.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}async workflowAgentJobCompleted(e){if(e.kind===iZ){let t=i3(edy(e.payloadJson));if("SUCCEEDED"!==e.status||!e.resultJson)return void await this.resolveExternalWait("AGENT_JOB",e.id,{jobId:e.id,status:e.status},e.error||`Workflow terminal job ${e.status.toLowerCase()}`);let A=edk(edy(e.resultJson),"Workflow terminal result");return void await this.resolveExternalWait("AGENT_JOB",e.id,{...A,jobId:e.id,stepAttemptId:t.stepAttemptId})}if(e.kind!==iX)return;let t=i8(edy(e.payloadJson));if("SUCCEEDED"!==e.status||!e.resultJson)return void await this.resolveExternalWait("AGENT_JOB",e.id,{jobId:e.id,status:e.status},e.error||`Workflow checkpoint job ${e.status.toLowerCase()}`);let A=edk(edy(e.resultJson),"Workflow checkpoint result"),r=null;if(A.checkpoint&&"object"==typeof A.checkpoint){let e=A.checkpoint,i=await ag();r=(0,AB.randomUUID)(),await i.$transaction([i.runCheckpoint.create({data:{id:r,workflowStepAttemptId:t.stepAttemptId,kind:String(e.kind??t.kind),headSha:"string"==typeof e.headSha?e.headSha:null,branch:"string"==typeof e.branch?e.branch:null,upstreamSha:"string"==typeof e.upstreamSha?e.upstreamSha:null,indexTree:"string"==typeof e.indexTree?e.indexTree:null,worktreeTree:"string"==typeof e.worktreeTree?e.worktreeTree:null,refName:"string"==typeof e.refName?e.refName:null,manifestJson:"string"==typeof e.manifestJson?e.manifestJson:null,diffSummary:"string"==typeof e.diffSummary?e.diffSummary:null,diffPatch:"string"==typeof e.diffPatch?e.diffPatch:null,stashRef:"string"==typeof A.stashRef?A.stashRef:"string"==typeof e.stashRef?e.stashRef:null}}),i.workflowRunResourceLink.create({data:{id:(0,AB.randomUUID)(),runId:t.workflowRunId,attemptId:t.stepAttemptId,kind:"CHECKPOINT",resourceId:r,label:`${String(e.kind??t.kind)} checkpoint`}})])}await this.resolveExternalWait("AGENT_JOB",e.id,{...A,jobId:e.id,checkpointId:r})}async genericAgentJobCompleted(e){if(e.kind===iZ||e.kind===iX)return;let t=e.resultJson?edk(edy(e.resultJson),"Agent job result"):{status:e.status};if("SUCCEEDED"===e.status){let A=await ag(),r=t.worktree&&"object"==typeof t.worktree&&!Array.isArray(t.worktree)?t.worktree:null,i=r&&"string"==typeof r.gitDirectory?r.gitDirectory:null,n=e.codebaseId?await A.worktree.findFirst({where:{codebaseId:e.codebaseId,...e.worktreeId?{id:e.worktreeId}:i?{gitDirectory:i}:{id:"__missing__"}},include:{codebase:{include:{repository:!0,agent:!0}}}}):null,a=n?.codebase??(e.codebaseId?await A.codebase.findUnique({where:{id:e.codebaseId},include:{repository:!0,agent:!0}}):null),s={};if(n&&this.worktrees?.workflowSessionDataForWorktree)try{s=await this.worktrees.workflowSessionDataForWorktree(n.id,{includeMissing:!0})}catch{}if(a&&!s.codebase&&(s.repo={id:a.repository.id,name:a.repository.name,url:a.repository.displayOrigin,canonicalOrigin:a.repository.canonicalOrigin,displayOrigin:a.repository.displayOrigin,defaultBranch:a.defaultBranch},s.codebase={id:a.id,folder:a.folder,agentId:a.agentId,branch:a.defaultBranch,headSha:a.headSha},s.agent={id:a.agent.id,name:a.agent.name,hostname:a.agent.hostname}),n&&!s.worktree&&(s.worktree={id:n.id,path:n.folder,branch:n.branch,baseBranch:n.baseBranchOverride??n.codebase.defaultBranch,headSha:n.headSha,pushStatus:n.pushStatus,ahead:n.ahead,behind:n.behind,baseBehind:n.baseBehind,dirty:n.hasStagedChanges||n.hasUnstagedChanges}),Object.keys(s).length){let e=t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)?t.sessionPatch:{};t={...t,sessionPatch:Ck(e,s)}}}await this.resolveExternalWait("AGENT_JOB",e.id,{...t,jobId:e.id,status:e.status},"SUCCEEDED"===e.status?null:e.error||`Agent job ${e.status.toLowerCase()}`)}async restoreCheckpointWithAgent(e,t){if(!this.agentControl)throw Error("Agent control is unavailable");let A=await ag(),r=await A.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow checkpoint not found");let n=await this.workflowAgentContext(CO(i.run.sessionDataJson)),a=await this.agentControl.createJob({agentId:n.agentId,kind:iX,payload:{operation:"RESTORE",workflowRunId:i.runId,stepAttemptId:i.id,cwd:n.cwd,kind:"REPLAY_RESTORE",checkpoint:{headSha:r.headSha,branch:r.branch,upstreamSha:r.upstreamSha,indexTree:r.indexTree,worktreeTree:r.worktreeTree,refName:r.refName},stash:t.stash},idempotencyKey:`workflow:restore:${e}:${(0,AB.randomUUID)()}`,timeoutSeconds:300,codebaseId:n.codebaseId,worktreeId:n.worktreeId,visibility:"SYSTEM"}),s=Date.now()+3e5;for(;Date.now()<s;){let e=await this.agentControl.getJob(a.id);if(!e)throw Error("Workflow restore job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(e.status)){if("SUCCEEDED"!==e.status)throw Error(e.error||`Workflow restore job ${e.status.toLowerCase()}`);return}await new Promise(e=>setTimeout(e,250))}throw await this.agentControl.cancelJob(a.id),Error("Workflow restore job timed out")}async compareCheckpointWithAgent(e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await ag(),A=await t.runCheckpoint.findUnique({where:{id:e},include:{workflowStepAttempt:{include:{run:!0}}}}),r=A?.workflowStepAttempt;if(!A||!r)throw Error("Workflow checkpoint not found");let i=await this.workflowAgentContext(CO(r.run.sessionDataJson)),n=await this.agentControl.createJob({agentId:i.agentId,kind:iX,payload:{operation:"COMPARE",workflowRunId:r.runId,stepAttemptId:r.id,cwd:i.cwd,kind:"REPLAY_PREVIEW",checkpoint:{headSha:A.headSha,branch:A.branch,upstreamSha:A.upstreamSha,indexTree:A.indexTree,worktreeTree:A.worktreeTree,refName:A.refName},stash:!1},idempotencyKey:`workflow:compare:${e}:${(0,AB.randomUUID)()}`,timeoutSeconds:60,codebaseId:i.codebaseId,worktreeId:i.worktreeId,visibility:"SYSTEM"}),a=Date.now()+6e4;for(;Date.now()<a;){let e=await this.agentControl.getJob(n.id);if(!e)throw Error("Workflow comparison job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(e.status)){if("SUCCEEDED"!==e.status||!e.resultJson)throw Error(e.error||`Workflow comparison job ${e.status.toLowerCase()}`);let t=edk(edy(e.resultJson),"Workflow comparison result");return edk(t.comparison,"Git checkpoint comparison")}await new Promise(e=>setTimeout(e,250))}throw await this.agentControl.cancelJob(n.id),Error("Workflow comparison job timed out")}async runsForResource(e,t){let A=await ag(),r=await A.workflowRunResourceLink.findMany({where:{kind:e.trim().toUpperCase(),resourceId:t.trim()},select:{runId:!0},distinct:["runId"],orderBy:{createdAt:"desc"}});return A.workflowRun.findMany({where:{id:{in:r.map(({runId:e})=>e)}},include:{workflow:!0,version:!0,trigger:!0,attempts:{orderBy:[{generation:"asc"},{createdAt:"asc"}],include:{resourceLinks:{orderBy:{createdAt:"asc"}},questionBatches:{orderBy:{createdAt:"asc"},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}}}},resourceLinks:{orderBy:{createdAt:"asc"}}},orderBy:{createdAt:"desc"}})}async acceptingResource(e){let t=e.trim().toUpperCase(),A=await ag();return(await A.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:!0},orderBy:{name:"asc"}})).filter(e=>!!e.activeVersion&&yO(edy(e.activeVersion.definitionJson)).triggers.some(e=>Cm(e.kind)&&yc(e.config)===t))}async quickActions(e){let t=await ag();if(!Cg.includes(e.kind))throw Error("Quick action kind is invalid");let A=e.resourceKind.trim().toUpperCase(),r=e.repositoryId?.trim()||null;return(await t.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null},quickActionKind:e.kind,OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:r??""}}}]},include:{activeVersion:!0},orderBy:[{name:"asc"},{id:"asc"}]})).filter(e=>!!e.activeVersion&&yO(edy(e.activeVersion.definitionJson)).triggers.some(e=>Cm(e.kind)&&yc(e.config)===A))}async recordEvent(e){return this.events.record(e)}async hydrateResourceSessionData(e,t,A){let r=e?.toUpperCase()??null,i=await ag(),n={},a=null;if("CODEBASE"===r&&t){let e=await i.codebase.findUnique({where:{id:t},select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},repository:{select:{id:!0,name:!0,canonicalOrigin:!0,displayOrigin:!0}}}});e&&(n=edw(e))}if("BUILD"===r&&t){let e=await i.build.findUnique({where:{id:t},select:{id:!0,status:!0,action:!0,error:!0,artifactDirectory:!0,worktreeId:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},codebase:{select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},repository:{select:{id:!0,name:!0,canonicalOrigin:!0,displayOrigin:!0}}}},artifacts:{select:{id:!0,kind:!0,relativePath:!0,sizeBytes:!0,checksum:!0}},reports:{where:{status:"READY"},select:{kind:!0,summaryJson:!0}}}});if(e){a=e.worktreeId;let t=t=>{let A=e.reports.find(e=>e.kind===t);if(A)try{return CO(A.summaryJson)}catch{return}},A=t("TEST_RESULTS"),r=t("CODE_COVERAGE");n=Ck(e.codebase?edw(e.codebase):e.agent?edQ(e.agent):{},{build:{id:e.id,status:e.status,action:e.action,error:e.error,artifactDirectory:e.artifactDirectory,artifacts:e.artifacts,...A?{testSummary:A}:{},...r?{coverageSummary:r}:{}}})}}if("AGENT_RUN"===r&&t){let e=await i.agentRun.findUnique({where:{id:t},select:{id:!0,kind:!0,status:!0,phase:!0,origin:!0,provider:!0,model:!0,branch:!0,finalOutput:!0,error:!0,jiraIssueKey:!0,worktreeId:!0,agent:{select:{id:!0,name:!0,hostname:!0,disconnectedAt:!0,diskFreeBytes:!0,memoryFreeBytes:!0}},inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,toolCallCount:!0,estimatedCost:!0}});e&&(a=e.worktreeId,n=Ck(e.agent?edQ(e.agent):{},{run:{id:e.id,kind:e.kind,status:e.status,phase:e.phase,origin:e.origin,provider:e.provider,model:e.model,branch:e.branch,finalOutput:e.finalOutput,error:e.error,usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,reasoningTokens:e.reasoningTokens,cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,toolCallCount:e.toolCallCount,estimatedCost:e.estimatedCost}},...e.jiraIssueKey?{ticket:{key:e.jiraIssueKey}}:{}}))}if("PULL_REQUEST"===r&&t&&this.githubService){let e=/^([^/]+)\/([^#]+)#([1-9]\d*)$/.exec(t);if(e)try{let t=await this.githubService.pullRequest(e[1],e[2],Number(e[3]));t&&(a=t.worktreeId,n=Ck(n,{repo:{id:t.codebaseRepositoryId,githubId:t.repositoryGithubId,name:t.repositoryNameWithOwner.split("/").at(-1),displayOrigin:t.repositoryNameWithOwner,url:t.repositoryUrl},pr:{...t,headBranch:t.headRefName,baseBranch:t.baseRefName,unresolvedThreads:t.reviewThreads.filter(({isResolved:e})=>!e)},...t.jiraKey?{ticket:{key:t.jiraKey}}:{}}))}catch{}}if("JIRA_TICKET"===r&&t&&this.jiraService)try{let e=await this.jiraService.ticket(t),A=e.comments.at(-1)??null;n=Ck(n,{ticket:{...e,title:e.summary,type:e.issueType,url:e.jiraUrl},...A?{comment:{id:A.id,body:A.content?.rawText??"",author:A.author}}:{}})}catch{}let s=Cb(A,"worktree.id"),o="WORKTREE"===r?t:"GITHUB_PIPELINE"===r||"GITHUB_JOB"===r?"string"==typeof s?s:null:a;if(o&&this.worktrees)if(this.worktrees.workflowSessionDataForWorktree)n=Ck(await this.worktrees.workflowSessionDataForWorktree(o),n);else{let e=await this.worktrees.ticketKeyForWorktree(o);e&&(n=Ck({ticket:{key:e}},n))}let l=Cb(A,"pipeline.pullRequests");!Cb(n,"pr")&&!Cb(A,"pr")&&Array.isArray(l)&&l[0]&&"object"==typeof l[0]&&!Array.isArray(l[0])&&(n=Ck(n,{pr:l[0]}));let c=Cb(A,"pr.jiraKey")??Cb(A,"pipeline.jiraKey");return"string"!=typeof Cb(n,"ticket.key")&&"string"==typeof c&&c.trim()&&(n=Ck(n,{ticket:{key:c}})),Ck(n,A)}async trigger(e){let t=await ag(),A=await t.workflow.findUnique({where:{id:e.workflowId},include:{activeVersion:{include:{triggers:!0}}}});if(!A?.activeVersion)throw Error("Published workflow not found");if(!A.enabled||A.archivedAt)throw Error("Workflow is paused");let r=e.resourceKind?.toUpperCase()??null,i=e.choice?.trim()||null,{triggers:n}=A.activeVersion,a=r?"RESOURCE_MANUAL":"MANUAL",s=r?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE",o=e=>n.find(t=>t.kind===e&&(!r||yc(edk(edy(t.configJson),"Trigger configuration"))===r))??null,l=o(s),c=o(a),u=i?l:c;if(i&&!l)throw Error(r?`No resource trigger offers choices for ${r} resources`:"This workflow has no manual trigger with choices");if(!i&&!c&&l){let e=yo(edk(edy(l.configJson),"Trigger configuration"));throw Error(`This workflow needs a choice: ${e.map(({key:e})=>e).join(", ")}`)}if(r&&!u)throw Error(`No resource trigger accepts ${e.resourceKind} resources`);if(i&&l&&!yo(edk(edy(l.configJson),"Trigger configuration")).some(({key:e})=>e===i))throw Error(`Unknown choice ${i}`);let d=e.subjectKey?.trim()||(r&&e.resourceId?`${r}:${e.resourceId}`:`manual:${(0,AB.randomUUID)()}`),h={sessionData:await this.hydrateResourceSessionData(e.resourceKind,e.resourceId,e.sessionData??{}),resourceKind:e.resourceKind??null,resourceId:e.resourceId??null,choice:i,manual:!0},p=await this.createRunForTrigger(A,A.activeVersion,u,null,i?s:a,d,h,`manual:${A.id}:${(0,AB.randomUUID)()}`);return edx(p.id),this.run(p.id)}async createRunForTrigger(e,t,A,r,i,n,a,s,o=null){return(await ag()).$transaction(async l=>{let c=await l.workflowRun.findUnique({where:{idempotencyKey:s}});if(c)return c;if("COALESCE_LATEST"===e.overlapPolicy){let t=await l.workflowRun.findFirst({where:{workflowId:e.id,triggerSubjectKey:n,status:"QUEUED"},orderBy:{queuedAt:"desc"}});if(t)return l.workflowRun.update({where:{id:t.id},data:{triggerId:A?.id??null,triggerEventId:r,triggerKind:i,triggerPayloadJson:JSON.stringify(a),queuedAt:new Date}})}let u=(0,AB.randomUUID)(),d=edk(a.sessionData??{},"Session data"),h=JSON.stringify(Ck({workflow:{id:e.id,name:t.name,runId:u,startedAt:null,trigger:{id:A?.nodeId??null,kind:i,subjectKey:n,choice:"string"==typeof a.choice?a.choice:null}},steps:{}},d));edv(h,"Workflow session data",2097152);let p=await l.workflowRun.create({data:{id:u,displayNumber:await edM(l),workflowId:e.id,versionId:t.id,triggerId:A?.id??null,triggerEventId:r,parentRunId:o,idempotencyKey:s,triggerKind:i,triggerSubjectKey:n,triggerPayloadJson:JSON.stringify(a),sessionDataJson:h}}),g=function(e,t){let A=e.trim().toUpperCase(),r=euk(t.sessionData);if(Cm(A)){let e=t.resourceKind,A="string"==typeof e?e.toUpperCase():null,i="GITHUB_JOB"===A?euR(r,"job","url"):"GITHUB_PIPELINE"===A?euR(r,"pipeline","url"):null;return"string"==typeof e?eux(e.toUpperCase(),t.resourceId,{url:"string"==typeof i?i:null,metadata:"AGENT_RUN"===e.toUpperCase()?{runKind:euR(r,"run","kind")}:null}):null}if(euN.has(A))return eux("JIRA_TICKET",euR(r,"ticket","key"));if(euT.has(A))return eux("AGENT_RUN",euR(r,"run","id"),{metadata:{runKind:euR(r,"run","kind")}});if(euM.has(A))return eux("BUILD",euR(r,"build","id"));if(euO.has(A))return eux("WORKTREE",euR(r,"worktree","id"));if("CODEBASE_REMOTE_BRANCH"===A)return eux("CODEBASE",euR(r,"codebase","id"));if("AGENT_JOB_FAILED"===A)return eux("AGENT_JOB",euR(euk(r.steps),"trigger","id"));if("AGENT_CONNECTION"===A||"AGENT_DISK_REPORT"===A||"AGENT_DISK_THRESHOLD"===A||"AGENT_DISK_STATE_CHANGED"===A||"AGENT_DISK_CLEANUP_RESULT"===A||"CCUSAGE_THRESHOLD"===A)return eux("AGENT",euR(r,"agent","id")??euR(r,"codebase","agentId"));if("WORKFLOW_FINISHED"===A)return eux("WORKFLOW_RUN",euR(t,"run","id"));if(euF.has(A)){let e=function(e){if("string"!=typeof e)return null;let t=e.trim(),A=t.match(/(?:https?:\/\/|ssh:\/\/git@|git@)?github\.com[/:]([^/]+)\/([^/#]+?)(?:\.git)?$/i)??t.match(/^([^/:]+)\/([^/#]+?)(?:\.git)?$/);return A?.[1]&&A[2]?{owner:A[1],repository:A[2]}:null}(euR(r,"repo","displayOrigin")),t=Number(euR(r,"pr","number"));return e&&Number.isInteger(t)&&t>0?eux("PULL_REQUEST",euv(e.owner,e.repository,t)):null}if(euU.has(A)){let e=euR(r,"pipeline","url");return eux("GITHUB_WORKFLOW_RUN",euR(r,"pipeline","runId"),{url:"string"==typeof e?e:null})}return"GITHUB_PUSH_DEFAULT"===A?eux("CODEBASE_REPOSITORY",euR(r,"repo","id")):null}(i,a);return g&&await l.workflowRunResourceLink.create({data:{id:(0,AB.randomUUID)(),runId:p.id,kind:g.kind.toUpperCase(),resourceId:g.resourceId,label:g.label??null,url:g.url??null,metadataJson:g.metadata?JSON.stringify(g.metadata):null}}),p})}async processTriggerEvents(){let e=await ag();for(let t of(await e.workflowTriggerEvent.findMany({where:{status:"PENDING"},orderBy:{receivedAt:"asc"},take:50})))try{let A=edk(edy(t.payloadJson),"Trigger payload");for(let r of(await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:!0}}}})))if(r.activeVersion)for(let e of r.activeVersion.triggers.filter(({kind:e})=>e===t.kind)){if(!await this.triggerMatches(e,t.subjectKey,A)||A.workflowCorrelation&&"object"==typeof A.workflowCorrelation&&A.workflowCorrelation.workflowId===r.id)continue;let i=await this.createRunForTrigger({...r,activeVersion:r.activeVersion},r.activeVersion,e,t.id,t.kind,t.subjectKey,A,`${t.id}:${r.id}:${e.id}`);edx(i.id)}await e.workflowTriggerEvent.update({where:{id:t.id},data:{status:"PROCESSED",processedAt:new Date,error:null}})}catch(A){await e.workflowTriggerEvent.update({where:{id:t.id},data:{status:"FAILED",processedAt:new Date,error:A instanceof Error?A.message:String(A)}})}}async triggerMatches(e,t,A){let r=CR(edk(edy(e.configJson),"Trigger configuration"),A),i=null;if(void 0!==A.cursorValue&&("string"!=typeof r.thresholdPath||"string"!=typeof r.thresholdOperator)){let r=await ag(),n=await r.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});i=edb(n?.cursorJson?edk(edy(n.cursorJson),"Trigger cursor").value:void 0)!==edb(A.cursorValue),await r.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,AB.randomUUID)(),triggerId:e.id,subjectKey:t,cursorJson:JSON.stringify({value:A.cursorValue}),lastMatched:i,...i?{lastFiredAt:new Date}:{}},update:{cursorJson:JSON.stringify({value:A.cursorValue}),lastMatched:i,...i?{lastFiredAt:new Date}:{}}})}if("GITHUB_ISSUE_COMMAND"===e.kind){let e=Cb(A,"comment.author.login"),t=Cb(A,"comment.body"),i=Array.isArray(r.allowedLogins)?r.allowedLogins:[];if("string"!=typeof e||!i.includes(e)||"string"!=typeof t||"string"!=typeof r.commandPattern||!new RegExp(r.commandPattern).test(t))return!1}if("WORKTREE_CONFLICT"===e.kind&&!0!==Cb(A,"worktree.conflicted")||"WORKTREE_MISSING"===e.kind&&null==Cb(A,"worktree.missingAt")||"WORKTREE_DIVERGED"===e.kind&&"DIVERGED"!==Cb(A,"worktree.pushStatus"))return!1;if(r.filters&&"object"==typeof r.filters)for(let[e,t]of Object.entries(r.filters)){let r=Cb(A,e);if(Array.isArray(t)){if(!t.some(e=>edb(e)===edb(r)))return!1}else if(edb(t)!==edb(r))return!1}if("string"==typeof r.thresholdPath&&"string"==typeof r.thresholdOperator){let i=CM({op:r.thresholdOperator,left:{source:"SESSION",path:r.thresholdPath},right:r.thresholdValue},A),n=await ag(),a=await n.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}}});return await n.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:e.id,subjectKey:t}},create:{id:(0,AB.randomUUID)(),triggerId:e.id,subjectKey:t,lastMatched:i,cursorJson:JSON.stringify({value:Cb(A,r.thresholdPath)}),...i?{lastFiredAt:new Date}:{}},update:{lastMatched:i,cursorJson:JSON.stringify({value:Cb(A,r.thresholdPath)}),...i&&!a?.lastMatched?{lastFiredAt:new Date}:{}}}),i&&!a?.lastMatched}return i??!0}async processSchedules(){let e=await ag(),t=await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:{where:{kind:"SCHEDULE"},include:{states:!0}}}}}}),A=new Date;for(let r of t)for(let t of r.activeVersion?.triggers??[]){let i=edk(edy(t.configJson),"Schedule configuration"),n=Number(i.cadenceSeconds);if(!Number.isInteger(n)||n<1)continue;let a=r.id,s=t.states.find(e=>e.subjectKey===a);if(!s){let r="string"==typeof i.firstRunAt?new Date(i.firstRunAt):null,o=r&&Number.isFinite(r.getTime())?r:new Date(A.getTime()+1e3*n);s=await e.workflowTriggerState.create({data:{id:(0,AB.randomUUID)(),triggerId:t.id,subjectKey:a,nextScheduledAt:o}})}if(!s.nextScheduledAt||s.nextScheduledAt>A)continue;let o=s.nextScheduledAt,l=new Date(Math.max(A.getTime(),o.getTime())+1e3*n);await e.workflowTriggerState.update({where:{id:s.id},data:{lastFiredAt:A,nextScheduledAt:l}}),await this.events.record({kind:"SCHEDULE",subjectKey:a,dedupeKey:`schedule:${t.id}:${o.toISOString()}`,payload:{sessionData:{},scheduledFor:o.toISOString(),cadenceSeconds:n}})}}async lifecycle(e,t){let A=await ag(),r=await A.workflowRun.findUnique({where:{id:e}});if(!r)throw Error("Workflow run not found");if("PAUSE"===t){if(!new Set(["RUNNING","WAITING","BLOCKED"]).has(r.status))throw Error("Only an active workflow run can be paused");if(!await A.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{in:["RUNNING","WAITING","BLOCKED"]}},data:{status:"PAUSING",phase:"DRAINING"}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}}),!0)))return this.run(e);await this.controlLinkedAgentRuns(e,"PAUSE"),await this.appendEvent(e,null,"RUN_PAUSING","Workflow pause requested")}else if("RESUME"===t){if("PAUSED"!==r.status)throw Error("Only a paused workflow run can be resumed");if(!(await A.workflowRun.updateMany({where:{id:e,status:"PAUSED"},data:{status:"RUNNING",phase:"SCHEDULING",pausedAt:null}})).count)return this.run(e);await this.controlLinkedAgentRuns(e,"CONTINUE"),await this.appendEvent(e,null,"RUN_RESUMED","Workflow resumed")}else{if(edf.has(r.status))return this.run(e);for(let[t,r]of(await this.controlLinkedAgentRuns(e,"CANCEL"),await this.cancelWaitingCommandRuns(e),this.activeExecutions)){let i=await A.workflowStepAttempt.findUnique({where:{id:t},select:{runId:!0}});i?.runId===e&&r.abort()}if(!await A.$transaction(async t=>!!(await t.workflowRun.updateMany({where:{id:e,status:{notIn:[...edf]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date}})).count&&(await t.workflowStepAttempt.updateMany({where:{runId:e,status:{notIn:[...edm]}},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 edx(e),this.run(e)}async repairRunData(e,t){let A=edk(t,"Session data patch"),r=await ag(),i=await r.workflowRun.findUnique({where:{id:e}});if(!i)throw Error("Workflow run not found");if(!new Set(["BLOCKED","PAUSED"]).has(i.status))throw Error("Only blocked or paused workflows accept repair data");let n=CO(i.sessionDataJson),a=Cb(n,"workflow"),s=Ck(n,A);a&&"object"==typeof a&&(s=Cv(s,"workflow",a));let o=JSON.stringify(s);return edv(o,"Workflow session data",2097152),await r.$transaction([r.workflowRun.update({where:{id:e},data:{sessionDataJson:o,sessionRevision:{increment:1},status:"PAUSED"===i.status?"PAUSED":"RUNNING",phase:"PAUSED"===i.status?"PAUSED":"SCHEDULING",blockedReason:null}}),r.workflowStepAttempt.updateMany({where:{runId:e,status:"BLOCKED"},data:{status:"PENDING",phase:"PENDING",error:null}})]),await this.appendEvent(e,null,"RUN_DATA_REPAIRED","Workflow session data repaired"),edx(e),this.run(e)}async answerQuestion(e,t){let A=await ag(),r=await A.$transaction(async A=>{let r=await A.runQuestionBatch.findUnique({where:{id:e},include:{workflowStepAttempt:!0,answerRevisions:!0}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow question not found");if("PENDING"!==r.status)throw Error("Question was already answered");return await A.runAnswerRevision.create({data:{id:(0,AB.randomUUID)(),batchId:e,revision:r.answerRevisions.length,answersJson:JSON.stringify(t)}}),await A.runQuestionBatch.update({where:{id:e},data:{status:"ANSWERED",answeredAt:new Date}}),await A.workflowWait.updateMany({where:{attemptId:i.id,status:"PENDING",kind:"HUMAN"},data:{status:"RESOLVED",resultJson:JSON.stringify({answers:t}),resolvedAt:new Date}}),i});return await this.completeWaitingAttempt(r.id,{answers:t}),af.publish(edE(r.runId),{workflowQuestionChanged:{id:e,runId:r.runId}}),this.run(r.runId)}async tick(){if(!this.ticking){this.ticking=!0;try{await this.recoverExpiredClaims(),await this.processSchedules(),await this.processTriggerEvents(),await this.resolveDueWaits(),await this.startQueuedRuns();let e=await ag();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 ag();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}`),edx(t.runId)}async startQueuedRuns(){let e=await ag();for(let t of(await e.workflowRun.findMany({where:{status:"QUEUED"},include:{workflow:!0,version:!0},orderBy:{queuedAt:"asc"},take:50}))){let A="CONCURRENT"===t.workflow.overlapPolicy?t.workflow.maxConcurrentRuns:1;if(await e.workflowRun.count({where:{workflowId:t.workflowId,id:{not:t.id},status:{in:edI.filter(e=>"QUEUED"!==e)}}})>=A)continue;let r=yO(edy(t.version.definitionJson)),i=new Date,n=Cv(CO(t.sessionDataJson),"workflow.startedAt",i.toISOString());await e.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:t.id,status:"QUEUED"},data:{status:"RUNNING",phase:"SCHEDULING",startedAt:i,sessionDataJson:JSON.stringify(n),sessionRevision:{increment:1}}})).count&&(await e.workflowStepAttempt.createMany({data:r.nodes.map(e=>({id:(0,AB.randomUUID)(),runId:t.id,nodeId:e.id,kind:e.kind,generation:t.generation,iterationKey:"",attempt:0,requiredPathsJson:JSON.stringify(edN(e)),providedPathsJson:JSON.stringify(edT(e)),idempotencyKey:`${t.id}:${e.id}:${t.generation}::0`}))}),!0))&&(await this.appendEvent(t.id,null,"RUN_STARTED","Workflow started"),edx(t.id))}}selectedTrigger(e,t){let A=e.trigger?.nodeId??t.triggers.find(({kind:t})=>t===e.triggerKind)?.id??null;if(!Cf(e.triggerKind))return{id:A,choice:null};let r=edk(edy(e.triggerPayloadJson),"Trigger payload");return{id:A,choice:"string"==typeof r.choice?r.choice:null}}attemptOutput(e){if(!e.outputJson)return{};let t=edy(e.outputJson);return t&&"object"==typeof t&&!Array.isArray(t)?t:{value:t}}edgeState(e,t,A,r){if(!r.has(e.source))return e.source!==t.id||t.choice&&e.sourceHandle!==t.choice?"INACTIVE":"ACTIVE";let i=A.get(e.source);if(!i||!edm.has(i.status))return"PENDING";if(new Set(["SKIPPED","CANCELLED","SUPERSEDED"]).has(i.status))return"INACTIVE";let n=r.get(e.source);if("FAILED"===i.status)return"failure"===e.sourceHandle||"catch"===e.sourceHandle||"CONTINUE"===n.failurePolicy&&"success"===e.sourceHandle?"ACTIVE":"INACTIVE";let a=this.attemptOutput(i).selectedHandles;return a?.length?a.includes(e.sourceHandle)?"ACTIVE":"INACTIVE":"success"===e.sourceHandle||"output"===e.sourceHandle?"ACTIVE":"INACTIVE"}async progressRun(e){let t=await ag(),A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}});if(!A||edf.has(A.status))return;if("PAUSING"===A.status){await t.workflowStepAttempt.updateMany({where:{runId:e,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}});let r=new Set(["AGENT_JOB","BUILD","SKILL_RUN","WORKTREE_MOVE","GITHUB_CHECKS"]),i=new Set(A.waits.filter(({status:e,kind:t})=>"PENDING"===e&&r.has(t)).map(({attemptId:e})=>e));!A.attempts.some(({id:e,status:t})=>"RUNNING"===t||"WAITING"===t&&i.has(e))&&(await t.workflowRun.updateMany({where:{id:e,status:"PAUSING"},data:{status:"PAUSED",phase:"PAUSED",pausedAt:new Date}})).count&&(await this.appendEvent(e,null,"RUN_PAUSED","Workflow paused"),edx(e));return}if(!new Set(["RUNNING","WAITING"]).has(A.status))return;let r=yO(edy(A.version.definitionJson)),i=new Map(r.nodes.map(e=>[e.id,e])),n=new Map;for(let e of r.edges)n.set(e.target,[...n.get(e.target)??[],e]);let a=!0;for(;a;){if(a=!1,!(A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=A.attempts.filter(({generation:e,supersededAt:t})=>e===A.generation&&!t),o=new Map;for(let e of s){let t=`${e.nodeId}:${e.iterationKey}`,A=o.get(t);(!A||A.attempt<e.attempt)&&o.set(t,e)}let l=new Map([...o.values()].filter(({iterationKey:e})=>!e).map(e=>[e.nodeId,e])),c=this.selectedTrigger(A,r);for(let e of r.nodes){let A=l.get(e.id);if(!A||"PENDING"!==A.status)continue;let s=r.nodes.find(t=>"CONTROL_FOR_EACH"===t.kind&&t.config.joinNodeId===e.id);if(s){let e=l.get(s.id);if(!e||!edm.has(e.status)||[...o.values()].filter(({iterationKey:e})=>!!e).some(({status:e})=>!edm.has(e)))continue;await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"ITERATIONS_JOINED"}}),a=!0;continue}let u=n.get(e.id)??[];if(!u.length)continue;let d=u.map(e=>this.edgeState(e,c,l,i)),h=d.filter(e=>"ACTIVE"===e).length,p=d.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===e.kind&&"ANY"===e.config.mode?"ANY":"ALL")?h>0:0===p&&h>0)?(await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"READY"}}),a=!0):0===p&&0===h&&(await t.workflowStepAttempt.update({where:{id:A.id},data:{status:"SKIPPED",phase:"INACTIVE_BRANCH",finishedAt:new Date}}),a=!0)}await this.progressIterationAttempts(r,A,c,i,n,o,l)&&(a=!0)}if(!(A=await t.workflowRun.findUnique({where:{id:e},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=new Map;for(let e of A.attempts.filter(({generation:e,supersededAt:t})=>e===A.generation&&!t)){let t=`${e.nodeId}:${e.iterationKey}`,A=s.get(t);(!A||A.attempt<e.attempt)&&s.set(t,e)}let o=[...s.values()],l=A.waits.some(({status:e})=>"PENDING"===e),c=o.some(({status:e})=>!edm.has(e));if(l||c){let r=l?"WAITING":"RUNNING";A.status!==r&&(await t.workflowRun.updateMany({where:{id:e,status:{in:[...edC]}},data:{status:r,phase:l?"WAITING":"SCHEDULING"}})).count&&edx(e);return}let u=yO(edy(A.version.definitionJson)),d=o.find(e=>{if("FAILED"!==e.status)return!1;let t=u.nodes.find(({id:t})=>t===e.nodeId);return!!t&&"CONTINUE"!==t.failurePolicy&&!u.edges.some(e=>e.source===t.id&&new Set(["failure","catch"]).has(e.sourceHandle))});await this.finishRun(A,d?"FAILED":"SUCCEEDED",d?.error??null)}async finishRun(e,t,A){let r=await ag();await r.$transaction(async r=>!!(await r.workflowRun.updateMany({where:{id:e.id,status:{in:[...edC]}},data:{status:t,phase:t,error:A,finishedAt:new Date}})).count&&(await r.workflowResourceLease.deleteMany({where:{runId:e.id}}),!0))&&(await this.appendEvent(e.id,null,`RUN_${t}`,"SUCCEEDED"===t?"Workflow completed":"Workflow failed",A?{error:A}:null),await this.resolveExternalWait("WORKFLOW_RUN",e.id,{status:t,runId:e.id},"FAILED"===t?A||"Sub-workflow failed":null),await this.events.record({kind:"WORKFLOW_FINISHED",subjectKey:e.workflowId,dedupeKey:`workflow-finished:${e.id}`,payload:{sessionData:CO(e.sessionDataJson),run:{id:e.id,status:t},workflowCorrelation:{workflowId:e.workflowId,runId:e.id}}}),await this.notifyRun(e.id,"SUCCEEDED"===t?"WORKFLOW_COMPLETED":"WORKFLOW_FAILED","SUCCEEDED"===t?"Workflow completed":"Workflow failed",A||`Workflow run ${e.displayNumber} ${t.toLowerCase()}`,t.toLowerCase()),edx(e.id))}async dispatchReadyAttempts(){let e=await ag(),t=Math.max(0,4-await e.workflowStepAttempt.count({where:{status:"RUNNING"}}));if(t)for(let A of(await e.workflowStepAttempt.findMany({where:{status:"READY",run:{status:"RUNNING"}},orderBy:{createdAt:"asc"},take:2*t}))){if(t<=0)break;if(!(await e.workflowStepAttempt.updateMany({where:{id:A.id,status:"READY",run:{status:"RUNNING"}},data:{status:"RUNNING",phase:"RUNNING",claimOwner:this.workerId,claimExpiresAt:new Date(Date.now()+3e5),startedAt:A.startedAt??new Date}})).count)continue;t-=1;let r=new AbortController;this.activeExecutions.set(A.id,r),this.executeAttempt(A.id,r.signal).catch(e=>{console.error(`Workflow attempt ${A.id} failed unexpectedly:`,e)}).finally(()=>{this.activeExecutions.delete(A.id)})}}async acquireResourceLease(e,t,A){let r=yE.get(t.kind),i=null;if(r.mutatesWorktree){let e=Cb(A,"worktree.id")??Cb(A,"worktree.path")??Cb(A,"codebase.id");e&&(i=`git:${String(e)}`)}else if(t.kind.startsWith("BUILD_")){let e=Cb(A,"build.id");e&&(i=`build:${String(e)}`)}if(!i)return!0;let n=await ag();await n.workflowResourceLease.deleteMany({where:{key:i,expiresAt:{lt:new Date}}});try{return await n.workflowResourceLease.create({data:{key:i,runId:e.runId,attemptId:e.id,expiresAt:new Date(Date.now()+3e5)}}),await n.workflowStepAttempt.update({where:{id:e.id},data:{resourceLockKey:i}}),!0}catch{return await n.workflowStepAttempt.update({where:{id:e.id},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",claimOwner:null,claimExpiresAt:null}}),!1}}async executeAttempt(e,t){let A=await ag(),r=await A.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!r||"RUNNING"!==r.status)return;let i=yO(edy(r.run.version.definitionJson)),n=i.nodes.find(({id:e})=>e===r.nodeId);if(!n)return void await this.failAttempt(r,null,Error("Workflow step definition is missing"));let a=CO(r.run.sessionDataJson);r.iterationKey&&(a=await this.iterationSessionData(r.run,r,a));let s=edN(n).filter(e=>void 0===Cb(a,e));if(s.length){await A.$transaction([A.workflowStepAttempt.update({where:{id:r.id},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",error:`Missing required session data: ${s.join(", ")}`,claimOwner:null,claimExpiresAt:null}}),A.workflowRun.update({where:{id:r.runId},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",blockedReason:`Step ${n.name??n.id} needs ${s.join(", ")}`}}),A.workflowResourceLease.deleteMany({where:{attemptId:e}})]),await this.appendEvent(r.runId,r.id,"STEP_BLOCKED",`Step blocked by missing requirements: ${s.join(", ")}`),await this.notifyRun(r.runId,"WORKFLOW_NEEDS_ATTENTION","Workflow needs data",`Step ${n.name??n.id} needs ${s.join(", ")}`,`blocked:${r.id}`),edx(r.runId);return}if(await A.workflowStepAttempt.update({where:{id:r.id},data:{inputJson:JSON.stringify(a)}}),await this.acquireResourceLease(r,n,a))try{let e,A={...n,config:CR(n.config,a)};if(e=n.kind.startsWith("CONTROL_")||"HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind?await this.executeControl(r.run,r,A,a,i):await this.executor.execute({run:r.run,attempt:r,node:A,sessionData:a,signal:t}),t.aborted)throw Error("Workflow step was cancelled");e.wait?await this.parkAttempt(r,e):await this.completeAttempt(r,n,e)}catch(t){let e=t instanceof Error?t:Error(String(t));if(await this.holdForBusyCodebase(r,e))return;await this.failAttempt(r,n,e)}}async holdForBusyCodebase(e,t){if(!(t instanceof Error&&"CodebaseBusyError"===t.name))return!1;let A=e.startedAt??e.createdAt;if(Date.now()-A.getTime()>6e5)return!1;let r=await ag();return!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING",claimOwner:this.workerId},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",error:t.message,claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),await r.workflowRunEvent.findFirst({where:{attemptId:e.id,type:"STEP_WAITING_FOR_RESOURCE"},select:{id:!0}})||await this.appendEvent(e.runId,e.id,"STEP_WAITING_FOR_RESOURCE","Step is waiting for the codebase to become available",{error:t.message}),edx(e.runId),!0)}async iterationSessionData(e,t,A){let r=await ag(),i=await r.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,status:"SUCCEEDED"},orderBy:{finishedAt:"asc"}}),n=A;for(let e of(t.inputJson&&(n=Ck(n,edk(edy(t.inputJson),"Iteration input"))),i)){let t=this.attemptOutput(e);t.sessionPatch&&(n=Ck(n,t.sessionPatch))}return n}async executeControl(e,t,A,r,i){switch(A.kind){case"CONTROL_IF":{let e=A.config.condition;if(!e)throw Error("If steps require a condition");let t=CM(e,r);return{output:{matched:t},selectedHandles:[t?"true":"false"]}}case"CONTROL_JOIN":{let r=i.nodes.find(e=>"CONTROL_FOR_EACH"===e.kind&&e.config.joinNodeId===A.id);if(r){let A=await ag(),i=await A.workflowStepAttempt.findMany({where:{runId:e.id,generation:t.generation,iterationKey:{not:""},status:"FAILED"}});if(i.length&&"COLLECT_ERRORS"!==r.config.errorMode)throw Error(`${i.length} for-each iteration step(s) failed`);return{output:{iterations:await A.workflowStepAttempt.count({where:{runId:e.id,generation:t.generation,iterationKey:{not:""}}}),failures:i.map(({nodeId:e,iterationKey:t,error:A})=>({nodeId:e,iterationKey:t,error:A}))}}}return{output:{joined:!0}}}case"CONTROL_TRY":return{output:{started:!0}};case"CONTROL_DELAY":{let e=Number(A.config.seconds??0);if(!Number.isFinite(e)||e<0||e>31536e3)throw Error("Delay must be between zero and 31,536,000 seconds");return{wait:{kind:"DELAY",resumeAfter:new Date(Date.now()+1e3*e)}}}case"CONTROL_WAIT_UNTIL":{let e=A.config.condition;if(!e)throw Error("Wait-until steps require a condition");if(CM(e,r))return{output:{matched:!0}};let t=euL(A.config,15);return{wait:{kind:"PREDICATE",predicate:{condition:e,cadenceSeconds:t},resumeAfter:new Date(Date.now()+1e3*t),timeoutAt:eu_(A.config)}}}case"CONTROL_SET_VARIABLE":{if("string"!=typeof A.config.path)throw Error("Set-variable steps require an output path");let e="string"==typeof A.config.script?await edu(A.config.script,r):A.config.value;return{output:e,sessionPatch:Cv({},A.config.path,e)}}case"CONTROL_FOR_EACH":{let n=Array.isArray(A.config.items)?A.config.items:"string"==typeof A.config.listPath?Cb(r,A.config.listPath):null;if(!Array.isArray(n))throw Error("For-each source must be an array");if(n.length>1e3)throw Error("For-each is limited to 1,000 items");return await this.spawnForEach(e,t,A,i,n),{output:{itemCount:n.length},selectedHandles:n.length?["body"]:["empty"],sessionPatch:Cv({},`steps.${A.id}.items`,n)}}case"CONTROL_SUBWORKFLOW":return this.startSubworkflow(e,t,A,r);case"HUMAN_CONFIRM":case"HUMAN_CHOICE":return this.createHumanQuestion(e,t,A);default:throw Error(`Unsupported control step ${A.kind}`)}}async progressIterationAttempts(e,t,A,r,i,n,a){let s=await ag(),o=!1;for(let e of new Set([...n.values()].map(({iterationKey:e})=>e).filter(Boolean))){let t=new Map(a);for(let A of n.values())A.iterationKey===e&&t.set(A.nodeId,A);for(let n of t.values()){if(n.iterationKey!==e||"PENDING"!==n.status)continue;let a=r.get(n.nodeId);if(!a)continue;let l=(i.get(a.id)??[]).map(e=>this.edgeState(e,A,t,r)),c=l.filter(e=>"ACTIVE"===e).length,u=l.filter(e=>"PENDING"===e).length;("ANY"==("CONTROL_JOIN"===a.kind&&"ANY"===a.config.mode?"ANY":"ALL")?c>0:0===u&&c>0)?(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"READY",phase:"ITERATION_READY"}}),o=!0):0===u&&0===c&&(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"SKIPPED",phase:"INACTIVE_ITERATION_BRANCH",finishedAt:new Date}}),o=!0)}}return o}async spawnForEach(e,t,A,r,i){let n="string"==typeof A.config.joinNodeId?A.config.joinNodeId:null,a=r.nodes.find(({id:e})=>e===n);if(!a||"CONTROL_JOIN"!==a.kind)throw Error("For-each steps require an explicit joinNodeId");let s=new Map;for(let e of r.edges)s.set(e.source,[...s.get(e.source)??[],e]);let o=(s.get(A.id)??[]).filter(({sourceHandle:e})=>"body"===e).map(({target:e})=>e),l=new Set;for(;o.length;){let e=o.shift();e===n||l.has(e)||(l.add(e),o.push(...(s.get(e)??[]).map(({target:e})=>e)))}if(i.length&&!l.size)throw Error("For-each body is not connected to its body handle");let c=r.nodes.filter(({id:e})=>l.has(e)),u=await ag();await u.$transaction(async r=>{await r.workflowStepAttempt.updateMany({where:{runId:e.id,generation:t.generation,iterationKey:t.iterationKey,nodeId:{in:[...l]},status:"PENDING"},data:{status:"SKIPPED",phase:"ITERATION_TEMPLATE",finishedAt:new Date}}),i.length&&c.length&&await r.workflowStepAttempt.createMany({data:i.flatMap((r,i)=>{let n=t.iterationKey?`${t.iterationKey}.${i}`:String(i),a=JSON.stringify({loop:{current:{forEachNodeId:A.id,index:i,item:r},[A.id]:{index:i,item:r}}});return c.map(A=>({id:(0,AB.randomUUID)(),runId:e.id,nodeId:A.id,kind:A.kind,generation:t.generation,iterationKey:n,attempt:0,status:"PENDING",phase:"ITERATION_PENDING",inputJson:a,requiredPathsJson:JSON.stringify(edN(A)),providedPathsJson:JSON.stringify(edT(A)),idempotencyKey:`${e.id}:${A.id}:${t.generation}:${n}:0`}))})})})}async startSubworkflow(e,t,A,r){let i="string"==typeof A.config.versionId?A.config.versionId:null;if(!i)throw Error("Sub-workflow version is required");let n=await ag(),a=await n.workflowVersion.findUnique({where:{id:i},include:{workflow:{include:{activeVersion:!0}}}});if(!a)throw Error("Sub-workflow version not found");if(!a.workflow.enabled||a.workflow.archivedAt)throw Error("Sub-workflow is paused");let s=e,o=0;for(;s;){if(s.workflowId===a.workflowId)throw Error("Recursive sub-workflow invocation is not allowed");if((o+=1)>=10)throw Error("Sub-workflow depth is limited to 10");s=s.parentRunId?await n.workflowRun.findUnique({where:{id:s.parentRunId}}):null}let l={};if(A.config.inputMapping&&"object"==typeof A.config.inputMapping)for(let[e,t]of Object.entries(A.config.inputMapping))l=Cv(l,e,CR(t,r));let c=await this.createRunForTrigger({...a.workflow,activeVersion:a},a,null,null,"SUBWORKFLOW",e.id,{sessionData:l,parentRunId:e.id},`${t.id}:subworkflow:${a.id}`,e.id);return edx(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:euG(A.config),timeoutAt:eu_(A.config)}}}async createHumanQuestion(e,t,A){let r=Array.isArray(A.config.questions)?A.config.questions:[{header:A.name??null,prompt:"string"==typeof A.config.prompt?A.config.prompt:"HUMAN_CONFIRM"===A.kind?"Continue this workflow?":"Choose an option",multiSelect:!!A.config.multiSelect,allowCustom:"HUMAN_CONFIRM"!==A.kind&&!1!==A.config.allowCustom,options:"HUMAN_CONFIRM"===A.kind?[{label:"Confirm",description:null},{label:"Cancel",description:null}]:Array.isArray(A.config.options)?A.config.options:[]}];if(!r.length||r.length>10)throw Error("Workflow questions must contain between one and ten questions");let i=await ag(),n=(0,AB.randomUUID)();return await i.runQuestionBatch.create({data:{id:n,workflowStepAttemptId:t.id,nativeRequestId:`workflow:${t.id}`,questions:{create:r.map((e,t)=>{let A=edk(e,"Workflow question"),r=Array.isArray(A.options)?A.options:[];return{id:(0,AB.randomUUID)(),position:t,header:"string"==typeof A.header?A.header:null,prompt:edB(String(A.prompt??""),"Question prompt",1e4),multiSelect:!!A.multiSelect,allowCustom:!1!==A.allowCustom,options:{create:r.map((e,t)=>{let A=edk(e,"Question option");return{id:(0,AB.randomUUID)(),position:t,label:edB(String(A.label??""),"Option label",500),description:"string"==typeof A.description?A.description.slice(0,2e3):null}})}}})}}}),af.publish(edE(e.id),{workflowQuestionChanged:{id:n,runId:e.id}}),{output:{questionBatchId:n},wait:{kind:"HUMAN",externalKey:n,timeoutAt:eu_(A.config)}}}async parkAttempt(e,t){let A=t.wait;if(!A)throw Error("Workflow wait is missing");let r=await ag(),i=(0,AB.randomUUID)();await r.$transaction(async r=>{let n=await r.workflowRun.findUnique({where:{id:e.runId},select:{status:!0}});return!(!n||edf.has(n.status))&&!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:"RUNNING"},data:{status:"WAITING",phase:A.kind,outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:t.sessionPatch}),claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowWait.create({data:{id:i,runId:e.runId,attemptId:e.id,kind:A.kind,predicateJson:A.predicate?JSON.stringify(A.predicate):null,externalKey:A.externalKey??null,resumeAfter:A.resumeAfter??null,timeoutAt:A.timeoutAt??null}}),t.links?.length&&await r.workflowRunResourceLink.createMany({data:t.links.map(t=>({id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:t.kind.toUpperCase(),resourceId:t.resourceId,label:t.label??null,url:t.url??null,metadataJson:t.metadata?JSON.stringify(t.metadata):null}))}),await r.workflowRun.updateMany({where:{id:e.runId,status:{in:[...edC]}},data:{status:"WAITING",phase:A.kind}}),await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_WAITING",`Step is waiting for ${A.kind.toLowerCase().replaceAll("_"," ")}`,{waitId:i}),edx(e.runId))}async completeAttempt(e,t,A){let r=await ag();await r.$transaction(async r=>{let i=await r.workflowRun.findUnique({where:{id:e.runId}});if(!i)throw Error("Workflow run disappeared");if(edf.has(i.status))return!1;let n=CO(i.sessionDataJson);e.iterationKey?n=Cv(n,`steps.${t.id}.iterations.${e.iterationKey.replaceAll(".","_")}`,{status:"SUCCEEDED",output:A.output??null,data:A.sessionPatch??null}):(A.sessionPatch&&(n=Ck(n,A.sessionPatch)),n=Cv(n,`steps.${t.id}`,{status:"SUCCEEDED",output:A.output??null,snapshotId:A.links?.find(({kind:e})=>"CHECKPOINT"===e)?.resourceId??null}));let a=JSON.stringify(n);return edv(a,"Workflow session data",2097152),!!(await r.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"SUCCEEDED",phase:"SUCCEEDED",outputJson:JSON.stringify({value:A.output,selectedHandles:A.selectedHandles,sessionPatch:A.sessionPatch}),error:null,finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(A.links?.length&&await r.workflowRunResourceLink.createMany({data:A.links.map(t=>({id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:t.kind.toUpperCase(),resourceId:t.resourceId,label:t.label??null,url:t.url??null,metadataJson:t.metadata?JSON.stringify(t.metadata):null}))}),await r.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:a,sessionRevision:{increment:1}}}),await r.workflowRun.updateMany({where:{id:e.runId,status:{in:[...edC]}},data:{status:"RUNNING",phase:"SCHEDULING"}}),await r.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,"STEP_SUCCEEDED",`Step ${t.name??t.id} completed`),edx(e.runId))}async failAttempt(e,t,A){let r=await ag(),i=t??(await r.workflowRun.findUnique({where:{id:e.runId},include:{version:!0}}))?.version.definitionJson,n="string"==typeof i?yO(edy(i)).nodes.find(({id:t})=>t===e.nodeId)??null:i,a=n?.retry,s=!!(a&&e.attempt+1<a.maxAttempts),o=a?Math.min(86400,"EXPONENTIAL"===a.strategy?a.delaySeconds*2**e.attempt:a.delaySeconds):0;await r.$transaction(async t=>{let r=await t.workflowRun.findUnique({where:{id:e.runId}});if(!r||edf.has(r.status))return!1;let i=CO(r.sessionDataJson);return e.iterationKey||(i=Cv(i,`steps.${e.nodeId}`,{status:"FAILED",error:A.message})),!!(await t.workflowStepAttempt.updateMany({where:{id:e.id,status:{in:["RUNNING","WAITING"]}},data:{status:"FAILED",phase:s?"RETRY_SCHEDULED":"FAILED",error:A.message.slice(0,2e4),finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(s&&await t.workflowWait.create({data:{id:(0,AB.randomUUID)(),runId:e.runId,attemptId:e.id,kind:"RETRY",resumeAfter:new Date(Date.now()+1e3*o)}}),await t.workflowRun.update({where:{id:e.runId},data:{sessionDataJson:JSON.stringify(i),sessionRevision:{increment:1}}}),await t.workflowRun.updateMany({where:{id:e.runId,status:{in:[...edC]}},data:{status:s?"WAITING":"RUNNING",phase:s?"RETRY_WAIT":"SCHEDULING"}}),await t.workflowResourceLease.deleteMany({where:{attemptId:e.id}}),!0)})&&(await this.appendEvent(e.runId,e.id,s?"STEP_RETRY_SCHEDULED":"STEP_FAILED",s?`Step failed and will retry in ${o} seconds`:`Step failed: ${A.message}`,{error:A.message,retry:s}),edx(e.runId))}async resolveDueWaits(){let e=await ag(),t=new Date,A=(t,A)=>e.workflowWait.updateMany({where:{id:t,status:"PENDING",run:{status:{in:[...edC]}}},data:A});for(let r of(await e.workflowWait.findMany({where:{status:"PENDING",run:{status:{in:[...edC]}},OR:[{resumeAfter:{lte:t}},{timeoutAt:{lte:t}}]},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100}))){if(r.timeoutAt&&r.timeoutAt<=t&&"RETRY"!==r.kind&&"DELAY"!==r.kind){if(!(await A(r.id,{status:"TIMED_OUT",resolvedAt:t})).count)continue;await this.failAttempt(r.attempt,yO(edy(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId)??null,Error("Workflow wait timed out"));continue}if("RETRY"===r.kind){let A=r.attempt.attempt+1;await e.$transaction(async e=>{if(!(await e.workflowWait.updateMany({where:{id:r.id,status:"PENDING",run:{status:{in:[...edC]}}},data:{status:"RESOLVED",resolvedAt:t}})).count)return!1;if(await e.workflowStepAttempt.create({data:{id:(0,AB.randomUUID)(),runId:r.runId,nodeId:r.attempt.nodeId,kind:r.attempt.kind,generation:r.attempt.generation,iterationKey:r.attempt.iterationKey,attempt:A,status:"PENDING",phase:"RETRY_PENDING",inputJson:r.attempt.inputJson,requiredPathsJson:r.attempt.requiredPathsJson,providedPathsJson:r.attempt.providedPathsJson,idempotencyKey:`${r.runId}:${r.attempt.nodeId}:${r.attempt.generation}:${r.attempt.iterationKey}:${A}`,replayedFromId:r.attempt.id}}),!(await e.workflowRun.updateMany({where:{id:r.runId,status:{in:[...edC]}},data:{status:"RUNNING",phase:"SCHEDULING"}})).count)throw Error("Workflow lifecycle changed while resuming retry");return!0})&&edx(r.runId)}else if("DELAY"===r.kind){if(!(await A(r.id,{status:"RESOLVED",resolvedAt:t})).count)continue;await this.completeWaitingAttempt(r.attemptId,{delayed:!0})}else if("PREDICATE"===r.kind){let e=r.predicateJson?edk(edy(r.predicateJson),"Wait predicate"):{},i=e.condition,n=CO(r.attempt.run.sessionDataJson);if(i&&CM(i,n)){if(!(await A(r.id,{status:"RESOLVED",resultJson:JSON.stringify({matched:!0}),resolvedAt:t})).count)continue;await this.completeWaitingAttempt(r.attemptId,{matched:!0})}else{let t=Math.max(1,Number(e.cadenceSeconds??15));await A(r.id,{resumeAfter:new Date(Date.now()+1e3*t)})}}else if(r.externalKey&&this.waitPollers.has(r.kind)){let e=await this.waitPollers.get(r.kind)(r.externalKey);if(e.pending){let t=yO(edy(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId)?.config??{};await A(r.id,{resumeAfter:new Date(Date.now()+1e3*euL(t,e.pollAfterSeconds??15))})}else{if(!(await A(r.id,{status:e.error?"FAILED":"RESOLVED",resultJson:JSON.stringify(e.result??{}),resolvedAt:new Date})).count)continue;if(e.error){let t=yO(edy(r.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===r.attempt.nodeId);await this.failAttempt(r.attempt,t??null,Error(e.error))}else await this.completeWaitingAttempt(r.attemptId,e.result??{})}}}}async completeWaitingAttempt(e,t){let A=await ag(),r=await A.workflowStepAttempt.findUnique({where:{id:e},include:{run:{include:{version:!0}}}});if(!r||"WAITING"!==r.status)return;let i=yO(edy(r.run.version.definitionJson)).nodes.find(({id:e})=>e===r.nodeId);if(!i)throw Error("Workflow step definition is missing");let n=this.attemptOutput(r),a=n.sessionPatch;if("TERMINAL_RUN"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionData&&"object"==typeof t.sessionData&&!Array.isArray(t.sessionData)){let e=structuredClone(t.sessionData),A=Cb(CO(r.run.sessionDataJson),"workflow");a=A?Cv(e,"workflow",A):e}t&&"object"==typeof t&&!Array.isArray(t)&&t.sessionPatch&&"object"==typeof t.sessionPatch&&!Array.isArray(t.sessionPatch)&&(a=Ck(a??{},t.sessionPatch)),i.kind.startsWith("RUN_")&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=Ck(a??{},Cv({},`run.${i.id}`,t))),"BUILD_START"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=Ck(a??{},Cv({},"build",t))),"WORKTREE_WAIT_PUSH_READY"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=Ck(a??{},Cv({},"worktree",{id:t.id,pushStatus:t.pushStatus}))),"SKILL_APPLY"===i.kind&&t&&"object"==typeof t&&!Array.isArray(t)&&(a=Ck(a??{},Cv({},`steps.${i.id}`,t))),("HUMAN_CONFIRM"===i.kind||"HUMAN_CHOICE"===i.kind)&&(a=Ck(a??{},Cv({},`steps.${i.id}.answer`,t))),await this.completeAttempt(r,i,{output:t??n.value,selectedHandles:n.selectedHandles,sessionPatch:a})}async resolveExternalWait(e,t,A,r=null){let i=await ag(),n=await i.workflowWait.findMany({where:{kind:e,externalKey:t,status:"PENDING"},include:{attempt:{include:{run:{include:{version:!0}}}}}});for(let e of n)if(await i.workflowWait.update({where:{id:e.id},data:{status:r?"FAILED":"RESOLVED",resultJson:JSON.stringify(A),resolvedAt:new Date}}),r){let t=yO(edy(e.attempt.run.version.definitionJson)).nodes.find(({id:t})=>t===e.attempt.nodeId);await this.failAttempt(e.attempt,t??null,Error(r))}else await this.completeWaitingAttempt(e.attemptId,A);return n.length}descendants(e,t){let A=new Map;for(let t of e.edges)A.set(t.source,[...A.get(t.source)??[],t.target]);let r=new Set([t]),i=[t];for(;i.length;){let e=i.shift();for(let t of A.get(e)??[])r.has(t)||(r.add(t),i.push(t))}return[...r]}async prepareReplay(e,t){let A=await ag(),r=await A.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:{include:{checkpoints:!0,resourceLinks:!0}}}});if(!r)throw Error("Workflow run not found");if(!new Set(["PAUSED","BLOCKED","FAILED","SUCCEEDED","CANCELLED"]).has(r.status))throw Error("Pause the workflow before replaying a step");let i=yO(edy(r.version.definitionJson));if(!i.nodes.some(({id:e})=>e===t))throw Error("Workflow step not found");let n=this.descendants(i,t),a=r.attempts.filter(({generation:e,nodeId:t})=>e===r.generation&&n.includes(t)),s=a.filter(e=>e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0],o=s?.checkpoints.slice().sort((e,t)=>e.createdAt.getTime()-t.createdAt.getTime())[0],l=a.flatMap(e=>e.resourceLinks.filter(({kind:e})=>"CHECKPOINT"!==e).map(({kind:e,resourceId:t,label:A,url:r})=>({kind:e,resourceId:t,label:A,url:r}))),c=null,u=null;if(o&&this.agentControl)try{c=await this.compareCheckpointWithAgent(o.id)}catch(e){u=`Git comparison unavailable: ${e instanceof Error?e.message:String(e)}`}return{runId:e,nodeId:t,affectedNodeIds:n,affectedAttemptIds:a.map(({id:e})=>e),externalEffects:l,checkpointId:o?.id??null,gitComparison:c,warning:[l.length?"External Jira, GitHub, build, deployment, and notification effects will not be undone.":null,u].filter(Boolean).join(" ")||null}}async replay(e,t,A={}){let r=await this.prepareReplay(e,t);if(A.restore){if(!r.checkpointId)throw Error("No restorable Git checkpoint is available for this step");this.checkpointRestorer?await this.checkpointRestorer(r.checkpointId,{stash:!!A.stash}):await this.restoreCheckpointWithAgent(r.checkpointId,{stash:!!A.stash})}let i=await ag(),n=await i.workflowRun.findUnique({where:{id:e},include:{version:!0,attempts:!0}});if(!n)throw Error("Workflow run not found");let a=yO(edy(n.version.definitionJson)),s=n.attempts.filter(e=>e.generation===n.generation&&e.nodeId===t).sort((e,t)=>t.attempt-e.attempt)[0];if(!s)throw Error("Selected step has no execution history");let o=s.inputJson?edk(edy(s.inputJson),"Step input snapshot"):CO(n.sessionDataJson),l=n.generation+1,c=new Map;for(let e of n.attempts.filter(({generation:e,iterationKey:t})=>e===n.generation&&!t)){let t=c.get(e.nodeId);(!t||t.attempt<e.attempt)&&c.set(e.nodeId,e)}let u=Cv(o,"workflow.replay",{generation:l,fromNodeId:t,replayedAt:new Date().toISOString()});return await i.$transaction(async t=>{await t.workflowStepAttempt.updateMany({where:{runId:e,generation:n.generation,nodeId:{in:r.affectedNodeIds},supersededAt:null},data:{supersededAt:new Date}}),await t.workflowStepAttempt.createMany({data:a.nodes.map(t=>{let A=r.affectedNodeIds.includes(t.id),i=c.get(t.id);return{id:(0,AB.randomUUID)(),runId:e,nodeId:t.id,kind:t.kind,generation:l,iterationKey:"",attempt:0,status:A?"PENDING":i?.status==="SKIPPED"?"SKIPPED":"SUCCEEDED",phase:A?"REPLAY_PENDING":"REUSED_FROM_PRIOR_GENERATION",inputJson:A?null:i?.inputJson,outputJson:A?null:i?.outputJson,error:null,startedAt:A?null:i?.startedAt,finishedAt:A?null:new Date,requiredPathsJson:JSON.stringify(edN(t)),providedPathsJson:JSON.stringify(edT(t)),idempotencyKey:`${e}:${t.id}:${l}::0`,replayedFromId:i?.id??null}})}),await t.workflowWait.updateMany({where:{runId:e,status:"PENDING"},data:{status:"SUPERSEDED",resolvedAt:new Date}}),await t.workflowRun.update({where:{id:e},data:{generation:l,sessionDataJson:JSON.stringify(u),sessionRevision:{increment:1},status:"RUNNING",phase:"REPLAYING",blockedReason:null,error:null,pausedAt:null,finishedAt:null}})}),await this.appendEvent(e,null,"RUN_REPLAYED",`Replaying from step ${t}`,{generation:l,affectedNodeIds:r.affectedNodeIds}),edx(e),this.run(e)}async appendEvent(e,t,A,r,i=null){let n=await ag(),a=await n.$transaction(async n=>{let a=await n.workflowRunEvent.findFirst({where:{runId:e},orderBy:{sequence:"desc"},select:{sequence:!0}});return n.workflowRunEvent.create({data:{id:(0,AB.randomUUID)(),runId:e,attemptId:t,sequence:(a?.sequence??-1)+1,type:A,message:r.slice(0,2e4),detailJson:i?JSON.stringify(i):null}})});return af.publish(edg(e),{workflowRunEventAdded:a}),a}subscribeWorkflows(){return af.iterate(edh)}subscribeRun(e){return af.iterate(edp(e))}subscribeRunEvents(e){return af.iterate(edg(e))}subscribeRunQuestions(e){return af.iterate(edE(e))}}let edF=globalThis,edU=new Set(["localhost","::1","[::1]","0.0.0.0"]);function edH(e,t){var A=e.get(t);if(!A)return null;let r=A.split(",")[0].trim();return!r||/[\s/\\]/.test(r)?null:r}function ed_(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"");return!!(edU.has(t)||"::1"===t||t.endsWith(".local")||t.endsWith(".localhost")||/^127\./.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t))}function edL(e,t,A){let r;try{r=new URL(`${e}//${t}`)}catch{return null}return"http:"!==r.protocol&&"https:"!==r.protocol?null:{origin:r.origin,secure:"https:"===r.protocol,loopback:ed_(r.hostname),source:A}}function edG(e){if(e instanceof Headers)return e;let t=new Headers;for(let[A,r]of Object.entries(e))Array.isArray(r)?t.set(A,r.join(", ")):void 0!==r&&t.set(A,r);return t}let edP=new class{server=null;services=null;schema=null;initPromise=null;async initializeServer(){if(null===this.server)return this.initPromise||(this.initPromise=this.buildServer().finally(()=>{this.initPromise=null})),this.initPromise}async buildServer(){var e,t,A,r,i,n,a,s,o,l,c,u,d,h,p,g,E,I,f,m,C,y,Q,w,B,S,D,b,v,k,R,x,N,T,M,O,F,U,H,_,L,P,J;let Y,j,V,$,q,K,W,z,Z,X,ee,et,eA,er,ei,en,ea,es,eo,el,ec,eu,ed,eh,ep,eg,eE,eI,ef,em,eC,ey;this.services=edF.serverServices??(Y=new eeN,j=new s_,V=new eda,$=new a4,q=new ec$(j),K=new ecW,W=new ele($),(z=new euS($,q)).startRuntime(),Z=new y0($),X=new Ti($),ee=new ecx,et=new ecU($,void 0,j),eA=new ec5,er=new ci(void 0,j,K),(ei=new euE(q,$,W)).startReaper(),en=new Tf($,ee,q,W),ea=new el4($),eo=new T1(es=new TL($,ea)),el=new NJ(j,V),ec=new eex(void 0,j),eu=new lQ(j,q,K,!0,V),ed=new lg(!0,j,K,()=>eu.configurationChanged()),eh=new T5(j),ep=new N2($,el,ed,ea,V),eg=new elJ(eo,en,{codebases:es,telemetry:ee,pushNotifications:er,agents:$,diskSpace:W,workflows:()=>eI},j),e=eI=new edO(V,eE=new edd,void 0,j,$,q,ei,ep,z,ed,el),b=e,v=t={agentControl:$,jira:el,github:ed,worktrees:ep,codebases:es,builds:en,skills:ea,runs:ei,commands:z,notifications:q,pushNotifications:er,tools:eg,diskSpace:W},b.registerWaitPoller("AGENT_JOB",async e=>{let t=await v.agentControl.getJob(e);return t?new Set(["QUEUED","RUNNING"]).has(t.status)?{pending:!0,pollAfterSeconds:2}:{pending:!1,result:t.resultJson?{...euP(JSON.parse(t.resultJson),"Agent job result"),jobId:e}:{jobId:e,status:t.status},error:"SUCCEEDED"===t.status?null:t.error||`Agent job ${t.status.toLowerCase()}`}:{pending:!1,error:"Agent job disappeared"}}),b.registerWaitPoller("AGENT_RUN",async e=>{let t=await v.runs.get(e);return t?new Set(["IN_PROGRESS","PAUSED"]).has(t.status)?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:t.id,kind:t.kind,status:t.status,phase:t.phase,finalOutput:t.finalOutput,error:t.error,usage:{inputTokens:t.inputTokens,outputTokens:t.outputTokens,reasoningTokens:t.reasoningTokens,estimatedCost:t.estimatedCost}},error:"COMPLETED"===t.status?null:t.error||`Run ${t.status.toLowerCase()}`}:{pending:!1,error:"Plan or session disappeared"}}),b.registerWaitPoller("COMMAND_RUN",async e=>{let t=await v.commands.getRun(e);return t?new Set(["QUEUED","RUNNING","RESTARTING","CANCELLING"]).has(t.status)?{pending:!0,pollAfterSeconds:1}:{pending:!1,result:{id:t.id,displayNumber:t.displayNumber,status:t.status,exitCode:t.exitCode,signal:t.signal,error:t.error},error:"SUCCEEDED"===t.status?null:t.error||`Command run ${t.status.toLowerCase()}`}:{pending:!1,error:"Command run disappeared"}}),b.registerWaitPoller("BUILD",async e=>{let t=await v.builds.getBuild(e);return t?new Set(["QUEUED","PREPARING","RUNNING"]).has(t.status)?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:t.id,status:t.status,action:t.action},error:"SUCCEEDED"===t.status?null:t.error||`Build ${t.status.toLowerCase()}`}:{pending:!1,error:"Build disappeared"}}),b.registerWaitPoller("SKILL_RUN",async e=>{let t=await v.skills.getRun(e);return t?("READY"===t.status&&(t=await v.skills.applyRun(e)),new Set(["PREPARING","READY","APPLYING"]).has(t?.status??""))?{pending:!0,pollAfterSeconds:3}:{pending:!1,result:{id:e,status:t?.status},error:t?.status==="SUCCEEDED"?null:t?.error||`Skill run ${t?.status?.toLowerCase()}`}:{pending:!1,error:"Skill run disappeared"}}),b.registerWaitPoller("WORKTREE_MOVE",async e=>{let t=await v.worktrees.getMove(e);if(!t)return{pending:!1,error:"Worktree move disappeared"};if(new Set(["PUSHING","CHECKING_OUT","DELETING_SOURCE"]).has(t.status))return{pending:!0,pollAfterSeconds:3};let A=t.targetWorktreeId?await v.worktrees.workflowSessionDataForWorktree(t.targetWorktreeId,{includeMissing:!0}):{};return{pending:!1,result:{id:t.id,status:t.status,targetWorktreeId:t.targetWorktreeId,sessionPatch:A},error:"SUCCEEDED"===t.status?null:t.error||`Worktree move ${t.status.toLowerCase()}`}}),b.registerWaitPoller("WORKTREE_PUSH_READY",async e=>{let t=await ag(),A=await t.worktree.findUnique({where:{id:e}});if(!A)return{pending:!1,error:"Worktree disappeared"};if("READY"!==A.pushStatus)return{pending:!0,pollAfterSeconds:5};let r=await v.worktrees.workflowSessionDataForWorktree(A.id,{includeMissing:!0});return{pending:!1,result:{id:A.id,pushStatus:A.pushStatus,sessionPatch:r}}}),b.registerWaitPoller("WORKFLOW_RUN",async e=>{let t=await b.run(e);return t?new Set(["SUCCEEDED","FAILED","CANCELLED"]).has(t.status)?{pending:!1,result:{id:t.id,status:t.status,sessionData:JSON.parse(t.sessionDataJson)},error:"SUCCEEDED"===t.status?null:t.error||`Sub-workflow ${t.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:3}:{pending:!1,error:"Sub-workflow disappeared"}}),b.registerWaitPoller("RUN_ANSWER_REVISION",async e=>{let t=euP(JSON.parse(e),"Answer revision wait"),A=euJ(t.batchId,"Question batch ID",500),r=await v.runs.questionBatch(A);if(!r)return{pending:!1,error:"Question batch disappeared"};if(!r.revisionPreparedAt)return{pending:!0,pollAfterSeconds:2};let i=await v.runs.reviseAnswer(A,t.answers??{},!0===t.stash,!1!==t.rollback);return i?{pending:!1,result:{id:i.id,kind:i.kind,status:i.status,phase:i.phase,parentRunId:i.parentRunId,followUpMode:i.followUpMode}}:{pending:!1,error:"Answer revision failed"}}),b.registerWaitPoller("GITHUB_CHECKS",async e=>{let t=euP(JSON.parse(e),"GitHub checks wait"),A=await v.github.autoRetryRun(euJ(t.repositoryId,"Repository ID"),euJ(t.workflowRunId,"Workflow run ID"),!0);return new Set(["SUCCESS","FAILURE","CANCELLED","SKIPPED","TIMED_OUT","ACTION_REQUIRED","ERROR","NEUTRAL","STALE","STARTUP_FAILURE"]).has(A.status)?{pending:!1,result:{runId:A.id,status:A.status,jobs:A.jobs,sessionPatch:{pipeline:{runId:A.id,status:A.status,conclusion:A.status,jobs:A.jobs}}},error:"SUCCESS"===A.status?null:`GitHub checks concluded ${A.status.toLowerCase()}`}:{pending:!0,pollAfterSeconds:10}}),b.registerWaitPoller("DISK_SPACE_REPORT",async e=>{let t=euP(JSON.parse(e),"Disk-space report wait"),A=euJ(t.agentId,"Agent ID",500),r=await v.diskSpace.snapshot(A);if(!r.disk.enabled)return{pending:!1,error:"Disk-space monitoring was disabled while awaiting a report"};let i=r.disk.lastReportedAt,n="string"==typeof t.previousReportedAt?t.previousReportedAt:null;return(euJ(t.requestedAt,"Requested timestamp",100),i&&(!n||Date.parse(i)>Date.parse(n)))?{pending:!1,result:{...r,sessionPatch:r}}:{pending:!0,pollAfterSeconds:2}}),k=eE,R=t,k.register("JIRA_LOAD_TICKET",async e=>{let t=eu4(await R.jira.ticket(eu8(e),!0===e.node.config.force));return{output:t,sessionPatch:{ticket:t},links:[euW(String(t.key),String(t.title??t.key))]}}),k.register("JIRA_TRANSITION",async e=>{let t=eu4(await R.jira.transitionTicket(eu8(e),euJ(e.node.config.transitionId,"Jira transition ID",200)));return{output:t,sessionPatch:{ticket:t},links:[euW(String(t.key),String(t.title??t.key))]}}),k.register("JIRA_COMMENT",async e=>{let t=eu4(await R.jira.addComment(eu8(e),{value:euJ(e.node.config.content,"Jira comment",1e5),format:"JIRA_WIKI"===e.node.config.format?"JIRA_WIKI":"MARKDOWN"}));return{output:t,sessionPatch:{ticket:t},links:[euW(String(t.key),String(t.title??t.key))]}}),k.register("JIRA_ASSIGN",async e=>{let t=null===e.node.config.accountId?null:euJ(e.node.config.accountId,"Jira account ID",500),A=eu4(await R.jira.assignTicket(eu8(e),t));return{output:A,sessionPatch:{ticket:A},links:[euW(String(A.key),String(A.title??A.key))]}}),k.register("JIRA_UPDATE_FIELDS",async e=>{let t=euP(e.node.config.fields??{},"Jira fields"),A=eu4(await R.jira.updateTicket({issueKey:eu8(e),...t}));return{output:A,sessionPatch:{ticket:A},links:[euW(String(A.key),String(A.title??A.key))]}}),k.register("JIRA_RESOLVE_BRANCH",async e=>{let t=await R.worktrees.previewTicketBranch({codebaseId:euJ(e.node.config.codebaseId??Cb(e.sessionData,"codebase.id"),"Codebase ID",200),worktreeId:"string"==typeof Cb(e.sessionData,"worktree.id")?String(Cb(e.sessionData,"worktree.id")):null,ticketKey:eu8(e)});return{output:t,sessionPatch:{worktree:{branch:t.branchName},ticket:{key:t.ticketKey,title:t.ticketTitle,type:t.ticketType}},links:[euW(t.ticketKey,t.ticketTitle)]}}),x=eE,N=t,x.register("GITHUB_LOAD_PR",async e=>{let t=eu2(e),A=await N.github.pullRequest(t.owner,t.name,eu9(e));if(!A)throw Error("Pull request was not found");let r=eu3(A);return{output:r,sessionPatch:{pr:r},links:[euK("PULL_REQUEST",euv(t.owner,t.name,A.number),A.title,A.url)]}}),x.register("GITHUB_MERGE_PR",async e=>{let t=eu2(e),A=eu9(e),r=await N.github.pullRequestMergeOptions(t.owner,t.name,A);if(!r.canMerge)throw Error(r.blockedReason||"Pull request cannot be merged");let i=await N.github.mergePullRequest({...t,number:A,method:"MERGE"===e.node.config.method||"REBASE"===e.node.config.method?e.node.config.method:"SQUASH",commitHeadline:"string"==typeof e.node.config.commitHeadline?e.node.config.commitHeadline:r.defaultCommitHeadline,commitBody:"string"==typeof e.node.config.commitBody?e.node.config.commitBody:r.defaultCommitBody,authorEmail:"string"==typeof e.node.config.authorEmail?e.node.config.authorEmail:null});return{output:i,sessionPatch:{pr:{state:i.state}},links:[euz(e)]}}),x.register("GITHUB_COLLECT_REVIEW_THREADS",async e=>{let t=eu2(e),A=await N.github.pullRequest(t.owner,t.name,eu9(e));if(!A)throw Error("Pull request was not found");let r=A.reviewThreads.filter(({isResolved:e})=>!e);return{output:r,sessionPatch:{pr:{unresolvedThreads:r}},links:[euz(e,A.title,A.url)]}}),x.register("GITHUB_REPLY_REVIEW_THREAD",async e=>{let t=await N.github.replyToReviewThread(euJ(e.node.config.threadId,"Review thread ID",500),euJ(e.node.config.body,"Review reply",1e5)),A=euZ(e);return{output:t,links:A?[A]:void 0}}),x.register("GITHUB_SET_REVIEW_THREAD_RESOLVED",async e=>{let t=await N.github.setReviewThreadResolved(euJ(e.node.config.threadId,"Review thread ID",500),!1!==e.node.config.resolved),A=euZ(e);return{output:t,links:A?[A]:void 0}}),x.register("GITHUB_CREATE_PR",async e=>{let t=eu2(e),A=await N.github.createPullRequest({...t,baseRefName:euJ(e.node.config.baseRefName??Cb(e.sessionData,"worktree.baseBranch"),"Base branch",500),headRefName:euJ(e.node.config.headRefName??Cb(e.sessionData,"worktree.branch"),"Head branch",500),title:euJ(e.node.config.title??Cb(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}),r=eu3(A);return{output:r,sessionPatch:{pr:r},links:[euK("PULL_REQUEST",euv(t.owner,t.name,A.number),A.title,A.url)]}}),x.register("GITHUB_SET_PR_LABELS",async e=>{let t=eu2(e),A=Array.isArray(e.node.config.labels)?e.node.config.labels.map(String):[],r=await N.github.setPullRequestLabels({...t,number:eu9(e),labels:A});return{output:r.labels,sessionPatch:{pr:{labels:r.labels}},links:[euz(e)]}}),x.register("GITHUB_RETRY_PIPELINE",async e=>{let t=await N.github.retryPipeline(euJ(e.node.config.repositoryId??Cb(e.sessionData,"pr.repositoryGithubId"),"GitHub repository ID",500),euJ(e.node.config.checkSuiteId??Cb(e.sessionData,"pipeline.checkSuiteId"),"Check suite ID",500),{actor:"workflow",ipAddress:null}),A=euX(e);return{output:t,sessionPatch:{pipeline:{status:t.status}},links:A?[A]:void 0}}),x.register("GITHUB_RETRY_JOB",async e=>{let t=await N.github.retryWorkflowJob(euJ(e.node.config.repositoryId,"GitHub repository ID",500),euJ(e.node.config.checkSuiteId,"Check suite ID",500),euJ(e.node.config.jobId,"Workflow job ID",500),{actor:"workflow",ipAddress:null}),A=euX(e);return{output:t,links:A?[A]:void 0}}),x.register("GITHUB_CANCEL_WORKFLOW_RUN",async e=>{let t=await N.github.cancelActionsWorkflowRun(euJ(e.node.config.codebaseRepositoryId??Cb(e.sessionData,"repo.id"),"Codebase repository ID",500),euJ(e.node.config.workflowRunId??Cb(e.sessionData,"pipeline.runId"),"Workflow run ID",500),!0===e.node.config.force,{actor:"workflow",ipAddress:null}),A=euX(e);return{output:t,sessionPatch:{pipeline:{status:"CANCELLED"}},links:A?[A]:void 0}}),x.register("GITHUB_SAVE_AUTO_RETRY",async e=>({output:await N.github.saveAutoRetryRule(euP(e.node.config.input,"Auto-retry rule"))})),x.register("GITHUB_WAIT_CHECKS",async e=>{let t=euJ(e.node.config.repositoryId??Cb(e.sessionData,"repo.id"),"Repository ID",500),A=euJ(e.node.config.workflowRunId??Cb(e.sessionData,"pipeline.runId"),"Workflow run ID",500),r=euX(e);return{links:r?[r]:void 0,wait:{kind:"GITHUB_CHECKS",externalKey:JSON.stringify({repositoryId:t,workflowRunId:A}),resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),T=eE,M=t,T.register("WORKTREE_CREATE",async e=>{let t=ede(e),A=await M.worktrees.createWorktree({codebaseId:eu7(e),selection:t,requestId:euV(e,"create")});return euq(e,A,{worktree:{branch:t.branchName,baseBranch:t.baseBranch}})}),T.register("WORKTREE_CHANGE_BRANCH",async e=>{let t=eu6(e),A=ede(e),r=await M.worktrees.changeWorktreeBranch({worktreeId:t,selection:A,requestId:euV(e,"change-branch"),stashOnFailure:!0===e.node.config.stashOnFailure});return euq(e,r,{worktree:{branch:A.branchName,baseBranch:A.baseBranch}},[euK("WORKTREE",t,"Worktree")])}),T.register("WORKTREE_OPERATION",async e=>{let t=String(e.node.config.operation??"SYNC").toUpperCase();if("OPEN_EDITOR"===t||!r7.includes(t))throw Error("Worktree operation is invalid for workflow execution");let A=eu6(e),r=await M.worktrees.runOperation(A,t,euV(e,t.toLowerCase()));return euq(e,r,void 0,[euK("WORKTREE",A,"Worktree")])}),T.register("WORKTREE_DELETE",async e=>{let t=await M.worktrees.deleteWorktree({worktreeId:eu6(e),deleteRemoteBranch:!0===e.node.config.deleteRemoteBranch,requestId:euV(e,"delete")});return euq(e,t)}),T.register("WORKTREE_MOVE",async e=>{let t=await M.worktrees.moveWorktree({sourceWorktreeId:eu6(e),targetCodebaseId:euJ(e.node.config.targetCodebaseId,"Target codebase ID",500),targetWorktreeId:euY(e.node.config.targetWorktreeId,500),deleteSource:!0===e.node.config.deleteSource,requestId:euV(e,"move")}),A=t.targetWorktreeId??(!0===e.node.config.deleteSource?null:eu6(e));return{output:t,links:[...A?[euK("WORKTREE",A,"Worktree")]:[],{kind:"WORKTREE_MOVE",resourceId:t.id,label:"Worktree move"}],wait:{kind:"WORKTREE_MOVE",externalKey:t.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),T.register("WORKTREE_INSPECT",async e=>{let t=eu6(e),A=await M.worktrees.inspect(t,euV(e,"inspect"));return{output:A,sessionPatch:{worktree:{commits:A.commits,changes:A.changes,branchChanges:A.branchChanges}},links:[euK("WORKTREE",t,"Worktree")]}}),T.register("WORKTREE_INSPECT_GIT",async e=>{let t=eu6(e),A=await M.worktrees.inspectGitState(t,euV(e,"inspect-git"));return{output:A,sessionPatch:{worktree:{...A}},links:[euK("WORKTREE",t,"Worktree")]}}),T.register("WORKTREE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!r9.includes(t))throw Error("Worktree Git operation is invalid");let A=eu6(e),r=await M.worktrees.runGitOperation({worktreeId:A,operation:t,branch:euY(e.node.config.branch,500),stashOid:euY(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:euV(e,t.toLowerCase())});return euq(e,r,void 0,[euK("WORKTREE",A,"Worktree")])}),T.register("WORKTREE_WAIT_PUSH_READY",async e=>{let t=eu6(e);return{links:[euK("WORKTREE",t,"Worktree")],wait:{kind:"WORKTREE_PUSH_READY",externalKey:t,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),O=eE,F=t,O.register("CODEBASE_FETCH_REFRESH",async e=>{let t=eu7(e),A="REFRESH"===e.node.config.operation?rN:rT,r=await F.codebases.runOperation(A,[t],euV(e,A)),i=r.jobs[0];if(!i)throw Error(r.skipped[0]?.reason??"Codebase operation was skipped");return euq(e,i,void 0,[euK("CODEBASE",t,"Codebase")])}),O.register("CODEBASE_INSPECT_GIT",async e=>{let t=eu7(e),A=await F.codebases.inspectGitState(t,euV(e,"inspect-git"));return{output:A,sessionPatch:{codebase:{...A}},links:[euK("CODEBASE",t,"Codebase")]}}),O.register("CODEBASE_GIT_OPERATION",async e=>{let t=String(e.node.config.operation??"PULL_BRANCH").toUpperCase();if(!rF.includes(t))throw Error("Codebase Git operation is invalid");let A=eu7(e),r=await F.codebases.runGitOperation({codebaseId:A,operation:t,branch:euY(e.node.config.branch,500),stashOid:euY(e.node.config.stashOid,200),stashChanges:!0===e.node.config.stashChanges,requestId:euV(e,t.toLowerCase())});return euq(e,r,void 0,[euK("CODEBASE",A,"Codebase")])}),U=eE,H=t,U.register("BUILD_START",async e=>{let t=String(e.node.config.action??"BUILD").toUpperCase();if(!Aj.includes(t))throw Error("Build action is invalid");let A=await H.builds.startBuild({worktreeId:eu6(e),configurationId:euJ(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:euV(e,"build"),telemetryRequestOrigin:"workflow"});return{output:A,sessionPatch:{build:{id:A.id,status:A.status,action:A.action}},links:[{kind:"BUILD",resourceId:A.id,label:`${A.action} build`,url:`/builds/${A.id}`}],wait:{kind:"BUILD",externalKey:A.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),U.register("BUILD_READ_TEST_RESULTS",async e=>{let t,A=edt(e),r=(await H.builds.reportsForBuild(A)).filter(({kind:e,status:t})=>"TEST_RESULTS"===e&&"READY"===t).at(-1);if(!r)throw Error("Test results are not ready");let i=euP(JSON.parse(r.summaryJson),"Test summary"),n=euP(JSON.parse(r.dataJson),"Test results");return{output:{summary:i,tests:n.tests??[]},sessionPatch:{build:{testSummary:i,tests:n.tests??[]}},links:[euK("BUILD",A,"Build",t)]}}),U.register("BUILD_READ_COVERAGE",async e=>{let t=edt(e),A=(await H.builds.reportsForBuild(t)).filter(({kind:e,status:t})=>"CODE_COVERAGE"===e&&"READY"===t).at(-1);if(!A)throw Error("Coverage results are not ready");let r=euP(JSON.parse(A.summaryJson),"Coverage summary"),i=euP(JSON.parse(A.dataJson),"Coverage results");return{output:{summary:r,files:i.files??[],changedFiles:i.changedFiles??[]},sessionPatch:{build:{coverageSummary:r,coverageFiles:i.files??[],changedCoverageFiles:i.changedFiles??[]}},links:[euK("BUILD",t,"Build",`/builds/${t}/coverage`)]}}),U.register("BUILD_EXPORT",async e=>{let t,A,r=edt(e),i=await H.builds.exportArchive({buildId:r,requestId:euV(e,"export"),settings:euP(e.node.config.settings,"Export settings")});return i.jobId?euq(e,{id:i.jobId,timeoutSeconds:3600},{build:{exportId:i.id}},[euK("BUILD",r,"Build",t)]):{output:i,links:[euK("BUILD",r,"Build",A)]}}),U.register("BUILD_DEPLOY",async e=>{let t,A,r=edt(e),i=await H.builds.runBuild({buildId:r,destinations:Array.isArray(e.node.config.destinations)?e.node.config.destinations:[],requestId:euV(e,"deploy")}),n=i.find(({jobId:e})=>!!e)?.jobId;return n?euq(e,{id:n,timeoutSeconds:3600},void 0,[euK("BUILD",r,"Build",t)]):{output:i,links:[euK("BUILD",r,"Build",A)]}}),U.register("BUILD_CANCEL",async e=>{let t,A=edt(e),r=await H.builds.cancelBuild(A);return{output:r,sessionPatch:{build:{id:r?.id,status:r?.status}},links:[euK("BUILD",A,"Build",t)]}}),_=eE,L=t,ey=async e=>{let t=await L.diskSpace.snapshot(e);return{output:t,sessionPatch:t,links:[euK("AGENT",e,t.agent.name,`/agents/${encodeURIComponent(e)}`)]}},_.register("DISK_SPACE_LOAD",async e=>ey(edA(e))),_.register("DISK_SPACE_REFRESH",async e=>{let t=edA(e),A=await L.diskSpace.requestRefresh(t);return{output:A,links:[euK("AGENT",t,"Agent",`/agents/${encodeURIComponent(t)}`)],wait:{kind:"DISK_SPACE_REPORT",externalKey:JSON.stringify(A),resumeAfter:euG(e.node.config,2),timeoutAt:eu_(e.node.config,180)}}}),_.register("DISK_SPACE_UPDATE_THRESHOLDS",async e=>{let t=await L.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=edA(e);return await L.diskSpace.setMonitoring(t,!0===e.node.config.enabled),ey(t)}),_.register("DISK_SPACE_SET_PRESSURE_MODE",async e=>{let t=edA(e);return await L.diskSpace.setManualPressureMode(t,!0===e.node.config.enabled),ey(t)}),function(e,t){for(let[A,r]of(e.register("RUN_CREATE_PLAN",async e=>{let A=await t.runs.create(edi(e,"PLAN"));if(!A)throw Error("Plan could not be created");return eu$(e,A,!0)}),e.register("RUN_CREATE_SESSION",async e=>{let A=await t.runs.create(edi(e,"SESSION"));if(!A)throw Error("Session could not be created");return eu$(e,A,!0)}),e.register("RUN_PLAY_PLAN",async e=>{let A=await t.runs.playPlan(edr(e));if(!A)throw Error("Plan could not be played");return eu$(e,A,!0)}),e.register("RUN_FOLLOW_UP",async e=>{let A=edi(e,"SESSION"),r=await t.runs.followUp(edr(e),{...A,followUpMode:euJ(e.node.config.followUpMode??"RESUME","Follow-up mode",50),contextMode:euY(e.node.config.contextMode,50)});if(!r)throw Error("Follow-up could not be created");return eu$(e,r,!0)}),e.register("RUN_STEER",async e=>{let A=await t.runs.steer(edr(e),euJ(e.node.config.prompt,"Steering prompt",2e5),Array.isArray(e.node.config.attachmentIds)?e.node.config.attachmentIds.map(String):[]);if(!A)throw Error("Run could not be steered");return eu$(e,A)}),e.register("RUN_ANSWER",async e=>{let A=await t.runs.answerQuestion(euJ(e.node.config.batchId,"Question batch ID",500),e.node.config.answers??{});if(!A)throw Error("Question could not be answered");return eu$(e,A)}),[["RUN_PAUSE","PAUSE"],["RUN_CONTINUE","CONTINUE"],["RUN_CANCEL","CANCEL"]]))e.register(A,async e=>{let A=await t.runs.lifecycle(edr(e),r);if(!A)throw Error("Run lifecycle operation failed");return eu$(e,A)});e.register("RUN_REVISE_ANSWER",async e=>{let A=euJ(e.node.config.batchId,"Question batch ID",500),r=await t.runs.questionBatch(A);if(!r)throw Error("Question batch was not found");if(r.revisionPreparedAt){let r=await t.runs.reviseAnswer(A,e.node.config.answers??{},!0===e.node.config.stash,!1!==e.node.config.rollback);if(!r)throw Error("Answer revision failed");return eu$(e,r)}await t.runs.prepareAnswerRevision(A);let i=eu0(e);return{links:i?[i]:void 0,wait:{kind:"RUN_ANSWER_REVISION",externalKey:JSON.stringify({batchId:A,answers:e.node.config.answers??{},stash:!0===e.node.config.stash,rollback:!1!==e.node.config.rollback}),resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),e.register("RUN_READ_RESULT",async e=>{let A=await t.runs.get(edr(e));if(!A)throw Error("Run was not found");let[r,i,n,a]=await Promise.all([t.runs.events({runId:A.id,first:500}),t.runs.questions({runId:A.id,first:200}),t.runs.usage(A.id),t.runs.linkedItems(A.id)]);return eu$(e,{...A,events:r,questions:i,usage:n,links:a})}),e.register("RUN_CAPTURE_CHECKPOINT",async e=>{let t=await ag(),A=await t.runCheckpoint.findFirst({where:{runId:edr(e)},orderBy:{createdAt:"desc"}});if(!A)throw Error("Run has no captured checkpoint");let r=eu0(e);return{output:A,sessionPatch:{steps:{[e.node.id]:{snapshotId:A.id}}},links:[...r?[r]:[],{kind:"CHECKPOINT",resourceId:A.id,label:`${A.kind} checkpoint`}]}}),e.register("RUN_ARCHIVE_DELETE",async e=>{let A=edr(e),r=!0===e.node.config.delete,i=r?await t.runs.deleteRuns([A]):await t.runs.archive([A],!1!==e.node.config.archived),n=r?null:eu0(e);return{output:{id:A,affected:i},links:n?[n]:void 0}})}(eE,t),P=eE,J=t,P.register("SAVED_COMMAND",async e=>{let t=euJ(e.node.config.commandId,"Saved command",500),A=await J.commands.getDefinition(t);if(!A||A.archivedAt)throw Error("Saved command is unavailable");let r="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT";if("WAIT_FOR_EXIT"===r&&"ALWAYS"===A.restartPolicy)throw Error("Always-restart commands require fire and forget");let i=String(e.node.config.targetMode??"CONTEXT"),n=null,a=null,s=new Set(["ANY_AGENT_HOME","SPECIFIC_AGENT_HOME"]).has(A.targetKind);if("FIXED_AGENT"===i)n=euJ(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===i)a=euJ(e.node.config.worktreeId,"Fixed worktree",500);else if(s){let t=Cb(e.sessionData,"agent.id")??Cb(e.sessionData,"codebase.agentId");if("string"==typeof t&&(n=t),!n){let t=Cb(e.sessionData,"worktree.id");if("string"==typeof t){let e=await ag(),A=await e.worktree.findUnique({where:{id:t},select:{codebase:{select:{agentId:!0}}}});n=A?.codebase.agentId??null}}}else{let t=Cb(e.sessionData,"worktree.id");"string"==typeof t&&(a=t)}let o=await J.commands.startRun({commandId:t,agentId:n,worktreeId:a,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!o)throw Error("Command run could not be created");return{output:{id:o.id,displayNumber:o.displayNumber,status:o.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:o.id,displayNumber:o.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:o.id,label:`Command #${o.displayNumber}`,url:`/commands/runs/${o.id}`}],wait:"WAIT_FOR_EXIT"===r?{kind:"COMMAND_RUN",externalKey:o.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}:void 0}}),P.register("CUSTOM_COMMAND",async e=>{let t=euJ(e.node.config.script,"Custom command",1e6),A="FIRE_AND_FORGET"===e.node.config.completionMode?"FIRE_AND_FORGET":"WAIT_FOR_EXIT",r=String(e.node.config.targetMode??"CONTEXT"),i=null,n=null;if("FIXED_AGENT"===r)i=euJ(e.node.config.agentId,"Fixed agent",500);else if("FIXED_WORKTREE"===r)n=euJ(e.node.config.worktreeId,"Fixed worktree",500);else{let t=Cb(e.sessionData,"worktree.id");if("string"==typeof t)n=t;else{let t=Cb(e.sessionData,"agent.id")??Cb(e.sessionData,"codebase.agentId");"string"==typeof t&&(i=t)}}if(!i&&!n)throw Error("Custom command context has no agent or worktree target");let a=await J.commands.startCustomRun({script:t,agentId:i,worktreeId:n,origin:"WORKFLOW",idempotencyKey:e.attempt.idempotencyKey});if(!a)throw Error("Custom command run could not be created");return{output:{id:a.id,displayNumber:a.displayNumber,status:a.status},sessionPatch:{steps:{[e.node.id]:{commandRunId:a.id,displayNumber:a.displayNumber}}},links:[{kind:"COMMAND_RUN",resourceId:a.id,label:`Command #${a.displayNumber}`,url:`/commands/runs/${a.id}`}],wait:"WAIT_FOR_EXIT"===A?{kind:"COMMAND_RUN",externalKey:a.id,resumeAfter:euG(e.node.config),timeoutAt:eu_(e.node.config)}:void 0}}),P.register("SKILL_APPLY",async e=>{let t=await J.skills.prepareSync(e.node.config.groupId?"GROUP":"ALL",euY(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:euG(e.node.config),timeoutAt:eu_(e.node.config)}}}),P.register("NOTIFICATION_SEND",async e=>{let t=await ag(),A=await t.$transaction(t=>J.notifications.recordInTransaction(t,{dedupeKey:`${e.run.id}:${e.node.id}:${e.attempt.generation}`,typeKey:"WORKFLOW_MESSAGE",title:euJ(e.node.config.title,"Notification title",240),body:euJ(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 Cb(e.sessionData,"worktree.id")?String(Cb(e.sessionData,"worktree.id")):null}));return J.notifications.created(A),{output:A}}),P.register("IOS_PUSH_SEND",async e=>({output:await J.pushNotifications.send({requestId:euV(e,"ios-push"),editor:e.node.config.editor,targetMode:euJ(e.node.config.targetMode??"ALL","Push target mode",50),registrationIds:Array.isArray(e.node.config.registrationIds)?e.node.config.registrationIds.map(String):[],channelId:euY(e.node.config.channelId,500),directToken:euY(e.node.config.directToken,2e4),directTokenEncoding:"BASE64"===e.node.config.directTokenEncoding?"BASE64":"HEX",directEnvironment:"PRODUCTION"===e.node.config.directEnvironment?"PRODUCTION":"SANDBOX"})})),P.register("MCP_CALL",async e=>{let t=await J.tools.callTool({groupId:euJ(e.node.config.groupId,"MCP tool group",500),name:euJ(e.node.config.name,"MCP tool name",500),arguments:euP(e.node.config.arguments??{},"MCP arguments")});return{output:t,sessionPatch:{steps:{[e.node.id]:{output:t}}}}}),(ef=new edc(V,$,ep,W)).start(),eI.startRuntime(),(em=new eub(Z,W,K)).startRuntime(),edF.serverServices={prismaService:Y,credentialService:j,agentControlService:$,ccusageService:Z,buildDataService:X,buildsService:en,codebasesService:es,codebaseToolsService:eo,jiraService:el,iosDevicesService:ec,gitHubService:ed,gitHubActionsNotificationsService:eu,cacheServerService:eh,worktreesService:ep,skillsService:ea,telemetryService:ee,signingAssetsService:et,pushNotificationsService:er,notificationsService:q,pollingService:K,modelCostsService:eA,runsService:ei,commandsService:z,diskSpaceService:W,systemStatusService:em,toolsService:eg,workflowEventsService:V,workflowsService:eI,workflowEventBridge:ef}),this.schema=(A=this.services.prismaService,r=this.services.agentControlService,i=this.services.jiraService,n=this.services.gitHubService,a=this.services.ccusageService,s=this.services.codebasesService,o=this.services.toolsService,l=this.services.worktreesService,c=this.services.buildDataService,u=this.services.skillsService,d=this.services.buildsService,h=this.services.iosDevicesService,p=this.services.telemetryService,g=this.services.signingAssetsService,E=this.services.pushNotificationsService,I=this.services.cacheServerService,f=this.services.credentialService,m=this.services.notificationsService,C=this.services.pollingService,y=this.services.modelCostsService,Q=this.services.runsService,w=this.services.workflowsService,B=this.services.commandsService,S=this.services.diskSpaceService,D=this.services.systemStatusService,eC=G([{Query:{health:async()=>await A.healthCheck()?"ok":"degraded"}},{JSON:a7,Agent:{capabilities:e=>a6(e.capabilitiesJson),connectionStatus:e=>null!==e.lastSeenAt&&Date.now()-e.lastSeenAt.getTime()<=aZ(e)&&null===e.disconnectedAt?"ONLINE":"OFFLINE",effectiveBuildsDirectory:e=>Aw(e),lastSeenAt:e=>e.lastSeenAt?.toISOString()??null,disconnectedAt:e=>e.disconnectedAt?.toISOString()??null,createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},AgentJob:{payload:e=>a6(e.payloadJson),result:e=>a6(e.resultJson),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>e.startedAt?.toISOString()??null,finishedAt:e=>e.finishedAt?.toISOString()??null,updatedAt:e=>e.updatedAt.toISOString()},AgentJobLog:{createdAt:e=>e.createdAt.toISOString()},AgentEnrollmentToken:{expiresAt:e=>e.expiresAt.toISOString()},Query:{agents:(e,t,A)=>(a8(A),r.listAgents()),agent:(e,{id:t},A)=>(a5(A,t),r.getAgent(t)),agentSelf:(e,t,A)=>{let i=a3(A);return r.getAgent(i)},agentCadenceSettings:(e,{agentId:t},A)=>(a5(A,t),r.cadenceSettings(t)),agentJobs:(e,{agentId:t,limit:A},i)=>(a5(i,t),r.listJobs(t,A,!!i.agentId)),agentJob:async(e,{id:t},A)=>a9(A,r,t),agentJobLogs:async(e,{jobId:t,afterSequence:A},i)=>(await a9(i,r,t),r.listLogs(t,A))},Mutation:{createAgentEnrollmentToken:(e,{expiresInMinutes:t},A)=>(a8(A),r.createEnrollmentToken(t)),enrollAgent:(e,{input:t},A)=>r.enroll({...t,ipAddress:A.ipAddress}),heartbeatAgent:(e,{input:t},A)=>r.heartbeat(a3(A),{...t,ipAddress:A.ipAddress}),createAgentJob:(e,{input:t},A)=>{if(a8(A),t.kind===AC)throw Error("Saved commands must be launched through startCommandRun");return r.createJob(t)},claimAgentJob:(e,{jobId:t},A)=>r.claimJob(a3(A),t),claimSigningSecretTransfer:(e,{transferId:t},A)=>r.claimSigningSecretTransfer(a3(A),t),appendAgentJobLogs:(e,{jobId:t,logs:A},i)=>r.appendLogs(a3(i),t,A),completeAgentJob:(e,t,A)=>r.completeJob(a3(A),t.jobId,t.status,t.result,t.error??null),cancelAgentJob:(e,{jobId:t},A)=>(a8(A),r.cancelJob(t)),requestAgentCodebaseReconcile:async(e,{agentId:t},A)=>(a8(A),await r.requestCodebaseReconcile([t])===1),updateAgentBaseRepoDirectory:(e,{agentId:t,baseRepoDirectory:A},i)=>(a8(i),r.updateBaseRepoDirectory(t,A??null)),updateAgentBuildsDirectory:(e,{agentId:t,buildsDirectory:A},i)=>(a8(i),r.updateBuildsDirectory(t,A??null)),updateAgentDerivedDataSettings:(e,{agentId:t,input:A},i)=>(a8(i),r.updateDerivedDataSettings(t,A.mode,A.path??null)),updateAgentCadenceSettings:(e,{agentId:t,input:A},i)=>(a8(i),r.updateCadenceSettings(t,A)),deleteAgent:(e,{agentId:t},A)=>(a8(A),r.deleteAgent(t))},Subscription:{agentEvents:{subscribe:(e,{agentId:t},A)=>{if(a3(A)!==t)throw Error("An agent may only subscribe to its own events");return af.iterate(aC(t))}},agentChanged:{subscribe:(e,{agentId:t},A)=>(t?a5(A,t):a8(A),af.iterate(am,t?e=>e.agentChanged.id===t:void 0))},agentJobChanged:{subscribe:async(e,{jobId:t},A)=>(await a9(A,r,t),af.iterate(ay(t)))},agentJobLogAdded:{subscribe:async(e,{jobId:t},A)=>(await a9(A,r,t),af.iterate(aQ(t)))}}},{Query:{jiraSettings:(e,t,A)=>(so(A),i.getSettings()),jiraAvailableProjects:(e,t,A)=>(so(A),i.availableProjects()),jiraProjects:(e,t,A)=>(so(A),i.listProjects()),jiraProjectStatuses:(e,{projectId:t},A)=>(so(A),i.projectStatuses(t)),jiraTicketBoard:(e,{sourceId:t},A)=>(so(A),i.ticketBoard(t)),jiraTicket:(e,{issueKey:t},A)=>(so(A),i.ticket(t)),jiraAssignableUsers:(e,{issueKey:t,query:A},r)=>(so(r),i.assignableUsers(t,A)),jiraTicketTransitions:(e,{issueKey:t},A)=>(so(A),i.ticketTransitions(t)),jiraTicketEditFields:(e,{issueKey:t},A)=>(so(A),i.ticketEditFields(t)),jiraTicketChanges:(e,{issueKey:t,limit:A,offset:r},n)=>(so(n),i.ticketChanges(t,A,r)),jiraTicketWorklogs:(e,{issueKey:t,limit:A,offset:r},n)=>(so(n),i.ticketWorklogs(t,A,r)),jiraCacheMetrics:(e,t,A)=>(so(A),i.cacheMetrics()),jiraApiCalls:(e,{limit:t,offset:A},r)=>(so(r),i.listApiCalls(t,A)),jiraCachedTickets:(e,{limit:t,offset:A},r)=>(so(r),i.listCachedTickets(t,A)),jiraCachedTicket:(e,{issueKey:t},A)=>(so(A),i.cachedTicket(t))},Mutation:{saveJiraSettings:(e,{input:t},A)=>(so(A),i.saveSettings(t)),testJiraConnection:(e,t,A)=>(so(A),i.testConnection()),clearJiraCredentials:(e,t,A)=>(so(A),i.clearCredentials()),addJiraProject:(e,{jiraId:t},A)=>(so(A),i.addProject(t)),removeJiraProject:(e,{projectId:t},A)=>(so(A),i.removeProject(t)),createJiraSource:(e,{input:t},A)=>(so(A),i.createSource(t)),updateJiraSource:(e,{input:t},A)=>(so(A),i.updateSource(t)),deleteJiraSource:(e,{id:t},A)=>(so(A),i.deleteSource(t)),updateJiraProjectDisplaySettings:(e,{input:t},A)=>(so(A),i.updateProjectDisplaySettings(t)),updateJiraProjectBranchNaming:(e,{projectId:t,branchNamingScript:A},r)=>(so(r),i.updateProjectBranchNaming(t,A)),refreshJiraSource:(e,{sourceId:t},A)=>(so(A),i.ticketBoard(t,!0)),updateJiraCacheTtl:(e,{ttlMinutes:t},A)=>(so(A),i.updateCacheTtl(t)),clearJiraCache:(e,t,A)=>(so(A),i.clearCache()),refreshJiraCachedTicket:(e,{issueKey:t},A)=>(so(A),i.refreshCachedTicket(t)),deleteJiraCachedTicket:(e,{issueKey:t},A)=>(so(A),i.deleteCachedTicket(t)),addJiraComment:(e,{issueKey:t,content:A},r)=>(so(r),i.addComment(t,A)),assignJiraTicket:(e,{issueKey:t,accountId:A},r)=>(so(r),i.assignTicket(t,A??null)),transitionJiraTicket:(e,{issueKey:t,transitionId:A},r)=>(so(r),i.transitionTicket(t,A)),updateJiraTicket:(e,{input:t},A)=>(so(A),i.updateTicket(t))}},{Query:{githubSettings:(e,t,A)=>(lw(A),n.getSettings()),githubAppSettings:(e,t,A)=>(lw(A),n.getAppSettings()),githubRepositories:(e,t,A)=>(lw(A),n.listRepositories()),githubAvailableRepositories:(e,{after:t},A)=>(lw(A),n.availableRepositories(t)),githubActionsWorkflowRuns:(e,{codebaseRepositoryId:t,branch:A,workflowId:r,first:i,after:a},s)=>(lw(s),n.actionsWorkflowRuns(t,i??25,a,A,r)),githubActionsWorkflowJobs:(e,{codebaseRepositoryId:t,workflowRunId:A},r)=>(lw(r),n.actionsWorkflowJobs(t,A)),githubActionsWorkflowRunAttempt:(e,{repositoryId:t,workflowRunId:A,attempt:r},i,a)=>(lw(i),n.actionsWorkflowRunAttempt(t,A,r,lS(a))),githubWorktreeWorkflowRuns:(e,{worktreeId:t},A)=>(lw(A),n.worktreeWorkflowRuns(t)),githubRepositoryWorkflows:(e,{codebaseRepositoryId:t},A)=>(lw(A),n.repositoryWorkflows(t)),githubAutoRetryRules:(e,{codebaseRepositoryId:t,workflowRunId:A},r)=>(lw(r),n.autoRetryRules({codebaseRepositoryId:t,workflowRunId:A})),githubPullRequests:(e,{scope:t,repositoryId:A,state:r,first:i,after:a},s,o)=>(lw(s),n.pullRequests(t,A,{includePipelineJobs:lS(o),state:r??"OPEN",first:i??25,after:a})),githubPullRequest:(e,{owner:t,name:A,number:r},i)=>(lw(i),n.pullRequest(t,A,r)),githubPullRequestMergeOptions:(e,{owner:t,name:A,number:r},i)=>(lw(i),n.pullRequestMergeOptions(t,A,r)),githubReviewThreads:(e,t,A)=>(lw(A),n.reviewThreads())},Mutation:{saveGitHubSettings:(e,{input:t},A)=>(lw(A),n.saveSettings(t)),saveGitHubAppSettings:(e,{input:t},A)=>(lw(A),n.saveAppSettings(t,lB(A),A.requestOrigin)),testGitHubConnection:(e,t,A)=>(lw(A),n.testConnection()),testGitHubAppConnection:(e,t,A)=>(lw(A),n.testAppConnection(lB(A))),clearGitHubCredentials:(e,t,A)=>(lw(A),n.clearCredentials()),clearGitHubAppCredentials:(e,t,A)=>(lw(A),n.clearAppCredentials(lB(A))),addGitHubRepository:(e,{input:t},A)=>(lw(A),n.addRepository(t)),updateGitHubRepository:(e,{input:t},A)=>(lw(A),n.updateRepository(t)),removeGitHubRepository:(e,{id:t},A)=>(lw(A),n.removeRepository(t)),mergeGitHubPullRequest:async(e,{input:t},A)=>{lw(A);let r=await n.mergePullRequest(t),{owner:i,name:a}=li(`${t.owner}/${t.name}`);return l.invalidatePullRequestsForOrigin(`github.com/${i}/${a}`),r},createGitHubPullRequest:(e,{input:t},A)=>(lw(A),n.createPullRequest(t)),setGitHubPullRequestLabels:(e,{input:t},A)=>(lw(A),n.setPullRequestLabels(t)),retryGitHubPipeline:(e,{repositoryId:t,checkSuiteId:A},r)=>(lw(r),n.retryPipeline(t,A,lB(r))),retryGitHubWorkflowJob:(e,{repositoryId:t,checkSuiteId:A,jobId:r},i)=>(lw(i),n.retryWorkflowJob(t,A,r,lB(i))),cancelGitHubActionsWorkflowRun:(e,{codebaseRepositoryId:t,workflowRunId:A,force:r},i)=>(lw(i),n.cancelActionsWorkflowRun(t,A,r,lB(i))),saveGitHubAutoRetryRule:(e,{input:t},A)=>(lw(A),n.saveAutoRetryRule(t)),setGitHubAutoRetryRuleEnabled:(e,{id:t,enabled:A},r)=>(lw(r),n.setAutoRetryRuleEnabled(t,A)),deleteGitHubAutoRetryRule:(e,{id:t},A)=>(lw(A),n.deleteAutoRetryRule(t)),replyToGitHubReviewThread:(e,{threadId:t,body:A},r)=>(lw(r),n.replyToReviewThread(t,A)),setGitHubReviewThreadResolved:(e,{threadId:t,resolved:A},r)=>(lw(r),n.setReviewThreadResolved(t,A))}},{CcusageCollection:{aggregate:(e,{range:t="ALL"})=>(function(e,t,A=new Date){let r;if(null===t)return e;let i=new Date(A);i.setHours(0,0,0,0),i.setDate(i.getDate()-(t-1));let n=(r=e=>String(e).padStart(2,"0"),`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`),a=e.days.filter(e=>e.period>=n),s=st();return a.forEach(e=>sA(s,e)),{days:a,totals:s}})(e.aggregate,sn[t])},CcusageModelUsage:{unattributed:e=>e.unattributed??!1},Query:{ccusageCollection:async(e,{id:t},A)=>(sa(A),await a.initialize(),a.getCollection(t))},Mutation:{collectCcusage:async(e,{requestId:t},A)=>(sa(A),await a.initialize(),a.collect(t))},Subscription:{ccusageCollectionChanged:{subscribe:async(e,{id:t},A)=>(sa(A),await a.initialize(),a.subscribe(t)),resolve:e=>e}}},{DerivedDataDeletionHistory:{deletedAt:e=>e.deletedAt.toISOString()},Query:{derivedDataCollection:(e,{id:t},A)=>(ss(A),c.getCollection(t)),derivedDataDeletionHistory:(e,{first:t,after:A},r)=>(ss(r),c.history(t,A))},Mutation:{refreshDerivedData:(e,{requestId:t},A)=>(ss(A),c.refresh(t)),calculateDerivedDataSizes:(e,{collectionId:t,entryIds:A,requestId:r},i)=>(ss(i),c.calculateSizes(t,A,r)),deleteDerivedDataEntries:(e,{collectionId:t,entryIds:A,requestId:r,overrideProtection:i},n)=>(ss(n),c.deleteEntries(t,A,r,i)),setDerivedDataEntryLocked:(e,{collectionId:t,entryId:A,locked:r},i)=>(ss(i),c.setEntryLocked(t,A,r)),clearDerivedDataDeletionHistory:(e,t,A)=>(ss(A),c.clearHistory())},Subscription:{derivedDataCollectionChanged:{subscribe:(e,{id:t},A)=>(ss(A),c.subscribe(t)),resolve:e=>e}}},{CodebaseOverview:{repositories:e=>Array.isArray(e)?e:e.repositories??[]},CodebaseRepository:{quickActionWorkflows:async e=>(await ag()).workflow.findMany({where:{archivedAt:null,quickActionKind:{not:"NONE"},OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:e.id}}}]},include:{activeVersion:!0,quickActionRepositories:{include:{repository:!0}}},orderBy:[{name:"asc"},{id:"asc"}]}),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},CodebaseSettings:{updatedAt:e=>e.updatedAt.toISOString()},Codebase:{lastCheckedAt:e=>lk(e.lastCheckedAt),lastFetchedAt:e=>lk(e.lastFetchedAt),lastFetchAttemptAt:e=>lk(e.lastFetchAttemptAt),localBranches:e=>{try{let t=JSON.parse(e.localBranchesJson);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}},remoteBranches:e=>{try{let t=JSON.parse(e.remoteBranchesJson);return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}},createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),activeJob:e=>e.jobs?.[0]??null},AgentCodebaseRegistration:{canonicalOrigin:e=>e.repository.canonicalOrigin,keepBaseBranchUpToDate:e=>e.repository.keepBaseBranchUpToDate,worktrees:e=>e.worktrees??[],lastFetchedAt:e=>lk(e.lastFetchedAt),lastFetchAttemptAt:e=>lk(e.lastFetchAttemptAt)},Query:{codebaseOverview:async(e,t,A)=>(lv(A),s.overview()),codebaseRepository:(e,{id:t},A)=>(lv(A),s.repositoryDetail(t)),codebase:(e,{id:t},A)=>(lv(A),s.detail(t)),codebaseSettings:(e,t,A)=>(lv(A),s.settings()),agentCodebases:(e,t,A)=>s.agentCodebases(lb(A)),agentCodebaseConfiguration:(e,t,A)=>s.agentConfiguration(lb(A))},Mutation:{browseAgentDirectory:(e,{input:t},A)=>(lv(A),s.browse(t.agentId,t.path??null,t.requestId)),inspectAgentCodebase:(e,{input:t},A)=>(lv(A),s.inspect(t.agentId,t.folder,t.requestId)),confirmCodebase:(e,{input:t},A)=>(lv(A),s.confirm(t)),updateCodebaseRepository:(e,{input:t},A)=>(lv(A),s.updateRepository(t.id,t.name,t.description,t.jiraBranchRegex,t.keepBaseBranchUpToDate,t.skillGroupIds)),updateCodebaseSettings:(e,{input:t},A)=>(lv(A),s.updateSettings(t)),removeCodebase:(e,{id:t},A)=>(lv(A),s.removeCodebase(t)),refreshCodebases:(e,{input:t},A)=>(lv(A),s.runOperation(rN,t.codebaseIds,t.requestId)),fetchCodebases:(e,{input:t},A)=>(lv(A),s.runOperation(rT,t.codebaseIds,t.requestId)),inspectCodebaseGitState:(e,{input:t},A)=>(lv(A),s.inspectGitState(t.codebaseId,t.requestId)),inspectCodebaseStash:(e,{input:t},A)=>(lv(A),s.inspectStash(t.codebaseId,t.stashOid,t.requestId)),runCodebaseGitOperation:(e,{input:t},A)=>(lv(A),s.runGitOperation(t)),reportCodebaseStatuses:(e,{reports:t},A)=>s.report(lb(A),t)},Subscription:{codebaseOverviewChanged:{subscribe:(e,t,A)=>(lv(A),s.subscribe())}}},{Query:{externalMcpServers:(e,t,A)=>(lR(A),o.externalServers())},Mutation:{createExternalMcpServer:(e,{input:t},A)=>(lR(A),o.createExternalServer(t)),updateExternalMcpServer:(e,{id:t,input:A},r)=>(lR(r),o.updateExternalServer(t,A)),deleteExternalMcpServer:(e,{id:t},A)=>(lR(A),o.deleteExternalServer(t))}},{WorktreeLatestBuild:{destination:e=>JSON.parse(e.destinationJson),createdAt:e=>e.createdAt.toISOString()},Worktree:{lastCheckedAt:e=>lT(e.lastCheckedAt),missingAt:e=>lT(e.missingAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorktreeTag:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorktreeSettings:{updatedAt:e=>e.updatedAt.toISOString()},WorktreeMove:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>lT(e.finishedAt)},Query:{worktreeOverview:(e,t,A)=>(lN(A),l.overview()),hiddenWorktrees:(e,t,A)=>(lN(A),l.hidden()),worktreeSettings:(e,t,A)=>(lN(A),l.settings()),previewWorktreeTicketBranch:(e,{input:t},A)=>(lN(A),l.previewTicketBranch(t)),worktreeMove:(e,{id:t},A)=>(lN(A),l.getMove(t))},Mutation:{refreshWorktrees:(e,t,A)=>(lN(A),l.requestRefresh()),reportWorktrees:(e,{reports:t},A)=>l.report(lx(A),t),reportWorktreeActivity:(e,{input:t},A)=>l.reportActivity(lx(A),t),inspectWorktree:(e,{id:t,requestId:A},r)=>(lN(r),l.inspect(t,A)),inspectWorktreeDiff:(e,{input:t},A)=>(lN(A),l.inspectDiff(t.worktreeId,{scope:t.scope,path:t.path,previousPath:t.previousPath,commitSha:t.commitSha},t.requestId)),runWorktreeOperation:(e,{input:t},A)=>(lN(A),l.runOperation(t.worktreeId,t.operation,t.requestId)),createWorktree:(e,{input:t},A)=>(lN(A),l.createWorktree(t)),changeWorktreeBranch:(e,{input:t},A)=>(lN(A),l.changeWorktreeBranch(t)),moveWorktree:(e,{input:t},A)=>(lN(A),l.moveWorktree(t)),retryWorktreeMoveWithStash:(e,{id:t},A)=>(lN(A),l.retryWorktreeMoveWithStash(t)),cancelWorktreeMove:(e,{id:t},A)=>(lN(A),l.cancelWorktreeMove(t)),deleteWorktree:(e,{input:t},A)=>(lN(A),l.deleteWorktree(t)),updateWorktreeBaseBranch:(e,{id:t,baseBranch:A},r)=>(lN(r),l.updateBaseBranch(t,A??null)),updateWorktreeHighlight:(e,{id:t,color:A},r)=>(lN(r),l.updateHighlight(t,A??null)),setWorktreeTags:(e,{id:t,tagIds:A},r)=>(lN(r),l.setTags(t,A)),saveWorktreeTag:(e,{input:t},A)=>(lN(A),l.saveTag(t)),deleteWorktreeTag:(e,{id:t},A)=>(lN(A),l.deleteTag(t)),saveWorktreeSettings:(e,{editorVariant:t},A)=>(lN(A),l.saveSettings(t)),purgeHiddenWorktree:(e,{id:t},A)=>(lN(A),l.purge(t)),purgeAllHiddenWorktrees:(e,t,A)=>(lN(A),l.purgeAll())},Subscription:{worktreeOverviewChanged:{subscribe:(e,t,A)=>(lN(A),l.subscribe())},worktreeInspectionChanged:{subscribe:(e,{worktreeId:t},A)=>(lN(A),l.subscribeInspection(t))}}},{CodebaseRepository:{skillGroups:e=>u.groupsForRepository(e.id)},Skill:{groups:e=>e.groups?.map(e=>e.group)??[],createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillFile:{contentsBase64:e=>Buffer.from(e.contents).toString("base64"),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillGroup:{skills:e=>e.skills?.map(e=>e.skill)??[],repositories:e=>e.repositories?.map(e=>e.repository)??[],createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillSettings:{updatedAt:e=>e.updatedAt.toISOString()},SkillToolObservation:{checkedAt:e=>e.checkedAt.toISOString()},SkillInstallation:{consumers:e=>{try{return JSON.parse(e.consumersJson)}catch{return[]}},lastSeenAt:e=>e.lastSeenAt.toISOString()},SkillSyncItem:{candidatePackage:e=>{try{return e.candidatePackageJson?JSON.parse(e.candidatePackageJson):null}catch{return null}},createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},SkillSyncRun:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>{let t;return t=e.finishedAt,t?.toISOString()??null}},Query:{skillsOverview:(e,{search:t},A)=>(lM(A),u.overview(t??"")),skill:(e,{id:t},A)=>(lM(A),u.getSkill(t)),skillSyncRun:(e,{id:t},A)=>(lM(A),u.getRun(t))},Mutation:{saveSkill:(e,{input:t},A)=>(lM(A),u.saveSkill(t)),deleteSkill:(e,{id:t},A)=>(lM(A),u.deleteSkill(t)),saveSkillGroup:(e,{input:t},A)=>(lM(A),u.saveGroup(t)),deleteSkillGroup:(e,{id:t},A)=>(lM(A),u.deleteGroup(t)),saveSkillSettings:(e,{input:t},A)=>(lM(A),u.saveSettings(t)),prepareSkillSync:(e,{kind:t,groupId:A},r)=>(lM(r),u.prepareSync(t,A??null)),skipPendingSkillSync:(e,{runId:t},A)=>(lM(A),u.skipPending(t)),resolveSkillSyncItem:(e,{input:t},A)=>{var r;return lM(A),u.resolveItem({...t,package:t.package?iT({...r=t.package,packageHash:r.packageHash||iD(r.files)}):null})},applySkillSync:(e,{runId:t},A)=>(lM(A),u.applyRun(t))},Subscription:{skillsChanged:{subscribe:(e,t,A)=>(lM(A),u.subscribe()),resolve:()=>u.overview()},skillSyncRunChanged:{subscribe:(e,{runId:t},A)=>(lM(A),u.subscribeRun(t)),resolve:(e,{runId:t})=>u.getRun(t)}}},{CodebaseProject:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildConfiguration:{advancedSettings:e=>lL(e.advancedSettingsJson,{}),exportSettings:e=>e.exportSettingsJson?lL(e.exportSettingsJson,null):null,observation:e=>e.source?.observations?.[0]??null,createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildSourceObservation:{schemes:e=>lL(e.schemesJson,[]),configurations:e=>lL(e.configurationsJson,[]),testPlans:e=>lL(e.testPlansJson,[]),lastParseAttemptAt:e=>e.lastParseAttemptAt.toISOString(),lastParsedAt:e=>l_(e.lastParsedAt)},BuildScript:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},BuildArtifact:{metadata:e=>lL(e.metadataJson,{}),createdAt:e=>e.createdAt.toISOString()},BuildReport:{summary:e=>lL(e.summaryJson,{}),data:async e=>lL("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{}),testSummary:e=>"TEST_RESULTS"===e.kind&&"READY"===e.status?lL(e.summaryJson,{}):null,tests:async e=>{if("TEST_RESULTS"!==e.kind)return[];let t=lL("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.tests)?t.tests:[]},coverageSummary:e=>"CODE_COVERAGE"===e.kind&&"READY"===e.status?lL(e.summaryJson,{}):null,coverageFiles:async e=>{if("CODE_COVERAGE"!==e.kind)return[];let t=lL("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.files)?t.files:[]},changedCoverageFiles:async e=>{if("CODE_COVERAGE"!==e.kind)return[];let t=lL("string"==typeof e.dataJson?e.dataJson:await d.reportData(e.id),{});return Array.isArray(t.changedFiles)?t.changedFiles:[]},build:e=>e.build??d.getBuild(e.buildId),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>l_(e.finishedAt)},BuildDeployment:{destination:e=>lL(e.destinationJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>l_(e.startedAt),finishedAt:e=>l_(e.finishedAt)},BuildExport:{settings:e=>lL(e.settingsSnapshotJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>l_(e.startedAt),finishedAt:e=>l_(e.finishedAt)},Build:{reports:e=>e.reports??d.reportsForBuild(e.id),destination:e=>lL(e.destinationJson,{}),snapshot:e=>lL(e.snapshotJson,{}),createdAt:e=>e.createdAt.toISOString(),startedAt:e=>l_(e.startedAt),finishedAt:e=>l_(e.finishedAt),updatedAt:e=>e.updatedAt.toISOString(),durationMs:e=>e.startedAt&&e.finishedAt?Math.max(0,e.finishedAt.getTime()-e.startedAt.getTime()):null,outOfDate:lF},BuildLogChunk:{createdAt:e=>e.createdAt instanceof Date?e.createdAt.toISOString():e.createdAt},Query:{iosAppProject:(e,{codebaseId:t},A)=>(lU(A),d.project(t)),buildSigningOptions:(e,{buildId:t},A)=>(lU(A),d.signingOptionsForBuild(t)),buildScripts:(e,t,A)=>(lU(A),d.scripts()),builds:(e,t,A)=>(lU(A),d.builds(t)),build:(e,{id:t},A)=>(lU(A),d.getBuild(t)),buildLogChunks:(e,t,A)=>(lU(A),d.logChunks(t.buildId,t.after,t.first)),worktreeCoverageReports:(e,{worktreeId:t},A)=>(lU(A),d.coverageHistory(t))},Mutation:{createIosAppProject:(e,{codebaseId:t},A)=>(lU(A),d.createProject(t)),saveBuildConfiguration:(e,{input:t},A)=>(lU(A),d.saveConfiguration(t)),deleteBuildConfiguration:(e,{id:t},A)=>(lU(A),d.deleteConfiguration(t)),discoverBuildSources:(e,t,A)=>(lU(A),d.discoverSources(t.worktreeId,t.requestId)),inspectBuildSource:(e,{input:t},A)=>(lU(A),d.inspectSource(t)),reparseBuildConfiguration:(e,t,A)=>(lU(A),d.reparse(t.configurationId,t.worktreeId,t.requestId)),inspectBuildDestinations:(e,{input:t},A)=>(lU(A),d.destinations(t)),inspectBuildRunDestinations:(e,t,A)=>(lU(A),d.destinationsForBuild(t.buildId,t.requestId)),saveBuildScript:(e,{input:t},A)=>(lU(A),d.saveScript(t)),deleteBuildScript:(e,{id:t},A)=>(lU(A),d.deleteScript(t)),setCodebaseBuildScripts:(e,t,A)=>(lU(A),d.setAllowedScripts(t.codebaseId,t.scriptIds)),startBuild:(e,{input:t},A)=>(lU(A),d.startBuild({...t,telemetryRequestOrigin:A.requestOrigin})),rebuildBuild:(e,{id:t,requestId:A},r)=>(lU(r),d.rebuildBuild(t,A,r.requestOrigin)),cancelBuild:(e,{id:t},A)=>(lU(A),d.cancelBuild(t)),deleteBuilds:(e,{ids:t},A)=>(lU(A),d.deleteBuilds(t)),runBuild:(e,{input:t},A)=>(lU(A),d.runBuild(t)),exportBuildArchive:(e,{input:t},A)=>(lU(A),d.exportArchive(t)),parseBuildTestResults:(e,t,A)=>(lU(A),d.generateReport(t.buildId,"TEST_RESULTS",t.requestId)),generateBuildCoverageReport:(e,t,A)=>(lU(A),d.generateReport(t.buildId,"CODE_COVERAGE",t.requestId)),startWorktreeCoverage:(e,{input:t},A)=>(lU(A),d.startWorktreeCoverage({...t,telemetryRequestOrigin:A.requestOrigin})),reportBuildProgress:(e,{input:t},A)=>d.reportProgress(lH(A),t),appendBuildLogChunks:(e,{buildId:t,chunks:A},r)=>d.appendLogChunks(lH(r),t,A)},Subscription:{buildsChanged:{subscribe:(e,t,A)=>(lU(A),af.iterate(av))},buildChanged:{subscribe:(e,{id:t},A)=>(lU(A),af.iterate(aV(t)))},buildLogChunkAdded:{subscribe:(e,{buildId:t},A)=>(lU(A),af.iterate(a$(t)))}}},{IosDevice:lJ,IosDeviceSummary:lJ,IosDeviceEnrollment:{expiresAt:e=>e.expiresAt.toISOString(),downloadedAt:e=>lP(e.downloadedAt),consumedAt:e=>lP(e.consumedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},IosDeviceIpObservation:{observedAt:e=>e.observedAt.toISOString()},Query:{iosDevices:(e,{status:t},A)=>(lG(A),h.devices(t)),iosDevice:(e,{id:t},A)=>(lG(A),h.device(t)),iosDeviceFirmware:(e,{id:t},A)=>(lG(A),h.deviceFirmware(t)),iosDeviceSettings:(e,t,A)=>(lG(A),h.getSettings())},Mutation:{renameIosDevice:(e,{id:t,displayName:A},r)=>(lG(r),h.renameDevice(t,A)),rejectIosDevice:(e,{id:t},A)=>(lG(A),h.rejectDevice(t)),deleteIosDevice:(e,{id:t},A)=>(lG(A),h.deleteDevice(t)),registerIosDevice:(e,{id:t},A)=>(lG(A),h.registerDevice(t)),saveIosProfileSettings:(e,{input:t},A)=>(lG(A),h.saveProfileSettings(t)),regenerateIosProfileSigner:(e,t,A)=>(lG(A),h.regenerateProfileSignerView()),saveAppStoreConnectSettings:(e,{input:t},A)=>(lG(A),h.saveAppStoreConnectSettings(t)),testAppStoreConnectSettings:(e,t,A)=>(lG(A),h.testAppStoreConnectSettings()),clearAppStoreConnectSettings:(e,t,A)=>(lG(A),h.clearAppStoreConnectSettings())},Subscription:{iosDevicesChanged:{subscribe:(e,t,A)=>(lG(A),h.subscribe()),resolve:e=>e}}},{Query:{telemetryTimeline:(e,{input:t},A)=>(lY(A),p.timeline(t)),telemetryEntries:(e,{ids:t},A)=>(lY(A),p.entries(t)),telemetryFacets:(e,{view:t},A)=>(lY(A),p.facets(t)),telemetryFields:(e,{view:t},A)=>(lY(A),p.fields(t)),telemetrySettings:(e,{requestOrigin:t},A)=>(lY(A),p.settings(lj(t))),telemetryViewSettings:(e,{view:t},A)=>(lY(A),p.viewSettings(t)),telemetryColumnPresets:(e,{view:t},A)=>(lY(A),p.columnPresets(t)),telemetrySavedFilters:(e,{view:t},A)=>(lY(A),p.savedFilters(t))},Mutation:{saveTelemetrySettings:(e,{input:t,requestOrigin:A},r)=>(lY(r),p.saveSettings(t,lj(A))),saveTelemetryViewSettings:(e,{input:t},A)=>(lY(A),p.saveViewSettings(t)),saveTelemetryColumnPreset:(e,{input:t},A)=>(lY(A),p.saveColumnPreset(t)),deleteTelemetryColumnPreset:(e,{id:t},A)=>(lY(A),p.deleteColumnPreset(t)),saveTelemetryFilter:(e,{input:t},A)=>(lY(A),p.saveFilter(t)),deleteTelemetryFilter:(e,{id:t},A)=>(lY(A),p.deleteFilter(t)),addTelemetrySeparator:(e,{name:t},A)=>(lY(A),p.addSeparator(t)),updateTelemetryHighlight:(e,{id:t,color:A},r)=>(lY(r),p.highlight(t,A??null)),clearSelectedTelemetry:(e,{selection:t},A)=>(lY(A),p.clearSelected(t)),clearTelemetry:(e,{view:t,includeSeparators:A},r)=>(lY(r),p.clearAll(t,A)),clearTelemetryBeforeLatestSeparator:(e,{view:t},A)=>(lY(A),p.clearBeforeLatestSeparator(t))},Subscription:{telemetryEntriesChanged:{subscribe:(e,t,A)=>(lY(A),p.subscribe()),resolve:e=>e},telemetrySettingsChanged:{subscribe:(e,t,A)=>(lY(A),p.subscribeSettings()),resolve:e=>e}}},{LocalSigningProfile:{provisionedDevices:e=>g.profileDevices(e.deviceUdids)},SigningOperation:{createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString(),finishedAt:e=>l$(e.finishedAt)},SigningOperationItem:{createdAt:e=>e.createdAt.toISOString(),finishedAt:e=>l$(e.finishedAt)},Query:{signingAgents:(e,t,A)=>(lV(A),g.agents()),signingProfiles:(e,t,A)=>(lV(A),g.profiles()),signingProfile:(e,{id:t},A)=>(lV(A),g.profile(t)),signingCertificates:(e,t,A)=>(lV(A),g.certificates()),signingOperations:(e,{limit:t},A)=>(lV(A),g.operations(t)),appleDeveloperInventory:(e,t,A)=>(lV(A),g.portalInventory())},Mutation:{refreshSigningAssets:(e,{agentIds:t},A)=>(lV(A),g.refresh(t??void 0)),uploadSigningProfile:(e,t,A)=>(lV(A),g.uploadProfile(t.contentBase64,t.targetAgentIds)),downloadSigningProfile:(e,t,A)=>(lV(A),g.downloadProfile(t.uuid,t.agentId)),syncSigningProfile:(e,t,A)=>(lV(A),g.syncProfile(t.uuid,t.sourceAgentId,t.targetAgentIds)),deleteSigningProfile:(e,t,A)=>(lV(A),g.deleteProfile(t.uuid,t.agentIds)),deleteExpiredSigningProfiles:(e,{agentIds:t},A)=>(lV(A),g.deleteExpiredProfiles(t??void 0)),importSigningIdentity:(e,t,A)=>(lV(A),g.importIdentity(t)),deleteSigningIdentity:(e,t,A)=>(lV(A),g.deleteIdentity(t.sha1,t.agentIds)),createApplePortalProfile:(e,{input:t},A)=>(lV(A),g.createPortalProfile(t)),deleteApplePortalProfile:(e,{id:t},A)=>(lV(A),g.deletePortalProfile(t)),revokeApplePortalCertificate:(e,{id:t},A)=>(lV(A),g.revokePortalCertificate(t))},Subscription:{signingAssetsChanged:{subscribe:(e,t,A)=>(lV(A),g.subscribe()),resolve:()=>!0}}},{ApnsRegistration:{...cs,tokenMasked:e=>e.tokenMasked??(e.token?`${e.token.slice(0,8)}…${e.token.slice(-8)}`:"—"),supportedPushTypes:e=>e.supportedPushTypes??(e.pushTypesJson?JSON.parse(e.pushTypesJson):[]),pushMagicConfigured:e=>!!e.pushMagic,invalidatedAt:e=>ca(e.invalidatedAt),lastFailureAt:e=>ca(e.lastFailureAt),lastRegisteredAt:e=>e.lastRegisteredAt.toISOString(),lastSentAt:e=>ca(e.lastSentAt)},ApnsCertificateCredential:{...cs,expiresAt:e=>ca(e.expiresAt),lastTestedAt:e=>ca(e.lastTestedAt)},PushNotificationSettings:{updatedAt:e=>e.updatedAt.toISOString(),tokenConfiguredAt:e=>ca(e.tokenConfiguredAt),tokenLastUsedAt:e=>ca(e.tokenLastUsedAt)},ApnsBroadcastChannel:cs,PushNotificationPreset:{...cs,editor:e=>JSON.parse(e.editorJson)},PushNotificationBatch:{...cs,editor:e=>JSON.parse(e.editorJson),payload:e=>JSON.parse(e.payloadJson),headers:e=>JSON.parse(e.headersJson),startedAt:e=>ca(e.startedAt),finishedAt:e=>ca(e.finishedAt)},PushNotificationDelivery:{createdAt:e=>e.createdAt.toISOString(),startedAt:e=>ca(e.startedAt),finishedAt:e=>ca(e.finishedAt),responseTimestamp:e=>ca(e.responseTimestamp)},Query:{apnsRegistrations:(e,t,A)=>(cn(A),E.registrations()),pushNotificationSettings:(e,t,A)=>(cn(A),E.settings()),apnsBroadcastChannels:(e,t,A)=>(cn(A),E.channels()),pushNotificationPresets:(e,t,A)=>(cn(A),E.presets()),pushNotificationHistory:(e,{limit:t},A)=>(cn(A),E.history(t)),validatePushNotification:(e,{editor:t},A)=>(cn(A),l8(t))},Mutation:{renameApnsRegistration:(e,t,A)=>(cn(A),E.renameRegistration(t.id,t.displayName)),setApnsRegistrationActive:(e,t,A)=>(cn(A),E.setRegistrationActive(t.id,t.active)),deleteApnsRegistration:(e,{id:t},A)=>(cn(A),E.deleteRegistration(t)),saveApnsTokenSettings:(e,{input:t},A)=>(cn(A),E.saveTokenSettings(t)),clearApnsTokenSettings:(e,t,A)=>(cn(A),E.clearTokenSettings()),addApnsCertificateCredential:(e,{input:t},A)=>(cn(A),E.addCertificateCredential(t)),retestApnsCertificateCredential:(e,{id:t},A)=>(cn(A),E.retestCertificateCredential(t)),deleteApnsCertificateCredential:(e,{id:t},A)=>(cn(A),E.deleteCertificateCredential(t)),createApnsBroadcastChannel:(e,{input:t},A)=>(cn(A),E.createChannel(t)),deleteApnsBroadcastChannel:(e,{id:t},A)=>(cn(A),E.deleteChannel(t)),savePushNotificationPreset:(e,t,A)=>(cn(A),E.savePreset(t.name,t.editor,t.id)),deletePushNotificationPreset:(e,{id:t},A)=>(cn(A),E.deletePreset(t)),savePushNotificationDraft:(e,{editor:t},A)=>(cn(A),E.saveDraft(t)),sendPushNotification:(e,{input:t},A)=>(cn(A),E.send(t)),resendPushNotification:(e,t,A)=>(cn(A),E.resend(t.id,t.requestId)),deletePushNotificationHistory:(e,{id:t},A)=>(cn(A),E.deleteHistory(t)),clearPushNotificationHistory:(e,t,A)=>(cn(A),E.clearHistory())},Subscription:{pushNotificationsChanged:{subscribe:(e,t,A)=>(cn(A),E.subscribe()),resolve:()=>!0}}},{Query:{cacheServerSettings:(e,t,A)=>(lD(A),I.getSettings()),cacheEntries:(e,t,A)=>(lD(A),I.listCacheEntries(t)),cacheEntryDetail:(e,{id:t},A)=>(lD(A),I.getCacheEntryDetail(t)),cacheStorageLocation:(e,{id:t},A)=>(lD(A),I.getStorageLocation(t)),cacheEntryMatch:(e,t,A)=>(lD(A),I.matchCacheEntry(t))},Mutation:{saveCacheServerSettings:(e,{input:t},A)=>(lD(A),I.saveSettings(t)),testCacheServerConnection:(e,t,A)=>(lD(A),I.testConnection()),clearCacheServerSettings:(e,t,A)=>(lD(A),I.clearSettings()),deleteCacheEntry:(e,{id:t},A)=>(lD(A),I.deleteCacheEntry(t)),deleteCacheEntriesByIds:(e,{ids:t},A)=>(lD(A),I.deleteCacheEntriesByIds(t)),deleteCacheEntries:(e,t,A)=>(lD(A),I.deleteCacheEntries(t)),deleteCacheStorageLocation:(e,{id:t},A)=>(lD(A),I.deleteStorageLocation(t))}},{CredentialStorageType:{DATABASE:"database",VAULT:"vault",KEYCHAIN:"keychain",UNKNOWN:"unknown"},Query:{credentialStoreStatus:(e,t,A)=>(co(A),f.status()),credentials:(e,t,A)=>(co(A),f.list())}},{AppNotification:{sidebarDismissedAt:e=>cc(e.sidebarDismissedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},NotificationPreference:{updatedAt:e=>cc(e.updatedAt)},WebPushSubscription:{expirationTime:e=>cc(e.expirationTime),lastSeenAt:e=>e.lastSeenAt.toISOString(),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},Query:{notifications:(e,t,A)=>(cl(A),m.history(t)),sidebarNotifications:(e,{limit:t},A)=>(cl(A),m.sidebar(t??void 0)),notificationPreferences:(e,t,A)=>(cl(A),m.preferences()),webPushState:(e,t,A)=>(cl(A),m.webPushState()),webPushSubscriptions:(e,t,A)=>(cl(A),m.webPushSubscriptions())},Mutation:{saveNotificationPreference:(e,{input:t},A)=>(cl(A),m.savePreference(t)),dismissNotification:(e,{id:t},A)=>(cl(A),m.dismiss(t)),dismissAllSidebarNotifications:(e,t,A)=>(cl(A),m.dismissAll()),deleteNotifications:(e,{selection:t},A)=>(cl(A),m.deleteSelection(t)),deleteAllNotifications:(e,t,A)=>(cl(A),m.deleteAll()),prepareWebPush:async(e,t,A)=>(cl(A),await m.prepareWebPush(),m.webPushState()),registerWebPushSubscription:async(e,{input:t},A)=>(cl(A),await m.registerWebPush(t),m.webPushState()),unregisterWebPushSubscription:(e,{endpoint:t},A)=>(cl(A),m.unregisterWebPush(t)),deleteWebPushSubscription:(e,{id:t},A)=>(cl(A),m.deleteWebPushSubscription(t)),testWebPushSubscription:(e,{id:t},A)=>(cl(A),m.testWebPushSubscription(t))},Subscription:{notificationsChanged:{subscribe:(e,t,A)=>(cl(A),m.subscribe())}}},{Query:{pollingOperations:(e,t,A)=>(cu(A),C.list())},Subscription:{pollingOperationChanged:{subscribe:(e,t,A)=>(cu(A),C.subscribe())}}},{AgentRun:{catalogCost:async e=>{await y.ensureFresh();let t=e.modelUsage?.length?e.modelUsage:[e],A=await y.lookup(t.map(({model:e})=>e)),r=0,i=!1;for(let e of t){let t=y.estimate(A.get(e.model),e);null!==t&&(r+=t,i=!0)}return i?r:null}},RunModelUsage:{catalogCost:async e=>{await y.ensureFresh();let t=await y.lookup([e.model]);return y.estimate(t.get(e.model),e)}},Query:{modelCostCatalog:async(e,t,A)=>(cE(A),await y.ensureFresh(),y.getCatalog()),modelCostEntries:(e,t,A)=>(cE(A),y.listEntries(t))},Mutation:{saveModelCostSettings:(e,{catalogUrl:t},A)=>(cE(A),y.saveSettings(t??null)),refreshModelCosts:(e,t,A)=>(cE(A),y.refresh())}},{AgentRun:{archivedAt:e=>cp(e.archivedAt),nativeArchivedAt:e=>cp(e.nativeArchivedAt),startedAt:e=>cp(e.startedAt),finishedAt:e=>cp(e.finishedAt),pricingUpdatedAt:e=>cp(e.pricingUpdatedAt),playedAt:e=>cp(e.playedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},RunAttempt:{startedAt:e=>e.startedAt.toISOString(),finishedAt:e=>cp(e.finishedAt),supersededAt:e=>cp(e.supersededAt)},RunInput:{createdAt:e=>e.createdAt.toISOString()},RunAttachment:{downloadPath:e=>`/api/run-attachments/${encodeURIComponent(e.id)}`,createdAt:e=>e.createdAt.toISOString()},RunEvent:{raw:e=>cg(e.rawJson),createdAt:e=>e.createdAt.toISOString(),supersededAt:e=>cp(e.supersededAt)},RunToolCall:{input:e=>cg(e.inputJson),output:e=>cg(e.outputJson),startedAt:e=>e.startedAt.toISOString(),finishedAt:e=>cp(e.finishedAt),supersededAt:e=>cp(e.supersededAt)},RunAnswerRevision:{answers:e=>JSON.parse(e.answersJson),createdAt:e=>e.createdAt.toISOString(),supersededAt:e=>cp(e.supersededAt)},RunQuestionBatch:{createdAt:e=>e.createdAt.toISOString(),answeredAt:e=>cp(e.answeredAt),supersededAt:e=>cp(e.supersededAt),revisionPreparedAt:e=>cp(e.revisionPreparedAt)},RunCheckpoint:{createdAt:e=>e.createdAt.toISOString()},RunDraft:{archivedAt:e=>cp(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},RunCommand:{payload:e=>JSON.parse(e.payloadJson),createdAt:e=>e.createdAt.toISOString(),claimedAt:e=>cp(e.claimedAt),finishedAt:e=>cp(e.finishedAt)},RunProviderImportStatus:{catalog:e=>cg(e.catalogJson),lastStartedAt:e=>cp(e.lastStartedAt),lastCompletedAt:e=>cp(e.lastCompletedAt),updatedAt:e=>e.updatedAt.toISOString()},Query:{agentRuns:(e,t,A)=>(cd(A),Q.list(t)),agentRun:(e,{id:t},A)=>(cd(A),Q.get(t)),runEvents:(e,t,A)=>(cd(A),Q.events(t)),runQuestionBatches:(e,t,A)=>(cd(A),Q.questions(t)),runUsage:(e,{runId:t},A)=>(cd(A),Q.usage(t)),runNativeSessionFile:(e,{runId:t},A)=>(cd(A),Q.nativeSessionFile(t)),runLinkedItems:(e,{runId:t},A)=>(cd(A),Q.linkedItems(t)),runDrafts:(e,t,A)=>(cd(A),Q.drafts(t)),runDraft:(e,{id:t},A)=>(cd(A),Q.draft(t)),runProviderCatalog:(e,t,A)=>(cd(A),Q.providerCatalog(t)),runProviderImportStatus:(e,t,A)=>(cd(A),Q.providerImportStatus()),pendingRunCommands:(e,t,A)=>Q.pendingCommands(ch(A))},Mutation:{createAgentRun:(e,{input:t},A)=>(cd(A),Q.create(t)),playPlan:(e,{planId:t},A)=>(cd(A),Q.playPlan(t)),createRunFollowUp:(e,{sourceId:t,input:A},r)=>(cd(r),Q.followUp(t,A)),saveRunDraft:(e,{input:t},A)=>(cd(A),Q.saveDraft(t)),archiveAgentRuns:(e,{ids:t,archived:A},r)=>(cd(r),Q.archive(t,A)),deleteAgentRuns:(e,{ids:t},A)=>(cd(A),Q.deleteRuns(t)),archiveRunDrafts:(e,{ids:t,archived:A},r)=>(cd(r),Q.archiveDrafts(t,A)),deleteRunDrafts:(e,{ids:t},A)=>(cd(A),Q.deleteDrafts(t)),pauseAgentRun:(e,{id:t},A)=>(cd(A),Q.lifecycle(t,"PAUSE")),continueAgentRun:(e,{id:t},A)=>(cd(A),Q.lifecycle(t,"CONTINUE")),cancelAgentRun:(e,{id:t},A)=>(cd(A),Q.lifecycle(t,"CANCEL")),steerAgentRun:(e,{id:t,prompt:A,attachmentIds:r},i)=>(cd(i),Q.steer(t,A,r)),answerRunQuestion:(e,{batchId:t,answers:A},r)=>(cd(r),Q.answerQuestion(t,A)),prepareRunAnswerRevision:(e,{batchId:t},A)=>(cd(A),Q.prepareAnswerRevision(t)),reviseRunAnswer:(e,{batchId:t,answers:A,stash:r,rollback:i},n)=>(cd(n),Q.reviseAnswer(t,A,!!r,!1!==i)),claimRunCommand:(e,{id:t},A)=>Q.claimCommand(ch(A),t),completeRunCommand:(e,{id:t,status:A,error:r},i)=>Q.completeCommand(ch(i),t,A,r),beginRunAttempt:(e,{runId:t,nativeId:A},r)=>Q.beginAttempt(ch(r),t,A),updateRunAttemptNativeId:(e,t,A)=>Q.updateAttemptNativeId(ch(A),t.attemptId,t.nativeId,t.providerVersion),appendRunEvents:(e,t,A)=>Q.appendEvents(ch(A),t.runId,t.attemptId??null,t.events),reportRunQuestion:(e,t,A)=>Q.reportQuestion(ch(A),t.runId,t.attemptId??null,t.nativeRequestId??null,t.eventSequence??null,t.questions),reportRunUsage:(e,t,A)=>Q.reportUsage(ch(A),t.runId,t.attemptId??null,t.input),finishRunAttempt:(e,t,A)=>Q.finishAttempt(ch(A),t.attemptId,t.input),reportRunCheckpoint:(e,t,A)=>Q.reportCheckpoint(ch(A),t.runId,t.attemptId??null,t.input),reportRunAnswerRevisionPreview:(e,t,A)=>Q.reportAnswerRevisionPreview(ch(A),t.batchId,t.rollbackPatch,t.pushedCommitWarning),applyRunAnswerRevision:(e,t,A)=>Q.applyAnswerRevision(ch(A),t.batchId,t.revisionId,t.replacementAttemptId),importProviderRuns:(e,{provider:t,runs:A},r)=>Q.importRuns(ch(r),t,A),reportRunProviderImportStatus:(e,t,A)=>Q.reportProviderImportStatus(ch(A),t.provider,t.status,t.error,t.catalog)},Subscription:{agentRunsChanged:{subscribe:(e,t,A)=>(cd(A),Q.subscribeRuns()),resolve:e=>Q.get(e.runChanged.id)},agentRunChanged:{subscribe:(e,{runId:t},A)=>(cd(A),Q.subscribeRun(t)),resolve:e=>Q.get(e.runChanged.id)},runEventAdded:{subscribe:(e,{runId:t},A)=>(cd(A),Q.subscribeEvents(t))},runQuestionChanged:{subscribe:(e,{runId:t},A)=>(cd(A),Q.subscribeQuestions(t)),resolve:e=>Q.questionBatch(e.runQuestionChanged.id)}}},{Workflow:{draftDefinition:e=>JSON.parse(e.draftDefinitionJson),versionCount:e=>e._count?.versions??e.versions?.length??0,runCount:e=>e._count?.runs??0,quickActionRepositories:e=>e.quickActionRepositories?.map(({repository:e})=>e)??[],triggerChoices:(e,{resourceKind:t})=>{if(!e.activeVersion)return[];let A=t?.trim().toUpperCase()??null,r=yO(JSON.parse(e.activeVersion.definitionJson)).triggers.find(e=>e.kind===(A?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE")&&(!A||yc(e.config)===A));return r?yo(r.config):[]},hasPlainTrigger:(e,{resourceKind:t})=>{if(!e.activeVersion)return!1;let A=t?.trim().toUpperCase()??null;return yO(JSON.parse(e.activeVersion.definitionJson)).triggers.some(e=>e.kind===(A?"RESOURCE_MANUAL":"MANUAL")&&(!A||yc(e.config)===A))},archivedAt:e=>yj(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowVersion:{definition:e=>JSON.parse(e.definitionJson),publishedAt:e=>e.publishedAt.toISOString(),createdAt:e=>e.createdAt.toISOString()},WorkflowTrigger:{config:e=>JSON.parse(e.configJson),createdAt:e=>e.createdAt.toISOString()},WorkflowRun:{triggerPayload:e=>JSON.parse(e.triggerPayloadJson),sessionData:e=>JSON.parse(e.sessionDataJson),worktree:e=>w.runWorktree(e.sessionDataJson),attemptCount:e=>e._count?.attempts??e.attempts?.length??0,eventCount:e=>e._count?.events??e.events?.length??0,queuedAt:e=>e.queuedAt.toISOString(),startedAt:e=>yj(e.startedAt),pausedAt:e=>yj(e.pausedAt),finishedAt:e=>yj(e.finishedAt),archivedAt:e=>yj(e.archivedAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowStepAttempt:{input:e=>yV(e.inputJson),output:e=>yV(e.outputJson),requiredPaths:e=>JSON.parse(e.requiredPathsJson),providedPaths:e=>JSON.parse(e.providedPathsJson),startedAt:e=>yj(e.startedAt),finishedAt:e=>yj(e.finishedAt),supersededAt:e=>yj(e.supersededAt),createdAt:e=>e.createdAt.toISOString(),updatedAt:e=>e.updatedAt.toISOString()},WorkflowWait:{predicate:e=>yV(e.predicateJson),result:e=>yV(e.resultJson),resumeAfter:e=>yj(e.resumeAfter),timeoutAt:e=>yj(e.timeoutAt),createdAt:e=>e.createdAt.toISOString(),resolvedAt:e=>yj(e.resolvedAt),updatedAt:e=>e.updatedAt.toISOString()},WorkflowRunEvent:{detail:e=>yV(e.detailJson),createdAt:e=>e.createdAt.toISOString()},WorkflowRunResourceLink:{metadata:e=>yV(e.metadataJson),createdAt:e=>e.createdAt.toISOString()},Query:{workflows:(e,t,A)=>(yY(A),w.list(t)),workflow:(e,{id:t},A)=>(yY(A),w.get(t)),workflowVersion:(e,{id:t},A)=>(yY(A),w.version(t)),workflowCatalog:(e,t,A)=>(yY(A),w.catalog()),validateWorkflowDraft:(e,{id:t},A)=>(yY(A),w.validateDraft(t)),workflowRuns:(e,t,A)=>(yY(A),w.runs(t)),workflowRun:(e,{id:t},A)=>(yY(A),w.run(t)),workflowRunEvents:(e,t,A)=>(yY(A),w.runEvents(t.runId,t.afterSequence,t.first)),workflowRunsForResource:(e,t,A)=>(yY(A),w.runsForResource(t.kind,t.resourceId)),workflowsAcceptingResource:(e,{kind:t},A)=>(yY(A),w.acceptingResource(t)),workflowQuickActions:(e,t,A)=>(yY(A),w.quickActions(t)),exportWorkflow:(e,{id:t,versionId:A},r)=>(yY(r),w.export(t,A)),prepareWorkflowReplay:(e,t,A)=>(yY(A),w.prepareReplay(t.runId,t.nodeId)),workflowJobSecrets:(e,{jobId:t},A)=>w.jobSecrets(function(e){if(!e.agentId)throw Error("Agent authentication is required");return e.agentId}(A),t)},Mutation:{createWorkflow:(e,{input:t},A)=>(yY(A),w.create(t)),saveWorkflowDraft:(e,{input:t},A)=>(yY(A),w.saveDraft(t)),importWorkflow:(e,{input:t},A)=>(yY(A),w.import(t)),publishWorkflow:(e,{id:t},A)=>(yY(A),w.publish(t)),setWorkflowEnabled:(e,t,A)=>(yY(A),w.setEnabled(t.id,t.enabled)),setWorkflowQuickAction:(e,{input:t},A)=>(yY(A),w.setQuickAction(t)),archiveWorkflow:(e,t,A)=>(yY(A),w.archive(t.id,t.archived)),deleteWorkflow:(e,{id:t},A)=>(yY(A),w.delete(t)),archiveWorkflowRuns:(e,{ids:t,archived:A},r)=>(yY(r),w.archiveRuns(t,A)),deleteWorkflowRuns:(e,{ids:t},A)=>(yY(A),w.deleteRuns(t)),triggerWorkflow:(e,{input:t},A)=>(yY(A),w.trigger(t)),pauseWorkflowRun:(e,{id:t},A)=>(yY(A),w.lifecycle(t,"PAUSE")),resumeWorkflowRun:(e,{id:t},A)=>(yY(A),w.lifecycle(t,"RESUME")),cancelWorkflowRun:(e,{id:t},A)=>(yY(A),w.lifecycle(t,"CANCEL")),repairWorkflowRunData:(e,{id:t,patch:A},r)=>(yY(r),w.repairRunData(t,A)),answerWorkflowQuestion:(e,{batchId:t,answers:A},r)=>(yY(r),w.answerQuestion(t,A)),replayWorkflowRun:(e,t,A)=>(yY(A),w.replay(t.runId,t.nodeId,t))},Subscription:{workflowsChanged:{subscribe:(e,t,A)=>(yY(A),w.subscribeWorkflows()),resolve:e=>"runs"===e.workflowChanged.id?null:w.get(e.workflowChanged.id)},workflowRunChanged:{subscribe:(e,{runId:t},A)=>(yY(A),w.subscribeRun(t)),resolve:e=>w.run(e.workflowRunChanged.id)},workflowRunEventAdded:{subscribe:(e,{runId:t},A)=>(yY(A),w.subscribeRunEvents(t))},workflowQuestionChanged:{subscribe:(e,{runId:t},A)=>(yY(A),w.subscribeRunQuestions(t)),resolve:e=>w.questionBatch(e.workflowQuestionChanged.id)}}},{CommandDefinition:yK,CommandRun:{snapshot:e=>JSON.parse(e.snapshotJson),queuedAt:e=>e.queuedAt.toISOString(),startedAt:e=>yq(e.startedAt),finishedAt:e=>yq(e.finishedAt),nextRestartAt:e=>yq(e.nextRestartAt),...yK},CommandRunAttempt:{startedAt:e=>yq(e.startedAt),finishedAt:e=>yq(e.finishedAt),...yK},CommandRunOutputChunk:{attemptNumber:e=>e.attemptNumber??e.attempt?.attempt??1,createdAt:e=>"string"==typeof e.createdAt?e.createdAt:e.createdAt.toISOString()},Query:{commandDefinitions:(e,{includeArchived:t},A)=>(y$(A),B.listDefinitions(t)),commandDefinition:(e,{id:t},A)=>(y$(A),B.getDefinition(t)),commandRuns:(e,t,A)=>(y$(A),B.listRuns(t)),commandRun:(e,{id:t},A)=>(y$(A),B.getRun(t)),commandRunOutput:(e,t,A)=>(y$(A),B.listOutput(t.runId,t.afterAttempt,t.afterSequence,t.first)),eligibleCommandsForAgent:(e,{agentId:t},A)=>(y$(A),B.eligibleForAgent(t)),eligibleCommandsForWorktree:(e,{worktreeId:t},A)=>(y$(A),B.eligibleForWorktree(t))},Mutation:{createCommandDefinition:(e,{input:t},A)=>(y$(A),B.createDefinition(t)),updateCommandDefinition:(e,{id:t,input:A},r)=>(y$(r),B.updateDefinition(t,A)),archiveCommandDefinition:(e,t,A)=>(y$(A),B.archiveDefinition(t.id,t.archived)),startCommandRun:(e,{input:t},A)=>(y$(A),B.startRun(t)),startCustomCommandRun:(e,{input:t},A)=>(y$(A),B.startCustomRun(t)),terminateCommandRun:(e,{id:t},A)=>(y$(A),B.terminateRun(t)),rerunCommandRun:(e,{id:t},A)=>(y$(A),B.rerun(t)),archiveCommandRuns:(e,t,A)=>(y$(A),B.archiveRuns(t.ids,t.archived)),deleteCommandRuns:(e,{ids:t},A)=>(y$(A),B.deleteRuns(t)),appendCommandRunOutput:(e,t,A)=>B.appendOutput(function(e){if(!e.agentId)throw Error("Agent authentication is required");return e.agentId}(A),t.jobId,t.attemptId,t.chunks)},Subscription:{commandsChanged:{subscribe:(e,t,A)=>(y$(A),af.iterate(aM))},commandRunsChanged:{subscribe:(e,t,A)=>(y$(A),af.iterate(aO))},commandRunChanged:{subscribe:(e,{runId:t},A)=>(y$(A),af.iterate(aF(t))),resolve:e=>B.getRun(e.commandRunChanged.id)},commandRunOutputAdded:{subscribe:(e,{runId:t},A)=>(y$(A),af.iterate(aU(t)))}}},{Query:{diskSpaceSettings:(e,t,A)=>(yW(A),S.settings()),diskSpaceOverview:(e,t,A)=>(yW(A),S.overview()),agentDiskSpace:(e,{agentId:t},A)=>(yW(A),S.agentView(t)),sidebarStatus:(e,t,A)=>(yW(A),D.status()),agentDiskSpaceConfiguration:(e,t,A)=>S.configuration(yz(A))},Mutation:{updateDiskSpaceSettings:(e,{input:t},A)=>(yW(A),S.updateSettings(t)),setAgentDiskSpaceMonitoring:(e,{agentId:t,enabled:A},r)=>(yW(r),S.setMonitoring(t,A)),setAgentDiskSpacePressureMode:(e,{agentId:t,enabled:A},r)=>(yW(r),S.setManualPressureMode(t,A)),reportAgentDiskSpace:(e,{input:t},A)=>S.report(yz(A),t).then(()=>!0)},Subscription:{diskSpaceChanged:{subscribe:(e,t,A)=>(yW(A),S.subscribe()),resolve:e=>e.diskSpaceChanged},sidebarStatusChanged:{subscribe:(e,t,A)=>(yW(A),D.subscribe()),resolve:()=>!0}}}]),(0,As.buildSubgraphSchema)({typeDefs:yZ,resolvers:eC}));let eQ="true"===process.env.APOLLO_SANDBOX;this.server=new At({schema:this.schema,introspection:eQ,plugins:eQ?[(0,Aa.ApolloServerPluginLandingPageLocalDefault)({footer:!1})]:[(0,Aa.ApolloServerPluginLandingPageProductionDefault)({footer:!1})]})}async createContext(e=new Headers){let t;if(await this.initializeServer(),!this.services)throw Error("GraphQL services not initialized");let A=edG(e),r=await this.services.agentControlService.authenticate((t=A.get("authorization"),!t?.startsWith("Bearer ")?null:t.slice(7).trim()||null));return{prismaService:this.services.prismaService,agentControlService:this.services.agentControlService,agentId:r,ipAddress:A.get("x-forwarded-for")?.split(",")[0]?.trim()||null,requestOrigin:function(e,t=process.env){let A=t.PUBLIC_BASE_URL?.trim();if(A)try{let e=new URL(A);if("http:"===e.protocol||"https:"===e.protocol)return{origin:e.origin,secure:"https:"===e.protocol,loopback:ed_(e.hostname),source:"env"}}catch{}let r=edH(e,"x-forwarded-proto"),i=edH(e,"x-forwarded-host"),n=edH(e,"host");if(r&&(i??n)){let e=edL(`${r}:`,i??n,"forwarded");if(e)return e}if(i){let e=edL("http:",i,"forwarded");if(e)return e}return n?edL("http:",n,"host"):null}(A)?.origin??null}}async getSchema(){if(await this.initializeServer(),!this.schema)throw Error("GraphQL schema not properly initialized");return this.schema}async getServer(){if(await this.initializeServer(),!this.server)throw Error("GraphQL server not properly initialized");return this.server}},edJ=globalThis;async function edY(){if(edJ.agentWebSocketServer)return;if(edJ.agentWebSocketStartPromise)return edJ.agentWebSocketStartPromise;let e=function(e){let t=Number(e?.trim()||"3091");if(!Number.isInteger(t)||t<1||t>65535)throw Error(`Invalid AGENT_WS_PORT: ${e}`);return t}(process.env.AGENT_WS_PORT),t=process.env.AGENT_WS_HOSTNAME??process.env.HOSTNAME??"127.0.0.1",A=(async()=>{let A=await edP.getSchema(),r=new k.default({host:t,port:e,path:"/graphql"}),i=function(e,t,A=12e3){let r=function(e){let{schema:t,context:A,roots:r,validate:i,execute:n,subscribe:a,connectionInitWaitTimeout:s=3e3,onConnect:o,onDisconnect:l,onClose:c,onSubscribe:p,onOperation:g,onNext:b,onError:v,onComplete:k,jsonMessageReviver:R,jsonMessageReplacer:x}=e;return{opened(e,N){let T={connectionInitReceived:!1,acknowledged:!1,subscriptions:{},extra:N};if(e.protocol!==h)return e.close(E.SubprotocolNotAcceptable,"Subprotocol not acceptable"),async(e,t)=>{await c?.(T,e,t)};let M=s>0&&isFinite(s)?setTimeout(()=>{T.connectionInitReceived||e.close(E.ConnectionInitialisationTimeout,"Connection initialisation timeout")},s):null;return e.onMessage(async function(s){var l,c;let h;try{h=f("string"==typeof s?JSON.parse(s,R):s)}catch(t){return e.close(E.BadRequest,"Invalid message received")}switch(h.type){case I.ConnectionInit:{if(T.connectionInitReceived)return e.close(E.TooManyInitialisationRequests,"Too many initialisation requests");T.connectionInitReceived=!0,u(h.payload)&&(T.connectionParams=h.payload);let t=await o?.(T);if(!1===t)return e.close(E.Forbidden,"Forbidden");T.acknowledged=!0,await e.send(m(u(t)?{type:I.ConnectionAck,payload:t}:{type:I.ConnectionAck},x));return}case I.Ping:if(e.onPing)return await e.onPing(h.payload);await e.send(m(h.payload?{type:I.Pong,payload:h.payload}:{type:I.Pong}));return;case I.Pong:return await e.onPong?.(h.payload);case I.Subscribe:{if(!T.acknowledged)return e.close(E.Unauthorized,"Unauthorized");let{id:s,payload:o}=h;if(s in T.subscriptions)return e.close(E.SubscriberAlreadyExists,`Subscriber for ${s} already exists`);T.subscriptions[s]=null;let u=async(t,{id:A,payload:r},i)=>{let{errors:n,...a}=t,s=await b?.(T,A,r,i,t);await e.send(m({id:A,type:I.Next,payload:s||{...a,...n?{errors:n.map(e=>e.toJSON())}:{}}},x))},f=async(t,{id:A,payload:r})=>{let i=await v?.(T,A,r,t);await e.send(m({id:A,type:I.Error,payload:i||t.map(e=>e.toJSON())},x))},R=async(t,{id:A,payload:r})=>{await k?.(T,A,r),t&&await e.send(m({id:A,type:I.Complete},x))};try{let e,E,I=await p?.(T,h.id,h.payload);if(I){if(c=I,Array.isArray(c)&&c.length>0&&c.every(e=>e instanceof w.GraphQLError))return s in T.subscriptions?await f(I,h):void 0;if(Array.isArray(I))throw Error("Invalid return value from onSubscribe hook, expected an array of GraphQLError objects");e=I}else{if(!t)throw Error("The GraphQL schema is not provided");let A={operationName:o.operationName,document:(0,C.parse)(o.query),variableValues:o.variables};e={...A,schema:"function"==typeof t?await t(T,s,o,A):t};let r=(i??y.validate)(e.schema,e.document);if(r.length>0)return s in T.subscriptions?await f(r,h):void 0}let m=(0,Q.getOperationAST)(e.document,e.operationName);if(!m)return s in T.subscriptions?await f([new w.GraphQLError("Unable to identify operation")],h):void 0;"rootValue"in e||(e.rootValue=r?.[m.operation]),"contextValue"in e||(e.contextValue="function"==typeof A?await A(T,s,o,e):A),E="subscription"===m.operation?await (a??B.subscribe)(e):await (n??S.execute)(e);let b=await g?.(T,s,o,e,E);if(b&&(E=b),l=E,"function"==typeof Object(l)[Symbol.asyncIterator])if(s in T.subscriptions){T.subscriptions[s]=E;try{for await(let t of E)await u(t,h,e)}catch(t){let e=t instanceof Error?t:Error(String(t));await f([D.versionInfo.major>=17?new w.GraphQLError(e.message,{cause:e}):D.versionInfo.major>=16?new w.GraphQLError(e.message,{originalError:e}):new w.GraphQLError(e.message,null,null,null,null,e)],h),delete T.subscriptions[s]}}else d(E)&&E.return(void 0);else s in T.subscriptions&&await u(E,h,e);await R(s in T.subscriptions,h)}finally{delete T.subscriptions[s]}return}case I.Complete:{let e=T.subscriptions[h.id];delete T.subscriptions[h.id],d(e)&&await e.return(void 0);return}default:throw Error(`Unexpected message of type ${h.type} received`)}}),async(e,t)=>{M&&clearTimeout(M);let A={...T.subscriptions};T.subscriptions={},await Promise.all(Object.values(A).filter(d).map(e=>e.return(void 0))),T.acknowledged&&await l?.(T,e,t),await c?.(T,e,t)}}}}(e);return t.options.handleProtocols=b,t.once("error",e=>{console.error("Internal error emitted on the WebSocket server. Please check your implementation.",e);let A=null;for(let e of t.clients)try{e.close(E.InternalServerError,"Internal server error")}catch(e){A=A??e}if(A)throw A}),t.on("connection",(e,t)=>{e.once("error",t=>{console.error("Internal error emitted on a WebSocket socket. Please check your implementation.",t),e.close(E.InternalServerError,"Internal server error")});let i=null,n=A>0&&isFinite(A)?setInterval(()=>{e.readyState===e.OPEN&&(i=setTimeout(()=>{e.terminate()},A),e.once("pong",()=>{i&&(clearTimeout(i),i=null)}),e.ping())},A):null,a=r.opened({protocol:e.protocol,send:t=>new Promise((A,r)=>{if(e.readyState!==e.OPEN)return A();e.send(t,e=>e?r(e):A())}),close:(t,A)=>e.close(t,A),onMessage:t=>e.on("message",async A=>{try{await t(String(A))}catch(t){console.error("Internal error occurred during message handling. Please check your implementation.",t),e.close(E.InternalServerError,"Internal server error")}})},{socket:e,request:t});e.once("close",(e,t)=>{i&&clearTimeout(i),n&&clearInterval(n),a(e,String(t))})}),{dispose:async()=>{for(let e of t.clients)e.close(1001,"Going away");t.removeAllListeners(),await new Promise((e,A)=>{t.close(t=>t?A(t):e())})}}}({schema:A,context:async e=>{let t=edG(e.extra.request.headers),A=e.extra.request.socket.remoteAddress;!t.has("x-forwarded-for")&&A&&t.set("x-forwarded-for",A);let r=function(e){if(!e||"object"!=typeof e)return null;let t=e.authorization??e.Authorization;return"string"==typeof t?t:null}(e.connectionParams);return r&&t.set("authorization",r),edP.createContext(t)}},r);try{await new Promise((e,t)=>{r.once("listening",e),r.once("error",t)})}catch(e){throw await i.dispose(),e}edJ.agentWebSocketServer=r,r.on("error",e=>{console.error("Agent GraphQL WebSocket server error:",e)}),console.log(`Agent GraphQL WebSocket listening on ws://${t}:${e}/graphql`)})();edJ.agentWebSocketStartPromise=A;try{await A}finally{edJ.agentWebSocketStartPromise=void 0}}e.s(["startAgentWebSocketServer",0,edY],544112)}];
|
|
6134
6134
|
|
|
6135
6135
|
//# sourceMappingURL=_1hmzed-._.js.map
|