@ai-development-environment/server 0.0.137 → 0.0.138
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/build-manifest.json +3 -3
- package/standalone/.next/prerender-manifest.json +3 -3
- package/standalone/.next/server/app/[locale]/(auth)/register/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(auth)/register/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(auth)/sign-in/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(auth)/sign-in/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/costs/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/costs/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/drafts/new/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/drafts/new/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/drafts/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/drafts/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/plans/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/plans/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/plans/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/plans/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/sessions/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/sessions/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/sessions/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/sessions/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/[skillId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/groups/[groupId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/groups/[groupId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/groups/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/groups/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/sync/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/skills/sync/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/usage/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/ai/usage/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/action-center/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/action-center/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/agents/[id]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/agents/[id]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/agents/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/apps/[appId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/apps/[appId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/apps/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/apps/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/coverage/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/coverage/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/output/route.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/[buildId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/configurations/[configurationId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/configurations/[configurationId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/builds/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/changes/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/changes/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/[codebaseId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/[codebaseId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/repositories/[repositoryId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/codebases/repositories/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/[commandId]/edit/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/[commandId]/edit/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/new/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/new/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/runs/[runId]/output/route.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/runs/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/commands/runs/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/jobs/[jobId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/jobs/[jobId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/notifications/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/notifications/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/[workflowId]/edit/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/[workflowId]/edit/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/[workflowId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/[workflowId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/new/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/new/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/runs/[runId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/workflows/runs/[runId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/worktrees/[worktreeId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/worktrees/[worktreeId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/worktrees/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/dashboard/worktrees/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/analytics-events/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/analytics-events/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/console-logs/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/console-logs/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/[crashId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/[crashId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/dsyms/[dsymId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/dsyms/[dsymId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/dsyms/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/dsyms/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/crashes/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/push-notifications/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/push-notifications/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/[endpointId]/mocks/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/[endpointId]/mocks/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/[endpointId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/[endpointId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/breakpoints/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/breakpoints/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/history/[requestId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/history/[requestId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/history/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/history/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/new/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/new/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/storage/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/sse/storage/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/unified-events/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/debugging/unified-events/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/actions/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/actions/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/actions-cache/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/actions-cache/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/cache/entries/[id]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/cache/entries/[id]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/cache/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/cache/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/comments/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/comments/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/pull-requests/[owner]/[repository]/[number]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/pull-requests/[owner]/[repository]/[number]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/pull-requests/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/pull-requests/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/webhooks/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/github/webhooks/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/cache/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/cache/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/comments/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/comments/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/merge-requests/[projectId]/[iid]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/merge-requests/[projectId]/[iid]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/merge-requests/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/merge-requests/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/pipelines/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/pipelines/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/webhooks/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/gitlab/webhooks/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/cache/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/cache/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/cache/tickets/[issueKey]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/cache/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/tickets/[issueKey]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/tickets/[issueKey]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/tickets/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/tickets/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/webhooks/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/jira/webhooks/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/api-keys/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/api-keys/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/build-data/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/build-data/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/connected-applications/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/connected-applications/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/credentials/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/credentials/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/[id]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/[id]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/enroll/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/enroll/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/devices/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/polling/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/polling/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/prepare/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/prepare/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/provisioning-profiles/[profileId]/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/provisioning-profiles/[profileId]/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/provisioning-profiles/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/provisioning-profiles/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/settings/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/settings/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/status/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/status/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/tailscale/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/tailscale/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/tools/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/tools/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/users/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(dashboard)/system/users/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(mcp)/mcp/consent/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(mcp)/mcp/consent/page_client-reference-manifest.js +1 -1
- package/standalone/.next/server/app/[locale]/(mcp)/mcp/sign-in/page.js.nft.json +1 -1
- package/standalone/.next/server/app/[locale]/(mcp)/mcp/sign-in/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/_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/_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/_not-found/__PAGE__.segment.rsc +1 -1
- package/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/complete/route.js +1 -1
- package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/complete/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/download/route.js +1 -1
- package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/download/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/route.js +1 -1
- package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/upload/route.js +1 -1
- package/standalone/.next/server/app/api/agent/build-artifact-transfers/[transferId]/upload/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/agent/dsyms/[dsymId]/dwarf/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/agent/run-attachments/[attachmentId]/route.js +1 -1
- package/standalone/.next/server/app/api/agent/run-attachments/[attachmentId]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/build-artifact-uploads/[uploadId]/route.js +1 -1
- package/standalone/.next/server/app/api/build-artifact-uploads/[uploadId]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/codebases/by-path/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/codebases/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/crash-files/dsyms/[dsymId]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/crash-files/reports/[crashId]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/dsyms/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/dsyms/uploads/[uploadId]/complete/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/dsyms/uploads/[uploadId]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/dsyms/uploads/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/graphql/route.js +1 -1
- package/standalone/.next/server/app/api/graphql/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/ios/apns-devices/route.js +2 -2
- package/standalone/.next/server/app/api/ios/apns-devices/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/ios/devices/export.tsv/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/ios/enrollment/start/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/ios/notification-devices/route.js +2 -2
- package/standalone/.next/server/app/api/ios/notification-devices/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/openapi.json/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/builds/[buildId]/artifacts/[artifactId]/manifest.plist/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/builds/[buildId]/artifacts/[artifactId]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/crashes/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/github/webhook/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/gitlab/webhook/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/ios/enrollment-profile/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/ios/profile-response/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/jira/webhook/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/public/sse/[token]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/run-attachments/[attachmentId]/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/run-attachments/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/sse/history/export/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/telemetry/analytics-events/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/telemetry/console-logs/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/telemetry/export/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/tools/call/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/tools/catalog/route.js.nft.json +1 -1
- package/standalone/.next/server/app/api/worktrees/[worktreeId]/diff-image/route.js.nft.json +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__013jjy8_tp5xo._.js → [root-of-the-server]__00iwkfurpc0x0._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__06f1gskg4t5ra._.js → [root-of-the-server]__085kh_xzq74pi._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0ls_xfg-o69ws._.js → [root-of-the-server]__0b95wr93hpccm._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0dy3_w5i5avqu._.js → [root-of-the-server]__0dqcl3ne9jy6j._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0ihief9wd15j-._.js → [root-of-the-server]__0ernvc_drsyur._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0nazqxkz69cb-._.js → [root-of-the-server]__0gdpss1ozbpj6._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0fdv7ezffrnb8._.js → [root-of-the-server]__0n0aoxk6qal2q._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__103-o8iatm04o._.js → [root-of-the-server]__0pb0of35lhv4r._.js} +2 -2
- package/standalone/.next/server/chunks/{[root-of-the-server]__0jo85vtp06p8k._.js → [root-of-the-server]__0pb4bln2irwf1._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0mf1u6efc98j1._.js → [root-of-the-server]__0q_f0b_y6m06s._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0867t3wdit4oo._.js → [root-of-the-server]__0r5hav-f6hg4y._.js} +2 -2
- package/standalone/.next/server/chunks/{[root-of-the-server]__0te36hr8zjt5a._.js → [root-of-the-server]__0rfsymbgl5zmz._.js} +2 -2
- package/standalone/.next/server/chunks/{[root-of-the-server]__0mjmd0-g6img6._.js → [root-of-the-server]__0twikyj29lh-8._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0jqrn7hnkezim._.js → [root-of-the-server]__0uj03p6vvvoox._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__02w866s8cv03o._.js → [root-of-the-server]__0vqqb799ovs3f._.js} +2 -2
- package/standalone/.next/server/chunks/{[root-of-the-server]__0o0xdssylq9hn._.js → [root-of-the-server]__0wpet49k-mtfs._.js} +2 -2
- package/standalone/.next/server/chunks/[root-of-the-server]__0zdbzx4i-waj1._.js +3 -0
- package/standalone/.next/server/chunks/{[root-of-the-server]__064yhuqdlomcc._.js → [root-of-the-server]__0zo4-ogstcigk._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__02inw6-w863p6._.js → [root-of-the-server]__1-80xb-l8bnx8._.js} +1 -1
- package/standalone/.next/server/chunks/[root-of-the-server]__10hjc82wl2rrg._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__13a6nglsddnmp._.js +3 -0
- package/standalone/.next/server/chunks/{[root-of-the-server]__016k_dvgtq4np._.js → [root-of-the-server]__15rnf_muhindu._.js} +2 -2
- package/standalone/.next/server/chunks/{[root-of-the-server]__01uprimny6xf6._.js → [root-of-the-server]__17e3j_fplgxlt._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0lfp2twrecdmg._.js → [root-of-the-server]__18549u75hk0zc._.js} +1 -1
- package/standalone/.next/server/chunks/{[root-of-the-server]__0q00u15k45x_y._.js → [root-of-the-server]__1aktlm6bxadr9._.js} +1 -1
- package/standalone/.next/server/chunks/[root-of-the-server]__1cdu86kwjpucp._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1fyo1xks_hnke._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1h19tyu2_us3g._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1jv6n33tz33mq._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1nz79np-vsmai._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1p7-v5i6_c02i._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1qkmdb5cuuvm2._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1w7ym0rrtb0i-._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__1ymepgwm4cf20._.js +3 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__20in07t-hzagn._.js +3 -0
- package/standalone/.next/server/chunks/_00m3rl49dioc5._.js +2 -2
- package/standalone/.next/server/chunks/_01xc_0zvoyeyx._.js +34 -6
- package/standalone/.next/server/chunks/_02hp9azf0wdup._.js +1 -1
- package/standalone/.next/server/chunks/_093bw72t0qhum._.js +1 -1
- package/standalone/.next/server/chunks/_0d-5v8n_htaud._.js +1 -1
- package/standalone/.next/server/chunks/_0d7kp9zewgzo1._.js +2 -2
- package/standalone/.next/server/chunks/_0dudkod891pw5._.js +3 -3
- package/standalone/.next/server/chunks/_0j7luifqpmd6_._.js +2 -2
- package/standalone/.next/server/chunks/_0locehugaxjku._.js +2 -2
- package/standalone/.next/server/chunks/_0w3t6yq0vzl4e._.js +1 -1
- package/standalone/.next/server/chunks/_0y5_6jpmf7x6s._.js +29 -1
- package/standalone/.next/server/chunks/_0zco7_ov6mcxo._.js +2 -2
- package/standalone/.next/server/chunks/_115xin0kz2fip._.js +3 -3
- package/standalone/.next/server/chunks/_12hy44_5ttvdf._.js +1 -1
- package/standalone/.next/server/chunks/_16ok4m6i7ixom._.js +1 -1
- package/standalone/.next/server/chunks/_19p9fduxrv2k5._.js +1 -1
- package/standalone/.next/server/chunks/_1_s18hw5f5luk._.js +1 -1
- package/standalone/.next/server/chunks/_1f-fkpn7r9h91._.js +3 -3
- package/standalone/.next/server/chunks/_1l_e477qf2_nl._.js +2 -2
- package/standalone/.next/server/chunks/_1m_66q0249ksj._.js +34 -6
- package/standalone/.next/server/chunks/_1tf-vrjf16ebm._.js +1 -1
- package/standalone/.next/server/chunks/_1uio0t8zcf1gc._.js +1 -1
- package/standalone/.next/server/chunks/_1wrauglm0po8g._.js +2 -2
- package/standalone/.next/server/chunks/_20mbq9d_-vcjz._.js +1 -1
- package/standalone/.next/server/chunks/src_services_0shipcub2yhy6._.js +1 -1
- package/standalone/.next/server/chunks/ssr/_0-efhkzh6ytuc._.js +4 -1
- package/standalone/.next/server/chunks/ssr/_01tmqlwi5urdh._.js +4 -1
- package/standalone/.next/server/chunks/ssr/_05hrnr_dqieci._.js +4 -1
- package/standalone/.next/server/chunks/ssr/_09frr_x9sj064._.js +5 -5
- package/standalone/.next/server/chunks/ssr/_0b_41u6xr2bpb._.js +4 -1
- package/standalone/.next/server/chunks/ssr/_0wpoapzcyfgyq._.js +5 -5
- package/standalone/.next/server/chunks/ssr/_0x-yk4-j0jzr_._.js +5 -5
- package/standalone/.next/server/chunks/ssr/_10ljfb0azxzug._.js +4 -1
- package/standalone/.next/server/chunks/ssr/_18-1310mrai6k._.js +1 -1
- package/standalone/.next/server/chunks/ssr/messages_de_json_[json]_cjs_1uig1ud36h5oz._.js +1 -1
- package/standalone/.next/server/chunks/ssr/messages_en_json_[json]_cjs_206072-e4clp3._.js +1 -1
- package/standalone/.next/server/chunks/ssr/messages_es_json_[json]_cjs_082yukd_h99n8._.js +1 -1
- package/standalone/.next/server/chunks/ssr/messages_fr_json_[json]_cjs_0j6-w0ix_w_ac._.js +1 -1
- package/standalone/.next/server/chunks/ssr/src_components_github_merge-pull-request-button_tsx_0ie9278wjani8._.js +4 -4
- package/standalone/.next/server/chunks/ssr/src_components_runs_run-detail-page_tsx_0eje87-gx_hru._.js +1 -1
- package/standalone/.next/server/chunks/ssr/src_components_telemetry_telemetry-page_tsx_0yzdpy67zpdxv._.js +12 -12
- 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/preview-props.json +3 -3
- 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/0ntk3pefienee.js +74 -0
- package/standalone/.next/static/chunks/{3_jy_qgwcgmn3.js → 14kti20ptdk3_.js} +1 -1
- package/standalone/.next/static/chunks/19qk_mg79rhyl.css +1 -0
- package/standalone/.next/static/chunks/{3_zfruxk01zuz.js → 1e332a5q9nxel.js} +5 -2
- package/standalone/.next/static/chunks/28saicmp1_h9d.js +6 -0
- package/standalone/.next/static/chunks/{0-5ysfaxu6aan.js → 2d07_4-p-edmw.js} +8 -5
- package/standalone/.next/static/chunks/{32mx1gp4arbt_.js → 2efwkyl82sglw.js} +5 -5
- package/standalone/.next/static/chunks/{42k7pln5sl3oz.js → 2yh26beqzug_m.js} +4 -1
- package/standalone/.next/static/chunks/{2r8eetg_rh89t.js → 2za-zornp6w1i.js} +7 -4
- package/standalone/.next/static/chunks/{0uyjb26ic9ght.js → 3_q7pq1wb2d40.js} +8 -5
- package/standalone/.next/static/chunks/{0j0ja7mw0m3um.js → 3kdlr1xpqonpk.js} +4 -4
- package/standalone/packages/agent-contract/src/runs.test.ts +85 -1
- package/standalone/packages/agent-contract/src/runs.ts +71 -0
- package/standalone/.next/server/chunks/[root-of-the-server]__0yel_6ygv-b1q._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__11maut7kzgbir._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__13gc7j8v7vuh0._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1a8-wn63eojbf._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1ezzodrqye_k8._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1iz-2u-1z1_wl._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1j1n2lzndr33r._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1muq_0k53s3ch._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1p4d5mk5s-hn3._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1qlb8l11-wp5b._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1qpqa-yffw6l1._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1r8sh0sbv66af._.js +0 -3
- package/standalone/.next/server/chunks/[root-of-the-server]__1rvzmcinwhc9f._.js +0 -3
- package/standalone/.next/static/chunks/0nab6cwtymfd9.js +0 -6
- package/standalone/.next/static/chunks/2sxkr-ertr4d-.js +0 -74
- package/standalone/.next/static/chunks/3x93y46q6oe51.css +0 -1
- /package/standalone/.next/static/{QCl5bKQ9cBiF-g9fxs6IK → _Jso-9p3y6xgFDkMzfmcW}/_buildManifest.js +0 -0
- /package/standalone/.next/static/{QCl5bKQ9cBiF-g9fxs6IK → _Jso-9p3y6xgFDkMzfmcW}/_clientMiddlewareManifest.js +0 -0
- /package/standalone/.next/static/{QCl5bKQ9cBiF-g9fxs6IK → _Jso-9p3y6xgFDkMzfmcW}/_ssgManifest.js +0 -0
|
@@ -362,7 +362,7 @@ Use bugfix/ for bugs and feature/ otherwise. Keep the ticket key and add a conci
|
|
|
362
362
|
SUM(CASE WHEN reason <> 'ACTIVE' THEN 1 ELSE 0 END),
|
|
363
363
|
0
|
|
364
364
|
) AS needsAttentionCount
|
|
365
|
-
FROM visible WHERE 1 = 1 ${n}`,r,o,...i??[])]),d=c[0],u=s(d?.totalCount),g=s(d?.needsAttentionCount);return{rows:l,totalCount:u,needsAttentionCount:g,activeCount:u-g}}let l=["PLAN","SESSION","BUILD","WORKFLOW","PULL_REQUEST","MERGE_REQUEST"],c={questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}},d={codebase:{select:{agent:{select:{baseRepoDirectory:!0}}}}};function u(A){return A.toISOString()}function g(A){try{return JSON.parse(A)}catch{return{}}}function h(A,e,t,r){return[A,e,r??0,t.toISOString()].join(":")}function C(A){return`BUILD:${A}:UNRUN_BUILD`}function p(A,e){return{id:A.id,sourceKind:e,error:A.error??null,createdAt:u(A.createdAt),questions:A.questions.map(({fieldJson:A,...e})=>({...e,field:A?g(A):null}))}}function I(A){let e=(0,n.x)(g(A),"worktree.id");return"string"==typeof e&&e?e:null}A.s(["f",0,class{requests;constructor(A){this.requests=A}settings(){return(0,e.k)()}async saveSettings(A){if(!Number.isInteger(A.maximumRequestAgeDays)||A.maximumRequestAgeDays<0)throw Error("Maximum request age must be a non-negative integer");let e=await (0,r.U)(),t={...A,hideRunningPipelineRequestsInSidebar:A.hideRunningPipelineRequestsInSidebar??void 0,hideUnapprovedRequestsInSidebar:A.hideUnapprovedRequestsInSidebar??void 0,confirmClearAllNotifications:A.confirmClearAllNotifications??void 0,showIntegrationCountsInSidebar:A.showIntegrationCountsInSidebar??void 0,showWorktreeCountsInSidebar:A.showWorktreeCountsInSidebar??void 0},n=await e.actionCenterSettings.upsert({where:{id:"default"},create:{id:"default",...t},update:t});return i._H.publish(i.FJ,{actionCenterSettingsChanged:n}),i._H.publish(i.fb,{sidebarStatusChanged:!0}),i._H.publish(i.Wy,{actionCenterChanged:!0}),this.requests?.refresh().catch(()=>void 0),n}async refresh(A=!1){return!this.requests||this.requests.refresh(void 0,A)}async list(A={}){var e,t,i,n,a;let s=await (0,r.U)(),l=Math.max(1,Math.min(A.first??50,200)),m=JSON.stringify([A.surface??"FULL",[...A.resourceKinds??[]].sort()]),f=await o(s,{first:l,surface:A.surface,resourceKinds:A.resourceKinds,cursor:function(A,e){if(!A)return null;try{let t=JSON.parse(Buffer.from(A,"base64url").toString("utf8"));if("number"!=typeof t.priority||"string"!=typeof t.updatedAt||"string"!=typeof t.key)return null;if(t.scope&&t.scope!==e)throw Error("Action Center cursor belongs to another surface or filter");return t}catch{return null}}(A.after,m)}),E=f.rows.slice(0,l),w=E.flatMap(A=>"PLAN"===A.resourceKind||"SESSION"===A.resourceKind?[A.resourceId]:[]),Q=E.flatMap(A=>"WORKFLOW"===A.resourceKind?[A.resourceId]:[]),y=E.flatMap(A=>"BUILD"===A.resourceKind?[A.resourceId]:[]),[B,D,k]=await Promise.all([w.length?s.agentRun.findMany({where:{id:{in:w}},take:w.length,include:{worktree:{include:d},questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:c}}}):Promise.resolve([]),Q.length?s.workflowRun.findMany({where:{id:{in:Q}},take:Q.length,include:{workflow:!0,attempts:{where:{supersededAt:null},include:{questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:c}}}}}):Promise.resolve([]),y.length?s.build.findMany({where:{id:{in:y}},take:y.length,include:{worktree:{include:d},codebase:{include:{repository:!0}},configuration:!0}}):Promise.resolve([])]),b=[...new Set(D.flatMap(A=>I(A.sessionDataJson)?[I(A.sessionDataJson)]:[]))],S=new Map((b.length?await s.worktree.findMany({where:{id:{in:b}},select:{id:!0,folder:!0,branch:!0,highlightColor:!0,...d}}):[]).map(A=>[A.id,A])),R=new Map(E.map(A=>[A.key,A.reason])),M=[],O=E.filter(A=>"PULL_REQUEST"===A.resourceKind||"MERGE_REQUEST"===A.resourceKind).map(A=>A.resourceId);if(O.length){let A=(await s.actionCenterRequest.findMany({where:{id:{in:O}}})).map(A=>({record:A,data:JSON.parse(A.payloadJson)})),e=A.flatMap(({data:A})=>A.worktreeId?[A.worktreeId]:[]),t=e.length?await s.worktree.findMany({where:{id:{in:e}},include:d}):[];for(let{record:e,data:r}of A){let A=r.request;this.requests?.getWarnings().some(e=>e.startsWith(A.provider))&&(A.canMerge=!1,A.mergeBlockedReason="Provider refresh is incomplete. Open the request to recheck readiness.");let i="GITHUB"===A.provider?`/github/pull-requests/${A.repositoryName.split("/").map(encodeURIComponent).join("/")}/${A.number}`:`/gitlab/merge-requests/${encodeURIComponent(A.repositoryId)}/${A.number}`;M.push({key:`${e.resourceKind}:${e.id}`,resourceKind:e.resourceKind,reason:e.reason,resourceId:e.id,href:i,displayNumber:A.number,label:r.label,summary:`${A.repositoryName} \xb7 ${A.branch}`,status:A.draft?"DRAFT":"OPEN",phase:null,error:null,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString(),worktree:t.find(A=>A.id===r.worktreeId)??null,questionBatches:[],buildRun:null,failureFingerprint:null,dismissalFingerprint:null,request:A})}}for(let A of B){let r=`${A.kind}:${A.id}`,i=R.get(r);if(!i)continue;let n=A.questionBatches.map(A=>p(A,null)),a="FAILED"===i?h(A.kind,A.id,A.finishedAt??A.updatedAt):null;M.push({key:r,resourceKind:A.kind,reason:i,resourceId:A.id,href:(e=A.kind,t=A.id,`/ai/${"PLAN"===e?"plans":"sessions"}/${encodeURIComponent(t)}`),displayNumber:A.displayNumber,label:function(A,e=220){let t=A.replace(/\s+/g," ").trim();return t.length>e?`${t.slice(0,e-1)}…`:t}(A.initialPrompt),summary:[A.repositoryName,A.branch].filter(Boolean).join(" · ")||null,status:A.status,phase:A.phase,error:A.error,createdAt:u(A.createdAt),updatedAt:u(A.updatedAt),worktree:A.worktree,questionBatches:"QUESTION"===i?n:[],buildRun:null,failureFingerprint:a,dismissalFingerprint:null})}for(let A of D){let e=`WORKFLOW:${A.id}`,t=R.get(e);if(!t)continue;let r=I(A.sessionDataJson),n=A.attempts.flatMap(A=>A.questionBatches.map(e=>p(e,A.kind))),a="FAILED"===t?h("WORKFLOW",A.id,A.finishedAt??A.updatedAt,A.generation):null;M.push({key:e,resourceKind:"WORKFLOW",reason:t,resourceId:A.id,href:(i=A.id,`/dashboard/workflows/runs/${encodeURIComponent(i)}`),displayNumber:A.displayNumber,label:A.workflow.name,summary:A.triggerSubjectKey||null,status:A.status,phase:A.phase,error:A.blockedReason??A.error,createdAt:u(A.createdAt),updatedAt:u(A.updatedAt),worktree:r?S.get(r)??null:null,questionBatches:"QUESTION"===t?n:[],buildRun:null,failureFingerprint:a,dismissalFingerprint:null})}for(let A of k){let e=`BUILD:${A.id}`,t=R.get(e);if(!t)continue;let r="FAILED"===t?h("BUILD",A.id,A.finishedAt??A.updatedAt):null,i=A.codebase?.repository.name??null,a=A.configuration?.name??null;M.push({key:e,resourceKind:"BUILD",reason:t,resourceId:A.id,href:(n=A.id,`/dashboard/builds/${encodeURIComponent(n)}`),displayNumber:null,label:a??i??"iOS build",summary:[i,A.worktree?.branch].filter(Boolean).join(" · ")||null,status:A.status,phase:null,error:A.error,createdAt:u(A.createdAt),updatedAt:u(A.updatedAt),worktree:A.worktree,questionBatches:[],buildRun:"UNRUN_BUILD"===t?{buildId:A.id,destinationType:A.destinationType,preferredDestination:g(A.destinationJson)}:null,failureFingerprint:r,dismissalFingerprint:"UNRUN_BUILD"===t?C(A.id):null})}let N=new Map(M.map(A=>[A.key,A])),H=E.flatMap(A=>N.has(A.key)?[N.get(A.key)]:[]);return{items:H,warnings:this.requests?.getWarnings()??[],nextCursor:f.rows.length>l&&H.length?(a=H[H.length-1],Buffer.from(JSON.stringify({priority:function(A){switch(A){case"QUESTION":return 0;case"BLOCKED":return 1;case"FAILED":return 2;case"UNRUN_BUILD":return 3;case"REVIEW_REQUIRED":return 4;case"READY_TO_MERGE":return 5;case"ACTIVE":return 6}}(a.reason),updatedAt:a.updatedAt,key:a.key,scope:m})).toString("base64url")):null,totalCount:f.totalCount,needsAttentionCount:f.needsAttentionCount,activeCount:f.activeCount}}async acknowledge(A){let e=A.resourceKind.trim().toUpperCase();if(!l.includes(e))throw Error("Action Center resource kind is invalid");let n=await (0,r.U)(),a=null;if("PLAN"===e||"SESSION"===e){let t=await n.agentRun.findUnique({where:{id:A.resourceId},select:{id:!0,kind:!0,status:!0,finishedAt:!0,updatedAt:!0}});t?.kind===e&&"FAILED"===t.status&&(a=h(e,t.id,t.finishedAt??t.updatedAt))}else if("WORKFLOW"===e){let e=await n.workflowRun.findUnique({where:{id:A.resourceId},select:{id:!0,status:!0,generation:!0,finishedAt:!0,updatedAt:!0}});e?.status==="FAILED"&&(a=h("WORKFLOW",e.id,e.finishedAt??e.updatedAt,e.generation))}else if("BUILD"===e){let e=await n.build.findUnique({where:{id:A.resourceId},select:{id:!0,status:!0,finishedAt:!0,updatedAt:!0}});e?.status==="FAILED"&&(a=h("BUILD",e.id,e.finishedAt??e.updatedAt))}if(!a||a!==A.failureFingerprint)throw Error("Action Center failure is no longer current");return await n.actionCenterAcknowledgement.upsert({where:{resourceKind_resourceId_failureFingerprint:{resourceKind:e,resourceId:A.resourceId,failureFingerprint:a}},create:{id:(0,t.randomUUID)(),resourceKind:e,resourceId:A.resourceId,failureFingerprint:a},update:{acknowledgedAt:new Date}}),i._H.publish(i.fb,{sidebarStatusChanged:!0}),i._H.publish(i.Wy,{actionCenterChanged:!0}),!0}async dismiss(A){let e=A.resourceKind.trim().toUpperCase();if("BUILD"!==e)throw Error("Only unrun builds can be dismissed");let n=await (0,r.U)(),a=await n.build.findUnique({where:{id:A.resourceId},include:{artifacts:{select:{kind:!0}},deployments:{select:{id:!0}},worktree:{select:{id:!0,availability:!0,missingAt:!0}}}});if(!a||"SUCCEEDED"!==a.status||!a.worktree||a.worktree.missingAt||"AVAILABLE"!==a.worktree.availability||!a.artifacts.some(A=>"RUNNABLE_APP"===A.kind)||a.deployments.length>0)throw Error("Action Center item is no longer dismissible");if(a.worktreeId&&a.configurationId){let A=await n.build.findFirst({where:{worktreeId:a.worktreeId,configurationId:a.configurationId,destinationType:a.destinationType},orderBy:[{createdAt:"desc"},{id:"desc"}],select:{id:!0}});if(A?.id!==a.id)throw Error("Action Center item is no longer dismissible")}let s=C(a.id);if(s!==A.dismissalFingerprint)throw Error("Action Center dismissal is no longer current");return await n.actionCenterAcknowledgement.upsert({where:{resourceKind_resourceId_failureFingerprint:{resourceKind:e,resourceId:a.id,failureFingerprint:s}},create:{id:(0,t.randomUUID)(),resourceKind:e,resourceId:a.id,failureFingerprint:s},update:{acknowledgedAt:new Date}}),i._H.publish(i.fb,{sidebarStatusChanged:!0}),i._H.publish(i.Wy,{actionCenterChanged:!0}),!0}subscribe(){return i._H.iterate(i.Wy)}subscribeSettings(){return i._H.iterate(i.FJ)}}],161725)},800439,A=>{A.i(161725),A.s([])},118387,206135,923068,963541,904342,430361,242311,927305,530648,454228,A=>{var e=A.i(380592),t=A.i(666680),r=A.i(750227),i=A.i(742281),n=A.i(676067);let a="cli.health";function s(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function o(A,e){let t=`cli.health checks[${e}]`,r=s(A,t),i=new Set(["id","name","command","builtIn"]),n=Object.keys(r).find(A=>!i.has(A));if(n)throw Error(`Unexpected ${t} field: ${n}`);for(let A of["id","name","command"])if("string"!=typeof r[A]||0===r[A].length)throw Error(`${t}.${A} must be a non-empty string`);if("boolean"!=typeof r.builtIn)throw Error(`${t}.builtIn must be a boolean`);if(r.id.length>100)throw Error(`${t}.id is too long`);if(r.name.length>100)throw Error(`${t}.name is too long`);if(r.command.length>4096||r.command.includes("\0"))throw Error(`${t}.command is invalid`);return r}function l(A){let e=s(A,"cli.health payload"),t=Object.keys(e).find(A=>"checks"!==A);if(t)throw Error(`Unexpected cli.health payload field: ${t}`);if(!Array.isArray(e.checks))throw Error("cli.health payload.checks must be an array");if(e.checks.length>27)throw Error("cli.health supports at most 27 checks");let r=e.checks.map(o);if(new Set(r.map(A=>A.id)).size!==r.length)throw Error("cli.health check identifiers must be unique");return{checks:r}}A.s(["U",0,a,"A",0,l],206135);var c=A.i(96945);let d="ios.crash.symbolicate",u=[d];function g(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function h(A,e,t=4e3){if("string"!=typeof A||!A.trim()||A.length>t)throw Error(`${e} must be a non-empty string of at most ${t} characters`);return A}function C(A,e){return null==A?null:h(A,e,2e4)}function p(A,e,t){if(!Array.isArray(A))throw Error(`${e} must be an array`);if(A.length>t)throw Error(`${e} may hold at most ${t} entries`);return A}function I(A,e){let t=h(A,e,32);if(!/^0x[0-9a-f]+$/i.test(t))throw Error(`${e} must be a 0x hexadecimal offset`);return`0x${t.slice(2).toLowerCase()}`}function m(A){let e=A.replaceAll("-","").replace(/^<|>$/g,"").trim();if(!/^[0-9a-f]{32}$/i.test(e))throw Error(`${A} is not a binary image UUID`);return e.toUpperCase()}function f(A){let e=g(A,"crash symbolication payload"),t=p(e.dsyms,"dsyms",200).map((A,e)=>{let t=g(A,`dsyms[${e}]`),r=h(t.sha256,`dsyms[${e}].sha256`,64);if(!/^[0-9a-f]{64}$/.test(r))throw Error(`dsyms[${e}].sha256 must be a sha256 digest`);let i=t.sizeBytes;if("number"!=typeof i||!Number.isSafeInteger(i)||i<1)throw Error(`dsyms[${e}].sizeBytes must be a positive integer`);let n=h(t.downloadPath,`dsyms[${e}].downloadPath`);if(!n.startsWith("/api/agent/dsyms/"))throw Error(`dsyms[${e}].downloadPath is not an agent route`);return{dsymId:h(t.dsymId,`dsyms[${e}].dsymId`,200),sha256:r,sizeBytes:i,binaryName:function(A,e){let t=h(A,e,255);if(t.includes("/")||t.includes("\\")||".."===t)throw Error(`${e} must be a plain file name`);return t}(t.binaryName,`dsyms[${e}].binaryName`),downloadPath:n}}),r=new Set(t.map(A=>A.dsymId)),i=0,n=p(e.lookups,"lookups",200).map((A,e)=>{let t=g(A,`lookups[${e}]`),n=h(t.dsymId,`lookups[${e}].dsymId`);if(!r.has(n))throw Error(`lookups[${e}].dsymId is not listed in dsyms`);let a=h(t.arch,`lookups[${e}].arch`,32);if(!/^[a-z0-9_]+$/i.test(a))throw Error(`lookups[${e}].arch is invalid`);let s=p(t.offsets,`lookups[${e}].offsets`,1e4).map((A,t)=>I(A,`lookups[${e}].offsets[${t}]`));if((i+=s.length)>1e4)throw Error("A crash may request at most 10000 offsets");return{dsymId:n,uuid:m(h(t.uuid,`lookups[${e}].uuid`,64)),arch:a,offsets:s}});return{crashId:h(e.crashId,"crashId",200),dsyms:t,lookups:n}}A.s(["v",0,u,"e",0,d,"G",0,300,"P",0,function(A){let e=m(A);return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},"D",0,m,"K",0,f,"Z",0,function(A){let e=g(A,"crash symbolication result");return{lookups:p(e.lookups,"lookups",200).map((A,e)=>{let t=g(A,`lookups[${e}]`);return{dsymId:h(t.dsymId,`lookups[${e}].dsymId`),uuid:m(h(t.uuid,`lookups[${e}].uuid`,64)),results:p(t.results,`lookups[${e}].results`,1e4).map((A,t)=>{let r=`lookups[${e}].results[${t}]`,i=g(A,r);return{offset:I(i.offset,`${r}.offset`),frames:p(i.frames,`${r}.frames`,64).map((A,e)=>{var t;let i,n,a,s;return n=(i=g(A,t=`${r}.frames[${e}]`)).line,a=i.symbolOffset,s=(A,e)=>{if(null==A)return null;if("number"!=typeof A||!Number.isSafeInteger(A)||A<0)throw Error(`${e} must be a non-negative integer`);return A},{symbol:h(i.symbol,`${t}.symbol`,2e4),image:C(i.image,`${t}.image`),file:C(i.file,`${t}.file`),line:s(n,`${t}.line`),symbolOffset:s(a,`${t}.symbolOffset`)}})}}),error:C(t.error,`lookups[${e}].error`)}}),xcodeVersion:C(e.xcodeVersion,"xcodeVersion")}}],923068);var E=A.i(662114),w=A.i(845414);let Q=["MAIN","BASE_REPO","DERIVED_DATA"];function y(A){return A.roles.includes("DERIVED_DATA")}function B(A){return A.filter(A=>y(A))}function D(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function k(A,e){if("string"!=typeof A||!A||A.includes("\0"))throw Error(`${e} must be a non-empty string`);return A}function b(A,e){if("number"!=typeof A||!Number.isFinite(A)||A<0)throw Error(`${e} must be a non-negative finite number`);return A}A.s(["z",0,10,"k",0,40,"H",0,60,"Y",0,120,"h",0,y,"C",0,B,"x",0,function(A){let e=D(A,"disk space report"),t=k(e.observedAt,"disk space report.observedAt");if(Number.isNaN(Date.parse(t)))throw Error("disk space report.observedAt must be an ISO date");if(!Array.isArray(e.volumes)||e.volumes.length>100||!Array.isArray(e.entries)||e.entries.length>1e4||!Array.isArray(e.warnings)||e.warnings.length>1e3)throw Error("disk space report arrays are invalid");let r={observedAt:t,volumes:e.volumes.map((A,e)=>{let t=D(A,`disk space volumes[${e}]`);if(!Array.isArray(t.roles)||!Array.isArray(t.paths))throw Error(`disk space volumes[${e}] arrays are invalid`);let r=k(t.id,`disk space volumes[${e}].id`),i=t.roles.map((A,t)=>{if("string"!=typeof A||!Q.includes(A))throw Error(`disk space volumes[${e}].roles[${t}] is invalid`);return A});return{id:r,capacityId:void 0===t.capacityId?r:k(t.capacityId,`disk space volumes[${e}].capacityId`),totalBytes:b(t.totalBytes,`disk space volumes[${e}].totalBytes`),freeBytes:b(t.freeBytes,`disk space volumes[${e}].freeBytes`),roles:[...new Set(i)],paths:t.paths.map((A,t)=>k(A,`disk space volumes[${e}].paths[${t}]`))}}),entries:e.entries.map((A,e)=>{var t,r;let i=D(A,`disk space entries[${e}]`),n=i.kind;if("string"!=typeof n||!["PROJECT","PENDING","SHARED_CACHE","DEVICE_SUPPORT"].includes(n))throw Error(`disk space entries[${e}].kind is invalid`);let a=k(i.modifiedAt,`disk space entries[${e}].modifiedAt`);if(Number.isNaN(Date.parse(a)))throw Error(`disk space entries[${e}].modifiedAt must be an ISO date`);return{path:k(i.path,`disk space entries[${e}].path`),rootPath:k(i.rootPath,`disk space entries[${e}].rootPath`),name:k(i.name,`disk space entries[${e}].name`),kind:n,workspacePath:(t=i.workspacePath,r=`disk space entries[${e}].workspacePath`,null===t?null:k(t,r)),modifiedAt:a,volumeId:k(i.volumeId,`disk space entries[${e}].volumeId`)}}),warnings:e.warnings.map((A,e)=>k(A,`disk space warnings[${e}]`))};if(Date.parse(r.observedAt)>Date.now()+3e5)throw Error("disk space report.observedAt cannot be in the future");let i=new Set;for(let A of r.volumes){if(i.has(A.id))throw Error(`Duplicate disk space volume id: ${A.id}`);if(A.freeBytes>A.totalBytes)throw Error(`disk space volume ${A.id} free bytes exceed total bytes`);if(!A.roles.length||!A.paths.length)throw Error(`disk space volume ${A.id} must include roles and paths`);i.add(A.id)}let n=new Set;for(let A of r.entries){if(!i.has(A.volumeId))throw Error(`disk space entry ${A.path} references an unknown volume`);if(n.has(A.path))throw Error(`Duplicate disk space entry path: ${A.path}`);n.add(A.path)}return r}],963541);var S=A.i(591135);let R="skills.scan",M="skills.read",O="skills.apply",N=[R,M,O],H=["CURSOR","GITHUB_COPILOT","CODEX","CLAUDE","OPENCODE"],v=["CURSOR","GITHUB_COPILOT","AGENTS","CLAUDE","CODEX_LEGACY","OPENCODE"],T=RegExp("^[a-z0-9]+(?:-[a-z0-9]+)*$");function U(A){let e=(0,t.createHash)("sha256");for(let t of[...A].sort((A,e)=>A.path.localeCompare(e.path)))e.update(t.path),e.update("\0"),e.update(t.executable?"1":"0"),e.update("\0"),e.update(Buffer.from(t.contentsBase64,"base64")),e.update("\0");return e.digest("hex")}function J(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function x(A,e){if("string"!=typeof A||0===A.length)throw Error(`${e} must be a non-empty string`);return A}function _(A,e,t){let r=x(A,t);if(!e.includes(r))throw Error(`${t} is invalid`);return r}function G(A,e){let t=x(A,e);if(t.includes("\0")||t.length>4096)throw Error(`${e} is invalid`);return t}function L(A,e){let t=_(A.scope,["GLOBAL","PROJECT"],`${e}.scope`),r=null===A.folder?null:G(A.folder,`${e}.folder`);if("GLOBAL"===t!=(null===r))throw Error(`${e}.folder must be null only for global skills`);return{scope:t,rootKind:_(A.rootKind,v,`${e}.rootKind`),folder:r}}function P(A,e="skill name"){let t=x(A,e);if(t.length>64||!T.test(t))throw Error(`${e} must use 1-64 lowercase letters, numbers, and single hyphens`);return t}function j(A,e="skill package"){let t=J(A,e),r=P(t.name,`${e}.name`),i=x(t.description,`${e}.description`).trim();if(i.length>1024)throw Error(`${e}.description must be 1-1024 characters`);if(!Array.isArray(t.files)||0===t.files.length||t.files.length>500)throw Error(`${e}.files must contain 1-500 files`);let n=0,a=new Set,s=t.files.map((A,t)=>{let r=J(A,`${e}.files[${t}]`),i=function(A,e="file path"){let t=x(A,e).replaceAll("\\","/");if(t.length>512||t.startsWith("/")||t.endsWith("/")||t.split("/").some(A=>!A||"."===A||".."===A||A.includes("\0")))throw Error(`${e} must stay within the skill directory`);return t}(r.path,`${e}.files[${t}].path`);if(a.has(i))throw Error(`${e} contains duplicate path ${i}`);a.add(i);let s=x(r.contentsBase64,`${e}.files[${t}].contentsBase64`),o=Buffer.from(s,"base64").byteLength;if(o>0xa00000)throw Error(`${i} exceeds the per-file limit`);return n+=o,{path:i,contentsBase64:s,executable:!0===r.executable}});if(!a.has("SKILL.md"))throw Error(`${e} must contain SKILL.md`);if(n>0x1400000)throw Error(`${e} exceeds the package size limit`);let o=function(A){let e=A.replaceAll("\r\n","\n");if(!e.startsWith("---\n"))throw Error("SKILL.md must begin with YAML frontmatter");let t=e.indexOf("\n---",4);if(t<0)throw Error("SKILL.md frontmatter is not closed");let r=e.slice(4,t).split("\n"),i=new Map;for(let A=0;A<r.length;A+=1){let e=/^([A-Za-z][A-Za-z0-9_-]*):(?:\s*(.*))?$/.exec(r[A]??"");if(!e)continue;let t=e[1],n=e[2]??"";if("|"===n||">"===n){let e=[];for(;A+1<r.length&&/^(?:\s+|$)/.test(r[A+1]??"");)e.push((r[A+=1]??"").replace(/^\s+/,""));i.set(t,">"===n?e.join(" ").trim():e.join("\n").trim())}else i.set(t,function(A){let e=A.trim();if(e.startsWith('"')&&e.endsWith('"'))try{return JSON.parse(e)}catch{return e.slice(1,-1)}return e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1).replaceAll("''","'"):e}(n))}let n=P(i.get("name"),"SKILL.md name"),a=(i.get("description")??"").trim();if(!a||a.length>1024)throw Error("SKILL.md description must be 1-1024 characters");return{name:n,description:a}}(Buffer.from(s.find(A=>"SKILL.md"===A.path).contentsBase64,"base64").toString("utf8"));if(o.name!==r||o.description!==i)throw Error(`${e} metadata must match SKILL.md frontmatter`);let l=x(t.packageHash,`${e}.packageHash`);if(U(s)!==l)throw Error(`${e}.packageHash does not match its files`);return{name:r,description:i,packageHash:l,files:s}}function Y(A){let e=J(A,"skills.scan payload");if(!Array.isArray(e.tools)||!Array.isArray(e.targets))throw Error("skills.scan requires tools and targets arrays");return{tools:[...new Set(e.tools.map((A,e)=>_(A,H,`tools[${e}]`)))],targets:e.targets.slice(0,2e3).map((A,e)=>{var t,r;let i=J(A,`targets[${e}]`);return{codebaseId:x(i.codebaseId,`targets[${e}].codebaseId`),worktreeId:(t=i.worktreeId,r=`targets[${e}].worktreeId`,null===t?null:x(t,r)),folder:G(i.folder,`targets[${e}].folder`)}})}}function F(A){let e=J(A,"skills.read payload"),t=Y(e);if(!Array.isArray(e.requests))throw Error("skills.read requires requests");return{...t,requests:e.requests.slice(0,200).map((A,e)=>{let t=J(A,`requests[${e}]`);return{...L(t,`requests[${e}]`),skillName:P(t.skillName,`requests[${e}].skillName`)}})}}function K(A){let e=J(A,"skills.apply payload");if(!Array.isArray(e.operations))throw Error("skills.apply requires operations");return{operations:e.operations.slice(0,500).map((A,e)=>{let t=J(A,`operations[${e}]`),r=L(t,`operations[${e}]`);if("WRITE"===t.kind)return{kind:"WRITE",...r,package:j(t.package,`operations[${e}].package`),manageGitExclude:!0===t.manageGitExclude};if("DELETE"===t.kind)return{kind:"DELETE",...r,skillName:P(t.skillName,`operations[${e}].skillName`),manageGitExclude:!0===t.manageGitExclude};throw Error(`operations[${e}].kind is invalid`)})}}A.s(["a",0,H,"$",0,O,"N",0,N,"d",0,M,"G",0,R,"M",0,U,"o",0,K,"B",0,j,"c",0,F,"q",0,Y],904342);let q="runs.session.read",V=["CLAUDE","CODEX"];function z(A,e){if("string"!=typeof A||0===A.length)throw Error(`${e} must be a non-empty string`);return A}function W(A){let e=function(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}(A,"runs.session.read payload"),t=z(e.provider,"provider");if(!V.includes(t))throw Error(`Unsupported session file provider: ${t}`);let r=z(e.nativeId,"nativeId");if(/[/\\]/.test(r)||r.includes(".."))throw Error("nativeId contains invalid path characters");return{provider:t,nativeId:r,folder:z(e.folder,"folder")}}A.s(["l",0,q,"G",0,W],430361);let $="ios.signing.assets.scan",Z="ios.signing.profile.read",X="ios.signing.profile.install",AA="ios.signing.profile.delete",Ae="ios.signing.identity.import",At="ios.signing.identity.delete",Ar=[$,Z,X,AA,Ae,At];function Ai(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function An(A,e){if("string"!=typeof A||!A.trim()||A.includes("\0"))throw Error(`${e} must be a non-empty string`);return A}function Aa(A,e){return null===A?null:An(A,e)}function As(A,e){if(!Array.isArray(A))throw Error(`${e} must be an array`);return A.map((A,t)=>An(A,`${e}[${t}]`))}function Ao(A,e){if("boolean"!=typeof A)throw Error(`${e} must be a boolean`);return A}function Al(A,e){let t=Aa(A,e);if(null!==t&&!Number.isFinite(Date.parse(t)))throw Error(`${e} must be an ISO-8601 date`);return t}function Ac(A,e,t){let r=Object.keys(A).find(A=>!e.includes(A));if(r)throw Error(`Unexpected ${t} field: ${r}`)}function Ad(A){return Ac(Ai(A,"signing scan payload"),[],"signing scan payload"),{}}function Au(A){let e=Ai(A,"signing profile payload");return Ac(e,["uuid"],"signing profile payload"),{uuid:An(e.uuid,"signing profile payload.uuid")}}function Ag(A){let e=Ai(A,"signing profile install payload");Ac(e,["contentBase64"],"signing profile install payload");let t=An(e.contentBase64,"signing profile install payload.contentBase64");if(t.length>2097152)throw Error("Provisioning profile payload is too large");return{contentBase64:t}}function Ah(A){let e=Ai(A,"signing identity import payload");Ac(e,["transferId","sha256"],"signing identity import payload");let t=An(e.sha256,"signing identity import sha256");if(!/^[A-Fa-f0-9]{64}$/.test(t))throw Error("Signing identity import SHA-256 is invalid");return{transferId:An(e.transferId,"signing identity transfer ID"),sha256:t.toUpperCase()}}function AC(A){let e=Ai(A,"signing identity delete payload");Ac(e,["sha1"],"signing identity delete payload");let t=An(e.sha1,"signing identity SHA-1");if(!/^[A-Fa-f0-9]{40}$/.test(t))throw Error("Signing identity SHA-1 is invalid");return{sha1:t.toUpperCase()}}A.s(["I",0,$,"$",0,Ar,"A",0,At,"s",0,Ae,"j",0,AA,"l",0,X,"X",0,Z,"L",0,function(A){let e=Ai(A,"signing assets result");if(!Array.isArray(e.profiles)||!Array.isArray(e.certificates)||!Array.isArray(e.warnings))throw Error("Signing assets result arrays are invalid");return{profiles:e.profiles.map((A,e)=>{let t=Ai(A,`signing profiles[${e}]`),r=An(t.profileType,`signing profiles[${e}].profileType`);if(!["DEVELOPMENT","AD_HOC","ENTERPRISE","APP_STORE"].includes(r))throw Error(`signing profiles[${e}].profileType is invalid`);let i=t.deviceCount;if("number"!=typeof i||!Number.isInteger(i)||i<0)throw Error(`signing profiles[${e}].deviceCount is invalid`);return{uuid:An(t.uuid,`signing profiles[${e}].uuid`),contentHash:An(t.contentHash,`signing profiles[${e}].contentHash`),name:An(t.name,`signing profiles[${e}].name`),profileType:r,bundleId:An(t.bundleId,`signing profiles[${e}].bundleId`),teamId:Aa(t.teamId,`signing profiles[${e}].teamId`),teamName:Aa(t.teamName,`signing profiles[${e}].teamName`),platforms:As(t.platforms,`signing profiles[${e}].platforms`),deviceCount:i,deviceUdids:void 0===t.deviceUdids?[]:As(t.deviceUdids,`signing profiles[${e}].deviceUdids`),certificateSha1s:As(t.certificateSha1s,`signing profiles[${e}].certificateSha1s`),createdAt:Al(t.createdAt,`signing profiles[${e}].createdAt`),expiresAt:Al(t.expiresAt,`signing profiles[${e}].expiresAt`),expired:Ao(t.expired,`signing profiles[${e}].expired`),xcodeManaged:Ao(t.xcodeManaged,`signing profiles[${e}].xcodeManaged`)}}),certificates:e.certificates.map((A,e)=>{let t=Ai(A,`signing certificates[${e}]`);return{sha1:An(t.sha1,`signing certificates[${e}].sha1`),sha256:Aa(t.sha256,`signing certificates[${e}].sha256`),name:An(t.name,`signing certificates[${e}].name`),teamId:Aa(t.teamId,`signing certificates[${e}].teamId`),certificateType:Aa(t.certificateType,`signing certificates[${e}].certificateType`),notBefore:Al(t.notBefore,`signing certificates[${e}].notBefore`),expiresAt:Al(t.expiresAt,`signing certificates[${e}].expiresAt`),expired:Ao(t.expired,`signing certificates[${e}].expired`),hasPrivateKey:Ao(t.hasPrivateKey,`signing certificates[${e}].hasPrivateKey`)}}),warnings:As(e.warnings,"signing warnings")}},"E",0,AC,"d",0,Ah,"C",0,Ag,"n",0,Au,"t",0,Ad],242311);let Ap="workflow.terminal.run",AI="workflow.git.checkpoint",Am=[Ap,AI];function Af(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function AE(A,e,t=1e4){if("string"!=typeof A||!A.length||A.length>t)throw Error(`${e} must be a non-empty string of at most ${t} characters`);return A}function Aw(A,e){return null==A?null:AE(A,e)}function AQ(A){let e=Af(A,"workflow terminal payload"),t=AE(e.interpreter??"SHELL","interpreter");if("SHELL"!==t&&"NODE"!==t)throw Error("interpreter must be SHELL or NODE");let r=Object.fromEntries(Object.entries(Af(e.environment??{},"environment")).map(([A,e])=>{if(!/^[A-Z_][A-Z0-9_]*$/.test(A))throw Error(`Invalid environment variable name: ${A}`);return[A,AE(e,`environment.${A}`,1e5)]})),i=Array.isArray(e.credentialEnvironment)?e.credentialEnvironment:[];return{workflowRunId:AE(e.workflowRunId,"workflowRunId",200),stepAttemptId:AE(e.stepAttemptId,"stepAttemptId",200),stepId:AE(e.stepId,"stepId",200),codebaseId:AE(e.codebaseId,"codebaseId",200),worktreeId:Aw(e.worktreeId,"worktreeId"),cwd:AE(e.cwd,"cwd",1e4),script:AE(e.script,"script",1e6),interpreter:t,sessionData:Af(e.sessionData,"sessionData"),environment:r,credentialEnvironment:i.map((A,e)=>{let t=Af(A,`credentialEnvironment[${e}]`),r=Af(t.credential,`credentialEnvironment[${e}].credential`),i=AE(t.name,`credentialEnvironment[${e}].name`,200);if(!/^[A-Z_][A-Z0-9_]*$/.test(i))throw Error(`Invalid credential environment variable name: ${i}`);return{name:i,credential:{id:AE(r.id,`credentialEnvironment[${e}].credential.id`,1e3),kind:AE(r.kind,`credentialEnvironment[${e}].credential.kind`,200),ownerId:Aw(r.ownerId,`credentialEnvironment[${e}].credential.ownerId`)}}})}}function Ay(A){let e=Af(A,"workflow checkpoint payload"),t=AE(e.operation,"operation");if(!new Set(["CAPTURE","COMPARE","RESTORE"]).has(t))throw Error("checkpoint operation is invalid");let r=function(A){if(null==A)return null;let e=Af(A,"checkpoint");return{headSha:Aw(e.headSha,"checkpoint.headSha"),branch:Aw(e.branch,"checkpoint.branch"),upstreamSha:Aw(e.upstreamSha,"checkpoint.upstreamSha"),indexTree:Aw(e.indexTree,"checkpoint.indexTree"),worktreeTree:Aw(e.worktreeTree,"checkpoint.worktreeTree"),refName:Aw(e.refName,"checkpoint.refName")}}(e.checkpoint);if("CAPTURE"!==t&&!r)throw Error(`${t} requires a checkpoint`);return{operation:t,workflowRunId:AE(e.workflowRunId,"workflowRunId",200),stepAttemptId:AE(e.stepAttemptId,"stepAttemptId",200),cwd:AE(e.cwd,"cwd",1e4),kind:AE(e.kind,"kind",100),checkpoint:r,stash:!0===e.stash}}A.s(["Q",0,AI,"p",0,Am,"e",0,Ap,"P",0,Ay,"r",0,AQ],927305);let AB="tailscale.serve.inspect.v1",AD="tailscale.serve.upsert.v1",Ak="tailscale.serve.remove.v1",Ab=[AB,AD,Ak],AS=["HTTP","HTTPS","TCP","TLS_TERMINATED_TCP"],AR=["HTTP","HTTPS","HTTPS_INSECURE","TCP"],AM=["NONE","V1","V2"];function AO(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function AN(A,e,t){let r=Object.keys(A).find(A=>!e.includes(A));if(r)throw Error(`Unexpected ${t} field: ${r}`)}function AH(A,e){if("string"!=typeof A||0===A.trim().length||A.includes("\0"))throw Error(`${e} must be a non-empty string`);return A.trim()}function Av(A,e){if(!Number.isInteger(A)||A<1||A>65535)throw Error(`${e} must be an integer from 1 through 65535`);return A}function AT(A,e,t){if("string"!=typeof A||!e.includes(A))throw Error(`${t} is invalid`);return A}function AU(A){if("string"!=typeof A||A.includes("\0")||A.includes("?"))throw Error("Tailscale mount path is invalid");let e=A.trim()||"/",t=e.startsWith("/")?e:`/${e}`;return"/"===t?t:t.replace(/\/+$/,"")}function AJ(A){let e=AO(A,"Tailscale Serve route");AN(e,["protocol","listenPort","mountPath","destination","funnel","appCapabilities","proxyProtocol"],"Tailscale Serve route");let t=AT(e.protocol,AS,"Tailscale Serve protocol"),r=Av(e.listenPort,"Tailscale listen port"),i=AO(e.destination,"Tailscale Serve destination");AN(i,["protocol","port","path"],"Tailscale Serve destination");let n=AT(i.protocol,AR,"Tailscale destination protocol"),a=e.funnel;if("boolean"!=typeof a)throw Error("Tailscale Funnel must be a boolean");let s=AT(e.proxyProtocol,AM,"Tailscale PROXY protocol"),o=function(A){if(!Array.isArray(A)||A.length>100)throw Error("Tailscale app capabilities must be an array");let e=/^(?:[\p{L}\p{N}-]+\.)+[\p{L}\p{N}-]+\/[\p{L}\p{N}-]+(?:\/[\p{L}\p{N}-]+)*$/u;return[...new Set(A.map((A,t)=>{let r=AH(A,`Tailscale app capabilities[${t}]`);if(!e.test(r))throw Error(`Tailscale app capabilities[${t}] must use domain/name format`);return r}))].sort()}(e.appCapabilities),l="HTTP"===t||"HTTPS"===t;if(l&&"TCP"===n)throw Error("Web listeners require an HTTP(S) destination");if(!l&&"TCP"!==n)throw Error("TCP listeners require a TCP destination");if(!l&&"/"!==AU(e.mountPath))throw Error("TCP listeners do not support mount paths");if(a&&("HTTP"===t||![443,8443,1e4].includes(r)))throw Error("Funnel requires HTTPS or TLS TCP on port 443, 8443, or 10000");if(o.length&&(!l||a))throw Error("App capabilities are supported only by private HTTP(S) listeners");if("NONE"!==s&&"TCP"!==t)throw Error("PROXY protocol is supported only by TCP listeners");return{protocol:t,listenPort:r,mountPath:l?AU(e.mountPath):"/",destination:{protocol:n,port:Av(i.port,"Tailscale destination port"),path:l?function(A){if("string"!=typeof A||A.includes("\0"))throw Error("Tailscale destination path is invalid");let e=A.trim();return e?e.startsWith("/")?e:`/${e}`:""}(i.path):""},funnel:a,appCapabilities:o,proxyProtocol:s}}function Ax(A){let e=AO(A,"Tailscale Serve inspect payload");return AN(e,["operationId"],"Tailscale Serve inspect payload"),{operationId:AH(e.operationId,"operationId")}}function A_(A,e){let t=AO(A,"Tailscale Serve mutation payload");if(AN(t,["operationId","templateId","revision","route",...e?["previousRoute"]:[]],"Tailscale Serve mutation payload"),!Number.isInteger(t.revision)||t.revision<1)throw Error("Tailscale template revision must be a positive integer");return{operationId:AH(t.operationId,"operationId"),templateId:AH(t.templateId,"templateId"),revision:t.revision,route:AJ(t.route)}}function AG(A){return{...A_(A,!0),previousRoute:null===A.previousRoute?null:AJ(A.previousRoute)}}function AL(A){return A_(A,!1)}A.s(["m",0,AB,"d",0,Ab,"k",0,Ak,"o",0,AD,"e",0,AJ,"f",0,function(A){let e=AJ(A);return`${e.protocol}:${e.listenPort}:${e.mountPath}`},"h",0,function(A){let e=AJ(A);return(0,t.createHash)("sha256").update(JSON.stringify(e)).digest("hex")},"N",0,Ax,"A",0,AL,"K",0,AG],530648);var AP=A.i(135475);let Aj={status:{in:["QUEUED","RUNNING"]},NOT:{kind:{startsWith:"ios."}},OR:[{kind:{notIn:[n.U,Ap]}},{kind:{in:[n.U,Ap]},blocksGitOperations:!0}]};class AY extends Error{constructor(A="Another operation is active for this codebase"){super(A),this.name="CodebaseBusyError"}}function AF(A){return A instanceof Error&&"CodebaseBusyError"===A.name}function AK(A){if(AF(A)||A instanceof Error&&A.message.includes("AgentJob_codebaseId_active_key"))return!0;if(!A||"object"!=typeof A||"P2002"!==A.code)return!1;let e=A.meta?.target;return Array.isArray(e)?e.includes("codebaseId"):"string"==typeof e&&e.includes("codebaseId")}A.s(["i",0,Aj,"S",0,AY,"G",0,AK,"D",0,AF],454228);var Aq=A.i(848201);let AV=["QUEUED","RUNNING","CANCELLING"],Az=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]);function AW(A){return Math.max(45e3,(A.heartbeatIntervalSeconds??i.e)*3e3)}function A$(A){return(0,t.createHash)("sha256").update(A).digest("hex")}function AZ(A,e,t,r){if(!Number.isInteger(A)||A<t||A>r)throw Error(`${e} must be an integer from ${t} to ${r} seconds`);return A}function AX(A){Aq._H.publish(Aq.uV,{agentChanged:A})}function A0(A){Aq._H.publish((0,Aq.BC)(A.id),{agentJobChanged:A}),A.ccusageCollectionId&&Aq._H.publish((0,Aq.Xq)(A.ccusageCollectionId),{ccusageCollectionChanged:{id:A.ccusageCollectionId}}),A.buildDataCollectionId&&Aq._H.publish((0,Aq.I2)(A.buildDataCollectionId),{buildDataCollectionChanged:{id:A.buildDataCollectionId}})}[n.U,i._,...c.I,...u,...w.$,...S.P,...e.m,...N,...E._,...Ar,...Am,...Ab],A.s(["b",0,class{completionHandlers=new Map;completionObservers=new Set;connectionHandlers=new Set;signingSecretTransfers=new Map;createSigningSecretTransfer(A,e,r=3e5){if(!e.p12Base64||e.p12Base64.length>0x2000000)throw Error("Signing identity transfer is empty or too large");let i=(0,t.randomUUID)(),n=Date.now()+Math.max(3e4,Math.min(r,9e5));return this.signingSecretTransfers.set(i,{agentId:A,...e,expiresAt:n}),setTimeout(()=>{let A=this.signingSecretTransfers.get(i);A?.expiresAt===n&&this.signingSecretTransfers.delete(i)},n-Date.now()).unref(),i}claimSigningSecretTransfer(A,e){let t=this.signingSecretTransfers.get(e);if(this.signingSecretTransfers.delete(e),!t||t.expiresAt<=Date.now())throw Error("Signing secret transfer is missing or expired");if(t.agentId!==A)throw Error("Signing secret transfer belongs to another agent");return{p12Base64:t.p12Base64,passphrase:t.passphrase}}revokeSigningSecretTransfer(A){this.signingSecretTransfers.delete(A)}registerCompletionHandler(A,e){this.completionHandlers.set(A,e)}registerCompletionObserver(A){this.completionObservers.add(A)}registerConnectionHandler(A){this.connectionHandlers.add(A)}async notifyConnected(A){await Promise.allSettled([...this.connectionHandlers].map(e=>e(A)))}async requestCodebaseReconcile(A){let e=[...new Set(A.filter(Boolean))];if(!e.length)return 0;let t=await (0,AP.U)(),r=(await t.agent.findMany({where:{id:{in:e}},select:{id:!0,capabilitiesJson:!0}})).filter(A=>(function(A){try{let e=JSON.parse(A);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}})(A.capabilitiesJson).includes(S.Q));for(let A of r)Aq._H.publish((0,Aq.CO)(A.id),{agentEvents:{type:"CODEBASE_RECONCILE_REQUESTED",job:null}});return r.length}requestDiskSpacePoll(A){Aq._H.publish((0,Aq.CO)(A),{agentEvents:{type:"DISK_SPACE_POLL_REQUESTED",job:null}})}requestAgentConfigurationRefresh(A){Aq._H.publish((0,Aq.CO)(A),{agentEvents:{type:"AGENT_CONFIGURATION_CHANGED",job:null}})}async projectCompletion(A){await this.completionHandlers.get(A.kind)?.(A),await Promise.allSettled([...this.completionObservers].map(e=>e(A)))}async authenticate(A){if(!A)return null;let e=await (0,AP.U)(),t=await e.agent.findUnique({where:{secretHash:A$(A)},select:{id:!0}});return t?.id??null}async createEnrollmentToken(A=15){let e=Math.max(1,Math.min(A,1440)),r=`enroll_${(0,t.randomBytes)(32).toString("base64url")}`,i=new Date(Date.now()+6e4*e),n=await (0,AP.U)();return await n.agentEnrollmentToken.create({data:{id:(0,t.randomUUID)(),tokenHash:A$(r),expiresAt:i}}),{token:r,expiresAt:i}}async enroll(A){let e=await (0,AP.U)(),r=`agent_${(0,t.randomBytes)(32).toString("base64url")}`,i=new Date,n=await e.$transaction(async e=>{if(1!==(await e.agentEnrollmentToken.updateMany({where:{tokenHash:A$(A.enrollmentToken),usedAt:null,expiresAt:{gt:i}},data:{usedAt:i}})).count)throw Error("Enrollment token is invalid, expired, or already used");let n=await e.agent.create({data:{id:(0,t.randomUUID)(),name:A.name.trim()||A.hostname,hostname:A.hostname,version:A.version,osVersion:A.osVersion,architecture:A.architecture,cpuModel:A.cpuModel,memoryTotalBytes:A.memoryTotalBytes,memoryFreeBytes:A.memoryFreeBytes,diskTotalBytes:A.diskTotalBytes,diskFreeBytes:A.diskFreeBytes,capabilitiesJson:JSON.stringify(A.capabilities),defaultBuildsDirectory:A.defaultBuildsDirectory??null,secretHash:A$(r),ipAddress:A.ipAddress,lastSeenAt:i}});return await e.agentAuditEvent.create({data:{id:(0,t.randomUUID)(),agentId:n.id,action:"agent.enrolled",ipAddress:A.ipAddress}}),n});return AX(n),await this.notifyConnected(n.id),{agent:n,credential:r}}async heartbeat(A,e){let t=await (0,AP.U)(),r=await t.agent.findUnique({where:{id:A},select:{lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),i=new Date,n=!r?.lastSeenAt||null!==r.disconnectedAt||i.getTime()-r.lastSeenAt.getTime()>AW(r),a=await t.agent.update({where:{id:A},data:{version:e.version,osVersion:e.osVersion,architecture:e.architecture,cpuModel:e.cpuModel??void 0,memoryTotalBytes:e.memoryTotalBytes??void 0,memoryFreeBytes:e.memoryFreeBytes??void 0,diskTotalBytes:e.diskTotalBytes??void 0,diskFreeBytes:e.diskFreeBytes??void 0,capabilitiesJson:JSON.stringify(e.capabilities),defaultBuildsDirectory:e.defaultBuildsDirectory??void 0,ipAddress:e.ipAddress??void 0,lastSeenAt:i,disconnectedAt:null}});return AX(a),n&&await this.notifyConnected(a.id),a}async listAgents(){return(await (0,AP.U)()).agent.findMany({orderBy:{createdAt:"desc"}})}async getAgent(A){return(await (0,AP.U)()).agent.findUnique({where:{id:A}})}async cadenceSettings(A){let t=await (0,AP.U)(),[r,n]=await Promise.all([t.agent.findUnique({where:{id:A},select:{id:!0,codebaseScanIntervalSeconds:!0,jobReconciliationIntervalSeconds:!0,gitFetchIntervalSeconds:!0,heartbeatIntervalSeconds:!0}}),t.codebaseSettings.findUnique({where:{id:"default"}})]);if(!r)throw Error("Agent not found");return{agentId:r.id,codebaseScanIntervalSeconds:r.codebaseScanIntervalSeconds??n?.refreshIntervalSeconds??S.j,jobReconciliationIntervalSeconds:r.jobReconciliationIntervalSeconds??i.F,gitFetchIntervalSeconds:r.gitFetchIntervalSeconds??n?.fetchIntervalSeconds??e.v,heartbeatIntervalSeconds:r.heartbeatIntervalSeconds??i.e}}async updateCadenceSettings(A,t){let r={codebaseScanIntervalSeconds:AZ(t.codebaseScanIntervalSeconds,"Codebase scan interval",S.f,S.k),jobReconciliationIntervalSeconds:AZ(t.jobReconciliationIntervalSeconds,"Durable job reconciliation interval",i.V,i.K),gitFetchIntervalSeconds:AZ(t.gitFetchIntervalSeconds,"Git fetch interval",e.M,e.h),heartbeatIntervalSeconds:AZ(t.heartbeatIntervalSeconds,"Agent heartbeat interval",i.U,i.Q)},n=await (0,AP.U)();return AX(await n.agent.update({where:{id:A},data:r})),Aq._H.publish((0,Aq.CO)(A),{agentEvents:{type:"AGENT_CONFIGURATION_CHANGED",job:null}}),this.cadenceSettings(A)}async deleteAgent(A){let e=await (0,AP.U)();return!!await e.agent.findUnique({where:{id:A}})&&(await e.agent.delete({where:{id:A}}),!0)}async renameAgent(A,e){let t=e.trim();if(!t||t.length>200)throw Error("Agent name must be between 1 and 200 characters");let r=await (0,AP.U)();if(!await r.agent.findUnique({where:{id:A}}))throw Error("Agent not found");let i=await r.agent.update({where:{id:A},data:{name:t}});return AX(i),i}async updateBaseRepoDirectory(A,e){if(null!==e&&(!e||e.length>4096||e.includes("\0")||!r.posix.isAbsolute(e)&&!r.win32.isAbsolute(e)))throw Error("Base repository directory must be an absolute path");let t=await (0,AP.U)(),i=await t.agent.update({where:{id:A},data:{baseRepoDirectory:e}});return AX(i),this.requestAgentConfigurationRefresh(A),i}async updateBuildsDirectory(A,e){if(null!==e&&(!e||e.length>4096||e.includes("\0")||!r.posix.isAbsolute(e)&&!r.win32.isAbsolute(e)))throw Error("Builds directory must be an absolute path");let t=await (0,AP.U)(),i=await t.agent.update({where:{id:A},data:{buildsDirectory:e}});return AX(i),this.requestAgentConfigurationRefresh(A),i}async updateDerivedDataSettings(A,e,t){let i=(0,w.Z)(e),n=t?.trim()||null;if(n?.includes("\0")||(n?.length??0)>4096)throw Error("Derived Data path is invalid");if("DEFAULT"===i&&null!==n)throw Error("Default Derived Data mode does not accept a path");if("ABSOLUTE"===i&&(!n||!r.posix.isAbsolute(n)&&!r.win32.isAbsolute(n)))throw Error("Custom Derived Data directory must be an absolute path");if("RELATIVE"===i){let A=n?.replaceAll("\\","/")??"";if(!A||r.posix.isAbsolute(A)||r.win32.isAbsolute(A)||"."===A||A.split("/").some(A=>!A||"."===A||".."===A))throw Error("Relative Derived Data path must stay within each worktree")}let a=await (0,AP.U)(),s=await a.agent.update({where:{id:A},data:{derivedDataLocationMode:i,derivedDataPath:n}});return AX(s),this.requestAgentConfigurationRefresh(A),s}async listJobs(A,e=50,t=!1){return(await (0,AP.U)()).agentJob.findMany({where:{agentId:A,...t?{}:{visibility:"USER"}},orderBy:{createdAt:"desc"},take:Math.max(1,Math.min(e,200))})}async getJobs(A){let e=[...new Set(A)];if(e.length>200)throw Error("At most 200 jobs may be requested at once");return e.length?(await (0,AP.U)()).agentJob.findMany({where:{id:{in:e}}}):[]}async getJob(A){return(await (0,AP.U)()).agentJob.findUnique({where:{id:A}})}async createJob(A){let r;if(!function(A,t){let r=function(A){if(!A||"object"!=typeof A||Array.isArray(A))throw Error("Job payload must be an object");return A}(t);if(A===a)return l(r);if(A===n.U)return(0,n.O)(r);if(A===c.n)return(0,c.a)(r);if(A===d)return f(r);if(A===w.F)return(0,w.S)(r);if(A===w.G)return(0,w.T)(r);if(A===w.t)return(0,w.A)(r);if(A===S.l)return(0,S.K)(r);if(A===S.X||A===S.L)return(0,S.x)(r);if(A===S.Z||A===S.r||A===S.B)return(0,S.D)(r);if(A===S.W)return(0,S.b)(r);if(A===S.H)return(0,S.z)(r);if(A===S.p)return(0,S.y)(r);if(A===e.Q)return(0,e.s)(r);if(A===e.B)return(0,e.A)(r);if(A===e.T)return(0,e.b)(r);if(A===e.W)return(0,e.t)(r);if(A===e.R)return(0,e.E)(r);if(A===e.Z)return(0,e.z)(r);if(A===e.V)return(0,e.e)(r);if(A===e.o)return(0,e.p)(r);if(A===e.U||A===e.L)return(0,e.j)(r);if(A===e.H||A===e.l)return(0,e.Y)(r);if(A===e.r)return(0,e.x)(r);if(A===e.d)return(0,e.c)(r);if(A===e.I)return(0,e._)(r);if(A===R)return Y(t);if(A===M)return F(t);if(A===q)return W(t);if(A===Ap)return AQ(t);if(A===AI)return Ay(t);if(A===O)return K(t);if(A===$)return Ad(t);if(A===Z||A===AA)return Au(t);if(A===X)return Ag(t);if(A===Ae)return Ah(t);if(A===At)return AC(t);if(A===E.i)return(0,E.n)(t);if(A===E.F)return(0,E.W)(t);if(A===E.U)return(0,E.g)(t);if(A===E.J)return(0,E.O)(t);if(A===E.r)return(0,E.l)(t);if(A===E.o)return(0,E.m)(t);if(A===E.d)return(0,E.L)(t);if(A===E.f)return(0,E.I)(t);if(A===E.z)return(0,E.Z)(t);if(A===E.a)return(0,E.$)(t);if(A===E.Y)return(0,E.N)(t);if(A===E.p)return(0,E.c)(t);if(A===E.E)return(0,E.e)(t);if(A===E.b||A===E.x)return(0,E.h)(t);if(A===i._){let A=Object.keys(r);if(A.length>0)throw Error(`Unexpected ccusage.report payload field: ${A[0]}`);return}if(A===AB)return Ax(r);if(A===AD)return AG(r);if(A===Ak)return AL(r);throw Error(`Unsupported agent job kind: ${A}`)}(A.kind,A.payload),!A.idempotencyKey.trim())throw Error("idempotencyKey is required");let s=A.kind===n.U?0:Math.max(10,Math.min(A.timeoutSeconds??86400,604800)),o=await (0,AP.U)();if(A.kind===S.p){let e=(0,S.y)(A.payload);if(A.codebaseId!==e.codebaseId)throw Error("Local branch cleanup must use deleteCodebaseBranches");let t=await o.codebase.findUnique({where:{id:e.codebaseId},include:{repository:!0}});if(!t||t.agentId!==A.agentId)throw Error("Codebase not found for this agent");if(e.folder!==t.folder||e.expectedOrigin!==t.repository.canonicalOrigin||e.defaultBranch!==t.defaultBranch)throw Error("Cleanup target no longer matches the registered codebase; refresh before retrying")}let u=await o.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:A.agentId,idempotencyKey:A.idempotencyKey}}});if(u){if(A.ccusageCollectionId&&u.ccusageCollectionId!==A.ccusageCollectionId){let e=await o.agentJob.update({where:{id:u.id},data:{ccusageCollectionId:A.ccusageCollectionId}});return A0(e),e}return u}try{r=await o.agentJob.create({data:{id:(0,t.randomUUID)(),agentId:A.agentId,kind:A.kind,payloadJson:JSON.stringify(A.payload),status:"QUEUED",idempotencyKey:A.idempotencyKey,timeoutSeconds:s,ccusageCollectionId:A.ccusageCollectionId??null,buildDataCollectionId:A.buildDataCollectionId??null,codebaseId:A.codebaseId??null,worktreeId:A.worktreeId??null,visibility:A.visibility??"USER",blocksGitOperations:A.blocksGitOperations??!1}})}catch(t){let e=await o.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:A.agentId,idempotencyKey:A.idempotencyKey}}});if(!e){if(AK(t))throw new AY;throw t}if(A.ccusageCollectionId&&e.ccusageCollectionId!==A.ccusageCollectionId)return o.agentJob.update({where:{id:e.id},data:{ccusageCollectionId:A.ccusageCollectionId}});return e}return await o.agentAuditEvent.create({data:{id:(0,t.randomUUID)(),agentId:A.agentId,action:"job.created",details:JSON.stringify({jobId:r.id,kind:r.kind})}}),A0(r),Aq._H.publish((0,Aq.CO)(A.agentId),{agentEvents:{type:"JOB_AVAILABLE",job:r}}),r}async claimJob(A,e){let t=await (0,AP.U)();await t.derivedDataCleanupLease.deleteMany({where:{jobId:null,expiresAt:{lte:new Date}}});let r=await t.agentJob.findUnique({where:{id:e},select:{agentId:!0,status:!0,worktreeId:!0,kind:!0}});if(!r||r.agentId!==A)throw Error("Job not found for this agent");if("QUEUED"===r.status&&r.worktreeId&&await t.derivedDataCleanupLease.findUnique({where:{worktreeId:r.worktreeId}}))throw Error("Derived Data cleanup is in progress for this worktree; try again shortly");if("QUEUED"===r.status&&r.kind===E.o){let[e,r]=await Promise.all([t.agentDiskSpaceState.findUnique({where:{agentId:A}}),t.diskSpaceSettings.findUnique({where:{id:"default"}})]);if(e?.enabled&&e.lastReportedAt&&!e.lastError&&Date.now()-e.lastReportedAt.getTime()<=12e4){let A=[];try{let t=JSON.parse(e.volumesJson);Array.isArray(t)&&(A=B(t))}catch{}let t=r?.pressureThresholdGiB??10;if(A.some(A=>A.freeBytes<=0x40000000*t))throw Error(`New builds are paused because this agent has ${t} GiB or less free disk space`)}}let i=await t.agentJob.updateMany({where:{id:e,agentId:A,status:"QUEUED"},data:{status:"RUNNING",startedAt:new Date}}),n=await t.agentJob.findUnique({where:{id:e}});if(!n||n.agentId!==A)throw Error("Job not found for this agent");if(1!==i.count&&"RUNNING"!==n.status)throw Error(`Job cannot be claimed from status ${n.status}`);return A0(n),n}async appendLogs(A,e,r){let i=await (0,AP.U)(),n=await i.agentJob.findUnique({where:{id:e}});if(!n||n.agentId!==A)throw Error("Job not found for this agent");let a=r.slice(0,200).map(A=>({id:(0,t.randomUUID)(),jobId:e,sequence:A.sequence,stream:A.stream,message:A.message.slice(0,64e3),createdAt:new Date(A.createdAt)}));if(a.some(A=>Number.isNaN(A.createdAt.valueOf())))throw Error("Log createdAt must be an ISO date");await Promise.all(a.map(A=>i.agentJobLog.upsert({where:{jobId_sequence:{jobId:e,sequence:A.sequence}},create:A,update:{}})));let s=await i.agentJobLog.findMany({where:{jobId:e,sequence:{in:a.map(A=>A.sequence)}},orderBy:{sequence:"asc"}});for(let A of s)Aq._H.publish((0,Aq.gR)(e),{agentJobLogAdded:A});return s}async reportBranchDeletionResult(A,e,t){let r=(0,S.C)([t])[0],i=await (0,AP.U)(),n=await i.$transaction(async t=>{let i=await t.agentJob.findUnique({where:{id:e}});if(!i||i.agentId!==A||i.kind!==S.p)throw Error("Branch cleanup job not found for this agent");if(!(0,S.y)(JSON.parse(i.payloadJson)).targets.some(A=>A.codebaseId===r.codebaseId&&A.branch===r.branch))throw Error("Branch is not a target of this cleanup job");let n=i.resultJson?JSON.parse(i.resultJson):{},a=n.branchDeletionResults?(0,S.C)(n.branchDeletionResults):[];if(a.some(A=>A.branch===r.branch))return i;if("RUNNING"!==i.status)throw Error("Branch cleanup job is no longer running");return t.agentJob.update({where:{id:i.id,status:"RUNNING"},data:{resultJson:JSON.stringify({...n,branchDeletionResults:[...a,r]})}})});return A0(n),n}async completeJob(A,e,t,r,i){if(!Az.has(t))throw Error("A final job status is required");let n=await (0,AP.U)(),a=await n.agentJob.findUnique({where:{id:e}});if(!a||a.agentId!==A)throw Error("Job not found for this agent");if(Az.has(a.status))return await this.projectCompletion(a),a;let s=await n.agentJob.updateMany({where:{id:e,agentId:A,status:{in:AV}},data:{status:t,resultJson:null==r?a.kind===S.p?a.resultJson:null:JSON.stringify(r),error:i,finishedAt:new Date}}),o=await n.agentJob.findUnique({where:{id:e}});if(!o||o.agentId!==A)throw Error("Job not found for this agent");if(1!==s.count){if(Az.has(o.status))return await this.projectCompletion(o),o;throw Error(`Job cannot be completed from status ${o.status}`)}return await this.projectCompletion(o),A0(o),o}async cancelJob(A){let e=await (0,AP.U)(),t=await e.agentJob.findUnique({where:{id:A}});if(!t)throw Error("Job not found");if(!AV.includes(t.status))return t;let r=t.kind===n.U,i=await e.agentJob.update({where:{id:A},data:r?{status:"CANCELLING"}:{status:"CANCELLED",finishedAt:new Date}});return"CANCELLED"===i.status&&await this.projectCompletion(i),A0(i),Aq._H.publish((0,Aq.CO)(t.agentId),{agentEvents:{type:"JOB_CANCEL_REQUESTED",job:i}}),i}async timeoutCollectionJobs(A){let e=await (0,AP.U)(),t=await e.agentJob.findMany({where:{ccusageCollectionId:A,status:{in:AV}}}),r=[];for(let A of t){if(1!==(await e.agentJob.updateMany({where:{id:A.id,status:{in:AV}},data:{status:"TIMED_OUT",finishedAt:new Date}})).count)continue;let t=await e.agentJob.findUnique({where:{id:A.id}});t&&(await this.projectCompletion(t),r.push(t),A0(t),Aq._H.publish((0,Aq.CO)(t.agentId),{agentEvents:{type:"JOB_CANCEL_REQUESTED",job:t}}))}return r}async timeoutBuildDataCollectionJobs(A){let e=await (0,AP.U)(),t=await e.agentJob.findMany({where:{buildDataCollectionId:A,kind:w.F,status:{in:AV}}}),r=[];for(let A of t){if(1!==(await e.agentJob.updateMany({where:{id:A.id,status:{in:AV}},data:{status:"TIMED_OUT",finishedAt:new Date}})).count)continue;let t=await e.agentJob.findUnique({where:{id:A.id}});t&&(await this.projectCompletion(t),r.push(t),A0(t),Aq._H.publish((0,Aq.CO)(t.agentId),{agentEvents:{type:"JOB_CANCEL_REQUESTED",job:t}}))}return r}async listLogs(A,e=-1,t={}){let r=await (0,AP.U)(),i=!!(t.latest||null!=t.beforeSequence),n=t.knownRanges??[];if(n.length>100||n.some(A=>A.fromSequence<0||A.throughSequence<A.fromSequence))throw Error("Invalid known log ranges");let a=await r.agentJobLog.findMany({where:{jobId:A,sequence:{gt:e,...null==t.beforeSequence?{}:{lt:t.beforeSequence}},...n.length?{NOT:n.map(A=>({sequence:{gte:A.fromSequence,lte:A.throughSequence}}))}:{}},orderBy:{sequence:i?"desc":"asc"},take:Math.min(5e3,Math.max(1,t.first??5e3))});return i?a.reverse():a}},"z",0,AW],118387)},848201,A=>{let e=globalThis,t=e.agentEventBus??(e.agentEventBus=new class{subscribers=new Map;publish(A,e){for(let t of this.subscribers.get(A)??[])(!t.predicate||t.predicate(e))&&t.push(e)}iterate(A,e){let t=[],r=[],i=!0,n={predicate:e,push(A){let e=r.shift();e?e({value:A,done:!1}):t.push(A)}},a=this.subscribers.get(A)??new Set;a.add(n),this.subscribers.set(A,a);let s=()=>{if(i)for(let e of(i=!1,a.delete(n),0===a.size&&this.subscribers.delete(A),r.splice(0)))e({value:void 0,done:!0})};return{[Symbol.asyncIterator](){return this},next(){if(!i)return Promise.resolve({value:void 0,done:!0});let A=t.shift();return void 0!==A?Promise.resolve({value:A,done:!1}):new Promise(A=>r.push(A))},return:()=>(s(),Promise.resolve({value:void 0,done:!0})),throw:A=>(s(),Promise.reject(A))}}});A.s(["Wy",0,"action-center.changed","FJ",0,"action-center.settings.changed","uV",0,"agent.changed","as",0,"app-notifications.changed","$A",0,"builds.changed","oz",0,"build-data.changed","sM",0,"build-scripts.changed","IV",0,"cli-health.changed","aA",0,"codebase.changed","Tc",0,"commands.changed","yS",0,"command-runs.changed","jU",0,"command-runs.output.changed","Zw",0,"crashes.reports.changed","Bo",0,"disk-space.changed","rm",0,"crashes.dsyms.changed","_C",0,"github-actions-count.changed","vS",0,"github.pipeline-status.changed","fh",0,"github-request.changed","ej",0,"integration-configuration:changed","w9",0,"ios-devices.changed","NP",0,"jira.ticket.changed","DN",0,"jira.webhook.delivery","ok",0,"model-costs.catalog.changed","Uv",0,"polling.changed","OK",0,"push-notifications.changed","mF",0,"repository-transfer.changed","hu",0,"runs.changed","fb",0,"sidebar-status.changed","oa",0,"signing-assets.changed","QD",0,"skills.changed","Y6",0,"sse.breakpoints.changed","Gx",0,"sse.endpoints.changed","l0",0,"sse.history.events.changed","EX",0,"sse.history.changed","_x",0,"sse.history.requests.changed","C0",0,"sse.storage.changed","Im",0,"tailscale-serve.changed","PB",0,"telemetry.changed","_t",0,"telemetry.settings.changed","zy",0,"tool-call-audit.changed","MA",0,"worktree.changed","_H",0,t,"CO",0,A=>`agent.${A}.events`,"BC",0,A=>`job.${A}.changed`,"gR",0,A=>`job.${A}.log`,"I2",0,A=>`build-data.${A}.changed`,"UP",0,A=>`build.${A}.log-chunk`,"cm",0,A=>`build.${A}.changed`,"Xq",0,A=>`ccusage.${A}.changed`,"LH",0,A=>`command-run.${A}.changed`,"sG",0,A=>`command-run.${A}.output`,"k_",0,A=>`run.${A}.changed`,"zP",0,A=>`run.${A}.event`,"hn",0,A=>`run.${A}.question`,"yE",0,A=>`skills.sync.${A}.changed`,"Sz",0,A=>`tailscale-serve.operation.${A}.changed`,"ys",0,A=>`worktree.${A}.inspection`])},256554,A=>{A.i(118387),A.i(848201),A.s([])},709932,456622,A=>{var e=A.i(898912),t=A.i(969068);A.i(592299);var r=A.i(747461),i=A.i(972425),n=A.i(863568);class a extends Error{status;errors;constructor(A,e,t){super(A),this.status=e,this.errors=t,this.name="AppleDeveloperRequestError"}}async function s(A=new n.f){let e=await A.getJson(i.D.appStoreConnectSettings);if(!e)throw Error("App Store Connect API credentials are not configured");let t=(0,r.X)(e),a=await A.getText(i.D.appStoreConnectPrivateKey);if(!a)throw Error("App Store Connect API credentials are not configured");return{issuerId:t.issuerId,keyId:t.keyId,privateKey:a}}A.s(["B",0,class{credentials;fetcher;constructor(A,e=fetch){this.credentials=A,this.fetcher=e}async token(){let A;try{A=await (0,e.r)(this.credentials.privateKey,"ES256")}catch{throw Error("The App Store Connect key must be an ES256 PKCS#8 private key")}return new t.f({}).setProtectedHeader({alg:"ES256",kid:this.credentials.keyId,typ:"JWT"}).setIssuer(this.credentials.issuerId).setAudience("appstoreconnect-v1").setIssuedAt().setExpirationTime("15m").sign(A)}async request(A,e={}){let t,r=await this.token(),i=A.startsWith("http")?A:`https://api.appstoreconnect.apple.com${A}`;try{t=await this.fetcher(i,{...e,signal:e.signal??AbortSignal.timeout(2e4),headers:{accept:"application/json",authorization:`Bearer ${r}`,...e.body?{"content-type":"application/json"}:{},...e.headers}})}catch(A){if(A instanceof Error&&("TimeoutError"===A.name||"AbortError"===A.name))throw Error("Apple Developer API timed out; retry the operation");throw Error("Could not connect to the Apple Developer API")}if(204===t.status)return;let n=await t.json().catch(()=>({}));if(!t.ok){let A=n.errors?.map(A=>A.detail||A.title||A.code).filter(Boolean).join("; ");throw new a(401===t.status||403===t.status?"Apple rejected the API key or it lacks Certificates, Identifiers & Profiles permission":A||`Apple Developer API returned HTTP ${t.status}`,t.status,n.errors??[])}return n}async list(A){let e=[],t=A;for(;t;){let A=await this.request(t);e.push(...A.data),t=A.links?.next??null}return e}listProfiles(){return this.list("/v1/profiles?limit=200&include=bundleId,certificates,devices")}listCertificates(){return this.list("/v1/certificates?limit=200")}listBundleIds(){return this.list("/v1/bundleIds?limit=200")}listDevices(){return this.list("/v1/devices?limit=200")}async createProfile(A){let e={bundleId:{data:{type:"bundleIds",id:A.bundleIdId}},certificates:{data:A.certificateIds.map(A=>({type:"certificates",id:A}))}};return A.deviceIds?.length&&(e.devices={data:A.deviceIds.map(A=>({type:"devices",id:A}))}),this.request("/v1/profiles",{method:"POST",body:JSON.stringify({data:{type:"profiles",attributes:{name:A.name,profileType:A.profileType},relationships:e}})})}deleteProfile(A){return this.request(`/v1/profiles/${encodeURIComponent(A)}`,{method:"DELETE"})}revokeCertificate(A){return this.request(`/v1/certificates/${encodeURIComponent(A)}`,{method:"DELETE"})}},"C",0,a,"r",0,s],456622),A.s([],709932)},206099,A=>{var e=A.i(666680),t=A.i(135475);A.i(256554);var r=A.i(848201);let i="apps.changed";function n(A){let e=A.name.trim(),t=A.description?.trim()??"",r=[...new Set(A.agentIds??[])],i=[...new Set(A.repositoryIds)];if(!e)throw Error("App name is required");if(e.length>120)throw Error("App name must be 120 characters or fewer");if(t.length>2e3)throw Error("App description must be 2,000 characters or fewer");if(!i.length)throw Error("Select at least one repository");return{name:e,normalizedName:e.normalize("NFKC").toLocaleLowerCase("en-US"),description:t,agentIds:r,repositoryIds:i}}let a={repositories:{include:{repository:{include:{codebases:{include:{agent:!0},orderBy:[{folder:"asc"},{id:"asc"}]}}}},orderBy:{createdAt:"asc"}}};A.s(["v",0,i,"o",0,class{publish(A){r._H.publish(i,{appsChanged:{id:A}})}subscribe(){return r._H.iterate(i)}async list(){let A=await (0,t.U)();return Promise.all((await A.app.findMany({include:a,orderBy:[{name:"asc"},{id:"asc"}]})).map(A=>this.withCounts(A)))}async get(A){let e=await (0,t.U)(),r=await e.app.findUnique({where:{id:A},include:a});return r?this.withCounts(r):null}async create(A){let r=n(A),i=await (0,t.U)();await this.assertRepositories(r.repositoryIds),await this.assertUniqueName(r.normalizedName);let s=await i.app.create({data:{id:(0,e.randomUUID)(),name:r.name,normalizedName:r.normalizedName,description:r.description,agentIdsJson:JSON.stringify(r.agentIds),repositories:{create:r.repositoryIds.map(A=>({repositoryId:A}))}},include:a});return this.publish(s.id),this.withCounts(s)}async update(A){let e=n(A),r=await (0,t.U)();if(!await r.app.findUnique({where:{id:A.id}}))throw Error("App not found");await this.assertRepositories(e.repositoryIds),await this.assertUniqueName(e.normalizedName,A.id);let i=await r.$transaction(async t=>(await t.appRepository.deleteMany({where:{appId:A.id}}),t.app.update({where:{id:A.id},data:{name:e.name,normalizedName:e.normalizedName,description:e.description,agentIdsJson:JSON.stringify(e.agentIds),repositories:{create:e.repositoryIds.map(A=>({repositoryId:A}))}},include:a})));return this.publish(i.id),this.withCounts(i)}async delete(A){let e=await (0,t.U)();if(!(await e.app.deleteMany({where:{id:A}})).count)throw Error("App not found");return this.publish(A),{id:A}}async assertRepositories(A){let e=await (0,t.U)();if(await e.codebaseRepository.count({where:{id:{in:A}}})!==A.length)throw Error("One or more repositories could not be found")}async assertUniqueName(A,e){let r=await (0,t.U)();if(await r.app.findFirst({where:{normalizedName:A,...e?{id:{not:e}}:{}},select:{id:!0}}))throw Error("App names must be unique")}async withCounts(A){let e=await (0,t.U)(),r=A.repositories.map(A=>A.repositoryId),i={in:r},n={missingAt:null,codebase:{repositoryId:i}},a=A.repositories.flatMap(({repository:A})=>A.codebases.flatMap(({id:A,defaultBranch:e})=>e?[{codebaseId:A,branch:{not:e}}]:[])),[s,o,l,c,d,u,g,h,C]=await Promise.all([e.codebase.count({where:{repositoryId:i}}),e.worktree.count({where:n}),e.worktree.count({where:{...n,OR:[{hasStagedChanges:!0},{hasUnstagedChanges:!0}]}}),e.worktree.count({where:{...n,OR:a}}),e.worktreePullRequest.findMany({where:{state:"OPEN",worktree:n},distinct:["url"],select:{url:!0}}),e.worktreeGitLabMergeRequest.findMany({where:{state:"OPENED",worktree:n},distinct:["webUrl"],select:{webUrl:!0}}),e.agentRun.count({where:{kind:"PLAN",archivedAt:null,repositoryId:i}}),e.agentRun.count({where:{kind:"SESSION",archivedAt:null,repositoryId:i}}),e.build.count({where:{repositoryId:i}})]),{repositories:p,agentIdsJson:I,...m}=A;return{...m,agentIds:this.stringArray(I),repositories:p.map(A=>A.repository),counts:{repositories:r.length,codebases:s,worktrees:o,dirtyWorktrees:l,nonMainWorktrees:c,openRequests:d.length+u.length,plans:g,sessions:h,builds:C}}}stringArray(A){try{let e=JSON.parse(A);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}}}])},812467,A=>{A.i(206099),A.s([])},792116,658978,525796,9416,847435,A=>{let e,t,r,i,n;var a,s=A.i(609245);let o=(0,s.f)({INVALID_METADATA_TYPE:"metadata must be an object or undefined",REFILL_AMOUNT_AND_INTERVAL_REQUIRED:"refillAmount is required when refillInterval is provided",REFILL_INTERVAL_AND_AMOUNT_REQUIRED:"refillInterval is required when refillAmount is provided",USER_BANNED:"User is banned",UNAUTHORIZED_SESSION:"Unauthorized or invalid session",KEY_NOT_FOUND:"API Key not found",KEY_DISABLED:"API Key is disabled",KEY_EXPIRED:"API Key has expired",USAGE_EXCEEDED:"API Key has reached its usage limit",KEY_NOT_RECOVERABLE:"API Key is not recoverable",EXPIRES_IN_IS_TOO_SMALL:"The expiresIn is smaller than the predefined minimum value.",EXPIRES_IN_IS_TOO_LARGE:"The expiresIn is larger than the predefined maximum value.",INVALID_REMAINING:"The remaining count is either too large or too small.",INVALID_PREFIX_LENGTH:"The prefix length is either too large or too small.",INVALID_NAME_LENGTH:"The name length is either too large or too small.",METADATA_DISABLED:"Metadata is disabled.",RATE_LIMIT_EXCEEDED:"Rate limit exceeded.",NO_VALUES_TO_UPDATE:"No values to update.",KEY_DISABLED_EXPIRATION:"Custom key expiration values are disabled.",INVALID_API_KEY:"Invalid API key.",INVALID_USER_ID_FROM_API_KEY:"The user id from the API key is invalid.",INVALID_REFERENCE_ID_FROM_API_KEY:"The reference id from the API key is invalid.",INVALID_API_KEY_GETTER_RETURN_TYPE:"API Key getter returned an invalid key type. Expected string.",SERVER_ONLY_PROPERTY:"The property you're trying to set can only be set from the server auth instance only.",FAILED_TO_UPDATE_API_KEY:"Failed to update API key",NAME_REQUIRED:"API Key name is required.",ORGANIZATION_ID_REQUIRED:"Organization ID is required for organization-owned API keys.",USER_NOT_MEMBER_OF_ORGANIZATION:"You are not a member of the organization that owns this API key.",INSUFFICIENT_API_KEY_PERMISSIONS:"You do not have permission to perform this action on organization API keys.",NO_DEFAULT_API_KEY_CONFIGURATION_FOUND:"No default api-key configuration found.",ORGANIZATION_PLUGIN_REQUIRED:"Organization plugin is required for organization-owned API keys. Please install and configure the organization plugin."});var l=A.i(47032),c=A.i(965150),d=A.i(263822),u=A.i(793312),g=A.i(849655),h=A.i(219700),C=A.i(295090),p=A.i(157823),I=A.i(338952),m=A.i(470365),f=A.i(749906),E=A.i(377458);async function w(A,e,t){let r=A.length;if(0===r)return[];let{signal:i}=t;if(i?.aborted)throw i.reason;let n=Math.floor(t.concurrency),a=Math.min(r,n>=1?n:1),s=Array(r),o=0,l=!1,c=async()=>{for(;!l&&o<r;){if(i?.aborted)throw i.reason;let t=o++;try{s[t]=await e(A[t],t)}catch(A){throw l=!0,A}}};return await Promise.all(Array.from({length:a},c)),s}var Q=A.i(241510),y=A.i(37125);function B(A){return null==A?null:"object"==typeof A?A:(0,m.f)(A)}function D(A){return null!=A&&"string"==typeof A}async function k(A,e,t){if("database"!==t.storage&&!t.fallbackToDatabase)return;let r=e.filter(A=>D(A.metadata));if(0===r.length)return;let i=r.map(async e=>{let t=B(e.metadata);try{await A.context.adapter.update({model:"apikey",where:[{field:"id",value:e.id}],update:{metadata:t}})}catch(t){A.context.logger.warn(`Failed to migrate double-stringified metadata for API key ${e.id}:`,t)}});await Promise.all(i)}async function b(A,e,t){let r=B(e.metadata);if(D(e.metadata)&&("database"===t.storage||t.fallbackToDatabase))try{await A.context.adapter.update({model:"apikey",where:[{field:"id",value:e.id}],update:{metadata:r}})}catch(t){A.context.logger.warn(`Failed to migrate double-stringified metadata for API key ${e.id}:`,t)}return r}function S(A){return`api-key:${A}`}function R(A){return`api-key:by-id:${A}`}function M(A){return`api-key:by-ref:${A}`}function O(A){if(!A)return null;try{let e="string"==typeof A?JSON.parse(A):A;return{...e,createdAt:new Date(e.createdAt),updatedAt:new Date(e.updatedAt),expiresAt:e.expiresAt?new Date(e.expiresAt):null,lastRefillAt:e.lastRefillAt?new Date(e.lastRefillAt):null,lastRequest:e.lastRequest?new Date(e.lastRequest):null}}catch{return null}}function N(A,e){return e.customStorage?e.customStorage:A.context.secondaryStorage||null}function H(A){if(A.expiresAt){let e=Date.now(),t=Math.floor((new Date(A.expiresAt).getTime()-e)/1e3);if(t>0)return t}}async function v(A,e,t){let r=S(e);return O(await t.get(r))}async function T(A,e,t){let r=R(e);return O(await t.get(r))}let U=new Map;async function J(A,e,t){var r;let i;await (r=async()=>{let r=await A.get(e),i=[];if(r&&"string"==typeof r)try{i=JSON.parse(r)}catch{i=[]}else Array.isArray(r)&&(i=r);let n=t(i);0===n.length?await A.delete(e):await A.set(e,JSON.stringify(n))},i=(U.get(e)??Promise.resolve()).then(r,r).finally(()=>{U.get(e)===i&&U.delete(e)}),U.set(e,i),i)}async function x(A,e,t,r,i){let n=JSON.stringify({...e,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString(),expiresAt:e.expiresAt?.toISOString()??null,lastRefillAt:e.lastRefillAt?.toISOString()??null,lastRequest:e.lastRequest?.toISOString()??null}),a=M(e.referenceId);i.fallbackToDatabase?await Promise.all([t.set(S(e.key),n,r),t.set(R(e.id),n,r),t.delete(a)]):(await Promise.all([t.set(S(e.key),n,r),t.set(R(e.id),n,r)]),await J(t,a,A=>A.includes(e.id)?A:[...A,e.id]))}async function _(A,e,t,r){let i=M(e.referenceId);r.fallbackToDatabase?await Promise.all([t.delete(S(e.key)),t.delete(R(e.id)),t.delete(i)]):await Promise.all([t.delete(S(e.key)),t.delete(R(e.id)),J(t,i,A=>A.filter(A=>A!==e.id))])}async function G(A,e,t){let r=N(A,t);if("database"===t.storage)return await A.context.adapter.findOne({model:"apikey",where:[{field:"key",value:e}]});if("secondary-storage"===t.storage&&t.fallbackToDatabase){if(r){let t=await v(A,e,r);if(t)return t}let i=await A.context.adapter.findOne({model:"apikey",where:[{field:"key",value:e}]});return i&&r&&await x(A,i,r,H(i),t),i}return"secondary-storage"===t.storage?r?await v(A,e,r):null:await A.context.adapter.findOne({model:"apikey",where:[{field:"key",value:e}]})}async function L(A,e,t){let r=N(A,t);if("database"===t.storage)return await A.context.adapter.findOne({model:"apikey",where:[{field:"id",value:e}]});if("secondary-storage"===t.storage&&t.fallbackToDatabase){if(r){let t=await T(A,e,r);if(t)return t}let i=await A.context.adapter.findOne({model:"apikey",where:[{field:"id",value:e}]});return i&&r&&await x(A,i,r,H(i),t),i}return"secondary-storage"===t.storage?r?await T(A,e,r):null:await A.context.adapter.findOne({model:"apikey",where:[{field:"id",value:e}]})}async function P(A,e,t){let r=N(A,t),i=H(e);if("database"!==t.storage&&"secondary-storage"===t.storage){if(!r)throw Error("Secondary storage is required when storage mode is 'secondary-storage'");await x(A,e,r,i,t);return}}async function j(A,e,t){let r=N(A,t);if("database"!==t.storage&&"secondary-storage"===t.storage){if(!r)throw Error("Secondary storage is required when storage mode is 'secondary-storage'");await _(A,e,r,t);return}}function Y(A,e,t,r,i){let n=[...A];if(e){let A=t||"asc";n.sort((t,r)=>{let i=t[e],n=r[e];return null==i&&null==n?0:null==i?"asc"===A?-1:1:null==n?"asc"===A?1:-1:i<n?"asc"===A?-1:1:i>n?"asc"===A?1:-1:0})}return void 0!==i&&(n=n.slice(i)),void 0!==r&&(n=n.slice(0,r)),n}async function F(A,e,t,r){let i=N(A,t),{limit:n,offset:a,sortBy:s,sortDirection:o}=r||{};if("database"===t.storage){let[t,r]=await Promise.all([A.context.adapter.findMany({model:"apikey",where:[{field:"referenceId",value:e}],limit:n,offset:a,sortBy:s?{field:s,direction:o||"asc"}:void 0}),A.context.adapter.count({model:"apikey",where:[{field:"referenceId",value:e}]})]);return{apiKeys:t,total:r}}if("secondary-storage"===t.storage&&t.fallbackToDatabase){let r=M(e);if(i){let e=await i.get(r),t=[];if(e&&"string"==typeof e)try{t=JSON.parse(e)}catch{t=[]}else Array.isArray(e)&&(t=e);if(t.length>0){let e=(await w(t,e=>T(A,e,i),{concurrency:10})).filter(A=>null!=A);return{apiKeys:Y(e,s,o,n,a),total:e.length}}}let[l,c]=await Promise.all([A.context.adapter.findMany({model:"apikey",where:[{field:"referenceId",value:e}],limit:n,offset:a,sortBy:s?{field:s,direction:o||"asc"}:void 0}),A.context.adapter.count({model:"apikey",where:[{field:"referenceId",value:e}]})]);if(i&&l.length>0){await w(l,e=>x(A,e,i,H(e),t),{concurrency:10});let e=l.map(A=>A.id);await i.set(r,JSON.stringify(e))}return{apiKeys:l,total:c}}if("secondary-storage"===t.storage){if(!i)return{apiKeys:[],total:0};let t=M(e),r=await i.get(t),l=[];if(r&&"string"==typeof r)try{l=JSON.parse(r)}catch{return{apiKeys:[],total:0}}else{if(!Array.isArray(r))return{apiKeys:[],total:0};l=r}let c=(await w(l,e=>T(A,e,i),{concurrency:10})).filter(A=>null!=A);return{apiKeys:Y(c,s,o,n,a),total:c.length}}let[l,c]=await Promise.all([A.context.adapter.findMany({model:"apikey",where:[{field:"referenceId",value:e}],limit:n,offset:a,sortBy:s?{field:s,direction:o||"asc"}:void 0}),A.context.adapter.count({model:"apikey",where:[{field:"referenceId",value:e}]})]);return{apiKeys:l,total:c}}async function K(A,e,t,r){let i=function(A){let e=A.context;if("orgOptions"in e&&e.orgOptions)return e.orgOptions;let t=e.getPlugin?.("organization");return t&&"options"in t?t.options:null}(A);if(!i){let A=o.ORGANIZATION_PLUGIN_REQUIRED;throw g.E.from("INTERNAL_SERVER_ERROR",A)}let n=await A.context.adapter.findOne({model:"member",where:[{field:"userId",value:e},{field:"organizationId",value:t}]});if(!n){let A=o.USER_NOT_MEMBER_OF_ORGANIZATION;throw g.E.from("FORBIDDEN",A)}if(!await q(A,n.role,t,r,i)){let A=o.INSUFFICIENT_API_KEY_PERMISSIONS;throw g.E.from("FORBIDDEN",A)}return n}async function q(e,t,r,i,n){let{hasPermission:a}=await A.A(907898);try{return await a({role:t,options:n,permissions:{apiKey:[i]},organizationId:r,allowCreatorAllPermissions:!0},e)}catch{return!1}}let V=(A,e="ms")=>new Date(Date.now()+("sec"===e?1e3*A:A)),z=f.object({configId:f.string().meta({description:"The configuration ID to use for the API key. If not provided, the default configuration will be used."}).optional(),name:f.string().meta({description:"Name of the Api Key"}).optional(),expiresIn:f.number().meta({description:"Expiration time of the Api Key in seconds"}).min(1).optional().nullable().default(null),prefix:f.string().meta({description:"Prefix of the Api Key"}).regex(/^[a-zA-Z0-9_-]+$/,{message:"Invalid prefix format, must be alphanumeric and contain only underscores and hyphens."}).optional(),remaining:f.number().meta({description:"Remaining number of requests. Server side only"}).min(0).optional().nullable().default(null),metadata:f.any().optional(),refillAmount:f.number().meta({description:"Amount to refill the remaining count of the Api Key. server-only. Eg: 100"}).min(1).optional(),refillInterval:f.number().meta({description:"Interval to refill the Api Key in milliseconds. server-only. Eg: 1000"}).optional(),rateLimitTimeWindow:f.number().meta({description:"The duration in milliseconds where each request is counted. Once the `maxRequests` is reached, the request will be rejected until the `timeWindow` has passed, at which point the `timeWindow` will be reset. server-only. Eg: 1000"}).optional(),rateLimitMax:f.number().meta({description:"Maximum amount of requests allowed within a window. Once the `maxRequests` is reached, the request will be rejected until the `timeWindow` has passed, at which point the `timeWindow` will be reset. server-only. Eg: 100"}).optional(),rateLimitEnabled:f.boolean().meta({description:"Whether the key has rate limiting enabled. server-only. Eg: true"}).optional(),permissions:f.record(f.string(),f.array(f.string())).meta({description:"Permissions of the Api Key."}).optional(),userId:E.f.string().meta({description:'User Id of the user that the Api Key belongs to. server-only. Eg: "user-id"'}).optional(),organizationId:E.f.string().meta({description:"Organization Id of the organization that the Api Key belongs to. Eg: 'org-id'"}).optional()}),W=f.object({configId:f.string().meta({description:"The configuration ID to use for the API key lookup. If not provided, the default configuration will be used."}).optional(),keyId:f.string().meta({description:"The id of the Api Key"})}),$=f.object({configId:f.string().meta({description:"The configuration ID to use for the API key lookup. If not provided, the default configuration will be used."}).optional(),id:f.string().meta({description:"The id of the Api Key"})}),Z=f.object({configId:f.string().meta({description:"Filter by configuration ID. If not provided, returns keys from all configurations."}).optional(),organizationId:f.string().meta({description:"Organization ID to list keys for. If provided, returns organization-owned keys. If not provided, returns user-owned keys."}).optional(),limit:E.f.number().int().nonnegative().meta({description:"The number of API keys to return"}).optional(),offset:E.f.number().int().nonnegative().meta({description:"The offset to start from"}).optional(),sortBy:f.string().meta({description:"The field to sort by (e.g., createdAt, name, expiresAt)"}).optional(),sortDirection:f.enum(["asc","desc"]).meta({description:"The direction to sort by"}).optional()}).optional(),X=f.object({configId:f.string().meta({description:"The configuration ID to use for the API key lookup. If not provided, the default configuration will be used."}).optional(),keyId:f.string().meta({description:"The id of the Api Key"}),userId:E.f.string().meta({description:'The id of the user which the api key belongs to. server-only. Eg: "some-user-id"'}).optional(),name:f.string().meta({description:"The name of the key"}).optional(),enabled:f.boolean().meta({description:"Whether the Api Key is enabled or not"}).optional(),remaining:f.number().meta({description:"The number of remaining requests"}).min(1).optional(),refillAmount:f.number().meta({description:"The refill amount"}).optional(),refillInterval:f.number().meta({description:"The refill interval"}).optional(),metadata:f.any().optional(),expiresIn:f.number().meta({description:"Expiration time of the Api Key in seconds"}).min(1).optional().nullable(),rateLimitEnabled:f.boolean().meta({description:"Whether the key has rate limiting enabled."}).optional(),rateLimitTimeWindow:f.number().meta({description:"The duration in milliseconds where each request is counted. server-only. Eg: 1000"}).optional(),rateLimitMax:f.number().meta({description:"Maximum amount of requests allowed within a window. Once the `maxRequests` is reached, the request will be rejected until the `timeWindow` has passed, at which point the `timeWindow` will be reset. server-only. Eg: 100"}).optional(),permissions:f.record(f.string(),f.array(f.string())).meta({description:"Update the permissions on the API Key. server-only."}).optional().nullable()});function AA(A,e){let t=new Date,r=A.lastRequest,i=A.rateLimitTimeWindow,n=A.rateLimitMax;if(!1===e.rateLimit.enabled||!1===A.rateLimitEnabled)return{type:"skip",lastRequest:t};if(null===i||null===n)return{type:"skip",lastRequest:null};if(null===r)return{type:"start",now:t};let a=t.getTime()-new Date(r).getTime();return a>i?{type:"reset",now:t,windowStart:new Date(t.getTime()-i)}:A.requestCount>=n?{type:"deny",message:o.RATE_LIMIT_EXCEEDED.message,tryAgainIn:Math.ceil(i-a)}:{type:"increment",now:t,max:n,windowStart:new Date(t.getTime()-i)}}async function Ae({key:A,ctx:e,lookupOpts:t,configurations:r,schema:i,permissions:n,expectedConfigId:a,runCustomValidator:s}){let l=t.disableKeyHashing?A:await Au(A),c=await G(e,l,t);if(!c||void 0!==a&&!Al(c.configId,a))throw g.E.from("UNAUTHORIZED",o.INVALID_API_KEY);let d=As(e.context,r,c.configId);if(s&&d.customAPIKeyValidator&&!await d.customAPIKeyValidator({ctx:e,key:A}))throw g.E.from("UNAUTHORIZED",o.KEY_NOT_FOUND);if(!1===c.enabled)throw g.E.from("UNAUTHORIZED",o.KEY_DISABLED);if(c.expiresAt&&Date.now()>new Date(c.expiresAt).getTime()){let A=async()=>{"secondary-storage"===d.storage&&d.fallbackToDatabase?(await j(e,c,d),await e.context.adapter.delete({model:Ag,where:[{field:"id",value:c.id}]})):"secondary-storage"===d.storage?await j(e,c,d):await e.context.adapter.delete({model:Ag,where:[{field:"id",value:c.id}]})};throw d.deferUpdates?e.context.runInBackground(A().catch(A=>{e.context.logger.error("Deferred update failed:",A)})):await A(),g.E.from("UNAUTHORIZED",o.KEY_EXPIRED)}if(n){let A=c.permissions?(0,m.f)(c.permissions):null;if(!A||!(0,Q.Y)(A).authorize(n).success)throw g.E.from("UNAUTHORIZED",o.KEY_NOT_FOUND)}if(0===c.remaining&&null===c.refillAmount){let A=async()=>{"secondary-storage"===d.storage&&d.fallbackToDatabase?(await j(e,c,d),await e.context.adapter.delete({model:Ag,where:[{field:"id",value:c.id}]})):"secondary-storage"===d.storage?await j(e,c,d):await e.context.adapter.delete({model:Ag,where:[{field:"id",value:c.id}]})};throw d.deferUpdates?e.context.runInBackground(A().catch(A=>{e.context.logger.error("Deferred update failed:",A)})):await A(),g.E.from("TOO_MANY_REQUESTS",o.USAGE_EXCEEDED)}return{apiKey:"database"===d.storage||"secondary-storage"===d.storage&&d.fallbackToDatabase?await At({ctx:e,apiKey:c,opts:d,hashedKey:l}):await An({ctx:e,apiKey:c,opts:d,hashedKey:l}),opts:d}}async function At({ctx:A,apiKey:e,opts:t,hashedKey:r}){let i=e;null!==e.remaining&&(i=await Ar(A,e)),i=await Ai(A,i,t);let n=await A.context.adapter.update({model:Ag,where:[{field:"id",value:i.id}],update:{updatedAt:new Date}});if(!n)throw g.E.from("UNAUTHORIZED",o.INVALID_API_KEY);return"secondary-storage"===t.storage&&t.fallbackToDatabase&&await P(A,n,t),n}async function Ar(A,e){let t=new Date,{refillInterval:r,refillAmount:i}=e;if(r&&i){let n=new Date(e.lastRefillAt??e.createdAt).getTime();if(t.getTime()-n>r){let r=await A.context.adapter.incrementOne({model:Ag,where:[{field:"id",value:e.id},{field:"lastRefillAt",value:e.lastRefillAt}],increment:{},set:{remaining:i-1,lastRefillAt:t}});if(r)return r}}let n=await A.context.adapter.incrementOne({model:Ag,where:[{field:"id",value:e.id},{field:"remaining",operator:"gt",value:0}],increment:{remaining:-1}});if(!n)throw g.E.from("TOO_MANY_REQUESTS",o.USAGE_EXCEEDED);return n}async function Ai(A,e,t){let r=AA(e,t);if("deny"===r.type)throw new g.E("TOO_MANY_REQUESTS",{message:r.message,code:"RATE_LIMITED",details:{tryAgainIn:r.tryAgainIn}});if("skip"===r.type)return null===r.lastRequest?e:await A.context.adapter.update({model:"apikey",where:[{field:"id",value:e.id}],update:{lastRequest:r.lastRequest}})??e;if("increment"===r.type){let i=await A.context.adapter.incrementOne({model:Ag,where:[{field:"id",value:e.id},{field:"lastRequest",operator:"gt",value:r.windowStart},{field:"requestCount",operator:"lt",value:r.max}],increment:{requestCount:1},set:{lastRequest:r.now}});if(i)return i;let n=await A.context.adapter.findOne({model:Ag,where:[{field:"id",value:e.id}]});if(!n)throw g.E.from("UNAUTHORIZED",o.INVALID_API_KEY);return Ai(A,n,t)}let i="reset"===r.type?{field:"lastRequest",operator:"lte",value:r.windowStart}:{field:"lastRequest",operator:"eq",value:null},n=await A.context.adapter.incrementOne({model:Ag,where:[{field:"id",value:e.id},i],increment:{},set:{requestCount:1,lastRequest:r.now}});if(n)return n;let a=await A.context.adapter.findOne({model:Ag,where:[{field:"id",value:e.id}]});if(!a)throw g.E.from("UNAUTHORIZED",o.INVALID_API_KEY);return Ai(A,a,t)}async function An({ctx:A,apiKey:e,opts:t,hashedKey:r}){let i=e.remaining,n=e.lastRefillAt;if(null!==i){let A=Date.now(),{refillInterval:t,refillAmount:r}=e,a=new Date(n??e.createdAt).getTime();if(t&&r&&A-a>t&&(i=r,n=new Date),0===i)throw g.E.from("TOO_MANY_REQUESTS",o.USAGE_EXCEEDED);i--}let a={...function(A,e){let t=AA(A,e);switch(t.type){case"deny":throw new g.E("TOO_MANY_REQUESTS",{message:t.message,code:"RATE_LIMITED",details:{tryAgainIn:t.tryAgainIn}});case"skip":return null===t.lastRequest?{}:{lastRequest:t.lastRequest};case"start":case"reset":return{lastRequest:t.now,requestCount:1};case"increment":return{lastRequest:t.now,requestCount:A.requestCount+1}}}(e,t),remaining:i,lastRefillAt:n,updatedAt:new Date},s=async()=>{let e=await G(A,r,t);if(!e)return null;let i={...e,...a};return await P(A,i,t),i};if(t.deferUpdates)return A.context.runInBackground(s().catch(e=>{A.context.logger.error("Failed to update API key:",e)})),{...e,...a};let l=await s();if(!l)throw g.E.from("INTERNAL_SERVER_ERROR",o.FAILED_TO_UPDATE_API_KEY);return l}let Aa=f.object({configId:f.string().meta({description:"Configuration ID to scope verification to. When omitted, the key is validated against its own configuration."}).optional(),key:f.string().meta({description:"The key to verify"}),permissions:f.record(f.string(),f.array(f.string())).meta({description:"The permissions to verify."}).optional()});function As(A,e,t){let r=()=>{let t=e.find(A=>!A.configId||"default"===A.configId);if(!t){A.logger.error("No default api-key configuration found. Either provide an api-key configuration with configId 'default' or provide a configuration with no `configId` set.");let e=o.NO_DEFAULT_API_KEY_CONFIGURATION_FOUND;throw g.E.from("BAD_REQUEST",e)}return{...t,configId:"default"}};return t?e.find(A=>A.configId===t)??r():r()}function Ao(A){return!A||"default"===A}function Al(A,e){return!!(Ao(A)&&Ao(e))||A===e}let Ac=null;async function Ad(A,e=!1){Ac&&!e&&(new Date).getTime()-Ac.getTime()<1e4||(Ac=new Date,await A.adapter.deleteMany({model:Ag,where:[{field:"expiresAt",operator:"lt",value:new Date},{field:"expiresAt",operator:"ne",value:null}]}).catch(e=>{A.logger.error("Failed to delete expired API keys:",e)}))}let Au=async A=>{let e=await (0,u.f)("SHA-256").digest(new TextEncoder().encode(A));return d.W.encode(new Uint8Array(e),{padding:!1})},Ag="apikey";var Ah=A.i(824215),AC=A.i(194318),Ap=A.i(821380);function AI(A){return A.charAt(0).toLowerCase()+A.slice(1)}function Am(A){return A?.code==="P2025"}var Af=A.i(822837),AE=A.i(710139);async function Aw(e,t){let r;if(e.database)r="function"==typeof e.database?e.database(e):await t(e);else{let t=Object.keys((0,Af.R)(e)).reduce((A,e)=>(A[e]=[],A),{}),{memoryAdapter:i}=await A.A(55069);r=i(t)(e)}return r.transaction||(AE.y.warn("Adapter does not correctly implement transaction function, patching it automatically. Please update your adapter implementation."),r.transaction=async A=>A(r)),r}async function AQ(e){return Aw(e,async e=>{let{createKyselyAdapter:t,kyselyAdapter:r}=await A.A(630788),{kysely:i,databaseType:n,transaction:a}=await t(e);if(!i)throw new g.p("Failed to initialize database adapter");return r(i,{type:n||"sqlite",debugLogs:!!e.database&&"debugLogs"in e.database&&e.database.debugLogs,transaction:a})(e)})}var Ay=g,AB=A.i(625571),AD=A.i(67034),Ak=A.i(955466),Ab=A.i(639462),AS=A.i(792197);let AR={postgres:{string:["character varying","varchar","text","uuid"],number:["int4","int8","integer","bigint","smallint","numeric","real","double precision"],boolean:["bool","boolean"],date:["timestamptz","timestamp","date"],json:["json","jsonb"]},mysql:{string:["varchar","text","uuid"],number:["integer","int","bigint","smallint","decimal","float","double"],boolean:["boolean","tinyint"],date:["timestamp","datetime","date"],json:["json"]},sqlite:{string:["TEXT"],number:["INTEGER","REAL","BIGINT"],boolean:["INTEGER","BOOLEAN"],date:["DATE","INTEGER"],json:["TEXT"]},mssql:{string:["varchar","nvarchar","uniqueidentifier"],number:["int","bigint","smallint","decimal","float","double"],boolean:["bit","smallint"],date:["datetime2","date","datetime"],json:["varchar","nvarchar"]}};function AM(A,e){return`${(0,Ab.d)(A)}\0${(0,Ab.d)(e)}`}function AO(A,e){return`${A}\0${e}`}function AN(A,e){return A.unique===(e.unique??!1)&&A.validFullColumns&&A.columns.length===e.columns.length&&A.columns.every((A,t)=>A===e.columns[t])}function AH(A){return"boolean"==typeof A?A:"number"==typeof A?0!==A:"1"===A||A?.toLowerCase()==="true"||"t"===A}function Av(A){return new Map(A.map(A=>{let e=[...A.columns].sort((A,e)=>A.position-e.position);return[AM(A.table,A.name),{columns:e.flatMap(A=>null===A.name?[]:[A.name]),name:A.name,table:A.table,unique:A.unique,validFullColumns:A.valid&&!A.partial&&e.length>0&&e.every(A=>null!==A.name&&A.fullLength)}]}))}async function AT(A,e,t,r){let i;if(r)return Av(await r(t));switch(e.type){case"sqlite":i=(await AS.f`
|
|
365
|
+
FROM visible WHERE 1 = 1 ${n}`,r,o,...i??[])]),d=c[0],u=s(d?.totalCount),g=s(d?.needsAttentionCount);return{rows:l,totalCount:u,needsAttentionCount:g,activeCount:u-g}}let l=["PLAN","SESSION","BUILD","WORKFLOW","PULL_REQUEST","MERGE_REQUEST"],c={questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}},d={codebase:{select:{agent:{select:{baseRepoDirectory:!0}}}}};function u(A){return A.toISOString()}function g(A){try{return JSON.parse(A)}catch{return{}}}function h(A,e,t,r){return[A,e,r??0,t.toISOString()].join(":")}function C(A){return`BUILD:${A}:UNRUN_BUILD`}function p(A,e){return{id:A.id,sourceKind:e,error:A.error??null,createdAt:u(A.createdAt),questions:A.questions.map(({fieldJson:A,...e})=>({...e,field:A?g(A):null}))}}function I(A){let e=(0,n.x)(g(A),"worktree.id");return"string"==typeof e&&e?e:null}A.s(["f",0,class{requests;constructor(A){this.requests=A}settings(){return(0,e.k)()}async saveSettings(A){if(!Number.isInteger(A.maximumRequestAgeDays)||A.maximumRequestAgeDays<0)throw Error("Maximum request age must be a non-negative integer");let e=await (0,r.U)(),t={...A,hideRunningPipelineRequestsInSidebar:A.hideRunningPipelineRequestsInSidebar??void 0,hideUnapprovedRequestsInSidebar:A.hideUnapprovedRequestsInSidebar??void 0,confirmClearAllNotifications:A.confirmClearAllNotifications??void 0,showIntegrationCountsInSidebar:A.showIntegrationCountsInSidebar??void 0,showWorktreeCountsInSidebar:A.showWorktreeCountsInSidebar??void 0},n=await e.actionCenterSettings.upsert({where:{id:"default"},create:{id:"default",...t},update:t});return i._H.publish(i.FJ,{actionCenterSettingsChanged:n}),i._H.publish(i.fb,{sidebarStatusChanged:!0}),i._H.publish(i.Wy,{actionCenterChanged:!0}),this.requests?.refresh().catch(()=>void 0),n}async refresh(A=!1){return!this.requests||this.requests.refresh(void 0,A)}async list(A={}){var e,t,i,n,a;let s=await (0,r.U)(),l=Math.max(1,Math.min(A.first??50,200)),m=JSON.stringify([A.surface??"FULL",[...A.resourceKinds??[]].sort()]),f=await o(s,{first:l,surface:A.surface,resourceKinds:A.resourceKinds,cursor:function(A,e){if(!A)return null;try{let t=JSON.parse(Buffer.from(A,"base64url").toString("utf8"));if("number"!=typeof t.priority||"string"!=typeof t.updatedAt||"string"!=typeof t.key)return null;if(t.scope&&t.scope!==e)throw Error("Action Center cursor belongs to another surface or filter");return t}catch{return null}}(A.after,m)}),E=f.rows.slice(0,l),w=E.flatMap(A=>"PLAN"===A.resourceKind||"SESSION"===A.resourceKind?[A.resourceId]:[]),Q=E.flatMap(A=>"WORKFLOW"===A.resourceKind?[A.resourceId]:[]),y=E.flatMap(A=>"BUILD"===A.resourceKind?[A.resourceId]:[]),[B,D,k]=await Promise.all([w.length?s.agentRun.findMany({where:{id:{in:w}},take:w.length,include:{worktree:{include:d},questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:c}}}):Promise.resolve([]),Q.length?s.workflowRun.findMany({where:{id:{in:Q}},take:Q.length,include:{workflow:!0,attempts:{where:{supersededAt:null},include:{questionBatches:{where:{status:"PENDING"},orderBy:{createdAt:"asc"},include:c}}}}}):Promise.resolve([]),y.length?s.build.findMany({where:{id:{in:y}},take:y.length,include:{worktree:{include:d},codebase:{include:{repository:!0}},configuration:!0}}):Promise.resolve([])]),b=[...new Set(D.flatMap(A=>I(A.sessionDataJson)?[I(A.sessionDataJson)]:[]))],S=new Map((b.length?await s.worktree.findMany({where:{id:{in:b}},select:{id:!0,folder:!0,branch:!0,highlightColor:!0,...d}}):[]).map(A=>[A.id,A])),R=new Map(E.map(A=>[A.key,A.reason])),M=[],O=E.filter(A=>"PULL_REQUEST"===A.resourceKind||"MERGE_REQUEST"===A.resourceKind).map(A=>A.resourceId);if(O.length){let A=(await s.actionCenterRequest.findMany({where:{id:{in:O}}})).map(A=>({record:A,data:JSON.parse(A.payloadJson)})),e=A.flatMap(({data:A})=>A.worktreeId?[A.worktreeId]:[]),t=e.length?await s.worktree.findMany({where:{id:{in:e}},include:d}):[];for(let{record:e,data:r}of A){let A=r.request;this.requests?.getWarnings().some(e=>e.startsWith(A.provider))&&(A.canMerge=!1,A.mergeBlockedReason="Provider refresh is incomplete. Open the request to recheck readiness.");let i="GITHUB"===A.provider?`/github/pull-requests/${A.repositoryName.split("/").map(encodeURIComponent).join("/")}/${A.number}`:`/gitlab/merge-requests/${encodeURIComponent(A.repositoryId)}/${A.number}`;M.push({key:`${e.resourceKind}:${e.id}`,resourceKind:e.resourceKind,reason:e.reason,resourceId:e.id,href:i,displayNumber:A.number,label:r.label,summary:`${A.repositoryName} \xb7 ${A.branch}`,status:A.draft?"DRAFT":"OPEN",phase:null,error:null,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString(),worktree:t.find(A=>A.id===r.worktreeId)??null,questionBatches:[],buildRun:null,failureFingerprint:null,dismissalFingerprint:null,request:A})}}for(let A of B){let r=`${A.kind}:${A.id}`,i=R.get(r);if(!i)continue;let n=A.questionBatches.map(A=>p(A,null)),a="FAILED"===i?h(A.kind,A.id,A.finishedAt??A.updatedAt):null;M.push({key:r,resourceKind:A.kind,reason:i,resourceId:A.id,href:(e=A.kind,t=A.id,`/ai/${"PLAN"===e?"plans":"sessions"}/${encodeURIComponent(t)}`),displayNumber:A.displayNumber,label:function(A,e=220){let t=A.replace(/\s+/g," ").trim();return t.length>e?`${t.slice(0,e-1)}…`:t}(A.initialPrompt),summary:[A.repositoryName,A.branch].filter(Boolean).join(" · ")||null,status:A.status,phase:A.phase,error:A.error,createdAt:u(A.createdAt),updatedAt:u(A.updatedAt),worktree:A.worktree,questionBatches:"QUESTION"===i?n:[],buildRun:null,failureFingerprint:a,dismissalFingerprint:null})}for(let A of D){let e=`WORKFLOW:${A.id}`,t=R.get(e);if(!t)continue;let r=I(A.sessionDataJson),n=A.attempts.flatMap(A=>A.questionBatches.map(e=>p(e,A.kind))),a="FAILED"===t?h("WORKFLOW",A.id,A.finishedAt??A.updatedAt,A.generation):null;M.push({key:e,resourceKind:"WORKFLOW",reason:t,resourceId:A.id,href:(i=A.id,`/dashboard/workflows/runs/${encodeURIComponent(i)}`),displayNumber:A.displayNumber,label:A.workflow.name,summary:A.triggerSubjectKey||null,status:A.status,phase:A.phase,error:A.blockedReason??A.error,createdAt:u(A.createdAt),updatedAt:u(A.updatedAt),worktree:r?S.get(r)??null:null,questionBatches:"QUESTION"===t?n:[],buildRun:null,failureFingerprint:a,dismissalFingerprint:null})}for(let A of k){let e=`BUILD:${A.id}`,t=R.get(e);if(!t)continue;let r="FAILED"===t?h("BUILD",A.id,A.finishedAt??A.updatedAt):null,i=A.codebase?.repository.name??null,a=A.configuration?.name??null;M.push({key:e,resourceKind:"BUILD",reason:t,resourceId:A.id,href:(n=A.id,`/dashboard/builds/${encodeURIComponent(n)}`),displayNumber:null,label:a??i??"iOS build",summary:[i,A.worktree?.branch].filter(Boolean).join(" · ")||null,status:A.status,phase:null,error:A.error,createdAt:u(A.createdAt),updatedAt:u(A.updatedAt),worktree:A.worktree,questionBatches:[],buildRun:"UNRUN_BUILD"===t?{buildId:A.id,destinationType:A.destinationType,preferredDestination:g(A.destinationJson)}:null,failureFingerprint:r,dismissalFingerprint:"UNRUN_BUILD"===t?C(A.id):null})}let N=new Map(M.map(A=>[A.key,A])),H=E.flatMap(A=>N.has(A.key)?[N.get(A.key)]:[]);return{items:H,warnings:this.requests?.getWarnings()??[],nextCursor:f.rows.length>l&&H.length?(a=H[H.length-1],Buffer.from(JSON.stringify({priority:function(A){switch(A){case"QUESTION":return 0;case"BLOCKED":return 1;case"FAILED":return 2;case"UNRUN_BUILD":return 3;case"REVIEW_REQUIRED":return 4;case"READY_TO_MERGE":return 5;case"ACTIVE":return 6}}(a.reason),updatedAt:a.updatedAt,key:a.key,scope:m})).toString("base64url")):null,totalCount:f.totalCount,needsAttentionCount:f.needsAttentionCount,activeCount:f.activeCount}}async acknowledge(A){let e=A.resourceKind.trim().toUpperCase();if(!l.includes(e))throw Error("Action Center resource kind is invalid");let n=await (0,r.U)(),a=null;if("PLAN"===e||"SESSION"===e){let t=await n.agentRun.findUnique({where:{id:A.resourceId},select:{id:!0,kind:!0,status:!0,finishedAt:!0,updatedAt:!0}});t?.kind===e&&"FAILED"===t.status&&(a=h(e,t.id,t.finishedAt??t.updatedAt))}else if("WORKFLOW"===e){let e=await n.workflowRun.findUnique({where:{id:A.resourceId},select:{id:!0,status:!0,generation:!0,finishedAt:!0,updatedAt:!0}});e?.status==="FAILED"&&(a=h("WORKFLOW",e.id,e.finishedAt??e.updatedAt,e.generation))}else if("BUILD"===e){let e=await n.build.findUnique({where:{id:A.resourceId},select:{id:!0,status:!0,finishedAt:!0,updatedAt:!0}});e?.status==="FAILED"&&(a=h("BUILD",e.id,e.finishedAt??e.updatedAt))}if(!a||a!==A.failureFingerprint)throw Error("Action Center failure is no longer current");return await n.actionCenterAcknowledgement.upsert({where:{resourceKind_resourceId_failureFingerprint:{resourceKind:e,resourceId:A.resourceId,failureFingerprint:a}},create:{id:(0,t.randomUUID)(),resourceKind:e,resourceId:A.resourceId,failureFingerprint:a},update:{acknowledgedAt:new Date}}),i._H.publish(i.fb,{sidebarStatusChanged:!0}),i._H.publish(i.Wy,{actionCenterChanged:!0}),!0}async dismiss(A){let e=A.resourceKind.trim().toUpperCase();if("BUILD"!==e)throw Error("Only unrun builds can be dismissed");let n=await (0,r.U)(),a=await n.build.findUnique({where:{id:A.resourceId},include:{artifacts:{select:{kind:!0}},deployments:{select:{id:!0}},worktree:{select:{id:!0,availability:!0,missingAt:!0}}}});if(!a||"SUCCEEDED"!==a.status||!a.worktree||a.worktree.missingAt||"AVAILABLE"!==a.worktree.availability||!a.artifacts.some(A=>"RUNNABLE_APP"===A.kind)||a.deployments.length>0)throw Error("Action Center item is no longer dismissible");if(a.worktreeId&&a.configurationId){let A=await n.build.findFirst({where:{worktreeId:a.worktreeId,configurationId:a.configurationId,destinationType:a.destinationType},orderBy:[{createdAt:"desc"},{id:"desc"}],select:{id:!0}});if(A?.id!==a.id)throw Error("Action Center item is no longer dismissible")}let s=C(a.id);if(s!==A.dismissalFingerprint)throw Error("Action Center dismissal is no longer current");return await n.actionCenterAcknowledgement.upsert({where:{resourceKind_resourceId_failureFingerprint:{resourceKind:e,resourceId:a.id,failureFingerprint:s}},create:{id:(0,t.randomUUID)(),resourceKind:e,resourceId:a.id,failureFingerprint:s},update:{acknowledgedAt:new Date}}),i._H.publish(i.fb,{sidebarStatusChanged:!0}),i._H.publish(i.Wy,{actionCenterChanged:!0}),!0}subscribe(){return i._H.iterate(i.Wy)}subscribeSettings(){return i._H.iterate(i.FJ)}}],161725)},800439,A=>{A.i(161725),A.s([])},118387,206135,923068,963541,904342,430361,242311,927305,530648,454228,A=>{var e=A.i(380592),t=A.i(666680),r=A.i(750227),i=A.i(742281),n=A.i(676067);let a="cli.health";function s(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function o(A,e){let t=`cli.health checks[${e}]`,r=s(A,t),i=new Set(["id","name","command","builtIn"]),n=Object.keys(r).find(A=>!i.has(A));if(n)throw Error(`Unexpected ${t} field: ${n}`);for(let A of["id","name","command"])if("string"!=typeof r[A]||0===r[A].length)throw Error(`${t}.${A} must be a non-empty string`);if("boolean"!=typeof r.builtIn)throw Error(`${t}.builtIn must be a boolean`);if(r.id.length>100)throw Error(`${t}.id is too long`);if(r.name.length>100)throw Error(`${t}.name is too long`);if(r.command.length>4096||r.command.includes("\0"))throw Error(`${t}.command is invalid`);return r}function l(A){let e=s(A,"cli.health payload"),t=Object.keys(e).find(A=>"checks"!==A);if(t)throw Error(`Unexpected cli.health payload field: ${t}`);if(!Array.isArray(e.checks))throw Error("cli.health payload.checks must be an array");if(e.checks.length>27)throw Error("cli.health supports at most 27 checks");let r=e.checks.map(o);if(new Set(r.map(A=>A.id)).size!==r.length)throw Error("cli.health check identifiers must be unique");return{checks:r}}A.s(["U",0,a,"A",0,l],206135);var c=A.i(96945);let d="ios.crash.symbolicate",u=[d];function g(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function h(A,e,t=4e3){if("string"!=typeof A||!A.trim()||A.length>t)throw Error(`${e} must be a non-empty string of at most ${t} characters`);return A}function C(A,e){return null==A?null:h(A,e,2e4)}function p(A,e,t){if(!Array.isArray(A))throw Error(`${e} must be an array`);if(A.length>t)throw Error(`${e} may hold at most ${t} entries`);return A}function I(A,e){let t=h(A,e,32);if(!/^0x[0-9a-f]+$/i.test(t))throw Error(`${e} must be a 0x hexadecimal offset`);return`0x${t.slice(2).toLowerCase()}`}function m(A){let e=A.replaceAll("-","").replace(/^<|>$/g,"").trim();if(!/^[0-9a-f]{32}$/i.test(e))throw Error(`${A} is not a binary image UUID`);return e.toUpperCase()}function f(A){let e=g(A,"crash symbolication payload"),t=p(e.dsyms,"dsyms",200).map((A,e)=>{let t=g(A,`dsyms[${e}]`),r=h(t.sha256,`dsyms[${e}].sha256`,64);if(!/^[0-9a-f]{64}$/.test(r))throw Error(`dsyms[${e}].sha256 must be a sha256 digest`);let i=t.sizeBytes;if("number"!=typeof i||!Number.isSafeInteger(i)||i<1)throw Error(`dsyms[${e}].sizeBytes must be a positive integer`);let n=h(t.downloadPath,`dsyms[${e}].downloadPath`);if(!n.startsWith("/api/agent/dsyms/"))throw Error(`dsyms[${e}].downloadPath is not an agent route`);return{dsymId:h(t.dsymId,`dsyms[${e}].dsymId`,200),sha256:r,sizeBytes:i,binaryName:function(A,e){let t=h(A,e,255);if(t.includes("/")||t.includes("\\")||".."===t)throw Error(`${e} must be a plain file name`);return t}(t.binaryName,`dsyms[${e}].binaryName`),downloadPath:n}}),r=new Set(t.map(A=>A.dsymId)),i=0,n=p(e.lookups,"lookups",200).map((A,e)=>{let t=g(A,`lookups[${e}]`),n=h(t.dsymId,`lookups[${e}].dsymId`);if(!r.has(n))throw Error(`lookups[${e}].dsymId is not listed in dsyms`);let a=h(t.arch,`lookups[${e}].arch`,32);if(!/^[a-z0-9_]+$/i.test(a))throw Error(`lookups[${e}].arch is invalid`);let s=p(t.offsets,`lookups[${e}].offsets`,1e4).map((A,t)=>I(A,`lookups[${e}].offsets[${t}]`));if((i+=s.length)>1e4)throw Error("A crash may request at most 10000 offsets");return{dsymId:n,uuid:m(h(t.uuid,`lookups[${e}].uuid`,64)),arch:a,offsets:s}});return{crashId:h(e.crashId,"crashId",200),dsyms:t,lookups:n}}A.s(["v",0,u,"e",0,d,"G",0,300,"P",0,function(A){let e=m(A);return[e.slice(0,8),e.slice(8,12),e.slice(12,16),e.slice(16,20),e.slice(20)].join("-")},"D",0,m,"K",0,f,"Z",0,function(A){let e=g(A,"crash symbolication result");return{lookups:p(e.lookups,"lookups",200).map((A,e)=>{let t=g(A,`lookups[${e}]`);return{dsymId:h(t.dsymId,`lookups[${e}].dsymId`),uuid:m(h(t.uuid,`lookups[${e}].uuid`,64)),results:p(t.results,`lookups[${e}].results`,1e4).map((A,t)=>{let r=`lookups[${e}].results[${t}]`,i=g(A,r);return{offset:I(i.offset,`${r}.offset`),frames:p(i.frames,`${r}.frames`,64).map((A,e)=>{var t;let i,n,a,s;return n=(i=g(A,t=`${r}.frames[${e}]`)).line,a=i.symbolOffset,s=(A,e)=>{if(null==A)return null;if("number"!=typeof A||!Number.isSafeInteger(A)||A<0)throw Error(`${e} must be a non-negative integer`);return A},{symbol:h(i.symbol,`${t}.symbol`,2e4),image:C(i.image,`${t}.image`),file:C(i.file,`${t}.file`),line:s(n,`${t}.line`),symbolOffset:s(a,`${t}.symbolOffset`)}})}}),error:C(t.error,`lookups[${e}].error`)}}),xcodeVersion:C(e.xcodeVersion,"xcodeVersion")}}],923068);var E=A.i(662114),w=A.i(845414);let Q=["MAIN","BASE_REPO","DERIVED_DATA"];function y(A){return A.roles.includes("DERIVED_DATA")}function B(A){return A.filter(A=>y(A))}function D(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function k(A,e){if("string"!=typeof A||!A||A.includes("\0"))throw Error(`${e} must be a non-empty string`);return A}function b(A,e){if("number"!=typeof A||!Number.isFinite(A)||A<0)throw Error(`${e} must be a non-negative finite number`);return A}A.s(["z",0,10,"k",0,40,"H",0,60,"Y",0,120,"h",0,y,"C",0,B,"x",0,function(A){let e=D(A,"disk space report"),t=k(e.observedAt,"disk space report.observedAt");if(Number.isNaN(Date.parse(t)))throw Error("disk space report.observedAt must be an ISO date");if(!Array.isArray(e.volumes)||e.volumes.length>100||!Array.isArray(e.entries)||e.entries.length>1e4||!Array.isArray(e.warnings)||e.warnings.length>1e3)throw Error("disk space report arrays are invalid");let r={observedAt:t,volumes:e.volumes.map((A,e)=>{let t=D(A,`disk space volumes[${e}]`);if(!Array.isArray(t.roles)||!Array.isArray(t.paths))throw Error(`disk space volumes[${e}] arrays are invalid`);let r=k(t.id,`disk space volumes[${e}].id`),i=t.roles.map((A,t)=>{if("string"!=typeof A||!Q.includes(A))throw Error(`disk space volumes[${e}].roles[${t}] is invalid`);return A});return{id:r,capacityId:void 0===t.capacityId?r:k(t.capacityId,`disk space volumes[${e}].capacityId`),totalBytes:b(t.totalBytes,`disk space volumes[${e}].totalBytes`),freeBytes:b(t.freeBytes,`disk space volumes[${e}].freeBytes`),roles:[...new Set(i)],paths:t.paths.map((A,t)=>k(A,`disk space volumes[${e}].paths[${t}]`))}}),entries:e.entries.map((A,e)=>{var t,r;let i=D(A,`disk space entries[${e}]`),n=i.kind;if("string"!=typeof n||!["PROJECT","PENDING","SHARED_CACHE","DEVICE_SUPPORT"].includes(n))throw Error(`disk space entries[${e}].kind is invalid`);let a=k(i.modifiedAt,`disk space entries[${e}].modifiedAt`);if(Number.isNaN(Date.parse(a)))throw Error(`disk space entries[${e}].modifiedAt must be an ISO date`);return{path:k(i.path,`disk space entries[${e}].path`),rootPath:k(i.rootPath,`disk space entries[${e}].rootPath`),name:k(i.name,`disk space entries[${e}].name`),kind:n,workspacePath:(t=i.workspacePath,r=`disk space entries[${e}].workspacePath`,null===t?null:k(t,r)),modifiedAt:a,volumeId:k(i.volumeId,`disk space entries[${e}].volumeId`)}}),warnings:e.warnings.map((A,e)=>k(A,`disk space warnings[${e}]`))};if(Date.parse(r.observedAt)>Date.now()+3e5)throw Error("disk space report.observedAt cannot be in the future");let i=new Set;for(let A of r.volumes){if(i.has(A.id))throw Error(`Duplicate disk space volume id: ${A.id}`);if(A.freeBytes>A.totalBytes)throw Error(`disk space volume ${A.id} free bytes exceed total bytes`);if(!A.roles.length||!A.paths.length)throw Error(`disk space volume ${A.id} must include roles and paths`);i.add(A.id)}let n=new Set;for(let A of r.entries){if(!i.has(A.volumeId))throw Error(`disk space entry ${A.path} references an unknown volume`);if(n.has(A.path))throw Error(`Duplicate disk space entry path: ${A.path}`);n.add(A.path)}return r}],963541);var S=A.i(591135);let R="skills.scan",M="skills.read",O="skills.apply",N=[R,M,O],H=["CURSOR","GITHUB_COPILOT","CODEX","CLAUDE","OPENCODE"],v=["CURSOR","GITHUB_COPILOT","AGENTS","CLAUDE","CODEX_LEGACY","OPENCODE"],T=RegExp("^[a-z0-9]+(?:-[a-z0-9]+)*$");function U(A){let e=(0,t.createHash)("sha256");for(let t of[...A].sort((A,e)=>A.path.localeCompare(e.path)))e.update(t.path),e.update("\0"),e.update(t.executable?"1":"0"),e.update("\0"),e.update(Buffer.from(t.contentsBase64,"base64")),e.update("\0");return e.digest("hex")}function J(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function x(A,e){if("string"!=typeof A||0===A.length)throw Error(`${e} must be a non-empty string`);return A}function _(A,e,t){let r=x(A,t);if(!e.includes(r))throw Error(`${t} is invalid`);return r}function G(A,e){let t=x(A,e);if(t.includes("\0")||t.length>4096)throw Error(`${e} is invalid`);return t}function L(A,e){let t=_(A.scope,["GLOBAL","PROJECT"],`${e}.scope`),r=null===A.folder?null:G(A.folder,`${e}.folder`);if("GLOBAL"===t!=(null===r))throw Error(`${e}.folder must be null only for global skills`);return{scope:t,rootKind:_(A.rootKind,v,`${e}.rootKind`),folder:r}}function P(A,e="skill name"){let t=x(A,e);if(t.length>64||!T.test(t))throw Error(`${e} must use 1-64 lowercase letters, numbers, and single hyphens`);return t}function j(A,e="skill package"){let t=J(A,e),r=P(t.name,`${e}.name`),i=x(t.description,`${e}.description`).trim();if(i.length>1024)throw Error(`${e}.description must be 1-1024 characters`);if(!Array.isArray(t.files)||0===t.files.length||t.files.length>500)throw Error(`${e}.files must contain 1-500 files`);let n=0,a=new Set,s=t.files.map((A,t)=>{let r=J(A,`${e}.files[${t}]`),i=function(A,e="file path"){let t=x(A,e).replaceAll("\\","/");if(t.length>512||t.startsWith("/")||t.endsWith("/")||t.split("/").some(A=>!A||"."===A||".."===A||A.includes("\0")))throw Error(`${e} must stay within the skill directory`);return t}(r.path,`${e}.files[${t}].path`);if(a.has(i))throw Error(`${e} contains duplicate path ${i}`);a.add(i);let s=x(r.contentsBase64,`${e}.files[${t}].contentsBase64`),o=Buffer.from(s,"base64").byteLength;if(o>0xa00000)throw Error(`${i} exceeds the per-file limit`);return n+=o,{path:i,contentsBase64:s,executable:!0===r.executable}});if(!a.has("SKILL.md"))throw Error(`${e} must contain SKILL.md`);if(n>0x1400000)throw Error(`${e} exceeds the package size limit`);let o=function(A){let e=A.replaceAll("\r\n","\n");if(!e.startsWith("---\n"))throw Error("SKILL.md must begin with YAML frontmatter");let t=e.indexOf("\n---",4);if(t<0)throw Error("SKILL.md frontmatter is not closed");let r=e.slice(4,t).split("\n"),i=new Map;for(let A=0;A<r.length;A+=1){let e=/^([A-Za-z][A-Za-z0-9_-]*):(?:\s*(.*))?$/.exec(r[A]??"");if(!e)continue;let t=e[1],n=e[2]??"";if("|"===n||">"===n){let e=[];for(;A+1<r.length&&/^(?:\s+|$)/.test(r[A+1]??"");)e.push((r[A+=1]??"").replace(/^\s+/,""));i.set(t,">"===n?e.join(" ").trim():e.join("\n").trim())}else i.set(t,function(A){let e=A.trim();if(e.startsWith('"')&&e.endsWith('"'))try{return JSON.parse(e)}catch{return e.slice(1,-1)}return e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1).replaceAll("''","'"):e}(n))}let n=P(i.get("name"),"SKILL.md name"),a=(i.get("description")??"").trim();if(!a||a.length>1024)throw Error("SKILL.md description must be 1-1024 characters");return{name:n,description:a}}(Buffer.from(s.find(A=>"SKILL.md"===A.path).contentsBase64,"base64").toString("utf8"));if(o.name!==r||o.description!==i)throw Error(`${e} metadata must match SKILL.md frontmatter`);let l=x(t.packageHash,`${e}.packageHash`);if(U(s)!==l)throw Error(`${e}.packageHash does not match its files`);return{name:r,description:i,packageHash:l,files:s}}function Y(A){let e=J(A,"skills.scan payload");if(!Array.isArray(e.tools)||!Array.isArray(e.targets))throw Error("skills.scan requires tools and targets arrays");return{tools:[...new Set(e.tools.map((A,e)=>_(A,H,`tools[${e}]`)))],targets:e.targets.slice(0,2e3).map((A,e)=>{var t,r;let i=J(A,`targets[${e}]`);return{codebaseId:x(i.codebaseId,`targets[${e}].codebaseId`),worktreeId:(t=i.worktreeId,r=`targets[${e}].worktreeId`,null===t?null:x(t,r)),folder:G(i.folder,`targets[${e}].folder`)}})}}function F(A){let e=J(A,"skills.read payload"),t=Y(e);if(!Array.isArray(e.requests))throw Error("skills.read requires requests");return{...t,requests:e.requests.slice(0,200).map((A,e)=>{let t=J(A,`requests[${e}]`);return{...L(t,`requests[${e}]`),skillName:P(t.skillName,`requests[${e}].skillName`)}})}}function K(A){let e=J(A,"skills.apply payload");if(!Array.isArray(e.operations))throw Error("skills.apply requires operations");return{operations:e.operations.slice(0,500).map((A,e)=>{let t=J(A,`operations[${e}]`),r=L(t,`operations[${e}]`);if("WRITE"===t.kind)return{kind:"WRITE",...r,package:j(t.package,`operations[${e}].package`),manageGitExclude:!0===t.manageGitExclude};if("DELETE"===t.kind)return{kind:"DELETE",...r,skillName:P(t.skillName,`operations[${e}].skillName`),manageGitExclude:!0===t.manageGitExclude};throw Error(`operations[${e}].kind is invalid`)})}}A.s(["a",0,H,"$",0,O,"N",0,N,"d",0,M,"G",0,R,"M",0,U,"o",0,K,"B",0,j,"c",0,F,"q",0,Y],904342);let q="runs.session.read",V=["CLAUDE","CODEX"];function z(A){if("string"==typeof A)try{return z(JSON.parse(A))}catch{return{}}return A&&"object"==typeof A&&!Array.isArray(A)?A:{}}function W(A){let e=z(A),t={};for(let A of["nativeTranscriptPath","activityLogPath","workingDirectory"]){let r=e[A];(null===r||"string"==typeof r&&r.trim())&&(t[A]=r)}return t}function $(A){let e=z(A),t=z(e.location),r={...W({nativeTranscriptPath:e.path,workingDirectory:e.cwd??t.directory}),...W(e.aideSessionInfo)};return Object.keys(r).length?r:null}function Z(A,e){if("string"!=typeof A||0===A.length)throw Error(`${e} must be a non-empty string`);return A}function X(A){let e=function(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}(A,"runs.session.read payload"),t=Z(e.provider,"provider");if(!V.includes(t))throw Error(`Unsupported session file provider: ${t}`);let r=Z(e.nativeId,"nativeId");if(/[/\\]/.test(r)||r.includes(".."))throw Error("nativeId contains invalid path characters");return{provider:t,nativeId:r,folder:Z(e.folder,"folder")}}A.s(["l",0,q,"r",0,$,"B",0,function(A,e){let t=z(A),r={...$(t),...W(e)};return{...t,...Object.keys(r).length?{aideSessionInfo:r}:{}}},"X",0,W,"G",0,X,"t",0,z],430361);let AA="ios.signing.assets.scan",Ae="ios.signing.profile.read",At="ios.signing.profile.install",Ar="ios.signing.profile.delete",Ai="ios.signing.identity.import",An="ios.signing.identity.delete",Aa=[AA,Ae,At,Ar,Ai,An];function As(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function Ao(A,e){if("string"!=typeof A||!A.trim()||A.includes("\0"))throw Error(`${e} must be a non-empty string`);return A}function Al(A,e){return null===A?null:Ao(A,e)}function Ac(A,e){if(!Array.isArray(A))throw Error(`${e} must be an array`);return A.map((A,t)=>Ao(A,`${e}[${t}]`))}function Ad(A,e){if("boolean"!=typeof A)throw Error(`${e} must be a boolean`);return A}function Au(A,e){let t=Al(A,e);if(null!==t&&!Number.isFinite(Date.parse(t)))throw Error(`${e} must be an ISO-8601 date`);return t}function Ag(A,e,t){let r=Object.keys(A).find(A=>!e.includes(A));if(r)throw Error(`Unexpected ${t} field: ${r}`)}function Ah(A){return Ag(As(A,"signing scan payload"),[],"signing scan payload"),{}}function AC(A){let e=As(A,"signing profile payload");return Ag(e,["uuid"],"signing profile payload"),{uuid:Ao(e.uuid,"signing profile payload.uuid")}}function Ap(A){let e=As(A,"signing profile install payload");Ag(e,["contentBase64"],"signing profile install payload");let t=Ao(e.contentBase64,"signing profile install payload.contentBase64");if(t.length>2097152)throw Error("Provisioning profile payload is too large");return{contentBase64:t}}function AI(A){let e=As(A,"signing identity import payload");Ag(e,["transferId","sha256"],"signing identity import payload");let t=Ao(e.sha256,"signing identity import sha256");if(!/^[A-Fa-f0-9]{64}$/.test(t))throw Error("Signing identity import SHA-256 is invalid");return{transferId:Ao(e.transferId,"signing identity transfer ID"),sha256:t.toUpperCase()}}function Am(A){let e=As(A,"signing identity delete payload");Ag(e,["sha1"],"signing identity delete payload");let t=Ao(e.sha1,"signing identity SHA-1");if(!/^[A-Fa-f0-9]{40}$/.test(t))throw Error("Signing identity SHA-1 is invalid");return{sha1:t.toUpperCase()}}A.s(["I",0,AA,"$",0,Aa,"A",0,An,"s",0,Ai,"j",0,Ar,"l",0,At,"X",0,Ae,"L",0,function(A){let e=As(A,"signing assets result");if(!Array.isArray(e.profiles)||!Array.isArray(e.certificates)||!Array.isArray(e.warnings))throw Error("Signing assets result arrays are invalid");return{profiles:e.profiles.map((A,e)=>{let t=As(A,`signing profiles[${e}]`),r=Ao(t.profileType,`signing profiles[${e}].profileType`);if(!["DEVELOPMENT","AD_HOC","ENTERPRISE","APP_STORE"].includes(r))throw Error(`signing profiles[${e}].profileType is invalid`);let i=t.deviceCount;if("number"!=typeof i||!Number.isInteger(i)||i<0)throw Error(`signing profiles[${e}].deviceCount is invalid`);return{uuid:Ao(t.uuid,`signing profiles[${e}].uuid`),contentHash:Ao(t.contentHash,`signing profiles[${e}].contentHash`),name:Ao(t.name,`signing profiles[${e}].name`),profileType:r,bundleId:Ao(t.bundleId,`signing profiles[${e}].bundleId`),teamId:Al(t.teamId,`signing profiles[${e}].teamId`),teamName:Al(t.teamName,`signing profiles[${e}].teamName`),platforms:Ac(t.platforms,`signing profiles[${e}].platforms`),deviceCount:i,deviceUdids:void 0===t.deviceUdids?[]:Ac(t.deviceUdids,`signing profiles[${e}].deviceUdids`),certificateSha1s:Ac(t.certificateSha1s,`signing profiles[${e}].certificateSha1s`),createdAt:Au(t.createdAt,`signing profiles[${e}].createdAt`),expiresAt:Au(t.expiresAt,`signing profiles[${e}].expiresAt`),expired:Ad(t.expired,`signing profiles[${e}].expired`),xcodeManaged:Ad(t.xcodeManaged,`signing profiles[${e}].xcodeManaged`)}}),certificates:e.certificates.map((A,e)=>{let t=As(A,`signing certificates[${e}]`);return{sha1:Ao(t.sha1,`signing certificates[${e}].sha1`),sha256:Al(t.sha256,`signing certificates[${e}].sha256`),name:Ao(t.name,`signing certificates[${e}].name`),teamId:Al(t.teamId,`signing certificates[${e}].teamId`),certificateType:Al(t.certificateType,`signing certificates[${e}].certificateType`),notBefore:Au(t.notBefore,`signing certificates[${e}].notBefore`),expiresAt:Au(t.expiresAt,`signing certificates[${e}].expiresAt`),expired:Ad(t.expired,`signing certificates[${e}].expired`),hasPrivateKey:Ad(t.hasPrivateKey,`signing certificates[${e}].hasPrivateKey`)}}),warnings:Ac(e.warnings,"signing warnings")}},"E",0,Am,"d",0,AI,"C",0,Ap,"n",0,AC,"t",0,Ah],242311);let Af="workflow.terminal.run",AE="workflow.git.checkpoint",Aw=[Af,AE];function AQ(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function Ay(A,e,t=1e4){if("string"!=typeof A||!A.length||A.length>t)throw Error(`${e} must be a non-empty string of at most ${t} characters`);return A}function AB(A,e){return null==A?null:Ay(A,e)}function AD(A){let e=AQ(A,"workflow terminal payload"),t=Ay(e.interpreter??"SHELL","interpreter");if("SHELL"!==t&&"NODE"!==t)throw Error("interpreter must be SHELL or NODE");let r=Object.fromEntries(Object.entries(AQ(e.environment??{},"environment")).map(([A,e])=>{if(!/^[A-Z_][A-Z0-9_]*$/.test(A))throw Error(`Invalid environment variable name: ${A}`);return[A,Ay(e,`environment.${A}`,1e5)]})),i=Array.isArray(e.credentialEnvironment)?e.credentialEnvironment:[];return{workflowRunId:Ay(e.workflowRunId,"workflowRunId",200),stepAttemptId:Ay(e.stepAttemptId,"stepAttemptId",200),stepId:Ay(e.stepId,"stepId",200),codebaseId:Ay(e.codebaseId,"codebaseId",200),worktreeId:AB(e.worktreeId,"worktreeId"),cwd:Ay(e.cwd,"cwd",1e4),script:Ay(e.script,"script",1e6),interpreter:t,sessionData:AQ(e.sessionData,"sessionData"),environment:r,credentialEnvironment:i.map((A,e)=>{let t=AQ(A,`credentialEnvironment[${e}]`),r=AQ(t.credential,`credentialEnvironment[${e}].credential`),i=Ay(t.name,`credentialEnvironment[${e}].name`,200);if(!/^[A-Z_][A-Z0-9_]*$/.test(i))throw Error(`Invalid credential environment variable name: ${i}`);return{name:i,credential:{id:Ay(r.id,`credentialEnvironment[${e}].credential.id`,1e3),kind:Ay(r.kind,`credentialEnvironment[${e}].credential.kind`,200),ownerId:AB(r.ownerId,`credentialEnvironment[${e}].credential.ownerId`)}}})}}function Ak(A){let e=AQ(A,"workflow checkpoint payload"),t=Ay(e.operation,"operation");if(!new Set(["CAPTURE","COMPARE","RESTORE"]).has(t))throw Error("checkpoint operation is invalid");let r=function(A){if(null==A)return null;let e=AQ(A,"checkpoint");return{headSha:AB(e.headSha,"checkpoint.headSha"),branch:AB(e.branch,"checkpoint.branch"),upstreamSha:AB(e.upstreamSha,"checkpoint.upstreamSha"),indexTree:AB(e.indexTree,"checkpoint.indexTree"),worktreeTree:AB(e.worktreeTree,"checkpoint.worktreeTree"),refName:AB(e.refName,"checkpoint.refName")}}(e.checkpoint);if("CAPTURE"!==t&&!r)throw Error(`${t} requires a checkpoint`);return{operation:t,workflowRunId:Ay(e.workflowRunId,"workflowRunId",200),stepAttemptId:Ay(e.stepAttemptId,"stepAttemptId",200),cwd:Ay(e.cwd,"cwd",1e4),kind:Ay(e.kind,"kind",100),checkpoint:r,stash:!0===e.stash}}A.s(["Q",0,AE,"p",0,Aw,"e",0,Af,"P",0,Ak,"r",0,AD],927305);let Ab="tailscale.serve.inspect.v1",AS="tailscale.serve.upsert.v1",AR="tailscale.serve.remove.v1",AM=[Ab,AS,AR],AO=["HTTP","HTTPS","TCP","TLS_TERMINATED_TCP"],AN=["HTTP","HTTPS","HTTPS_INSECURE","TCP"],AH=["NONE","V1","V2"];function Av(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function AT(A,e,t){let r=Object.keys(A).find(A=>!e.includes(A));if(r)throw Error(`Unexpected ${t} field: ${r}`)}function AU(A,e){if("string"!=typeof A||0===A.trim().length||A.includes("\0"))throw Error(`${e} must be a non-empty string`);return A.trim()}function AJ(A,e){if(!Number.isInteger(A)||A<1||A>65535)throw Error(`${e} must be an integer from 1 through 65535`);return A}function Ax(A,e,t){if("string"!=typeof A||!e.includes(A))throw Error(`${t} is invalid`);return A}function A_(A){if("string"!=typeof A||A.includes("\0")||A.includes("?"))throw Error("Tailscale mount path is invalid");let e=A.trim()||"/",t=e.startsWith("/")?e:`/${e}`;return"/"===t?t:t.replace(/\/+$/,"")}function AG(A){let e=Av(A,"Tailscale Serve route");AT(e,["protocol","listenPort","mountPath","destination","funnel","appCapabilities","proxyProtocol"],"Tailscale Serve route");let t=Ax(e.protocol,AO,"Tailscale Serve protocol"),r=AJ(e.listenPort,"Tailscale listen port"),i=Av(e.destination,"Tailscale Serve destination");AT(i,["protocol","port","path"],"Tailscale Serve destination");let n=Ax(i.protocol,AN,"Tailscale destination protocol"),a=e.funnel;if("boolean"!=typeof a)throw Error("Tailscale Funnel must be a boolean");let s=Ax(e.proxyProtocol,AH,"Tailscale PROXY protocol"),o=function(A){if(!Array.isArray(A)||A.length>100)throw Error("Tailscale app capabilities must be an array");let e=/^(?:[\p{L}\p{N}-]+\.)+[\p{L}\p{N}-]+\/[\p{L}\p{N}-]+(?:\/[\p{L}\p{N}-]+)*$/u;return[...new Set(A.map((A,t)=>{let r=AU(A,`Tailscale app capabilities[${t}]`);if(!e.test(r))throw Error(`Tailscale app capabilities[${t}] must use domain/name format`);return r}))].sort()}(e.appCapabilities),l="HTTP"===t||"HTTPS"===t;if(l&&"TCP"===n)throw Error("Web listeners require an HTTP(S) destination");if(!l&&"TCP"!==n)throw Error("TCP listeners require a TCP destination");if(!l&&"/"!==A_(e.mountPath))throw Error("TCP listeners do not support mount paths");if(a&&("HTTP"===t||![443,8443,1e4].includes(r)))throw Error("Funnel requires HTTPS or TLS TCP on port 443, 8443, or 10000");if(o.length&&(!l||a))throw Error("App capabilities are supported only by private HTTP(S) listeners");if("NONE"!==s&&"TCP"!==t)throw Error("PROXY protocol is supported only by TCP listeners");return{protocol:t,listenPort:r,mountPath:l?A_(e.mountPath):"/",destination:{protocol:n,port:AJ(i.port,"Tailscale destination port"),path:l?function(A){if("string"!=typeof A||A.includes("\0"))throw Error("Tailscale destination path is invalid");let e=A.trim();return e?e.startsWith("/")?e:`/${e}`:""}(i.path):""},funnel:a,appCapabilities:o,proxyProtocol:s}}function AL(A){let e=Av(A,"Tailscale Serve inspect payload");return AT(e,["operationId"],"Tailscale Serve inspect payload"),{operationId:AU(e.operationId,"operationId")}}function AP(A,e){let t=Av(A,"Tailscale Serve mutation payload");if(AT(t,["operationId","templateId","revision","route",...e?["previousRoute"]:[]],"Tailscale Serve mutation payload"),!Number.isInteger(t.revision)||t.revision<1)throw Error("Tailscale template revision must be a positive integer");return{operationId:AU(t.operationId,"operationId"),templateId:AU(t.templateId,"templateId"),revision:t.revision,route:AG(t.route)}}function Aj(A){return{...AP(A,!0),previousRoute:null===A.previousRoute?null:AG(A.previousRoute)}}function AY(A){return AP(A,!1)}A.s(["m",0,Ab,"d",0,AM,"k",0,AR,"o",0,AS,"e",0,AG,"f",0,function(A){let e=AG(A);return`${e.protocol}:${e.listenPort}:${e.mountPath}`},"h",0,function(A){let e=AG(A);return(0,t.createHash)("sha256").update(JSON.stringify(e)).digest("hex")},"N",0,AL,"A",0,AY,"K",0,Aj],530648);var AF=A.i(135475);let AK={status:{in:["QUEUED","RUNNING"]},NOT:{kind:{startsWith:"ios."}},OR:[{kind:{notIn:[n.U,Af]}},{kind:{in:[n.U,Af]},blocksGitOperations:!0}]};class Aq extends Error{constructor(A="Another operation is active for this codebase"){super(A),this.name="CodebaseBusyError"}}function AV(A){return A instanceof Error&&"CodebaseBusyError"===A.name}function Az(A){if(AV(A)||A instanceof Error&&A.message.includes("AgentJob_codebaseId_active_key"))return!0;if(!A||"object"!=typeof A||"P2002"!==A.code)return!1;let e=A.meta?.target;return Array.isArray(e)?e.includes("codebaseId"):"string"==typeof e&&e.includes("codebaseId")}A.s(["i",0,AK,"S",0,Aq,"G",0,Az,"D",0,AV],454228);var AW=A.i(848201);let A$=["QUEUED","RUNNING","CANCELLING"],AZ=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]);function AX(A){return Math.max(45e3,(A.heartbeatIntervalSeconds??i.e)*3e3)}function A0(A){return(0,t.createHash)("sha256").update(A).digest("hex")}function A4(A,e,t,r){if(!Number.isInteger(A)||A<t||A>r)throw Error(`${e} must be an integer from ${t} to ${r} seconds`);return A}function A1(A){AW._H.publish(AW.uV,{agentChanged:A})}function A8(A){AW._H.publish((0,AW.BC)(A.id),{agentJobChanged:A}),A.ccusageCollectionId&&AW._H.publish((0,AW.Xq)(A.ccusageCollectionId),{ccusageCollectionChanged:{id:A.ccusageCollectionId}}),A.buildDataCollectionId&&AW._H.publish((0,AW.I2)(A.buildDataCollectionId),{buildDataCollectionChanged:{id:A.buildDataCollectionId}})}[n.U,i._,...c.I,...u,...w.$,...S.P,...e.m,...N,...E._,...Aa,...Aw,...AM],A.s(["b",0,class{completionHandlers=new Map;completionObservers=new Set;connectionHandlers=new Set;signingSecretTransfers=new Map;createSigningSecretTransfer(A,e,r=3e5){if(!e.p12Base64||e.p12Base64.length>0x2000000)throw Error("Signing identity transfer is empty or too large");let i=(0,t.randomUUID)(),n=Date.now()+Math.max(3e4,Math.min(r,9e5));return this.signingSecretTransfers.set(i,{agentId:A,...e,expiresAt:n}),setTimeout(()=>{let A=this.signingSecretTransfers.get(i);A?.expiresAt===n&&this.signingSecretTransfers.delete(i)},n-Date.now()).unref(),i}claimSigningSecretTransfer(A,e){let t=this.signingSecretTransfers.get(e);if(this.signingSecretTransfers.delete(e),!t||t.expiresAt<=Date.now())throw Error("Signing secret transfer is missing or expired");if(t.agentId!==A)throw Error("Signing secret transfer belongs to another agent");return{p12Base64:t.p12Base64,passphrase:t.passphrase}}revokeSigningSecretTransfer(A){this.signingSecretTransfers.delete(A)}registerCompletionHandler(A,e){this.completionHandlers.set(A,e)}registerCompletionObserver(A){this.completionObservers.add(A)}registerConnectionHandler(A){this.connectionHandlers.add(A)}async notifyConnected(A){await Promise.allSettled([...this.connectionHandlers].map(e=>e(A)))}async requestCodebaseReconcile(A){let e=[...new Set(A.filter(Boolean))];if(!e.length)return 0;let t=await (0,AF.U)(),r=(await t.agent.findMany({where:{id:{in:e}},select:{id:!0,capabilitiesJson:!0}})).filter(A=>(function(A){try{let e=JSON.parse(A);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}})(A.capabilitiesJson).includes(S.Q));for(let A of r)AW._H.publish((0,AW.CO)(A.id),{agentEvents:{type:"CODEBASE_RECONCILE_REQUESTED",job:null}});return r.length}requestDiskSpacePoll(A){AW._H.publish((0,AW.CO)(A),{agentEvents:{type:"DISK_SPACE_POLL_REQUESTED",job:null}})}requestAgentConfigurationRefresh(A){AW._H.publish((0,AW.CO)(A),{agentEvents:{type:"AGENT_CONFIGURATION_CHANGED",job:null}})}async projectCompletion(A){await this.completionHandlers.get(A.kind)?.(A),await Promise.allSettled([...this.completionObservers].map(e=>e(A)))}async authenticate(A){if(!A)return null;let e=await (0,AF.U)(),t=await e.agent.findUnique({where:{secretHash:A0(A)},select:{id:!0}});return t?.id??null}async createEnrollmentToken(A=15){let e=Math.max(1,Math.min(A,1440)),r=`enroll_${(0,t.randomBytes)(32).toString("base64url")}`,i=new Date(Date.now()+6e4*e),n=await (0,AF.U)();return await n.agentEnrollmentToken.create({data:{id:(0,t.randomUUID)(),tokenHash:A0(r),expiresAt:i}}),{token:r,expiresAt:i}}async enroll(A){let e=await (0,AF.U)(),r=`agent_${(0,t.randomBytes)(32).toString("base64url")}`,i=new Date,n=await e.$transaction(async e=>{if(1!==(await e.agentEnrollmentToken.updateMany({where:{tokenHash:A0(A.enrollmentToken),usedAt:null,expiresAt:{gt:i}},data:{usedAt:i}})).count)throw Error("Enrollment token is invalid, expired, or already used");let n=await e.agent.create({data:{id:(0,t.randomUUID)(),name:A.name.trim()||A.hostname,hostname:A.hostname,version:A.version,osVersion:A.osVersion,architecture:A.architecture,cpuModel:A.cpuModel,memoryTotalBytes:A.memoryTotalBytes,memoryFreeBytes:A.memoryFreeBytes,diskTotalBytes:A.diskTotalBytes,diskFreeBytes:A.diskFreeBytes,capabilitiesJson:JSON.stringify(A.capabilities),defaultBuildsDirectory:A.defaultBuildsDirectory??null,secretHash:A0(r),ipAddress:A.ipAddress,lastSeenAt:i}});return await e.agentAuditEvent.create({data:{id:(0,t.randomUUID)(),agentId:n.id,action:"agent.enrolled",ipAddress:A.ipAddress}}),n});return A1(n),await this.notifyConnected(n.id),{agent:n,credential:r}}async heartbeat(A,e){let t=await (0,AF.U)(),r=await t.agent.findUnique({where:{id:A},select:{lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),i=new Date,n=!r?.lastSeenAt||null!==r.disconnectedAt||i.getTime()-r.lastSeenAt.getTime()>AX(r),a=await t.agent.update({where:{id:A},data:{version:e.version,osVersion:e.osVersion,architecture:e.architecture,cpuModel:e.cpuModel??void 0,memoryTotalBytes:e.memoryTotalBytes??void 0,memoryFreeBytes:e.memoryFreeBytes??void 0,diskTotalBytes:e.diskTotalBytes??void 0,diskFreeBytes:e.diskFreeBytes??void 0,capabilitiesJson:JSON.stringify(e.capabilities),defaultBuildsDirectory:e.defaultBuildsDirectory??void 0,ipAddress:e.ipAddress??void 0,lastSeenAt:i,disconnectedAt:null}});return A1(a),n&&await this.notifyConnected(a.id),a}async listAgents(){return(await (0,AF.U)()).agent.findMany({orderBy:{createdAt:"desc"}})}async getAgent(A){return(await (0,AF.U)()).agent.findUnique({where:{id:A}})}async cadenceSettings(A){let t=await (0,AF.U)(),[r,n]=await Promise.all([t.agent.findUnique({where:{id:A},select:{id:!0,codebaseScanIntervalSeconds:!0,jobReconciliationIntervalSeconds:!0,gitFetchIntervalSeconds:!0,heartbeatIntervalSeconds:!0}}),t.codebaseSettings.findUnique({where:{id:"default"}})]);if(!r)throw Error("Agent not found");return{agentId:r.id,codebaseScanIntervalSeconds:r.codebaseScanIntervalSeconds??n?.refreshIntervalSeconds??S.j,jobReconciliationIntervalSeconds:r.jobReconciliationIntervalSeconds??i.F,gitFetchIntervalSeconds:r.gitFetchIntervalSeconds??n?.fetchIntervalSeconds??e.v,heartbeatIntervalSeconds:r.heartbeatIntervalSeconds??i.e}}async updateCadenceSettings(A,t){let r={codebaseScanIntervalSeconds:A4(t.codebaseScanIntervalSeconds,"Codebase scan interval",S.f,S.k),jobReconciliationIntervalSeconds:A4(t.jobReconciliationIntervalSeconds,"Durable job reconciliation interval",i.V,i.K),gitFetchIntervalSeconds:A4(t.gitFetchIntervalSeconds,"Git fetch interval",e.M,e.h),heartbeatIntervalSeconds:A4(t.heartbeatIntervalSeconds,"Agent heartbeat interval",i.U,i.Q)},n=await (0,AF.U)();return A1(await n.agent.update({where:{id:A},data:r})),AW._H.publish((0,AW.CO)(A),{agentEvents:{type:"AGENT_CONFIGURATION_CHANGED",job:null}}),this.cadenceSettings(A)}async deleteAgent(A){let e=await (0,AF.U)();return!!await e.agent.findUnique({where:{id:A}})&&(await e.agent.delete({where:{id:A}}),!0)}async renameAgent(A,e){let t=e.trim();if(!t||t.length>200)throw Error("Agent name must be between 1 and 200 characters");let r=await (0,AF.U)();if(!await r.agent.findUnique({where:{id:A}}))throw Error("Agent not found");let i=await r.agent.update({where:{id:A},data:{name:t}});return A1(i),i}async updateBaseRepoDirectory(A,e){if(null!==e&&(!e||e.length>4096||e.includes("\0")||!r.posix.isAbsolute(e)&&!r.win32.isAbsolute(e)))throw Error("Base repository directory must be an absolute path");let t=await (0,AF.U)(),i=await t.agent.update({where:{id:A},data:{baseRepoDirectory:e}});return A1(i),this.requestAgentConfigurationRefresh(A),i}async updateBuildsDirectory(A,e){if(null!==e&&(!e||e.length>4096||e.includes("\0")||!r.posix.isAbsolute(e)&&!r.win32.isAbsolute(e)))throw Error("Builds directory must be an absolute path");let t=await (0,AF.U)(),i=await t.agent.update({where:{id:A},data:{buildsDirectory:e}});return A1(i),this.requestAgentConfigurationRefresh(A),i}async updateDerivedDataSettings(A,e,t){let i=(0,w.Z)(e),n=t?.trim()||null;if(n?.includes("\0")||(n?.length??0)>4096)throw Error("Derived Data path is invalid");if("DEFAULT"===i&&null!==n)throw Error("Default Derived Data mode does not accept a path");if("ABSOLUTE"===i&&(!n||!r.posix.isAbsolute(n)&&!r.win32.isAbsolute(n)))throw Error("Custom Derived Data directory must be an absolute path");if("RELATIVE"===i){let A=n?.replaceAll("\\","/")??"";if(!A||r.posix.isAbsolute(A)||r.win32.isAbsolute(A)||"."===A||A.split("/").some(A=>!A||"."===A||".."===A))throw Error("Relative Derived Data path must stay within each worktree")}let a=await (0,AF.U)(),s=await a.agent.update({where:{id:A},data:{derivedDataLocationMode:i,derivedDataPath:n}});return A1(s),this.requestAgentConfigurationRefresh(A),s}async listJobs(A,e=50,t=!1){return(await (0,AF.U)()).agentJob.findMany({where:{agentId:A,...t?{}:{visibility:"USER"}},orderBy:{createdAt:"desc"},take:Math.max(1,Math.min(e,200))})}async getJobs(A){let e=[...new Set(A)];if(e.length>200)throw Error("At most 200 jobs may be requested at once");return e.length?(await (0,AF.U)()).agentJob.findMany({where:{id:{in:e}}}):[]}async getJob(A){return(await (0,AF.U)()).agentJob.findUnique({where:{id:A}})}async createJob(A){let r;if(!function(A,t){let r=function(A){if(!A||"object"!=typeof A||Array.isArray(A))throw Error("Job payload must be an object");return A}(t);if(A===a)return l(r);if(A===n.U)return(0,n.O)(r);if(A===c.n)return(0,c.a)(r);if(A===d)return f(r);if(A===w.F)return(0,w.S)(r);if(A===w.G)return(0,w.T)(r);if(A===w.t)return(0,w.A)(r);if(A===S.l)return(0,S.K)(r);if(A===S.X||A===S.L)return(0,S.x)(r);if(A===S.Z||A===S.r||A===S.B)return(0,S.D)(r);if(A===S.W)return(0,S.b)(r);if(A===S.H)return(0,S.z)(r);if(A===S.p)return(0,S.y)(r);if(A===e.Q)return(0,e.s)(r);if(A===e.B)return(0,e.A)(r);if(A===e.T)return(0,e.b)(r);if(A===e.W)return(0,e.t)(r);if(A===e.R)return(0,e.E)(r);if(A===e.Z)return(0,e.z)(r);if(A===e.V)return(0,e.e)(r);if(A===e.o)return(0,e.p)(r);if(A===e.U||A===e.L)return(0,e.j)(r);if(A===e.H||A===e.l)return(0,e.Y)(r);if(A===e.r)return(0,e.x)(r);if(A===e.d)return(0,e.c)(r);if(A===e.I)return(0,e._)(r);if(A===R)return Y(t);if(A===M)return F(t);if(A===q)return X(t);if(A===Af)return AD(t);if(A===AE)return Ak(t);if(A===O)return K(t);if(A===AA)return Ah(t);if(A===Ae||A===Ar)return AC(t);if(A===At)return Ap(t);if(A===Ai)return AI(t);if(A===An)return Am(t);if(A===E.i)return(0,E.n)(t);if(A===E.F)return(0,E.W)(t);if(A===E.U)return(0,E.g)(t);if(A===E.J)return(0,E.O)(t);if(A===E.r)return(0,E.l)(t);if(A===E.o)return(0,E.m)(t);if(A===E.d)return(0,E.L)(t);if(A===E.f)return(0,E.I)(t);if(A===E.z)return(0,E.Z)(t);if(A===E.a)return(0,E.$)(t);if(A===E.Y)return(0,E.N)(t);if(A===E.p)return(0,E.c)(t);if(A===E.E)return(0,E.e)(t);if(A===E.b||A===E.x)return(0,E.h)(t);if(A===i._){let A=Object.keys(r);if(A.length>0)throw Error(`Unexpected ccusage.report payload field: ${A[0]}`);return}if(A===Ab)return AL(r);if(A===AS)return Aj(r);if(A===AR)return AY(r);throw Error(`Unsupported agent job kind: ${A}`)}(A.kind,A.payload),!A.idempotencyKey.trim())throw Error("idempotencyKey is required");let s=A.kind===n.U?0:Math.max(10,Math.min(A.timeoutSeconds??86400,604800)),o=await (0,AF.U)();if(A.kind===S.p){let e=(0,S.y)(A.payload);if(A.codebaseId!==e.codebaseId)throw Error("Local branch cleanup must use deleteCodebaseBranches");let t=await o.codebase.findUnique({where:{id:e.codebaseId},include:{repository:!0}});if(!t||t.agentId!==A.agentId)throw Error("Codebase not found for this agent");if(e.folder!==t.folder||e.expectedOrigin!==t.repository.canonicalOrigin||e.defaultBranch!==t.defaultBranch)throw Error("Cleanup target no longer matches the registered codebase; refresh before retrying")}let u=await o.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:A.agentId,idempotencyKey:A.idempotencyKey}}});if(u){if(A.ccusageCollectionId&&u.ccusageCollectionId!==A.ccusageCollectionId){let e=await o.agentJob.update({where:{id:u.id},data:{ccusageCollectionId:A.ccusageCollectionId}});return A8(e),e}return u}try{r=await o.agentJob.create({data:{id:(0,t.randomUUID)(),agentId:A.agentId,kind:A.kind,payloadJson:JSON.stringify(A.payload),status:"QUEUED",idempotencyKey:A.idempotencyKey,timeoutSeconds:s,ccusageCollectionId:A.ccusageCollectionId??null,buildDataCollectionId:A.buildDataCollectionId??null,codebaseId:A.codebaseId??null,worktreeId:A.worktreeId??null,visibility:A.visibility??"USER",blocksGitOperations:A.blocksGitOperations??!1}})}catch(t){let e=await o.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:A.agentId,idempotencyKey:A.idempotencyKey}}});if(!e){if(Az(t))throw new Aq;throw t}if(A.ccusageCollectionId&&e.ccusageCollectionId!==A.ccusageCollectionId)return o.agentJob.update({where:{id:e.id},data:{ccusageCollectionId:A.ccusageCollectionId}});return e}return await o.agentAuditEvent.create({data:{id:(0,t.randomUUID)(),agentId:A.agentId,action:"job.created",details:JSON.stringify({jobId:r.id,kind:r.kind})}}),A8(r),AW._H.publish((0,AW.CO)(A.agentId),{agentEvents:{type:"JOB_AVAILABLE",job:r}}),r}async claimJob(A,e){let t=await (0,AF.U)();await t.derivedDataCleanupLease.deleteMany({where:{jobId:null,expiresAt:{lte:new Date}}});let r=await t.agentJob.findUnique({where:{id:e},select:{agentId:!0,status:!0,worktreeId:!0,kind:!0}});if(!r||r.agentId!==A)throw Error("Job not found for this agent");if("QUEUED"===r.status&&r.worktreeId&&await t.derivedDataCleanupLease.findUnique({where:{worktreeId:r.worktreeId}}))throw Error("Derived Data cleanup is in progress for this worktree; try again shortly");if("QUEUED"===r.status&&r.kind===E.o){let[e,r]=await Promise.all([t.agentDiskSpaceState.findUnique({where:{agentId:A}}),t.diskSpaceSettings.findUnique({where:{id:"default"}})]);if(e?.enabled&&e.lastReportedAt&&!e.lastError&&Date.now()-e.lastReportedAt.getTime()<=12e4){let A=[];try{let t=JSON.parse(e.volumesJson);Array.isArray(t)&&(A=B(t))}catch{}let t=r?.pressureThresholdGiB??10;if(A.some(A=>A.freeBytes<=0x40000000*t))throw Error(`New builds are paused because this agent has ${t} GiB or less free disk space`)}}let i=await t.agentJob.updateMany({where:{id:e,agentId:A,status:"QUEUED"},data:{status:"RUNNING",startedAt:new Date}}),n=await t.agentJob.findUnique({where:{id:e}});if(!n||n.agentId!==A)throw Error("Job not found for this agent");if(1!==i.count&&"RUNNING"!==n.status)throw Error(`Job cannot be claimed from status ${n.status}`);return A8(n),n}async appendLogs(A,e,r){let i=await (0,AF.U)(),n=await i.agentJob.findUnique({where:{id:e}});if(!n||n.agentId!==A)throw Error("Job not found for this agent");let a=r.slice(0,200).map(A=>({id:(0,t.randomUUID)(),jobId:e,sequence:A.sequence,stream:A.stream,message:A.message.slice(0,64e3),createdAt:new Date(A.createdAt)}));if(a.some(A=>Number.isNaN(A.createdAt.valueOf())))throw Error("Log createdAt must be an ISO date");await Promise.all(a.map(A=>i.agentJobLog.upsert({where:{jobId_sequence:{jobId:e,sequence:A.sequence}},create:A,update:{}})));let s=await i.agentJobLog.findMany({where:{jobId:e,sequence:{in:a.map(A=>A.sequence)}},orderBy:{sequence:"asc"}});for(let A of s)AW._H.publish((0,AW.gR)(e),{agentJobLogAdded:A});return s}async reportBranchDeletionResult(A,e,t){let r=(0,S.C)([t])[0],i=await (0,AF.U)(),n=await i.$transaction(async t=>{let i=await t.agentJob.findUnique({where:{id:e}});if(!i||i.agentId!==A||i.kind!==S.p)throw Error("Branch cleanup job not found for this agent");if(!(0,S.y)(JSON.parse(i.payloadJson)).targets.some(A=>A.codebaseId===r.codebaseId&&A.branch===r.branch))throw Error("Branch is not a target of this cleanup job");let n=i.resultJson?JSON.parse(i.resultJson):{},a=n.branchDeletionResults?(0,S.C)(n.branchDeletionResults):[];if(a.some(A=>A.branch===r.branch))return i;if("RUNNING"!==i.status)throw Error("Branch cleanup job is no longer running");return t.agentJob.update({where:{id:i.id,status:"RUNNING"},data:{resultJson:JSON.stringify({...n,branchDeletionResults:[...a,r]})}})});return A8(n),n}async completeJob(A,e,t,r,i){if(!AZ.has(t))throw Error("A final job status is required");let n=await (0,AF.U)(),a=await n.agentJob.findUnique({where:{id:e}});if(!a||a.agentId!==A)throw Error("Job not found for this agent");if(AZ.has(a.status))return await this.projectCompletion(a),a;let s=await n.agentJob.updateMany({where:{id:e,agentId:A,status:{in:A$}},data:{status:t,resultJson:null==r?a.kind===S.p?a.resultJson:null:JSON.stringify(r),error:i,finishedAt:new Date}}),o=await n.agentJob.findUnique({where:{id:e}});if(!o||o.agentId!==A)throw Error("Job not found for this agent");if(1!==s.count){if(AZ.has(o.status))return await this.projectCompletion(o),o;throw Error(`Job cannot be completed from status ${o.status}`)}return await this.projectCompletion(o),A8(o),o}async cancelJob(A){let e=await (0,AF.U)(),t=await e.agentJob.findUnique({where:{id:A}});if(!t)throw Error("Job not found");if(!A$.includes(t.status))return t;let r=t.kind===n.U,i=await e.agentJob.update({where:{id:A},data:r?{status:"CANCELLING"}:{status:"CANCELLED",finishedAt:new Date}});return"CANCELLED"===i.status&&await this.projectCompletion(i),A8(i),AW._H.publish((0,AW.CO)(t.agentId),{agentEvents:{type:"JOB_CANCEL_REQUESTED",job:i}}),i}async timeoutCollectionJobs(A){let e=await (0,AF.U)(),t=await e.agentJob.findMany({where:{ccusageCollectionId:A,status:{in:A$}}}),r=[];for(let A of t){if(1!==(await e.agentJob.updateMany({where:{id:A.id,status:{in:A$}},data:{status:"TIMED_OUT",finishedAt:new Date}})).count)continue;let t=await e.agentJob.findUnique({where:{id:A.id}});t&&(await this.projectCompletion(t),r.push(t),A8(t),AW._H.publish((0,AW.CO)(t.agentId),{agentEvents:{type:"JOB_CANCEL_REQUESTED",job:t}}))}return r}async timeoutBuildDataCollectionJobs(A){let e=await (0,AF.U)(),t=await e.agentJob.findMany({where:{buildDataCollectionId:A,kind:w.F,status:{in:A$}}}),r=[];for(let A of t){if(1!==(await e.agentJob.updateMany({where:{id:A.id,status:{in:A$}},data:{status:"TIMED_OUT",finishedAt:new Date}})).count)continue;let t=await e.agentJob.findUnique({where:{id:A.id}});t&&(await this.projectCompletion(t),r.push(t),A8(t),AW._H.publish((0,AW.CO)(t.agentId),{agentEvents:{type:"JOB_CANCEL_REQUESTED",job:t}}))}return r}async listLogs(A,e=-1,t={}){let r=await (0,AF.U)(),i=!!(t.latest||null!=t.beforeSequence),n=t.knownRanges??[];if(n.length>100||n.some(A=>A.fromSequence<0||A.throughSequence<A.fromSequence))throw Error("Invalid known log ranges");let a=await r.agentJobLog.findMany({where:{jobId:A,sequence:{gt:e,...null==t.beforeSequence?{}:{lt:t.beforeSequence}},...n.length?{NOT:n.map(A=>({sequence:{gte:A.fromSequence,lte:A.throughSequence}}))}:{}},orderBy:{sequence:i?"desc":"asc"},take:Math.min(5e3,Math.max(1,t.first??5e3))});return i?a.reverse():a}},"z",0,AX],118387)},848201,A=>{let e=globalThis,t=e.agentEventBus??(e.agentEventBus=new class{subscribers=new Map;publish(A,e){for(let t of this.subscribers.get(A)??[])(!t.predicate||t.predicate(e))&&t.push(e)}iterate(A,e){let t=[],r=[],i=!0,n={predicate:e,push(A){let e=r.shift();e?e({value:A,done:!1}):t.push(A)}},a=this.subscribers.get(A)??new Set;a.add(n),this.subscribers.set(A,a);let s=()=>{if(i)for(let e of(i=!1,a.delete(n),0===a.size&&this.subscribers.delete(A),r.splice(0)))e({value:void 0,done:!0})};return{[Symbol.asyncIterator](){return this},next(){if(!i)return Promise.resolve({value:void 0,done:!0});let A=t.shift();return void 0!==A?Promise.resolve({value:A,done:!1}):new Promise(A=>r.push(A))},return:()=>(s(),Promise.resolve({value:void 0,done:!0})),throw:A=>(s(),Promise.reject(A))}}});A.s(["Wy",0,"action-center.changed","FJ",0,"action-center.settings.changed","uV",0,"agent.changed","as",0,"app-notifications.changed","$A",0,"builds.changed","oz",0,"build-data.changed","sM",0,"build-scripts.changed","IV",0,"cli-health.changed","aA",0,"codebase.changed","Tc",0,"commands.changed","yS",0,"command-runs.changed","jU",0,"command-runs.output.changed","Zw",0,"crashes.reports.changed","Bo",0,"disk-space.changed","rm",0,"crashes.dsyms.changed","_C",0,"github-actions-count.changed","vS",0,"github.pipeline-status.changed","fh",0,"github-request.changed","ej",0,"integration-configuration:changed","w9",0,"ios-devices.changed","NP",0,"jira.ticket.changed","DN",0,"jira.webhook.delivery","ok",0,"model-costs.catalog.changed","Uv",0,"polling.changed","OK",0,"push-notifications.changed","mF",0,"repository-transfer.changed","hu",0,"runs.changed","fb",0,"sidebar-status.changed","oa",0,"signing-assets.changed","QD",0,"skills.changed","Y6",0,"sse.breakpoints.changed","Gx",0,"sse.endpoints.changed","l0",0,"sse.history.events.changed","EX",0,"sse.history.changed","_x",0,"sse.history.requests.changed","C0",0,"sse.storage.changed","Im",0,"tailscale-serve.changed","PB",0,"telemetry.changed","_t",0,"telemetry.settings.changed","zy",0,"tool-call-audit.changed","MA",0,"worktree.changed","_H",0,t,"CO",0,A=>`agent.${A}.events`,"BC",0,A=>`job.${A}.changed`,"gR",0,A=>`job.${A}.log`,"I2",0,A=>`build-data.${A}.changed`,"UP",0,A=>`build.${A}.log-chunk`,"cm",0,A=>`build.${A}.changed`,"Xq",0,A=>`ccusage.${A}.changed`,"LH",0,A=>`command-run.${A}.changed`,"sG",0,A=>`command-run.${A}.output`,"k_",0,A=>`run.${A}.changed`,"zP",0,A=>`run.${A}.event`,"hn",0,A=>`run.${A}.question`,"yE",0,A=>`skills.sync.${A}.changed`,"Sz",0,A=>`tailscale-serve.operation.${A}.changed`,"ys",0,A=>`worktree.${A}.inspection`])},256554,A=>{A.i(118387),A.i(848201),A.s([])},709932,456622,A=>{var e=A.i(898912),t=A.i(969068);A.i(592299);var r=A.i(747461),i=A.i(972425),n=A.i(863568);class a extends Error{status;errors;constructor(A,e,t){super(A),this.status=e,this.errors=t,this.name="AppleDeveloperRequestError"}}async function s(A=new n.f){let e=await A.getJson(i.D.appStoreConnectSettings);if(!e)throw Error("App Store Connect API credentials are not configured");let t=(0,r.X)(e),a=await A.getText(i.D.appStoreConnectPrivateKey);if(!a)throw Error("App Store Connect API credentials are not configured");return{issuerId:t.issuerId,keyId:t.keyId,privateKey:a}}A.s(["B",0,class{credentials;fetcher;constructor(A,e=fetch){this.credentials=A,this.fetcher=e}async token(){let A;try{A=await (0,e.r)(this.credentials.privateKey,"ES256")}catch{throw Error("The App Store Connect key must be an ES256 PKCS#8 private key")}return new t.f({}).setProtectedHeader({alg:"ES256",kid:this.credentials.keyId,typ:"JWT"}).setIssuer(this.credentials.issuerId).setAudience("appstoreconnect-v1").setIssuedAt().setExpirationTime("15m").sign(A)}async request(A,e={}){let t,r=await this.token(),i=A.startsWith("http")?A:`https://api.appstoreconnect.apple.com${A}`;try{t=await this.fetcher(i,{...e,signal:e.signal??AbortSignal.timeout(2e4),headers:{accept:"application/json",authorization:`Bearer ${r}`,...e.body?{"content-type":"application/json"}:{},...e.headers}})}catch(A){if(A instanceof Error&&("TimeoutError"===A.name||"AbortError"===A.name))throw Error("Apple Developer API timed out; retry the operation");throw Error("Could not connect to the Apple Developer API")}if(204===t.status)return;let n=await t.json().catch(()=>({}));if(!t.ok){let A=n.errors?.map(A=>A.detail||A.title||A.code).filter(Boolean).join("; ");throw new a(401===t.status||403===t.status?"Apple rejected the API key or it lacks Certificates, Identifiers & Profiles permission":A||`Apple Developer API returned HTTP ${t.status}`,t.status,n.errors??[])}return n}async list(A){let e=[],t=A;for(;t;){let A=await this.request(t);e.push(...A.data),t=A.links?.next??null}return e}listProfiles(){return this.list("/v1/profiles?limit=200&include=bundleId,certificates,devices")}listCertificates(){return this.list("/v1/certificates?limit=200")}listBundleIds(){return this.list("/v1/bundleIds?limit=200")}listDevices(){return this.list("/v1/devices?limit=200")}async createProfile(A){let e={bundleId:{data:{type:"bundleIds",id:A.bundleIdId}},certificates:{data:A.certificateIds.map(A=>({type:"certificates",id:A}))}};return A.deviceIds?.length&&(e.devices={data:A.deviceIds.map(A=>({type:"devices",id:A}))}),this.request("/v1/profiles",{method:"POST",body:JSON.stringify({data:{type:"profiles",attributes:{name:A.name,profileType:A.profileType},relationships:e}})})}deleteProfile(A){return this.request(`/v1/profiles/${encodeURIComponent(A)}`,{method:"DELETE"})}revokeCertificate(A){return this.request(`/v1/certificates/${encodeURIComponent(A)}`,{method:"DELETE"})}},"C",0,a,"r",0,s],456622),A.s([],709932)},206099,A=>{var e=A.i(666680),t=A.i(135475);A.i(256554);var r=A.i(848201);let i="apps.changed";function n(A){let e=A.name.trim(),t=A.description?.trim()??"",r=[...new Set(A.agentIds??[])],i=[...new Set(A.repositoryIds)];if(!e)throw Error("App name is required");if(e.length>120)throw Error("App name must be 120 characters or fewer");if(t.length>2e3)throw Error("App description must be 2,000 characters or fewer");if(!i.length)throw Error("Select at least one repository");return{name:e,normalizedName:e.normalize("NFKC").toLocaleLowerCase("en-US"),description:t,agentIds:r,repositoryIds:i}}let a={repositories:{include:{repository:{include:{codebases:{include:{agent:!0},orderBy:[{folder:"asc"},{id:"asc"}]}}}},orderBy:{createdAt:"asc"}}};A.s(["v",0,i,"o",0,class{publish(A){r._H.publish(i,{appsChanged:{id:A}})}subscribe(){return r._H.iterate(i)}async list(){let A=await (0,t.U)();return Promise.all((await A.app.findMany({include:a,orderBy:[{name:"asc"},{id:"asc"}]})).map(A=>this.withCounts(A)))}async get(A){let e=await (0,t.U)(),r=await e.app.findUnique({where:{id:A},include:a});return r?this.withCounts(r):null}async create(A){let r=n(A),i=await (0,t.U)();await this.assertRepositories(r.repositoryIds),await this.assertUniqueName(r.normalizedName);let s=await i.app.create({data:{id:(0,e.randomUUID)(),name:r.name,normalizedName:r.normalizedName,description:r.description,agentIdsJson:JSON.stringify(r.agentIds),repositories:{create:r.repositoryIds.map(A=>({repositoryId:A}))}},include:a});return this.publish(s.id),this.withCounts(s)}async update(A){let e=n(A),r=await (0,t.U)();if(!await r.app.findUnique({where:{id:A.id}}))throw Error("App not found");await this.assertRepositories(e.repositoryIds),await this.assertUniqueName(e.normalizedName,A.id);let i=await r.$transaction(async t=>(await t.appRepository.deleteMany({where:{appId:A.id}}),t.app.update({where:{id:A.id},data:{name:e.name,normalizedName:e.normalizedName,description:e.description,agentIdsJson:JSON.stringify(e.agentIds),repositories:{create:e.repositoryIds.map(A=>({repositoryId:A}))}},include:a})));return this.publish(i.id),this.withCounts(i)}async delete(A){let e=await (0,t.U)();if(!(await e.app.deleteMany({where:{id:A}})).count)throw Error("App not found");return this.publish(A),{id:A}}async assertRepositories(A){let e=await (0,t.U)();if(await e.codebaseRepository.count({where:{id:{in:A}}})!==A.length)throw Error("One or more repositories could not be found")}async assertUniqueName(A,e){let r=await (0,t.U)();if(await r.app.findFirst({where:{normalizedName:A,...e?{id:{not:e}}:{}},select:{id:!0}}))throw Error("App names must be unique")}async withCounts(A){let e=await (0,t.U)(),r=A.repositories.map(A=>A.repositoryId),i={in:r},n={missingAt:null,codebase:{repositoryId:i}},a=A.repositories.flatMap(({repository:A})=>A.codebases.flatMap(({id:A,defaultBranch:e})=>e?[{codebaseId:A,branch:{not:e}}]:[])),[s,o,l,c,d,u,g,h,C]=await Promise.all([e.codebase.count({where:{repositoryId:i}}),e.worktree.count({where:n}),e.worktree.count({where:{...n,OR:[{hasStagedChanges:!0},{hasUnstagedChanges:!0}]}}),e.worktree.count({where:{...n,OR:a}}),e.worktreePullRequest.findMany({where:{state:"OPEN",worktree:n},distinct:["url"],select:{url:!0}}),e.worktreeGitLabMergeRequest.findMany({where:{state:"OPENED",worktree:n},distinct:["webUrl"],select:{webUrl:!0}}),e.agentRun.count({where:{kind:"PLAN",archivedAt:null,repositoryId:i}}),e.agentRun.count({where:{kind:"SESSION",archivedAt:null,repositoryId:i}}),e.build.count({where:{repositoryId:i}})]),{repositories:p,agentIdsJson:I,...m}=A;return{...m,agentIds:this.stringArray(I),repositories:p.map(A=>A.repository),counts:{repositories:r.length,codebases:s,worktrees:o,dirtyWorktrees:l,nonMainWorktrees:c,openRequests:d.length+u.length,plans:g,sessions:h,builds:C}}}stringArray(A){try{let e=JSON.parse(A);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}}}])},812467,A=>{A.i(206099),A.s([])},792116,658978,525796,9416,847435,A=>{let e,t,r,i,n;var a,s=A.i(609245);let o=(0,s.f)({INVALID_METADATA_TYPE:"metadata must be an object or undefined",REFILL_AMOUNT_AND_INTERVAL_REQUIRED:"refillAmount is required when refillInterval is provided",REFILL_INTERVAL_AND_AMOUNT_REQUIRED:"refillInterval is required when refillAmount is provided",USER_BANNED:"User is banned",UNAUTHORIZED_SESSION:"Unauthorized or invalid session",KEY_NOT_FOUND:"API Key not found",KEY_DISABLED:"API Key is disabled",KEY_EXPIRED:"API Key has expired",USAGE_EXCEEDED:"API Key has reached its usage limit",KEY_NOT_RECOVERABLE:"API Key is not recoverable",EXPIRES_IN_IS_TOO_SMALL:"The expiresIn is smaller than the predefined minimum value.",EXPIRES_IN_IS_TOO_LARGE:"The expiresIn is larger than the predefined maximum value.",INVALID_REMAINING:"The remaining count is either too large or too small.",INVALID_PREFIX_LENGTH:"The prefix length is either too large or too small.",INVALID_NAME_LENGTH:"The name length is either too large or too small.",METADATA_DISABLED:"Metadata is disabled.",RATE_LIMIT_EXCEEDED:"Rate limit exceeded.",NO_VALUES_TO_UPDATE:"No values to update.",KEY_DISABLED_EXPIRATION:"Custom key expiration values are disabled.",INVALID_API_KEY:"Invalid API key.",INVALID_USER_ID_FROM_API_KEY:"The user id from the API key is invalid.",INVALID_REFERENCE_ID_FROM_API_KEY:"The reference id from the API key is invalid.",INVALID_API_KEY_GETTER_RETURN_TYPE:"API Key getter returned an invalid key type. Expected string.",SERVER_ONLY_PROPERTY:"The property you're trying to set can only be set from the server auth instance only.",FAILED_TO_UPDATE_API_KEY:"Failed to update API key",NAME_REQUIRED:"API Key name is required.",ORGANIZATION_ID_REQUIRED:"Organization ID is required for organization-owned API keys.",USER_NOT_MEMBER_OF_ORGANIZATION:"You are not a member of the organization that owns this API key.",INSUFFICIENT_API_KEY_PERMISSIONS:"You do not have permission to perform this action on organization API keys.",NO_DEFAULT_API_KEY_CONFIGURATION_FOUND:"No default api-key configuration found.",ORGANIZATION_PLUGIN_REQUIRED:"Organization plugin is required for organization-owned API keys. Please install and configure the organization plugin."});var l=A.i(47032),c=A.i(965150),d=A.i(263822),u=A.i(793312),g=A.i(849655),h=A.i(219700),C=A.i(295090),p=A.i(157823),I=A.i(338952),m=A.i(470365),f=A.i(749906),E=A.i(377458);async function w(A,e,t){let r=A.length;if(0===r)return[];let{signal:i}=t;if(i?.aborted)throw i.reason;let n=Math.floor(t.concurrency),a=Math.min(r,n>=1?n:1),s=Array(r),o=0,l=!1,c=async()=>{for(;!l&&o<r;){if(i?.aborted)throw i.reason;let t=o++;try{s[t]=await e(A[t],t)}catch(A){throw l=!0,A}}};return await Promise.all(Array.from({length:a},c)),s}var Q=A.i(241510),y=A.i(37125);function B(A){return null==A?null:"object"==typeof A?A:(0,m.f)(A)}function D(A){return null!=A&&"string"==typeof A}async function k(A,e,t){if("database"!==t.storage&&!t.fallbackToDatabase)return;let r=e.filter(A=>D(A.metadata));if(0===r.length)return;let i=r.map(async e=>{let t=B(e.metadata);try{await A.context.adapter.update({model:"apikey",where:[{field:"id",value:e.id}],update:{metadata:t}})}catch(t){A.context.logger.warn(`Failed to migrate double-stringified metadata for API key ${e.id}:`,t)}});await Promise.all(i)}async function b(A,e,t){let r=B(e.metadata);if(D(e.metadata)&&("database"===t.storage||t.fallbackToDatabase))try{await A.context.adapter.update({model:"apikey",where:[{field:"id",value:e.id}],update:{metadata:r}})}catch(t){A.context.logger.warn(`Failed to migrate double-stringified metadata for API key ${e.id}:`,t)}return r}function S(A){return`api-key:${A}`}function R(A){return`api-key:by-id:${A}`}function M(A){return`api-key:by-ref:${A}`}function O(A){if(!A)return null;try{let e="string"==typeof A?JSON.parse(A):A;return{...e,createdAt:new Date(e.createdAt),updatedAt:new Date(e.updatedAt),expiresAt:e.expiresAt?new Date(e.expiresAt):null,lastRefillAt:e.lastRefillAt?new Date(e.lastRefillAt):null,lastRequest:e.lastRequest?new Date(e.lastRequest):null}}catch{return null}}function N(A,e){return e.customStorage?e.customStorage:A.context.secondaryStorage||null}function H(A){if(A.expiresAt){let e=Date.now(),t=Math.floor((new Date(A.expiresAt).getTime()-e)/1e3);if(t>0)return t}}async function v(A,e,t){let r=S(e);return O(await t.get(r))}async function T(A,e,t){let r=R(e);return O(await t.get(r))}let U=new Map;async function J(A,e,t){var r;let i;await (r=async()=>{let r=await A.get(e),i=[];if(r&&"string"==typeof r)try{i=JSON.parse(r)}catch{i=[]}else Array.isArray(r)&&(i=r);let n=t(i);0===n.length?await A.delete(e):await A.set(e,JSON.stringify(n))},i=(U.get(e)??Promise.resolve()).then(r,r).finally(()=>{U.get(e)===i&&U.delete(e)}),U.set(e,i),i)}async function x(A,e,t,r,i){let n=JSON.stringify({...e,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString(),expiresAt:e.expiresAt?.toISOString()??null,lastRefillAt:e.lastRefillAt?.toISOString()??null,lastRequest:e.lastRequest?.toISOString()??null}),a=M(e.referenceId);i.fallbackToDatabase?await Promise.all([t.set(S(e.key),n,r),t.set(R(e.id),n,r),t.delete(a)]):(await Promise.all([t.set(S(e.key),n,r),t.set(R(e.id),n,r)]),await J(t,a,A=>A.includes(e.id)?A:[...A,e.id]))}async function _(A,e,t,r){let i=M(e.referenceId);r.fallbackToDatabase?await Promise.all([t.delete(S(e.key)),t.delete(R(e.id)),t.delete(i)]):await Promise.all([t.delete(S(e.key)),t.delete(R(e.id)),J(t,i,A=>A.filter(A=>A!==e.id))])}async function G(A,e,t){let r=N(A,t);if("database"===t.storage)return await A.context.adapter.findOne({model:"apikey",where:[{field:"key",value:e}]});if("secondary-storage"===t.storage&&t.fallbackToDatabase){if(r){let t=await v(A,e,r);if(t)return t}let i=await A.context.adapter.findOne({model:"apikey",where:[{field:"key",value:e}]});return i&&r&&await x(A,i,r,H(i),t),i}return"secondary-storage"===t.storage?r?await v(A,e,r):null:await A.context.adapter.findOne({model:"apikey",where:[{field:"key",value:e}]})}async function L(A,e,t){let r=N(A,t);if("database"===t.storage)return await A.context.adapter.findOne({model:"apikey",where:[{field:"id",value:e}]});if("secondary-storage"===t.storage&&t.fallbackToDatabase){if(r){let t=await T(A,e,r);if(t)return t}let i=await A.context.adapter.findOne({model:"apikey",where:[{field:"id",value:e}]});return i&&r&&await x(A,i,r,H(i),t),i}return"secondary-storage"===t.storage?r?await T(A,e,r):null:await A.context.adapter.findOne({model:"apikey",where:[{field:"id",value:e}]})}async function P(A,e,t){let r=N(A,t),i=H(e);if("database"!==t.storage&&"secondary-storage"===t.storage){if(!r)throw Error("Secondary storage is required when storage mode is 'secondary-storage'");await x(A,e,r,i,t);return}}async function j(A,e,t){let r=N(A,t);if("database"!==t.storage&&"secondary-storage"===t.storage){if(!r)throw Error("Secondary storage is required when storage mode is 'secondary-storage'");await _(A,e,r,t);return}}function Y(A,e,t,r,i){let n=[...A];if(e){let A=t||"asc";n.sort((t,r)=>{let i=t[e],n=r[e];return null==i&&null==n?0:null==i?"asc"===A?-1:1:null==n?"asc"===A?1:-1:i<n?"asc"===A?-1:1:i>n?"asc"===A?1:-1:0})}return void 0!==i&&(n=n.slice(i)),void 0!==r&&(n=n.slice(0,r)),n}async function F(A,e,t,r){let i=N(A,t),{limit:n,offset:a,sortBy:s,sortDirection:o}=r||{};if("database"===t.storage){let[t,r]=await Promise.all([A.context.adapter.findMany({model:"apikey",where:[{field:"referenceId",value:e}],limit:n,offset:a,sortBy:s?{field:s,direction:o||"asc"}:void 0}),A.context.adapter.count({model:"apikey",where:[{field:"referenceId",value:e}]})]);return{apiKeys:t,total:r}}if("secondary-storage"===t.storage&&t.fallbackToDatabase){let r=M(e);if(i){let e=await i.get(r),t=[];if(e&&"string"==typeof e)try{t=JSON.parse(e)}catch{t=[]}else Array.isArray(e)&&(t=e);if(t.length>0){let e=(await w(t,e=>T(A,e,i),{concurrency:10})).filter(A=>null!=A);return{apiKeys:Y(e,s,o,n,a),total:e.length}}}let[l,c]=await Promise.all([A.context.adapter.findMany({model:"apikey",where:[{field:"referenceId",value:e}],limit:n,offset:a,sortBy:s?{field:s,direction:o||"asc"}:void 0}),A.context.adapter.count({model:"apikey",where:[{field:"referenceId",value:e}]})]);if(i&&l.length>0){await w(l,e=>x(A,e,i,H(e),t),{concurrency:10});let e=l.map(A=>A.id);await i.set(r,JSON.stringify(e))}return{apiKeys:l,total:c}}if("secondary-storage"===t.storage){if(!i)return{apiKeys:[],total:0};let t=M(e),r=await i.get(t),l=[];if(r&&"string"==typeof r)try{l=JSON.parse(r)}catch{return{apiKeys:[],total:0}}else{if(!Array.isArray(r))return{apiKeys:[],total:0};l=r}let c=(await w(l,e=>T(A,e,i),{concurrency:10})).filter(A=>null!=A);return{apiKeys:Y(c,s,o,n,a),total:c.length}}let[l,c]=await Promise.all([A.context.adapter.findMany({model:"apikey",where:[{field:"referenceId",value:e}],limit:n,offset:a,sortBy:s?{field:s,direction:o||"asc"}:void 0}),A.context.adapter.count({model:"apikey",where:[{field:"referenceId",value:e}]})]);return{apiKeys:l,total:c}}async function K(A,e,t,r){let i=function(A){let e=A.context;if("orgOptions"in e&&e.orgOptions)return e.orgOptions;let t=e.getPlugin?.("organization");return t&&"options"in t?t.options:null}(A);if(!i){let A=o.ORGANIZATION_PLUGIN_REQUIRED;throw g.E.from("INTERNAL_SERVER_ERROR",A)}let n=await A.context.adapter.findOne({model:"member",where:[{field:"userId",value:e},{field:"organizationId",value:t}]});if(!n){let A=o.USER_NOT_MEMBER_OF_ORGANIZATION;throw g.E.from("FORBIDDEN",A)}if(!await q(A,n.role,t,r,i)){let A=o.INSUFFICIENT_API_KEY_PERMISSIONS;throw g.E.from("FORBIDDEN",A)}return n}async function q(e,t,r,i,n){let{hasPermission:a}=await A.A(907898);try{return await a({role:t,options:n,permissions:{apiKey:[i]},organizationId:r,allowCreatorAllPermissions:!0},e)}catch{return!1}}let V=(A,e="ms")=>new Date(Date.now()+("sec"===e?1e3*A:A)),z=f.object({configId:f.string().meta({description:"The configuration ID to use for the API key. If not provided, the default configuration will be used."}).optional(),name:f.string().meta({description:"Name of the Api Key"}).optional(),expiresIn:f.number().meta({description:"Expiration time of the Api Key in seconds"}).min(1).optional().nullable().default(null),prefix:f.string().meta({description:"Prefix of the Api Key"}).regex(/^[a-zA-Z0-9_-]+$/,{message:"Invalid prefix format, must be alphanumeric and contain only underscores and hyphens."}).optional(),remaining:f.number().meta({description:"Remaining number of requests. Server side only"}).min(0).optional().nullable().default(null),metadata:f.any().optional(),refillAmount:f.number().meta({description:"Amount to refill the remaining count of the Api Key. server-only. Eg: 100"}).min(1).optional(),refillInterval:f.number().meta({description:"Interval to refill the Api Key in milliseconds. server-only. Eg: 1000"}).optional(),rateLimitTimeWindow:f.number().meta({description:"The duration in milliseconds where each request is counted. Once the `maxRequests` is reached, the request will be rejected until the `timeWindow` has passed, at which point the `timeWindow` will be reset. server-only. Eg: 1000"}).optional(),rateLimitMax:f.number().meta({description:"Maximum amount of requests allowed within a window. Once the `maxRequests` is reached, the request will be rejected until the `timeWindow` has passed, at which point the `timeWindow` will be reset. server-only. Eg: 100"}).optional(),rateLimitEnabled:f.boolean().meta({description:"Whether the key has rate limiting enabled. server-only. Eg: true"}).optional(),permissions:f.record(f.string(),f.array(f.string())).meta({description:"Permissions of the Api Key."}).optional(),userId:E.f.string().meta({description:'User Id of the user that the Api Key belongs to. server-only. Eg: "user-id"'}).optional(),organizationId:E.f.string().meta({description:"Organization Id of the organization that the Api Key belongs to. Eg: 'org-id'"}).optional()}),W=f.object({configId:f.string().meta({description:"The configuration ID to use for the API key lookup. If not provided, the default configuration will be used."}).optional(),keyId:f.string().meta({description:"The id of the Api Key"})}),$=f.object({configId:f.string().meta({description:"The configuration ID to use for the API key lookup. If not provided, the default configuration will be used."}).optional(),id:f.string().meta({description:"The id of the Api Key"})}),Z=f.object({configId:f.string().meta({description:"Filter by configuration ID. If not provided, returns keys from all configurations."}).optional(),organizationId:f.string().meta({description:"Organization ID to list keys for. If provided, returns organization-owned keys. If not provided, returns user-owned keys."}).optional(),limit:E.f.number().int().nonnegative().meta({description:"The number of API keys to return"}).optional(),offset:E.f.number().int().nonnegative().meta({description:"The offset to start from"}).optional(),sortBy:f.string().meta({description:"The field to sort by (e.g., createdAt, name, expiresAt)"}).optional(),sortDirection:f.enum(["asc","desc"]).meta({description:"The direction to sort by"}).optional()}).optional(),X=f.object({configId:f.string().meta({description:"The configuration ID to use for the API key lookup. If not provided, the default configuration will be used."}).optional(),keyId:f.string().meta({description:"The id of the Api Key"}),userId:E.f.string().meta({description:'The id of the user which the api key belongs to. server-only. Eg: "some-user-id"'}).optional(),name:f.string().meta({description:"The name of the key"}).optional(),enabled:f.boolean().meta({description:"Whether the Api Key is enabled or not"}).optional(),remaining:f.number().meta({description:"The number of remaining requests"}).min(1).optional(),refillAmount:f.number().meta({description:"The refill amount"}).optional(),refillInterval:f.number().meta({description:"The refill interval"}).optional(),metadata:f.any().optional(),expiresIn:f.number().meta({description:"Expiration time of the Api Key in seconds"}).min(1).optional().nullable(),rateLimitEnabled:f.boolean().meta({description:"Whether the key has rate limiting enabled."}).optional(),rateLimitTimeWindow:f.number().meta({description:"The duration in milliseconds where each request is counted. server-only. Eg: 1000"}).optional(),rateLimitMax:f.number().meta({description:"Maximum amount of requests allowed within a window. Once the `maxRequests` is reached, the request will be rejected until the `timeWindow` has passed, at which point the `timeWindow` will be reset. server-only. Eg: 100"}).optional(),permissions:f.record(f.string(),f.array(f.string())).meta({description:"Update the permissions on the API Key. server-only."}).optional().nullable()});function AA(A,e){let t=new Date,r=A.lastRequest,i=A.rateLimitTimeWindow,n=A.rateLimitMax;if(!1===e.rateLimit.enabled||!1===A.rateLimitEnabled)return{type:"skip",lastRequest:t};if(null===i||null===n)return{type:"skip",lastRequest:null};if(null===r)return{type:"start",now:t};let a=t.getTime()-new Date(r).getTime();return a>i?{type:"reset",now:t,windowStart:new Date(t.getTime()-i)}:A.requestCount>=n?{type:"deny",message:o.RATE_LIMIT_EXCEEDED.message,tryAgainIn:Math.ceil(i-a)}:{type:"increment",now:t,max:n,windowStart:new Date(t.getTime()-i)}}async function Ae({key:A,ctx:e,lookupOpts:t,configurations:r,schema:i,permissions:n,expectedConfigId:a,runCustomValidator:s}){let l=t.disableKeyHashing?A:await Au(A),c=await G(e,l,t);if(!c||void 0!==a&&!Al(c.configId,a))throw g.E.from("UNAUTHORIZED",o.INVALID_API_KEY);let d=As(e.context,r,c.configId);if(s&&d.customAPIKeyValidator&&!await d.customAPIKeyValidator({ctx:e,key:A}))throw g.E.from("UNAUTHORIZED",o.KEY_NOT_FOUND);if(!1===c.enabled)throw g.E.from("UNAUTHORIZED",o.KEY_DISABLED);if(c.expiresAt&&Date.now()>new Date(c.expiresAt).getTime()){let A=async()=>{"secondary-storage"===d.storage&&d.fallbackToDatabase?(await j(e,c,d),await e.context.adapter.delete({model:Ag,where:[{field:"id",value:c.id}]})):"secondary-storage"===d.storage?await j(e,c,d):await e.context.adapter.delete({model:Ag,where:[{field:"id",value:c.id}]})};throw d.deferUpdates?e.context.runInBackground(A().catch(A=>{e.context.logger.error("Deferred update failed:",A)})):await A(),g.E.from("UNAUTHORIZED",o.KEY_EXPIRED)}if(n){let A=c.permissions?(0,m.f)(c.permissions):null;if(!A||!(0,Q.Y)(A).authorize(n).success)throw g.E.from("UNAUTHORIZED",o.KEY_NOT_FOUND)}if(0===c.remaining&&null===c.refillAmount){let A=async()=>{"secondary-storage"===d.storage&&d.fallbackToDatabase?(await j(e,c,d),await e.context.adapter.delete({model:Ag,where:[{field:"id",value:c.id}]})):"secondary-storage"===d.storage?await j(e,c,d):await e.context.adapter.delete({model:Ag,where:[{field:"id",value:c.id}]})};throw d.deferUpdates?e.context.runInBackground(A().catch(A=>{e.context.logger.error("Deferred update failed:",A)})):await A(),g.E.from("TOO_MANY_REQUESTS",o.USAGE_EXCEEDED)}return{apiKey:"database"===d.storage||"secondary-storage"===d.storage&&d.fallbackToDatabase?await At({ctx:e,apiKey:c,opts:d,hashedKey:l}):await An({ctx:e,apiKey:c,opts:d,hashedKey:l}),opts:d}}async function At({ctx:A,apiKey:e,opts:t,hashedKey:r}){let i=e;null!==e.remaining&&(i=await Ar(A,e)),i=await Ai(A,i,t);let n=await A.context.adapter.update({model:Ag,where:[{field:"id",value:i.id}],update:{updatedAt:new Date}});if(!n)throw g.E.from("UNAUTHORIZED",o.INVALID_API_KEY);return"secondary-storage"===t.storage&&t.fallbackToDatabase&&await P(A,n,t),n}async function Ar(A,e){let t=new Date,{refillInterval:r,refillAmount:i}=e;if(r&&i){let n=new Date(e.lastRefillAt??e.createdAt).getTime();if(t.getTime()-n>r){let r=await A.context.adapter.incrementOne({model:Ag,where:[{field:"id",value:e.id},{field:"lastRefillAt",value:e.lastRefillAt}],increment:{},set:{remaining:i-1,lastRefillAt:t}});if(r)return r}}let n=await A.context.adapter.incrementOne({model:Ag,where:[{field:"id",value:e.id},{field:"remaining",operator:"gt",value:0}],increment:{remaining:-1}});if(!n)throw g.E.from("TOO_MANY_REQUESTS",o.USAGE_EXCEEDED);return n}async function Ai(A,e,t){let r=AA(e,t);if("deny"===r.type)throw new g.E("TOO_MANY_REQUESTS",{message:r.message,code:"RATE_LIMITED",details:{tryAgainIn:r.tryAgainIn}});if("skip"===r.type)return null===r.lastRequest?e:await A.context.adapter.update({model:"apikey",where:[{field:"id",value:e.id}],update:{lastRequest:r.lastRequest}})??e;if("increment"===r.type){let i=await A.context.adapter.incrementOne({model:Ag,where:[{field:"id",value:e.id},{field:"lastRequest",operator:"gt",value:r.windowStart},{field:"requestCount",operator:"lt",value:r.max}],increment:{requestCount:1},set:{lastRequest:r.now}});if(i)return i;let n=await A.context.adapter.findOne({model:Ag,where:[{field:"id",value:e.id}]});if(!n)throw g.E.from("UNAUTHORIZED",o.INVALID_API_KEY);return Ai(A,n,t)}let i="reset"===r.type?{field:"lastRequest",operator:"lte",value:r.windowStart}:{field:"lastRequest",operator:"eq",value:null},n=await A.context.adapter.incrementOne({model:Ag,where:[{field:"id",value:e.id},i],increment:{},set:{requestCount:1,lastRequest:r.now}});if(n)return n;let a=await A.context.adapter.findOne({model:Ag,where:[{field:"id",value:e.id}]});if(!a)throw g.E.from("UNAUTHORIZED",o.INVALID_API_KEY);return Ai(A,a,t)}async function An({ctx:A,apiKey:e,opts:t,hashedKey:r}){let i=e.remaining,n=e.lastRefillAt;if(null!==i){let A=Date.now(),{refillInterval:t,refillAmount:r}=e,a=new Date(n??e.createdAt).getTime();if(t&&r&&A-a>t&&(i=r,n=new Date),0===i)throw g.E.from("TOO_MANY_REQUESTS",o.USAGE_EXCEEDED);i--}let a={...function(A,e){let t=AA(A,e);switch(t.type){case"deny":throw new g.E("TOO_MANY_REQUESTS",{message:t.message,code:"RATE_LIMITED",details:{tryAgainIn:t.tryAgainIn}});case"skip":return null===t.lastRequest?{}:{lastRequest:t.lastRequest};case"start":case"reset":return{lastRequest:t.now,requestCount:1};case"increment":return{lastRequest:t.now,requestCount:A.requestCount+1}}}(e,t),remaining:i,lastRefillAt:n,updatedAt:new Date},s=async()=>{let e=await G(A,r,t);if(!e)return null;let i={...e,...a};return await P(A,i,t),i};if(t.deferUpdates)return A.context.runInBackground(s().catch(e=>{A.context.logger.error("Failed to update API key:",e)})),{...e,...a};let l=await s();if(!l)throw g.E.from("INTERNAL_SERVER_ERROR",o.FAILED_TO_UPDATE_API_KEY);return l}let Aa=f.object({configId:f.string().meta({description:"Configuration ID to scope verification to. When omitted, the key is validated against its own configuration."}).optional(),key:f.string().meta({description:"The key to verify"}),permissions:f.record(f.string(),f.array(f.string())).meta({description:"The permissions to verify."}).optional()});function As(A,e,t){let r=()=>{let t=e.find(A=>!A.configId||"default"===A.configId);if(!t){A.logger.error("No default api-key configuration found. Either provide an api-key configuration with configId 'default' or provide a configuration with no `configId` set.");let e=o.NO_DEFAULT_API_KEY_CONFIGURATION_FOUND;throw g.E.from("BAD_REQUEST",e)}return{...t,configId:"default"}};return t?e.find(A=>A.configId===t)??r():r()}function Ao(A){return!A||"default"===A}function Al(A,e){return!!(Ao(A)&&Ao(e))||A===e}let Ac=null;async function Ad(A,e=!1){Ac&&!e&&(new Date).getTime()-Ac.getTime()<1e4||(Ac=new Date,await A.adapter.deleteMany({model:Ag,where:[{field:"expiresAt",operator:"lt",value:new Date},{field:"expiresAt",operator:"ne",value:null}]}).catch(e=>{A.logger.error("Failed to delete expired API keys:",e)}))}let Au=async A=>{let e=await (0,u.f)("SHA-256").digest(new TextEncoder().encode(A));return d.W.encode(new Uint8Array(e),{padding:!1})},Ag="apikey";var Ah=A.i(824215),AC=A.i(194318),Ap=A.i(821380);function AI(A){return A.charAt(0).toLowerCase()+A.slice(1)}function Am(A){return A?.code==="P2025"}var Af=A.i(822837),AE=A.i(710139);async function Aw(e,t){let r;if(e.database)r="function"==typeof e.database?e.database(e):await t(e);else{let t=Object.keys((0,Af.R)(e)).reduce((A,e)=>(A[e]=[],A),{}),{memoryAdapter:i}=await A.A(55069);r=i(t)(e)}return r.transaction||(AE.y.warn("Adapter does not correctly implement transaction function, patching it automatically. Please update your adapter implementation."),r.transaction=async A=>A(r)),r}async function AQ(e){return Aw(e,async e=>{let{createKyselyAdapter:t,kyselyAdapter:r}=await A.A(630788),{kysely:i,databaseType:n,transaction:a}=await t(e);if(!i)throw new g.p("Failed to initialize database adapter");return r(i,{type:n||"sqlite",debugLogs:!!e.database&&"debugLogs"in e.database&&e.database.debugLogs,transaction:a})(e)})}var Ay=g,AB=A.i(625571),AD=A.i(67034),Ak=A.i(955466),Ab=A.i(639462),AS=A.i(792197);let AR={postgres:{string:["character varying","varchar","text","uuid"],number:["int4","int8","integer","bigint","smallint","numeric","real","double precision"],boolean:["bool","boolean"],date:["timestamptz","timestamp","date"],json:["json","jsonb"]},mysql:{string:["varchar","text","uuid"],number:["integer","int","bigint","smallint","decimal","float","double"],boolean:["boolean","tinyint"],date:["timestamp","datetime","date"],json:["json"]},sqlite:{string:["TEXT"],number:["INTEGER","REAL","BIGINT"],boolean:["INTEGER","BOOLEAN"],date:["DATE","INTEGER"],json:["TEXT"]},mssql:{string:["varchar","nvarchar","uniqueidentifier"],number:["int","bigint","smallint","decimal","float","double"],boolean:["bit","smallint"],date:["datetime2","date","datetime"],json:["varchar","nvarchar"]}};function AM(A,e){return`${(0,Ab.d)(A)}\0${(0,Ab.d)(e)}`}function AO(A,e){return`${A}\0${e}`}function AN(A,e){return A.unique===(e.unique??!1)&&A.validFullColumns&&A.columns.length===e.columns.length&&A.columns.every((A,t)=>A===e.columns[t])}function AH(A){return"boolean"==typeof A?A:"number"==typeof A?0!==A:"1"===A||A?.toLowerCase()==="true"||"t"===A}function Av(A){return new Map(A.map(A=>{let e=[...A.columns].sort((A,e)=>A.position-e.position);return[AM(A.table,A.name),{columns:e.flatMap(A=>null===A.name?[]:[A.name]),name:A.name,table:A.table,unique:A.unique,validFullColumns:A.valid&&!A.partial&&e.length>0&&e.every(A=>null!==A.name&&A.fullLength)}]}))}async function AT(A,e,t,r){let i;if(r)return Av(await r(t));switch(e.type){case"sqlite":i=(await AS.f`
|
|
366
366
|
SELECT
|
|
367
367
|
tables.name AS "tableName",
|
|
368
368
|
index_list.name AS "indexName",
|
|
@@ -1455,7 +1455,7 @@ ${a}`].join("\n\n").slice(0,2e6)),this.createInternal({...e,attachmentIds:n,kind
|
|
|
1455
1455
|
${A.prompt}`).join("\n\n"),a.run.events.filter(A=>null===a.eventSequence?A.createdAt<=a.createdAt:A.sequence<=a.eventSequence).map(A=>`[${A.type}] ${A.summary}${A.detailMarkdown?`
|
|
1456
1456
|
${A.detailMarkdown}`:""}`).join("\n\n"),`Questions:
|
|
1457
1457
|
${a.questions.map(A=>`- ${A.prompt}`).join("\n")}`,`Revised answer:
|
|
1458
|
-
${JSON.stringify(e,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),C=await N(n,"SESSION"),p=(0,r.randomUUID)(),I=(0,r.randomUUID)(),m=new Date,f=await n.agentRun.create({data:{id:p,kind:"SESSION",displayNumber:C,status:o?"IN_PROGRESS":"QUEUED",phase:o?"ANSWER_REVISION_QUEUED":"WAITING_FOR_WORKTREE",provider:a.run.provider,worktreeId:a.run.worktreeId,repositoryId:a.run.repositoryId,agentId:a.run.agentId,jiraIssueKey:a.run.jiraIssueKey,repositoryName:a.run.repositoryName,branch:a.run.branch,model:a.run.model,effort:a.run.effort,webSearchEnabled:a.run.webSearchEnabled,worktreeConcurrencyLimit:"SESSION"===a.run.kind?a.run.worktreeConcurrencyLimit:b("SESSION",void 0),initialPrompt:h,parentRunId:a.runId,parentRunNumber:a.run.displayNumber,followUpMode:"ANSWER_REVISION",inputs:{create:{id:I,sequence:0,kind:"ANSWER_REVISION",prompt:h}}}});o&&await n.worktreeRunLease.update({where:{runId:a.runId},data:{runId:p,purpose:"RUN",reservationKey:null,acquiredAt:new Date}}),await n.agentRun.update({where:{id:a.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:m}});let E=await T(n,{runId:p,agentId:a.run.agentId,type:"REVISE_ANSWER",payload:{batchId:A,revisionId:l,inputId:I,stash:!!t,rollback:i,checkpoint:a.checkpoint}});return{batch:a,run:f,command:E,sourceRunId:a.runId,sourceAgentId:a.run.agentId,transfersSlot:o}});return M(s.sourceRunId),M(s.run.id),s.transfersSlot&&O(s.command,s.sourceAgentId),await this.promoteQueuedLaneSafely(s.run.worktreeId,"SESSION"),this.get(s.run.id)}async pendingCommands(A){return await this.reconcileQueuedRuns(A),(await (0,n.U)()).runCommand.findMany({where:{agentId:A,OR:[{status:"RUNNING"},{status:"QUEUED",run:{status:{not:"QUEUED"}}}]},orderBy:[{createdAt:"asc"},{sequence:"asc"}],take:200,include:v})}async claimCommand(A,e){let t=await (0,n.U)(),r=await t.runCommand.findUnique({where:{id:e},select:{agentId:!0,status:!0,type:!0,run:{select:{worktreeId:!0,status:!0}}}});if(!r||r.agentId!==A)throw Error("Run command not found");if("QUEUED"===r.status&&"QUEUED"===r.run.status&&new Set(["START","PLAY_PLAN","CONTINUE","REVISE_ANSWER"]).has(r.type))throw Error("Run command is waiting for the worktree");"QUEUED"===r.status&&r.run.worktreeId&&await this.diskSpace?.assertWorktreeCanStart(r.run.worktreeId),await t.runCommand.updateMany({where:{id:e,agentId:A,status:"QUEUED"},data:{status:"RUNNING",claimedAt:new Date}});let i=await t.runCommand.findUnique({where:{id:e},include:v});if(!i||i.agentId!==A)throw Error("Run command not found");if("RUNNING"!==i.status)throw Error("Run command cannot be claimed");return i}async completeCommand(A,e,t,r){let i=await (0,n.U)(),a=await i.runCommand.findUnique({where:{id:e},include:{run:{select:{worktreeId:!0,kind:!0}}}});if(!a||a.agentId!==A)throw Error("Run command not found");let s=await i.runCommand.update({where:{id:e},data:{status:"SUCCEEDED"===t?"SUCCEEDED":"FAILED",error:D(r,2e4),finishedAt:new Date}});if("DELETE_NATIVE"===s.type&&"SUCCEEDED"===s.status){let A=await i.agentRun.findUnique({where:{id:s.runId},include:{inputs:{include:{attachments:!0}}}});if(A){let e=A.inputs.flatMap(A=>A.attachments.map(({storagePath:A})=>A));await i.agentRun.delete({where:{id:A.id}}),await I(e)}}else if("FAILED"===s.status){"PREPARE_ANSWER_REVISION"===s.type&&await i.worktreeRunLease.deleteMany({where:{runId:s.runId,purpose:w}});let A="ANSWER"===s.type&&await i.runQuestionBatch.count({where:{runId:s.runId,status:"PENDING"}});await i.agentRun.updateMany({where:{id:s.runId,status:{notIn:[...E]}},data:{error:s.error,phase:A?"WAITING_FOR_ANSWER":`${s.type}_FAILED`,...["START","PLAY_PLAN","CONTINUE"].includes(s.type)?{status:"FAILED",finishedAt:new Date}:{},...["PREPARE_ANSWER_REVISION","REVISE_ANSWER"].includes(s.type)?{status:"PAUSED",finishedAt:null}:{}}}),["START","PLAY_PLAN","CONTINUE"].includes(s.type)&&await i.worktreeRunLease.deleteMany({where:{runId:s.runId}})}else if(["PAUSE","CANCEL"].includes(s.type)){let A="CANCEL"===s.type;await i.agentRun.updateMany({where:{id:s.runId,status:{notIn:[...E]}},data:{status:A?"CANCELLED":"PAUSED",phase:A?"CANCELLED":"PAUSED",finishedAt:A?new Date:null}}),A&&await i.worktreeRunLease.deleteMany({where:{runId:s.runId}})}return M(s.runId),a.run.worktreeId&&("PLAN"===a.run.kind||"SESSION"===a.run.kind)&&await this.promoteQueuedLaneSafely(a.run.worktreeId,a.run.kind),s}async beginAttempt(A,e,t){let i=await (0,n.U)(),a=await i.agentRun.findUnique({where:{id:e},include:{attempts:!0}});if(!a||a.agentId!==A)throw Error("Run not found for this agent");if("QUEUED"===a.status)throw Error("Run is waiting for the worktree");if(E.has(a.status))throw Error("Run is already finished");let s=a.attempts.length,o=await i.runAttempt.create({data:{id:(0,r.randomUUID)(),runId:e,generation:s,nativeId:t||null,nativeKey:t?`${A}:${a.provider}:${t}`:null,status:"RUNNING"}});return await i.agentRun.update({where:{id:e},data:{phase:"RUNNING",startedAt:a.startedAt??new Date}}),M(e),o}async updateAttemptNativeId(A,e,t,r){let i=await (0,n.U)(),a=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:e},include:{run:!0}});if(!n||n.run.agentId!==A)throw Error("Attempt not found");let a=`${A}:${n.run.provider}:${t}`,s=await i.runAttempt.findUnique({where:{nativeKey:a}});if(s&&s.id!==e){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:e},data:{nativeId:t,nativeKey:a}});return r&&await i.agentRun.update({where:{id:n.runId},data:{providerVersion:r}}),o});return M(a.runId),a}async appendEvents(A,e,t,r){let i=await (0,n.U)(),s=await i.agentRun.findUnique({where:{id:e}});if(!s||s.agentId!==A)throw Error("Run not found for this agent");let o=r.slice(0,500).map(A=>{let r=B(A.summary,"Event summary",2e3);return{id:A.id,runId:e,attemptId:t,sequence:A.sequence,type:B(A.type,"Event type",100).toUpperCase(),summary:r,searchText:D(A.searchText,1e5)??r,detailMarkdown:D(A.detailMarkdown,5e5),rawJson:void 0===A.raw?null:JSON.stringify(A.raw),createdAt:S(A.createdAt)}});if(!o.length)return[];let l=await i.$transaction(async A=>{let r=new Set((await A.runEvent.findMany({where:{id:{in:o.map(A=>A.id)}},select:{id:!0}})).map(({id:A})=>A)),i=o.filter(A=>!r.has(A.id));if(i.length){await A.runEvent.createMany({data:i});let r=i.filter(A=>A.type.includes("TOOL")&&!A.type.includes("QUESTION")).map(A=>({id:`event:${A.id}`,runId:e,attemptId:t,sequence:A.sequence,name:A.summary.split(/[\s:(]/,1)[0]||A.type,status:A.type.includes("FAIL")||A.type.includes("ERROR")?"FAILED":A.type.includes("COMPLETE")||A.type.includes("RESULT")?"COMPLETED":"OBSERVED",inputJson:A.rawJson,error:A.type.includes("FAIL")||A.type.includes("ERROR")?A.summary:null,finishedAt:A.createdAt}));r.length&&(await A.runToolCall.createMany({data:r}),await A.agentRun.update({where:{id:e},data:{toolCallCount:await A.runToolCall.count({where:{runId:e}})}}))}return A.runEvent.findMany({where:{id:{in:o.map(A=>A.id)}},orderBy:{sequence:"asc"}})});for(let A of l)a._H.publish((0,a.zP)(e),{runEventAdded:A});return M(e),l}async reportQuestion(A,e,t,i,s,o){if(!o.length||o.some(A=>!A.field)&&o.length>10||o.length>200)throw Error("Question batch is invalid");let l=await (0,n.U)(),c=await l.$transaction(async n=>{let a=await n.agentRun.findUnique({where:{id:e},include:{worktree:!0}});if(!a||a.agentId!==A)throw Error("Run not found for this agent");if(i){let A=await n.runQuestionBatch.findUnique({where:{runId_nativeRequestId:{runId:e,nativeRequestId:i}},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}});if(A)return{batch:A,notification:null}}let l=(0,r.randomUUID)(),c=await n.runQuestionBatch.create({data:{id:l,runId:e,attemptId:t,nativeRequestId:i,eventSequence:Number.isInteger(s)&&(s??-1)>=-1?s:null,questions:{create:o.map((A,e)=>({id:`${l}:${e}:${A.id||"question"}`,position:e,header:D(A.header,200),prompt:B(A.prompt,"Question",1e4),multiSelect:!!A.multiSelect,allowCustom:!1!==A.allowCustom,fieldJson:A.field?JSON.stringify(d(A.field)):null,options:{create:(A.options??[]).map((A,e)=>({id:(0,r.randomUUID)(),position:e,label:B(A.label,"Option label",500),description:D(A.description,2e3)}))}}))}},include:{questions:{include:{options:!0}}}});return await n.agentRun.update({where:{id:e},data:{phase:"WAITING_FOR_ANSWER"}}),{batch:c,notification:this.notifications?await this.notifications.recordInTransaction(n,{dedupeKey:`run:${e}:question:${l}`,typeKey:"RUN_NEEDS_ANSWER",title:`${"PLAN"===a.kind?"Plan":"Session"} #${a.displayNumber} needs an answer`,body:o[0].prompt.slice(0,1e3),href:R(a),resourceKind:a.kind,resourceId:a.id,worktreeId:a.worktreeId,highlightColor:a.worktree?.highlightColor}):null}});return this.notifications?.created(c.notification),M(e),a._H.publish((0,a.hn)(e),{runQuestionChanged:{id:c.batch.id,runId:e}}),c.batch}async reportUsage(A,e,t,i){let a=await (0,n.U)(),s=await a.agentRun.findUnique({where:{id:e}});if(!s||s.agentId!==A)throw Error("Run not found for this agent");let o=A=>Number.isFinite(A)&&(A??0)>=0?Math.floor(A):0;return await a.$transaction(async A=>{let n=await A.runModelUsage.findFirst({where:{runId:e,attemptId:t,model:i.model}}),a={inputTokens:o(i.inputTokens),outputTokens:o(i.outputTokens),reasoningTokens:o(i.reasoningTokens),cacheReadTokens:o(i.cacheReadTokens),cacheWriteTokens:o(i.cacheWriteTokens),estimatedCost:i.estimatedCost??null};n?await A.runModelUsage.update({where:{id:n.id},data:a}):await A.runModelUsage.create({data:{id:(0,r.randomUUID)(),runId:e,attemptId:t,model:i.model,...a}});let s=await A.runModelUsage.aggregate({where:{runId:e},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}}),l=await A.runModelUsage.findMany({where:{runId:e,estimatedCost:{not:null}},select:{model:!0,estimatedCost:!0}}),c=l.find(({model:A})=>"estimated-total"===A)?.estimatedCost,d=await A.runToolCall.count({where:{runId:e}});await A.agentRun.update({where:{id:e},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(d,o(i.toolCallCount)),estimatedCost:c??(l.length?l.reduce((A,e)=>A+(e.estimatedCost??0),0):null),pricingSource:D(i.pricingSource,200),pricingUpdatedAt:new Date}})}),M(e),this.get(e)}async finishAttempt(A,e,t){let r=t.status.toUpperCase();if(!["PAUSED","COMPLETED","CANCELLED","FAILED"].includes(r))throw Error("Run completion status is invalid");let i=await (0,n.U)(),a=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:e},include:{run:{include:{worktree:!0}}}});if(!n||n.run.agentId!==A)throw Error("Attempt not found");let a=E.has(n.run.status)?n.run.status:r;await i.runAttempt.update({where:{id:e},data:{status:a,finishedAt:new Date}}),await i.runQuestionBatch.updateMany({where:{runId:n.runId,status:"PENDING"},data:{status:"SUPERSEDED",supersededAt:new Date}});let s=E.has(n.run.status)?n.run:await i.agentRun.update({where:{id:n.runId},data:{status:r,phase:t.phase?.trim().toUpperCase()||r,finalOutput:D(t.finalOutput,2e6),error:D(t.error,2e4),finishedAt:"PAUSED"===r?null:new Date}});E.has(a)&&await i.worktreeRunLease.deleteMany({where:{runId:s.id,purpose:{not:w}}});let o="COMPLETED"===a?"RUN_COMPLETED":"FAILED"===a?"RUN_FAILED":"CANCELLED"===a?"RUN_CANCELLED":"RECOVERY_PAUSED"===t.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:t.error||t.finalOutput?.slice(0,1e3)||`The ${s.kind.toLowerCase()} is ${a.toLowerCase()}.`,href:R(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(a.notification),M(a.run.id),E.has(a.run.status)&&a.run.worktreeId&&("PLAN"===a.run.kind||"SESSION"===a.run.kind)&&await this.promoteQueuedLaneSafely(a.run.worktreeId,a.run.kind),this.get(a.run.id)}async reportCheckpoint(A,e,t,i){let a=await (0,n.U)(),s=await a.agentRun.findUnique({where:{id:e}});if(!s||s.agentId!==A)throw Error("Run not found for this agent");if(i.questionBatchId){let A=await a.runQuestionBatch.findUnique({where:{id:i.questionBatchId}});if(!A||A.runId!==e)throw Error("Question batch not found")}let o=await a.runCheckpoint.create({data:{id:(0,r.randomUUID)(),runId:e,attemptId:t,questionBatchId:i.questionBatchId??null,kind:B(i.kind,"Checkpoint kind",100).toUpperCase(),headSha:D(i.headSha,100),branch:D(i.branch,500),upstreamSha:D(i.upstreamSha,100),indexTree:D(i.indexTree,100),worktreeTree:D(i.worktreeTree,100),refName:D(i.refName,1e3),manifestJson:D(i.manifestJson,2e6),diffSummary:D(i.diffSummary,5e5),diffPatch:D(i.diffPatch,2e6),stashRef:D(i.stashRef,1e3)}});return M(e),o}async reportAnswerRevisionPreview(A,e,t,r){let i=await (0,n.U)(),s=await i.runQuestionBatch.findUnique({where:{id:e},include:{run:!0}});if(!s?.runId||!s.run||s.run.agentId!==A||"MANAGED"!==s.run.origin)throw Error("Question batch not found for this agent");let o=await i.runQuestionBatch.update({where:{id:e},data:{revisionPreparedAt:new Date,rollbackPatch:t.slice(0,2e6),pushedCommitWarning:D(r,2e4)},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}}}});return M(s.runId),a._H.publish((0,a.hn)(s.runId),{runQuestionChanged:{id:e,runId:s.runId}}),o}async applyAnswerRevision(A,e,t,r){let i=await (0,n.U)(),a=await i.$transaction(async i=>{let n=await i.runQuestionBatch.findUnique({where:{id:e},include:{run:!0,attempt:!0}}),a=await i.runAttempt.findUnique({where:{id:r},include:{run:!0}}),s=await i.runAnswerRevision.findUnique({where:{id:t}});if(!n?.runId||!n.run||n.run.agentId!==A||!n.attempt||!a||a.run.parentRunId!==n.runId||"ANSWER_REVISION"!==a.run.followUpMode||!s||s.batchId!==e)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:A})=>A);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:A})=>A);return await i.runQuestionBatch.updateMany({where:{id:{in:c}},data:{status:"SUPERSEDED",supersededAt:o}}),await i.runAnswerRevision.updateMany({where:{OR:[{batchId:{in:c}},{batchId:e,id:{not:t}}],supersededAt:null},data:{supersededAt:o}}),await i.runAnswerRevision.update({where:{id:t},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 M(a.sourceRunId),M(a.replacementRunId),this.get(a.replacementRunId)}async importHistory(A,e,t){let i=await (0,n.U)();await i.$transaction(async i=>{if(t.events){let r=t.events.map((r,i)=>({id:`${e}:import:${r.id}`,runId:A,attemptId:e,sequence:i,type:B(r.type,"Event type",100).toUpperCase(),summary:B(r.summary,"Event summary",2e3),searchText:(r.searchText??JSON.stringify(r.raw??r.summary)).slice(0,1e5),detailMarkdown:r.detailMarkdown?.slice(0,5e5)??null,rawJson:void 0===r.raw?null:JSON.stringify(r.raw),createdAt:S(r.createdAt)??S(t.createdAt)??new Date}));await i.runToolCall.deleteMany({where:{runId:A,attemptId:e}}),await i.runEvent.deleteMany({where:{runId:A,attemptId:e}});for(let A=0;A<r.length;A+=500)await i.runEvent.createMany({data:r.slice(A,A+500)});let n=new Map;for(let A of r){let e=A.rawJson?JSON.parse(A.rawJson):{};if("user"===e.type&&Array.isArray(e.message?.content))for(let t of e.message.content)"tool_result"===t.type&&"string"==typeof t.tool_use_id&&n.set(t.tool_use_id,{content:t.content??e.tool_use_result??null,isError:!0===t.is_error,createdAt:A.createdAt})}let a=r.flatMap(t=>{let r=t.rawJson?JSON.parse(t.rawJson):{},i="assistant"===r.type&&Array.isArray(r.message?.content)?r.message.content.find(A=>"tool_use"===A.type):void 0;if(i){let r=n.get(String(i.id));return[{id:`event:${t.id}`,runId:A,attemptId:e,sequence:t.sequence,name:String(i.name??"Tool"),status:r?r.isError?"FAILED":"COMPLETED":"OBSERVED",inputJson:t.rawJson,outputJson:JSON.stringify(r?.content??null),error:r?.isError?"string"==typeof r.content?r.content:JSON.stringify(r.content):null,startedAt:t.createdAt,finishedAt:r?.createdAt??null}]}let a=r.params?.item,s=r.properties?.part,o=a&&["commandExecution","fileChange","mcpToolCall","dynamicToolCall","webSearch"].includes(a.type),l="message.part.updated"===r.type&&s?.type==="tool";if(!o&&!l)return[];let c=l?s.state??{}:a,d=String(c.status??"COMPLETED").toUpperCase(),u=l&&"number"==typeof c.time?.start?new Date(c.time.start):t.createdAt,g=l?"number"==typeof c.time?.end?new Date(c.time.end):null:["INPROGRESS","IN_PROGRESS","RUNNING","PENDING"].includes(d)?null:t.createdAt;return[{id:`event:${t.id}`,runId:A,attemptId:e,sequence:t.sequence,name:l?s.tool??s.name??"tool":a.tool??a.command??a.type,status:"ERROR"===d?"FAILED":"INPROGRESS"===d?"IN_PROGRESS":d,inputJson:t.rawJson,outputJson:JSON.stringify(l?c.result??c.output??null:a.result??a.aggregatedOutput??null),error:c.error?"string"==typeof c.error?c.error:JSON.stringify(c.error):null,startedAt:u,finishedAt:g}]});for(let A=0;A<a.length;A+=500)await i.runToolCall.createMany({data:a.slice(A,A+500)});await i.agentRun.update({where:{id:A},data:{toolCallCount:await i.runToolCall.count({where:{runId:A}})}})}if(t.usage){for(let n of(await i.runModelUsage.deleteMany({where:{runId:A,attemptId:e}}),t.usage)){let t=A=>Number.isFinite(A)&&(A??0)>=0?Math.floor(A):0;await i.runModelUsage.create({data:{id:(0,r.randomUUID)(),runId:A,attemptId:e,model:B(n.model,"Model",500),inputTokens:t(n.inputTokens),outputTokens:t(n.outputTokens),reasoningTokens:t(n.reasoningTokens),cacheReadTokens:t(n.cacheReadTokens),cacheWriteTokens:t(n.cacheWriteTokens),estimatedCost:n.estimatedCost??null}})}let n=await i.runModelUsage.aggregate({where:{runId:A},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}});await i.agentRun.update({where:{id:A},data:{inputTokens:n._sum.inputTokens??0,outputTokens:n._sum.outputTokens??0,reasoningTokens:n._sum.reasoningTokens??0,cacheReadTokens:n._sum.cacheReadTokens??0,cacheWriteTokens:n._sum.cacheWriteTokens??0,estimatedCost:t.estimatedCost??(t.usage.length&&t.usage.every(A=>null!=A.estimatedCost)?n._sum.estimatedCost??null:null),pricingSource:D(t.pricingSource??[...new Set(t.usage.map(A=>A.pricingSource).filter(Boolean))].join(", "),200),pricingUpdatedAt:new Date}})}else void 0!==t.estimatedCost&&await i.agentRun.update({where:{id:A},data:{estimatedCost:t.estimatedCost,pricingSource:D(t.pricingSource,200),pricingUpdatedAt:new Date}})})}async importRuns(A,e,t){let i=y(f,e,"Provider"),a=await (0,n.U)(),s=0;for(let e of t){let t=e.prompt?.trim()||void 0,n=`${A}:${i}:${B(e.nativeId,"Native ID",500)}`,o=e.events||e.usage||void 0!==e.estimatedCost?(0,r.createHash)("sha256").update(JSON.stringify([e.events,e.usage,e.estimatedCost,e.pricingSource])).digest("hex"):void 0,l=e.rawMetadata&&"object"==typeof e.rawMetadata?e.rawMetadata:{},c=(0,r.createHash)("sha256").update(JSON.stringify({...e,events:o,usage:void 0})).digest("hex"),d=JSON.stringify({...l,...o?{importedHistoryDigest:o}:{},importedSnapshotDigest:c}),u=(()=>{let A=e.status?.toUpperCase()??"COMPLETED";return["ACTIVE","RUNNING","STARTING","IN_PROGRESS","WAITING_FOR_ANSWER"].includes(A)?"IN_PROGRESS":"PAUSED"===A?"PAUSED":"CANCELLED"===A||"CANCELED"===A?"CANCELLED":["FAILED","ERROR","SYSTEMERROR"].includes(A)?"FAILED":"COMPLETED"})(),g=await a.runAttempt.findUnique({where:{nativeKey:n},include:{run:!0}});if(g){if("IMPORTED"===g.run.origin){let A=JSON.parse(g.rawMetadataJson??"{}"),r=("SESSION"===g.run.kind&&"IN_PROGRESS"===u?await a.worktreeRunLease.findFirst({where:{worktreeId:g.run.worktreeId??"",run:{kind:"SESSION",origin:"MANAGED",status:{in:["IN_PROGRESS","PAUSED"]}}}}):null)?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED";if(A.importedSnapshotDigest===c&&g.run.phase===r)continue;let i=o&&A.importedHistoryDigest!==o;await a.$transaction([a.runAttempt.update({where:{id:g.id},data:{rawMetadataJson:i?JSON.stringify(l):d}}),a.agentRun.update({where:{id:g.runId},data:{status:u,phase:r,...t?{initialPrompt:t,inputs:{updateMany:{where:{kind:"INITIAL",sequence:0},data:{prompt:t}}}}:{},model:e.model||g.run.model,effort:void 0===e.effort?g.run.effort:D(e.effort,100),finalOutput:void 0===e.finalOutput?g.run.finalOutput:D(e.finalOutput,2e6),branch:e.branch??g.run.branch,jiraIssueKey:k(e.jiraIssueKey),nativeArchivedAt:e.archived?g.run.nativeArchivedAt??new Date:null,startedAt:S(e.createdAt)??g.run.startedAt,finishedAt:"IN_PROGRESS"===u?null:S(e.updatedAt)??g.run.finishedAt}})]),i&&(await this.importHistory(g.runId,g.id,e),await a.runAttempt.update({where:{id:g.id},data:{rawMetadataJson:d}})),M(g.runId)}continue}let h=await a.worktree.findUnique({where:{id:e.worktreeId},include:{codebase:{include:{repository:!0}}}});if(!h||h.codebase.agentId!==A)continue;let C=e.kind?.toUpperCase()==="PLAN"?"PLAN":"SESSION",p="SESSION"===C&&"IN_PROGRESS"===u?await a.worktreeRunLease.findFirst({where:{worktreeId:h.id,run:{kind:"SESSION",origin:"MANAGED",status:{in:["IN_PROGRESS","PAUSED"]}}}}):null,I=await a.$transaction(A=>N(A,C)),m=(0,r.randomUUID)(),f=(0,r.randomUUID)();await a.agentRun.create({data:{id:m,kind:C,displayNumber:I,status:u,phase:p?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",origin:"IMPORTED",provider:i,worktreeId:h.id,repositoryId:h.codebase.repository.id,agentId:A,jiraIssueKey:k(e.jiraIssueKey),repositoryName:h.codebase.repository.name,branch:e.branch??h.branch,model:e.model||"unknown",effort:D(e.effort,100),worktreeConcurrencyLimit:b(C,void 0),initialPrompt:t??"Imported provider history",finalOutput:D(e.finalOutput,2e6),archivedAt:e.archived?new Date:null,nativeArchivedAt:e.archived?new Date:null,startedAt:S(e.createdAt),finishedAt:S(e.updatedAt),createdAt:S(e.createdAt),attempts:{create:{id:f,generation:0,nativeId:e.nativeId,nativeKey:n,status:"IMPORTED",rawMetadataJson:o?JSON.stringify(l):d}},inputs:{create:{id:(0,r.randomUUID)(),sequence:0,kind:"INITIAL",prompt:t??"Imported provider history"}}}}),o&&(await this.importHistory(m,f,e),await a.runAttempt.update({where:{id:f},data:{rawMetadataJson:d}})),M(m),s+=1}return await a.runProviderSync.upsert({where:{agentId_provider:{agentId:A,provider:i}},create:{id:(0,r.randomUUID)(),agentId:A,provider:i,status:"IDLE",lastCompletedAt:new Date,importedCount:s},update:{status:"IDLE",lastCompletedAt:new Date,lastError:null,importedCount:{increment:s}}}),s}async providerCatalog(A={}){let e=await (0,n.U)(),t=!!(A.runId||A.worktreeId),r=A.worktreeId??(A.runId?(await e.agentRun.findUnique({where:{id:A.runId},select:{worktreeId:!0}}))?.worktreeId:null),i=A.runId?(await e.agentRun.findUnique({where:{id:A.runId},select:{agentId:!0}}))?.agentId:A.worktreeId?(await e.worktree.findUnique({where:{id:A.worktreeId},select:{codebase:{select:{agentId:!0}}}}))?.codebase.agentId:null,[a,o]=t&&!i?[[],[]]:await Promise.all([e.agent.findMany({where:i?{id:i}:void 0,select:{id:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),e.runProviderSync.findMany({where:i?{agentId:i}:void 0,orderBy:{updatedAt:"desc"}})]);return f.map(A=>{let e=`runs.provider.${A.toLowerCase()}`,t=a.some(t=>{let r=o.find(e=>e.agentId===t.id&&e.provider===A);return!t.disconnectedAt&&!!t.lastSeenAt&&Date.now()-t.lastSeenAt.getTime()<=(0,s.z)(t)&&JSON.parse(t.capabilitiesJson).includes(e)&&r?.status!=="FAILED"}),i=o.find(({provider:e})=>e===A)?.catalogJson,n=i?JSON.parse(i):null,l=r&&n?.worktrees?n.worktrees[r]?.models??[]:n?.models;return{key:A,label:"OPENCODE"===A?"OpenCode":"CLAUDE"===A?"Claude":"Codex",available:t,models:l?.length?l:[{id:"default",label:"Provider default",efforts:["auto","low","medium","high"]}],supportsWebSearch:n?.capabilities?.webSearch??!0,supportsQuestions:n?.capabilities?.questions??!0,supportsImport:n?.capabilities?.import??!0,supportsPause:n?.capabilities?.pause??!0,supportsSteering:n?.capabilities?.steering??!0,supportsResume:n?.capabilities?.resume??!0,supportsNativeDelete:n?.capabilities?.nativeDelete??!0}})}async providerImportStatus(){return(await (0,n.U)()).runProviderSync.findMany({orderBy:[{agentId:"asc"},{provider:"asc"}]})}async reportProviderImportStatus(A,e,t,i,a){let s=y(f,e,"Provider"),o=t.trim().toUpperCase();if(!["SYNCING","IDLE","FAILED"].includes(o))throw Error("Import status is invalid");return(await (0,n.U)()).runProviderSync.upsert({where:{agentId_provider:{agentId:A,provider:s}},create:{id:(0,r.randomUUID)(),agentId:A,provider:s,status:o,lastStartedAt:"SYNCING"===o?new Date:void 0,lastCompletedAt:"IDLE"===o?new Date:void 0,lastError:D(i,2e4),catalogJson:void 0===a?void 0:JSON.stringify(a)},update:{status:o,lastStartedAt:"SYNCING"===o?new Date:void 0,lastCompletedAt:"IDLE"===o?new Date:void 0,lastError:"FAILED"===o?D(i,2e4):null,catalogJson:void 0===a?void 0:JSON.stringify(a)}})}subscribeRunList(A){let r=a._H.iterate(a.hu);return(0,t.G)(r,async t=>{if("drafts"===t.runChanged.id)return!1;if(!A.kind&&!A.appId&&!A.provider&&!A.origin&&!A.worktreeId&&!A.workflowId)return!0;let r=await (0,n.U)(),i=await r.agentRun.findUnique({where:{id:t.runChanged.id},select:{worktreeId:!0,workflowRun:{select:{workflowId:!0}},kind:!0,provider:!0,origin:!0,repositoryId:!0}});return!i||(!A.workflowId||i.workflowRun?.workflowId===A.workflowId||!!await (0,e.f)(A.workflowId,i.worktreeId))&&(!A.worktreeId||i.worktreeId===A.worktreeId)&&(!A.kind||i.kind===A.kind)&&(!A.provider||i.provider===A.provider.trim().toUpperCase())&&(!A.origin||i.origin===A.origin)&&(!A.appId||!!i.repositoryId&&!!await r.appRepository.findFirst({where:{appId:A.appId,repositoryId:i.repositoryId},select:{appId:!0}}))})}subscribeRuns(){return a._H.iterate(a.hu)}subscribeRun(A){return a._H.iterate((0,a.k_)(A))}subscribeEvents(A){return a._H.iterate((0,a.zP)(A))}subscribeQuestions(A){return a._H.iterate((0,a.hn)(A))}async requireWorktree(A,e){let t=await (0,n.U)(),r=await t.worktree.findUnique({where:{id:B(A,"Worktree",500)},include:{codebase:{include:{repository:!0,agent:!0}}}});if(!r||"AVAILABLE"!==r.availability)throw Error("Worktree is unavailable");if(e){let A=r.codebase.agent,i=JSON.parse(A.capabilitiesJson);if(A.disconnectedAt||!A.lastSeenAt||Date.now()-A.lastSeenAt.getTime()>(0,s.z)(A)||!i.includes(`runs.provider.${e.toLowerCase()}`))throw Error(`${e} is unavailable on this worktree's agent`);let n=await t.runProviderSync.findUnique({where:{agentId_provider:{agentId:r.codebase.agentId,provider:e}}});if(n?.status==="FAILED")throw Error(`${e} is unavailable: ${n.lastError??"provider capability check failed"}`)}return r}async requireAttachments(A,e){if(!A.length)return;if(A.length>100)throw Error("Too many attachments");let t=await (0,n.U)(),r=await t.runAttachment.findMany({where:{id:{in:A},inputId:null,...e?{OR:[{draftId:e},{draftId:null}]}:{draftId:null}}});if(r.length!==A.length)throw Error("One or more attachments are unavailable");if(r.reduce((A,e)=>A+e.size,0)>0x6400000)throw Error("Attachments exceed the 100 MB input limit")}}],310509)},292988,A=>{var e=A.i(879838),t=A.i(945565);function r(A){return A&&"object"==typeof A&&"message"in A&&"string"==typeof A.message?A.message:String(A)}function i(A,e,t,i){A.newFunction(t,t=>{let n=t?JSON.parse(A.getString(t)):null,a=A.newPromise();return e.add(a),Promise.resolve().then(()=>i(n)).then(A=>({ok:!0,value:A}),A=>({ok:!1,error:r(A)})).then(t=>{a.alive&&A.alive&&(A.newString(JSON.stringify(t)).consume(A=>a.resolve(A)),e.delete(a),a.dispose(),A.runtime.executePendingJobs().dispose())}).catch(()=>{}),a.handle}).consume(e=>A.setProp(A.global,t,e))}async function n(A){if(!A.body)return"";let e=A.body.getReader(),t=[],r=0;for(;;){let{done:A,value:i}=await e.read();if(A)break;if((r+=i.byteLength)>0xa00000)throw await e.cancel(),Error("Script fetch response exceeded 10 MiB");t.push(i)}let i=new Uint8Array(r),n=0;for(let A of t)i.set(A,n),n+=A.byteLength;return new TextDecoder().decode(i)}let a=String.raw`
|
|
1458
|
+
${JSON.stringify(e,null,2)}`].filter(Boolean).join("\n\n").slice(0,2e6),C=await N(n,"SESSION"),p=(0,r.randomUUID)(),I=(0,r.randomUUID)(),m=new Date,f=await n.agentRun.create({data:{id:p,kind:"SESSION",displayNumber:C,status:o?"IN_PROGRESS":"QUEUED",phase:o?"ANSWER_REVISION_QUEUED":"WAITING_FOR_WORKTREE",provider:a.run.provider,worktreeId:a.run.worktreeId,repositoryId:a.run.repositoryId,agentId:a.run.agentId,jiraIssueKey:a.run.jiraIssueKey,repositoryName:a.run.repositoryName,branch:a.run.branch,model:a.run.model,effort:a.run.effort,webSearchEnabled:a.run.webSearchEnabled,worktreeConcurrencyLimit:"SESSION"===a.run.kind?a.run.worktreeConcurrencyLimit:b("SESSION",void 0),initialPrompt:h,parentRunId:a.runId,parentRunNumber:a.run.displayNumber,followUpMode:"ANSWER_REVISION",inputs:{create:{id:I,sequence:0,kind:"ANSWER_REVISION",prompt:h}}}});o&&await n.worktreeRunLease.update({where:{runId:a.runId},data:{runId:p,purpose:"RUN",reservationKey:null,acquiredAt:new Date}}),await n.agentRun.update({where:{id:a.runId},data:{status:"CANCELLED",phase:"SUPERSEDED_BY_ANSWER_REVISION",finishedAt:m}});let E=await T(n,{runId:p,agentId:a.run.agentId,type:"REVISE_ANSWER",payload:{batchId:A,revisionId:l,inputId:I,stash:!!t,rollback:i,checkpoint:a.checkpoint}});return{batch:a,run:f,command:E,sourceRunId:a.runId,sourceAgentId:a.run.agentId,transfersSlot:o}});return M(s.sourceRunId),M(s.run.id),s.transfersSlot&&O(s.command,s.sourceAgentId),await this.promoteQueuedLaneSafely(s.run.worktreeId,"SESSION"),this.get(s.run.id)}async pendingCommands(A){return await this.reconcileQueuedRuns(A),(await (0,n.U)()).runCommand.findMany({where:{agentId:A,OR:[{status:"RUNNING"},{status:"QUEUED",run:{status:{not:"QUEUED"}}}]},orderBy:[{createdAt:"asc"},{sequence:"asc"}],take:200,include:v})}async claimCommand(A,e){let t=await (0,n.U)(),r=await t.runCommand.findUnique({where:{id:e},select:{agentId:!0,status:!0,type:!0,run:{select:{worktreeId:!0,status:!0}}}});if(!r||r.agentId!==A)throw Error("Run command not found");if("QUEUED"===r.status&&"QUEUED"===r.run.status&&new Set(["START","PLAY_PLAN","CONTINUE","REVISE_ANSWER"]).has(r.type))throw Error("Run command is waiting for the worktree");"QUEUED"===r.status&&r.run.worktreeId&&await this.diskSpace?.assertWorktreeCanStart(r.run.worktreeId),await t.runCommand.updateMany({where:{id:e,agentId:A,status:"QUEUED"},data:{status:"RUNNING",claimedAt:new Date}});let i=await t.runCommand.findUnique({where:{id:e},include:v});if(!i||i.agentId!==A)throw Error("Run command not found");if("RUNNING"!==i.status)throw Error("Run command cannot be claimed");return i}async completeCommand(A,e,t,r){let i=await (0,n.U)(),a=await i.runCommand.findUnique({where:{id:e},include:{run:{select:{worktreeId:!0,kind:!0}}}});if(!a||a.agentId!==A)throw Error("Run command not found");let s=await i.runCommand.update({where:{id:e},data:{status:"SUCCEEDED"===t?"SUCCEEDED":"FAILED",error:D(r,2e4),finishedAt:new Date}});if("DELETE_NATIVE"===s.type&&"SUCCEEDED"===s.status){let A=await i.agentRun.findUnique({where:{id:s.runId},include:{inputs:{include:{attachments:!0}}}});if(A){let e=A.inputs.flatMap(A=>A.attachments.map(({storagePath:A})=>A));await i.agentRun.delete({where:{id:A.id}}),await I(e)}}else if("FAILED"===s.status){"PREPARE_ANSWER_REVISION"===s.type&&await i.worktreeRunLease.deleteMany({where:{runId:s.runId,purpose:w}});let A="ANSWER"===s.type&&await i.runQuestionBatch.count({where:{runId:s.runId,status:"PENDING"}});await i.agentRun.updateMany({where:{id:s.runId,status:{notIn:[...E]}},data:{error:s.error,phase:A?"WAITING_FOR_ANSWER":`${s.type}_FAILED`,...["START","PLAY_PLAN","CONTINUE"].includes(s.type)?{status:"FAILED",finishedAt:new Date}:{},...["PREPARE_ANSWER_REVISION","REVISE_ANSWER"].includes(s.type)?{status:"PAUSED",finishedAt:null}:{}}}),["START","PLAY_PLAN","CONTINUE"].includes(s.type)&&await i.worktreeRunLease.deleteMany({where:{runId:s.runId}})}else if(["PAUSE","CANCEL"].includes(s.type)){let A="CANCEL"===s.type;await i.agentRun.updateMany({where:{id:s.runId,status:{notIn:[...E]}},data:{status:A?"CANCELLED":"PAUSED",phase:A?"CANCELLED":"PAUSED",finishedAt:A?new Date:null}}),A&&await i.worktreeRunLease.deleteMany({where:{runId:s.runId}})}return M(s.runId),a.run.worktreeId&&("PLAN"===a.run.kind||"SESSION"===a.run.kind)&&await this.promoteQueuedLaneSafely(a.run.worktreeId,a.run.kind),s}async beginAttempt(A,e,t){let i=await (0,n.U)(),a=await i.agentRun.findUnique({where:{id:e},include:{attempts:!0}});if(!a||a.agentId!==A)throw Error("Run not found for this agent");if("QUEUED"===a.status)throw Error("Run is waiting for the worktree");if(E.has(a.status))throw Error("Run is already finished");let s=a.attempts.length,o=await i.runAttempt.create({data:{id:(0,r.randomUUID)(),runId:e,generation:s,nativeId:t||null,nativeKey:t?`${A}:${a.provider}:${t}`:null,status:"RUNNING"}});return await i.agentRun.update({where:{id:e},data:{phase:"RUNNING",startedAt:a.startedAt??new Date}}),M(e),o}async updateAttemptNativeId(A,e,t,r,i){let a=await (0,n.U)(),s=await a.$transaction(async n=>{let a=await n.runAttempt.findUnique({where:{id:e},include:{run:!0}});if(!a||a.run.agentId!==A)throw Error("Attempt not found");let s=`${A}:${a.run.provider}:${t}`,l=await n.runAttempt.findUnique({where:{nativeKey:s}});if(l&&l.id!==e){if(l.runId!==a.runId)throw Error("Native provider session belongs to another run");await n.runAttempt.update({where:{id:l.id},data:{nativeKey:null}})}let c=await n.runAttempt.update({where:{id:e},data:{nativeId:t,nativeKey:s,...i?{rawMetadataJson:JSON.stringify((0,o.B)(a.rawMetadataJson,i))}:{}}});return r&&await n.agentRun.update({where:{id:a.runId},data:{providerVersion:r}}),c});return M(s.runId),s}async appendEvents(A,e,t,r){let i=await (0,n.U)(),s=await i.agentRun.findUnique({where:{id:e}});if(!s||s.agentId!==A)throw Error("Run not found for this agent");let o=r.slice(0,500).map(A=>{let r=B(A.summary,"Event summary",2e3);return{id:A.id,runId:e,attemptId:t,sequence:A.sequence,type:B(A.type,"Event type",100).toUpperCase(),summary:r,searchText:D(A.searchText,1e5)??r,detailMarkdown:D(A.detailMarkdown,5e5),rawJson:void 0===A.raw?null:JSON.stringify(A.raw),createdAt:S(A.createdAt)}});if(!o.length)return[];let l=await i.$transaction(async A=>{let r=new Set((await A.runEvent.findMany({where:{id:{in:o.map(A=>A.id)}},select:{id:!0}})).map(({id:A})=>A)),i=o.filter(A=>!r.has(A.id));if(i.length){await A.runEvent.createMany({data:i});let r=i.filter(A=>A.type.includes("TOOL")&&!A.type.includes("QUESTION")).map(A=>({id:`event:${A.id}`,runId:e,attemptId:t,sequence:A.sequence,name:A.summary.split(/[\s:(]/,1)[0]||A.type,status:A.type.includes("FAIL")||A.type.includes("ERROR")?"FAILED":A.type.includes("COMPLETE")||A.type.includes("RESULT")?"COMPLETED":"OBSERVED",inputJson:A.rawJson,error:A.type.includes("FAIL")||A.type.includes("ERROR")?A.summary:null,finishedAt:A.createdAt}));r.length&&(await A.runToolCall.createMany({data:r}),await A.agentRun.update({where:{id:e},data:{toolCallCount:await A.runToolCall.count({where:{runId:e}})}}))}return A.runEvent.findMany({where:{id:{in:o.map(A=>A.id)}},orderBy:{sequence:"asc"}})});for(let A of l)a._H.publish((0,a.zP)(e),{runEventAdded:A});return M(e),l}async reportQuestion(A,e,t,i,s,o){if(!o.length||o.some(A=>!A.field)&&o.length>10||o.length>200)throw Error("Question batch is invalid");let l=await (0,n.U)(),c=await l.$transaction(async n=>{let a=await n.agentRun.findUnique({where:{id:e},include:{worktree:!0}});if(!a||a.agentId!==A)throw Error("Run not found for this agent");if(i){let A=await n.runQuestionBatch.findUnique({where:{runId_nativeRequestId:{runId:e,nativeRequestId:i}},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}}}});if(A)return{batch:A,notification:null}}let l=(0,r.randomUUID)(),c=await n.runQuestionBatch.create({data:{id:l,runId:e,attemptId:t,nativeRequestId:i,eventSequence:Number.isInteger(s)&&(s??-1)>=-1?s:null,questions:{create:o.map((A,e)=>({id:`${l}:${e}:${A.id||"question"}`,position:e,header:D(A.header,200),prompt:B(A.prompt,"Question",1e4),multiSelect:!!A.multiSelect,allowCustom:!1!==A.allowCustom,fieldJson:A.field?JSON.stringify(d(A.field)):null,options:{create:(A.options??[]).map((A,e)=>({id:(0,r.randomUUID)(),position:e,label:B(A.label,"Option label",500),description:D(A.description,2e3)}))}}))}},include:{questions:{include:{options:!0}}}});return await n.agentRun.update({where:{id:e},data:{phase:"WAITING_FOR_ANSWER"}}),{batch:c,notification:this.notifications?await this.notifications.recordInTransaction(n,{dedupeKey:`run:${e}:question:${l}`,typeKey:"RUN_NEEDS_ANSWER",title:`${"PLAN"===a.kind?"Plan":"Session"} #${a.displayNumber} needs an answer`,body:o[0].prompt.slice(0,1e3),href:R(a),resourceKind:a.kind,resourceId:a.id,worktreeId:a.worktreeId,highlightColor:a.worktree?.highlightColor}):null}});return this.notifications?.created(c.notification),M(e),a._H.publish((0,a.hn)(e),{runQuestionChanged:{id:c.batch.id,runId:e}}),c.batch}async reportUsage(A,e,t,i){let a=await (0,n.U)(),s=await a.agentRun.findUnique({where:{id:e}});if(!s||s.agentId!==A)throw Error("Run not found for this agent");let o=A=>Number.isFinite(A)&&(A??0)>=0?Math.floor(A):0;return await a.$transaction(async A=>{let n=await A.runModelUsage.findFirst({where:{runId:e,attemptId:t,model:i.model}}),a={inputTokens:o(i.inputTokens),outputTokens:o(i.outputTokens),reasoningTokens:o(i.reasoningTokens),cacheReadTokens:o(i.cacheReadTokens),cacheWriteTokens:o(i.cacheWriteTokens),estimatedCost:i.estimatedCost??null};n?await A.runModelUsage.update({where:{id:n.id},data:a}):await A.runModelUsage.create({data:{id:(0,r.randomUUID)(),runId:e,attemptId:t,model:i.model,...a}});let s=await A.runModelUsage.aggregate({where:{runId:e},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}}),l=await A.runModelUsage.findMany({where:{runId:e,estimatedCost:{not:null}},select:{model:!0,estimatedCost:!0}}),c=l.find(({model:A})=>"estimated-total"===A)?.estimatedCost,d=await A.runToolCall.count({where:{runId:e}});await A.agentRun.update({where:{id:e},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(d,o(i.toolCallCount)),estimatedCost:c??(l.length?l.reduce((A,e)=>A+(e.estimatedCost??0),0):null),pricingSource:D(i.pricingSource,200),pricingUpdatedAt:new Date}})}),M(e),this.get(e)}async finishAttempt(A,e,t){let r=t.status.toUpperCase();if(!["PAUSED","COMPLETED","CANCELLED","FAILED"].includes(r))throw Error("Run completion status is invalid");let i=await (0,n.U)(),a=await i.$transaction(async i=>{let n=await i.runAttempt.findUnique({where:{id:e},include:{run:{include:{worktree:!0}}}});if(!n||n.run.agentId!==A)throw Error("Attempt not found");let a=E.has(n.run.status)?n.run.status:r;await i.runAttempt.update({where:{id:e},data:{status:a,finishedAt:new Date}}),await i.runQuestionBatch.updateMany({where:{runId:n.runId,status:"PENDING"},data:{status:"SUPERSEDED",supersededAt:new Date}});let s=E.has(n.run.status)?n.run:await i.agentRun.update({where:{id:n.runId},data:{status:r,phase:t.phase?.trim().toUpperCase()||r,finalOutput:D(t.finalOutput,2e6),error:D(t.error,2e4),finishedAt:"PAUSED"===r?null:new Date}});E.has(a)&&await i.worktreeRunLease.deleteMany({where:{runId:s.id,purpose:{not:w}}});let o="COMPLETED"===a?"RUN_COMPLETED":"FAILED"===a?"RUN_FAILED":"CANCELLED"===a?"RUN_CANCELLED":"RECOVERY_PAUSED"===t.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:t.error||t.finalOutput?.slice(0,1e3)||`The ${s.kind.toLowerCase()} is ${a.toLowerCase()}.`,href:R(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(a.notification),M(a.run.id),E.has(a.run.status)&&a.run.worktreeId&&("PLAN"===a.run.kind||"SESSION"===a.run.kind)&&await this.promoteQueuedLaneSafely(a.run.worktreeId,a.run.kind),this.get(a.run.id)}async reportCheckpoint(A,e,t,i){let a=await (0,n.U)(),s=await a.agentRun.findUnique({where:{id:e}});if(!s||s.agentId!==A)throw Error("Run not found for this agent");if(i.questionBatchId){let A=await a.runQuestionBatch.findUnique({where:{id:i.questionBatchId}});if(!A||A.runId!==e)throw Error("Question batch not found")}let o=await a.runCheckpoint.create({data:{id:(0,r.randomUUID)(),runId:e,attemptId:t,questionBatchId:i.questionBatchId??null,kind:B(i.kind,"Checkpoint kind",100).toUpperCase(),headSha:D(i.headSha,100),branch:D(i.branch,500),upstreamSha:D(i.upstreamSha,100),indexTree:D(i.indexTree,100),worktreeTree:D(i.worktreeTree,100),refName:D(i.refName,1e3),manifestJson:D(i.manifestJson,2e6),diffSummary:D(i.diffSummary,5e5),diffPatch:D(i.diffPatch,2e6),stashRef:D(i.stashRef,1e3)}});return M(e),o}async reportAnswerRevisionPreview(A,e,t,r){let i=await (0,n.U)(),s=await i.runQuestionBatch.findUnique({where:{id:e},include:{run:!0}});if(!s?.runId||!s.run||s.run.agentId!==A||"MANAGED"!==s.run.origin)throw Error("Question batch not found for this agent");let o=await i.runQuestionBatch.update({where:{id:e},data:{revisionPreparedAt:new Date,rollbackPatch:t.slice(0,2e6),pushedCommitWarning:D(r,2e4)},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}}}});return M(s.runId),a._H.publish((0,a.hn)(s.runId),{runQuestionChanged:{id:e,runId:s.runId}}),o}async applyAnswerRevision(A,e,t,r){let i=await (0,n.U)(),a=await i.$transaction(async i=>{let n=await i.runQuestionBatch.findUnique({where:{id:e},include:{run:!0,attempt:!0}}),a=await i.runAttempt.findUnique({where:{id:r},include:{run:!0}}),s=await i.runAnswerRevision.findUnique({where:{id:t}});if(!n?.runId||!n.run||n.run.agentId!==A||!n.attempt||!a||a.run.parentRunId!==n.runId||"ANSWER_REVISION"!==a.run.followUpMode||!s||s.batchId!==e)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:A})=>A);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:A})=>A);return await i.runQuestionBatch.updateMany({where:{id:{in:c}},data:{status:"SUPERSEDED",supersededAt:o}}),await i.runAnswerRevision.updateMany({where:{OR:[{batchId:{in:c}},{batchId:e,id:{not:t}}],supersededAt:null},data:{supersededAt:o}}),await i.runAnswerRevision.update({where:{id:t},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 M(a.sourceRunId),M(a.replacementRunId),this.get(a.replacementRunId)}async importHistory(A,e,t){let i=await (0,n.U)();await i.$transaction(async i=>{if(t.events){let r=t.events.map((r,i)=>({id:`${e}:import:${r.id}`,runId:A,attemptId:e,sequence:i,type:B(r.type,"Event type",100).toUpperCase(),summary:B(r.summary,"Event summary",2e3),searchText:(r.searchText??JSON.stringify(r.raw??r.summary)).slice(0,1e5),detailMarkdown:r.detailMarkdown?.slice(0,5e5)??null,rawJson:void 0===r.raw?null:JSON.stringify(r.raw),createdAt:S(r.createdAt)??S(t.createdAt)??new Date}));await i.runToolCall.deleteMany({where:{runId:A,attemptId:e}}),await i.runEvent.deleteMany({where:{runId:A,attemptId:e}});for(let A=0;A<r.length;A+=500)await i.runEvent.createMany({data:r.slice(A,A+500)});let n=new Map;for(let A of r){let e=A.rawJson?JSON.parse(A.rawJson):{};if("user"===e.type&&Array.isArray(e.message?.content))for(let t of e.message.content)"tool_result"===t.type&&"string"==typeof t.tool_use_id&&n.set(t.tool_use_id,{content:t.content??e.tool_use_result??null,isError:!0===t.is_error,createdAt:A.createdAt})}let a=r.flatMap(t=>{let r=t.rawJson?JSON.parse(t.rawJson):{},i="assistant"===r.type&&Array.isArray(r.message?.content)?r.message.content.find(A=>"tool_use"===A.type):void 0;if(i){let r=n.get(String(i.id));return[{id:`event:${t.id}`,runId:A,attemptId:e,sequence:t.sequence,name:String(i.name??"Tool"),status:r?r.isError?"FAILED":"COMPLETED":"OBSERVED",inputJson:t.rawJson,outputJson:JSON.stringify(r?.content??null),error:r?.isError?"string"==typeof r.content?r.content:JSON.stringify(r.content):null,startedAt:t.createdAt,finishedAt:r?.createdAt??null}]}let a=r.params?.item,s=r.properties?.part,o=a&&["commandExecution","fileChange","mcpToolCall","dynamicToolCall","webSearch"].includes(a.type),l="message.part.updated"===r.type&&s?.type==="tool";if(!o&&!l)return[];let c=l?s.state??{}:a,d=String(c.status??"COMPLETED").toUpperCase(),u=l&&"number"==typeof c.time?.start?new Date(c.time.start):t.createdAt,g=l?"number"==typeof c.time?.end?new Date(c.time.end):null:["INPROGRESS","IN_PROGRESS","RUNNING","PENDING"].includes(d)?null:t.createdAt;return[{id:`event:${t.id}`,runId:A,attemptId:e,sequence:t.sequence,name:l?s.tool??s.name??"tool":a.tool??a.command??a.type,status:"ERROR"===d?"FAILED":"INPROGRESS"===d?"IN_PROGRESS":d,inputJson:t.rawJson,outputJson:JSON.stringify(l?c.result??c.output??null:a.result??a.aggregatedOutput??null),error:c.error?"string"==typeof c.error?c.error:JSON.stringify(c.error):null,startedAt:u,finishedAt:g}]});for(let A=0;A<a.length;A+=500)await i.runToolCall.createMany({data:a.slice(A,A+500)});await i.agentRun.update({where:{id:A},data:{toolCallCount:await i.runToolCall.count({where:{runId:A}})}})}if(t.usage){for(let n of(await i.runModelUsage.deleteMany({where:{runId:A,attemptId:e}}),t.usage)){let t=A=>Number.isFinite(A)&&(A??0)>=0?Math.floor(A):0;await i.runModelUsage.create({data:{id:(0,r.randomUUID)(),runId:A,attemptId:e,model:B(n.model,"Model",500),inputTokens:t(n.inputTokens),outputTokens:t(n.outputTokens),reasoningTokens:t(n.reasoningTokens),cacheReadTokens:t(n.cacheReadTokens),cacheWriteTokens:t(n.cacheWriteTokens),estimatedCost:n.estimatedCost??null}})}let n=await i.runModelUsage.aggregate({where:{runId:A},_sum:{inputTokens:!0,outputTokens:!0,reasoningTokens:!0,cacheReadTokens:!0,cacheWriteTokens:!0,estimatedCost:!0}});await i.agentRun.update({where:{id:A},data:{inputTokens:n._sum.inputTokens??0,outputTokens:n._sum.outputTokens??0,reasoningTokens:n._sum.reasoningTokens??0,cacheReadTokens:n._sum.cacheReadTokens??0,cacheWriteTokens:n._sum.cacheWriteTokens??0,estimatedCost:t.estimatedCost??(t.usage.length&&t.usage.every(A=>null!=A.estimatedCost)?n._sum.estimatedCost??null:null),pricingSource:D(t.pricingSource??[...new Set(t.usage.map(A=>A.pricingSource).filter(Boolean))].join(", "),200),pricingUpdatedAt:new Date}})}else void 0!==t.estimatedCost&&await i.agentRun.update({where:{id:A},data:{estimatedCost:t.estimatedCost,pricingSource:D(t.pricingSource,200),pricingUpdatedAt:new Date}})})}async importRuns(A,e,t){let a=y(f,e,"Provider"),s=await (0,n.U)(),l=0;for(let e of t){let t=e.prompt?.trim()||void 0,n=`${A}:${a}:${B(e.nativeId,"Native ID",500)}`,c=await s.runAttempt.findUnique({where:{nativeKey:n},include:{run:!0}}),d=(0,o.t)(c?.rawMetadataJson),u=(0,o.t)(e.rawMetadata),g={...(0,o.r)(u),...(0,o.X)(e.sessionInfo)},h=e.events||e.usage||void 0!==e.estimatedCost?(0,r.createHash)("sha256").update(JSON.stringify([e.events,e.usage,e.estimatedCost,e.pricingSource])).digest("hex"):void 0,C=(0,o.B)({...d,...u},{...(0,o.r)(d),...g});delete C.importedHistoryDigest,delete C.importedSnapshotDigest;let p="CODEX"===a&&"string"==typeof u.cliVersion?D(u.cliVersion,200):null,I=(0,r.createHash)("sha256").update(JSON.stringify({...e,events:h,usage:void 0})).digest("hex"),m=JSON.stringify({...C,...h||d.importedHistoryDigest?{importedHistoryDigest:h??d.importedHistoryDigest}:{},importedSnapshotDigest:I}),f=(()=>{let A=e.status?.toUpperCase()??"COMPLETED";return["ACTIVE","RUNNING","STARTING","IN_PROGRESS","WAITING_FOR_ANSWER"].includes(A)?"IN_PROGRESS":"PAUSED"===A?"PAUSED":"CANCELLED"===A||"CANCELED"===A?"CANCELLED":["FAILED","ERROR","SYSTEMERROR"].includes(A)?"FAILED":"COMPLETED"})();if(c){if("IMPORTED"===c.run.origin){let A=("SESSION"===c.run.kind&&"IN_PROGRESS"===f?await s.worktreeRunLease.findFirst({where:{worktreeId:c.run.worktreeId??"",run:{kind:"SESSION",origin:"MANAGED",status:{in:["IN_PROGRESS","PAUSED"]}}}}):null)?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED";if(d.importedSnapshotDigest===I&&c.run.phase===A)continue;let r=h&&d.importedHistoryDigest!==h;await s.$transaction([s.runAttempt.update({where:{id:c.id},data:{rawMetadataJson:r?JSON.stringify(C):m}}),s.agentRun.update({where:{id:c.runId},data:{status:f,phase:A,...p?{providerVersion:p}:{},...t?{initialPrompt:t,inputs:{updateMany:{where:{kind:"INITIAL",sequence:0},data:{prompt:t}}}}:{},model:e.model||c.run.model,effort:void 0===e.effort?c.run.effort:D(e.effort,100),finalOutput:void 0===e.finalOutput?c.run.finalOutput:D(e.finalOutput,2e6),branch:e.branch??c.run.branch,jiraIssueKey:k(e.jiraIssueKey),nativeArchivedAt:e.archived?c.run.nativeArchivedAt??new Date:null,startedAt:S(e.createdAt)??c.run.startedAt,finishedAt:"IN_PROGRESS"===f?null:S(e.updatedAt)??c.run.finishedAt}})]),r&&(await this.importHistory(c.runId,c.id,e),await s.runAttempt.update({where:{id:c.id},data:{rawMetadataJson:m}})),M(c.runId)}else{let A=(0,o.B)(d,g);(!(0,i.isDeepStrictEqual)(d,A)||p&&!c.run.providerVersion)&&await s.$transaction(async A=>{let e=await A.runAttempt.findUnique({where:{id:c.id},include:{run:!0}});if(!e)return!1;let t=(0,o.t)(e.rawMetadataJson),r=(0,o.B)(t,g),n=!(0,i.isDeepStrictEqual)(t,r),a=p&&!e.run.providerVersion;return n&&await A.runAttempt.update({where:{id:e.id},data:{rawMetadataJson:JSON.stringify(r)}}),a&&await A.agentRun.update({where:{id:e.runId},data:{providerVersion:p}}),n||a})&&M(c.runId)}continue}let E=await s.worktree.findUnique({where:{id:e.worktreeId},include:{codebase:{include:{repository:!0}}}});if(!E||E.codebase.agentId!==A)continue;let w=e.kind?.toUpperCase()==="PLAN"?"PLAN":"SESSION",Q="SESSION"===w&&"IN_PROGRESS"===f?await s.worktreeRunLease.findFirst({where:{worktreeId:E.id,run:{kind:"SESSION",origin:"MANAGED",status:{in:["IN_PROGRESS","PAUSED"]}}}}):null,y=await s.$transaction(A=>N(A,w)),R=(0,r.randomUUID)(),O=(0,r.randomUUID)();await s.agentRun.create({data:{id:R,kind:w,displayNumber:y,status:f,phase:Q?"IMPORTED_ACTIVE_COLLISION":"IMPORTED_SYNCED",origin:"IMPORTED",provider:a,providerVersion:p,worktreeId:E.id,repositoryId:E.codebase.repository.id,agentId:A,jiraIssueKey:k(e.jiraIssueKey),repositoryName:E.codebase.repository.name,branch:e.branch??E.branch,model:e.model||"unknown",effort:D(e.effort,100),worktreeConcurrencyLimit:b(w,void 0),initialPrompt:t??"Imported provider history",finalOutput:D(e.finalOutput,2e6),archivedAt:e.archived?new Date:null,nativeArchivedAt:e.archived?new Date:null,startedAt:S(e.createdAt),finishedAt:S(e.updatedAt),createdAt:S(e.createdAt),attempts:{create:{id:O,generation:0,nativeId:e.nativeId,nativeKey:n,status:"IMPORTED",rawMetadataJson:h?JSON.stringify(C):m}},inputs:{create:{id:(0,r.randomUUID)(),sequence:0,kind:"INITIAL",prompt:t??"Imported provider history"}}}}),h&&(await this.importHistory(R,O,e),await s.runAttempt.update({where:{id:O},data:{rawMetadataJson:m}})),M(R),l+=1}return await s.runProviderSync.upsert({where:{agentId_provider:{agentId:A,provider:a}},create:{id:(0,r.randomUUID)(),agentId:A,provider:a,status:"IDLE",lastCompletedAt:new Date,importedCount:l},update:{status:"IDLE",lastCompletedAt:new Date,lastError:null,importedCount:{increment:l}}}),l}async providerCatalog(A={}){let e=await (0,n.U)(),t=!!(A.runId||A.worktreeId),r=A.worktreeId??(A.runId?(await e.agentRun.findUnique({where:{id:A.runId},select:{worktreeId:!0}}))?.worktreeId:null),i=A.runId?(await e.agentRun.findUnique({where:{id:A.runId},select:{agentId:!0}}))?.agentId:A.worktreeId?(await e.worktree.findUnique({where:{id:A.worktreeId},select:{codebase:{select:{agentId:!0}}}}))?.codebase.agentId:null,[a,o]=t&&!i?[[],[]]:await Promise.all([e.agent.findMany({where:i?{id:i}:void 0,select:{id:!0,capabilitiesJson:!0,lastSeenAt:!0,disconnectedAt:!0,heartbeatIntervalSeconds:!0}}),e.runProviderSync.findMany({where:i?{agentId:i}:void 0,orderBy:{updatedAt:"desc"}})]);return f.map(A=>{let e=`runs.provider.${A.toLowerCase()}`,t=a.some(t=>{let r=o.find(e=>e.agentId===t.id&&e.provider===A);return!t.disconnectedAt&&!!t.lastSeenAt&&Date.now()-t.lastSeenAt.getTime()<=(0,s.z)(t)&&JSON.parse(t.capabilitiesJson).includes(e)&&r?.status!=="FAILED"}),i=o.find(({provider:e})=>e===A)?.catalogJson,n=i?JSON.parse(i):null,l=r&&n?.worktrees?n.worktrees[r]?.models??[]:n?.models;return{key:A,label:"OPENCODE"===A?"OpenCode":"CLAUDE"===A?"Claude":"Codex",available:t,models:l?.length?l:[{id:"default",label:"Provider default",efforts:["auto","low","medium","high"]}],supportsWebSearch:n?.capabilities?.webSearch??!0,supportsQuestions:n?.capabilities?.questions??!0,supportsImport:n?.capabilities?.import??!0,supportsPause:n?.capabilities?.pause??!0,supportsSteering:n?.capabilities?.steering??!0,supportsResume:n?.capabilities?.resume??!0,supportsNativeDelete:n?.capabilities?.nativeDelete??!0}})}async providerImportStatus(){return(await (0,n.U)()).runProviderSync.findMany({orderBy:[{agentId:"asc"},{provider:"asc"}]})}async reportProviderImportStatus(A,e,t,i,a){let s=y(f,e,"Provider"),o=t.trim().toUpperCase();if(!["SYNCING","IDLE","FAILED"].includes(o))throw Error("Import status is invalid");return(await (0,n.U)()).runProviderSync.upsert({where:{agentId_provider:{agentId:A,provider:s}},create:{id:(0,r.randomUUID)(),agentId:A,provider:s,status:o,lastStartedAt:"SYNCING"===o?new Date:void 0,lastCompletedAt:"IDLE"===o?new Date:void 0,lastError:D(i,2e4),catalogJson:void 0===a?void 0:JSON.stringify(a)},update:{status:o,lastStartedAt:"SYNCING"===o?new Date:void 0,lastCompletedAt:"IDLE"===o?new Date:void 0,lastError:"FAILED"===o?D(i,2e4):null,catalogJson:void 0===a?void 0:JSON.stringify(a)}})}subscribeRunList(A){let r=a._H.iterate(a.hu);return(0,t.G)(r,async t=>{if("drafts"===t.runChanged.id)return!1;if(!A.kind&&!A.appId&&!A.provider&&!A.origin&&!A.worktreeId&&!A.workflowId)return!0;let r=await (0,n.U)(),i=await r.agentRun.findUnique({where:{id:t.runChanged.id},select:{worktreeId:!0,workflowRun:{select:{workflowId:!0}},kind:!0,provider:!0,origin:!0,repositoryId:!0}});return!i||(!A.workflowId||i.workflowRun?.workflowId===A.workflowId||!!await (0,e.f)(A.workflowId,i.worktreeId))&&(!A.worktreeId||i.worktreeId===A.worktreeId)&&(!A.kind||i.kind===A.kind)&&(!A.provider||i.provider===A.provider.trim().toUpperCase())&&(!A.origin||i.origin===A.origin)&&(!A.appId||!!i.repositoryId&&!!await r.appRepository.findFirst({where:{appId:A.appId,repositoryId:i.repositoryId},select:{appId:!0}}))})}subscribeRuns(){return a._H.iterate(a.hu)}subscribeRun(A){return a._H.iterate((0,a.k_)(A))}subscribeEvents(A){return a._H.iterate((0,a.zP)(A))}subscribeQuestions(A){return a._H.iterate((0,a.hn)(A))}async requireWorktree(A,e){let t=await (0,n.U)(),r=await t.worktree.findUnique({where:{id:B(A,"Worktree",500)},include:{codebase:{include:{repository:!0,agent:!0}}}});if(!r||"AVAILABLE"!==r.availability)throw Error("Worktree is unavailable");if(e){let A=r.codebase.agent,i=JSON.parse(A.capabilitiesJson);if(A.disconnectedAt||!A.lastSeenAt||Date.now()-A.lastSeenAt.getTime()>(0,s.z)(A)||!i.includes(`runs.provider.${e.toLowerCase()}`))throw Error(`${e} is unavailable on this worktree's agent`);let n=await t.runProviderSync.findUnique({where:{agentId_provider:{agentId:r.codebase.agentId,provider:e}}});if(n?.status==="FAILED")throw Error(`${e} is unavailable: ${n.lastError??"provider capability check failed"}`)}return r}async requireAttachments(A,e){if(!A.length)return;if(A.length>100)throw Error("Too many attachments");let t=await (0,n.U)(),r=await t.runAttachment.findMany({where:{id:{in:A},inputId:null,...e?{OR:[{draftId:e},{draftId:null}]}:{draftId:null}}});if(r.length!==A.length)throw Error("One or more attachments are unavailable");if(r.reduce((A,e)=>A+e.size,0)>0x6400000)throw Error("Attachments exceed the 100 MB input limit")}}],310509)},292988,A=>{var e=A.i(879838),t=A.i(945565);function r(A){return A&&"object"==typeof A&&"message"in A&&"string"==typeof A.message?A.message:String(A)}function i(A,e,t,i){A.newFunction(t,t=>{let n=t?JSON.parse(A.getString(t)):null,a=A.newPromise();return e.add(a),Promise.resolve().then(()=>i(n)).then(A=>({ok:!0,value:A}),A=>({ok:!1,error:r(A)})).then(t=>{a.alive&&A.alive&&(A.newString(JSON.stringify(t)).consume(A=>a.resolve(A)),e.delete(a),a.dispose(),A.runtime.executePendingJobs().dispose())}).catch(()=>{}),a.handle}).consume(e=>A.setProp(A.global,t,e))}async function n(A){if(!A.body)return"";let e=A.body.getReader(),t=[],r=0;for(;;){let{done:A,value:i}=await e.read();if(A)break;if((r+=i.byteLength)>0xa00000)throw await e.cancel(),Error("Script fetch response exceeded 10 MiB");t.push(i)}let i=new Uint8Array(r),n=0;for(let A of t)i.set(A,n),n+=A.byteLength;return new TextDecoder().decode(i)}let a=String.raw`
|
|
1459
1459
|
class HeaderBag {
|
|
1460
1460
|
constructor(values = [], readOnly = false) { this.values = Array.isArray(values) ? values.map(({name, value}) => ({name: String(name), value: String(value)})) : []; this.readOnly = readOnly; }
|
|
1461
1461
|
assertMutable() { if (this.readOnly) throw new TypeError("Original request headers are read-only"); }
|
|
@@ -1608,7 +1608,7 @@ ${g(E.groups)}
|
|
|
1608
1608
|
`),A.$queryRaw(t.sql`
|
|
1609
1609
|
${i}
|
|
1610
1610
|
SELECT COUNT(*) AS totalCount FROM owners WHERE ${a}
|
|
1611
|
-
`)]);return{ids:d.map(({id:A})=>A),totalCount:Number(u[0].totalCount)}}var n=A.i(794231),a=A.i(666680),s=A.i(662114),o=A.i(135475),l=A.i(751976),c=A.i(388385),d=A.i(384439),u=A.i(69988),g=A.i(111479),h=A.i(197337),C=A.i(963408);function p(A){return null===A||["string","number","boolean"].includes(typeof A)?A:JSON.stringify(A)}function I(A,e){if("ALL"===A.op)return A.conditions.every(A=>I(A,e));if("ANY"===A.op)return A.conditions.some(A=>I(A,e));if("NOT"===A.op)return!I(A.condition,e);if(!("left"in A))return!1;let t=(0,C.S)(A.left,e),r=(0,C.S)(A.right,e);switch(A.op){case"EXISTS":return null!=t;case"EQ":return JSON.stringify(t)===JSON.stringify(r);case"NE":return JSON.stringify(t)!==JSON.stringify(r);case"GT":return p(t)>p(r);case"GTE":return p(t)>=p(r);case"LT":return p(t)<p(r);case"LTE":return p(t)<=p(r);case"CONTAINS":return Array.isArray(t)?t.some(A=>JSON.stringify(A)===JSON.stringify(r)):String(t??"").includes(String(r??""));case"MATCHES":return(0,l.u)(String(r??""),{label:"Workflow condition pattern"}).test(String(t??""))}}var m=A.i(454228),f=A.i(222335),E=A.i(997671),w=A.i(266368);A.i(256554);var Q=A.i(118387),y=A.i(848201),B=A.i(972425),D=A.i(927305),k=A.i(879838),b=A.i(945565);async function S(A,e){let t=A.trim();if(!t||t.length>5e4)throw Error(`Workflow script must contain 1–${5e4.toLocaleString()} characters`);let r=await (0,k.f)(),i=Date.now()+250;try{return r.evalCode(`"use strict"; const session = Object.freeze(${JSON.stringify(e)}); (${t})(session);`,{memoryLimitBytes:8388608,maxStackSizeBytes:524288,shouldInterrupt:(0,b.s)(i)})}catch(e){let A=e instanceof Error?e.message:String(e);throw Error(`Workflow script failed: ${"interrupted"===A?"execution timed out after 250ms":A}`)}}var R=A.i(696985);let M="workflows:changed",O=A=>`workflow-run:${A}`,N=A=>`workflow-run:${A}:events`,H=A=>`workflow-run:${A}:questions`,v=["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED"],T=new Set(["SUCCEEDED","FAILED","CANCELLED"]),U=new Set(["SUCCEEDED","FAILED","CANCELLED","SKIPPED","SUPERSEDED"]),J=new Set(["RUNNING","WAITING"]),x=new Set(["WORKTREE_CREATE","WORKTREE_DELETE","WORKTREE_MOVE","WORKTREE_MOVE_CONTROL"]);function _(A){return A&&"object"==typeof A&&!Array.isArray(A)?A:{}}function G(A,e){let t;if(A.exclusiveWorktree&&("string"==typeof(t=(0,C.x)(e,"worktree.id"))&&t?t:null)!==A.worktreeId)throw Error("Exclusive workflows cannot change worktrees; start a new workflow on the target worktree instead")}let L=A=>JSON.parse(A);function P(A){return{agent:{id:A.id,name:A.name,hostname:A.hostname,...void 0!==A.lastSeenAt&&void 0!==A.disconnectedAt?{connected:null!==A.lastSeenAt&&null===A.disconnectedAt&&Date.now()-A.lastSeenAt.getTime()<=(0,Q.z)(A)}:{},...void 0!==A.diskFreeBytes?{diskFreeBytes:A.diskFreeBytes}:{},...void 0!==A.memoryFreeBytes?{memoryFreeBytes:A.memoryFreeBytes}:{}}}}function j(A){return(0,C.d)(P(A.agent),{codebase:{id:A.id,folder:A.folder,agentId:A.agentId,branch:A.branch,headSha:A.headSha},repo:{id:A.repository.id,name:A.repository.name,url:A.repository.displayOrigin,canonicalOrigin:A.repository.canonicalOrigin,displayOrigin:A.repository.displayOrigin,defaultBranch:A.defaultBranch}})}function Y(A,e,t){let r=A.trim();if(!r)throw Error(`${e} is required`);if(r.length>t)throw Error(`${e} is too long`);return r}function F(A){let e=A?.trim().toUpperCase()||"QUEUE";if(!new Set(["QUEUE","CONCURRENT","COALESCE_LATEST"]).has(e))throw Error("Workflow overlap policy is not supported");return e}function K(A){let e=A?.trim().toUpperCase()||"WORKTREE";if(!new Set(["WORKTREE","GLOBAL"]).has(e))throw Error("Workflow overlap scope is not supported");return e}let q=["EXCLUSIVE","NON_EXCLUSIVE","EXCLUDED"];function V(A,e){let t=A?.trim().toUpperCase()||(!0===e?"EXCLUSIVE":"NON_EXCLUSIVE");if(!q.includes(t))throw Error("Workflow worktree concurrency is not supported");return t}function z(A,e){return"EXCLUSIVE"===A||(e??!1)}function W(A,e){return"WORKTREE"===A?{worktreeId:e}:{}}function $(A,e){let t=A??("CONCURRENT"===e?4:1);if(!Number.isInteger(t)||t<1||t>32)throw Error("Maximum concurrent runs must be between 1 and 32");return t}function Z(A){return Array.isArray(A)?`[${A.map(Z).join(",")}]`:A&&"object"==typeof A?`{${Object.entries(A).sort(([A],[e])=>A.localeCompare(e)).map(([A,e])=>`${JSON.stringify(A)}:${Z(e)}`).join(",")}}`:JSON.stringify(A)}function X(A,e,t){if(Buffer.byteLength(A,"utf8")>t)throw Error(`${e} is too large`)}function AA(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function Ae(A){y._H.publish(M,{workflowChanged:{id:A}})}function At(A){y._H.publish(O(A),{workflowRunChanged:{id:A}}),y._H.publish(M,{workflowChanged:{id:"runs",runId:A}}),y._H.publish(y.fb,{sidebarStatusChanged:!0}),y._H.publish(y.Wy,{actionCenterChanged:!0})}function Ar(A){return[...c.E.get(A.kind).requiredPaths.map(e=>e.replaceAll("<stepId>",A.id)),...A.requiredPaths,...(0,f.x)(A.kind,"step",A.config)]}function Ai(A){return[...c.E.get(A.kind).providedPaths.map(e=>e.replaceAll("<stepId>",A.id)),...A.providedPaths,`steps.${A.id}.*`]}async function An(A){return(await A.workflowRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:2},update:{nextValue:{increment:1}}})).nextValue-1}A.s(["f",0,class{events;executor;checkpointRestorer;credentials;agentControl;notifications;runsService;worktrees;commandsService;jiraService;runtimeTimer;commandOutputStream;ticking;workerId;activeExecutions;claimedSecretJobs;waitPollers;constructor(A,e=new R.f,t,r,i,n,s,o,l,c){this.events=A,this.executor=e,this.checkpointRestorer=t,this.credentials=r,this.agentControl=i,this.notifications=n,this.runsService=s,this.worktrees=o,this.commandsService=l,this.jiraService=c,this.ticking=!1,this.workerId=(0,a.randomUUID)(),this.activeExecutions=new Map,this.claimedSecretJobs=new Set,this.waitPollers=new Map,this.runsService?.setWorktreeAdmissionPromoter(async()=>{await this.startQueuedRuns()}),this.agentControl&&(this.executor.register("TERMINAL_RUN",A=>this.startTerminalJob(A)),this.executor.register("WORKTREE_SNAPSHOT",A=>this.startCheckpointJob(A)),this.agentControl.registerCompletionHandler(D.e,A=>this.workflowAgentJobCompleted(A)),this.agentControl.registerCompletionObserver(A=>this.genericAgentJobCompleted(A)),this.agentControl.registerCompletionHandler(D.Q,A=>this.workflowAgentJobCompleted(A)))}async controlLinkedAgentRuns(A,e){if(!this.runsService)return;let t=await (0,o.U)(),r=await t.workflowRunResourceLink.findMany({where:{runId:A,kind:"AGENT_RUN",attempt:{status:{in:["RUNNING","WAITING"]}}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(r.map(async({resourceId:A})=>{let t=await this.runsService.get(A);!t||"MANAGED"!==t.origin||"PAUSE"===e&&"IN_PROGRESS"!==t.status||"CONTINUE"===e&&"PAUSED"!==t.status||"CANCEL"===e&&new Set(["COMPLETED","FAILED","CANCELLED"]).has(t.status)||await this.runsService.lifecycle(A,e)}))}async cancelWaitingCommandRuns(A){if(!this.commandsService)return;let e=await (0,o.U)(),t=await e.workflowRunResourceLink.findMany({where:{runId:A,kind:"COMMAND_RUN",attempt:{status:"WAITING"}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(t.map(({resourceId:A})=>this.commandsService.terminateRun(A)))}async promoteWorktreeAdmissions(A){if(A)try{await this.runsService?.reconcileQueuedRuns(),await this.startQueuedRuns()}catch(e){console.error(`Could not promote worktree queue for ${A}:`,e instanceof Error?e.message:e)}}async runWorktree(A){let e=(0,C.x)(L(A),"worktree.id");return"string"==typeof e&&e?(await (0,o.U)()).worktree.findUnique({where:{id:e},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):null}async runAgent(A){let e=L(A),t=(0,C.x)(e,"agent.id")??(0,C.x)(e,"codebase.agentId"),r=await (0,o.U)();if("string"==typeof t&&t)return r.agent.findUnique({where:{id:t}});let i=(0,C.x)(e,"worktree.id");if("string"!=typeof i||!i)return null;let n=await r.worktree.findUnique({where:{id:i},select:{codebase:{select:{agent:!0}}}});return n?.codebase.agent??null}async queueForWorktree(A){let e=await (0,o.U)(),[t,r,i]=await Promise.all([e.workflowRun.findMany({where:{worktreeId:A,status:"QUEUED"},orderBy:[{queuedAt:"asc"},{id:"asc"}],select:{id:!0,displayNumber:!0,status:!0,phase:!0,queuedAt:!0,exclusiveWorktree:!0,worktreeConcurrency:!0,worktreeLeaseOwnerRunId:!0,workflowId:!0,workflow:{select:{name:!0}},worktree:{select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}}}),e.agentRun.findMany({where:{worktreeId:A,origin:"MANAGED",status:"QUEUED",kind:{in:["PLAN","SESSION"]}},orderBy:[{createdAt:"asc"},{id:"asc"}],select:{id:!0,kind:!0,displayNumber:!0,status:!0,phase:!0,createdAt:!0,initialPrompt:!0,worktreeConcurrencyLimit:!0,worktree:{select:{id:!0,folder:!0,branch:!0,highlightColor:!0}},workflowRun:{select:{id:!0,workflowId:!0,worktreeLeaseOwnerRunId:!0}}}}),e.worktreeWorkflowLease.findUnique({where:{worktreeId:A},select:{workflowRunId:!0}})]);return[...t.map(e=>({id:e.id,kind:"WORKFLOW",displayNumber:e.displayNumber,name:e.workflow.name,status:e.status,phase:e.phase,worktreeId:A,worktree:e.worktree,workflowId:e.workflowId,workflowRunId:e.id,queuedAt:e.queuedAt,exclusiveWorktree:e.exclusiveWorktree,worktreeConcurrency:e.worktreeConcurrency,worktreeConcurrencyLimit:null,leaseOwnerRunId:e.worktreeLeaseOwnerRunId})),...r.map(e=>({id:e.id,kind:e.kind,displayNumber:e.displayNumber,name:e.initialPrompt,status:e.status,phase:e.phase,worktreeId:A,worktree:e.worktree,workflowId:e.workflowRun?.workflowId??null,workflowRunId:e.workflowRun?.id??null,queuedAt:e.createdAt,exclusiveWorktree:!1,worktreeConcurrency:"NON_EXCLUSIVE",worktreeConcurrencyLimit:e.worktreeConcurrencyLimit,leaseOwnerRunId:e.workflowRun?.worktreeLeaseOwnerRunId??null}))].sort((A,e)=>{if(i){let t=A.leaseOwnerRunId===i.workflowRunId;if(t!==(e.leaseOwnerRunId===i.workflowRunId))return t?-1:1}return A.queuedAt.getTime()-e.queuedAt.getTime()||A.id.localeCompare(e.id)}).map(({leaseOwnerRunId:A,...e},t)=>({...e,position:t+1,queuedAt:e.queuedAt.toISOString()}))}async runQueue(A){if(A.worktreeId)return this.queueForWorktree(A.worktreeId);if(!A.workflowId)throw Error("A worktree or workflow is required to read its queue");let e=await (0,o.U)(),[t,r]=await Promise.all([e.workflowRun.findMany({where:{workflowId:A.workflowId,status:"QUEUED"},select:{id:!0,worktreeId:!0,displayNumber:!0,status:!0,phase:!0,queuedAt:!0,exclusiveWorktree:!0,worktreeConcurrency:!0,workflow:{select:{name:!0}}}}),e.agentRun.findMany({where:{origin:"MANAGED",status:"QUEUED",workflowRun:{workflowId:A.workflowId}},select:{id:!0,worktreeId:!0}})]),i=new Set(t.map(({id:A})=>A)),n=new Set(r.map(({id:A})=>A)),a=[...new Set([...t,...r].map(({worktreeId:A})=>A).filter(A=>!!A))];return[...(await Promise.all(a.map(A=>this.queueForWorktree(A)))).flat().filter(A=>"WORKFLOW"===A.kind?i.has(A.id):n.has(A.id)),...t.filter(({worktreeId:A})=>!A).sort((A,e)=>A.queuedAt.getTime()-e.queuedAt.getTime()||A.id.localeCompare(e.id)).map((e,t)=>({position:t+1,id:e.id,kind:"WORKFLOW",displayNumber:e.displayNumber,name:e.workflow.name,status:e.status,phase:e.phase,worktreeId:null,worktree:null,workflowId:A.workflowId,workflowRunId:e.id,queuedAt:e.queuedAt.toISOString(),exclusiveWorktree:e.exclusiveWorktree,worktreeConcurrency:e.worktreeConcurrency,worktreeConcurrencyLimit:null}))].sort((A,e)=>new Date(A.queuedAt).getTime()-new Date(e.queuedAt).getTime()||A.id.localeCompare(e.id))}async runQueueForWorkflowRun(A){let e=await (0,o.U)(),t=await e.workflowRun.findUnique({where:{id:A},select:{status:!0,worktreeId:!0,workflowId:!0}});return t&&"QUEUED"===t.status?t.worktreeId?this.queueForWorktree(t.worktreeId):(await this.runQueue({workflowId:t.workflowId})).filter(({worktreeId:A})=>!A):[]}async notifyRun(A,e,t,r,i){if(!this.notifications)return;let n=await (0,o.U)(),a=await n.workflowRun.findUnique({where:{id:A},select:{sessionDataJson:!0,workflow:{select:{completionNotificationsEnabled:!0}}}});if("WORKFLOW_COMPLETED"===e&&a?.workflow.completionNotificationsEnabled===!1)return;let s=a?await this.runWorktree(a.sessionDataJson):null,l=await n.$transaction(n=>this.notifications.recordInTransaction(n,{dedupeKey:`workflow:${A}:${i}`,typeKey:e,title:t,body:r,href:`/dashboard/workflows/runs/${A}`,resourceKind:"WORKFLOW_RUN",resourceId:A,worktreeId:s?.id??null,highlightColor:s?.highlightColor??null}));this.notifications.created(l)}startRuntime(){this.runtimeTimer||(this.consumeCommandOutputMatches(),this.runtimeTimer=setInterval(()=>{this.tick().catch(A=>{console.error("Workflow runtime tick failed:",A)})},1e3),this.runtimeTimer.unref?.(),this.tick().catch(A=>{console.error("Workflow runtime startup failed:",A)}))}stopRuntime(){for(let A of(this.runtimeTimer&&clearInterval(this.runtimeTimer),this.runtimeTimer=void 0,this.commandOutputStream?.return?.(),this.commandOutputStream=void 0,this.activeExecutions.values()))A.abort();this.activeExecutions.clear()}catalog(){return{schemaVersion:c.c,globalConcurrency:4,steps:c.T,triggers:c.s}}registerWaitPoller(A,e){this.waitPollers.set(A,e)}async list(A={}){let e=await (0,o.U)(),t=Math.min(Math.max(A.first??100,1),200),r=A.archive?.toUpperCase()??"ACTIVE",i=A.search?.trim(),n=await e.workflow.findMany({where:{..."ALL"===r?{}:"ARCHIVED"===r?{archivedAt:{not:null}}:{archivedAt:null},...null===A.enabled||void 0===A.enabled?{}:{enabled:A.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:t+1,...A.after?{cursor:{id:A.after},skip:1}:{}});return{items:n.slice(0,t),nextCursor:n.length>t?n[t-1].id:null,totalCount:await e.workflow.count()}}async get(A){return(await (0,o.U)()).workflow.findUnique({where:{id:A},include:{activeVersion:!0,versions:{orderBy:{version:"desc"}},quickActionRepositories:{include:{repository:!0}},_count:{select:{runs:!0}}}})}async version(A){return(await (0,o.U)()).workflowVersion.findUnique({where:{id:A},include:{triggers:!0}})}async create(A){let e=Y(A.name,"Workflow name",200),t=(0,c.d)(A.definition??(0,c.p)(e)),r=JSON.stringify({...t,name:e,description:A.description?.trim()??t.description});X(r,"Workflow definition",2097152);let i=F(A.overlapPolicy),n=V(A.worktreeConcurrency,A.exclusiveWorktree),s=await (0,o.U)(),l=await s.workflow.create({data:{id:(0,a.randomUUID)(),name:e,description:A.description?.trim()??t.description,draftDefinitionJson:r,draftSchemaVersion:c.c,overlapPolicy:i,overlapScope:K(A.overlapScope),maxConcurrentRuns:$(A.maxConcurrentRuns,i),completionNotificationsEnabled:A.completionNotificationsEnabled??!0,exclusiveWorktree:"EXCLUSIVE"===n,worktreeConcurrency:n,blocksGitOperations:z(n,A.blocksGitOperations)}});return Ae(l.id),this.get(l.id)}async saveDraft(A){let e=(0,c.d)(A.definition),t=JSON.stringify(e);X(t,"Workflow definition",2097152);let r=await this.get(A.id);if(!r)throw Error("Workflow not found");let i=F(A.overlapPolicy??r.overlapPolicy),n=V(A.worktreeConcurrency??(null===A.exclusiveWorktree||void 0===A.exclusiveWorktree?r.worktreeConcurrency:null),A.exclusiveWorktree??r.exclusiveWorktree),a=await (0,o.U)();return await a.workflow.update({where:{id:A.id},data:{name:e.name,description:e.description,draftDefinitionJson:t,draftSchemaVersion:e.schemaVersion,overlapPolicy:i,overlapScope:K(A.overlapScope??r.overlapScope),maxConcurrentRuns:$(A.maxConcurrentRuns??r.maxConcurrentRuns,i),completionNotificationsEnabled:A.completionNotificationsEnabled??r.completionNotificationsEnabled,exclusiveWorktree:"EXCLUSIVE"===n,worktreeConcurrency:n,blocksGitOperations:z(n,A.blocksGitOperations??r.blocksGitOperations)}}),Ae(A.id),this.get(A.id)}async validateDraft(A){let e=await this.get(A);if(!e)throw Error("Workflow not found");let t=(0,c.f)(L(e.draftDefinitionJson)),r=[...t.diagnostics];return t.definition&&(r.push(...(0,h.f)(t.definition,r)),r.push(...await this.validateSubworkflows(e.id,t.definition))),{valid:!(0,c.C)(r),diagnostics:r}}async validateSubworkflows(A,e){let t=e.nodes.filter(({kind:A})=>"CONTROL_SUBWORKFLOW"===A).map(A=>({node:A,versionId:A.config.versionId})).filter(A=>"string"==typeof A.versionId);if(!t.length)return[];let r=await (0,o.U)(),i=new Map,n=new Map,a=new Set,s=new Set,l=t.map(({versionId:A})=>A);for(;l.length;){let A=[...new Set(l)].filter(A=>!s.has(A));if(!A.length)break;for(let e of(A.forEach(A=>s.add(A)),l=[],await r.workflowVersion.findMany({where:{id:{in:A}}}))){i.set(e.id,e);try{let A=(0,c.d)(L(e.definitionJson)).nodes.filter(({kind:A})=>"CONTROL_SUBWORKFLOW"===A).map(({config:A})=>A.versionId).filter(A=>"string"==typeof A);n.set(e.id,A),l.push(...A)}catch{a.add(e.id)}}}let d=(A,e)=>{let t=i.get(A);if(!t)return"MISSING";if(a.has(A))return"INVALID";if(e.has(t.workflowId))return"RECURSIVE";let r=new Set(e).add(t.workflowId);for(let e of n.get(A)??[]){let A=d(e,r);if(A)return A}return null},u=[];for(let{node:e,versionId:r}of t){let t=d(r,new Set([A]));"MISSING"===t?u.push({severity:"ERROR",code:"SUBWORKFLOW_NOT_FOUND",message:"Pinned sub-workflow chain contains a missing version",nodeId:e.id}):"INVALID"===t?u.push({severity:"ERROR",code:"SUBWORKFLOW_INVALID",message:"Pinned sub-workflow chain contains an invalid definition",nodeId:e.id}):"RECURSIVE"===t&&u.push({severity:"ERROR",code:"SUBWORKFLOW_RECURSION",message:"Pinned sub-workflow calls cannot form a recursive chain",nodeId:e.id})}return u}async publish(A){let e=await this.get(A);if(!e)throw Error("Workflow not found");let t=(0,c.d)(L(e.draftDefinitionJson)),r=await this.validateDraft(A);if(!r.valid)throw Error(`Workflow cannot be published: ${r.diagnostics.filter(({severity:A})=>"ERROR"===A).map(({message:A})=>A).slice(0,5).join("; ")}`);let i=await (0,o.U)(),n=await i.$transaction(async e=>{let r=await e.workflowVersion.findFirst({where:{workflowId:A},orderBy:{version:"desc"}}),i=(0,a.randomUUID)(),n=await e.workflowVersion.create({data:{id:i,workflowId:A,version:(r?.version??0)+1,name:t.name,description:t.description,schemaVersion:t.schemaVersion,definitionJson:JSON.stringify(t),contentHash:(0,a.createHash)("sha256").update(Z(t)).digest("hex"),triggers:{create:t.triggers.map(A=>({id:(0,a.randomUUID)(),nodeId:A.id,kind:A.kind,configJson:JSON.stringify(A.config)}))}},include:{triggers:!0}});return await e.workflow.update({where:{id:A},data:{activeVersionId:i}}),n});return Ae(A),n}async setEnabled(A,e){let t=await (0,o.U)(),r=await t.workflow.findUnique({where:{id:A}});if(!r)throw Error("Workflow not found");if(e&&!r.activeVersionId)throw Error("Publish the workflow before enabling it");return await t.workflow.update({where:{id:A},data:{enabled:e}}),Ae(A),this.get(A)}async setQuickAction(A){let e=await (0,o.U)(),t=[...new Set(A.repositoryIds.map(A=>A.trim()).filter(Boolean))],[r,i]=await Promise.all([e.workflow.findUnique({where:{id:A.id},select:{id:!0}}),e.codebaseRepository.count({where:{id:{in:t}}})]);if(!r)throw Error("Workflow not found");if(i!==t.length)throw Error("One or more repositories were not found");let n=A.quickActionIconKey.trim();if(!d.t.includes(A.kind))throw Error("Quick action kind is invalid");if("none"!==n&&!s.H.includes(n))throw Error("Quick action icon is invalid");let a=A.quickActionButtonVariant.trim();if(!["default","outline","secondary","destructive"].includes(a))throw Error("Quick action button style is invalid");return await e.$transaction(async e=>{await e.workflow.update({where:{id:A.id},data:{quickActionKind:A.kind,quickActionIconKey:n,quickActionButtonVariant:a}}),await e.workflowQuickActionRepository.deleteMany({where:{workflowId:A.id}}),t.length&&await e.workflowQuickActionRepository.createMany({data:t.map(e=>({workflowId:A.id,repositoryId:e}))})}),Ae(A.id),this.get(A.id)}async archive(A,e){let t=await (0,o.U)();return await t.workflow.update({where:{id:A},data:{archivedAt:e?new Date:null,...e?{enabled:!1}:{}}}),Ae(A),this.get(A)}async delete(A){let e=await (0,o.U)();if(await e.workflowRun.count({where:{workflowId:A}}))throw Error("Archive workflows that have run history instead of deleting them");return await e.workflow.delete({where:{id:A}}),Ae(A),!0}export(A,e){return this.exportInternal(A,e)}async exportInternal(A,e){let t=await this.get(A);if(!t)throw Error("Workflow not found");let r=e?t.versions.find(A=>A.id===e):null;if(e&&!r)throw Error("Workflow version not found");let i=(0,c.d)(L(r?.definitionJson??t.draftDefinitionJson));return{format:"aide.workflow.export",schemaVersion:c.c,exportedAt:new Date().toISOString(),workflow:{name:r?.name??t.name,description:r?.description??t.description,overlapPolicy:t.overlapPolicy,overlapScope:t.overlapScope,maxConcurrentRuns:t.maxConcurrentRuns,completionNotificationsEnabled:t.completionNotificationsEnabled,exclusiveWorktree:t.exclusiveWorktree,worktreeConcurrency:t.worktreeConcurrency,blocksGitOperations:t.blocksGitOperations,definition:(0,c.x)(i)}}}async import(A){X("string"==typeof A.payload?A.payload:JSON.stringify(A.payload),"Workflow import",2097152);let e=AA("string"==typeof A.payload?JSON.parse(A.payload):A.payload,"Workflow import"),t="aide.workflow.export"===e.format,r=t?AA(e.workflow,"Exported workflow"):e,i=(0,c.d)(t?r.definition:r);return this.create({name:A.name?.trim()||i.name,description:i.description,definition:{...i,name:A.name?.trim()||i.name},overlapPolicy:"string"==typeof r.overlapPolicy?r.overlapPolicy:"QUEUE",overlapScope:"string"==typeof r.overlapScope?r.overlapScope:!0===r.exclusiveWorktree?"WORKTREE":"GLOBAL",maxConcurrentRuns:"number"==typeof r.maxConcurrentRuns?r.maxConcurrentRuns:1,completionNotificationsEnabled:"boolean"!=typeof r.completionNotificationsEnabled||r.completionNotificationsEnabled,worktreeConcurrency:"string"==typeof r.worktreeConcurrency?r.worktreeConcurrency:!0===r.exclusiveWorktree?"EXCLUSIVE":"NON_EXCLUSIVE",blocksGitOperations:"boolean"==typeof r.blocksGitOperations?r.blocksGitOperations:!0===r.exclusiveWorktree,exclusiveWorktree:"boolean"==typeof r.exclusiveWorktree&&r.exclusiveWorktree})}async runs(A={}){let e=await (0,o.U)(),t=Math.min(Math.max(A.first??100,1),200),r=Number(A.search),n=A.archive?.toUpperCase()??"ACTIVE",a="ALL"===n?{}:"ARCHIVED"===n?{archivedAt:{not:null}}:{archivedAt:null},s=A.agentId?await i(e,{...A,agentId:A.agentId,first:t}):null,l=await e.workflowRun.findMany({where:{...a,...s?{id:{in:s.ids}}:{},...A.workflowId?{workflowId:A.workflowId}:{},...A.status?{status:A.status.toUpperCase()}:{},...Number.isInteger(r)&&r>0?{displayNumber:r}:A.search?.trim()?{workflow:{name:{contains:A.search.trim()}}}:{}},include:{workflow:!0,version:!0,trigger:!0,_count:{select:{attempts:!0,events:!0}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:t+1,...!s&&A.after?{cursor:{id:A.after},skip:1}:{}});return{items:l.slice(0,t),nextCursor:l.length>t?l[t-1].id:null,totalCount:s?.totalCount??await e.workflowRun.count({where:{...a,...A.workflowId?{workflowId:A.workflowId}:{}}})}}async archiveRuns(A,e){let t=await (0,o.U)(),r=[...new Set(A)],i=await t.workflowRun.updateMany({where:{id:{in:r}},data:{archivedAt:e?new Date:null}});for(let A of r)At(A);return i.count}async deleteRuns(A){let e=await (0,o.U)(),t=[...new Set(A)];if(await e.workflowRun.count({where:{id:{in:t},status:{notIn:["SUCCEEDED","FAILED","CANCELLED"]}}}))throw Error("Cancel runs that have not finished before deleting them");let r=await e.workflowRun.deleteMany({where:{id:{in:t}}});for(let A of t)At(A);return r.count}async run(A,e=!0){return(await (0,o.U)()).workflowRun.findUnique({where:{id:A},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:!!e&&{orderBy:{sequence:"asc"}},_count:{select:{events:!0}},resourceLinks:{orderBy:{createdAt:"asc"}}}})}async runEvents(A,e=-1,t=500,r={}){let i=await (0,o.U)(),n=r.latest||null!=r.beforeSequence,a=await i.workflowRunEvent.findMany({where:{runId:A,sequence:{gt:e,...null==r.beforeSequence?{}:{lt:r.beforeSequence}}},orderBy:{sequence:n?"desc":"asc"},...null==t?{}:{take:Math.min(Math.max(t,1),1e3)}});return n?a.reverse():a}async questionBatch(A){return(await (0,o.U)()).runQuestionBatch.findUnique({where:{id:A},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}})}async jobSecrets(A,e){if(!this.credentials||!this.agentControl)throw Error("Workflow credentials are unavailable");if(this.claimedSecretJobs.has(e))throw Error("Workflow job secrets were already claimed");let t=await this.agentControl.getJob(e);if(!t||t.agentId!==A||"workflow.terminal.run"!==t.kind||"RUNNING"!==t.status)throw Error("Workflow job is not eligible to claim secrets");let r=(0,D.r)(L(t.payloadJson)),i=new Set(Object.values(B.x)),n=[];for(let A of r.credentialEnvironment){if(!i.has(A.credential.kind))throw Error("Workflow references an unsupported credential kind");let e=await this.credentials.getText(A.credential);if(null===e)throw Error(`Credential ${A.credential.id} is unavailable`);n.push({name:A.name,value:e})}return this.claimedSecretJobs.add(e),n}async workflowAgentContext(A){let e=await (0,o.U)(),t=(0,C.x)(A,"worktree.id");if("string"==typeof t){let A=await e.worktree.findUnique({where:{id:t},include:{codebase:{include:{agent:!0}}}});if(!A)throw Error("Workflow worktree is unavailable");let r=JSON.parse(A.codebase.agent.capabilitiesJson);return{agentId:A.codebase.agentId,codebaseId:A.codebaseId,worktreeId:A.id,cwd:A.folder,capabilities:Array.isArray(r)?r.filter(A=>"string"==typeof A):[]}}let r=(0,C.x)(A,"codebase.id");if("string"!=typeof r)throw Error("Workflow requires a codebase or worktree");let i=await e.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(A=>"string"==typeof A):[]}}async startTerminalJob(A){if(!this.agentControl)throw Error("Agent control is unavailable");let e=await this.workflowAgentContext(A.sessionData);if(!e.capabilities.includes(D.e))throw Error("The selected agent must be updated to run workflow terminal steps");let t={...A.node.config.environment&&"object"==typeof A.node.config.environment&&!Array.isArray(A.node.config.environment)?Object.fromEntries(Object.entries(A.node.config.environment).map(([A,e])=>[A,String(e)])):{},AIDE_TICKET_KEY:String((0,C.x)(A.sessionData,"ticket.key")??""),AIDE_TICKET_TITLE:String((0,C.x)(A.sessionData,"ticket.title")??""),AIDE_BRANCH:String((0,C.x)(A.sessionData,"worktree.branch")??""),AIDE_BASE_BRANCH:String((0,C.x)(A.sessionData,"worktree.baseBranch")??""),AIDE_WORKTREE_PATH:String((0,C.x)(A.sessionData,"worktree.path")??e.cwd),AIDE_CODEBASE_PATH:String((0,C.x)(A.sessionData,"codebase.folder")??e.cwd),AIDE_REPO_ORIGIN:String((0,C.x)(A.sessionData,"repo.displayOrigin")??"")},r=Array.isArray(A.node.config.credentials)?A.node.config.credentials:[],i=await this.agentControl.createJob({agentId:e.agentId,kind:D.e,payload:{workflowRunId:A.run.id,stepAttemptId:A.attempt.id,stepId:A.node.id,codebaseId:e.codebaseId,worktreeId:e.worktreeId,cwd:e.cwd,script:Y(String(A.node.config.script??""),"Terminal script",1e6),interpreter:"NODE"===A.node.config.interpreter?"NODE":"SHELL",sessionData:A.sessionData,environment:t,credentialEnvironment:r},idempotencyKey:A.attempt.idempotencyKey,timeoutSeconds:Number(A.node.config.timeoutSeconds??900),codebaseId:e.codebaseId,worktreeId:e.worktreeId,visibility:"SYSTEM",blocksGitOperations:A.run.blocksGitOperations});return{output:{jobId:i.id},links:[{kind:"AGENT_JOB",resourceId:i.id,label:"Workflow terminal job",url:`/dashboard/jobs/${i.id}`}],wait:{kind:"AGENT_JOB",externalKey:i.id,resumeAfter:(0,E.P)(A.node.config),timeoutAt:(0,E.I)(A.node.config,900)}}}async startCheckpointJob(A){if(!this.agentControl)throw Error("Agent control is unavailable");let e=await this.workflowAgentContext(A.sessionData);if(!e.capabilities.includes(D.Q))throw Error("The selected agent must be updated to capture workflow checkpoints");let t=await this.agentControl.createJob({agentId:e.agentId,kind:D.Q,payload:{operation:"CAPTURE",workflowRunId:A.run.id,stepAttemptId:A.attempt.id,cwd:e.cwd,kind:String(A.node.config.kind??"STEP"),checkpoint:null,stash:!1},idempotencyKey:A.attempt.idempotencyKey,timeoutSeconds:300,codebaseId:e.codebaseId,worktreeId:e.worktreeId,visibility:"SYSTEM"});return{output:{jobId:t.id},links:[{kind:"AGENT_JOB",resourceId:t.id,label:"Workflow checkpoint job",url:`/dashboard/jobs/${t.id}`}],wait:{kind:"AGENT_JOB",externalKey:t.id,resumeAfter:(0,E.P)(A.node.config),timeoutAt:(0,E.I)(A.node.config)}}}async workflowAgentJobCompleted(A){if(A.kind===D.e){let e=(0,D.r)(L(A.payloadJson));if("SUCCEEDED"!==A.status||!A.resultJson)return void await this.resolveExternalWait("AGENT_JOB",A.id,{jobId:A.id,status:A.status},A.error||`Workflow terminal job ${A.status.toLowerCase()}`);let t=AA(L(A.resultJson),"Workflow terminal result");return void await this.resolveExternalWait("AGENT_JOB",A.id,{...t,jobId:A.id,stepAttemptId:e.stepAttemptId})}if(A.kind!==D.Q)return;let e=(0,D.P)(L(A.payloadJson));if("SUCCEEDED"!==A.status||!A.resultJson)return void await this.resolveExternalWait("AGENT_JOB",A.id,{jobId:A.id,status:A.status},A.error||`Workflow checkpoint job ${A.status.toLowerCase()}`);let t=AA(L(A.resultJson),"Workflow checkpoint result"),r=null;if(t.checkpoint&&"object"==typeof t.checkpoint){let A=t.checkpoint,i=await (0,o.U)();r=(0,a.randomUUID)(),await i.$transaction([i.runCheckpoint.create({data:{id:r,workflowStepAttemptId:e.stepAttemptId,kind:String(A.kind??e.kind),headSha:"string"==typeof A.headSha?A.headSha:null,branch:"string"==typeof A.branch?A.branch:null,upstreamSha:"string"==typeof A.upstreamSha?A.upstreamSha:null,indexTree:"string"==typeof A.indexTree?A.indexTree:null,worktreeTree:"string"==typeof A.worktreeTree?A.worktreeTree:null,refName:"string"==typeof A.refName?A.refName:null,manifestJson:"string"==typeof A.manifestJson?A.manifestJson:null,diffSummary:"string"==typeof A.diffSummary?A.diffSummary:null,diffPatch:"string"==typeof A.diffPatch?A.diffPatch:null,stashRef:"string"==typeof t.stashRef?t.stashRef:"string"==typeof A.stashRef?A.stashRef:null}}),i.workflowRunResourceLink.create({data:{id:(0,a.randomUUID)(),runId:e.workflowRunId,attemptId:e.stepAttemptId,kind:"CHECKPOINT",resourceId:r,label:`${String(A.kind??e.kind)} checkpoint`}})])}await this.resolveExternalWait("AGENT_JOB",A.id,{...t,jobId:A.id,checkpointId:r})}async genericAgentJobCompleted(A){if(A.kind===D.e||A.kind===D.Q)return;let e=A.resultJson?AA(L(A.resultJson),"Agent job result"):{status:A.status};if("SUCCEEDED"===A.status){let t=await (0,o.U)(),r=e.worktree&&"object"==typeof e.worktree&&!Array.isArray(e.worktree)?e.worktree:null,i=r&&"string"==typeof r.gitDirectory?r.gitDirectory:null,n=A.codebaseId?await t.worktree.findFirst({where:{codebaseId:A.codebaseId,...A.worktreeId?{id:A.worktreeId}:i?{gitDirectory:i}:{id:"__missing__"}},include:{codebase:{include:{repository:!0,agent:!0}}}}):null,a=n?.codebase??(A.codebaseId?await t.codebase.findUnique({where:{id:A.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 A=e.sessionPatch&&"object"==typeof e.sessionPatch&&!Array.isArray(e.sessionPatch)?e.sessionPatch:{};e={...e,sessionPatch:(0,C.d)(A,s)}}}await this.resolveExternalWait("AGENT_JOB",A.id,{...e,jobId:A.id,status:A.status},"SUCCEEDED"===A.status?null:A.error||`Agent job ${A.status.toLowerCase()}`)}async restoreCheckpointWithAgent(A,e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await (0,o.U)(),r=await t.runCheckpoint.findUnique({where:{id:A},include:{workflowStepAttempt:{include:{run:!0}}}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow checkpoint not found");let n=await this.workflowAgentContext((0,C.h)(i.run.sessionDataJson)),s=await this.agentControl.createJob({agentId:n.agentId,kind:D.Q,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:e.stash},idempotencyKey:`workflow:restore:${A}:${(0,a.randomUUID)()}`,timeoutSeconds:300,codebaseId:n.codebaseId,worktreeId:n.worktreeId,visibility:"SYSTEM"}),l=Date.now()+3e5;for(;Date.now()<l;){let A=await this.agentControl.getJob(s.id);if(!A)throw Error("Workflow restore job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(A.status)){if("SUCCEEDED"!==A.status)throw Error(A.error||`Workflow restore job ${A.status.toLowerCase()}`);return}await new Promise(A=>setTimeout(A,250))}throw await this.agentControl.cancelJob(s.id),Error("Workflow restore job timed out")}async compareCheckpointWithAgent(A){if(!this.agentControl)throw Error("Agent control is unavailable");let e=await (0,o.U)(),t=await e.runCheckpoint.findUnique({where:{id:A},include:{workflowStepAttempt:{include:{run:!0}}}}),r=t?.workflowStepAttempt;if(!t||!r)throw Error("Workflow checkpoint not found");let i=await this.workflowAgentContext((0,C.h)(r.run.sessionDataJson)),n=await this.agentControl.createJob({agentId:i.agentId,kind:D.Q,payload:{operation:"COMPARE",workflowRunId:r.runId,stepAttemptId:r.id,cwd:i.cwd,kind:"REPLAY_PREVIEW",checkpoint:{headSha:t.headSha,branch:t.branch,upstreamSha:t.upstreamSha,indexTree:t.indexTree,worktreeTree:t.worktreeTree,refName:t.refName},stash:!1},idempotencyKey:`workflow:compare:${A}:${(0,a.randomUUID)()}`,timeoutSeconds:60,codebaseId:i.codebaseId,worktreeId:i.worktreeId,visibility:"SYSTEM"}),s=Date.now()+6e4;for(;Date.now()<s;){let A=await this.agentControl.getJob(n.id);if(!A)throw Error("Workflow comparison job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(A.status)){if("SUCCEEDED"!==A.status||!A.resultJson)throw Error(A.error||`Workflow comparison job ${A.status.toLowerCase()}`);let e=AA(L(A.resultJson),"Workflow comparison result");return AA(e.comparison,"Git checkpoint comparison")}await new Promise(A=>setTimeout(A,250))}throw await this.agentControl.cancelJob(n.id),Error("Workflow comparison job timed out")}async runSummariesForResource(A,e,t=6){return(await (0,o.U)()).workflowRun.findMany({where:{resourceLinks:{some:{kind:A.trim().toUpperCase(),resourceId:e.trim()}}},take:Math.min(Math.max(t,1),100),select:{id:!0,displayNumber:!0,status:!0,workflow:{select:{id:!0,name:!0}}},orderBy:[{createdAt:"desc"},{id:"desc"}]})}async targetSummaries(A){if(A.length>200)throw Error("At most 200 workflow targets are allowed");let e=new Map;for(let t of A){let A=t.resourceKind.trim().toUpperCase(),r=t.resourceId.trim();if(!A||!r)throw Error("Invalid workflow target");e.set(JSON.stringify([A,r]),{resourceKind:A,resourceId:r})}let t=[...e.values()];if(!t.length)return[];let r=t.map(({resourceKind:A,resourceId:e})=>({kind:A,resourceId:e})),i=await (0,o.U)(),n=await i.workflowRun.findMany({where:{archivedAt:null,status:{in:[...v]},resourceLinks:{some:{OR:r}}},select:{id:!0,workflowId:!0,displayNumber:!0,status:!0,resourceLinks:{where:{OR:r},select:{kind:!0,resourceId:!0}}},orderBy:[{displayNumber:"asc"},{id:"asc"}]});return t.map(A=>({...A,activeRuns:n.filter(e=>e.resourceLinks.some(e=>e.kind===A.resourceKind&&e.resourceId===A.resourceId)).map(({resourceLinks:A,...e})=>e)}))}async runsForResource(A,e,t){return(await (0,o.U)()).workflowRun.findMany({where:{resourceLinks:{some:{kind:A.trim().toUpperCase(),resourceId:e.trim()}}},...null==t?{}:{take:Math.min(Math.max(t,1),100)},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"},{id:"desc"}]})}async acceptingResource(A){let e=A.trim().toUpperCase(),t=await (0,o.U)();return(await t.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:!0},orderBy:{name:"asc"}})).filter(A=>!!A.activeVersion&&(0,c.d)(L(A.activeVersion.definitionJson)).triggers.some(A=>(0,d.g)(A.kind)&&(0,c.F)(A.config)===e))}async quickActions(A){let e=await (0,o.U)();if(!d.t.includes(A.kind))throw Error("Quick action kind is invalid");let t=A.resourceKind.trim().toUpperCase(),r=A.repositoryId?.trim()||null;return(await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null},quickActionKind:A.kind,OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:r??""}}}]},include:{activeVersion:!0},orderBy:[{name:"asc"},{id:"asc"}]})).filter(A=>!!A.activeVersion&&(0,c.d)(L(A.activeVersion.definitionJson)).triggers.some(A=>(0,d.g)(A.kind)&&(0,c.F)(A.config)===t))}async recordEvent(A){return this.events.record(A)}async hydrateResourceSessionData(A,e,t){let r=A?.toUpperCase()??null,i=await (0,o.U)(),n={},a=null;if("CODEBASE"===r&&e){let A=await i.codebase.findUnique({where:{id:e},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}}}});A&&(n=j(A))}if("BUILD"===r&&e){let A=await i.build.findUnique({where:{id:e},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(A){a=A.worktreeId;let e=e=>{let t=A.reports.find(A=>A.kind===e);if(t)try{return(0,C.h)(t.summaryJson)}catch{return}},t=e("TEST_RESULTS"),r=e("CODE_COVERAGE");n=(0,C.d)(A.codebase?j(A.codebase):A.agent?P(A.agent):{},{build:{id:A.id,status:A.status,action:A.action,error:A.error,artifactDirectory:A.artifactDirectory,artifacts:A.artifacts,...t?{testSummary:t}:{},...r?{coverageSummary:r}:{}}})}}if("AGENT_RUN"===r&&e){let A=await i.agentRun.findUnique({where:{id:e},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}});A&&(a=A.worktreeId,n=(0,C.d)(A.agent?P(A.agent):{},{run:{id:A.id,kind:A.kind,status:A.status,phase:A.phase,origin:A.origin,provider:A.provider,model:A.model,branch:A.branch,finalOutput:A.finalOutput,error:A.error,usage:{inputTokens:A.inputTokens,outputTokens:A.outputTokens,reasoningTokens:A.reasoningTokens,cacheReadTokens:A.cacheReadTokens,cacheWriteTokens:A.cacheWriteTokens,toolCallCount:A.toolCallCount,estimatedCost:A.estimatedCost}},...A.jiraIssueKey?{ticket:{key:A.jiraIssueKey}}:{}}))}if("PULL_REQUEST"===r&&e&&this.worktrees?.workflowSessionDataForPullRequest){let A=/^([^/]+)\/([^#]+)#([1-9]\d*)$/.exec(e);A&&(n=(0,C.d)(n,await this.worktrees.workflowSessionDataForPullRequest(A[1],A[2],Number(A[3]))))}if("JIRA_TICKET"===r&&e&&this.jiraService)try{let A=await this.jiraService.ticket(e),t=A.comments.at(-1)??null;n=(0,C.d)(n,{ticket:{...A,title:A.summary,type:A.issueType,url:A.jiraUrl},...t?{comment:{id:t.id,body:t.content?.rawText??"",author:t.author}}:{}})}catch{}let s=(0,C.x)(t,"worktree.id"),l="WORKTREE"===r?e:"GITHUB_PIPELINE"===r||"GITHUB_JOB"===r?"string"==typeof s?s:null:a;if(l&&this.worktrees)if(this.worktrees.workflowSessionDataForWorktree)n=(0,C.d)(await this.worktrees.workflowSessionDataForWorktree(l),n);else{let A=await this.worktrees.ticketKeyForWorktree(l);A&&(n=(0,C.d)({ticket:{key:A}},n))}let c=(0,C.x)(t,"pipeline.pullRequests");!(0,C.x)(n,"pr")&&!(0,C.x)(t,"pr")&&Array.isArray(c)&&c[0]&&"object"==typeof c[0]&&!Array.isArray(c[0])&&(n=(0,C.d)(n,{pr:c[0]}));let d=(0,C.x)(t,"pr.jiraKey")??(0,C.x)(t,"pipeline.jiraKey");return"string"!=typeof(0,C.x)(n,"ticket.key")&&"string"==typeof d&&d.trim()&&(n=(0,C.d)(n,{ticket:{key:d}})),(0,C.d)(n,t)}async trigger(A){let e=await (0,o.U)(),t=await e.workflow.findUnique({where:{id:A.workflowId},include:{activeVersion:{include:{triggers:!0}}}});if(!t?.activeVersion)throw Error("Published workflow not found");if(!t.enabled||t.archivedAt)throw Error("Workflow is paused");let r=A.resourceKind?.toUpperCase()??null,i=A.choice?.trim()||null,{triggers:n}=t.activeVersion,s=r?"RESOURCE_MANUAL":"MANUAL",l=r?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE",d=A=>n.find(e=>e.kind===A&&(!r||(0,c.F)(AA(L(e.configJson),"Trigger configuration"))===r))??null,u=d(l),g=d(s),h=i?u:g;if(i&&!u)throw Error(r?`No resource trigger offers choices for ${r} resources`:"This workflow has no manual trigger with choices");if(!i&&!g&&u){let A=(0,c.q)(AA(L(u.configJson),"Trigger configuration"));throw Error(`This workflow needs a choice: ${A.map(({key:A})=>A).join(", ")}`)}if(r&&!h)throw Error(`No resource trigger accepts ${A.resourceKind} resources`);if(i&&u&&!(0,c.q)(AA(L(u.configJson),"Trigger configuration")).some(({key:A})=>A===i))throw Error(`Unknown choice ${i}`);let C=A.subjectKey?.trim()||(r&&A.resourceId?`${r}:${A.resourceId}`:`manual:${(0,a.randomUUID)()}`),p={sessionData:await this.hydrateResourceSessionData(A.resourceKind,A.resourceId,A.sessionData??{}),resourceKind:A.resourceKind??null,resourceId:A.resourceId??null,choice:i,manual:!0},I=await this.createRunForTrigger(t,t.activeVersion,h,null,i?l:s,C,p,`manual:${t.id}:${(0,a.randomUUID)()}`);return At(I.id),this.run(I.id)}async createRunForTrigger(A,e,t,r,i,n,s,l,c=null,d=null){return(await (0,o.U)()).$transaction(async o=>{if(d){let A=await o.workflowTriggerDelivery.findUnique({where:{id:d},include:{run:!0}});if(A)return A.run}let u=async A=>(d&&await o.workflowTriggerDelivery.create({data:{id:d,runId:A.id}}),A),g=await o.workflowRun.findUnique({where:{idempotencyKey:l}});if(g)return u(g);let h=AA(s.sessionData??{},"Session data"),p=(0,C.x)(h,"worktree.id"),I="string"==typeof p&&p?(await o.worktree.findUnique({where:{id:p},select:{id:!0}}))?.id??null:null;if("COALESCE_LATEST"===A.overlapPolicy){let e=await o.workflowRun.findFirst({where:{workflowId:A.id,triggerSubjectKey:n,status:"QUEUED",...W(A.overlapScope,I)},orderBy:{queuedAt:"desc"}});if(e)return u(await o.workflowRun.update({where:{id:e.id},data:{triggerId:t?.id??null,triggerEventId:r,triggerKind:i,triggerPayloadJson:JSON.stringify(s),queuedAt:new Date}}))}let m=(0,a.randomUUID)(),f=JSON.stringify((0,C.d)({workflow:{id:A.id,name:e.name,runId:m,startedAt:null,trigger:{id:t?.nodeId??null,kind:i,subjectKey:n,choice:"string"==typeof s.choice?s.choice:null}},steps:{}},h));X(f,"Workflow session data",2097152);let E=c?await o.workflowRun.findUnique({where:{id:c},select:{worktreeId:!0,worktreeLeaseOwnerRunId:!0}}):null,Q=(E?.worktreeId===I?E.worktreeLeaseOwnerRunId:null)??(!c&&"EXCLUSIVE"===A.worktreeConcurrency&&I?m:null),y=await o.workflowRun.create({data:{id:m,displayNumber:await An(o),workflowId:A.id,versionId:e.id,triggerId:t?.id??null,triggerEventId:r,parentRunId:c,worktreeId:I,worktreeLeaseOwnerRunId:Q,exclusiveWorktree:"EXCLUSIVE"===A.worktreeConcurrency,worktreeConcurrency:A.worktreeConcurrency,blocksGitOperations:A.blocksGitOperations,idempotencyKey:l,triggerKind:i,triggerSubjectKey:n,triggerPayloadJson:JSON.stringify(s),sessionDataJson:f,phase:Q?"WAITING_FOR_WORKTREE":"QUEUED"}}),B=(0,w.t)(i,s);return B&&await o.workflowRunResourceLink.create({data:{id:(0,a.randomUUID)(),runId:y.id,kind:B.kind.toUpperCase(),resourceId:B.resourceId,label:B.label??null,url:B.url??null,metadataJson:B.metadata?JSON.stringify(B.metadata):null}}),u(y)})}async processTriggerEvents(){let A=await (0,o.U)(),e=await A.workflowTriggerEvent.findMany({where:{status:"PENDING"},orderBy:{receivedAt:"asc"},take:50});if(!e.length)return;let t=await A.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:!0}}}});for(let s of e)try{let e=AA(L(s.payloadJson),"Trigger payload");for(let o of t)if(o.activeVersion)for(let t of o.activeVersion.triggers.filter(({kind:A})=>A===s.kind)){var r,i,n;if(e.workflowCorrelation&&"object"==typeof e.workflowCorrelation&&e.workflowCorrelation.workflowId===o.id)continue;let l=(r=s.dedupeKey,i=o.id,n=t.nodeId,(0,a.createHash)("sha256").update(JSON.stringify([r,i,n])).digest("hex"));if(await A.workflowTriggerDelivery.findUnique({where:{id:l},select:{id:!0}})||!await this.triggerMatches(t,s.subjectKey,e))continue;let c=await this.createRunForTrigger({...o,activeVersion:o.activeVersion},o.activeVersion,t,s.id,s.kind,s.subjectKey,e,l,null,l);At(c.id)}await A.workflowTriggerEvent.update({where:{id:s.id},data:{status:"PROCESSED",processedAt:new Date,error:null}})}catch(e){await A.workflowTriggerEvent.update({where:{id:s.id},data:{status:"FAILED",processedAt:new Date,error:e instanceof Error?e.message:String(e)}})}}async triggerMatches(A,e,t){let r,i=(0,C.S)(AA(L(A.configJson),"Trigger configuration"),t);"SIGNING_ASSET_EXPIRING"===A.kind&&void 0===i.thresholdPath&&(i.thresholdPath="signingProfile.expiresInDays",i.thresholdOperator="LTE",i.thresholdValue=30);let n=null;if(void 0!==t.cursorValue&&"WORKTREE_DIRTY_DURATION"!==A.kind&&("string"!=typeof i.thresholdPath||"string"!=typeof i.thresholdOperator)){let i=await (0,o.U)(),s=await i.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:A.id,subjectKey:e}}});if(n=Z(r=s?.cursorJson?AA(L(s.cursorJson),"Trigger cursor").value:void 0)!==Z(t.cursorValue),"WORKTREE_CLEAN"===A.kind&&(n=!0===r&&!1===t.cursorValue),"JIRA_SPRINT_STARTED"===A.kind||"JIRA_SPRINT_ENDED"===A.kind){let A=Array.isArray(r)?r:null,e=Array.isArray(t.cursorValue)?t.cursorValue:null;n=null!==A&&null!==e&&e.some(e=>!A.some(A=>Z(A)===Z(e)))}await i.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:A.id,subjectKey:e}},create:{id:(0,a.randomUUID)(),triggerId:A.id,subjectKey:e,cursorJson:JSON.stringify({value:t.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}},update:{cursorJson:JSON.stringify({value:t.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}}})}if("GITHUB_ISSUE_COMMAND"===A.kind){let A=(0,C.x)(t,"comment.author.login"),e=(0,C.x)(t,"comment.body"),r=Array.isArray(i.allowedLogins)?i.allowedLogins:[];if("string"!=typeof A||!r.includes(A)||"string"!=typeof e||"string"!=typeof i.commandPattern||!(0,l.u)(i.commandPattern,{label:"GitHub issue command pattern"}).test(e))return!1}if("GITLAB_NOTE_COMMAND"===A.kind){let A=(0,C.x)(t,"comment.author.username"),e=(0,C.x)(t,"comment.body"),r=Array.isArray(i.allowedUsernames)?i.allowedUsernames:[];if("string"!=typeof A||!r.includes(A)||"string"!=typeof e||"string"!=typeof i.commandPattern||!(0,l.u)(i.commandPattern,{label:"GitLab note command pattern"}).test(e))return!1}if("JIRA_ISSUE_COMMAND"===A.kind){let A=(0,C.x)(t,"comment.author.accountId"),e=(0,C.x)(t,"comment.body"),r=Array.isArray(i.allowedAccountIds)?i.allowedAccountIds:[];if("string"!=typeof A||!r.includes(A)||"string"!=typeof e||"string"!=typeof i.commandPattern||!(0,l.u)(i.commandPattern,{label:"Jira issue command pattern"}).test(e))return!1}if("COMMAND_OUTPUT_MATCH"===A.kind){let A=(0,C.x)(t,"output.data");if("string"!=typeof A||"string"!=typeof i.outputPattern||!(0,l.u)(i.outputPattern,{label:"Command output trigger pattern"}).test(A))return!1}if("WORKTREE_CONFLICT"===A.kind&&!0!==(0,C.x)(t,"worktree.conflicted")||"WORKTREE_MISSING"===A.kind&&null==(0,C.x)(t,"worktree.missingAt")||"WORKTREE_DIVERGED"===A.kind&&"DIVERGED"!==(0,C.x)(t,"worktree.pushStatus"))return!1;let s=!0;if(i.filters&&"object"==typeof i.filters)for(let[A,e]of Object.entries(i.filters)){let r=(0,C.x)(t,A);if(Array.isArray(e)){if(!e.some(A=>Z(A)===Z(r))){s=!1;break}}else if(Z(e)!==Z(r)){s=!1;break}}if("WORKTREE_DIRTY_DURATION"===A.kind){let r=await (0,o.U)(),n={triggerId_subjectKey:{triggerId:A.id,subjectKey:e}},l=await r.workflowTriggerState.findUnique({where:n}),c=function(A){let e=A.durationSeconds??3600;if("number"!=typeof e||!Number.isInteger(e)||e<1||e>31536e3)throw Error("Dirty duration must be an integer between 1 and 31536000 seconds");let t=A.previousCursor&&"object"==typeof A.previousCursor&&"dirtySince"in A.previousCursor?A.previousCursor.dirtySince:null,r=A.dirty?"number"==typeof t&&Number.isFinite(t)&&t<=A.now?t:A.now:null,i=null!==r&&A.now-r>=1e3*e;return{cursor:{dirtySince:r},matched:i,fire:i&&!A.previouslyMatched}}({dirty:!0===(0,C.x)(t,"worktree.dirty"),durationSeconds:i.durationSeconds,now:Date.now(),previousCursor:l?.cursorJson?AA(L(l.cursorJson),"Dirty duration cursor"):void 0,previouslyMatched:l?.lastMatched}),d=c.fire&&s,u=c.matched&&(l?.lastMatched||d),g={cursorJson:JSON.stringify(c.cursor),lastMatched:!!u,...d?{lastFiredAt:new Date}:{}};await r.workflowTriggerState.upsert({where:n,create:{id:(0,a.randomUUID)(),triggerId:A.id,subjectKey:e,...g},update:g});let h={...t.worktree,dirtySince:null===c.cursor.dirtySince?null:new Date(c.cursor.dirtySince).toISOString(),dirtyDurationSeconds:null===c.cursor.dirtySince?0:Math.floor((Date.now()-c.cursor.dirtySince)/1e3)};return t.worktree=h,t.sessionData={...t.sessionData,worktree:h},d}if(!s)return!1;if("string"==typeof i.thresholdPath&&"string"==typeof i.thresholdOperator){let r=I({op:i.thresholdOperator,left:{source:"SESSION",path:i.thresholdPath},right:i.thresholdValue},t),n=await (0,o.U)(),s=await n.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:A.id,subjectKey:e}}});return await n.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:A.id,subjectKey:e}},create:{id:(0,a.randomUUID)(),triggerId:A.id,subjectKey:e,lastMatched:r,cursorJson:JSON.stringify({value:(0,C.x)(t,i.thresholdPath)}),...r?{lastFiredAt:new Date}:{}},update:{lastMatched:r,cursorJson:JSON.stringify({value:(0,C.x)(t,i.thresholdPath)}),...r&&!s?.lastMatched?{lastFiredAt:new Date}:{}}}),r&&!s?.lastMatched}return n??!0}async processSchedules(){let A=await (0,o.U)(),e=await A.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:{where:{kind:"SCHEDULE"},include:{states:!0}}}}}}),t=new Date;for(let r of e)for(let e of r.activeVersion?.triggers??[]){let i=AA(L(e.configJson),"Schedule configuration"),n=Number(i.cadenceSeconds);if(!Number.isInteger(n)||n<1)continue;let s=r.id,o=e.states.find(A=>A.subjectKey===s);if(!o){let r="string"==typeof i.firstRunAt?new Date(i.firstRunAt):null,l=r&&Number.isFinite(r.getTime())?r:new Date(t.getTime()+1e3*n);o=await A.workflowTriggerState.create({data:{id:(0,a.randomUUID)(),triggerId:e.id,subjectKey:s,nextScheduledAt:l}})}if(!o.nextScheduledAt||o.nextScheduledAt>t)continue;let l=o.nextScheduledAt,c=new Date(Math.max(t.getTime(),l.getTime())+1e3*n);await A.workflowTriggerState.update({where:{id:o.id},data:{lastFiredAt:t,nextScheduledAt:c}}),await this.events.record({kind:"SCHEDULE",subjectKey:s,dedupeKey:`schedule:${e.id}:${l.toISOString()}`,payload:{sessionData:{},scheduledFor:l.toISOString(),cadenceSeconds:n}})}}async lifecycle(A,e){let t=await (0,o.U)(),r=await t.workflowRun.findUnique({where:{id:A}});if(!r)throw Error("Workflow run not found");if("PAUSE"===e){if(!new Set(["RUNNING","WAITING","BLOCKED"]).has(r.status))throw Error("Only an active workflow run can be paused");if(!await t.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:A,status:{in:["RUNNING","WAITING","BLOCKED"]}},data:{status:"PAUSING",phase:"DRAINING"}})).count&&(await e.workflowStepAttempt.updateMany({where:{runId:A,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}}),!0)))return this.run(A);await this.controlLinkedAgentRuns(A,"PAUSE"),await this.appendEvent(A,null,"RUN_PAUSING","Workflow pause requested")}else if("RESUME"===e){if("PAUSED"!==r.status)throw Error("Only a paused workflow run can be resumed");if(!(await t.workflowRun.updateMany({where:{id:A,status:"PAUSED"},data:{status:"RUNNING",phase:"SCHEDULING",pausedAt:null}})).count)return this.run(A);await this.controlLinkedAgentRuns(A,"CONTINUE"),await this.appendEvent(A,null,"RUN_RESUMED","Workflow resumed")}else{if(T.has(r.status))return this.run(A);for(let[e,r]of(await this.controlLinkedAgentRuns(A,"CANCEL"),await this.cancelWaitingCommandRuns(A),this.activeExecutions)){let i=await t.workflowStepAttempt.findUnique({where:{id:e},select:{runId:!0}});i?.runId===A&&r.abort()}if(!await t.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:A,status:{notIn:[...T]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date}})).count&&(await e.workflowStepAttempt.updateMany({where:{runId:A,status:{notIn:[...U]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date,claimOwner:null,claimExpiresAt:null}}),await e.workflowWait.updateMany({where:{runId:A,status:"PENDING"},data:{status:"CANCELLED",resolvedAt:new Date}}),await e.workflowResourceLease.deleteMany({where:{runId:A}}),await e.worktreeWorkflowLease.deleteMany({where:{workflowRunId:A}}),!0)))return this.run(A);await this.appendEvent(A,null,"RUN_CANCELLED","Workflow cancelled"),await this.promoteWorktreeAdmissions(r.worktreeId)}return At(A),this.run(A)}async repairRunData(A,e){let t=AA(e,"Session data patch"),r=await (0,o.U)(),i=await r.workflowRun.findUnique({where:{id:A}});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=(0,C.h)(i.sessionDataJson),a=(0,C.x)(n,"workflow"),s=(0,C.d)(n,t);a&&"object"==typeof a&&(s=(0,C.H)(s,"workflow",a)),G(i,s);let l=JSON.stringify(s);return X(l,"Workflow session data",2097152),await r.$transaction([r.workflowRun.update({where:{id:A},data:{sessionDataJson:l,sessionRevision:{increment:1},status:"PAUSED"===i.status?"PAUSED":"RUNNING",phase:"PAUSED"===i.status?"PAUSED":"SCHEDULING",blockedReason:null}}),r.workflowStepAttempt.updateMany({where:{runId:A,status:"BLOCKED"},data:{status:"PENDING",phase:"PENDING",error:null}})]),await this.appendEvent(A,null,"RUN_DATA_REPAIRED","Workflow session data repaired"),At(A),this.run(A)}async answerQuestion(A,e){let t=await (0,o.U)(),r=await t.$transaction(async t=>{let r=await t.runQuestionBatch.findUnique({where:{id:A},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 t.runAnswerRevision.create({data:{id:(0,a.randomUUID)(),batchId:A,revision:r.answerRevisions.length,answersJson:JSON.stringify(e)}}),await t.runQuestionBatch.update({where:{id:A},data:{status:"ANSWERED",answeredAt:new Date}}),await t.workflowWait.updateMany({where:{attemptId:i.id,status:"PENDING",kind:"HUMAN"},data:{status:"RESOLVED",resultJson:JSON.stringify({answers:e}),resolvedAt:new Date}}),i});return await this.completeWaitingAttempt(r.id,{answers:e},"HUMAN"),y._H.publish(H(r.runId),{workflowQuestionChanged:{id:A,runId:r.runId}}),this.run(r.runId)}async consumeCommandOutputMatches(){if(this.commandOutputStream||!this.commandsService)return;let A=y._H.iterate(y.jU);this.commandOutputStream=A;try{for await(let e of A){if(this.commandOutputStream!==A)break;await this.reconcileCommandOutputMatches(e.commandRunOutputAdded.runId).catch(A=>console.error("Could not process workflow command output:",A))}}finally{this.commandOutputStream===A&&(this.commandOutputStream=void 0),await A.return?.()}}async commandOutputRows(A,e,t){if(!this.commandsService)return[];let r=[],i=e,n=t;for(;;){let e=await this.commandsService.listOutput(A,i,n,5e3);if(r.push(...e),e.length<5e3)return r;let t=e.at(-1);i=t.attempt.attempt,n=t.sequence}}commandMatchBranchNodes(A,e){let t=new Map;for(let e of A.edges)t.set(e.source,[...t.get(e.source)??[],e]);let r=(t.get(e)??[]).filter(({sourceHandle:A})=>"match"===A).map(({target:A})=>A),i=new Set;for(;r.length;){let A=r.shift();i.has(A)||(i.add(A),r.push(...(t.get(A)??[]).map(({target:A})=>A)))}return A.nodes.filter(({id:A})=>i.has(A))}async persistCommandMatches(A,e,t){var r;let i=await (0,o.U)(),n=(r=A.predicateJson,JSON.stringify({...r?_(L(r)):{},outputMatch:e}));if(!t.length)return!!(await i.workflowWait.updateMany({where:{id:A.id,status:"PENDING",predicateJson:A.predicateJson},data:{predicateJson:n}})).count;let s=(0,c.d)(L(A.attempt.run.version.definitionJson)),l=s.nodes.find(({id:e})=>e===A.attempt.nodeId);if(!l)throw Error("Workflow command step is missing");let d=this.commandMatchBranchNodes(s,l.id);if(!await i.$transaction(async e=>{if(!(await e.workflowWait.updateMany({where:{id:A.id,status:"PENDING",predicateJson:A.predicateJson},data:{predicateJson:n}})).count)return!1;let r=await e.workflowRun.findUnique({where:{id:A.runId}});if(!r||!J.has(r.status))return!1;let i=(0,C.h)(r.sessionDataJson??"{}"),s=`steps.${l.id}`,o=_((0,C.x)(i,s)),c=Array.isArray(o.matches)?o.matches:[],u=[...c,...t];G(r,i=(0,C.H)(i,s,{...o,matches:u,latestMatch:t.at(-1)}));let g=JSON.stringify(i);X(g,"Workflow session data",2097152);let h=d.length?t.flatMap((e,r)=>{let i=`match.${A.attempt.id}.${e.ordinal}`,n=(0,C.H)({},s,{...o,matches:[...c,...t.slice(0,r+1)],latestMatch:e}),u={runId:A.runId,generation:A.attempt.generation,iterationKey:i,attempt:0};return[{id:(0,a.randomUUID)(),...u,nodeId:l.id,kind:l.kind,status:"SUCCEEDED",phase:"MATCH_EMITTED",inputJson:JSON.stringify(n),outputJson:JSON.stringify({value:e,selectedHandles:["match"],sessionPatch:n}),requiredPathsJson:JSON.stringify(Ar(l)),providedPathsJson:JSON.stringify(Ai(l)),idempotencyKey:`${A.runId}:${l.id}:${A.attempt.generation}:${i}:0`,startedAt:new Date,finishedAt:new Date},...d.map(e=>({id:(0,a.randomUUID)(),...u,nodeId:e.id,kind:e.kind,status:"PENDING",phase:"MATCH_PENDING",inputJson:JSON.stringify(n),requiredPathsJson:JSON.stringify(Ar(e)),providedPathsJson:JSON.stringify(Ai(e)),idempotencyKey:`${A.runId}:${e.id}:${A.attempt.generation}:${i}:0`}))]}):[];return h.length&&await e.workflowStepAttempt.createMany({data:h}),await e.workflowRun.update({where:{id:A.runId},data:{sessionDataJson:g,sessionRevision:{increment:1}}}),!0}))return!1;for(let e of t)await this.appendEvent(A.runId,A.attemptId,"STEP_OUTPUT_MATCHED",`Step ${l.name??l.id} matched command output`,{nodeId:l.id,match:e});return At(A.runId),await this.progressRun(A.runId),await this.dispatchReadyAttempts(),!0}async failCommandMatchWait(A,e){let t=await (0,o.U)();if(!(await t.workflowWait.updateMany({where:{id:A.id,status:"PENDING",predicateJson:A.predicateJson},data:{status:"FAILED",resolvedAt:new Date}})).count)return;await this.commandsService?.terminateRun(A.externalKey);let r=(0,c.d)(L(A.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===A.attempt.nodeId);await this.failAttempt(A.attempt,r??null,e)}async processCommandMatchWait(A){if(!A.externalKey||!this.commandsService)return;let e=function(A){if(!A)return null;let e=_(L(A)),t=_(e.outputMatch);return"string"==typeof t.pattern&&t.pattern?{pattern:t.pattern,mode:(0,u.O)({outputMatchMode:t.mode}),matchCount:Number.isInteger(t.matchCount)?Number(t.matchCount):0,matched:!0===t.matched,scanAttempt:Number.isInteger(t.scanAttempt)&&Number(t.scanAttempt)>0?Number(t.scanAttempt):1,scanCharacterOffset:Number.isInteger(t.scanCharacterOffset)&&Number(t.scanCharacterOffset)>=0?Number(t.scanCharacterOffset):0,observedAttempt:Number.isInteger(t.observedAttempt)&&Number(t.observedAttempt)>=0?Number(t.observedAttempt):0,observedSequence:Number.isInteger(t.observedSequence)?Number(t.observedSequence):-1}:null}(A.predicateJson);if(e)try{let t=await this.commandOutputRows(A.externalKey,e.observedAttempt,e.observedSequence);if(!t.length)return;let r=t.at(-1);if(e.observedAttempt=r.attempt.attempt,e.observedSequence=r.sequence,"ONCE"===e.mode&&e.matched)return void await this.persistCommandMatches(A,e,[]);let i=await this.commandOutputRows(A.externalKey,e.scanAttempt-1,-1),n=new Map;for(let A of i){let t=A.attempt.attempt;t<e.scanAttempt||n.set(t,[...n.get(t)??[],A])}let a=[...n.keys()].sort((A,e)=>A-e),s=[],o=(0,g.f)(e.pattern,!0);for(let t=0;t<a.length;t+=1){let r,i=a[t],l=n.get(i),c="",d=new Map,g=[];for(let A of l){if("STDOUT"!==A.stream&&"STDERR"!==A.stream)continue;let e=d.get(A.stream)??new TextDecoder("utf-8",{fatal:!1});d.set(A.stream,e);let t=e.decode(Buffer.from(A.dataBase64,"base64"),{stream:!0}),r=c.length;c+=t,g.push({sequence:A.sequence,start:r,end:c.length})}let h=i===e.scanAttempt?Math.min(e.scanCharacterOffset,c.length):0,C=c.slice(h);if(Buffer.byteLength(C,"utf8")>u.R)throw Error("Command output matcher exceeded its 16 MiB unmatched-output limit");for(o.lastIndex=h;r=o.exec(c);){let t=r[0];if(!t.length)throw Error("Command output patterns must consume at least one character");let n=r.index,a=n+t.length,o=(A,e)=>{let t=g.find(({start:t,end:r})=>e?A>t&&A<=r:A>=t&&A<r)??g.at(-1);return{sequence:t.sequence,offset:Math.max(0,A-t.start)}};e.matchCount+=1;let l={ordinal:e.matchCount,text:t,captures:r.slice(1).map(A=>A??null),namedCaptures:Object.fromEntries(Object.entries(r.groups??{}).map(([A,e])=>[A,e??null])),commandRunId:A.externalKey,commandAttempt:i,start:o(n,!1),end:o(a,!0)};if(s.push(l),e.scanAttempt=i,e.scanCharacterOffset=a,"ONCE"===e.mode){e.matched=!0;break}}if(e.matched)break;let p=a[t+1];void 0!==p?(e.scanAttempt=p,e.scanCharacterOffset=0):i>e.scanAttempt&&(e.scanAttempt=i,e.scanCharacterOffset=0)}await this.persistCommandMatches(A,e,s)}catch(e){await this.failCommandMatchWait(A,e instanceof Error?e:Error(String(e)))}}async reconcileCommandOutputMatches(A){if(!this.commandsService)return;let e=await (0,o.U)();for(let t of(await e.workflowWait.findMany({where:{kind:"COMMAND_RUN",status:"PENDING",predicateJson:{not:null},...A?{externalKey:A}:{},run:{status:{in:[...J]}}},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100})))await this.processCommandMatchWait(t)}async tick(){if(!this.ticking){this.ticking=!0;try{await this.recoverExpiredClaims(),await this.processSchedules(),await this.processTriggerEvents(),await this.events.maintain(),await this.reconcileCommandOutputMatches(),await this.resolveDueWaits(),await this.startQueuedRuns();let A=await (0,o.U)();for(let{id:e}of(await A.workflowRun.findMany({where:{status:{in:["RUNNING","WAITING","PAUSING"]}},select:{id:!0},orderBy:{updatedAt:"asc"},take:100})))await this.progressRun(e);await this.dispatchReadyAttempts()}finally{this.ticking=!1}}}async recoverExpiredClaims(){let A=await (0,o.U)();for(let e of(await A.workflowStepAttempt.findMany({where:{status:"RUNNING",claimExpiresAt:{lt:new Date}},include:{run:!0},take:100})))await A.$transaction([A.workflowStepAttempt.update({where:{id:e.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}}),A.workflowRun.update({where:{id:e.runId},data:{status:"BLOCKED",phase:"RECOVERY_BLOCKED",blockedReason:`Step ${e.nodeId} needs recovery review`}}),A.workflowResourceLease.deleteMany({where:{attemptId:e.id}})]),await this.appendEvent(e.runId,e.id,"STEP_RECOVERY_BLOCKED","Step needs recovery review after its worker lease expired"),await this.notifyRun(e.runId,"WORKFLOW_RECOVERY_PAUSED","Workflow paused during recovery","An interrupted step requires external-state verification before replay.",`recovery:${e.id}`),At(e.runId)}async startQueuedRuns(){let A=await (0,o.U)();for(let e of(await A.workflowRun.findMany({where:{status:"QUEUED"},include:{workflow:!0,version:!0},orderBy:[{queuedAt:"asc"},{id:"asc"}],take:200}))){let t=(0,c.d)(L(e.version.definitionJson)),r=new Date,i=(0,C.H)((0,C.h)(e.sessionDataJson),"workflow.startedAt",r.toISOString());await A.$transaction(async A=>{let n="CONCURRENT"===e.workflow.overlapPolicy?e.workflow.maxConcurrentRuns:1;if(await A.workflowRun.count({where:{workflowId:e.workflowId,id:{not:e.id},...W(e.workflow.overlapScope,e.worktreeId),status:{in:v.filter(A=>"QUEUED"!==A)}}})>=n)return!1;if(e.worktreeId&&"EXCLUDED"!==e.worktreeConcurrency){await A.worktreeAdmissionLane.upsert({where:{worktreeId:e.worktreeId},create:{worktreeId:e.worktreeId},update:{updatedAt:r}}),await A.worktreeWorkflowLease.deleteMany({where:{worktreeId:e.worktreeId,workflowRun:{status:{in:[...T]}}}}),await A.worktreeRunLease.deleteMany({where:{worktreeId:e.worktreeId,purpose:{not:"ANSWER_REVISION"},run:{status:{in:["COMPLETED","FAILED","CANCELLED"]}}}});let t=await A.worktreeWorkflowLease.findUnique({where:{worktreeId:e.worktreeId}});if(t&&e.worktreeLeaseOwnerRunId!==t.workflowRunId)return await A.workflowRun.updateMany({where:{id:e.id,status:"QUEUED"},data:{phase:"WAITING_FOR_WORKTREE"}}),!1;if(!t){let t=await A.workflowRun.findFirst({where:{worktreeId:e.worktreeId,status:"QUEUED",parentRunId:null,worktreeConcurrency:"EXCLUSIVE"},orderBy:[{queuedAt:"asc"},{id:"asc"}],select:{id:!0,queuedAt:!0}});if(t&&t.id!==e.id&&function(A,e,t,r){let i=A.getTime()-t.getTime();return i<0||0===i&&e<r}(t.queuedAt,t.id,e.queuedAt,e.id))return await A.workflowRun.updateMany({where:{id:e.id,status:"QUEUED"},data:{phase:"WAITING_FOR_WORKTREE"}}),!1;if(e.worktreeLeaseOwnerRunId===e.id){let[t,r,i,n]=await Promise.all([A.worktreeRunLease.count({where:{worktreeId:e.worktreeId}}),A.workflowRun.count({where:{worktreeId:e.worktreeId,id:{not:e.id},worktreeConcurrency:{not:"EXCLUDED"},status:{in:v.filter(A=>"QUEUED"!==A)}}}),A.agentRun.findFirst({where:{worktreeId:e.worktreeId,origin:"MANAGED",status:"QUEUED",OR:[{createdAt:{lt:e.queuedAt}},{createdAt:e.queuedAt,id:{lt:e.id}}]},select:{id:!0}}),A.workflowRun.findFirst({where:{worktreeId:e.worktreeId,status:"QUEUED",id:{not:e.id},worktreeConcurrency:{not:"EXCLUDED"},OR:[{queuedAt:{lt:e.queuedAt}},{queuedAt:e.queuedAt,id:{lt:e.id}}]},select:{id:!0}})]);if(t||r||i||n)return await A.workflowRun.updateMany({where:{id:e.id,status:"QUEUED"},data:{phase:"WAITING_FOR_WORKTREE"}}),!1;await A.worktreeWorkflowLease.create({data:{worktreeId:e.worktreeId,workflowRunId:e.id}})}}}return!!(await A.workflowRun.updateMany({where:{id:e.id,status:"QUEUED"},data:{status:"RUNNING",phase:"SCHEDULING",startedAt:r,sessionDataJson:JSON.stringify(i),sessionRevision:{increment:1}}})).count&&(await A.workflowStepAttempt.count({where:{runId:e.id,generation:e.generation}})||await A.workflowStepAttempt.createMany({data:t.nodes.map(A=>({id:(0,a.randomUUID)(),runId:e.id,nodeId:A.id,kind:A.kind,generation:e.generation,iterationKey:"",attempt:0,requiredPathsJson:JSON.stringify(Ar(A)),providedPathsJson:JSON.stringify(Ai(A)),idempotencyKey:`${e.id}:${A.id}:${e.generation}::0`}))}),!0)})&&(e.startedAt||await this.appendEvent(e.id,null,"RUN_STARTED","Workflow started"),At(e.id))}}selectedTrigger(A,e){let t=A.trigger?.nodeId??e.triggers.find(({kind:e})=>e===A.triggerKind)?.id??null;if(!(0,d.j)(A.triggerKind))return{id:t,choice:null};let r=AA(L(A.triggerPayloadJson),"Trigger payload");return{id:t,choice:"string"==typeof r.choice?r.choice:null}}attemptOutput(A){if(!A.outputJson)return{};let e=L(A.outputJson);return e&&"object"==typeof e&&!Array.isArray(e)?e:{value:e}}edgeState(A,e,t,r){if(!r.has(A.source))return A.source!==e.id||e.choice&&A.sourceHandle!==e.choice?"INACTIVE":"ACTIVE";let i=t.get(A.source);if(!i||!U.has(i.status))return"PENDING";if(new Set(["SKIPPED","CANCELLED","SUPERSEDED"]).has(i.status))return"INACTIVE";let n=r.get(A.source);if("FAILED"===i.status)return"failure"===A.sourceHandle||"catch"===A.sourceHandle||"CONTINUE"===n.failurePolicy&&"success"===A.sourceHandle?"ACTIVE":"INACTIVE";let a=this.attemptOutput(i).selectedHandles;return a?.length?a.includes(A.sourceHandle)?"ACTIVE":"INACTIVE":"success"===A.sourceHandle||"output"===A.sourceHandle?"ACTIVE":"INACTIVE"}async progressRun(A){let e=await (0,o.U)(),t=await e.workflowRun.findUnique({where:{id:A},include:{version:!0,trigger:!0,attempts:!0,waits:!0}});if(!t||T.has(t.status))return;if("PAUSING"===t.status){await e.workflowStepAttempt.updateMany({where:{runId:A,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}});let r=new Set(["AGENT_JOB","BUILD","SKILL_RUN","WORKTREE_MOVE","GITHUB_CHECKS"]),i=new Set(t.waits.filter(({status:A,kind:e})=>"PENDING"===A&&r.has(e)).map(({attemptId:A})=>A));!t.attempts.some(({id:A,status:e})=>"RUNNING"===e||"WAITING"===e&&i.has(A))&&(await e.workflowRun.updateMany({where:{id:A,status:"PAUSING"},data:{status:"PAUSED",phase:"PAUSED",pausedAt:new Date}})).count&&(await this.appendEvent(A,null,"RUN_PAUSED","Workflow paused"),At(A));return}if(!new Set(["RUNNING","WAITING"]).has(t.status))return;let r=(0,c.d)(L(t.version.definitionJson)),i=new Map(r.nodes.map(A=>[A.id,A])),n=new Map;for(let A of r.edges)n.set(A.target,[...n.get(A.target)??[],A]);let a=!0;for(;a;){if(a=!1,!(t=await e.workflowRun.findUnique({where:{id:A},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=t.attempts.filter(({generation:A,supersededAt:e})=>A===t.generation&&!e),o=new Map;for(let A of s){let e=`${A.nodeId}:${A.iterationKey}`,t=o.get(e);(!t||t.attempt<A.attempt)&&o.set(e,A)}let l=new Map([...o.values()].filter(({iterationKey:A})=>!A).map(A=>[A.nodeId,A])),c=this.selectedTrigger(t,r);for(let A of r.nodes){let t=l.get(A.id);if(!t||"PENDING"!==t.status)continue;let s=r.nodes.find(e=>"CONTROL_FOR_EACH"===e.kind&&e.config.joinNodeId===A.id);if(s){let A=l.get(s.id);if(!A||!U.has(A.status)||[...o.values()].filter(({iterationKey:A})=>!!A).some(({status:A})=>!U.has(A)))continue;await e.workflowStepAttempt.update({where:{id:t.id},data:{status:"READY",phase:"ITERATIONS_JOINED"}}),a=!0;continue}let d=n.get(A.id)??[];if(!d.length)continue;let u=d.map(A=>this.edgeState(A,c,l,i)),g=u.filter(A=>"ACTIVE"===A).length,h=u.filter(A=>"PENDING"===A).length;("ANY"==("CONTROL_JOIN"===A.kind&&"ANY"===A.config.mode?"ANY":"ALL")?g>0:0===h&&g>0)?(await e.workflowStepAttempt.update({where:{id:t.id},data:{status:"READY",phase:"READY"}}),a=!0):0===h&&0===g&&(await e.workflowStepAttempt.update({where:{id:t.id},data:{status:"SKIPPED",phase:"INACTIVE_BRANCH",finishedAt:new Date}}),a=!0)}await this.progressIterationAttempts(r,t,c,i,n,o,l)&&(a=!0)}if(!(t=await e.workflowRun.findUnique({where:{id:A},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=new Map;for(let A of t.attempts.filter(({generation:A,supersededAt:e})=>A===t.generation&&!e)){let e=`${A.nodeId}:${A.iterationKey}`,t=s.get(e);(!t||t.attempt<A.attempt)&&s.set(e,A)}let l=[...s.values()],d=t.waits.some(({status:A})=>"PENDING"===A),u=l.some(({status:A})=>!U.has(A));if(d||u){let r=d?"WAITING":"RUNNING";t.status!==r&&(await e.workflowRun.updateMany({where:{id:A,status:{in:[...J]}},data:{status:r,phase:d?"WAITING":"SCHEDULING"}})).count&&At(A);return}let g=(0,c.d)(L(t.version.definitionJson)),h=l.find(A=>{if("FAILED"!==A.status)return!1;let e=g.nodes.find(({id:e})=>e===A.nodeId);return!!e&&"CONTINUE"!==e.failurePolicy&&!g.edges.some(A=>A.source===e.id&&new Set(["failure","catch"]).has(A.sourceHandle))});await this.finishRun(t,h?"FAILED":"SUCCEEDED",h?.error??null)}async finishRun(A,e,t){let r=await (0,o.U)();await r.$transaction(async r=>!!(await r.workflowRun.updateMany({where:{id:A.id,status:{in:[...J]}},data:{status:e,phase:e,error:t,finishedAt:new Date}})).count&&(await r.workflowResourceLease.deleteMany({where:{runId:A.id}}),await r.worktreeWorkflowLease.deleteMany({where:{workflowRunId:A.id}}),!0))&&(await this.appendEvent(A.id,null,`RUN_${e}`,"SUCCEEDED"===e?"Workflow completed":"Workflow failed",t?{error:t}:null),await this.resolveExternalWait("WORKFLOW_RUN",A.id,{status:e,runId:A.id},"FAILED"===e?t||"Sub-workflow failed":null),await this.events.record({kind:"WORKFLOW_FINISHED",subjectKey:A.workflowId,dedupeKey:`workflow-finished:${A.id}`,payload:{sessionData:(0,C.h)(A.sessionDataJson),run:{id:A.id,status:e},workflowCorrelation:{workflowId:A.workflowId,runId:A.id}}}),await this.notifyRun(A.id,"SUCCEEDED"===e?"WORKFLOW_COMPLETED":"WORKFLOW_FAILED","SUCCEEDED"===e?"Workflow completed":"Workflow failed",t||`Workflow run ${A.displayNumber} ${e.toLowerCase()}`,e.toLowerCase()),await this.promoteWorktreeAdmissions(A.worktreeId),At(A.id))}async dispatchReadyAttempts(){let A=await (0,o.U)(),e=Math.max(0,4-await A.workflowStepAttempt.count({where:{status:"RUNNING"}}));if(e)for(let t of(await A.workflowStepAttempt.findMany({where:{status:"READY",run:{status:{in:[...J]}}},orderBy:{createdAt:"asc"},take:2*e}))){if(e<=0)break;if(!(await A.workflowStepAttempt.updateMany({where:{id:t.id,status:"READY",run:{status:{in:[...J]}}},data:{status:"RUNNING",phase:"RUNNING",claimOwner:this.workerId,claimExpiresAt:new Date(Date.now()+3e5),startedAt:t.startedAt??new Date}})).count)continue;e-=1;let r=new AbortController;this.activeExecutions.set(t.id,r),this.executeAttempt(t.id,r.signal).catch(A=>{console.error(`Workflow attempt ${t.id} failed unexpectedly:`,A)}).finally(()=>{this.activeExecutions.delete(t.id)})}}async acquireResourceLease(A,e,t){let r=c.E.get(e.kind),i=null;if(r.mutatesWorktree){let A=(0,C.x)(t,"worktree.id")??(0,C.x)(t,"worktree.path")??(0,C.x)(t,"codebase.id");A&&(i=`git:${String(A)}`)}else if(e.kind.startsWith("BUILD_")){let A=(0,C.x)(t,"build.id");A&&(i=`build:${String(A)}`)}if(!i)return!0;let n=await (0,o.U)();await n.workflowResourceLease.deleteMany({where:{key:i,expiresAt:{lt:new Date}}});try{return await n.workflowResourceLease.create({data:{key:i,runId:A.runId,attemptId:A.id,expiresAt:new Date(Date.now()+3e5)}}),await n.workflowStepAttempt.update({where:{id:A.id},data:{resourceLockKey:i}}),!0}catch{return await n.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",claimOwner:null,claimExpiresAt:null}}),!1}}async executeAttempt(A,e){let t=await (0,o.U)(),r=await t.workflowStepAttempt.findUnique({where:{id:A},include:{run:{include:{version:!0}}}});if(!r||"RUNNING"!==r.status)return;let i=(0,c.d)(L(r.run.version.definitionJson)),n=i.nodes.find(({id:A})=>A===r.nodeId);if(!n)return void await this.failAttempt(r,null,Error("Workflow step definition is missing"));let a=(0,C.h)(r.run.sessionDataJson);r.iterationKey&&(a=await this.iterationSessionData(r.run,r,a));let s=Ar(n).filter(A=>!(0,C.E)(a,A));if(s.length){await t.$transaction([t.workflowStepAttempt.update({where:{id:r.id},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",error:`Missing required session data: ${s.join(", ")}`,claimOwner:null,claimExpiresAt:null}}),t.workflowRun.update({where:{id:r.runId},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",blockedReason:`Step ${n.name??n.id} needs ${s.join(", ")}`}}),t.workflowResourceLease.deleteMany({where:{attemptId:A}})]),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}`),At(r.runId);return}if(r.run.exclusiveWorktree&&x.has(n.kind))return void await this.failAttempt(r,n,Error("Exclusive workflows cannot run steps that create, delete, or move their worktree"));if(await t.workflowStepAttempt.update({where:{id:r.id},data:{inputJson:JSON.stringify(a)}}),await this.acquireResourceLease(r,n,a))try{let A,t={...n,config:(0,C.S)(n.config,a)};if(A=n.kind.startsWith("CONTROL_")||"HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind?await this.executeControl(r.run,r,t,a,i):await this.executor.execute({run:r.run,attempt:r,node:t,sessionData:a,signal:e}),e.aborted)throw Error("Workflow step was cancelled");A.wait?await this.parkAttempt(r,n,A):await this.completeAttempt(r,n,A)}catch(e){let A=e instanceof Error?e:Error(String(e));if(await this.holdForBusyCodebase(r,A))return;await this.failAttempt(r,n,A)}}async holdForBusyCodebase(A,e){if(!(0,m.D)(e))return!1;let t=A.startedAt??A.createdAt;if(Date.now()-t.getTime()>6e5)return!1;let r=await (0,o.U)();return!!(await r.workflowStepAttempt.updateMany({where:{id:A.id,status:"RUNNING",claimOwner:this.workerId},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",error:e.message,claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowResourceLease.deleteMany({where:{attemptId:A.id}}),await r.workflowRunEvent.findFirst({where:{attemptId:A.id,type:"STEP_WAITING_FOR_RESOURCE"},select:{id:!0}})||await this.appendEvent(A.runId,A.id,"STEP_WAITING_FOR_RESOURCE","Step is waiting for the codebase to become available",{error:e.message}),At(A.runId),!0)}async iterationSessionData(A,e,t){let r=await (0,o.U)(),i=await r.workflowStepAttempt.findMany({where:{runId:A.id,generation:e.generation,iterationKey:e.iterationKey,status:"SUCCEEDED"},orderBy:{finishedAt:"asc"}}),n=t;for(let A of(e.inputJson&&(n=(0,C.d)(n,AA(L(e.inputJson),"Iteration input"))),i)){let e=this.attemptOutput(A);e.sessionPatch&&(n=(0,C.d)(n,e.sessionPatch))}return n}async executeControl(A,e,t,r,i){switch(t.kind){case"CONTROL_IF":{let A=t.config.condition;if(!A)throw Error("If steps require a condition");let e=I(A,r);return{output:{matched:e},selectedHandles:[e?"true":"false"]}}case"CONTROL_JOIN":{let r=i.nodes.find(A=>"CONTROL_FOR_EACH"===A.kind&&A.config.joinNodeId===t.id);if(r){let t=await (0,o.U)(),i=await t.workflowStepAttempt.findMany({where:{runId:A.id,generation:e.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 t.workflowStepAttempt.count({where:{runId:A.id,generation:e.generation,iterationKey:{not:""}}}),failures:i.map(({nodeId:A,iterationKey:e,error:t})=>({nodeId:A,iterationKey:e,error:t}))}}}return{output:{joined:!0}}}case"CONTROL_TRY":return{output:{started:!0}};case"CONTROL_DELAY":{let A=Number(t.config.seconds??0);if(!Number.isFinite(A)||A<0||A>31536e3)throw Error("Delay must be between zero and 31,536,000 seconds");return{wait:{kind:"DELAY",resumeAfter:new Date(Date.now()+1e3*A)}}}case"CONTROL_WAIT_UNTIL":{let A=t.config.condition;if(!A)throw Error("Wait-until steps require a condition");if(I(A,r))return{output:{matched:!0}};let e=(0,E.G)(t.config,15);return{wait:{kind:"PREDICATE",predicate:{condition:A,cadenceSeconds:e},resumeAfter:new Date(Date.now()+1e3*e),timeoutAt:(0,E.I)(t.config)}}}case"CONTROL_SET_VARIABLE":{if("string"!=typeof t.config.path)throw Error("Set-variable steps require an output path");let A="string"==typeof t.config.script?await S(t.config.script,r):t.config.value;return{output:A,sessionPatch:(0,C.H)({},t.config.path,A)}}case"CONTROL_FOR_EACH":{let n=Array.isArray(t.config.items)?t.config.items:"string"==typeof t.config.listPath?(0,C.x)(r,t.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(A,e,t,i,n),{output:{itemCount:n.length},selectedHandles:n.length?["body"]:["empty"],sessionPatch:(0,C.H)({},`steps.${t.id}.items`,n)}}case"CONTROL_SUBWORKFLOW":return this.startSubworkflow(A,e,t,r);case"HUMAN_CONFIRM":case"HUMAN_CHOICE":return this.createHumanQuestion(A,e,t);default:throw Error(`Unsupported control step ${t.kind}`)}}async progressIterationAttempts(A,e,t,r,i,n,a){let s=await (0,o.U)(),l=!1;for(let A of new Set([...n.values()].map(({iterationKey:A})=>A).filter(Boolean))){let e=new Map(a);for(let t of n.values())t.iterationKey===A&&e.set(t.nodeId,t);for(let n of e.values()){if(n.iterationKey!==A||"PENDING"!==n.status)continue;let a=r.get(n.nodeId);if(!a)continue;let o=(i.get(a.id)??[]).map(A=>this.edgeState(A,t,e,r)),c=o.filter(A=>"ACTIVE"===A).length,d=o.filter(A=>"PENDING"===A).length;("ANY"==("CONTROL_JOIN"===a.kind&&"ANY"===a.config.mode?"ANY":"ALL")?c>0:0===d&&c>0)?(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"READY",phase:"ITERATION_READY"}}),l=!0):0===d&&0===c&&(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"SKIPPED",phase:"INACTIVE_ITERATION_BRANCH",finishedAt:new Date}}),l=!0)}}return l}async spawnForEach(A,e,t,r,i){let n="string"==typeof t.config.joinNodeId?t.config.joinNodeId:null,s=r.nodes.find(({id:A})=>A===n);if(!s||"CONTROL_JOIN"!==s.kind)throw Error("For-each steps require an explicit joinNodeId");let l=new Map;for(let A of r.edges)l.set(A.source,[...l.get(A.source)??[],A]);let c=(l.get(t.id)??[]).filter(({sourceHandle:A})=>"body"===A).map(({target:A})=>A),d=new Set;for(;c.length;){let A=c.shift();A===n||d.has(A)||(d.add(A),c.push(...(l.get(A)??[]).map(({target:A})=>A)))}if(i.length&&!d.size)throw Error("For-each body is not connected to its body handle");let u=r.nodes.filter(({id:A})=>d.has(A)),g=await (0,o.U)();await g.$transaction(async r=>{await r.workflowStepAttempt.updateMany({where:{runId:A.id,generation:e.generation,iterationKey:e.iterationKey,nodeId:{in:[...d]},status:"PENDING"},data:{status:"SKIPPED",phase:"ITERATION_TEMPLATE",finishedAt:new Date}}),i.length&&u.length&&await r.workflowStepAttempt.createMany({data:i.flatMap((r,i)=>{let n=e.iterationKey?`${e.iterationKey}.${i}`:String(i),s=JSON.stringify({loop:{current:{forEachNodeId:t.id,index:i,item:r},[t.id]:{index:i,item:r}}});return u.map(t=>({id:(0,a.randomUUID)(),runId:A.id,nodeId:t.id,kind:t.kind,generation:e.generation,iterationKey:n,attempt:0,status:"PENDING",phase:"ITERATION_PENDING",inputJson:s,requiredPathsJson:JSON.stringify(Ar(t)),providedPathsJson:JSON.stringify(Ai(t)),idempotencyKey:`${A.id}:${t.id}:${e.generation}:${n}:0`}))})})})}async startSubworkflow(A,e,t,r){let i="string"==typeof t.config.versionId?t.config.versionId:null;if(!i)throw Error("Sub-workflow version is required");let n=await (0,o.U)(),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=A,l=0;for(;s;){if(s.workflowId===a.workflowId)throw Error("Recursive sub-workflow invocation is not allowed");if((l+=1)>=10)throw Error("Sub-workflow depth is limited to 10");s=s.parentRunId?await n.workflowRun.findUnique({where:{id:s.parentRunId}}):null}let c={};if(t.config.inputMapping&&"object"==typeof t.config.inputMapping)for(let[A,e]of Object.entries(t.config.inputMapping))c=(0,C.H)(c,A,(0,C.S)(e,r));let d=await this.createRunForTrigger({...a.workflow,activeVersion:a},a,null,null,"SUBWORKFLOW",A.id,{sessionData:c,parentRunId:A.id},`${e.id}:subworkflow:${a.id}`,A.id);return At(d.id),{output:{childRunId:d.id},links:[{kind:"WORKFLOW_RUN",resourceId:d.id,label:`Workflow run #${d.displayNumber}`,url:`/dashboard/workflows/runs/${d.id}`}],wait:{kind:"WORKFLOW_RUN",externalKey:d.id,resumeAfter:(0,E.P)(t.config),timeoutAt:(0,E.I)(t.config)}}}async createHumanQuestion(A,e,t){let r=Array.isArray(t.config.questions)?t.config.questions:[{header:t.name??null,prompt:"string"==typeof t.config.prompt?t.config.prompt:"HUMAN_CONFIRM"===t.kind?"Continue this workflow?":"Choose an option",multiSelect:!!t.config.multiSelect,allowCustom:"HUMAN_CONFIRM"!==t.kind&&!1!==t.config.allowCustom,options:"HUMAN_CONFIRM"===t.kind?[{label:"Confirm",description:null},{label:"Cancel",description:null}]:Array.isArray(t.config.options)?t.config.options:[]}];if(!r.length||r.length>10)throw Error("Workflow questions must contain between one and ten questions");let i=await (0,o.U)(),n=(0,a.randomUUID)();return await i.runQuestionBatch.create({data:{id:n,workflowStepAttemptId:e.id,nativeRequestId:`workflow:${e.id}`,questions:{create:r.map((A,e)=>{let t=AA(A,"Workflow question"),r=Array.isArray(t.options)?t.options:[];return{id:(0,a.randomUUID)(),position:e,header:"string"==typeof t.header?t.header:null,prompt:Y(String(t.prompt??""),"Question prompt",1e4),multiSelect:!!t.multiSelect,allowCustom:!1!==t.allowCustom,options:{create:r.map((A,e)=>{let t=AA(A,"Question option");return{id:(0,a.randomUUID)(),position:e,label:Y(String(t.label??""),"Option label",500),description:"string"==typeof t.description?t.description.slice(0,2e3):null}})}}})}}}),y._H.publish(H(A.id),{workflowQuestionChanged:{id:n,runId:A.id}}),{output:{questionBatchId:n},wait:{kind:"HUMAN",externalKey:n,timeoutAt:(0,E.I)(t.config)}}}async parkAttempt(A,e,t){let r=t.wait;if(!r)throw Error("Workflow wait is missing");let i=await (0,o.U)(),n=(0,a.randomUUID)();if(await i.$transaction(async i=>{let s=await i.workflowRun.findUnique({where:{id:A.runId}});if(!s||T.has(s.status))return!1;let o=(0,C.h)(s.sessionDataJson??"{}"),l=!A.iterationKey&&("SAVED_COMMAND"===e.kind||"CUSTOM_COMMAND"===e.kind);l&&t.sessionPatch&&(o=(0,C.d)(o,t.sessionPatch)),G(s,o);let c=JSON.stringify(o);return X(c,"Workflow session data",2097152),!!(await i.workflowStepAttempt.updateMany({where:{id:A.id,status:"RUNNING"},data:{status:"WAITING",phase:r.kind,outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:l?void 0:t.sessionPatch}),claimOwner:null,claimExpiresAt:null}})).count&&(await i.workflowWait.create({data:{id:n,runId:A.runId,attemptId:A.id,kind:r.kind,predicateJson:r.predicate?JSON.stringify(r.predicate):null,externalKey:r.externalKey??null,resumeAfter:r.resumeAfter??null,timeoutAt:r.timeoutAt??null}}),t.links?.length&&await i.workflowRunResourceLink.createMany({data:t.links.map(e=>({id:(0,a.randomUUID)(),runId:A.runId,attemptId:A.id,kind:e.kind.toUpperCase(),resourceId:e.resourceId,label:e.label??null,url:e.url??null,metadataJson:e.metadata?JSON.stringify(e.metadata):null}))}),await i.workflowRun.updateMany({where:{id:A.runId,status:{in:[...J]}},data:{status:"WAITING",phase:r.kind,sessionDataJson:c,sessionRevision:{increment:1}}}),await i.workflowResourceLease.deleteMany({where:{attemptId:A.id}}),!0)})){let t,i;await this.appendEvent(A.runId,A.id,"STEP_WAITING",(t=e.name??e.id,i=(0,E.D)(r.kind),"DELAY"===r.kind&&r.resumeAfter?`Step ${t} is waiting for ${i} until ${r.resumeAfter.toISOString()}`:`Step ${t} is waiting for ${i}`),{waitId:n,kind:r.kind,nodeId:e.id,externalKey:r.externalKey??null,resumeAfter:r.resumeAfter?.toISOString()??null,timeoutAt:r.timeoutAt?.toISOString()??null}),At(A.runId)}}async completeAttempt(A,e,t,r){let i=await (0,o.U)();if(await i.$transaction(async r=>{let i=await r.workflowRun.findUnique({where:{id:A.runId}});if(!i)throw Error("Workflow run disappeared");if(T.has(i.status))return!1;let n=(0,C.h)(i.sessionDataJson);if(A.iterationKey)n=(0,C.H)(n,`steps.${e.id}.iterations.${A.iterationKey.replaceAll(".","_")}`,{status:"SUCCEEDED",output:t.output??null,data:t.sessionPatch??null});else{t.sessionPatch&&(n=(0,C.d)(n,t.sessionPatch));let A=`steps.${e.id}`,r=_((0,C.x)(n,A));n=(0,C.H)(n,A,{...r,status:"SUCCEEDED",output:t.output??null,snapshotId:t.links?.find(({kind:A})=>"CHECKPOINT"===A)?.resourceId??null})}G(i,n);let s=JSON.stringify(n);return X(s,"Workflow session data",2097152),!!(await r.workflowStepAttempt.updateMany({where:{id:A.id,status:{in:["RUNNING","WAITING"]}},data:{status:"SUCCEEDED",phase:"SUCCEEDED",outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:t.sessionPatch}),error:null,finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(t.links?.length&&await r.workflowRunResourceLink.createMany({data:t.links.map(e=>({id:(0,a.randomUUID)(),runId:A.runId,attemptId:A.id,kind:e.kind.toUpperCase(),resourceId:e.resourceId,label:e.label??null,url:e.url??null,metadataJson:e.metadata?JSON.stringify(e.metadata):null}))}),await r.workflowRun.update({where:{id:A.runId},data:{sessionDataJson:s,sessionRevision:{increment:1}}}),await r.workflowRun.updateMany({where:{id:A.runId,status:{in:[...J]}},data:{status:"RUNNING",phase:"SCHEDULING"}}),await r.workflowResourceLease.deleteMany({where:{attemptId:A.id}}),!0)})){if(r)try{await r()}catch(e){console.error(`Failed to append completion diagnostics for workflow attempt ${A.id}:`,e)}await this.appendEvent(A.runId,A.id,"STEP_SUCCEEDED",`Step ${e.name??e.id} completed`),At(A.runId)}}async failAttempt(A,e,t,r={}){let i=await (0,o.U)(),n=e??(await i.workflowRun.findUnique({where:{id:A.runId},include:{version:!0}}))?.version.definitionJson,s="string"==typeof n?(0,c.d)(L(n)).nodes.find(({id:e})=>e===A.nodeId)??null:n,l=s?.retry,d=!!(l&&A.attempt+1<l.maxAttempts),u=l?Math.min(86400,"EXPONENTIAL"===l.strategy?l.delaySeconds*2**A.attempt:l.delaySeconds):0;await i.$transaction(async e=>{let i=await e.workflowRun.findUnique({where:{id:A.runId}});if(!i||T.has(i.status))return!1;let n=(0,C.h)(i.sessionDataJson);if(!A.iterationKey){r.sessionPatch&&(n=(0,C.d)(n,r.sessionPatch));let e=`steps.${A.nodeId}`,i=_((0,C.x)(n,e));n=(0,C.H)(n,e,{...i,status:"FAILED",error:t.message,...void 0!==r.output?{output:r.output}:{}})}G(i,n);let s=JSON.stringify(n);return X(s,"Workflow session data",2097152),!!(await e.workflowStepAttempt.updateMany({where:{id:A.id,status:{in:["RUNNING","WAITING"]}},data:{status:"FAILED",phase:d?"RETRY_SCHEDULED":"FAILED",error:t.message.slice(0,2e4),finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(d&&await e.workflowWait.create({data:{id:(0,a.randomUUID)(),runId:A.runId,attemptId:A.id,kind:"RETRY",resumeAfter:new Date(Date.now()+1e3*u)}}),await e.workflowRun.update({where:{id:A.runId},data:{sessionDataJson:s,sessionRevision:{increment:1}}}),await e.workflowRun.updateMany({where:{id:A.runId,status:{in:[...J]}},data:{status:d?"WAITING":"RUNNING",phase:d?"RETRY_WAIT":"SCHEDULING"}}),await e.workflowResourceLease.deleteMany({where:{attemptId:A.id}}),!0)})&&(await this.appendEvent(A.runId,A.id,d?"STEP_RETRY_SCHEDULED":"STEP_FAILED",d?`Step failed and will retry in ${u} seconds`:`Step failed: ${t.message}`,{error:t.message,retry:d}),At(A.runId))}async resolveDueWaits(){let A=await (0,o.U)(),e=new Date,t=(e,t)=>A.workflowWait.updateMany({where:{id:e,status:"PENDING",run:{status:{in:[...J]}}},data:t});for(let r of(await A.workflowWait.findMany({where:{status:"PENDING",run:{status:{in:[...J]}},OR:[{resumeAfter:{lte:e}},{timeoutAt:{lte:e}}]},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100}))){if(r.timeoutAt&&r.timeoutAt<=e&&"RETRY"!==r.kind&&"DELAY"!==r.kind){if(!(await t(r.id,{status:"TIMED_OUT",resolvedAt:e})).count)continue;await this.failAttempt(r.attempt,(0,c.d)(L(r.attempt.run.version.definitionJson)).nodes.find(({id:A})=>A===r.attempt.nodeId)??null,Error("Workflow wait timed out"));continue}if("RETRY"===r.kind){let t=r.attempt.attempt+1;await A.$transaction(async A=>{if(!(await A.workflowWait.updateMany({where:{id:r.id,status:"PENDING",run:{status:{in:[...J]}}},data:{status:"RESOLVED",resolvedAt:e}})).count)return!1;if(await A.workflowStepAttempt.create({data:{id:(0,a.randomUUID)(),runId:r.runId,nodeId:r.attempt.nodeId,kind:r.attempt.kind,generation:r.attempt.generation,iterationKey:r.attempt.iterationKey,attempt:t,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}:${t}`,replayedFromId:r.attempt.id}}),!(await A.workflowRun.updateMany({where:{id:r.runId,status:{in:[...J]}},data:{status:"RUNNING",phase:"SCHEDULING"}})).count)throw Error("Workflow lifecycle changed while resuming retry");return!0})&&At(r.runId)}else if("DELAY"===r.kind){if(!(await t(r.id,{status:"RESOLVED",resolvedAt:e})).count)continue;await this.completeWaitingAttempt(r.attemptId,{delayed:!0},"TIMER")}else if("PREDICATE"===r.kind){let A=r.predicateJson?AA(L(r.predicateJson),"Wait predicate"):{},i=A.condition,n=(0,C.h)(r.attempt.run.sessionDataJson);if(i&&I(i,n)){if(!(await t(r.id,{status:"RESOLVED",resultJson:JSON.stringify({matched:!0}),resolvedAt:e})).count)continue;await this.completeWaitingAttempt(r.attemptId,{matched:!0},"POLL")}else{let e=Math.max(1,Number(A.cadenceSeconds??15));await t(r.id,{resumeAfter:new Date(Date.now()+1e3*e)})}}else if(r.externalKey&&this.waitPollers.has(r.kind)){let A=await this.waitPollers.get(r.kind)(r.externalKey);if("COMMAND_RUN"!==r.kind||A.pending||await this.reconcileCommandOutputMatches(r.externalKey),A.pending){let e=(0,c.d)(L(r.attempt.run.version.definitionJson)).nodes.find(({id:A})=>A===r.attempt.nodeId)?.config??{};await t(r.id,{resumeAfter:new Date(Date.now()+1e3*(0,E.G)(e,A.pollAfterSeconds??15))})}else{if(!(await t(r.id,{status:A.error?"FAILED":"RESOLVED",resultJson:JSON.stringify(A.result??{}),resolvedAt:new Date})).count)continue;if(A.error){let e=(0,c.d)(L(r.attempt.run.version.definitionJson)).nodes.find(({id:A})=>A===r.attempt.nodeId),t=this.attemptOutput(r.attempt),i=_(A.result),n=i.sessionPatch&&"object"==typeof i.sessionPatch&&!Array.isArray(i.sessionPatch)?(0,C.d)(t.sessionPatch??{},i.sessionPatch):t.sessionPatch;await this.failAttempt(r.attempt,e??null,Error(A.error),{output:A.result??t.value,sessionPatch:n})}else await this.completeWaitingAttempt(r.attemptId,A.result??{},"POLL")}}}}async completeWaitingAttempt(A,e,t="PUSH"){let r=await (0,o.U)(),i=await r.workflowStepAttempt.findUnique({where:{id:A},include:{run:{include:{version:!0}}}});if(!i||"WAITING"!==i.status)return;let n=(0,c.d)(L(i.run.version.definitionJson)).nodes.find(({id:A})=>A===i.nodeId);if(!n)throw Error("Workflow step definition is missing");let a=this.attemptOutput(i),s=a.sessionPatch;if("TERMINAL_RUN"===n.kind&&e&&"object"==typeof e&&!Array.isArray(e)&&e.sessionData&&"object"==typeof e.sessionData&&!Array.isArray(e.sessionData)){let A=structuredClone(e.sessionData),t=(0,C.x)((0,C.h)(i.run.sessionDataJson),"workflow");s=t?(0,C.H)(A,"workflow",t):A}e&&"object"==typeof e&&!Array.isArray(e)&&e.sessionPatch&&"object"==typeof e.sessionPatch&&!Array.isArray(e.sessionPatch)&&(s=(0,C.d)(s??{},e.sessionPatch)),n.kind.startsWith("RUN_")&&e&&"object"==typeof e&&!Array.isArray(e)&&(s=(0,C.d)(s??{},(0,C.H)({},`run.${n.id}`,e))),"BUILD_START"===n.kind&&e&&"object"==typeof e&&!Array.isArray(e)&&(s=(0,C.d)(s??{},(0,C.H)({},"build",e))),"WORKTREE_WAIT_PUSH_READY"===n.kind&&e&&"object"==typeof e&&!Array.isArray(e)&&(s=(0,C.d)(s??{},(0,C.H)({},"worktree",{id:e.id,pushStatus:e.pushStatus}))),"SKILL_APPLY"===n.kind&&e&&"object"==typeof e&&!Array.isArray(e)&&(s=(0,C.d)(s??{},(0,C.H)({},`steps.${n.id}`,e))),("HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind)&&(s=(0,C.d)(s??{},(0,C.H)({},`steps.${n.id}.answer`,e)));try{await this.completeAttempt(i,n,{output:e??a.value,selectedHandles:a.selectedHandles,sessionPatch:s},()=>this.appendWaitResolvedEvent(i,n,t))}catch(A){await this.failAttempt(i,n,A instanceof Error?A:Error(String(A)))}}async resolveExternalWait(A,e,t,r=null){let i=await (0,o.U)(),n=await i.workflowWait.findMany({where:{kind:A,externalKey:e,status:"PENDING"},include:{attempt:{include:{run:{include:{version:!0}}}}}});for(let A of n)if(await i.workflowWait.update({where:{id:A.id},data:{status:r?"FAILED":"RESOLVED",resultJson:JSON.stringify(t),resolvedAt:new Date}}),r){let e=(0,c.d)(L(A.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===A.attempt.nodeId);await this.failAttempt(A.attempt,e??null,Error(r))}else await this.completeWaitingAttempt(A.attemptId,t,"PUSH");return n.length}descendants(A,e){let t=new Map;for(let e of A.edges)t.set(e.source,[...t.get(e.source)??[],e.target]);let r=new Set([e]),i=[e];for(;i.length;){let A=i.shift();for(let e of t.get(A)??[])r.has(e)||(r.add(e),i.push(e))}return[...r]}async prepareReplay(A,e){let t=await (0,o.U)(),r=await t.workflowRun.findUnique({where:{id:A},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=(0,c.d)(L(r.version.definitionJson));if(!i.nodes.some(({id:A})=>A===e))throw Error("Workflow step not found");let n=this.descendants(i,e),a=r.attempts.filter(({generation:A,nodeId:e})=>A===r.generation&&n.includes(e)),s=a.filter(A=>A.nodeId===e).sort((A,e)=>e.attempt-A.attempt)[0],l=s?.checkpoints.slice().sort((A,e)=>A.createdAt.getTime()-e.createdAt.getTime())[0],d=a.flatMap(A=>A.resourceLinks.filter(({kind:A})=>"CHECKPOINT"!==A).map(({kind:A,resourceId:e,label:t,url:r})=>({kind:A,resourceId:e,label:t,url:r}))),u=null,g=null;if(l&&this.agentControl)try{u=await this.compareCheckpointWithAgent(l.id)}catch(A){g=`Git comparison unavailable: ${A instanceof Error?A.message:String(A)}`}return{runId:A,nodeId:e,affectedNodeIds:n,affectedAttemptIds:a.map(({id:A})=>A),externalEffects:d,checkpointId:l?.id??null,gitComparison:u,warning:[d.length?"External Jira, GitHub, build, deployment, and notification effects will not be undone.":null,g].filter(Boolean).join(" ")||null}}async replay(A,e,t={}){let r=await this.prepareReplay(A,e);if(t.restore){if(!r.checkpointId)throw Error("No restorable Git checkpoint is available for this step");this.checkpointRestorer?await this.checkpointRestorer(r.checkpointId,{stash:!!t.stash}):await this.restoreCheckpointWithAgent(r.checkpointId,{stash:!!t.stash})}let i=await (0,o.U)(),n=await i.workflowRun.findUnique({where:{id:A},include:{version:!0,attempts:!0}});if(!n)throw Error("Workflow run not found");let s=(0,c.d)(L(n.version.definitionJson)),l=n.attempts.filter(A=>A.generation===n.generation&&A.nodeId===e).sort((A,e)=>e.attempt-A.attempt)[0];if(!l)throw Error("Selected step has no execution history");let d=l.inputJson?AA(L(l.inputJson),"Step input snapshot"):(0,C.h)(n.sessionDataJson),u=n.generation+1,g=new Map;for(let A of n.attempts.filter(({generation:A,iterationKey:e})=>A===n.generation&&!e)){let e=g.get(A.nodeId);(!e||e.attempt<A.attempt)&&g.set(A.nodeId,A)}let h=(0,C.H)(d,"workflow.replay",{generation:u,fromNodeId:e,replayedAt:new Date().toISOString()});return G(n,h),await i.$transaction(async e=>{await e.workflowStepAttempt.updateMany({where:{runId:A,generation:n.generation,nodeId:{in:r.affectedNodeIds},supersededAt:null},data:{supersededAt:new Date}}),await e.workflowStepAttempt.createMany({data:s.nodes.map(e=>{let t=r.affectedNodeIds.includes(e.id),i=g.get(e.id);return{id:(0,a.randomUUID)(),runId:A,nodeId:e.id,kind:e.kind,generation:u,iterationKey:"",attempt:0,status:t?"PENDING":i?.status==="SKIPPED"?"SKIPPED":"SUCCEEDED",phase:t?"REPLAY_PENDING":"REUSED_FROM_PRIOR_GENERATION",inputJson:t?null:i?.inputJson,outputJson:t?null:i?.outputJson,error:null,startedAt:t?null:i?.startedAt,finishedAt:t?null:new Date,requiredPathsJson:JSON.stringify(Ar(e)),providedPathsJson:JSON.stringify(Ai(e)),idempotencyKey:`${A}:${e.id}:${u}::0`,replayedFromId:i?.id??null}})}),await e.workflowWait.updateMany({where:{runId:A,status:"PENDING"},data:{status:"SUPERSEDED",resolvedAt:new Date}}),await e.workflowRun.update({where:{id:A},data:{generation:u,sessionDataJson:JSON.stringify(h),sessionRevision:{increment:1},status:n.worktreeId?"QUEUED":"RUNNING",phase:n.worktreeId?"WAITING_FOR_WORKTREE":"REPLAYING",queuedAt:n.worktreeId?new Date:n.queuedAt,blockedReason:null,error:null,pausedAt:null,finishedAt:null}})}),await this.appendEvent(A,null,"RUN_REPLAYED",`Replaying from step ${e}`,{generation:u,affectedNodeIds:r.affectedNodeIds}),n.worktreeId&&await this.startQueuedRuns(),At(A),this.run(A)}async appendWaitResolvedEvent(A,e,t){let r=await (0,o.U)(),i=await r.workflowWait.findFirst({where:{attemptId:A.id},orderBy:{createdAt:"desc"}});if(!i)return;let n=Math.max(0,(i.resolvedAt??new Date).getTime()-i.createdAt.getTime());await this.appendEvent(A.runId,A.id,"STEP_WAIT_RESOLVED",`Step ${e.name??e.id} resumed after waiting ${(0,E.h)(n)} for ${(0,E.D)(i.kind)}`,{waitId:i.id,kind:i.kind,nodeId:e.id,externalKey:i.externalKey,waitedMs:n,resolvedBy:t})}async appendEvent(A,e,t,r,i=null){let n=await (0,o.U)(),s=await n.$transaction(async n=>{let s=await n.workflowRunEvent.findFirst({where:{runId:A},orderBy:{sequence:"desc"},select:{sequence:!0}});return n.workflowRunEvent.create({data:{id:(0,a.randomUUID)(),runId:A,attemptId:e,sequence:(s?.sequence??-1)+1,type:t,message:r.slice(0,2e4),detailJson:i?JSON.stringify(i):null}})});return y._H.publish(N(A),{workflowRunEventAdded:s}),s}subscribeChanges(A={}){let t=y._H.iterate(M);return(0,n.G)(t,async({workflowChanged:t})=>{if("runs"!==t.id)return!A.workflowId||t.id===A.workflowId;if(!t.runId||!A.workflowId&&!A.resourceId)return!0;let r=await (0,o.U)(),i=await r.workflowRun.findUnique({where:{id:t.runId},select:{worktreeId:!0,workflowId:!0,...A.resourceId?{resourceLinks:{where:{kind:A.resourceKind?.trim().toUpperCase(),resourceId:A.resourceId.trim()},select:{id:!0},take:1}}:{}}});return!i||(!A.workflowId||i.workflowId===A.workflowId||!!(A.includeQueuePeers&&await (0,e.f)(A.workflowId,i.worktreeId)))&&(!A.resourceId||!!i.resourceLinks?.length)})}subscribeWorkflows(){return y._H.iterate(M)}subscribeRun(A){return y._H.iterate(O(A))}subscribeRunEvents(A){return y._H.iterate(N(A))}subscribeRunQuestions(A){return y._H.iterate(H(A))}}],90615)},741193,A=>{A.i(520962),A.i(374421),A.s([])},251063,A=>{var e=A.i(135475);function t(A){return A?JSON.parse(A):null}function r(A){return t(A)?.targets.flatMap(A=>A.result?[A.result]:[])??[]}async function i(A,i){if(!A?.branch)return null;let n=t(i),a=n?.sourceBranch===A.branch&&n.origin===A.codebase.repository.canonicalOrigin?n:null,s=a?.destinationBaseBranch??A.baseBranchOverride??A.codebase.defaultBranch??null,o=!1;try{let e=JSON.parse(A.codebase.remoteBranchesJson??"[]");o=Array.isArray(e)&&e.includes(s)}catch{}let l=await (0,e.U)(),c=await l.worktree.findMany({where:{id:{not:A.id},missingAt:null,codebase:{repository:{canonicalOrigin:A.codebase.repository.canonicalOrigin}},OR:[{baseBranchOverride:A.branch},{baseBranchOverride:null,codebase:{defaultBranch:A.branch}}]},include:{codebase:{include:{agent:!0}}},orderBy:[{folder:"asc"},{id:"asc"}]});return{destinationBaseBranch:s,worktrees:c.map(e=>({id:e.id,branch:e.branch,folder:e.folder,agentName:e.codebase.agent.name,baseBranch:e.baseBranchOverride??e.codebase.defaultBranch,canUpdate:!!(o&&s&&s!==A.branch&&s!==e.branch)})),selectedWorktreeIds:a?.targets.filter(e=>o&&s!==A.branch&&c.some(A=>A.id===e.id&&A.codebaseId===e.codebaseId&&A.branch===e.branch&&A.branch!==s)).map(A=>A.id)??[],results:r(i)}}async function n(A,t,r){if(!t?.worktreeIds.length)return null;let n=await (0,e.U)(),a=A?await n.worktree.findFirst({where:{id:A,missingAt:null},include:{codebase:{include:{repository:!0}}}}):null;if(!a?.branch)throw Error("A matching source worktree is required for base updates");let s=await i(a,r);if(!s?.destinationBaseBranch||s.destinationBaseBranch!==t.destinationBaseBranch)throw Error("The destination base branch changed; refresh merge options and try again");let o=[...new Set(t.worktreeIds)];if(o.some(A=>!s.worktrees.some(e=>e.id===A&&e.canUpdate)))throw Error("A selected worktree no longer targets this branch; refresh merge options and try again");let l=await n.worktree.findMany({where:{id:{in:o}},include:{codebase:{include:{repository:!0}}}});if(l.length!==o.length||l.some(A=>A.missingAt||A.codebase.repository.canonicalOrigin!==a.codebase.repository.canonicalOrigin||(A.baseBranchOverride??A.codebase.defaultBranch)!==a.branch||A.branch===t.destinationBaseBranch))throw Error("A selected worktree changed; refresh merge options and try again");return JSON.stringify({origin:a.codebase.repository.canonicalOrigin,sourceBranch:a.branch,destinationBaseBranch:t.destinationBaseBranch,targets:l.map(A=>({id:A.id,codebaseId:A.codebaseId,branch:A.branch,baseBranch:a.branch,folder:A.folder}))})}async function a(A,r,i){let n=await (0,e.U)(),a=await n.$transaction(async e=>{let i="GITHUB"===A.provider?await e.worktreeAutoMerge.findUnique({where:{worktreeId:A.id}}):await e.gitLabMergeOperation.findUnique({where:{id:A.id}}),n=t(i?.baseBranchUpdatesJson);if(!n)return[];if(n.origin.toLowerCase()!==r.origin.toLowerCase()||n.sourceBranch!==r.branch)throw Error("The merged source does not match the reviewed base updates");let a=[];for(let A of n.targets){if(A.result)continue;let t=await e.worktree.findUnique({where:{id:A.id},include:{codebase:{include:{repository:!0}}}}),r=t?t.baseBranchOverride??t.codebase.defaultBranch:null,i=t&&!t.missingAt&&t.codebaseId===A.codebaseId&&t.branch===A.branch&&t.codebase.repository.canonicalOrigin===n.origin,s="SKIPPED",o="Worktree was removed or its repository, branch, or base changed";i&&r===n.destinationBaseBranch?(s="ALREADY_UPDATED",o=null):i&&r===A.baseBranch&&t.branch!==n.destinationBaseBranch&&(await e.worktree.update({where:{id:A.id},data:{baseBranchOverride:n.destinationBaseBranch}}),a.push({id:A.id,codebaseId:A.codebaseId}),s="UPDATED",o=null),A.result={worktreeId:A.id,folder:A.folder,status:s,reason:o}}let s={baseBranchUpdatesJson:JSON.stringify(n)};return"GITHUB"===A.provider?await e.worktreeAutoMerge.update({where:{worktreeId:A.id},data:s}):await e.gitLabMergeOperation.update({where:{id:A.id},data:s}),a});await Promise.all(a.map(A=>i.refreshBaseBranchWatch(A.id,A.codebaseId)))}A.s(["B",0,r,"V",0,a,"o",0,i,"f",0,n])},121e3,A=>{var e=A.i(666680),t=A.i(380592),r=A.i(135475),i=A.i(454228);let n=["COMPLETED","CANCELED"],a=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]),s=new Map;function o(A){let e=A instanceof Error?A.message:String(A),t=A?.statusCode??A?.status;return(0,i.D)(A)||/offline|busy|another operation|active job|temporar|fetch failed|ECONN|network|rate limit|timeout|timed out/i.test(e)||429===t||!!(t&&t>=500)}class l extends Error{}async function c(A,e){let t,r=s.get(A)??Promise.resolve(),i=new Promise(A=>{t=A});s.set(A,i),await r;try{return await e()}finally{t(),s.get(A)===i&&s.delete(A)}}function d(A){let e=JSON.parse(A??"null");if(!e||1!==e.version||!e.headSha||!e.sourceOrigin||!e.targetOrigin||!e.targetBranch||!e.agentId||!e.gitDirectory)throw Error("The saved branch sync is invalid. Review and enable Auto Merge again.");return e}async function u(A){return(await (0,r.U)()).worktree.findUnique({where:{id:A},include:{codebase:{include:{agent:!0,repository:!0}}}})}async function g(A){let e;if(!A)return"Link a matching worktree to automatically sync this branch.";let r=await u(A);if(!r||r.missingAt||"AVAILABLE"!==r.availability)return"The linked worktree is unavailable.";try{e=JSON.parse(r.codebase.agent.capabilitiesJson)}catch{e=[]}return Array.isArray(e)&&e.includes(t.f)?null:"Update the agent to use Auto Merge branch syncing."}async function h(A,e){let t=await (0,r.U)(),[i,a]=await Promise.all([e?.provider==="GITHUB"?null:t.worktreeAutoMerge.findFirst({where:{worktreeId:A,autoSync:!0,state:{notIn:n}}}),t.gitLabMergeOperation.findFirst({where:{worktreeId:A,autoSync:!0,state:{notIn:n},...e?.provider==="GITLAB"?{id:{not:e.id}}:{}}})]);return!!(i||a)}async function C(A,e,t){let i=await g(A);if(i)throw Error(i);if(await h(A,t))throw Error("Another Auto Merge operation owns this worktree.");let n=await (0,r.U)(),a=await n.worktreeAutoSync.findUnique({where:{worktreeId:A}});if(a?.activeJobId||a?.workflowRunId)throw Error("Wait for the active Auto Sync operation before enabling Auto Merge.");let s=await u(A);if(!s)throw Error("The linked worktree is unavailable.");if(s.branch!==e.sourceBranch||s.codebase.repository.canonicalOrigin.toLowerCase()!==e.sourceOrigin.toLowerCase()||s.headSha!==e.headSha)throw Error("The linked worktree does not match the reviewed source branch and commit. Refresh it before enabling Auto Merge.");if(s.hasConflicts||s.rebaseInProgress||s.hasStagedChanges||s.hasUnstagedChanges)throw Error("Resolve conflicts and stash or commit changes before enabling Auto Merge.");return JSON.stringify({version:1,sourceOrigin:e.sourceOrigin,sourceBranch:e.sourceBranch,headSha:e.headSha,targetOrigin:e.targetOrigin,targetUrl:e.targetUrl,targetBranch:e.targetBranch,syncedTargetSha:null,jobId:null,requestId:null,codebaseId:s.codebaseId,agentId:s.codebase.agentId,folder:s.folder,gitDirectory:s.gitDirectory})}async function p(A){return c(A.worktreeId,async()=>{let t=d(A.syncStateJson),i=A.state,n=async(e,r=null)=>{i=e,await A.save({state:i,syncStateJson:JSON.stringify(t),lastError:r,acceptedHeadSha:t.headSha})},s=A=>A.sourceOrigin===t.sourceOrigin&&A.sourceBranch===t.sourceBranch&&A.targetOrigin===t.targetOrigin&&A.targetBranch===t.targetBranch;try{let o=await A.readiness();if(!s(o))throw Error("The source repository, branch or merge target changed. Review it before resuming Auto Merge.");if("MERGED"===o.state){if(o.headSha!==t.headSha)throw Error("A different source commit was merged. Review the follow-ups manually.");return!0}if("OPEN"!==o.state)throw Error("The request closed without merging.");if(o.nativeAutoMerge)throw Error("Native Auto Merge was enabled separately. Cancel it before resuming branch syncing.");if("MERGING"===i)return Date.now()-A.updatedAt.getTime()>12e4&&await n("ACTION_REQUIRED","The provider has not confirmed the merge. Review its state before resuming."),!1;let l=await u(A.worktreeId);if(!l||l.missingAt||l.branch!==t.sourceBranch||l.codebaseId!==t.codebaseId||l.codebase.agentId!==t.agentId||l.folder!==t.folder||l.gitDirectory!==t.gitDirectory||l.codebase.repository.canonicalOrigin.toLowerCase()!==t.sourceOrigin.toLowerCase())throw Error("The linked worktree identity changed. Review it before resuming Auto Merge.");if(t.requestId){let e=await (0,r.U)(),i=t.jobId?await A.agents.getJob(t.jobId):await e.agentJob.findFirst({where:{agentId:t.agentId,idempotencyKey:`worktree:auto-sync:sync:${t.requestId}:${A.worktreeId}`}});if(!i){if(o.headSha!==t.headSha)throw Error("The source commit changed. Review it before resuming Auto Merge.");i=await A.worktrees.createAutoSyncJob(A.worktreeId,"SYNC",t.sourceBranch,t.requestId,!1,{codebaseId:t.codebaseId,agentId:t.agentId,folder:t.folder,gitDirectory:t.gitDirectory,expectedOrigin:t.sourceOrigin},{expectedHeadSha:t.headSha,targetUrl:t.targetUrl,targetBranch:t.targetBranch,targetSha:o.targetSha})}if(t.jobId=i.id,!a.has(i.status))return await n("SYNCING"),!1;if("SUCCEEDED"!==i.status)return await n("ACTION_REQUIRED",i.error||"Branch sync failed. Review the worktree before resuming."),!1;let l=JSON.parse(i.resultJson??"null");if(l?.outcome==="CONFLICT")throw Error("Resolve the rebase conflicts, finish and push the rebase, then resume Auto Merge.");if(l?.outcome==="PREPARATION_CONFLICT")throw Error("Repository preparations block the rebase. Resolve them before resuming Auto Merge.");if(!l||!["SYNCED","NO_CHANGE"].includes(l.outcome??"")||l.previousHeadSha!==t.headSha||!l.syncedHeadSha||!l.syncedTargetSha)throw Error("Branch sync did not return a verified source and target revision.");if(o=await A.readiness(),!s(o)||o.headSha!==l.syncedHeadSha)throw Error("The source commit changed after syncing. Review it before resuming Auto Merge.");t.headSha=l.syncedHeadSha,t.syncedTargetSha=l.syncedTargetSha,t.jobId=null,t.requestId=null,await n("WAITING_CI")}if(o.headSha!==t.headSha)throw Error("The source commit changed. Review it before resuming Auto Merge.");if(!t.requestId&&l.headSha!==t.headSha&&l.headSha!==d(A.syncStateJson).headSha)throw Error("The local source commit changed. Review it before resuming Auto Merge.");if(!t.requestId&&(l.hasConflicts||l.rebaseInProgress||l.hasStagedChanges||l.hasUnstagedChanges))throw Error("Resolve conflicts and stash or commit worktree changes before resuming Auto Merge.");if(o.blocker)throw Error(o.blocker);if(t.syncedTargetSha!==o.targetSha)return t.requestId=(0,e.randomUUID)(),await n("SYNCING"),!1;if(!o.ciPassed)return await n("WAITING_CI"),!1;if(!o.canMerge)return await n("WAITING_REQUIREMENTS"),!1;if(o=await A.readiness(),!s(o)||o.headSha!==t.headSha)throw Error("The source commit or merge target changed before merging.");if(o.targetSha!==t.syncedTargetSha)return t.requestId=(0,e.randomUUID)(),await n("SYNCING"),!1;if(o.blocker)throw Error(o.blocker);if(!o.ciPassed||!o.canMerge||o.nativeAutoMerge)return await n("WAITING_REQUIREMENTS"),!1;await n("MERGING"),await A.merge(t.headSha,t.syncedTargetSha);let c=await A.readiness();return"MERGED"===c.state&&s(c)&&c.headSha===t.headSha}catch(t){let A=t instanceof Error?t.message:String(t),e=o(t);return await n(t instanceof l?"WAITING_REQUIREMENTS":"MERGING"===i?"MERGING":e?i:"ACTION_REQUIRED",A),!1}})}async function I(A,e){let i=d(A),n=i.jobId?await e.getJob(i.jobId):i.requestId?await (await (0,r.U)()).agentJob.findFirst({where:{agentId:i.agentId,idempotencyKey:{contains:i.requestId},kind:t.d}}):null;n&&!a.has(n.status)&&await e.cancelJob(n.id)}A.s(["X",0,"Another operation is active for this codebase","S",0,["SYNCING","WAITING_CI","WAITING_REQUIREMENTS","MERGING"],"y",0,l,"C",0,p,"v",0,I,"D",0,o,"M",0,h,"e",0,g,"I",0,C,"N",0,d,"s",0,c])},133898,A=>{async function e(A,e){return e.moveTicketToDone&&e.ticketKey&&!e.ticketMovedAt?(await A.transitionTicketToConfiguredDone(e.ticketKey),new Date):e.ticketMovedAt}A.s(["T",0,e,"t",0,function(A,e,t="pull request"){if(A.deleteWorktree&&!e.canDeleteWorktree)throw Error("Only a linked, non-primary worktree can be deleted after merge");if(A.moveTicketToDone&&(!e.ticketKey||!e.ticketDoneStatusConfigured))throw Error(e.ticketKey?"Configure this Jira project's done status before enabling this option":`This ${t} is not linked to a Jira ticket`)}])},999585,A=>{var e=A.i(666680),t=A.i(750227);A.s(["H",0,0x1400000,"O",0,500,"b",0,function(A){let e=4*Math.ceil(0xa00000/3);if(A.length>e)throw Error("Each preparation upload must be 10 MiB or smaller");let t=Buffer.from(A,"base64");if(t.toString("base64")!==A)throw Error("Uploaded preparation contents are not valid base64");if(t.byteLength>0xa00000)throw Error("Each preparation upload must be 10 MiB or smaller");return t},"l",0,function(A){let e=A.trim(),r=e.split("/");if(!e||"."===e||e.startsWith("/")||/^[A-Za-z]:\//.test(e)||/[\\\0\r\n*?[\]]/.test(e)||r.some(A=>!A||"."===A||".."===A)||r.some(A=>".git"===A.toLowerCase())||t.posix.normalize(e)!==e)throw Error(`${A||"Path"} must be an exact repository-relative file path`);return e},"a",0,function(A){if(0===A.length)return"NOT_CONFIGURED";for(let e of["ERROR","DRIFTED","SUSPENDED","PENDING","UNDONE","UNKNOWN"])if(A.includes(e))return e;return A.every(A=>"NOT_APPLICABLE"===A)?"NOT_APPLICABLE":"APPLIED"},"B",0,function(A){return(0,e.createHash)("sha256").update(A).digest("hex")},"d",0,function(A){let t=(0,e.createHash)("sha256");return t.update(A.kind),t.update("\0"),t.update(A.path),t.update("\0"),A.contents&&t.update(A.contents),t.digest("hex")},"U",0,function(A){return{id:A.id,kind:A.kind,path:A.path,contentBase64:"WRITE"===A.kind&&A.contents?Buffer.from(A.contents).toString("base64"):null,definitionHash:A.definitionHash}}])},374421,A=>{var e=A.i(251063),t=A.i(666680),r=A.i(380592),i=A.i(864637),n=A.i(135475),a=A.i(454228),s=A.i(133898),o=A.i(121e3);let l="server:worktree-automations",c=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]),d=new Set(["SUCCEEDED","FAILED","CANCELLED"]);function u(A){let[e,t,r]=A.split("/");if(!e||!t||r)throw Error("A GitHub repository must be in owner/name format");return{owner:e,name:t}}function g(A){if(!A)return null;try{let e=JSON.parse(A);if(!e||"object"!=typeof e||Array.isArray(e))return null;return"string"==typeof e.outcome?String(e.outcome):null}catch{return null}}function h(A){return{worktreeId:A.worktreeId,state:A.state,conflictWorkflowId:A.conflictWorkflowId,conflictWorkflowChoice:A.conflictWorkflowChoice,lastError:A.lastError,pauseReason:A.pauseReason,lastSyncedAt:A.lastSyncedAt?.toISOString()??null,updatedAt:A.updatedAt.toISOString()}}function C(A){return{...A,autoSync:A.autoSync??!1,mergeMethod:A.mergeMethod,baseBranchUpdateResults:(0,e.B)(A.baseBranchUpdatesJson),updatedAt:A.updatedAt.toISOString()}}A.s(["f",0,class{worktrees;github;jira;workflows;agentControl;polling;timer;running;rerunRequested;mergeOperationTail;async withMergeLock(A){let e,t=this.mergeOperationTail;this.mergeOperationTail=new Promise(A=>{e=A}),await t;try{return await A()}finally{e()}}constructor(A,e,t,r,i,n){this.worktrees=A,this.github=e,this.jira=t,this.workflows=r,this.agentControl=i,this.polling=n,this.timer=null,this.running=!1,this.rerunRequested=!1,this.mergeOperationTail=Promise.resolve(),this.agentControl.registerCompletionObserver(async A=>{A.codebaseId&&this.changed()}),this.agentControl.registerConnectionHandler(async()=>this.changed()),this.polling?.register({id:l,kind:"WORKTREE_AUTOMATION",runtime:"SERVER",enabled:!0,cadenceSeconds:60,details:{}})}startRuntime(){queueMicrotask(()=>void this.reconcile())}schedule(){this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>void this.reconcile(),6e4),this.timer.unref(),this.polling?.schedule(l,new Date(Date.now()+6e4))}changed(){if(this.running){this.rerunRequested=!0;return}this.timer&&clearTimeout(this.timer),this.timer=null,queueMicrotask(()=>void this.reconcile())}async stopAutoSyncWork(A){A?.activeJobId&&await this.agentControl.cancelJob(A.activeJobId).catch(()=>null),A?.workflowRunId&&await this.workflows.lifecycle(A.workflowRunId,"CANCEL").catch(()=>null)}async autoSync(A){let e=await (0,n.U)(),t=await e.worktreeAutoSync.findUnique({where:{worktreeId:A}});return t?h(t):null}async configureAutoSync(A){let e=await (0,n.U)(),t=await e.worktree.findFirst({where:{id:A.worktreeId,missingAt:null},select:{id:!0,branch:!0,codebaseId:!0,codebase:{select:{repositoryId:!0}}}});if(!t?.branch)throw Error("Auto Sync requires a branch");await this.stopAutoSyncWork(await e.worktreeAutoSync.findUnique({where:{worktreeId:t.id},select:{activeJobId:!0,workflowRunId:!0}}));let r=A.conflictWorkflowId?.trim()||null;if(r){let A=await e.workflow.findUnique({where:{id:r},select:{enabled:!0,archivedAt:!0,activeVersionId:!0,quickActionKind:!0,quickActionRepositories:{select:{repositoryId:!0}}}});if(!A?.enabled||A.archivedAt||!A.activeVersionId||"MERGE_CONFLICT"!==A.quickActionKind)throw Error("Select an enabled merge-conflict quick action workflow");if(A.quickActionRepositories.length>0&&!A.quickActionRepositories.some(({repositoryId:A})=>A===t.codebase.repositoryId))throw Error("The merge-conflict workflow is not available for this repository")}let i=await e.worktreeAutoSync.upsert({where:{worktreeId:t.id},create:{worktreeId:t.id,branch:t.branch,conflictWorkflowId:r,conflictWorkflowChoice:A.conflictWorkflowChoice?.trim()||null},update:{state:"ACTIVE",branch:t.branch,conflictWorkflowId:r,conflictWorkflowChoice:A.conflictWorkflowChoice?.trim()||null,activeJobId:null,workflowRunId:null,lastError:null,pauseReason:null}});return this.worktrees.publishAutomationChange(t.id,t.codebaseId),this.changed(),h(i)}async cancelAutoSync(A){let e=await (0,n.U)(),t=await e.worktreeAutoSync.findUnique({where:{worktreeId:A},select:{activeJobId:!0,workflowRunId:!0}});await this.stopAutoSyncWork(t);let r=await e.worktreeAutoSync.deleteMany({where:{worktreeId:A}});return this.worktrees.publishAutomationChange(A),r.count>0}async retryAutoSync(A){let e=await (0,n.U)(),t=await e.worktreeAutoSync.update({where:{worktreeId:A},data:{state:"ACTIVE",activeJobId:null,workflowRunId:null,lastError:null,pauseReason:null}});return this.worktrees.publishAutomationChange(A),this.changed(),h(t)}async autoMerge(A){let e=await (0,n.U)(),t=await e.worktreeAutoMerge.findUnique({where:{worktreeId:A}});return t?C(t):null}pullRequestState(A){let{owner:e,name:t}=u(A.repositoryNameWithOwner);return A.autoSync?this.github.pullRequestAutomationState(e,t,A.pullRequestNumber,!0):this.github.pullRequestAutomationState(e,t,A.pullRequestNumber)}async pullRequestMergeOptions(A,t,r,a,s){let l=await this.github.pullRequestMergeOptions(A,t,r,a),c=await (0,n.U)(),d=l.headRepositoryNameWithOwner?`github.com/${l.headRepositoryNameWithOwner.toLowerCase()}`:null,u=s||d?await c.worktree.findFirst({where:s?{id:s,missingAt:null}:{missingAt:null,branch:l.headRefName,codebase:{repository:{canonicalOrigin:d}}},orderBy:{updatedAt:"desc"},include:{autoMerge:!0,codebase:{include:{repository:!0}}}}):null;if(s&&!u)throw Error("The linked worktree is no longer available");if(u&&(!d||u.branch!==l.headRefName||u.codebase.repository.canonicalOrigin.toLowerCase()!==d))throw Error("The pull request head repository or branch does not match this worktree");let g=u?await this.worktrees.ticketKeyForWorktree(u.id):null,h=await this.github.getSettings(),p=(await c.gitHubRepository.findMany()).find(e=>e.nameWithOwner.toLowerCase()===`${A}/${t}`.toLowerCase()),I=(0,i.N)(l.defaultCommitHeadline,p?.jiraKeyRegex??h.defaultJiraKeyRegex),m=s&&"WORKTREE_AUTOMATION"===a?g:I??g,f=m?await c.jiraProject.findUnique({where:{key:m.split("-")[0]},select:{doneStatusId:!0}}):null,E=u?.autoMerge,w=E&&E.pullRequestNumber===r&&E.repositoryNameWithOwner.toLowerCase()===`${A}/${t}`.toLowerCase()?E:null,Q=await (0,o.e)(u?.id);return{...l,canAutoMergeWithSync:!Q&&!!l.canAutoMergeWithSync,autoSyncBlockedReason:Q,defaultAutoSync:w?.autoSync??!1,autoMergeOperation:w?.autoSync?C(w):null,baseBranchUpdateOptions:await (0,e.o)(u,w?.baseBranchUpdatesJson),defaultMethod:w&&l.availableMethods.includes(w.mergeMethod)?w.mergeMethod:l.defaultMethod,defaultCommitHeadline:w?.commitHeadline??l.defaultCommitHeadline,defaultCommitBody:w?.commitBody??l.defaultCommitBody,defaultCommitEmail:w?w.authorEmail:l.defaultCommitEmail,defaultMoveTicketToDone:w?.moveTicketToDone??l.defaultMoveTicketToDone,defaultDeleteWorktree:w?.deleteWorktree??l.defaultDeleteWorktree,worktreeId:u?.id??null,worktreeFolder:u?.folder??null,canDeleteWorktree:!!(u&&!u.primary),ticketKey:m,ticketDoneStatusConfigured:!!f?.doneStatusId}}async mergePullRequest(A,e){return this.withMergeLock(()=>this.mergePullRequestWithFollowUps(A,e))}async mergePullRequestWithFollowUps(A,t){let r=await this.pullRequestMergeOptions(A.owner,A.name,A.number,t,A.worktreeId);(0,s.t)(A,r);let i=A.baseBranchUpdate?.worktreeIds.length&&r.worktreeId?await (await (0,n.U)()).worktreeAutoMerge.findUnique({where:{worktreeId:r.worktreeId}}):null,a=await (0,e.f)(r.worktreeId,A.baseBranchUpdate,i?.pullRequestNumber===A.number&&i.repositoryNameWithOwner.toLowerCase()===`${A.owner}/${A.name}`.toLowerCase()?i.baseBranchUpdatesJson:null),o=await this.github.mergePullRequest(A,t);if("MERGED"!==o.state)return o;try{if(r.worktreeId){let e=await (0,n.U)(),t={state:A.moveTicketToDone||A.deleteWorktree||a?"POST_MERGE":"COMPLETED",repositoryNameWithOwner:`${A.owner}/${A.name}`,pullRequestNumber:A.number,branch:r.headRefName,baseBranchUpdatesJson:a,mergeMethod:A.method,commitHeadline:A.commitHeadline.trim(),commitBody:A.commitBody,authorEmail:A.authorEmail?.trim()||null,deleteWorktree:A.deleteWorktree??!1,moveTicketToDone:A.moveTicketToDone??!1,ticketKey:r.ticketKey,ticketMovedAt:null,deleteJobId:null,lastError:null};await e.worktreeAutoMerge.upsert({where:{worktreeId:r.worktreeId},create:{worktreeId:r.worktreeId,...t},update:t}),this.worktrees.publishAutomationChange(r.worktreeId),this.changed()}else A.moveTicketToDone&&r.ticketKey&&await this.jira.transitionTicketToConfiguredDone(r.ticketKey);return{...o,ticketKey:r.ticketKey,postMergeError:null}}catch(A){return{...o,ticketKey:r.ticketKey,postMergeError:A instanceof Error?A.message:String(A)}}}async configureAutoMerge(A){return this.withMergeLock(async()=>{let t=await (0,n.U)(),r=await t.worktree.findFirst({where:{id:A.worktreeId,missingAt:null},select:{id:!0,primary:!0,branch:!0,codebaseId:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}});if(!r?.branch)throw Error("Auto Merge requires a branch");if(A.deleteWorktree&&r.primary)throw Error("The primary worktree cannot be deleted after merge");let i=await t.worktreeAutoMerge.findUnique({where:{worktreeId:r.id}}),a=await this.worktrees.ticketKeyForWorktree(r.id);if(A.moveTicketToDone){if(!a)throw Error("This worktree is not linked to a Jira ticket");let A=await t.jiraProject.findUnique({where:{key:a.split("-")[0]??""},select:{doneStatusId:!0}});if(!A?.doneStatusId)throw Error("Configure this Jira project's done status before enabling this option")}let s=u(A.repositoryNameWithOwner),l=await this.github.pullRequestAutomationState(s.owner,s.name,A.pullRequestNumber);if(l.headRefName!==r.branch)throw Error("The pull request does not belong to this worktree branch");if(!l.headRepositoryNameWithOwner)throw Error("The pull request head repository is unavailable");if(r.codebase.repository.canonicalOrigin.toLowerCase()!==`github.com/${l.headRepositoryNameWithOwner.toLowerCase()}`)throw Error("The pull request head repository does not match this worktree");let c=await (0,e.f)(r.id,A.baseBranchUpdate,i?.pullRequestNumber===A.pullRequestNumber&&i.repositoryNameWithOwner.toLowerCase()===A.repositoryNameWithOwner.toLowerCase()?i.baseBranchUpdatesJson:null),d=!!(i&&(i.repositoryNameWithOwner.toLowerCase()!==A.repositoryNameWithOwner.toLowerCase()||i.pullRequestNumber!==A.pullRequestNumber));if(A.autoSync)return(0,o.s)(r.id,async()=>{if(i?.autoSync&&!d&&o.S.includes(i.state))return C(i);i?.autoSync&&await (0,o.v)(i.syncStateJson,this.agentControl);let e=await this.github.managedMergeReadiness(s.owner,s.name,A.pullRequestNumber);if(!A.expectedHeadSha||e.headSha!==A.expectedHeadSha)throw Error("The source commit changed. Refresh and review it before enabling Auto Merge.");if("OPEN"!==e.state||e.blocker)throw Error(e.blocker??"Only open pull requests can use Auto Merge.");if(!(await this.github.pullRequestMergeOptions(s.owner,s.name,A.pullRequestNumber,"WORKTREE_AUTOMATION")).availableMethods.includes(A.method))throw Error("The selected merge method is not available.");if(!A.commitHeadline.trim())throw Error("A commit message is required");let n={autoSync:!0,syncStateJson:await (0,o.I)(r.id,e,{provider:"GITHUB",id:r.id}),state:"SYNCING",repositoryNameWithOwner:A.repositoryNameWithOwner,pullRequestNumber:A.pullRequestNumber,branch:r.branch,mergeMethod:A.method,commitHeadline:A.commitHeadline.trim(),commitBody:A.commitBody,authorEmail:A.authorEmail?.trim()||null,baseBranchUpdatesJson:c,deleteWorktree:A.deleteWorktree,moveTicketToDone:A.moveTicketToDone,ticketKey:a,ticketMovedAt:null,deleteJobId:null,lastError:null},l=await t.worktreeAutoMerge.upsert({where:{worktreeId:r.id},create:{worktreeId:r.id,...n},update:n});try{d&&i&&await this.github.disablePullRequestAutoMerge({...u(i.repositoryNameWithOwner),number:i.pullRequestNumber},"WORKTREE_AUTOMATION"),e.nativeAutoMerge&&await this.github.disablePullRequestAutoMerge({...s,number:A.pullRequestNumber},"WORKTREE_AUTOMATION")}catch(A){throw await t.worktreeAutoMerge.update({where:{worktreeId:r.id},data:{state:"ACTION_REQUIRED",lastError:String(A)}}),this.worktrees.publishAutomationChange(r.id,r.codebaseId),A}return this.worktrees.publishAutomationChange(r.id,r.codebaseId),this.changed(),C(l)});i?.autoSync&&await (0,o.v)(i.syncStateJson,this.agentControl);let g=!1,h=!1;try{if(i&&d){let A=u(i.repositoryNameWithOwner),e=await this.github.pullRequestAutomationState(A.owner,A.name,i.pullRequestNumber);"OPEN"===e.state&&e.autoMergeEnabled&&(await this.github.disablePullRequestAutoMerge({...A,number:i.pullRequestNumber},"WORKTREE_AUTOMATION"),g=!0)}h=!0,await this.github.enablePullRequestAutoMerge({...s,number:A.pullRequestNumber,method:A.method,commitHeadline:A.commitHeadline,commitBody:A.commitBody,authorEmail:A.authorEmail},"WORKTREE_AUTOMATION");let e=await t.worktreeAutoMerge.upsert({where:{worktreeId:r.id},create:{worktreeId:r.id,autoSync:!1,repositoryNameWithOwner:A.repositoryNameWithOwner,pullRequestNumber:A.pullRequestNumber,branch:r.branch,mergeMethod:A.method,commitHeadline:A.commitHeadline.trim(),commitBody:A.commitBody,authorEmail:A.authorEmail?.trim()||null,baseBranchUpdatesJson:c,deleteWorktree:A.deleteWorktree,moveTicketToDone:A.moveTicketToDone,ticketKey:a},update:{state:"ACTIVE",autoSync:!1,syncStateJson:null,repositoryNameWithOwner:A.repositoryNameWithOwner,pullRequestNumber:A.pullRequestNumber,branch:r.branch,mergeMethod:A.method,commitHeadline:A.commitHeadline.trim(),commitBody:A.commitBody,authorEmail:A.authorEmail?.trim()||null,baseBranchUpdatesJson:c,deleteWorktree:A.deleteWorktree,moveTicketToDone:A.moveTicketToDone,ticketKey:a,ticketMovedAt:null,deleteJobId:null,lastError:null}});return this.worktrees.publishAutomationChange(r.id,r.codebaseId),this.changed(),C(e)}catch(e){if(h&&await this.github.disablePullRequestAutoMerge({...s,number:A.pullRequestNumber},"WORKTREE_AUTOMATION").catch(()=>null),i&&(g||!d)){let A=u(i.repositoryNameWithOwner);await this.github.enablePullRequestAutoMerge({...A,number:i.pullRequestNumber,method:i.mergeMethod,commitHeadline:i.commitHeadline,commitBody:i.commitBody,authorEmail:i.authorEmail},"WORKTREE_AUTOMATION").catch(()=>null)}throw e}})}async forceAutoSync(A,e){if(!e.trim())throw Error("requestId is required");let t=await (0,n.U)(),r=await t.worktreeAutoSync.findUnique({where:{worktreeId:A}});if(!r||"PAUSED"!==r.state||"PREPARATION_CONFLICT"!==r.pauseReason)throw Error("Auto Sync is not paused for a preparation conflict");let i=await this.worktrees.createAutoSyncJob(A,"SYNC",r.branch,e,!0);return await t.worktreeAutoSync.update({where:{worktreeId:A},data:{state:"SYNCING",activeJobId:i.id,workflowRunId:null,lastError:null,pauseReason:null}}),this.worktrees.publishAutomationChange(A),this.changed(),i}async cancelAutoMerge(A){return this.withMergeLock(async()=>{let e=await (0,n.U)(),t=await e.worktreeAutoMerge.findUnique({where:{worktreeId:A}}),r=t?await e.worktree.findUnique({where:{id:A},include:{pullRequest:!0,codebase:{include:{repository:!0}}}}):null;if(t&&!r)return!1;let i=r?.pullRequest,a=t&&(r?.branch!==t.branch||i&&(i.number!==t.pullRequestNumber||i.repositoryNameWithOwner.toLowerCase()!==t.repositoryNameWithOwner.toLowerCase()));if(!t||a){let e=await this.worktrees.refreshPullRequest(A),t=e.pullRequest;if(!t||!e.branch)return!1;let r=u(t.repositoryNameWithOwner),i=await this.github.pullRequestAutomationState(r.owner,r.name,t.number,!0);if(i.headRefName!==e.branch||!i.headRepositoryNameWithOwner||`github.com/${i.headRepositoryNameWithOwner.toLowerCase()}`!==e.codebase.repository.canonicalOrigin.toLowerCase())throw Error("The pull request does not match this worktree");return"OPEN"===i.state&&!!i.autoMergeEnabled&&(await this.github.disablePullRequestAutoMerge({...r,number:t.number},"WORKTREE_AUTOMATION"),await this.worktrees.refreshPullRequest(A),this.worktrees.publishAutomationChange(A,e.codebaseId),!0)}let s=u(t.repositoryNameWithOwner),l=await this.github.pullRequestAutomationState(s.owner,s.name,t.pullRequestNumber,!0);if(l.headRefName!==r.branch||!l.headRepositoryNameWithOwner||`github.com/${l.headRepositoryNameWithOwner.toLowerCase()}`!==r.codebase.repository.canonicalOrigin.toLowerCase())throw Error("The pull request does not match this worktree");if(t.autoSync&&await (0,o.v)(t.syncStateJson,this.agentControl),"OPEN"===l.state&&l.autoMergeEnabled&&await this.github.disablePullRequestAutoMerge({...s,number:t.pullRequestNumber},"WORKTREE_AUTOMATION"),t.autoSync&&"MERGED"===l.state){let r=(0,o.N)(t.syncStateJson);if(l.headRefOid!==r.headSha||l.headRefName!==r.sourceBranch||`github.com/${l.headRepositoryNameWithOwner?.toLowerCase()}`!==r.sourceOrigin.toLowerCase())throw Error("A different source commit merged. Review follow-ups manually.");await e.worktreeAutoMerge.update({where:{worktreeId:A},data:{state:"POST_MERGE",lastError:null}}),this.changed()}else await e.worktreeAutoMerge.delete({where:{worktreeId:A}});return this.worktrees.publishAutomationChange(A),!0})}async retryAutoMerge(A){let e=await (0,n.U)(),t=await e.worktreeAutoMerge.findUniqueOrThrow({where:{worktreeId:A}}),r=await this.pullRequestState(t);if(t.autoSync&&"MERGED"!==r.state)throw Error("Refresh and review the current source commit, then resume Auto Merge from its configuration.");let i="MERGED"===r.state?"POST_MERGE":"ACTIVE",a=await e.worktreeAutoMerge.update({where:{worktreeId:A},data:{state:i,lastError:null,deleteJobId:null}});return this.worktrees.publishAutomationChange(A),this.changed(),C(a)}async reconcile(){if(this.running){this.rerunRequested=!0;return}this.running=!0;try{let A=async()=>{do this.rerunRequested=!1,await this.reconcileAutoMerge(),await this.reconcileAutoSync();while(this.rerunRequested)};this.polling?await this.polling.run(l,A):await A()}catch{}finally{this.running=!1,this.schedule()}}async recoverLegacyAutoSync(A){if("PAUSED"!==A.state||"ERROR"!==A.pauseReason||A.lastError!==o.X)return null;let e=await (0,n.U)(),t=A.workflowRunId;if(!t&&!A.activeJobId&&A.conflictWorkflowId){let i=await e.agentJob.findFirst({where:{worktreeId:A.worktreeId,codebaseId:A.worktree.codebaseId,kind:r.d},orderBy:[{createdAt:"desc"},{id:"desc"}]}),n=await e.worktree.findUnique({where:{id:A.worktreeId},select:{codebaseId:!0,branch:!0,folder:!0,gitDirectory:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}}),a=!1;try{let e=JSON.parse(i?.payloadJson??"null");a=!!n&&n.codebaseId===A.worktree.codebaseId&&n.branch===A.branch&&e?.expectedBranch===A.branch&&e?.folder===n.folder&&e?.gitDirectory===n.gitDirectory&&"string"==typeof e?.expectedOrigin&&e.expectedOrigin.toLowerCase()===n.codebase.repository.canonicalOrigin.toLowerCase()&&e?.phase==="SYNC"&&!e?.mergeGuard}catch{}if(a&&i?.status==="SUCCEEDED"&&i.finishedAt&&i.finishedAt<=A.updatedAt&&"CONFLICT"===g(i.resultJson)){let r=await e.workflowRun.findMany({where:{worktreeId:A.worktreeId,workflowId:A.conflictWorkflowId,triggerSubjectKey:`auto-sync:${A.worktreeId}:${i.id}`,status:"SUCCEEDED",finishedAt:{gte:i.finishedAt,lte:A.updatedAt}},select:{id:!0},take:2});1===r.length&&(t=r[0].id)}}let i={state:A.activeJobId?"SYNCING":t?"RESOLVING":"ACTIVE",workflowRunId:t,lastError:null,pauseReason:null};return(await e.worktreeAutoSync.updateMany({where:{worktreeId:A.worktreeId,state:"PAUSED",pauseReason:"ERROR",lastError:o.X,updatedAt:A.updatedAt},data:i})).count?i:null}async reconcileAutoSync(){let A=await (0,n.U)();for(let e of(await A.worktreeAutoSync.findMany({where:{OR:[{state:{in:["ACTIVE","SYNCING","RESOLVING"]}},{state:"PAUSED",pauseReason:"ERROR",lastError:o.X}]},include:{worktree:{select:{codebaseId:!0}}},orderBy:[{updatedAt:"asc"},{worktreeId:"asc"}]})))await (0,o.s)(e.worktreeId,async()=>{let i=e;try{if("PAUSED"===i.state){let A=await this.recoverLegacyAutoSync(i);if(!A)return;i={...i,...A}}if(await (0,o.M)(i.worktreeId))return;let e=await A.worktree.findUnique({where:{id:i.worktreeId},select:{branch:!0}});if(e?.branch!==i.branch)throw Error("Auto Sync paused because the worktree branch changed");if("ACTIVE"===i.state){if((await A.agentJob.findMany({where:{worktreeId:i.worktreeId,codebaseId:i.worktree.codebaseId,kind:r.d,status:"SUCCEEDED",finishedAt:{gte:new Date(Date.now()-6e4)}},select:{resultJson:!0}})).some(A=>["SYNCED","NO_CHANGE"].includes(g(A.resultJson)??"")))return;let e=await this.worktrees.createAutoSyncJob(i.worktreeId,"SYNC",i.branch,(0,t.randomUUID)());await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"SYNCING",activeJobId:e.id,lastError:null,pauseReason:null}});return}if("RESOLVING"===i.state){if(!i.workflowRunId)throw Error("The conflict workflow run is missing");let e=await this.workflows.run(i.workflowRunId);if(!e||!d.has(e.status))return;if("SUCCEEDED"!==e.status)throw Error(`The conflict workflow ${e.status.toLowerCase()}`);let r=await this.worktrees.createAutoSyncJob(i.worktreeId,"FINALIZE",i.branch,(0,t.randomUUID)());await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"SYNCING",activeJobId:r.id,workflowRunId:null,pauseReason:null}});return}if(!i.activeJobId)throw Error("The Auto Sync job is missing");let n=await this.agentControl.getJob(i.activeJobId);if(!n||!c.has(n.status))return;if("SUCCEEDED"!==n.status)throw Error(n.error||`Auto Sync ${n.status.toLowerCase()}`);let a=g(n.resultJson);if("PREPARATION_CONFLICT"===a){let e=function(A){if(!A)return[];try{let e=JSON.parse(A);if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=e.preparationConflictPaths;return Array.isArray(t)?t.filter(A=>"string"==typeof A):[]}catch{return[]}}(n.resultJson);await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"PAUSED",activeJobId:null,workflowRunId:null,lastError:"Auto Sync paused because repository preparations block the rebase"+(e.length?`: ${e.join(", ")}`:""),pauseReason:"PREPARATION_CONFLICT"}});return}if("CONFLICT"===a){if(!i.conflictWorkflowId)return void await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"PAUSED",activeJobId:null,workflowRunId:null,lastError:"Auto Sync paused because the rebase has merge conflicts",pauseReason:"REBASE_CONFLICT"}});let e=await this.workflows.trigger({workflowId:i.conflictWorkflowId,resourceKind:"WORKTREE",resourceId:i.worktreeId,subjectKey:`auto-sync:${i.worktreeId}:${n.id}`,choice:i.conflictWorkflowChoice});if(!e)throw Error("The conflict workflow did not start");await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"RESOLVING",activeJobId:null,workflowRunId:e.id,lastError:null,pauseReason:null}});return}if("UNRESOLVED"===a)throw Error("The conflict workflow did not fully resolve the rebase");if("SYNCED"!==a&&"NO_CHANGE"!==a)throw Error("The Auto Sync job returned an unknown result");await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"ACTIVE",activeJobId:null,workflowRunId:null,lastError:null,pauseReason:null,..."SYNCED"===a?{lastSyncedAt:new Date}:{}}})}catch(n){if((0,a.D)(n)||"PAUSED"===i.state&&i.lastError===o.X&&(0,o.D)(n))return;let e=n instanceof Error?n.message:String(n),t=/offline|busy|already has an active job|temporarily/i.test(e);if(t&&"RESOLVING"===i.state)return;let r=/branch changed/i.test(e)?"BRANCH_CHANGED":"ERROR";await A.worktreeAutoSync.updateMany({where:{worktreeId:i.worktreeId},data:{state:t?"ACTIVE":"PAUSED",activeJobId:null,workflowRunId:null,lastError:e,pauseReason:t?null:r}})}finally{this.worktrees.publishAutomationChange(i.worktreeId,i.worktree.codebaseId)}})}async reconcileAutoMerge(){return this.withMergeLock(()=>this.reconcileAutoMergeRules())}async reconcileAutoMergeRules(){let A=await (0,n.U)();for(let r of(await A.worktreeAutoMerge.findMany({where:{OR:[{state:{in:["ACTIVE","POST_MERGE",...o.S]}},{state:"ACTION_REQUIRED",lastError:o.X}]},include:{worktree:{select:{codebaseId:!0,branch:!0,headSha:!0,primary:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}}}}))){let i=r;try{let r=u(i.repositoryNameWithOwner);if("ACTION_REQUIRED"===i.state){if(i.lastError!==o.X)continue;let e=await this.github.pullRequestAutomationState(r.owner,r.name,i.pullRequestNumber,!0),t=i.autoSync?(0,o.N)(i.syncStateJson).headSha:i.worktree.headSha;if("MERGED"!==e.state||e.headRefName!==i.branch||e.headRefOid!==t||!e.headRepositoryNameWithOwner||`github.com/${e.headRepositoryNameWithOwner.toLowerCase()}`!==i.worktree.codebase.repository.canonicalOrigin.toLowerCase()||!(await A.worktreeAutoMerge.updateMany({where:{worktreeId:i.worktreeId,state:"ACTION_REQUIRED",lastError:o.X,updatedAt:i.updatedAt},data:{state:"POST_MERGE",lastError:null}})).count)continue;i={...i,state:"POST_MERGE",lastError:null}}if(i.autoSync&&"POST_MERGE"!==i.state){await (0,o.C)({...i,worktrees:this.worktrees,agents:this.agentControl,readiness:()=>this.github.managedMergeReadiness(r.owner,r.name,i.pullRequestNumber),save:({acceptedHeadSha:e,...t})=>A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:t}),merge:(A,e)=>this.github.mergePullRequest({...r,number:i.pullRequestNumber,method:i.mergeMethod,commitHeadline:i.commitHeadline,commitBody:i.commitBody,authorEmail:i.authorEmail,expectedHeadSha:A,expectedTargetSha:e},"WORKTREE_AUTOMATION")})&&(await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{state:"POST_MERGE",lastError:null}}),this.rerunRequested=!0);continue}if("ACTIVE"===i.state){let e=await this.pullRequestState(i);if("MERGED"===e.state)await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{state:"POST_MERGE",lastError:null}}),this.rerunRequested=!0;else if("OPEN"!==e.state)throw Error("The pull request closed without merging");else if(!e.autoMergeEnabled)throw Error("GitHub Auto Merge is no longer enabled");continue}if(i.baseBranchUpdatesJson){let A=await this.pullRequestState(i);if("MERGED"!==A.state||!A.headRepositoryNameWithOwner)throw Error("The pull request merge is not confirmed for base updates");await (0,e.V)({provider:"GITHUB",id:i.worktreeId},{origin:`github.com/${A.headRepositoryNameWithOwner.toLowerCase()}`,branch:A.headRefName},this.worktrees)}if(i.moveTicketToDone&&i.ticketKey&&!i.ticketMovedAt){let e=await (0,s.T)(this.jira,i);await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{ticketMovedAt:e,lastError:null}})}if(!i.deleteWorktree){await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{state:"COMPLETED",lastError:null}});continue}if(i.worktree.primary)throw Error("The primary worktree cannot be deleted");if(!i.deleteJobId){let e=await this.pullRequestState(i);if("MERGED"!==e.state)throw Error("The pull request is no longer merged");if(!e.headRepositoryNameWithOwner||i.worktree.codebase.repository.canonicalOrigin.toLowerCase()!==`github.com/${e.headRepositoryNameWithOwner.toLowerCase()}`)throw Error("The merged pull request head repository does not match the worktree");if(e.headRefName!==i.branch)throw Error("The merged pull request branch does not match the Auto Merge rule");if(i.worktree.branch!==i.branch)throw Error("The worktree branch changed after Auto Merge completed");if(!i.worktree.headSha||i.worktree.headSha!==e.headRefOid)throw Error("The worktree HEAD does not match the merged pull request");let r=await this.worktrees.deleteWorktree({worktreeId:i.worktreeId,deleteRemoteBranch:!1,requireClean:!0,expectedBranch:i.branch,expectedHeadSha:e.headRefOid,requestId:`auto-merge-${(0,t.randomUUID)()}`});await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{deleteJobId:r.id,lastError:null}});continue}let n=await this.agentControl.getJob(i.deleteJobId);if(!n||!c.has(n.status))continue;if("SUCCEEDED"!==n.status)throw Error(n.error||`Worktree deletion ${n.status.toLowerCase()}`);await A.worktreeAutoMerge.updateMany({where:{worktreeId:i.worktreeId},data:{state:"COMPLETED",lastError:null}})}catch(e){if((0,a.D)(e)||"ACTION_REQUIRED"===i.state&&i.lastError===o.X&&(0,o.D)(e))continue;await A.worktreeAutoMerge.updateMany({where:{worktreeId:i.worktreeId},data:{state:"ACTION_REQUIRED",lastError:e instanceof Error?e.message:String(e)}})}finally{this.worktrees.publishAutomationChange(i.worktreeId,i.worktree.codebaseId)}}}}])},520962,A=>{var e=A.i(380592),t=A.i(666680),r=A.i(750227),i=A.i(591135),n=A.i(135475),a=A.i(532982),s=A.i(751976),o=A.i(454228),l=A.i(388385),c=A.i(384439),d=A.i(963408);A.i(256554);var u=A.i(118387),g=A.i(848201);A.i(253992);var h=A.i(183291);A.i(484628);var C=A.i(897051),p=A.i(429047),I=A.i(999585);let m=["PENDING","RUNNING"],f=["QUEUED","RUNNING","CANCELLING"],E="server:worktree-bulk-sync",w={codebase:{include:{agent:!0,repository:{include:{preparations:!0}}}}},Q={items:{orderBy:{position:"asc"}}};function y(A){if(A.missingAt||"AVAILABLE"!==A.availability)return"Worktree is unavailable";if("AVAILABLE"!==A.codebase.availability)return"Codebase is unavailable";let t=A.codebase.agent;if(t.disconnectedAt||!t.lastSeenAt||Date.now()-t.lastSeenAt.getTime()>(0,u.z)(t))return"Agent is offline";let r=function(A){try{let e=JSON.parse(A);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}}(t.capabilitiesJson);return r.includes(e.d)?A.codebase.repository.preparations.length>0&&!r.includes(e.r)?"Update the agent to use repository preparations":A.branch?A.upstream?A.baseBranchOverride??A.codebase.defaultBranch?A.hasConflicts||A.rebaseInProgress?"Resolve the current rebase or conflicts before syncing":A.hasStagedChanges||A.hasUnstagedChanges?"Stash or commit changes before syncing":null:"Sync requires a base branch":"Sync requires an upstream branch":"Sync requires a branch":"Update the agent to use Bulk Sync"}function B(A){return{...A,createdAt:A.createdAt.toISOString(),updatedAt:A.updatedAt.toISOString(),finishedAt:A.finishedAt?.toISOString()??null,items:A.items.map(A=>({...A,createdAt:A.createdAt.toISOString(),startedAt:A.startedAt?.toISOString()??null,finishedAt:A.finishedAt?.toISOString()??null}))}}class D{worktrees;timer;running;rerunRequested;started;polling;constructor(A,t){this.worktrees=A,this.timer=null,this.running=!1,this.rerunRequested=!1,this.started=!1,t.registerCompletionObserver(A=>(A.kind===e.d&&this.changed(),Promise.resolve())),t.registerConnectionHandler(()=>(this.changed(),Promise.resolve()))}startRuntime(A){this.started||(this.started=!0,this.polling=A,A?.register({id:E,kind:"WORKTREE_AUTOMATION",runtime:"SERVER",enabled:!0,cadenceSeconds:5,details:{operation:"BULK_SYNC"}}),this.changed())}changed(){if(this.started){if(this.running){this.rerunRequested=!0;return}this.timer&&clearTimeout(this.timer),this.timer=null,queueMicrotask(()=>void this.reconcile())}}async batch(A){let e=await (0,n.U)(),t=await e.worktreeSyncBatch.findUnique({where:{id:A},include:Q});return t?B(t):null}async active(A,e){let t=await (0,n.U)(),r=A?await t.appRepository.findMany({where:{appId:A},select:{repositoryId:!0}}):null;return(await t.worktreeSyncBatch.findMany({where:{status:"ACTIVE",...r||e?{items:{some:{...r?{repositoryId:{in:r.map(A=>A.repositoryId)}}:{},...e?{worktreeId:e}:{}}}}:{}},include:Q,orderBy:{createdAt:"asc"}})).map(B)}existingBatch(A,e){if(A.appId!==(e.appId??null)||A.agentId!==(e.agentId??null)||A.items.length!==e.worktreeIds.length||A.items.some(A=>!e.worktreeIds.includes(A.worktreeId)))throw Error("This request ID was already used for another Bulk Sync selection");return B(A)}async start(A){let e,r=A.requestId.trim(),i=[...new Set(A.worktreeIds.map(A=>A.trim()).filter(Boolean))];if(!r)throw Error("requestId is required");if(!i.length)throw Error("Select at least one worktree to sync");let a={...A,requestId:r,worktreeIds:i},s=await (0,n.U)(),o=await s.worktreeSyncBatch.findUnique({where:{requestId:r},include:Q});if(o)return this.existingBatch(o,a);let l=new Map((await s.worktree.findMany({where:{id:{in:i},codebase:{...A.agentId?{agentId:A.agentId}:{},...A.appId?{repository:{apps:{some:{appId:A.appId}}}}:{}}},include:w})).map(A=>[A.id,A]));if(l.size!==i.length)throw Error("Some selected worktrees no longer exist or are outside the page scope");let c=await Promise.all(i.map(async(A,e)=>{let r=l.get(A),i=y(r)??(null===r.baseBehind?"Worktree freshness is unknown; fetch and try again":r.baseBehind<=0?"Worktree is already up to date":null),n=await this.worktrees.ticketKeyForWorktree(A),a=n?await s.jiraCachedTicket.findUnique({where:{issueKey:n},select:{detailJson:!0,summaryJson:!0}}):null,o=null;try{let A=JSON.parse(a?.detailJson??a?.summaryJson??"null");if(A&&"object"==typeof A&&"fields"in A){let e=A.fields;e&&"object"==typeof e&&"summary"in e&&"string"==typeof e.summary&&(o=e.summary)}}catch{}return{id:(0,t.randomUUID)(),position:e,worktreeId:A,codebaseId:r.codebaseId,agentId:r.codebase.agentId,agentName:r.codebase.agent.name,repositoryId:r.codebase.repositoryId,repositoryName:r.codebase.repository.name,branch:r.branch??"",baseBranch:r.baseBranchOverride??r.codebase.defaultBranch??"",folder:r.folder,gitDirectory:r.gitDirectory,expectedOrigin:r.codebase.repository.canonicalOrigin,ticketKey:n,ticketTitle:o,baseBehind:r.baseBehind??0,status:i?"SKIPPED":"PENDING",error:i,finishedAt:i?new Date:null}})),d=c.some(A=>"PENDING"===A.status);try{e=await s.worktreeSyncBatch.create({data:{id:(0,t.randomUUID)(),requestId:r,appId:A.appId??null,agentId:A.agentId??null,status:d?"ACTIVE":"COMPLETED",finishedAt:d?null:new Date,items:{create:c}},include:Q})}catch(e){let A=await s.worktreeSyncBatch.findUnique({where:{requestId:r},include:Q});if(!A)throw e;return this.existingBatch(A,a)}return this.worktrees.publishAutomationChange(i[0],null),this.changed(),B(e)}async updateItem(A,e){let t=await (0,n.U)();await t.$transaction(async t=>{let r=await t.worktreeSyncItem.updateMany({where:{id:A.id,status:A.status},data:e});return r.count&&await t.worktreeSyncBatch.update({where:{id:A.batchId},data:{updatedAt:new Date}}),r.count>0})&&this.worktrees.publishAutomationChange(A.worktreeId,A.codebaseId)}async advance(A){let e,t=await (0,n.U)(),r=A.jobId?await t.agentJob.findUnique({where:{id:A.jobId}}):await t.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:A.agentId,idempotencyKey:`worktree:auto-sync:sync:${A.id}:${A.worktreeId}`}}});if(r){if(f.includes(r.status)){"RUNNING"===A.status&&A.jobId||await this.updateItem(A,{status:"RUNNING",jobId:r.id,startedAt:r.createdAt});return}let e="FAILED",t=r.error;if("SUCCEEDED"===r.status){let A={};try{let e=JSON.parse(r.resultJson??"{}");e&&"object"==typeof e&&!Array.isArray(e)&&(A=e)}catch{}"SYNCED"===A.outcome||"NO_CHANGE"===A.outcome?(e="SUCCEEDED",t=null):"CONFLICT"===A.outcome||"PREPARATION_CONFLICT"===A.outcome?(e="ATTENTION_REQUIRED",t="CONFLICT"===A.outcome?"Resolve the rebase conflicts in this worktree":"Repository preparation paths require manual attention"):t="Sync returned an unknown result; inspect the agent job"}else t||=`Sync ${r.status.toLowerCase()}`;await this.updateItem(A,{status:e,error:t,jobId:r.id,startedAt:r.createdAt,finishedAt:r.finishedAt??new Date}),this.rerunRequested=!0;return}if(A.jobId){await this.updateItem(A,{status:"FAILED",error:"The sync job is no longer available",finishedAt:new Date}),this.rerunRequested=!0;return}let i=await t.worktree.findUnique({where:{id:A.worktreeId},include:w}),a=i&&(i.codebaseId!==A.codebaseId||i.codebase.agentId!==A.agentId||i.branch!==A.branch||i.folder!==A.folder||i.gitDirectory!==A.gitDirectory||i.codebase.repository.canonicalOrigin!==A.expectedOrigin||(i.baseBranchOverride??i.codebase.defaultBranch)!==A.baseBranch),s=i?a?"Worktree identity, branch, or base changed; select it again to sync":y(i):"Worktree was deleted";if(s){await this.updateItem(A,{status:"SKIPPED",error:s,finishedAt:new Date}),this.rerunRequested=!0;return}try{e=await this.worktrees.createAutoSyncJob(A.worktreeId,"SYNC",A.branch,A.id,!1,A)}catch(e){if((0,o.D)(e))return;if(await t.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:A.agentId,idempotencyKey:`worktree:auto-sync:sync:${A.id}:${A.worktreeId}`}}})){this.rerunRequested=!0;return}await this.updateItem(A,{status:"FAILED",error:e instanceof Error?e.message:String(e),finishedAt:new Date}),this.rerunRequested=!0;return}await this.updateItem(A,{status:"RUNNING",jobId:e.id,startedAt:e.createdAt})}async reconcile(){if(this.running){this.rerunRequested=!0;return}this.running=!0;try{let A=async()=>{do{this.rerunRequested=!1;let A=await (0,n.U)(),e=await A.worktreeSyncItem.findMany({where:{status:{in:m},batch:{status:"ACTIVE"}},orderBy:[{createdAt:"asc"},{batchId:"asc"},{position:"asc"}]}),t=new Map;for(let A of e){let e=t.get(A.codebaseId);e&&("RUNNING"===e.status||"RUNNING"!==A.status)||t.set(A.codebaseId,A)}let r=await Promise.allSettled([...t.values()].map(A=>this.advance(A))),i=await A.worktreeSyncBatch.findMany({where:{status:"ACTIVE",items:{none:{status:{in:m}}}},select:{id:!0}});i.length&&(await A.worktreeSyncBatch.updateMany({where:{id:{in:i.map(A=>A.id)},status:"ACTIVE"},data:{status:"COMPLETED",finishedAt:new Date}}),this.worktrees.publishAutomationChange(null,null));let a=r.find(A=>"rejected"===A.status);if(a?.status==="rejected")throw a.reason}while(this.rerunRequested)};this.polling?await this.polling.run(E,A):await A()}catch(A){this.polling||console.error("Bulk Sync reconciliation failed",A)}finally{this.running=!1,this.started&&(this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>void this.reconcile(),5e3),this.timer.unref(),this.polling?.schedule(E,new Date(Date.now()+5e3)))}}}let k="default",b=["QUEUED","RUNNING"],S=new Set([e.l,e.T,e.d,e.o,e.B,e.W,e.R,e.Z,e.r]),R=["PUSHING","CHECKING_OUT","AWAITING_STASH","CLEANING_UP"],M=["gray","stone","red","rose","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","lavender","maroon","brown","olive","navy"],O={codebase:{include:{agent:!0,repository:{include:{projects:{where:{type:"IOS_APP"},include:{configurations:{select:{id:!0}}}}}},jobs:{where:o.i,orderBy:{createdAt:"desc"},take:1}}},tags:{include:{tag:!0}},builds:{orderBy:{createdAt:"desc"},take:1,select:{id:!0,status:!0,action:!0,destinationType:!0,destinationJson:!0,snapshotJson:!0,createdAt:!0,finishedAt:!0,artifacts:{select:{id:!0,kind:!0}}}},autoSync:!0,autoMerge:!0,pullRequest:!0,gitLabMergeRequest:!0,_count:{select:{builds:{where:{status:{in:["QUEUED","PREPARING","RUNNING"]}}}}}};function N(A,e){return{...A?{apps:{some:{appId:A}}}:{},...e?{codebases:{some:{worktrees:{some:{id:e}}}}}:{}}}function H(A){return null!==A.lastSeenAt&&Date.now()-A.lastSeenAt.getTime()<=(0,u.z)(A)&&null===A.disconnectedAt}function v(A){try{let e=JSON.parse(A.capabilitiesJson);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}}function T(A){try{let e=JSON.parse(A);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}}function U(A,e){if(!A||!e)return null;try{let t=(0,s.u)(e,{flags:"i",label:"Jira branch regex"}).exec(A),r=(t?.[1]??t?.[0])?.trim();return r?r.toUpperCase():null}catch{return null}}function J(A){try{let e=JSON.parse(A);return Array.isArray(e)?e:[]}catch{return[]}}function x(A,e){return{id:A.githubId,number:A.number,title:A.title,url:A.url,repositoryGithubId:A.repositoryGithubId,repositoryNameWithOwner:A.repositoryNameWithOwner,repositoryUrl:A.repositoryUrl,labels:J(A.labelsJson),jiraKey:A.jiraKey,pipelineStatus:e?.pipelineStatus??"NONE",pipelines:e?.pipelines??[],pipelineRevision:e?.revision??0,reviewDecision:A.reviewDecision,requestedReviewerCount:A.requestedReviewerCount,unresolvedReviewThreadCount:A.unresolvedReviewThreadCount,state:A.state,isDraft:A.isDraft,mergeable:A.mergeable,mergeStateStatus:A.mergeStateStatus,autoMergeEnabled:A.autoMergeEnabled,viewerCanEnableAutoMerge:A.viewerCanEnableAutoMerge,viewerCanDisableAutoMerge:A.viewerCanDisableAutoMerge,headRefOid:A.headRefOid,headRefName:A.headRefName,worktreeId:A.worktreeId,worktreeHighlightColor:null,createdAt:A.githubCreatedAt.toISOString()}}function _(A){return{reviewDecision:A.reviewDecision,requestedReviewerCount:A.requestedReviewerCount??0,unresolvedReviewThreadCount:A.unresolvedReviewThreadCount,state:A.state,isDraft:A.isDraft,mergeable:A.mergeable,mergeStateStatus:A.mergeStateStatus,autoMergeEnabled:A.autoMergeEnabled,viewerCanEnableAutoMerge:A.viewerCanEnableAutoMerge,viewerCanDisableAutoMerge:A.viewerCanDisableAutoMerge,headRefOid:A.headRefOid}}function G(A){return/^[A-Za-z]:[\\/]/.test(A)||A.startsWith("\\\\")}function L(A,e){if(!e)return A;let t=G(e);if(t!==G(A))return A;let i=t?r.win32:r.posix,n=i.relative(e,A);return i.isAbsolute(n)||".."===n||n.startsWith(`..${i.sep}`)?A:n||"."}function P(A){if("SUCCEEDED"!==A.status||!A.resultJson)throw Error(A.error||"Worktree job failed");let e=JSON.parse(A.resultJson);if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Worktree job returned an invalid result");return e}A.s(["B",0,class{agentControl;jiraService;gitHubService;skillsService;workflowEvents;pipelineStatus;gitLabService;notifications;syncService;get syncBatches(){return this.syncService??=new D(this,this.agentControl)}preparationInspections;watchDemand;constructor(A,t,r,i,n,a=new h.f,s,o){this.agentControl=A,this.jiraService=t,this.gitHubService=r,this.skillsService=i,this.workflowEvents=n,this.pipelineStatus=a,this.gitLabService=s,this.notifications=o,this.preparationInspections=new Map,this.watchDemand=new Map,this.agentControl.registerCompletionHandler(e.l,A=>this.projectOperation(A)),this.agentControl.registerCompletionHandler(e.T,A=>this.projectOperation(A)),this.agentControl.registerCompletionHandler(e.d,A=>this.projectOperation(A)),this.agentControl.registerCompletionHandler(e.o,A=>this.projectOperation(A)),this.agentControl.registerCompletionHandler(e.B,A=>this.projectBranchOperation(A)),this.agentControl.registerCompletionHandler(e.W,A=>this.advanceMoveAfterPush(A)),this.agentControl.registerCompletionHandler(e.R,A=>this.advanceMoveAfterCheckout(A)),this.agentControl.registerCompletionHandler(e.Z,A=>this.projectDeleteOperation(A)),this.agentControl.registerCompletionHandler(e.r,A=>this.projectPreparationOperation(A))}async preparationOverview(){let A=await (0,n.U)(),[t,r,i,a]=await Promise.all([A.codebaseRepository.findMany({where:{codebases:{some:{}}},include:{preparations:{orderBy:[{kind:"asc"},{path:"asc"}]}},orderBy:[{name:"asc"},{canonicalOrigin:"asc"}]}),A.worktree.findMany({include:O,orderBy:[{codebase:{repository:{name:"asc"}}},{codebase:{agent:{name:"asc"}}},{primary:"desc"},{branch:"asc"},{folder:"asc"}]}),A.worktreePreparationStatus.findMany(),A.agentJob.findMany({where:{kind:e.r,status:{in:b}},orderBy:{createdAt:"desc"}})]),s=new Map(i.map(A=>[`${A.worktreeId}\0${A.preparationId}`,A])),o=new Map;for(let A of a){A.worktreeId&&o.set(A.worktreeId,A);try{let e=JSON.parse(A.payloadJson);if(!e||"object"!=typeof e||Array.isArray(e))continue;let t=e.worktrees;if(!Array.isArray(t))continue;for(let e of t)e&&"object"==typeof e&&!Array.isArray(e)&&"string"==typeof e.worktreeId&&o.set(String(e.worktreeId),A)}catch{}}let l=new Map;for(let A of r){let e=A.codebase.repositoryId;l.set(e,[...l.get(e)??[],A])}return{repositories:t.map(A=>({repository:A,worktrees:(l.get(A.id)??[]).map(t=>{let r=!t.missingAt&&"AVAILABLE"===t.availability&&H(t.codebase.agent)&&v(t.codebase.agent).includes(e.r),i=A.preparations.map(A=>{let e=s.get(`${t.id}\0${A.id}`),r=e?.definitionHash===A.definitionHash?e.state:"PENDING";return{preparation:A,state:r,message:e?.message??null,checkedAt:e?.definitionHash===A.definitionHash?e.checkedAt:null}});return{worktree:this.view(t),agent:t.codebase.agent,supported:r,unsupportedReason:r?null:t.missingAt||"AVAILABLE"!==t.availability?"Worktree is unavailable":H(t.codebase.agent)?"Agent must be updated to use preparations":"Agent is offline",overallState:(0,I.a)(i.map(A=>A.state)),statuses:i,activeJob:o.get(t.id)??null}})}))}}async runPreparations(A,t,r){if(!r.trim())throw Error("requestId is required");if(!e.u.includes(t))throw Error("Unknown preparation action");let i=[...new Set(A)];if(i.length!==A.length||i.length>500)throw Error("worktreeIds must be unique and contain at most 500 values");let a=await (0,n.U)(),s=new Map((await a.worktree.findMany({where:{id:{in:i}},include:{codebase:{include:{agent:!0,repository:{include:{preparations:!0}}}}}})).map(A=>[A.id,A])),o=[],l=[],c=new Map;for(let A of i){let t=s.get(A),r=null;if(!t||t.missingAt||"AVAILABLE"!==t.availability?r="Worktree is unavailable":H(t.codebase.agent)?v(t.codebase.agent).includes(e.r)||(r="Agent must be updated to use preparations"):r="Agent is offline",r||!t){l.push({worktreeId:A,reason:r??"Worktree not found"});continue}c.set(t.codebaseId,[...c.get(t.codebaseId)??[],t])}for(let[A,i]of c){let n=i[0];try{o.push(await this.createPreparationJob({agentId:n.codebase.agentId,codebaseId:A,worktreeId:1===i.length?n.id:null,kind:e.r,payload:{codebaseId:A,expectedOrigin:n.codebase.repository.canonicalOrigin,action:t,preparations:n.codebase.repository.preparations.map(I.U),worktrees:i.map(A=>({worktreeId:A.id,folder:A.folder,gitDirectory:A.gitDirectory}))},idempotencyKey:`worktree:prepare:${t.toLowerCase()}:${r}:${A}`,timeoutSeconds:600},"INSPECT"===t))}catch(A){for(let e of i)l.push({worktreeId:e.id,reason:A instanceof Error?A.message:String(A)})}}return{jobs:o,skipped:l}}createPreparationJob(A,e){if(!e)return this.agentControl.createJob(A);let t=JSON.stringify(A.payload),r=JSON.stringify([A.agentId,A.codebaseId,t]),i=this.preparationInspections.get(r);if(i)return i;let a=(async()=>{let e=await (0,n.U)();return await e.agentJob.findFirst({where:{agentId:A.agentId,codebaseId:A.codebaseId,kind:A.kind,status:{in:["QUEUED","RUNNING"]},payloadJson:t}})??this.agentControl.createJob(A)})().finally(()=>this.preparationInspections.delete(r));return this.preparationInspections.set(r,a),a}async settings(){return(await (0,n.U)()).worktreeSettings.upsert({where:{id:k},create:{id:k,editorVariant:"CODE"},update:{}})}async saveSettings(A){let e="string"==typeof A?{editorVariant:A}:A,t=e.editorVariant??void 0;if(t&&!["CODE","CODE_INSIDERS","NONE"].includes(t))throw Error("Unknown editor setting");let r=await (0,n.U)();if(e.highlightColorMode&&!["SPREAD","RANDOM"].includes(e.highlightColorMode))throw Error("Unknown highlight color mode");let i={editorVariant:t,autoAssignHighlightColor:e.autoAssignHighlightColor??void 0,highlightColorMode:e.highlightColorMode??void 0},a=await r.worktreeSettings.upsert({where:{id:k},create:{id:k,...i},update:i});return this.publish(null,null),a}async requestRefresh(){let A=await (0,n.U)(),e=await A.codebase.findMany({select:{agentId:!0}});return this.agentControl.requestCodebaseReconcile(e.map(A=>A.agentId))}async cleanupExpired(){let A=await (0,n.U)();await A.worktree.deleteMany({where:{missingAt:{lt:new Date(Date.now()-6048e5)}}})}view(A,t=""){var r;let i=A.codebase.repository.jiraBranchRegex??t,n=!A.pullRequestLookupOrigin&&!A.pullRequestLookupBranch||A.pullRequestLookupOrigin?.toLowerCase()===A.codebase.repository.canonicalOrigin.toLowerCase()&&A.pullRequestLookupBranch===A.branch,a=n&&A.pullRequest?x(A.pullRequest):null,s=n&&A.gitLabMergeRequest?{id:(r=A.gitLabMergeRequest).gitlabId,iid:r.iid,projectId:r.projectId,title:r.title,description:r.description,state:r.state,draft:r.draft,webUrl:r.webUrl,sourceBranch:r.sourceBranch,targetBranch:r.targetBranch,sha:r.sha,author:JSON.parse(r.authorJson),reviewers:J(r.reviewersJson),labels:J(r.labelsJson),detailedMergeStatus:r.detailedMergeStatus,mergeWhenPipelineSucceeds:r.mergeWhenPipelineSucceeds,squashOnMerge:r.squashOnMerge,hasConflicts:r.hasConflicts,blockingDiscussionsResolved:r.blockingDiscussionsResolved,createdAt:r.gitlabCreatedAt.toISOString(),updatedAt:r.gitlabUpdatedAt.toISOString(),mergedAt:r.mergedAt?.toISOString()??null}:null;return{...A,relativePath:L(A.folder,A.codebase.agent.baseRepoDirectory),tags:A.tags.map(A=>A.tag),activeJob:A.codebase.jobs.find(t=>t.worktreeId===A.id&&function(A){if(!S.has(A.kind))return!1;if(A.kind!==e.l)return!0;try{let e=JSON.parse(A.payloadJson);return!!e&&"object"==typeof e&&!Array.isArray(e)&&"string"==typeof e.operation&&"OPEN_EDITOR"!==e.operation}catch{return!1}}(t))??null,baseBranch:A.baseBranchOverride??A.codebase.defaultBranch??null,ticketKey:U(A.branch,String(i)),ticketTitle:null,ticketStatus:null,pullRequest:a,gitLabMergeRequest:s,sourceControlRequest:s??a,gitLabPipelines:[],latestBuild:A.builds?.[0]?{...A.builds[0],outOfDate:(0,p.f)({...A.builds[0],worktree:A})}:null}}async storePullRequest(A,e,t,r){let i=await (0,n.U)(),a=new Date;await i.$transaction(async i=>{if(await i.worktree.update({where:{id:A},data:{pullRequestLookupOrigin:e,pullRequestLookupBranch:t,pullRequestLookupAt:a}}),r){let e={githubId:r.id,number:r.number,title:r.title,url:r.url,repositoryGithubId:r.repositoryGithubId,repositoryNameWithOwner:r.repositoryNameWithOwner,repositoryUrl:r.repositoryUrl,labelsJson:JSON.stringify(r.labels),jiraKey:r.jiraKey,reviewDecision:r.reviewDecision,requestedReviewerCount:r.requestedReviewerCount??0,unresolvedReviewThreadCount:r.unresolvedReviewThreadCount,state:r.state,isDraft:r.isDraft,mergeable:r.mergeable,mergeStateStatus:r.mergeStateStatus,autoMergeEnabled:r.autoMergeEnabled,viewerCanEnableAutoMerge:r.viewerCanEnableAutoMerge,viewerCanDisableAutoMerge:r.viewerCanDisableAutoMerge,headRefOid:r.headRefOid,headRefName:r.headRefName,githubCreatedAt:new Date(r.createdAt)};await i.worktreeGitLabMergeRequest?.deleteMany({where:{worktreeId:A}}),await i.worktreePullRequest.upsert({where:{worktreeId:A},create:{worktreeId:A,...e},update:e})}else await i.worktreePullRequest.deleteMany({where:{worktreeId:A}})})}async storeGitLabMergeRequest(A,e,t,r){let i=await (0,n.U)();await i.$transaction(async i=>{if(await i.worktree.update({where:{id:A},data:{pullRequestLookupOrigin:e,pullRequestLookupBranch:t,pullRequestLookupAt:new Date}}),await i.worktreePullRequest.deleteMany({where:{worktreeId:A}}),r){let e={sourceControlProvider:"GITLAB",gitlabId:r.id,iid:r.iid,projectId:r.projectId,title:r.title,description:r.description,webUrl:r.webUrl,state:r.state,draft:r.draft,sourceBranch:r.sourceBranch,targetBranch:r.targetBranch,sha:r.sha,authorJson:JSON.stringify(r.author),reviewersJson:JSON.stringify(r.reviewers),labelsJson:JSON.stringify(r.labels),detailedMergeStatus:r.detailedMergeStatus,mergeWhenPipelineSucceeds:r.mergeWhenPipelineSucceeds,squashOnMerge:r.squashOnMerge,hasConflicts:r.hasConflicts,blockingDiscussionsResolved:r.blockingDiscussionsResolved,gitlabCreatedAt:new Date(r.createdAt),gitlabUpdatedAt:new Date(r.updatedAt),mergedAt:r.mergedAt?new Date(r.mergedAt):null};await i.worktreeGitLabMergeRequest?.upsert({where:{worktreeId:A},create:{worktreeId:A,...e},update:e})}else await i.worktreeGitLabMergeRequest?.deleteMany({where:{worktreeId:A}})})}async clearPullRequest(A,e=!0){let t=await (0,n.U)(),r=t.worktreeGitLabMergeRequest?.deleteMany({where:{worktreeId:A}});await t.$transaction([t.worktreePullRequest.deleteMany({where:{worktreeId:A}}),...r?[r]:[],...e?[t.worktree.update({where:{id:A},data:{pullRequestLookupOrigin:null,pullRequestLookupBranch:null,pullRequestLookupAt:null}})]:[]])}async synchronizePullRequests(A,e){let t=await (0,n.U)(),r=await this.gitHubService.effectiveCacheTtlSeconds("GitHubWorktreePullRequests")*1e3,i=new Set,a=new Map;for(let e of A){let A=e.codebase.repository.canonicalOrigin;!(e.branch&&e.pullRequestLookupOrigin?.toLowerCase()===A.toLowerCase()&&e.pullRequestLookupBranch===e.branch)&&(e.pullRequest||e.pullRequestLookupOrigin||e.pullRequestLookupBranch||e.pullRequestLookupAt)&&(await this.clearPullRequest(e.id),e.pullRequest=null,e.gitLabMergeRequest=null,e.pullRequestLookupOrigin=null,e.pullRequestLookupBranch=null,e.pullRequestLookupAt=null)}let s=A.filter(A=>A.pullRequest);if(s.length)try{let A=await this.gitHubService.pullRequestLiveStatuses(s.flatMap(A=>A.pullRequest?[A.pullRequest.id]:[]),{requestSource:"WORKTREES"});for(let e of s){let r=e.pullRequest;if(!r)continue;let n=A.get(r.id)??null;if(!n||"OPEN"!==n.state){a.set(e.id,r),e.pullRequest=null,i.add(e.id);continue}let s=_(n),o=_(r);JSON.stringify(s)!==JSON.stringify(o)&&(await t.worktreePullRequest.updateMany({where:{worktreeId:e.id},data:s}),e.pullRequest={...r,...n})}}catch{for(let A of s)e?.(A,"Could not refresh GitHub pull request status. Try again.")}let o=Date.now(),l=A.filter(A=>{if(A.pullRequest||!A.branch)return!1;let e=A.codebase.repository.canonicalOrigin;return!!/^github\.com\/[^/]+\/[^/]+$/i.test(e)&&(!!i.has(A.id)||A.pullRequestLookupOrigin?.toLowerCase()!==e.toLowerCase()||A.pullRequestLookupBranch!==A.branch||!A.pullRequestLookupAt||o-A.pullRequestLookupAt.getTime()>=r)}),c=new Map;for(let A of l){let e=A.codebase.repository.canonicalOrigin,t=`${i.has(A.id)?"force":"cached"}\0${e}`;c.set(t,[...c.get(t)??[],A])}await Promise.all([...c.entries()].map(async([A,t])=>{let r=A.startsWith("force\0"),i=t[0].codebase.repository.canonicalOrigin;try{let A=await this.gitHubService.pullRequestsForBranches(i,t.flatMap(A=>A.branch?[A.branch]:[]),{force:r,allowStaleOnError:!r,requestSource:"WORKTREES"});await Promise.all(t.map(async e=>{let t=e.branch,r=A.get(t)??null;await this.storePullRequest(e.id,i,t,r),e.pullRequest=r,e.pullRequestLookupOrigin=i,e.pullRequestLookupBranch=t,e.pullRequestLookupAt=new Date}))}catch{for(let A of t){let e=a.get(A.id);e&&(A.pullRequest=e)}for(let A of t)e?.(A,"Could not discover GitHub pull requests. Try again.")}}))}async synchronizeGitLabMergeRequests(A,e,t){if(!this.gitLabService)return;let r=Date.now(),i=t??await this.gitLabProjects(A,e);await (0,a.f)(A,async A=>{if(!A.branch)return;let t=A.codebase.repository.canonicalOrigin,n=i.get(t);if(!n)return;let a=A.pullRequestLookupOrigin?.toLowerCase()===t.toLowerCase()&&A.pullRequestLookupBranch===A.branch,s=A.gitLabMergeRequest?.detailedMergeStatus==="ci_still_running";if(!(a&&A.pullRequestLookupAt&&r-A.pullRequestLookupAt.getTime()<3e5)||s)try{let e=await this.gitLabService.mergeRequestForBranch(n.id,A.branch,s);await this.storeGitLabMergeRequest(A.id,t,A.branch,e),A.gitLabMergeRequest=e,A.pullRequest=null,A.pullRequestLookupOrigin=t,A.pullRequestLookupBranch=A.branch,A.pullRequestLookupAt=new Date}catch{e?.(A,"Could not refresh GitLab merge requests. Try again.")}})}async hydratePullRequestPipelines(A){let e=new Map((await this.pipelineStatus.snapshots(A.flatMap(A=>A.pullRequest?[{repositoryGithubId:A.pullRequest.repositoryGithubId,headSha:A.pullRequest.headRefOid}]:[]))).map(A=>[`${A.repositoryGithubId}\0${A.headSha}`,A]));for(let t of A){if(!t.pullRequest)continue;let A=e.get(`${t.pullRequest.repositoryGithubId}\0${t.pullRequest.headRefOid}`);t.pullRequest={...t.pullRequest,pipelineStatus:A?.pipelineStatus??t.pullRequest.pipelineStatus,pipelines:A?.pipelines??t.pullRequest.pipelines,pipelineRevision:A?.revision??t.pullRequest.pipelineRevision??0}}}async hydrateGitLabPipelines(A,e,t=!0,r){if(!this.gitLabService)return;let i=r??await this.gitLabProjects(A,e),n=new Map;for(let e of A){let A=i.get(e.codebase.repository.canonicalOrigin);if(!A||!e.headSha)continue;let t=`${A.id}\0${e.headSha}`,r=n.get(t)??{projectId:A.id,headSha:e.headSha,targets:[]};r.targets.push(e),n.set(t,r)}await (0,a.f)([...n.values()],async({projectId:A,headSha:r,targets:i})=>{try{let n=await this.gitLabService.pipelinesForCommit(A,r,{force:t,onWarning:A=>i.forEach(t=>e?.(t,A))});for(let A of i)A.gitLabPipelines=n.map(e=>({...e,worktreeId:A.id,worktreeHighlightColor:A.highlightColor}))}catch{for(let A of i)e?.(A,"Could not refresh GitLab pipelines; saved status is still available. Try again.")}})}async hydrateGitLabMergeRequestSummaries(A,e){this.gitLabService&&await (0,a.f)(A,async A=>{if(A.gitLabMergeRequest)try{A.gitLabMergeRequest=await this.gitLabService.mergeRequestSummary(A.gitLabMergeRequest,e?(t,r)=>e(A,t,r):void 0)}catch{e?.(A,"Could not refresh GitLab approval and discussion details. Try again.",["APPROVAL_STATE","UNRESOLVED_DISCUSSIONS_COUNT"])}})}async gitLabProjects(A,e){let t=[...new Set(A.map(A=>A.codebase.repository.canonicalOrigin))];return new Map(await (0,a.f)(t,async t=>{try{return[t,await this.gitLabService.projectForCanonicalOrigin(t)]}catch{for(let r of A)r.codebase.repository.canonicalOrigin===t&&e?.(r,"Could not read GitLab project settings. Check the GitLab connection and try again.");return[t,null]}}))}async hydrateJira(A,e,t){let r=[...new Set(A.flatMap(A=>A.ticketKey?[A.ticketKey]:[]))],i=e?await this.jiraService.storedSummaries(r):new Map(await (0,a.f)(r,async e=>{try{return[e,await this.jiraService.summary(e,!0)]}catch{for(let r of A)r.ticketKey===e&&t?.(r,"Could not refresh this Jira summary. Try again.");return[e,null]}}));for(let e of A){let A=e.ticketKey?i.get(e.ticketKey):null;e.ticketTitle=A?.summary??null,e.ticketStatus=A?.status??null}}async hydrateStoredMetadata(A){await Promise.all([this.hydratePullRequestPipelines(A),this.hydrateJira(A,!0),(async()=>{if(!this.gitLabService)return;let e=await this.gitLabProjects(A),t=new Map;for(let r of A){let A=e.get(r.codebase.repository.canonicalOrigin);A&&r.headSha&&t.set(`${A.id}\0${r.headSha}`,{projectId:A.id,headSha:r.headSha})}let r=await this.gitLabService.storedPipelines([...t.values()]);for(let t of A){let A=e.get(t.codebase.repository.canonicalOrigin);t.gitLabPipelines=(r.get(`${A?.id}\0${t.headSha}`)??[]).map(A=>({...A,worktreeId:t.id,worktreeHighlightColor:t.highlightColor}))}})()])}async enrichment({appId:A,worktreeId:e,kind:t,force:r=!1}){let i=performance.now(),a=await (0,n.U)(),[s,o]=await Promise.all([a.worktree.findMany({where:{missingAt:null,codebase:{repository:N(A,e)}},include:O}),a.codebaseSettings.findUnique({where:{id:"default"}})]),l=s.map(A=>this.view(A,o?.defaultJiraBranchRegex??"")),c="GITHUB"===t?l.filter(A=>/^github\.com\//i.test(A.codebase.repository.canonicalOrigin)):l,d=[],u=new Set,g=(A,e,t=[])=>{d.push({worktreeId:A.id,message:e,preserveFields:t})},h=(A,e)=>{u.add(A.id),g(A,e)};try{let A=t.startsWith("GITLAB")&&this.gitLabService?await this.gitLabProjects(c,h):new Map;switch(t.startsWith("GITLAB")&&(c=c.filter(e=>A.get(e.codebase.repository.canonicalOrigin))),t){case"GITHUB":await this.synchronizePullRequests(c,h),await this.hydratePullRequestPipelines(c);break;case"GITLAB_MERGE_REQUESTS":await this.synchronizeGitLabMergeRequests(c,h,A),await this.hydrateGitLabMergeRequestSummaries(c,g);break;case"GITLAB_PIPELINES":await this.hydrateGitLabPipelines(c,h,r,A);break;case"JIRA":await this.hydrateJira(c,!1,h);break;default:throw Error("Unknown worktree enrichment kind")}}catch{for(let A of c)h(A,"Could not refresh optional metadata. Try again.")}return{updates:c.filter(A=>!u.has(A.id)).map(A=>({worktree:{...A,sourceControlRequest:A.gitLabMergeRequest??A.pullRequest},canonicalOrigin:A.codebase.repository.canonicalOrigin})),durationMs:performance.now()-i,warnings:d}}async hydratedView(A,e=""){let t=this.view(A,e);return await Promise.all([this.hydratePullRequestPipelines([t]),this.hydrateGitLabPipelines([t]),this.hydrateGitLabMergeRequestSummaries([t])]),t.sourceControlRequest=t.gitLabMergeRequest??t.pullRequest,t}async refreshPullRequest(A){let e=await (0,n.U)(),t=await e.worktree.findUnique({where:{id:A},include:O});if(!t||t.missingAt)throw Error("Worktree not found");let r=t.codebase.repository.canonicalOrigin;if(!t.branch)throw Error("A named worktree branch is required");let i=await this.gitLabService?.projectForCanonicalOrigin(r);if(i){let n=await this.gitLabService.mergeRequestForBranch(i.id,t.branch,!0);await this.storeGitLabMergeRequest(A,r,t.branch,n);let a=await e.worktree.findUniqueOrThrow({where:{id:A},include:O});return this.publish(A,t.codebaseId),this.hydratedView(a)}if(!/^github\.com\/[^/]+\/[^/]+$/i.test(r))throw Error("The worktree repository does not match configured GitHub or GitLab projects");let a=await this.gitHubService.pullRequestsForBranches(r,[t.branch],{force:!0,allowStaleOnError:!1,requestSource:"WORKTREES"});await this.storePullRequest(A,r,t.branch,a.get(t.branch)??null);let s=await e.worktree.findUniqueOrThrow({where:{id:A},include:O});return this.publish(A,t.codebaseId),this.hydratedView(s)}async attachPullRequestForBranch(A,e,t){let r=await (0,n.U)(),i=(await r.worktree.findMany({where:{branch:e,missingAt:null},select:{id:!0,codebaseId:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}})).filter(e=>e.codebase.repository.canonicalOrigin.toLowerCase()===A.toLowerCase());return await Promise.all(i.map(async r=>{await this.storePullRequest(r.id,A,e,t),this.publish(r.id,r.codebaseId)})),i.length}async overview(A,e,t=!1){let r=performance.now();await this.cleanupExpired();let i=await (0,n.U)(),a=N(A,e),[s,o,d,u,g,h]=await Promise.all([i.worktree.findMany({where:{missingAt:null,...A||e?{codebase:{repository:a}}:{}},include:O,orderBy:[{codebase:{agent:{name:"asc"}}},{codebase:{repository:{name:"asc"}}},{primary:"desc"},{branch:"asc"},{folder:"asc"}]}),i.worktreeTag.findMany({orderBy:{name:"asc"}}),this.settings(),i.codebaseSettings.findUnique({where:{id:"default"}}),i.worktree.count({where:{missingAt:{not:null},...A||e?{codebase:{repository:a}}:{}}}),i.worktreeMove.findMany({where:{status:{in:R}},orderBy:{createdAt:"asc"}})]),C=u?.defaultJiraBranchRegex??"",p=s.map(A=>this.view(A,C)),I=new Set(p.map(A=>A.codebase.id)),m=A||e?h.filter(A=>I.has(A.sourceCodebaseId)||I.has(A.targetCodebaseId)):h,f=[...new Set(p.map(A=>A.codebase.repository.id))],E=(await i.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null},quickActionKind:{in:["STANDARD","MERGE_CONFLICT"]},OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:{in:f}}}}]},include:{activeVersion:{include:{triggers:!0}},quickActionRepositories:{select:{repositoryId:!0}}},orderBy:[{name:"asc"},{id:"asc"}]})).filter(A=>A.activeVersion?.triggers.some(A=>{if(!(0,c.g)(A.kind))return!1;try{return"WORKTREE"===(0,l.F)(JSON.parse(A.configJson))}catch{return!1}}));for(let A of(t?await this.hydrateStoredMetadata(p):(await this.synchronizePullRequests(p),await this.synchronizeGitLabMergeRequests(p),await Promise.all([this.hydratePullRequestPipelines(p),this.hydrateGitLabPipelines(p),this.hydrateGitLabMergeRequestSummaries(p),this.hydrateJira(p,!1)])),p))A.sourceControlRequest=A.gitLabMergeRequest??A.pullRequest;let w=new Map;for(let A of p){let e=A.codebase.agent,t=w.get(e.id);t||(t={agent:e,codebases:[],codebaseMap:new Map},w.set(e.id,t));let r=t.codebaseMap.get(A.codebase.id);r||(r={codebase:A.codebase,repository:A.codebase.repository,worktrees:[],blockingJob:A.codebase.jobs[0]??null,iosBuildConfigured:A.codebase.repository.projects?.some(A=>"IOS_APP"===A.type)??!1,quickActions:E.filter(e=>"STANDARD"===e.quickActionKind&&(0===e.quickActionRepositories.length||e.quickActionRepositories.some(({repositoryId:e})=>e===A.codebase.repository.id))),mergeConflictQuickActions:E.filter(e=>"MERGE_CONFLICT"===e.quickActionKind&&(0===e.quickActionRepositories.length||e.quickActionRepositories.some(({repositoryId:e})=>e===A.codebase.repository.id)))},t.codebaseMap.set(A.codebase.id,r),t.codebases.push(r)),r.worktrees.push(A)}return{agents:[...w.values()].map(A=>({agent:A.agent,codebases:A.codebases})),tags:o,settings:d,hiddenCount:g,activeMoves:m,syncScope:{appId:A,worktreeId:e},durationMs:performance.now()-r}}async hidden(A){await this.cleanupExpired();let e=await (0,n.U)(),t=await e.codebaseSettings.findUnique({where:{id:"default"}}),r=(await e.worktree.findMany({where:{missingAt:{not:null},...A?{codebase:{repository:{apps:{some:{appId:A}}}}}:{}},include:O,orderBy:{missingAt:"desc"}})).map(A=>this.view(A,t?.defaultJiraBranchRegex??""));return await this.hydratePullRequestPipelines(r),r}async report(A,r){let i=await (0,n.U)(),a=[],s=!1;for(let n of r.slice(0,100)){let r=(0,e.D)(n),o=await i.codebase.findUnique({where:{id:r.codebaseId}});if(!o||o.agentId!==A)throw Error("Codebase not found for this agent");let l=r.worktrees.slice(0,1e3).map(A=>(0,e.y)(A)),c=await i.worktree.findMany({where:{codebaseId:o.id},select:{gitDirectory:!0,folder:!0,missingAt:!0}}),d=new Map(c.map(A=>[A.gitDirectory,A])),u=new Set(l.map(A=>A.gitDirectory));s||=l.some(A=>{let e=d.get(A.gitDirectory);return!e||e.folder!==A.folder||null!==e.missingAt})||r.complete&&c.some(A=>null===A.missingAt&&!u.has(A.gitDirectory)),await i.$transaction(async A=>{await A.codebase.update({where:{id:o.id},data:{defaultBranch:r.defaultBranch,localBranchesJson:JSON.stringify(r.localBranches),remoteBranchesJson:JSON.stringify(r.remoteBranches),...r.fetchedAt?{lastFetchedAt:new Date(r.fetchedAt)}:{},...r.fetchAttemptedAt?{lastFetchAttemptAt:new Date(r.fetchAttemptedAt),lastFetchError:r.fetchError}:r.fetchError?{lastFetchError:r.fetchError}:{}}});let e=[];for(let r of l){e.push(r.gitDirectory);let i=await A.worktree.upsert({where:{codebaseId_gitDirectory:{codebaseId:o.id,gitDirectory:r.gitDirectory}},create:{id:(0,t.randomUUID)(),codebaseId:o.id,gitDirectory:r.gitDirectory,...this.inventoryData(r)},update:{}}),n=i.branch!==r.branch,s=await A.worktree.updateMany({where:{id:i.id,OR:[{lastCheckedAt:null},{lastCheckedAt:{lt:new Date(r.checkedAt)}}]},data:{...this.inventoryData(r),missingAt:null,...n?{pullRequestLookupOrigin:null,pullRequestLookupBranch:null,pullRequestLookupAt:null}:{}}});n&&s.count>0&&await A.worktreePullRequest.deleteMany({where:{worktreeId:i.id}}),a.push(i.id)}r.complete&&await A.worktree.updateMany({where:{codebaseId:o.id,missingAt:null,...e.length?{gitDirectory:{notIn:e}}:{}},data:{missingAt:new Date}})}),this.publish(null,o.id)}return await this.cleanupExpired(),s&&await this.skillsService?.requestAutoReconcile(),i.worktree.findMany({where:{id:{in:a}},include:O})}async reportActivity(A,t){let r=(0,e.a)(t),i=await (0,n.U)(),a=await i.worktree.findFirst({where:{codebaseId:r.codebaseId,gitDirectory:r.gitDirectory,missingAt:null,codebase:{agentId:A}},select:{id:!0,codebaseId:!0,branch:!0}});if(!a)throw Error("Worktree activity source was not found");let s=void 0!==r.branch||void 0!==r.headSha||void 0!==r.upstream||void 0!==r.ahead||void 0!==r.behind||void 0!==r.syncState||void 0!==r.baseAhead||void 0!==r.baseBehind,o=!0;if(s||void 0!==r.hasStagedChanges||void 0!==r.hasUnstagedChanges||void 0!==r.rebaseInProgress||void 0!==r.hasConflicts||void 0!==r.codeStateHash||void 0!==r.pushStatus){let A=void 0!==r.branch&&r.branch!==a.branch;(o=(await i.worktree.updateMany({where:{id:a.id,OR:[{lastCheckedAt:null},{lastCheckedAt:{lt:new Date(r.observedAt)}}]},data:{...void 0===r.branch?{}:{branch:r.branch},...A?{pullRequestLookupOrigin:null,pullRequestLookupBranch:null,pullRequestLookupAt:null}:{},...void 0===r.headSha?{}:{headSha:r.headSha},...void 0===r.upstream?{}:{upstream:r.upstream},...void 0===r.ahead?{}:{ahead:r.ahead},...void 0===r.behind?{}:{behind:r.behind},...void 0===r.syncState?{}:{syncState:r.syncState},...void 0===r.baseAhead?{}:{baseAhead:r.baseAhead},...void 0===r.baseBehind?{}:{baseBehind:r.baseBehind},lastCheckedAt:new Date(r.observedAt),...void 0===r.hasStagedChanges?{}:{hasStagedChanges:r.hasStagedChanges},...void 0===r.hasUnstagedChanges?{}:{hasUnstagedChanges:r.hasUnstagedChanges},...void 0===r.rebaseInProgress?{}:{rebaseInProgress:r.rebaseInProgress},...void 0===r.hasConflicts?{}:{hasConflicts:r.hasConflicts},...void 0===r.codeStateHash?{}:{codeStateHash:r.codeStateHash},...void 0===r.pushStatus?{}:{pushStatus:r.pushStatus}}})).count>0)&&(A&&await i.worktreePullRequest.deleteMany({where:{worktreeId:a.id}}),this.publish(a.id,a.codebaseId))}let l={worktreeId:a.id,...void 0===r.branch?{}:{branch:r.branch},...void 0===r.headSha?{}:{headSha:r.headSha},...void 0===r.upstream?{}:{upstream:r.upstream},...void 0===r.ahead?{}:{ahead:r.ahead},...void 0===r.behind?{}:{behind:r.behind},...void 0===r.syncState?{}:{syncState:r.syncState},...void 0===r.baseAhead?{}:{baseAhead:r.baseAhead},...void 0===r.baseBehind?{}:{baseBehind:r.baseBehind},...void 0===r.hasStagedChanges?{}:{hasStagedChanges:r.hasStagedChanges},...void 0===r.hasUnstagedChanges?{}:{hasUnstagedChanges:r.hasUnstagedChanges},...void 0===r.rebaseInProgress?{}:{rebaseInProgress:r.rebaseInProgress},...void 0===r.hasConflicts?{}:{hasConflicts:r.hasConflicts},...void 0===r.pushStatus?{}:{pushStatus:r.pushStatus},observedAt:r.observedAt};return this.watchDemand.has(a.id)&&o&&g._H.publish((0,g.ys)(a.id),{worktreeInspectionChanged:l}),l}inventoryData(A){return{folder:A.folder,relativePath:A.relativePath,primary:A.primary,branch:A.branch,headSha:A.headSha,codeStateHash:A.codeStateHash??null,upstream:A.upstream,ahead:A.ahead,behind:A.behind,syncState:A.syncState,baseAhead:A.baseAhead,baseBehind:A.baseBehind,hasStagedChanges:A.hasStagedChanges??!1,hasUnstagedChanges:A.hasUnstagedChanges??!1,rebaseInProgress:A.rebaseInProgress??!1,hasConflicts:A.hasConflicts??!1,pushStatus:A.pushStatus??"UNKNOWN",availability:A.availability,statusError:A.error,lastCheckedAt:new Date(A.checkedAt)}}async updateBaseBranch(A,e){let t=await (0,n.U)(),r=await t.worktree.findUnique({where:{id:A},include:{codebase:!0}});if(!r||r.missingAt)throw Error("Worktree not found");let i=e?.trim()||null;if(i&&!T(r.codebase.remoteBranchesJson).includes(i))throw Error("The selected origin branch is unavailable; fetch and try again");let a=await t.worktree.update({where:{id:A},data:{baseBranchOverride:i},include:O});return this.publish(A,r.codebaseId),await this.restartWatch(A),this.hydratedView(a)}requireColor(A){if(null===A||""===A)return null;if(!M.includes(A))throw Error("Unknown worktree color");return A}async updateHighlight(A,e){let t=await (0,n.U)(),r=await t.worktree.update({where:{id:A},data:{highlightColor:this.requireColor(e),initialHighlightApplied:!0},include:O});return this.publish(A,r.codebaseId),this.hydratedView(r)}async setTags(A,e){let t=await (0,n.U)(),r=[...new Set(e)].slice(0,100);if(await t.worktreeTag.count({where:{id:{in:r}}})!==r.length)throw Error("One or more tags were not found");await t.$transaction([t.worktreeTagAssignment.deleteMany({where:{worktreeId:A}}),...r.length?[t.worktreeTagAssignment.createMany({data:r.map(e=>({worktreeId:A,tagId:e}))})]:[]]);let i=await t.worktree.findUniqueOrThrow({where:{id:A},include:O});return this.publish(A,i.codebaseId),this.hydratedView(i)}async saveTag(A){let e=A.name.trim();if(!e||e.length>40)throw Error("Tag names must contain 1–40 characters");let r=this.requireColor(A.color),i=await (0,n.U)(),a=(await i.worktreeTag.findMany()).find(A=>A.name.toLocaleLowerCase()===e.toLocaleLowerCase());if(a&&a.id!==A.id)throw Error("Tag names must be unique");let s=A.id?await i.worktreeTag.update({where:{id:A.id},data:{name:e,color:r}}):await i.worktreeTag.create({data:{id:(0,t.randomUUID)(),name:e,color:r}});return this.publish(null,null),s}async deleteTag(A){let e=await (0,n.U)(),t=await e.worktreeTag.deleteMany({where:{id:A}});return t.count&&this.publish(null,null),t.count>0}async repositoryTakenBranches(A){let e=await (0,n.U)();return new Set((await e.codebase.findMany({where:{repositoryId:A},select:{localBranchesJson:!0,remoteBranchesJson:!0,worktrees:{where:{missingAt:null},select:{branch:!0}}}})).flatMap(A=>[...T(A.localBranchesJson),...T(A.remoteBranchesJson),...A.worktrees.flatMap(A=>A.branch?[A.branch]:[])]))}requireBaseBranch(A,e){let t=e.trim();if(!t||!T(A.remoteBranchesJson).includes(t))throw Error("The selected origin base branch is unavailable; fetch and try again");return t}async ticketContext(A){let e=await (0,n.U)(),t=await e.codebase.findUnique({where:{id:A.codebaseId},include:{agent:!0,repository:!0}});if(!t)throw Error("Codebase not found");let r=null;if(A.worktreeId){let t=await e.worktree.findFirst({where:{id:A.worktreeId,codebaseId:A.codebaseId,missingAt:null},select:{branch:!0}});if(!t)throw Error("Worktree not found for this codebase");r=t.branch}return{codebase:t,currentBranch:r,ticket:await this.jiraService.branchTicket(A.ticketKey)}}async aiTicketNaming(A,t){if(!H(A.agent))throw Error("Agent is offline");if(!v(A.agent).includes(e.Q))throw Error("Update this agent to use AI branch naming");let r=/\{\{\s*ticket\.description\s*\}\}/.test(t.branchNamingPrompt)?await this.jiraService.branchTicket(t.ticketKey,!0):t,i=(0,e.q)({provider:r.branchNamingProvider,model:r.branchNamingModel,effort:r.branchNamingEffort,prompt:(0,e.X)(r.branchNamingPrompt,{key:r.ticketKey,type:r.ticketType??"",title:r.ticketTitle,description:r.ticketDescription??""})}),a=await (0,n.U)(),s=await a.runProviderSync.findUnique({where:{agentId_provider:{agentId:A.agentId,provider:i.provider}}});if(!v(A.agent).includes(`runs.provider.${i.provider.toLowerCase()}`)||s?.status==="FAILED")throw Error(`${i.provider} is unavailable on this agent`);let o=s?.catalogJson?JSON.parse(s.catalogJson):null,l=o?.models?.find(A=>A.id===i.model);if("default"!==i.model&&!l)throw Error(`Model ${i.model} is unavailable on this agent; select an available model in Jira project settings`);if(l?.efforts?.length&&i.effort&&"auto"!==i.effort&&!l.efforts.includes(i.effort))throw Error("The selected model does not support this effort");return i}async ticketBranch(A,t,r,i){let n,a=await this.jiraService.branchTicket(t?.trim()??"");if(null!=i&&i.trim())n=(0,e.k)(i);else if("AI"===a.branchNamingMode)throw Error("Generate an AI branch name before previewing it");else n=await (0,C._)(a.branchNamingScript,{ticketKey:a.ticketKey,type:a.ticketType??"",title:a.ticketTitle});let s=await this.repositoryTakenBranches(A.repositoryId),o=n.filter(A=>A===r||!s.has(A));if(!o.length)throw Error("Every generated ticket branch name is already taken");return{ticket:a,candidates:o}}async worktreeTicketBranchContext(A){let{codebase:e,currentBranch:t,ticket:r}=await this.ticketContext(A),i="AI"===r.branchNamingMode?null:(await this.ticketBranch(e,r.ticketKey,t)).candidates[0];return{ticketKey:r.ticketKey,ticketTitle:r.ticketTitle,ticketType:r.ticketType,projectKey:r.projectKey,branchNamingMode:r.branchNamingMode??"JAVASCRIPT",branchName:i}}async generateTicketBranch(A){let{codebase:t,currentBranch:r,ticket:i}=await this.ticketContext(A);if("AI"!==i.branchNamingMode)throw Error("AI branch naming is not enabled for this Jira project");let n=await this.aiTicketNaming(t,i);return this.agentControl.createJob({agentId:t.agentId,codebaseId:t.id,worktreeId:A.worktreeId??null,kind:e.Q,payload:{naming:n,takenBranches:[...await this.repositoryTakenBranches(t.repositoryId)],currentBranch:r},idempotencyKey:`jira:branch:generate:${A.requestId}:${t.id}`,timeoutSeconds:120})}async previewTicketBranch(A){let r=await this.worktreeTicketBranchContext(A);if(r.branchName)return{...r,branchName:r.branchName};let i=await this.generateTicketBranch({...A,requestId:(0,t.randomUUID)()}),n=Date.now()+125e3;for(;Date.now()<n;){let A=await this.agentControl.getJob(i.id);if(!A)throw Error("Branch generation job disappeared");if("SUCCEEDED"===A.status){let t=JSON.parse(A.resultJson??"{}").branchName;return{...r,branchName:(0,e.k)(t??"")[0]}}if(!["QUEUED","RUNNING"].includes(A.status))throw Error(A.error??"Branch generation failed");await new Promise(A=>setTimeout(A,250))}throw await this.agentControl.cancelJob(i.id),Error("Branch generation timed out")}async ticketKeyForWorktree(A,e){let t=await (0,n.U)(),[r,i]=await Promise.all([t.worktree.findFirst({where:{id:A,missingAt:null},select:{branch:!0,codebase:{select:{repository:{select:{jiraBranchRegex:!0}}}}}}),t.codebaseSettings.findUnique({where:{id:k}})]);if(void 0!==e&&r?.branch!==e)throw Error("The worktree branch changed after reviewers were assigned. Open the original Jira ticket to update its status.");if(!r)return null;let a=r.codebase.repository.jiraBranchRegex??i?.defaultJiraBranchRegex??"";return U(r.branch,a)}async workflowSessionDataForWorktree(A,e={}){var t;let r=await (0,n.U)(),[i,a]=await Promise.all([r.worktree.findFirst({where:{id:A,...e.includeMissing?{}:{missingAt:null}},select:{id:!0,folder:!0,branch:!0,baseBranchOverride:!0,headSha:!0,upstream:!0,ahead:!0,behind:!0,syncState:!0,baseAhead:!0,baseBehind:!0,rebaseInProgress:!0,hasConflicts:!0,pushStatus:!0,hasStagedChanges:!0,hasUnstagedChanges:!0,missingAt:!0,pullRequest:!0,codebase:{select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0}},repository:{select:{id:!0,name:!0,displayOrigin:!0,canonicalOrigin:!0,jiraBranchRegex:!0}}}}}}),r.codebaseSettings.findUnique({where:{id:k}})]);if(!i)return{};let s=i.codebase.repository,o=s.jiraBranchRegex??a?.defaultJiraBranchRegex??"",l=U(i.branch,o),c=null;if(l)try{c=await this.jiraService.cachedTicket(l)}catch{}let d=i.pullRequest?await this.pipelineStatus.snapshot({repositoryGithubId:i.pullRequest.repositoryGithubId,headSha:i.pullRequest.headRefOid}):null;return{worktree:{id:i.id,path:i.folder,branch:i.branch,baseBranch:i.baseBranchOverride??i.codebase.defaultBranch,headSha:i.headSha,upstream:i.upstream,ahead:i.ahead,behind:i.behind,syncState:i.syncState,baseAhead:i.baseAhead,baseBehind:i.baseBehind,rebaseInProgress:i.rebaseInProgress,hasConflicts:i.hasConflicts,pushStatus:i.pushStatus,dirty:i.hasStagedChanges||i.hasUnstagedChanges,missingAt:i.missingAt?.toISOString()??null},codebase:{id:i.codebase.id,folder:i.codebase.folder,agentId:i.codebase.agentId,branch:i.codebase.branch,headSha:i.codebase.headSha},agent:i.codebase.agent,repo:{id:s.id,name:s.name,url:s.displayOrigin,canonicalOrigin:s.canonicalOrigin,displayOrigin:s.displayOrigin,defaultBranch:i.codebase.defaultBranch},...i.pullRequest?{pr:{...t=x(i.pullRequest,d),headBranch:t.headRefName,headSha:t.headRefOid,merged:"MERGED"===t.state}}:{},...l?{ticket:{key:l,title:c?.summary??null,status:c?.status??null,projectKey:c?.projectKey??null}}:{}}}async workflowSessionDataForPullRequest(A,e,t){let r=A.trim().toLowerCase(),i=e.trim().toLowerCase();if(!r||!i||!Number.isInteger(t)||t<1)return{};let a=await (0,n.U)(),s=await a.worktreePullRequest.findMany({where:{number:t,worktree:{missingAt:null}},select:{worktreeId:!0,repositoryNameWithOwner:!0},orderBy:{updatedAt:"desc"}}),o=`${r}/${i}`,l=s.find(({repositoryNameWithOwner:A})=>A.toLowerCase()===o);return l?this.workflowSessionDataForWorktree(l.worktreeId):{}}async resolveBranchSelection(A,t,r){let i=this.requireBaseBranch(A,t.baseBranch);if("TICKET"===t.mode){let e=await this.jiraService.branchTicket(t.ticketKey??"");if("AI"===e.branchNamingMode&&!t.branchName?.trim())return{baseBranch:i,mode:"NEW",candidates:[],aiNaming:{naming:await this.aiTicketNaming(A,e),takenBranches:[...await this.repositoryTakenBranches(A.repositoryId)],currentBranch:r?.branch??null}};let{candidates:n}=await this.ticketBranch(A,t.ticketKey,r?.branch??null,t.branchName);return{baseBranch:i,mode:"NEW",candidates:n}}let a=t.branchName?.trim()??"";if(!(0,e.S)(a))throw Error("Enter a valid Git branch name");if("NEW"===t.mode){if((await this.repositoryTakenBranches(A.repositoryId)).has(a))throw Error(`Branch ${a} is already taken`);return{baseBranch:i,mode:"NEW",candidates:[a]}}if("EXISTING"!==t.mode)throw Error("Unknown worktree branch mode");if(!new Set([...T(A.localBranchesJson),...T(A.remoteBranchesJson)]).has(a))throw Error(`Existing branch ${a} is unavailable; refresh and try again`);let s=await (0,n.U)();if(await s.worktree.findFirst({where:{codebaseId:A.id,branch:a,missingAt:null,...r?{id:{not:r.id}}:{}},select:{id:!0}}))throw Error(`Branch ${a} is checked out in another worktree`);return{baseBranch:i,mode:"EXISTING",candidates:[a]}}async createWorktree(A){let t=await this.requireRunnableCodebase(A.codebaseId),r=await this.resolveBranchSelection(t,A.selection,null);return this.agentControl.createJob({agentId:t.agentId,codebaseId:t.id,kind:e.B,payload:{codebaseId:t.id,rootFolder:t.folder,folder:null,gitDirectory:null,expectedOrigin:t.repository.canonicalOrigin,baseBranch:r.baseBranch,action:"CREATE",mode:r.mode,candidates:r.candidates,...r.aiNaming?{aiNaming:r.aiNaming}:{},stashOnFailure:!1,preparations:(t.repository.preparations??[]).map(I.U)},idempotencyKey:`worktree:branch:create:${A.requestId}:${t.id}`,timeoutSeconds:600})}async changeWorktreeBranch(A){let t=await this.requireRunnable(A.worktreeId,e.B);if((t.codebase.repository.preparations?.length??0)>0&&!v(t.codebase.agent).includes(e.r))throw Error("Agent must be updated to apply repository preparations");let r=await this.resolveBranchSelection(t.codebase,A.selection,{id:t.id,branch:t.branch});return this.agentControl.createJob({agentId:t.codebase.agentId,codebaseId:t.codebaseId,worktreeId:t.id,kind:e.B,payload:{codebaseId:t.codebaseId,rootFolder:t.codebase.folder,folder:t.folder,gitDirectory:t.gitDirectory,expectedOrigin:t.codebase.repository.canonicalOrigin,baseBranch:r.baseBranch,action:"CHANGE",mode:r.mode,candidates:r.candidates,...r.aiNaming?{aiNaming:r.aiNaming}:{},stashOnFailure:!!A.stashOnFailure,preparations:(t.codebase.repository.preparations??[]).map(I.U)},idempotencyKey:`worktree:branch:change:${A.requestId}:${t.id}`,timeoutSeconds:600})}async getMove(A){return(await (0,n.U)()).worktreeMove.findUnique({where:{id:A}})}async moveWorktree(A){let r,i=await (0,n.U)(),a=await i.worktreeMove.findUnique({where:{sourceWorktreeId_requestId:{sourceWorktreeId:A.sourceWorktreeId,requestId:A.requestId}}});if(a)return a;let s=await this.requireRunnable(A.sourceWorktreeId,e.W);if(!s.branch||!s.headSha)throw Error("A named source branch is required");if(s.hasStagedChanges||s.hasUnstagedChanges||"READY"!==s.pushStatus)throw Error("The source branch must be clean and safely pushable before moving");if(A.deleteSource&&s.primary)throw Error("The primary worktree cannot be deleted after moving");if(A.deleteSource&&!v(s.codebase.agent).includes(e.Z))throw Error("Source agent must be updated to remove the old worktree");let o=await this.requireRunnableCodebase(A.targetCodebaseId,e.R);if(s.codebase.repositoryId!==o.repositoryId||s.codebase.agentId===o.agentId)throw Error("The destination must be the same repository on another agent");let l=A.targetWorktreeId?await i.worktree.findFirst({where:{id:A.targetWorktreeId,codebaseId:o.id,missingAt:null,availability:"AVAILABLE"}}):null;if(A.targetWorktreeId&&!l)throw Error("Destination worktree not found");if(await i.worktree.findFirst({where:{codebaseId:o.id,branch:s.branch,missingAt:null,...l?{id:{not:l.id}}:{}},select:{id:!0}}))throw Error("The source branch is already checked out in another destination worktree");let c=o.defaultBranch??s.codebase.defaultBranch;if(!c)throw Error("The destination default branch is unavailable");let d=(0,t.randomUUID)();try{r=await i.worktreeMove.create({data:{id:d,requestId:A.requestId,sourceWorktreeId:s.id,sourceCodebaseId:s.codebaseId,targetCodebaseId:o.id,targetWorktreeId:l?.id??null,destinationMode:l?"EXISTING":"NEW",branch:s.branch,headSha:s.headSha,baseBranch:c,deleteSource:A.deleteSource,status:"PUSHING"}})}catch(t){let e=await i.worktreeMove.findUnique({where:{sourceWorktreeId_requestId:{sourceWorktreeId:A.sourceWorktreeId,requestId:A.requestId}}});if(e)return e;throw t}try{let A=await this.agentControl.createJob({agentId:s.codebase.agentId,codebaseId:s.codebaseId,worktreeId:s.id,kind:e.W,payload:{moveId:r.id,codebaseId:s.codebaseId,folder:s.folder,gitDirectory:s.gitDirectory,expectedOrigin:s.codebase.repository.canonicalOrigin,branch:s.branch,expectedHeadSha:s.headSha},idempotencyKey:`worktree:move:push:${r.id}`,timeoutSeconds:600});return r=await i.worktreeMove.update({where:{id:r.id},data:{sourceJobId:A.id}}),this.publish(s.id,s.codebaseId),r}catch(A){throw await i.worktreeMove.update({where:{id:r.id},data:{status:"FAILED",error:A instanceof Error?A.message:String(A),finishedAt:new Date}}),A}}async retryWorktreeMoveWithStash(A){let e=await (0,n.U)(),t=await e.worktreeMove.findUnique({where:{id:A}});if(!t||"AWAITING_STASH"!==t.status)throw Error("This move is not waiting for a stash decision");let r=await this.createMoveCheckoutJob(t,!0);if(1!==(await e.worktreeMove.updateMany({where:{id:A,status:"AWAITING_STASH"},data:{status:"CHECKING_OUT",targetJobId:r.id,error:null}})).count){let t=await e.worktreeMove.findUniqueOrThrow({where:{id:A}});if("AWAITING_STASH"!==t.status)return t;throw Error("The move state changed; refresh and try again")}return this.publish(t.sourceWorktreeId,t.sourceCodebaseId),e.worktreeMove.findUniqueOrThrow({where:{id:A}})}async cancelWorktreeMove(A){let e=await (0,n.U)(),t=await e.worktreeMove.findUnique({where:{id:A}});if(!t||"AWAITING_STASH"!==t.status)throw Error("Only a move waiting for a stash decision can be cancelled");let r=await e.worktreeMove.update({where:{id:A},data:{status:"CANCELLED",finishedAt:new Date}});return this.publish(t.sourceWorktreeId,t.sourceCodebaseId),r}async deleteWorktree(A){let t=await this.requireRunnable(A.worktreeId,e.Z);if(t.primary)throw Error("The primary worktree cannot be deleted");if(void 0!==A.expectedBranch&&t.branch!==A.expectedBranch)throw Error("The worktree branch changed before deletion");if(!0===A.requireClean&&void 0!==A.expectedHeadSha&&t.headSha!==A.expectedHeadSha)throw Error("The worktree HEAD changed before deletion");if(A.deleteRemoteBranch&&(!t.branch||t.branch===t.codebase.defaultBranch))throw Error("The default remote branch cannot be deleted");return this.agentControl.createJob({agentId:t.codebase.agentId,codebaseId:t.codebaseId,worktreeId:t.id,kind:e.Z,payload:{moveId:null,codebaseId:t.codebaseId,rootFolder:t.codebase.folder,...v(t.codebase.agent).includes(e.w)?{derivedData:{mode:t.codebase.agent.derivedDataLocationMode??"DEFAULT",path:t.codebase.agent.derivedDataPath??null}}:{},folder:t.folder,gitDirectory:t.gitDirectory,expectedOrigin:t.codebase.repository.canonicalOrigin,branch:void 0===A.expectedBranch?t.branch:A.expectedBranch,defaultBranch:t.codebase.defaultBranch,deleteRemoteBranch:A.deleteRemoteBranch,requireClean:A.requireClean??!1,expectedHeadSha:!0===A.requireClean?A.expectedHeadSha??t.headSha:null},idempotencyKey:`worktree:delete:${A.requestId}:${t.id}`,timeoutSeconds:600})}async inspect(A,t){let r=await this.requireRunnable(A,e.H,!0),i=await this.createSerializedCodebaseJob({agentId:r.codebase.agentId,codebaseId:r.codebaseId,worktreeId:r.id,kind:e.H,payload:this.payload(r),idempotencyKey:`worktree:inspect:${t}:${A}`,timeoutSeconds:30,visibility:"SYSTEM"});try{let A=await this.waitForJob(i.id),e=P(A).detail;if(!e||"object"!=typeof e)throw Error("Invalid worktree detail");let n=Array.isArray(e.changes)?e.changes.map(A=>A&&"object"==typeof A&&!Array.isArray(A)?{...A,changeType:"string"==typeof A.changeType?A.changeType:"MODIFIED"}:A):[],a={...e,changes:n,branchChanges:Array.isArray(e.branchChanges)?e.branchChanges:[],branchChangesTruncated:!0===e.branchChangesTruncated};if(this.workflowEvents){let A=n.filter(A=>A&&"object"==typeof A&&!Array.isArray(A)&&!0===A.conflicted),e=(0,d.d)(await this.workflowSessionDataForWorktree(r.id),{repo:{id:r.codebase.repository.id,name:r.codebase.repository.name,url:r.codebase.repository.displayOrigin,canonicalOrigin:r.codebase.repository.canonicalOrigin,displayOrigin:r.codebase.repository.displayOrigin,defaultBranch:r.codebase.defaultBranch},codebase:{id:r.codebase.id,folder:r.codebase.folder,agentId:r.codebase.agentId},worktree:{id:r.id,path:r.folder,branch:r.branch,headSha:r.headSha,conflicted:A.length>0,conflicts:A}});await this.workflowEvents.record({kind:"WORKTREE_CONFLICT",subjectKey:r.id,dedupeKey:`worktree-conflict:${r.id}:${t}`,payload:{...e,sessionData:e,cursorValue:A.length?A.map(A=>String(A.path??"")):[]}})}return a}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:i.id,visibility:"SYSTEM"}})}}async inspectDiff(A,t,r){let i=await this.requireRunnable(A,e.U,!0),a=this.payload(i);if(!a.baseBranch)throw Error("A base branch is required");let s=await this.createSerializedCodebaseJob({agentId:i.codebase.agentId,codebaseId:i.codebaseId,worktreeId:i.id,kind:e.U,payload:{...a,baseBranch:a.baseBranch,scope:t.scope,path:t.path??null,previousPath:t.previousPath??null,commitSha:t.commitSha??null,uploadId:null,side:null},idempotencyKey:`worktree:diff:${r}:${A}`,timeoutSeconds:30,visibility:"SYSTEM"});try{let A=await this.waitForJob(s.id),e=P(A).diff;if(!e||"object"!=typeof e)throw Error("Invalid worktree diff result");return e}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:s.id,visibility:"SYSTEM"}})}}async prepareDiffAsset(A,t,r){let i=await this.requireRunnable(A,e.L,!0),a=this.payload(i);if(!a.baseBranch)throw Error("A base branch is required");let s=await this.createSerializedCodebaseJob({agentId:i.codebase.agentId,codebaseId:i.codebaseId,worktreeId:i.id,kind:e.L,payload:{...a,baseBranch:a.baseBranch,scope:t.scope,path:t.path,previousPath:t.previousPath??null,commitSha:t.commitSha??null,uploadId:r,side:t.side},idempotencyKey:`worktree:diff-asset:${r}:${A}`,timeoutSeconds:60,visibility:"SYSTEM"});try{P(await this.waitForJob(s.id))}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:s.id,visibility:"SYSTEM"}})}}async diffAssetAgentId(A){let e=await (0,n.U)(),t=await e.worktree.findUnique({where:{id:A},select:{codebase:{select:{agentId:!0}}}});return t?.codebase.agentId??null}async runOperation(A,t,r,i=!1){if(!e.i.includes(t))throw Error("Unknown worktree operation");let n=await this.requireRunnable(A,e.l),a=await this.settings(),s=n.codebase.repository.preparations??[];if(s.length>0&&!v(n.codebase.agent).includes(e.r))throw Error("Agent must be updated to use repository preparations");return this.agentControl.createJob({agentId:n.codebase.agentId,codebaseId:n.codebaseId,worktreeId:n.id,kind:e.l,payload:{...this.payload(n),operation:t,forcePreparations:i,preparations:s.map(I.U),..."OPEN_EDITOR"===t?{editorVariant:a.editorVariant}:{}},idempotencyKey:`worktree:operation:${r}:${A}`,timeoutSeconds:"OPEN_EDITOR"===t?30:600})}async commitWorktree(A){if(!A.requestId.trim())throw Error("requestId is required");if(!A.message.trim())throw Error("Commit message is required");let t=!1!==A.stageAll,r=A.paths??[];if(!t&&0===r.length)throw Error("A partial commit requires at least one path");let i=await this.requireRunnable(A.worktreeId,e.T);return this.agentControl.createJob({agentId:i.codebase.agentId,codebaseId:i.codebaseId,worktreeId:i.id,kind:e.T,payload:{...this.payload(i),message:A.message,signed:A.signed??null,stageAll:t,paths:r},idempotencyKey:`worktree:commit:${A.requestId}:${A.worktreeId}`,timeoutSeconds:120})}async createAutoSyncJob(A,t,r,i,n=!1,a,s){let o=await this.requireRunnable(A,e.d),l=this.payload(o);if(s&&!v(o.codebase.agent).includes(e.f))throw Error("Update the agent to use Auto Merge branch syncing");if(a&&(o.branch!==r||o.codebaseId!==a.codebaseId||o.codebase.agentId!==a.agentId||l.folder!==a.folder||l.gitDirectory!==a.gitDirectory||void 0!==a.baseBranch&&l.baseBranch!==a.baseBranch||l.expectedOrigin!==a.expectedOrigin))throw Error("Worktree changed before Bulk Sync could be dispatched");if(!l.baseBranch&&!s)throw Error("Auto Sync requires a base branch");if((o.codebase.repository.preparations?.length??0)>0&&!v(o.codebase.agent).includes(e.r))throw Error("Agent must be updated to use repository preparations");return this.agentControl.createJob({agentId:o.codebase.agentId,codebaseId:o.codebaseId,worktreeId:o.id,kind:e.d,payload:{...l,expectedBranch:r,baseBranch:s?.targetBranch??l.baseBranch,...s?{mergeGuard:s}:{},phase:t,forcePreparations:n,preparations:(o.codebase.repository.preparations??[]).map(I.U)},idempotencyKey:`worktree:auto-sync:${t.toLowerCase()}:${i}:${A}`,timeoutSeconds:600})}publishAutomationChange(A,e=null){this.publish(A,e)}async inspectGitState(A,t){if(!t.trim())throw Error("requestId is required");let r=await this.requireRunnable(A,e.V,!0),a=await this.createSerializedCodebaseJob({agentId:r.codebase.agentId,codebaseId:r.codebaseId,worktreeId:r.id,kind:e.V,payload:{action:"STATE",codebaseId:r.codebaseId,folder:r.folder,gitDirectory:r.gitDirectory,expectedOrigin:r.codebase.repository.canonicalOrigin},idempotencyKey:`worktree:git:state:${t}:${A}`,timeoutSeconds:30,visibility:"SYSTEM"});try{let A=await this.waitForJob(a.id);return(0,i.G)(P(A).state)}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:a.id,visibility:"SYSTEM"}})}}async runGitOperation(A){if(!A.requestId.trim())throw Error("requestId is required");if(!e.g.includes(A.operation))throw Error("Unknown worktree Git operation");let t=await this.requireRunnable(A.worktreeId,e.o);return this.agentControl.createJob({agentId:t.codebase.agentId,codebaseId:t.codebaseId,worktreeId:t.id,kind:e.o,payload:{codebaseId:t.codebaseId,folder:t.folder,gitDirectory:t.gitDirectory,expectedOrigin:t.codebase.repository.canonicalOrigin,baseBranch:t.baseBranchOverride??t.codebase.defaultBranch??null,defaultBranch:t.codebase.defaultBranch,operation:A.operation,...A.branch?{branch:A.branch}:{},...A.stashOid?{stashOid:A.stashOid}:{},..."SWITCH_BRANCH"===A.operation?{stashChanges:!!A.stashChanges}:{}},idempotencyKey:`worktree:git:${A.operation}:${A.requestId}:${A.worktreeId}`,timeoutSeconds:"PULL_BRANCH"===A.operation?300:60})}payload(A){return{codebaseId:A.codebaseId,folder:A.folder,gitDirectory:A.gitDirectory,expectedOrigin:A.codebase.repository.canonicalOrigin,baseBranch:A.baseBranchOverride??A.codebase.defaultBranch??null}}async createSerializedCodebaseJob(A){let e=await (0,n.U)(),t=Date.now()+3e4;for(;Date.now()<t;){let r=await e.agentJob.findFirst({where:{codebaseId:A.codebaseId,...o.i},select:{id:!0,idempotencyKey:!0,kind:!0}});if(r){if(r.idempotencyKey===A.idempotencyKey)return this.agentControl.createJob(A);await this.waitForCodebaseJob(r.id,t);continue}try{return await this.agentControl.createJob(A)}catch(A){if(!(0,o.G)(A))throw A}}throw new o.S}async waitForCodebaseJob(A,e){let t=g._H.iterate((0,g.BC)(A));try{for(;Date.now()<e;){let r=await this.agentControl.getJob(A);if(!r||!b.includes(r.status))return;await Promise.race([t.next(),new Promise(A=>setTimeout(A,Math.max(0,e-Date.now())))])}throw new o.S}finally{await t.return?.()}}async requireRunnable(A,e,t=!1){let r=await (0,n.U)(),i=await r.worktree.findUnique({where:{id:A},include:{codebase:{include:{agent:!0,repository:{include:{preparations:!0}}}}}});if(!i||i.missingAt||"AVAILABLE"!==i.availability)throw Error("Worktree is unavailable");if(!H(i.codebase.agent))throw Error("Agent is offline");if(!v(i.codebase.agent).includes(e))throw Error("Agent must be updated to use worktrees");if(!t){let[A,e]=await Promise.all([r.agentJob.findFirst({where:{codebaseId:i.codebaseId,...o.i}}),r.worktreeMove.findFirst({where:{status:{in:R},OR:[{sourceCodebaseId:i.codebaseId},{targetCodebaseId:i.codebaseId}]}})]);if(A||e)throw new o.S}return i}async requireRunnableCodebase(A,t=e.B){let r=await (0,n.U)(),i=await r.codebase.findUnique({where:{id:A},include:{agent:!0,repository:{include:{preparations:!0}}}});if(!i||"AVAILABLE"!==i.availability)throw Error("Codebase is unavailable");if(!H(i.agent))throw Error("Agent is offline");if(!v(i.agent).includes(t))throw Error("Agent must be updated to create or change worktrees");if((i.repository.preparations?.length??0)>0&&!v(i.agent).includes(e.r))throw Error("Agent must be updated to apply repository preparations");let[a,s]=await Promise.all([r.agentJob.findFirst({where:{codebaseId:A,...o.i}}),r.worktreeMove.findFirst({where:{status:{in:R},OR:[{sourceCodebaseId:A},{targetCodebaseId:A}]}})]);if(a||s)throw new o.S;return i}async purge(A){let e=await (0,n.U)(),t=await e.worktree.deleteMany({where:{id:A,missingAt:{not:null}}});return t.count&&this.publish(A,null),t.count>0}async purgeAll(){let A=await (0,n.U)(),e=await A.worktree.deleteMany({where:{missingAt:{not:null}}});return e.count&&this.publish(null,null),e.count}subscribe(){return g._H.iterate(g.MA)}async *subscribeInspection(A){let e=g._H.iterate((0,g.ys)(A)),t=!1;try{for await(let r of(await this.acquireWatch(A),t=!0,e))yield r}finally{await e.return?.(),t&&await this.releaseWatch(A)}}async acquireWatch(A){let r=this.watchDemand.get(A);if(r){r.subscribers+=1,await r.started;return}let i=await this.requireRunnable(A,e.I,!0),n=(0,t.randomUUID)(),a=this.payload(i),s={subscribers:1,watchId:n,agentId:i.codebase.agentId,worktreeId:i.id,codebaseId:i.codebaseId,payload:a,started:Promise.resolve()};s.started=this.runWatchAction(s,"START"),this.watchDemand.set(A,s);try{await s.started}catch(e){throw this.watchDemand.get(A)===s&&this.watchDemand.delete(A),e}}async releaseWatch(A){let e=this.watchDemand.get(A);if(e&&(e.subscribers-=1,!(e.subscribers>0))){this.watchDemand.delete(A);try{await e.started,await this.runWatchAction(e,"STOP")}catch(A){console.error("Could not stop worktree watcher:",A instanceof Error?A.message:A)}}}async runWatchAction(A,t){let r=await this.agentControl.createJob({agentId:A.agentId,worktreeId:A.worktreeId,kind:e.I,payload:{...A.payload,action:t,watchId:A.watchId},idempotencyKey:`worktree:watch:${t}:${A.watchId}`,timeoutSeconds:30,visibility:"SYSTEM"});try{P(await this.waitForJob(r.id))}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:r.id,visibility:"SYSTEM"}})}}async refreshBaseBranchWatch(A,e){this.publish(A,e),await this.restartWatch(A)}async restartWatch(A){let r=this.watchDemand.get(A);if(r)try{if(await r.started,this.watchDemand.get(A)!==r||(await this.runWatchAction(r,"STOP"),this.watchDemand.get(A)!==r))return;let i=await this.requireRunnable(A,e.I,!0),n={subscribers:r.subscribers,watchId:(0,t.randomUUID)(),agentId:i.codebase.agentId,worktreeId:i.id,codebaseId:i.codebaseId,payload:this.payload(i),started:Promise.resolve()};n.started=this.runWatchAction(n,"START"),this.watchDemand.set(A,n),await n.started}catch(A){console.error("Could not restart worktree watcher:",A instanceof Error?A.message:A)}}publish(A,e){g._H.publish(g.fb,{sidebarStatusChanged:!0}),g._H.publish(g.MA,{worktreeOverviewChanged:{worktreeId:A,codebaseId:e}})}moveIdFromJob(A){let e=JSON.parse(A.payloadJson);if(!e||"object"!=typeof e||Array.isArray(e)||"string"!=typeof e.moveId)throw Error("Move job is missing its workflow identifier");return String(e.moveId)}async failMove(A,e,t){let r=await (0,n.U)();(await r.worktreeMove.updateMany({where:{id:A,status:e},data:{status:"FAILED",error:t,finishedAt:new Date}})).count&&this.publish(null,null)}async createMoveCheckoutJob(A,t){let r=await (0,n.U)(),i=await r.codebase.findUnique({where:{id:A.targetCodebaseId},include:{agent:!0,repository:{include:{preparations:!0}}}});if(!i)throw Error("Destination codebase no longer exists");if(!H(i.agent))throw Error("Destination agent is offline");if(!v(i.agent).includes(e.R))throw Error("Destination agent must be updated to move worktrees");if((i.repository.preparations?.length??0)>0&&!v(i.agent).includes(e.r))throw Error("Destination agent must be updated to apply preparations");let a=A.targetWorktreeId?await r.worktree.findFirst({where:{id:A.targetWorktreeId,codebaseId:i.id,missingAt:null,availability:"AVAILABLE"}}):null;if("EXISTING"===A.destinationMode&&!a)throw Error("Destination worktree is no longer available");return this.agentControl.createJob({agentId:i.agentId,codebaseId:i.id,worktreeId:a?.id??null,kind:e.R,payload:{moveId:A.id,codebaseId:i.id,rootFolder:i.folder,folder:a?.folder??null,gitDirectory:a?.gitDirectory??null,expectedOrigin:i.repository.canonicalOrigin,branch:A.branch,expectedHeadSha:A.headSha,baseBranch:A.baseBranch,mode:A.destinationMode,stashOnFailure:t,preparations:(i.repository.preparations??[]).map(I.U)},idempotencyKey:`worktree:move:checkout:${A.id}:${t?"stash":"initial"}`,timeoutSeconds:600})}async advanceMoveAfterPush(A){let e=this.moveIdFromJob(A),t=await (0,n.U)(),r=await t.worktreeMove.findUnique({where:{id:e}});if(!r||"PUSHING"!==r.status||r.sourceJobId&&r.sourceJobId!==A.id)return;if("SUCCEEDED"!==A.status)return void await this.failMove(r.id,"PUSHING",A.error||"Could not push the source branch");let i=P(A);if(i.headSha!==r.headSha||i.branch!==r.branch)return void await this.failMove(r.id,"PUSHING","The source push returned an unexpected branch");try{let A=await this.createMoveCheckoutJob(r,!1);await t.worktreeMove.updateMany({where:{id:r.id,status:"PUSHING"},data:{status:"CHECKING_OUT",targetJobId:A.id}}),this.publish(r.sourceWorktreeId,r.sourceCodebaseId)}catch(A){await this.failMove(r.id,"PUSHING",A instanceof Error?A.message:String(A))}}async projectMoveDestination(A,r){let i=(0,e.y)(r),a=await (0,n.U)(),s=await a.codebase.findUnique({where:{id:A.targetCodebaseId},select:{localBranchesJson:!0}});if(!s)throw Error("Destination codebase no longer exists");let o=new Set(T(s.localBranchesJson));i.branch&&o.add(i.branch);let l=A.targetWorktreeId,c=null;return await a.$transaction(async e=>{if(await e.codebase.update({where:{id:A.targetCodebaseId},data:{localBranchesJson:JSON.stringify([...o].sort((A,e)=>A.localeCompare(e)))}}),l){if(1!==(await e.worktree.updateMany({where:{id:l,codebaseId:A.targetCodebaseId},data:{...this.inventoryData(i),gitDirectory:i.gitDirectory,baseBranchOverride:A.baseBranch,missingAt:null}})).count)throw Error("Destination worktree no longer exists")}else{let r=await e.worktree.upsert({where:{codebaseId_gitDirectory:{codebaseId:A.targetCodebaseId,gitDirectory:i.gitDirectory}},create:{id:(0,t.randomUUID)(),codebaseId:A.targetCodebaseId,gitDirectory:i.gitDirectory,...this.inventoryData(i),baseBranchOverride:A.baseBranch},update:{...this.inventoryData(i),baseBranchOverride:A.baseBranch,missingAt:null}});l=r.id,c=await this.worktreeCreatedNotification(e,r.id,i,r.highlightColor)}await e.worktreeMove.update({where:{id:A.id},data:{targetWorktreeId:l}})}),this.notifications?.created(c),this.publish(l??null,A.targetCodebaseId),await this.skillsService?.requestAutoReconcile(),l}async scheduleMoveCleanup(A){let t=await (0,n.U)(),r=await t.worktreeMove.findUniqueOrThrow({where:{id:A}}),i=await t.worktree.findUnique({where:{id:r.sourceWorktreeId},include:{codebase:{include:{agent:!0,repository:!0}}}});if(!i||i.missingAt||i.primary){await t.worktreeMove.update({where:{id:r.id},data:{status:"SUCCEEDED_WITH_WARNING",warning:"Destination is ready, but the source worktree could not be removed",finishedAt:new Date}}),this.publish(r.sourceWorktreeId,r.sourceCodebaseId);return}try{let A=await this.agentControl.createJob({agentId:i.codebase.agentId,codebaseId:i.codebaseId,worktreeId:i.id,kind:e.Z,payload:{moveId:r.id,codebaseId:i.codebaseId,rootFolder:i.codebase.folder,...v(i.codebase.agent).includes(e.w)?{derivedData:{mode:i.codebase.agent.derivedDataLocationMode??"DEFAULT",path:i.codebase.agent.derivedDataPath??null}}:{},folder:i.folder,gitDirectory:i.gitDirectory,expectedOrigin:i.codebase.repository.canonicalOrigin,branch:i.branch,defaultBranch:i.codebase.defaultBranch,deleteRemoteBranch:!1,requireClean:!0,expectedHeadSha:r.headSha},idempotencyKey:`worktree:move:cleanup:${r.id}`,timeoutSeconds:600});await t.worktreeMove.updateMany({where:{id:r.id,status:{in:["PUSHING","CHECKING_OUT","AWAITING_STASH"]}},data:{status:"CLEANING_UP",cleanupJobId:A.id}}),this.publish(i.id,i.codebaseId)}catch(A){await t.worktreeMove.update({where:{id:r.id},data:{status:"SUCCEEDED_WITH_WARNING",warning:A instanceof Error?A.message:String(A),finishedAt:new Date}}),this.publish(i.id,i.codebaseId)}}async advanceMoveAfterCheckout(A){let e=this.moveIdFromJob(A),t=await (0,n.U)(),r=await t.worktreeMove.findUnique({where:{id:e}});if(!r||!["PUSHING","CHECKING_OUT","AWAITING_STASH"].includes(r.status)||r.targetJobId&&r.targetJobId!==A.id)return;if("SUCCEEDED"!==A.status)return void await this.failMove(r.id,r.status,A.error||"Could not check out the destination branch");let i=P(A);if("NEEDS_STASH"===i.outcome){await t.worktreeMove.updateMany({where:{id:r.id,status:{in:["PUSHING","CHECKING_OUT","AWAITING_STASH"]}},data:{status:"AWAITING_STASH",error:"string"==typeof i.message?i.message:"Destination changes block the branch switch"}}),this.publish(r.sourceWorktreeId,r.sourceCodebaseId);return}if("CHECKED_OUT"!==i.outcome||!i.worktree)return void await this.failMove(r.id,r.status,"Destination checkout returned an invalid result");let a=await this.projectMoveDestination(r,i.worktree);await this.projectPreparationResults(a,A.resultJson),r.deleteSource?await this.scheduleMoveCleanup(r.id):(await t.worktreeMove.update({where:{id:r.id},data:{status:"SUCCEEDED",error:null,finishedAt:new Date}}),this.publish(r.sourceWorktreeId,r.sourceCodebaseId))}async projectDeleteOperation(A){let e=[];try{let t=JSON.parse(A.resultJson??"{}");Array.isArray(t?.buildDataCleanup?.warnings)&&(e=t.buildDataCleanup.warnings.filter(A=>"string"==typeof A&&A.length>0))}catch{}let t=JSON.parse(A.payloadJson),r=t&&"object"==typeof t&&!Array.isArray(t)&&"string"==typeof t.moveId?String(t.moveId):null,i=await (0,n.U)();if(r){let t=await i.worktreeMove.findUnique({where:{id:r}});if(!t||!["PUSHING","CHECKING_OUT","AWAITING_STASH","CLEANING_UP"].includes(t.status)||t.cleanupJobId&&t.cleanupJobId!==A.id)return;if("SUCCEEDED"!==A.status){await i.worktreeMove.update({where:{id:t.id},data:{status:"SUCCEEDED_WITH_WARNING",warning:A.error||"Destination is ready, but the source worktree was retained",finishedAt:new Date}}),this.publish(t.sourceWorktreeId,t.sourceCodebaseId);return}await i.$transaction([i.worktree.deleteMany({where:{id:t.sourceWorktreeId}}),i.worktreeMove.update({where:{id:t.id},data:{status:e.length?"SUCCEEDED_WITH_WARNING":"SUCCEEDED",warning:e.length?e.join("\n"):null,finishedAt:new Date}})]),this.publish(t.sourceWorktreeId,t.sourceCodebaseId);return}if("SUCCEEDED"!==A.status||!A.worktreeId)return;let a=await i.worktree.findUnique({where:{id:A.worktreeId},select:{codebaseId:!0,branch:!0,highlightColor:!0}});if(await i.worktree.deleteMany({where:{id:A.worktreeId}}),this.publish(A.worktreeId,a?.codebaseId??null),e.length&&this.notifications)try{let t=await i.$transaction(t=>this.notifications.recordInTransaction(t,{dedupeKey:`worktree-cleanup-warning:${A.id}`,typeKey:"WORKTREE_CLEANUP_FAILED",title:"Worktree deleted; build data cleanup needs attention",body:[a?.branch,...e].filter(Boolean).join(" · ").slice(0,1e3),href:`/dashboard/jobs/${encodeURIComponent(A.id)}`,resourceKind:"AGENT_JOB",resourceId:A.id,highlightColor:a?.highlightColor??null}));this.notifications.created(t)}catch(A){console.error("Worktree cleanup warning notification failed:",A)}}async projectOperation(A){if(!A.worktreeId||!A.resultJson||(await this.projectPreparationResults(A.worktreeId,A.resultJson),"SUCCEEDED"!==A.status))return;let t=P({...A,error:null});if(!t.worktree)return;let r=(0,e.y)(t.worktree),i=await (0,n.U)(),a=await i.worktree.findUnique({where:{id:A.worktreeId}});if(!a)return;let s=new Date(r.checkedAt);(await i.worktree.updateMany({where:{id:a.id,OR:[{lastCheckedAt:null},{lastCheckedAt:{lt:s}}]},data:{branch:r.branch,headSha:r.headSha,upstream:r.upstream,ahead:r.ahead,behind:r.behind,syncState:r.syncState,baseAhead:r.baseAhead,baseBehind:r.baseBehind,hasStagedChanges:r.hasStagedChanges??!1,hasUnstagedChanges:r.hasUnstagedChanges??!1,rebaseInProgress:r.rebaseInProgress??!1,hasConflicts:r.hasConflicts??!1,pushStatus:r.pushStatus??"UNKNOWN",availability:r.availability,statusError:r.error,lastCheckedAt:s}})).count>0&&this.publish(a.id,a.codebaseId)}async projectBranchOperation(A){if(!A.codebaseId||"SUCCEEDED"!==A.status||!A.resultJson)return;let r=P({...A,error:null});if(!r.worktree||"string"!=typeof r.baseBranch)return;let i=(0,e.y)(r.worktree),a=await (0,n.U)(),s=await a.codebase.findUnique({where:{id:A.codebaseId},select:{localBranchesJson:!0}});if(!s)return;let o=new Set(T(s.localBranchesJson));i.branch&&o.add(i.branch);let l=A.worktreeId,c=null;await a.$transaction(async e=>{if(await e.codebase.update({where:{id:A.codebaseId},data:{localBranchesJson:JSON.stringify([...o].sort((A,e)=>A.localeCompare(e)))}}),A.worktreeId){if(1!==(await e.worktree.updateMany({where:{id:A.worktreeId,codebaseId:A.codebaseId},data:{...this.inventoryData(i),gitDirectory:i.gitDirectory,baseBranchOverride:r.baseBranch,missingAt:null}})).count)throw Error("Worktree no longer exists");return}let n=await e.worktree.upsert({where:{codebaseId_gitDirectory:{codebaseId:A.codebaseId,gitDirectory:i.gitDirectory}},create:{id:(0,t.randomUUID)(),codebaseId:A.codebaseId,gitDirectory:i.gitDirectory,...this.inventoryData(i),baseBranchOverride:r.baseBranch},update:{...this.inventoryData(i),baseBranchOverride:r.baseBranch,missingAt:null}});l=n.id;let a=n.highlightColor;if(!n.initialHighlightApplied){let t=await e.worktreeSettings.findUnique({where:{id:k}}),r=n.highlightColor;if(!r&&t?.autoAssignHighlightColor!==!1){let i=await e.worktree.findMany({where:{codebaseId:A.codebaseId,missingAt:null,availability:"AVAILABLE"},select:{highlightColor:!0}}),n=new Map;for(let A of i)A.highlightColor&&n.set(A.highlightColor,(n.get(A.highlightColor)??0)+1);r=t?.highlightColorMode==="RANDOM"?M[Math.floor(Math.random()*M.length)]:M.reduce((A,e)=>(n.get(e)??0)<(n.get(A)??0)?e:A)}await e.worktree.update({where:{id:n.id},data:{highlightColor:r,initialHighlightApplied:!0}}),a=r}c=await this.worktreeCreatedNotification(e,n.id,i,a)}),this.notifications?.created(c),this.publish(l??null,A.codebaseId),l&&await this.projectPreparationResults(l,A.resultJson),!A.worktreeId&&l&&await this.recordWorktreeCreated(l),await this.skillsService?.requestAutoReconcile(),A.worktreeId&&await this.restartWatch(A.worktreeId)}async projectPreparationOperation(A){let e;if(!A.resultJson)return;try{e=JSON.parse(A.resultJson)}catch{return}let t=[];if(e&&"object"==typeof e&&!Array.isArray(e)){let A=e.worktrees;if(Array.isArray(A))for(let e of A.slice(0,500))!(!e||"object"!=typeof e||Array.isArray(e))&&"string"==typeof e.worktreeId&&Array.isArray(e.preparations)&&(await this.projectPreparationResults(e.worktreeId,JSON.stringify({checkedAt:e.checkedAt,preparations:e.preparations})),t.push(e.worktreeId))}0===t.length&&A.worktreeId&&(await this.projectPreparationResults(A.worktreeId,A.resultJson),t.push(A.worktreeId));let r=await (0,n.U)();for(let A of t){let e=await r.worktree.findUnique({where:{id:A},select:{codebaseId:!0}});this.publish(A,e?.codebaseId??null)}}async projectPreparationResults(A,t){let r;try{r=JSON.parse(t)}catch{return}if(!r||"object"!=typeof r||Array.isArray(r))return;let i=r;if(!Array.isArray(i.preparations))return;let a="string"!=typeof i.checkedAt||Number.isNaN(Date.parse(i.checkedAt))?new Date:new Date(i.checkedAt),s=await (0,n.U)();for(let t of i.preparations.slice(0,500)){if(!(!t||"object"!=typeof t||Array.isArray(t)))"string"==typeof t.id&&"string"==typeof t.definitionHash&&"string"==typeof t.state&&e.n.includes(t.state)&&await s.codebaseRepositoryPreparation.findUnique({where:{id:t.id},select:{id:!0}})&&await s.worktreePreparationStatus.upsert({where:{worktreeId_preparationId:{worktreeId:A,preparationId:t.id}},create:{worktreeId:A,preparationId:t.id,definitionHash:t.definitionHash,state:t.state,message:"string"==typeof t.message?t.message:null,checkedAt:a},update:{definitionHash:t.definitionHash,state:t.state,message:"string"==typeof t.message?t.message:null,checkedAt:a}})}}async worktreeCreatedNotification(A,e,t,r){return this.notifications?.recordInTransaction(A,{dedupeKey:`worktree-created:${e}`,typeKey:"WORKTREE_CREATED",title:"Worktree created",body:(t.branch||t.relativePath).slice(0,1e3),href:`/dashboard/worktrees/${encodeURIComponent(e)}`,resourceKind:"WORKTREE",resourceId:e,worktreeId:e,highlightColor:r})??null}async recordWorktreeCreated(A){if(!this.workflowEvents)return;let e=await this.workflowSessionDataForWorktree(A);Object.keys(e).length&&await this.workflowEvents.record({kind:"WORKTREE_CREATED",subjectKey:A,dedupeKey:`worktree-created:${A}`,payload:{...e,sessionData:e}})}async waitForJob(A){let e=g._H.iterate((0,g.BC)(A)),t=Date.now()+3e4;try{for(;Date.now()<t;){let r=await this.agentControl.getJob(A);if(!r)throw Error("Worktree job disappeared");if(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(r.status))return r;await Promise.race([e.next(),new Promise(A=>setTimeout(A,t-Date.now()))])}throw await this.agentControl.cancelJob(A),Error("Agent did not respond in time")}finally{await e.return?.()}}},"b",0,L],520962)}],701256,(A,e,t)=>{e.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}},247409,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/applicator":!0},$recursiveAnchor:!0,title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{additionalItems:{$recursiveRef:"#"},unevaluatedItems:{$recursiveRef:"#"},items:{anyOf:[{$recursiveRef:"#"},{$ref:"#/$defs/schemaArray"}]},contains:{$recursiveRef:"#"},additionalProperties:{$recursiveRef:"#"},unevaluatedProperties:{$recursiveRef:"#"},properties:{type:"object",additionalProperties:{$recursiveRef:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$recursiveRef:"#"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$recursiveRef:"#"}},propertyNames:{$recursiveRef:"#"},if:{$recursiveRef:"#"},then:{$recursiveRef:"#"},else:{$recursiveRef:"#"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$recursiveRef:"#"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$recursiveRef:"#"}}}}},632375,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/content",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/content":!0},$recursiveAnchor:!0,title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentMediaType:{type:"string"},contentEncoding:{type:"string"},contentSchema:{$recursiveRef:"#"}}}},32546,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/core",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/core":!0},$recursiveAnchor:!0,title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{type:"string",format:"uri"},$anchor:{type:"string",pattern:"^[A-Za-z][-A-Za-z0-9.:_]*$"},$ref:{type:"string",format:"uri-reference"},$recursiveRef:{type:"string",format:"uri-reference"},$recursiveAnchor:{type:"boolean",default:!1},$vocabulary:{type:"object",propertyNames:{type:"string",format:"uri"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$recursiveRef:"#"},default:{}}}}},674259,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/format",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/format":!0},$recursiveAnchor:!0,title:"Format vocabulary meta-schema",type:["object","boolean"],properties:{format:{type:"string"}}}},451421,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/meta-data":!0},$recursiveAnchor:!0,title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}},911967,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/validation",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/validation":!0},$recursiveAnchor:!0,title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}},const:!0,enum:{type:"array",items:!0},type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}},584785,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/schema",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/core":!0,"https://json-schema.org/draft/2019-09/vocab/applicator":!0,"https://json-schema.org/draft/2019-09/vocab/validation":!0,"https://json-schema.org/draft/2019-09/vocab/meta-data":!0,"https://json-schema.org/draft/2019-09/vocab/format":!1,"https://json-schema.org/draft/2019-09/vocab/content":!0},$recursiveAnchor:!0,title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format"},{$ref:"meta/content"}],type:["object","boolean"],properties:{definitions:{$comment:"While no longer an official keyword as it is replaced by $defs, this keyword is retained in the meta-schema to prevent incompatible extensions as it remains in common use.",type:"object",additionalProperties:{$recursiveRef:"#"},default:{}},dependencies:{$comment:'"dependencies" is no longer a keyword, but schema authors should avoid redefining it to facilitate a smooth transition to "dependentSchemas" and "dependentRequired"',type:"object",additionalProperties:{anyOf:[{$recursiveRef:"#"},{$ref:"meta/validation#/$defs/stringArray"}]}}}}},705129,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/applicator":!0},$dynamicAnchor:"meta",title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}}}},699737,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/content",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}}}},785062,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/core",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0},$dynamicAnchor:"meta",title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},$defs:{anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}}}},649145,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/format-annotation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},$dynamicAnchor:"meta",title:"Format vocabulary meta-schema for annotation results",type:["object","boolean"],properties:{format:{type:"string"}}}},231758,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},$dynamicAnchor:"meta",title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}},566081,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/unevaluated",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},$dynamicAnchor:"meta",title:"Unevaluated applicator vocabulary meta-schema",type:["object","boolean"],properties:{unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}}}},133378,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/validation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/validation":!0},$dynamicAnchor:"meta",title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}},9457,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/schema",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],type:["object","boolean"],$comment:"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",properties:{definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}}}},371891,(A,e,t)=>{e.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}},622578,(A,e,t)=>{!function(e,t){"use strict";function r(A,e){if(!A)throw Error(e||"Assertion failed")}function i(A,e){A.super_=e;var t=function(){};t.prototype=e.prototype,A.prototype=new t,A.prototype.constructor=A}function n(A,e,t){if(n.isBN(A))return A;this.negative=0,this.words=null,this.length=0,this.red=null,null!==A&&(("le"===e||"be"===e)&&(t=e,e=10),this._init(A||0,e||10,t||"be"))}e.exports=n,n.BN=n,n.wordSize=26;try{l=A.r(500874).Buffer}catch(A){}function a(A,e){var t=A.charCodeAt(e);return t>=65&&t<=70?t-55:t>=97&&t<=102?t-87:t-48&15}function s(A,e,t){var r=a(A,t);return t-1>=e&&(r|=a(A,t-1)<<4),r}function o(A,e,t,r){for(var i=0,n=Math.min(A.length,t),a=e;a<n;a++){var s=A.charCodeAt(a)-48;i*=r,s>=49?i+=s-49+10:s>=17?i+=s-17+10:i+=s}return i}n.isBN=function(A){return A instanceof n||null!==A&&"object"==typeof A&&A.constructor.wordSize===n.wordSize&&Array.isArray(A.words)},n.max=function(A,e){return A.cmp(e)>0?A:e},n.min=function(A,e){return 0>A.cmp(e)?A:e},n.prototype._init=function(A,e,t){if("number"==typeof A)return this._initNumber(A,e,t);if("object"==typeof A)return this._initArray(A,e,t);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(A=A.toString().replace(/\s+/g,""))[0]&&(i++,this.negative=1),i<A.length&&(16===e?this._parseHex(A,i,t):(this._parseBase(A,e,i),"le"===t&&this._initArray(this.toArray(),e,t)))},n.prototype._initNumber=function(A,e,t){A<0&&(this.negative=1,A=-A),A<0x4000000?(this.words=[0x3ffffff&A],this.length=1):A<0x10000000000000?(this.words=[0x3ffffff&A,A/0x4000000&0x3ffffff],this.length=2):(r(A<0x20000000000000),this.words=[0x3ffffff&A,A/0x4000000&0x3ffffff,1],this.length=3),"le"===t&&this._initArray(this.toArray(),e,t)},n.prototype._initArray=function(A,e,t){if(r("number"==typeof A.length),A.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(A.length/3),this.words=Array(this.length);for(var i,n,a=0;a<this.length;a++)this.words[a]=0;var s=0;if("be"===t)for(a=A.length-1,i=0;a>=0;a-=3)n=A[a]|A[a-1]<<8|A[a-2]<<16,this.words[i]|=n<<s&0x3ffffff,this.words[i+1]=n>>>26-s&0x3ffffff,(s+=24)>=26&&(s-=26,i++);else if("le"===t)for(a=0,i=0;a<A.length;a+=3)n=A[a]|A[a+1]<<8|A[a+2]<<16,this.words[i]|=n<<s&0x3ffffff,this.words[i+1]=n>>>26-s&0x3ffffff,(s+=24)>=26&&(s-=26,i++);return this.strip()},n.prototype._parseHex=function(A,e,t){this.length=Math.ceil((A.length-e)/6),this.words=Array(this.length);for(var r,i=0;i<this.length;i++)this.words[i]=0;var n=0,a=0;if("be"===t)for(i=A.length-1;i>=e;i-=2)r=s(A,e,i)<<n,this.words[a]|=0x3ffffff&r,n>=18?(n-=18,a+=1,this.words[a]|=r>>>26):n+=8;else for(i=(A.length-e)%2==0?e+1:e;i<A.length;i+=2)r=s(A,e,i)<<n,this.words[a]|=0x3ffffff&r,n>=18?(n-=18,a+=1,this.words[a]|=r>>>26):n+=8;this.strip()},n.prototype._parseBase=function(A,e,t){this.words=[0],this.length=1;for(var r=0,i=1;i<=0x3ffffff;i*=e)r++;r--,i=i/e|0;for(var n=A.length-t,a=n%r,s=Math.min(n,n-a)+t,l=0,c=t;c<s;c+=r)l=o(A,c,c+r,e),this.imuln(i),this.words[0]+l<0x4000000?this.words[0]+=l:this._iaddn(l);if(0!==a){var d=1;for(l=o(A,c,A.length,e),c=0;c<a;c++)d*=e;this.imuln(d),this.words[0]+l<0x4000000?this.words[0]+=l:this._iaddn(l)}this.strip()},n.prototype.copy=function(A){A.words=Array(this.length);for(var e=0;e<this.length;e++)A.words[e]=this.words[e];A.length=this.length,A.negative=this.negative,A.red=this.red},n.prototype.clone=function(){var A=new n(null);return this.copy(A),A},n.prototype._expand=function(A){for(;this.length<A;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var l,c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],u=[0,0,0x2000000,0x290d741,0x1000000,0x2e90edd,0x39aa400,0x267bf47,0x1000000,0x290d741,1e7,0x12959c3,0x222c000,0x3bd7765,7529536,0xadcea1,0x1000000,0x1704f61,0x206fc40,0x2cddcf9,64e6,4084101,5153632,6436343,7962624,9765625,0xb54ba0,0xdaf26b,0x1069c00,0x138f9ad,243e5,0x1b4d89f,0x2000000,0x25528a1,0x2b54a20,0x3216b93,0x39aa400];function g(A,e,t){t.negative=e.negative^A.negative;var r=A.length+e.length|0;t.length=r,r=r-1|0;var i=0|A.words[0],n=0|e.words[0],a=i*n,s=0x3ffffff&a,o=a/0x4000000|0;t.words[0]=s;for(var l=1;l<r;l++){for(var c=o>>>26,d=0x3ffffff&o,u=Math.min(l,e.length-1),g=Math.max(0,l-A.length+1);g<=u;g++){var h=l-g|0;c+=(a=(i=0|A.words[h])*(n=0|e.words[g])+d)/0x4000000|0,d=0x3ffffff&a}t.words[l]=0|d,o=0|c}return 0!==o?t.words[l]=0|o:t.length--,t.strip()}n.prototype.toString=function(A,e){if(e=0|e||1,16===(A=A||10)||"hex"===A){for(var t="",i=0,n=0,a=0;a<this.length;a++){var s=this.words[a],o=((s<<i|n)&0xffffff).toString(16);n=s>>>24-i&0xffffff,(i+=2)>=26&&(i-=26,a--),t=0!==n||a!==this.length-1?c[6-o.length]+o+t:o+t}for(0!==n&&(t=n.toString(16)+t);t.length%e!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}if(A===(0|A)&&A>=2&&A<=36){var l=d[A],g=u[A];t="";var h=this.clone();for(h.negative=0;!h.isZero();){var C=h.modn(g).toString(A);t=(h=h.idivn(g)).isZero()?C+t:c[l-C.length]+C+t}for(this.isZero()&&(t="0"+t);t.length%e!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var A=this.words[0];return 2===this.length?A+=0x4000000*this.words[1]:3===this.length&&1===this.words[2]?A+=0x10000000000000+0x4000000*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-A:A},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(A,e){return r(void 0!==l),this.toArrayLike(l,A,e)},n.prototype.toArray=function(A,e){return this.toArrayLike(Array,A,e)},n.prototype.toArrayLike=function(A,e,t){var i,n,a=this.byteLength(),s=t||Math.max(1,a);r(a<=s,"byte array longer than desired length"),r(s>0,"Requested array length <= 0"),this.strip();var o=new A(s),l=this.clone();if("le"===e){for(n=0;!l.isZero();n++)i=l.andln(255),l.iushrn(8),o[n]=i;for(;n<s;n++)o[n]=0}else{for(n=0;n<s-a;n++)o[n]=0;for(n=0;!l.isZero();n++)i=l.andln(255),l.iushrn(8),o[s-n-1]=i}return o},Math.clz32?n.prototype._countBits=function(A){return 32-Math.clz32(A)}:n.prototype._countBits=function(A){var e=A,t=0;return e>=4096&&(t+=13,e>>>=13),e>=64&&(t+=7,e>>>=7),e>=8&&(t+=4,e>>>=4),e>=2&&(t+=2,e>>>=2),t+e},n.prototype._zeroBits=function(A){if(0===A)return 26;var e=A,t=0;return(8191&e)==0&&(t+=13,e>>>=13),(127&e)==0&&(t+=7,e>>>=7),(15&e)==0&&(t+=4,e>>>=4),(3&e)==0&&(t+=2,e>>>=2),(1&e)==0&&t++,t},n.prototype.bitLength=function(){var A=this.words[this.length-1],e=this._countBits(A);return(this.length-1)*26+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var A=0,e=0;e<this.length;e++){var t=this._zeroBits(this.words[e]);if(A+=t,26!==t)break}return A},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(A){return 0!==this.negative?this.abs().inotn(A).iaddn(1):this.clone()},n.prototype.fromTwos=function(A){return this.testn(A-1)?this.notn(A).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(A){for(;this.length<A.length;)this.words[this.length++]=0;for(var e=0;e<A.length;e++)this.words[e]=this.words[e]|A.words[e];return this.strip()},n.prototype.ior=function(A){return r((this.negative|A.negative)==0),this.iuor(A)},n.prototype.or=function(A){return this.length>A.length?this.clone().ior(A):A.clone().ior(this)},n.prototype.uor=function(A){return this.length>A.length?this.clone().iuor(A):A.clone().iuor(this)},n.prototype.iuand=function(A){var e;e=this.length>A.length?A:this;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]&A.words[t];return this.length=e.length,this.strip()},n.prototype.iand=function(A){return r((this.negative|A.negative)==0),this.iuand(A)},n.prototype.and=function(A){return this.length>A.length?this.clone().iand(A):A.clone().iand(this)},n.prototype.uand=function(A){return this.length>A.length?this.clone().iuand(A):A.clone().iuand(this)},n.prototype.iuxor=function(A){this.length>A.length?(e=this,t=A):(e=A,t=this);for(var e,t,r=0;r<t.length;r++)this.words[r]=e.words[r]^t.words[r];if(this!==e)for(;r<e.length;r++)this.words[r]=e.words[r];return this.length=e.length,this.strip()},n.prototype.ixor=function(A){return r((this.negative|A.negative)==0),this.iuxor(A)},n.prototype.xor=function(A){return this.length>A.length?this.clone().ixor(A):A.clone().ixor(this)},n.prototype.uxor=function(A){return this.length>A.length?this.clone().iuxor(A):A.clone().iuxor(this)},n.prototype.inotn=function(A){r("number"==typeof A&&A>=0);var e=0|Math.ceil(A/26),t=A%26;this._expand(e),t>0&&e--;for(var i=0;i<e;i++)this.words[i]=0x3ffffff&~this.words[i];for(t>0&&(this.words[i]=~this.words[i]&0x3ffffff>>26-t,i++);i<this.length;i++)this.words[i]=0;return this.strip()},n.prototype.notn=function(A){return this.clone().inotn(A)},n.prototype.setn=function(A,e){r("number"==typeof A&&A>=0);var t=A/26|0,i=A%26;return this._expand(t+1),e?this.words[t]=this.words[t]|1<<i:this.words[t]=this.words[t]&~(1<<i),this.strip()},n.prototype.iadd=function(A){if(0!==this.negative&&0===A.negative)return this.negative=0,e=this.isub(A),this.negative^=1,this._normSign();if(0===this.negative&&0!==A.negative)return A.negative=0,e=this.isub(A),A.negative=1,e._normSign();this.length>A.length?(t=this,r=A):(t=A,r=this);for(var e,t,r,i=0,n=0;n<r.length;n++)e=(0|t.words[n])+(0|r.words[n])+i,this.words[n]=0x3ffffff&e,i=e>>>26;for(;0!==i&&n<t.length;n++)e=(0|t.words[n])+i,this.words[n]=0x3ffffff&e,i=e>>>26;if(this.length=t.length,0!==i)this.words[this.length]=i,this.length++;else if(t!==this)for(;n<t.length;n++)this.words[n]=t.words[n];return this},n.prototype.add=function(A){var e;return 0!==A.negative&&0===this.negative?(A.negative=0,e=this.sub(A),A.negative^=1,e):0===A.negative&&0!==this.negative?(this.negative=0,e=A.sub(this),this.negative=1,e):this.length>A.length?this.clone().iadd(A):A.clone().iadd(this)},n.prototype.isub=function(A){if(0!==A.negative){A.negative=0;var e,t,r=this.iadd(A);return A.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(A),this.negative=1,this._normSign();var i=this.cmp(A);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(e=this,t=A):(e=A,t=this);for(var n=0,a=0;a<t.length;a++)n=(r=(0|e.words[a])-(0|t.words[a])+n)>>26,this.words[a]=0x3ffffff&r;for(;0!==n&&a<e.length;a++)n=(r=(0|e.words[a])+n)>>26,this.words[a]=0x3ffffff&r;if(0===n&&a<e.length&&e!==this)for(;a<e.length;a++)this.words[a]=e.words[a];return this.length=Math.max(this.length,a),e!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(A){return this.clone().isub(A)};var h=function(A,e,t){var r,i,n,a=A.words,s=e.words,o=t.words,l=0,c=0|a[0],d=8191&c,u=c>>>13,g=0|a[1],h=8191&g,C=g>>>13,p=0|a[2],I=8191&p,m=p>>>13,f=0|a[3],E=8191&f,w=f>>>13,Q=0|a[4],y=8191&Q,B=Q>>>13,D=0|a[5],k=8191&D,b=D>>>13,S=0|a[6],R=8191&S,M=S>>>13,O=0|a[7],N=8191&O,H=O>>>13,v=0|a[8],T=8191&v,U=v>>>13,J=0|a[9],x=8191&J,_=J>>>13,G=0|s[0],L=8191&G,P=G>>>13,j=0|s[1],Y=8191&j,F=j>>>13,K=0|s[2],q=8191&K,V=K>>>13,z=0|s[3],W=8191&z,$=z>>>13,Z=0|s[4],X=8191&Z,AA=Z>>>13,Ae=0|s[5],At=8191&Ae,Ar=Ae>>>13,Ai=0|s[6],An=8191&Ai,Aa=Ai>>>13,As=0|s[7],Ao=8191&As,Al=As>>>13,Ac=0|s[8],Ad=8191&Ac,Au=Ac>>>13,Ag=0|s[9],Ah=8191&Ag,AC=Ag>>>13;t.negative=A.negative^e.negative,t.length=19,r=Math.imul(d,L);var Ap=(l+r|0)+((8191&(i=(i=Math.imul(d,P))+Math.imul(u,L)|0))<<13)|0;l=((n=Math.imul(u,P))+(i>>>13)|0)+(Ap>>>26)|0,Ap&=0x3ffffff,r=Math.imul(h,L),i=(i=Math.imul(h,P))+Math.imul(C,L)|0,n=Math.imul(C,P),r=r+Math.imul(d,Y)|0;var AI=(l+r|0)+((8191&(i=(i=i+Math.imul(d,F)|0)+Math.imul(u,Y)|0))<<13)|0;l=((n=n+Math.imul(u,F)|0)+(i>>>13)|0)+(AI>>>26)|0,AI&=0x3ffffff,r=Math.imul(I,L),i=(i=Math.imul(I,P))+Math.imul(m,L)|0,n=Math.imul(m,P),r=r+Math.imul(h,Y)|0,i=(i=i+Math.imul(h,F)|0)+Math.imul(C,Y)|0,n=n+Math.imul(C,F)|0,r=r+Math.imul(d,q)|0;var Am=(l+r|0)+((8191&(i=(i=i+Math.imul(d,V)|0)+Math.imul(u,q)|0))<<13)|0;l=((n=n+Math.imul(u,V)|0)+(i>>>13)|0)+(Am>>>26)|0,Am&=0x3ffffff,r=Math.imul(E,L),i=(i=Math.imul(E,P))+Math.imul(w,L)|0,n=Math.imul(w,P),r=r+Math.imul(I,Y)|0,i=(i=i+Math.imul(I,F)|0)+Math.imul(m,Y)|0,n=n+Math.imul(m,F)|0,r=r+Math.imul(h,q)|0,i=(i=i+Math.imul(h,V)|0)+Math.imul(C,q)|0,n=n+Math.imul(C,V)|0,r=r+Math.imul(d,W)|0;var Af=(l+r|0)+((8191&(i=(i=i+Math.imul(d,$)|0)+Math.imul(u,W)|0))<<13)|0;l=((n=n+Math.imul(u,$)|0)+(i>>>13)|0)+(Af>>>26)|0,Af&=0x3ffffff,r=Math.imul(y,L),i=(i=Math.imul(y,P))+Math.imul(B,L)|0,n=Math.imul(B,P),r=r+Math.imul(E,Y)|0,i=(i=i+Math.imul(E,F)|0)+Math.imul(w,Y)|0,n=n+Math.imul(w,F)|0,r=r+Math.imul(I,q)|0,i=(i=i+Math.imul(I,V)|0)+Math.imul(m,q)|0,n=n+Math.imul(m,V)|0,r=r+Math.imul(h,W)|0,i=(i=i+Math.imul(h,$)|0)+Math.imul(C,W)|0,n=n+Math.imul(C,$)|0,r=r+Math.imul(d,X)|0;var AE=(l+r|0)+((8191&(i=(i=i+Math.imul(d,AA)|0)+Math.imul(u,X)|0))<<13)|0;l=((n=n+Math.imul(u,AA)|0)+(i>>>13)|0)+(AE>>>26)|0,AE&=0x3ffffff,r=Math.imul(k,L),i=(i=Math.imul(k,P))+Math.imul(b,L)|0,n=Math.imul(b,P),r=r+Math.imul(y,Y)|0,i=(i=i+Math.imul(y,F)|0)+Math.imul(B,Y)|0,n=n+Math.imul(B,F)|0,r=r+Math.imul(E,q)|0,i=(i=i+Math.imul(E,V)|0)+Math.imul(w,q)|0,n=n+Math.imul(w,V)|0,r=r+Math.imul(I,W)|0,i=(i=i+Math.imul(I,$)|0)+Math.imul(m,W)|0,n=n+Math.imul(m,$)|0,r=r+Math.imul(h,X)|0,i=(i=i+Math.imul(h,AA)|0)+Math.imul(C,X)|0,n=n+Math.imul(C,AA)|0,r=r+Math.imul(d,At)|0;var Aw=(l+r|0)+((8191&(i=(i=i+Math.imul(d,Ar)|0)+Math.imul(u,At)|0))<<13)|0;l=((n=n+Math.imul(u,Ar)|0)+(i>>>13)|0)+(Aw>>>26)|0,Aw&=0x3ffffff,r=Math.imul(R,L),i=(i=Math.imul(R,P))+Math.imul(M,L)|0,n=Math.imul(M,P),r=r+Math.imul(k,Y)|0,i=(i=i+Math.imul(k,F)|0)+Math.imul(b,Y)|0,n=n+Math.imul(b,F)|0,r=r+Math.imul(y,q)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(B,q)|0,n=n+Math.imul(B,V)|0,r=r+Math.imul(E,W)|0,i=(i=i+Math.imul(E,$)|0)+Math.imul(w,W)|0,n=n+Math.imul(w,$)|0,r=r+Math.imul(I,X)|0,i=(i=i+Math.imul(I,AA)|0)+Math.imul(m,X)|0,n=n+Math.imul(m,AA)|0,r=r+Math.imul(h,At)|0,i=(i=i+Math.imul(h,Ar)|0)+Math.imul(C,At)|0,n=n+Math.imul(C,Ar)|0,r=r+Math.imul(d,An)|0;var AQ=(l+r|0)+((8191&(i=(i=i+Math.imul(d,Aa)|0)+Math.imul(u,An)|0))<<13)|0;l=((n=n+Math.imul(u,Aa)|0)+(i>>>13)|0)+(AQ>>>26)|0,AQ&=0x3ffffff,r=Math.imul(N,L),i=(i=Math.imul(N,P))+Math.imul(H,L)|0,n=Math.imul(H,P),r=r+Math.imul(R,Y)|0,i=(i=i+Math.imul(R,F)|0)+Math.imul(M,Y)|0,n=n+Math.imul(M,F)|0,r=r+Math.imul(k,q)|0,i=(i=i+Math.imul(k,V)|0)+Math.imul(b,q)|0,n=n+Math.imul(b,V)|0,r=r+Math.imul(y,W)|0,i=(i=i+Math.imul(y,$)|0)+Math.imul(B,W)|0,n=n+Math.imul(B,$)|0,r=r+Math.imul(E,X)|0,i=(i=i+Math.imul(E,AA)|0)+Math.imul(w,X)|0,n=n+Math.imul(w,AA)|0,r=r+Math.imul(I,At)|0,i=(i=i+Math.imul(I,Ar)|0)+Math.imul(m,At)|0,n=n+Math.imul(m,Ar)|0,r=r+Math.imul(h,An)|0,i=(i=i+Math.imul(h,Aa)|0)+Math.imul(C,An)|0,n=n+Math.imul(C,Aa)|0,r=r+Math.imul(d,Ao)|0;var Ay=(l+r|0)+((8191&(i=(i=i+Math.imul(d,Al)|0)+Math.imul(u,Ao)|0))<<13)|0;l=((n=n+Math.imul(u,Al)|0)+(i>>>13)|0)+(Ay>>>26)|0,Ay&=0x3ffffff,r=Math.imul(T,L),i=(i=Math.imul(T,P))+Math.imul(U,L)|0,n=Math.imul(U,P),r=r+Math.imul(N,Y)|0,i=(i=i+Math.imul(N,F)|0)+Math.imul(H,Y)|0,n=n+Math.imul(H,F)|0,r=r+Math.imul(R,q)|0,i=(i=i+Math.imul(R,V)|0)+Math.imul(M,q)|0,n=n+Math.imul(M,V)|0,r=r+Math.imul(k,W)|0,i=(i=i+Math.imul(k,$)|0)+Math.imul(b,W)|0,n=n+Math.imul(b,$)|0,r=r+Math.imul(y,X)|0,i=(i=i+Math.imul(y,AA)|0)+Math.imul(B,X)|0,n=n+Math.imul(B,AA)|0,r=r+Math.imul(E,At)|0,i=(i=i+Math.imul(E,Ar)|0)+Math.imul(w,At)|0,n=n+Math.imul(w,Ar)|0,r=r+Math.imul(I,An)|0,i=(i=i+Math.imul(I,Aa)|0)+Math.imul(m,An)|0,n=n+Math.imul(m,Aa)|0,r=r+Math.imul(h,Ao)|0,i=(i=i+Math.imul(h,Al)|0)+Math.imul(C,Ao)|0,n=n+Math.imul(C,Al)|0,r=r+Math.imul(d,Ad)|0;var AB=(l+r|0)+((8191&(i=(i=i+Math.imul(d,Au)|0)+Math.imul(u,Ad)|0))<<13)|0;l=((n=n+Math.imul(u,Au)|0)+(i>>>13)|0)+(AB>>>26)|0,AB&=0x3ffffff,r=Math.imul(x,L),i=(i=Math.imul(x,P))+Math.imul(_,L)|0,n=Math.imul(_,P),r=r+Math.imul(T,Y)|0,i=(i=i+Math.imul(T,F)|0)+Math.imul(U,Y)|0,n=n+Math.imul(U,F)|0,r=r+Math.imul(N,q)|0,i=(i=i+Math.imul(N,V)|0)+Math.imul(H,q)|0,n=n+Math.imul(H,V)|0,r=r+Math.imul(R,W)|0,i=(i=i+Math.imul(R,$)|0)+Math.imul(M,W)|0,n=n+Math.imul(M,$)|0,r=r+Math.imul(k,X)|0,i=(i=i+Math.imul(k,AA)|0)+Math.imul(b,X)|0,n=n+Math.imul(b,AA)|0,r=r+Math.imul(y,At)|0,i=(i=i+Math.imul(y,Ar)|0)+Math.imul(B,At)|0,n=n+Math.imul(B,Ar)|0,r=r+Math.imul(E,An)|0,i=(i=i+Math.imul(E,Aa)|0)+Math.imul(w,An)|0,n=n+Math.imul(w,Aa)|0,r=r+Math.imul(I,Ao)|0,i=(i=i+Math.imul(I,Al)|0)+Math.imul(m,Ao)|0,n=n+Math.imul(m,Al)|0,r=r+Math.imul(h,Ad)|0,i=(i=i+Math.imul(h,Au)|0)+Math.imul(C,Ad)|0,n=n+Math.imul(C,Au)|0,r=r+Math.imul(d,Ah)|0;var AD=(l+r|0)+((8191&(i=(i=i+Math.imul(d,AC)|0)+Math.imul(u,Ah)|0))<<13)|0;l=((n=n+Math.imul(u,AC)|0)+(i>>>13)|0)+(AD>>>26)|0,AD&=0x3ffffff,r=Math.imul(x,Y),i=(i=Math.imul(x,F))+Math.imul(_,Y)|0,n=Math.imul(_,F),r=r+Math.imul(T,q)|0,i=(i=i+Math.imul(T,V)|0)+Math.imul(U,q)|0,n=n+Math.imul(U,V)|0,r=r+Math.imul(N,W)|0,i=(i=i+Math.imul(N,$)|0)+Math.imul(H,W)|0,n=n+Math.imul(H,$)|0,r=r+Math.imul(R,X)|0,i=(i=i+Math.imul(R,AA)|0)+Math.imul(M,X)|0,n=n+Math.imul(M,AA)|0,r=r+Math.imul(k,At)|0,i=(i=i+Math.imul(k,Ar)|0)+Math.imul(b,At)|0,n=n+Math.imul(b,Ar)|0,r=r+Math.imul(y,An)|0,i=(i=i+Math.imul(y,Aa)|0)+Math.imul(B,An)|0,n=n+Math.imul(B,Aa)|0,r=r+Math.imul(E,Ao)|0,i=(i=i+Math.imul(E,Al)|0)+Math.imul(w,Ao)|0,n=n+Math.imul(w,Al)|0,r=r+Math.imul(I,Ad)|0,i=(i=i+Math.imul(I,Au)|0)+Math.imul(m,Ad)|0,n=n+Math.imul(m,Au)|0,r=r+Math.imul(h,Ah)|0;var Ak=(l+r|0)+((8191&(i=(i=i+Math.imul(h,AC)|0)+Math.imul(C,Ah)|0))<<13)|0;l=((n=n+Math.imul(C,AC)|0)+(i>>>13)|0)+(Ak>>>26)|0,Ak&=0x3ffffff,r=Math.imul(x,q),i=(i=Math.imul(x,V))+Math.imul(_,q)|0,n=Math.imul(_,V),r=r+Math.imul(T,W)|0,i=(i=i+Math.imul(T,$)|0)+Math.imul(U,W)|0,n=n+Math.imul(U,$)|0,r=r+Math.imul(N,X)|0,i=(i=i+Math.imul(N,AA)|0)+Math.imul(H,X)|0,n=n+Math.imul(H,AA)|0,r=r+Math.imul(R,At)|0,i=(i=i+Math.imul(R,Ar)|0)+Math.imul(M,At)|0,n=n+Math.imul(M,Ar)|0,r=r+Math.imul(k,An)|0,i=(i=i+Math.imul(k,Aa)|0)+Math.imul(b,An)|0,n=n+Math.imul(b,Aa)|0,r=r+Math.imul(y,Ao)|0,i=(i=i+Math.imul(y,Al)|0)+Math.imul(B,Ao)|0,n=n+Math.imul(B,Al)|0,r=r+Math.imul(E,Ad)|0,i=(i=i+Math.imul(E,Au)|0)+Math.imul(w,Ad)|0,n=n+Math.imul(w,Au)|0,r=r+Math.imul(I,Ah)|0;var Ab=(l+r|0)+((8191&(i=(i=i+Math.imul(I,AC)|0)+Math.imul(m,Ah)|0))<<13)|0;l=((n=n+Math.imul(m,AC)|0)+(i>>>13)|0)+(Ab>>>26)|0,Ab&=0x3ffffff,r=Math.imul(x,W),i=(i=Math.imul(x,$))+Math.imul(_,W)|0,n=Math.imul(_,$),r=r+Math.imul(T,X)|0,i=(i=i+Math.imul(T,AA)|0)+Math.imul(U,X)|0,n=n+Math.imul(U,AA)|0,r=r+Math.imul(N,At)|0,i=(i=i+Math.imul(N,Ar)|0)+Math.imul(H,At)|0,n=n+Math.imul(H,Ar)|0,r=r+Math.imul(R,An)|0,i=(i=i+Math.imul(R,Aa)|0)+Math.imul(M,An)|0,n=n+Math.imul(M,Aa)|0,r=r+Math.imul(k,Ao)|0,i=(i=i+Math.imul(k,Al)|0)+Math.imul(b,Ao)|0,n=n+Math.imul(b,Al)|0,r=r+Math.imul(y,Ad)|0,i=(i=i+Math.imul(y,Au)|0)+Math.imul(B,Ad)|0,n=n+Math.imul(B,Au)|0,r=r+Math.imul(E,Ah)|0;var AS=(l+r|0)+((8191&(i=(i=i+Math.imul(E,AC)|0)+Math.imul(w,Ah)|0))<<13)|0;l=((n=n+Math.imul(w,AC)|0)+(i>>>13)|0)+(AS>>>26)|0,AS&=0x3ffffff,r=Math.imul(x,X),i=(i=Math.imul(x,AA))+Math.imul(_,X)|0,n=Math.imul(_,AA),r=r+Math.imul(T,At)|0,i=(i=i+Math.imul(T,Ar)|0)+Math.imul(U,At)|0,n=n+Math.imul(U,Ar)|0,r=r+Math.imul(N,An)|0,i=(i=i+Math.imul(N,Aa)|0)+Math.imul(H,An)|0,n=n+Math.imul(H,Aa)|0,r=r+Math.imul(R,Ao)|0,i=(i=i+Math.imul(R,Al)|0)+Math.imul(M,Ao)|0,n=n+Math.imul(M,Al)|0,r=r+Math.imul(k,Ad)|0,i=(i=i+Math.imul(k,Au)|0)+Math.imul(b,Ad)|0,n=n+Math.imul(b,Au)|0,r=r+Math.imul(y,Ah)|0;var AR=(l+r|0)+((8191&(i=(i=i+Math.imul(y,AC)|0)+Math.imul(B,Ah)|0))<<13)|0;l=((n=n+Math.imul(B,AC)|0)+(i>>>13)|0)+(AR>>>26)|0,AR&=0x3ffffff,r=Math.imul(x,At),i=(i=Math.imul(x,Ar))+Math.imul(_,At)|0,n=Math.imul(_,Ar),r=r+Math.imul(T,An)|0,i=(i=i+Math.imul(T,Aa)|0)+Math.imul(U,An)|0,n=n+Math.imul(U,Aa)|0,r=r+Math.imul(N,Ao)|0,i=(i=i+Math.imul(N,Al)|0)+Math.imul(H,Ao)|0,n=n+Math.imul(H,Al)|0,r=r+Math.imul(R,Ad)|0,i=(i=i+Math.imul(R,Au)|0)+Math.imul(M,Ad)|0,n=n+Math.imul(M,Au)|0,r=r+Math.imul(k,Ah)|0;var AM=(l+r|0)+((8191&(i=(i=i+Math.imul(k,AC)|0)+Math.imul(b,Ah)|0))<<13)|0;l=((n=n+Math.imul(b,AC)|0)+(i>>>13)|0)+(AM>>>26)|0,AM&=0x3ffffff,r=Math.imul(x,An),i=(i=Math.imul(x,Aa))+Math.imul(_,An)|0,n=Math.imul(_,Aa),r=r+Math.imul(T,Ao)|0,i=(i=i+Math.imul(T,Al)|0)+Math.imul(U,Ao)|0,n=n+Math.imul(U,Al)|0,r=r+Math.imul(N,Ad)|0,i=(i=i+Math.imul(N,Au)|0)+Math.imul(H,Ad)|0,n=n+Math.imul(H,Au)|0,r=r+Math.imul(R,Ah)|0;var AO=(l+r|0)+((8191&(i=(i=i+Math.imul(R,AC)|0)+Math.imul(M,Ah)|0))<<13)|0;l=((n=n+Math.imul(M,AC)|0)+(i>>>13)|0)+(AO>>>26)|0,AO&=0x3ffffff,r=Math.imul(x,Ao),i=(i=Math.imul(x,Al))+Math.imul(_,Ao)|0,n=Math.imul(_,Al),r=r+Math.imul(T,Ad)|0,i=(i=i+Math.imul(T,Au)|0)+Math.imul(U,Ad)|0,n=n+Math.imul(U,Au)|0,r=r+Math.imul(N,Ah)|0;var AN=(l+r|0)+((8191&(i=(i=i+Math.imul(N,AC)|0)+Math.imul(H,Ah)|0))<<13)|0;l=((n=n+Math.imul(H,AC)|0)+(i>>>13)|0)+(AN>>>26)|0,AN&=0x3ffffff,r=Math.imul(x,Ad),i=(i=Math.imul(x,Au))+Math.imul(_,Ad)|0,n=Math.imul(_,Au),r=r+Math.imul(T,Ah)|0;var AH=(l+r|0)+((8191&(i=(i=i+Math.imul(T,AC)|0)+Math.imul(U,Ah)|0))<<13)|0;l=((n=n+Math.imul(U,AC)|0)+(i>>>13)|0)+(AH>>>26)|0,AH&=0x3ffffff,r=Math.imul(x,Ah);var Av=(l+r|0)+((8191&(i=(i=Math.imul(x,AC))+Math.imul(_,Ah)|0))<<13)|0;return l=((n=Math.imul(_,AC))+(i>>>13)|0)+(Av>>>26)|0,Av&=0x3ffffff,o[0]=Ap,o[1]=AI,o[2]=Am,o[3]=Af,o[4]=AE,o[5]=Aw,o[6]=AQ,o[7]=Ay,o[8]=AB,o[9]=AD,o[10]=Ak,o[11]=Ab,o[12]=AS,o[13]=AR,o[14]=AM,o[15]=AO,o[16]=AN,o[17]=AH,o[18]=Av,0!==l&&(o[19]=l,t.length++),t};function C(A,e,t){return new p().mulp(A,e,t)}function p(A,e){this.x=A,this.y=e}Math.imul||(h=g),n.prototype.mulTo=function(A,e){var t=this.length+A.length;return 10===this.length&&10===A.length?h(this,A,e):t<63?g(this,A,e):t<1024?function(A,e,t){t.negative=e.negative^A.negative,t.length=A.length+e.length;for(var r=0,i=0,n=0;n<t.length-1;n++){var a=i;i=0;for(var s=0x3ffffff&r,o=Math.min(n,e.length-1),l=Math.max(0,n-A.length+1);l<=o;l++){var c=n-l,d=(0|A.words[c])*(0|e.words[l]),u=0x3ffffff&d;a=a+(d/0x4000000|0)|0,s=0x3ffffff&(u=u+s|0),i+=(a=a+(u>>>26)|0)>>>26,a&=0x3ffffff}t.words[n]=s,r=a,a=i}return 0!==r?t.words[n]=r:t.length--,t.strip()}(this,A,e):C(this,A,e)},p.prototype.makeRBT=function(A){for(var e=Array(A),t=n.prototype._countBits(A)-1,r=0;r<A;r++)e[r]=this.revBin(r,t,A);return e},p.prototype.revBin=function(A,e,t){if(0===A||A===t-1)return A;for(var r=0,i=0;i<e;i++)r|=(1&A)<<e-i-1,A>>=1;return r},p.prototype.permute=function(A,e,t,r,i,n){for(var a=0;a<n;a++)r[a]=e[A[a]],i[a]=t[A[a]]},p.prototype.transform=function(A,e,t,r,i,n){this.permute(n,A,e,t,r,i);for(var a=1;a<i;a<<=1)for(var s=a<<1,o=Math.cos(2*Math.PI/s),l=Math.sin(2*Math.PI/s),c=0;c<i;c+=s)for(var d=o,u=l,g=0;g<a;g++){var h=t[c+g],C=r[c+g],p=t[c+g+a],I=r[c+g+a],m=d*p-u*I;I=d*I+u*p,p=m,t[c+g]=h+p,r[c+g]=C+I,t[c+g+a]=h-p,r[c+g+a]=C-I,g!==s&&(m=o*d-l*u,u=o*u+l*d,d=m)}},p.prototype.guessLen13b=function(A,e){var t=1|Math.max(e,A),r=1&t,i=0;for(t=t/2|0;t;t>>>=1)i++;return 1<<i+1+r},p.prototype.conjugate=function(A,e,t){if(!(t<=1))for(var r=0;r<t/2;r++){var i=A[r];A[r]=A[t-r-1],A[t-r-1]=i,i=e[r],e[r]=-e[t-r-1],e[t-r-1]=-i}},p.prototype.normalize13b=function(A,e){for(var t=0,r=0;r<e/2;r++){var i=8192*Math.round(A[2*r+1]/e)+Math.round(A[2*r]/e)+t;A[r]=0x3ffffff&i,t=i<0x4000000?0:i/0x4000000|0}return A},p.prototype.convert13b=function(A,e,t,i){for(var n=0,a=0;a<e;a++)n+=0|A[a],t[2*a]=8191&n,n>>>=13,t[2*a+1]=8191&n,n>>>=13;for(a=2*e;a<i;++a)t[a]=0;r(0===n),r((-8192&n)==0)},p.prototype.stub=function(A){for(var e=Array(A),t=0;t<A;t++)e[t]=0;return e},p.prototype.mulp=function(A,e,t){var r=2*this.guessLen13b(A.length,e.length),i=this.makeRBT(r),n=this.stub(r),a=Array(r),s=Array(r),o=Array(r),l=Array(r),c=Array(r),d=Array(r),u=t.words;u.length=r,this.convert13b(A.words,A.length,a,r),this.convert13b(e.words,e.length,l,r),this.transform(a,n,s,o,r,i),this.transform(l,n,c,d,r,i);for(var g=0;g<r;g++){var h=s[g]*c[g]-o[g]*d[g];o[g]=s[g]*d[g]+o[g]*c[g],s[g]=h}return this.conjugate(s,o,r),this.transform(s,o,u,n,r,i),this.conjugate(u,n,r),this.normalize13b(u,r),t.negative=A.negative^e.negative,t.length=A.length+e.length,t.strip()},n.prototype.mul=function(A){var e=new n(null);return e.words=Array(this.length+A.length),this.mulTo(A,e)},n.prototype.mulf=function(A){var e=new n(null);return e.words=Array(this.length+A.length),C(this,A,e)},n.prototype.imul=function(A){return this.clone().mulTo(A,this)},n.prototype.imuln=function(A){r("number"==typeof A),r(A<0x4000000);for(var e=0,t=0;t<this.length;t++){var i=(0|this.words[t])*A,n=(0x3ffffff&i)+(0x3ffffff&e);e>>=26,e+=(i/0x4000000|0)+(n>>>26),this.words[t]=0x3ffffff&n}return 0!==e&&(this.words[t]=e,this.length++),0===A&&(this.length=1,this._normSign()),this},n.prototype.muln=function(A){return this.clone().imuln(A)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(A){var e=function(A){for(var e=Array(A.bitLength()),t=0;t<e.length;t++){var r=t/26|0,i=t%26;e[t]=(A.words[r]&1<<i)>>>i}return e}(A);if(0===e.length)return new n(1);for(var t=this,r=0;r<e.length&&0===e[r];r++,t=t.sqr());if(++r<e.length)for(var i=t.sqr();r<e.length;r++,i=i.sqr())0!==e[r]&&(t=t.mul(i));return t},n.prototype.iushln=function(A){r("number"==typeof A&&A>=0);var e,t=A%26,i=(A-t)/26,n=0x3ffffff>>>26-t<<26-t;if(0!==t){var a=0;for(e=0;e<this.length;e++){var s=this.words[e]&n,o=(0|this.words[e])-s<<t;this.words[e]=o|a,a=s>>>26-t}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},n.prototype.ishln=function(A){return r(0===this.negative),this.iushln(A)},n.prototype.iushrn=function(A,e,t){r("number"==typeof A&&A>=0);var i=e?(e-e%26)/26:0,n=A%26,a=Math.min((A-n)/26,this.length),s=0x3ffffff^0x3ffffff>>>n<<n;if(i-=a,i=Math.max(0,i),t){for(var o=0;o<a;o++)t.words[o]=this.words[o];t.length=a}if(0===a);else if(this.length>a)for(this.length-=a,o=0;o<this.length;o++)this.words[o]=this.words[o+a];else this.words[0]=0,this.length=1;var l=0;for(o=this.length-1;o>=0&&(0!==l||o>=i);o--){var c=0|this.words[o];this.words[o]=l<<26-n|c>>>n,l=c&s}return t&&0!==l&&(t.words[t.length++]=l),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(A,e,t){return r(0===this.negative),this.iushrn(A,e,t)},n.prototype.shln=function(A){return this.clone().ishln(A)},n.prototype.ushln=function(A){return this.clone().iushln(A)},n.prototype.shrn=function(A){return this.clone().ishrn(A)},n.prototype.ushrn=function(A){return this.clone().iushrn(A)},n.prototype.testn=function(A){r("number"==typeof A&&A>=0);var e=A%26,t=(A-e)/26;return!(this.length<=t)&&!!(this.words[t]&1<<e)},n.prototype.imaskn=function(A){r("number"==typeof A&&A>=0);var e=A%26,t=(A-e)/26;return(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=t)?this:(0!==e&&t++,this.length=Math.min(t,this.length),0!==e&&(this.words[this.length-1]&=0x3ffffff^0x3ffffff>>>e<<e),0===this.length&&(this.words[0]=0,this.length=1),this.strip())},n.prototype.maskn=function(A){return this.clone().imaskn(A)},n.prototype.iaddn=function(A){return(r("number"==typeof A),r(A<0x4000000),A<0)?this.isubn(-A):0!==this.negative?(1===this.length&&(0|this.words[0])<A?(this.words[0]=A-(0|this.words[0]),this.negative=0):(this.negative=0,this.isubn(A),this.negative=1),this):this._iaddn(A)},n.prototype._iaddn=function(A){this.words[0]+=A;for(var e=0;e<this.length&&this.words[e]>=0x4000000;e++)this.words[e]-=0x4000000,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(A){if(r("number"==typeof A),r(A<0x4000000),A<0)return this.iaddn(-A);if(0!==this.negative)return this.negative=0,this.iaddn(A),this.negative=1,this;if(this.words[0]-=A,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=0x4000000,this.words[e+1]-=1;return this.strip()},n.prototype.addn=function(A){return this.clone().iaddn(A)},n.prototype.subn=function(A){return this.clone().isubn(A)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(A,e,t){var i,n,a=A.length+t;this._expand(a);var s=0;for(i=0;i<A.length;i++){n=(0|this.words[i+t])+s;var o=(0|A.words[i])*e;n-=0x3ffffff&o,s=(n>>26)-(o/0x4000000|0),this.words[i+t]=0x3ffffff&n}for(;i<this.length-t;i++)s=(n=(0|this.words[i+t])+s)>>26,this.words[i+t]=0x3ffffff&n;if(0===s)return this.strip();for(r(-1===s),s=0,i=0;i<this.length;i++)s=(n=-(0|this.words[i])+s)>>26,this.words[i]=0x3ffffff&n;return this.negative=1,this.strip()},n.prototype._wordDiv=function(A,e){var t,r=this.length-A.length,i=this.clone(),a=A,s=0|a.words[a.length-1];0!=(r=26-this._countBits(s))&&(a=a.ushln(r),i.iushln(r),s=0|a.words[a.length-1]);var o=i.length-a.length;if("mod"!==e){(t=new n(null)).length=o+1,t.words=Array(t.length);for(var l=0;l<t.length;l++)t.words[l]=0}var c=i.clone()._ishlnsubmul(a,1,o);0===c.negative&&(i=c,t&&(t.words[o]=1));for(var d=o-1;d>=0;d--){var u=(0|i.words[a.length+d])*0x4000000+(0|i.words[a.length+d-1]);for(u=Math.min(u/s|0,0x3ffffff),i._ishlnsubmul(a,u,d);0!==i.negative;)u--,i.negative=0,i._ishlnsubmul(a,1,d),i.isZero()||(i.negative^=1);t&&(t.words[d]=u)}return t&&t.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:t||null,mod:i}},n.prototype.divmod=function(A,e,t){var i,a,s;return(r(!A.isZero()),this.isZero())?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===A.negative?(s=this.neg().divmod(A,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(a=s.mod.neg(),t&&0!==a.negative&&a.iadd(A)),{div:i,mod:a}):0===this.negative&&0!==A.negative?(s=this.divmod(A.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):(this.negative&A.negative)!=0?(s=this.neg().divmod(A.neg(),e),"div"!==e&&(a=s.mod.neg(),t&&0!==a.negative&&a.isub(A)),{div:s.div,mod:a}):A.length>this.length||0>this.cmp(A)?{div:new n(0),mod:this}:1===A.length?"div"===e?{div:this.divn(A.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(A.words[0]))}:{div:this.divn(A.words[0]),mod:new n(this.modn(A.words[0]))}:this._wordDiv(A,e)},n.prototype.div=function(A){return this.divmod(A,"div",!1).div},n.prototype.mod=function(A){return this.divmod(A,"mod",!1).mod},n.prototype.umod=function(A){return this.divmod(A,"mod",!0).mod},n.prototype.divRound=function(A){var e=this.divmod(A);if(e.mod.isZero())return e.div;var t=e.mod.abs(),r=A.abs().iushrn(1),i=1&A.words[0],a=t.cmp(r);if(a<0||1===i&&0===a)return e.div;var s=new n(1);return s.negative=this.negative^A.negative,e.div.iadd(s)},n.prototype.modn=function(A){r(A<=0x3ffffff);for(var e=0x4000000%A,t=0,i=this.length-1;i>=0;i--)t=(e*t+(0|this.words[i]))%A;return t},n.prototype.idivn=function(A){r(A<=0x3ffffff);for(var e=0,t=this.length-1;t>=0;t--){var i=(0|this.words[t])+0x4000000*e;this.words[t]=i/A|0,e=i%A}return this.strip()},n.prototype.divn=function(A){return this.clone().idivn(A)},n.prototype.egcd=function(A){r(0===A.negative),r(!A.isZero());var e=this,t=A.clone();e=0!==e.negative?e.umod(A):e.clone();for(var i=new n(1),a=new n(0),s=new n(0),o=new n(1),l=0;e.isEven()&&t.isEven();)e.iushrn(1),t.iushrn(1),++l;for(var c=t.clone(),d=e.clone();!e.isZero();){for(var u=0,g=1;(e.words[0]&g)==0&&u<26;++u,g<<=1);if(u>0)for(e.iushrn(u);u-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(c),a.isub(d)),i.iushrn(1),a.iushrn(1);for(var h=0,C=1;(t.words[0]&C)==0&&h<26;++h,C<<=1);if(h>0)for(t.iushrn(h);h-- >0;)(s.isOdd()||o.isOdd())&&(s.iadd(c),o.isub(d)),s.iushrn(1),o.iushrn(1);e.cmp(t)>=0?(e.isub(t),i.isub(s),a.isub(o)):(t.isub(e),s.isub(i),o.isub(a))}return{a:s,b:o,gcd:t.iushln(l)}},n.prototype._invmp=function(A){r(0===A.negative),r(!A.isZero());var e,t=this,i=A.clone();t=0!==t.negative?t.umod(A):t.clone();for(var a=new n(1),s=new n(0),o=i.clone();t.cmpn(1)>0&&i.cmpn(1)>0;){for(var l=0,c=1;(t.words[0]&c)==0&&l<26;++l,c<<=1);if(l>0)for(t.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(o),a.iushrn(1);for(var d=0,u=1;(i.words[0]&u)==0&&d<26;++d,u<<=1);if(d>0)for(i.iushrn(d);d-- >0;)s.isOdd()&&s.iadd(o),s.iushrn(1);t.cmp(i)>=0?(t.isub(i),a.isub(s)):(i.isub(t),s.isub(a))}return 0>(e=0===t.cmpn(1)?a:s).cmpn(0)&&e.iadd(A),e},n.prototype.gcd=function(A){if(this.isZero())return A.abs();if(A.isZero())return this.abs();var e=this.clone(),t=A.clone();e.negative=0,t.negative=0;for(var r=0;e.isEven()&&t.isEven();r++)e.iushrn(1),t.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;t.isEven();)t.iushrn(1);var i=e.cmp(t);if(i<0){var n=e;e=t,t=n}else if(0===i||0===t.cmpn(1))break;e.isub(t)}return t.iushln(r)},n.prototype.invm=function(A){return this.egcd(A).a.umod(A)},n.prototype.isEven=function(){return(1&this.words[0])==0},n.prototype.isOdd=function(){return(1&this.words[0])==1},n.prototype.andln=function(A){return this.words[0]&A},n.prototype.bincn=function(A){r("number"==typeof A);var e=A%26,t=(A-e)/26,i=1<<e;if(this.length<=t)return this._expand(t+1),this.words[t]|=i,this;for(var n=i,a=t;0!==n&&a<this.length;a++){var s=0|this.words[a];s+=n,n=s>>>26,s&=0x3ffffff,this.words[a]=s}return 0!==n&&(this.words[a]=n,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(A){var e,t=A<0;if(0!==this.negative&&!t)return -1;if(0===this.negative&&t)return 1;if(this.strip(),this.length>1)e=1;else{t&&(A=-A),r(A<=0x3ffffff,"Number is too big");var i=0|this.words[0];e=i===A?0:i<A?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(A){if(0!==this.negative&&0===A.negative)return -1;if(0===this.negative&&0!==A.negative)return 1;var e=this.ucmp(A);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(A){if(this.length>A.length)return 1;if(this.length<A.length)return -1;for(var e=0,t=this.length-1;t>=0;t--){var r=0|this.words[t],i=0|A.words[t];if(r!==i){r<i?e=-1:r>i&&(e=1);break}}return e},n.prototype.gtn=function(A){return 1===this.cmpn(A)},n.prototype.gt=function(A){return 1===this.cmp(A)},n.prototype.gten=function(A){return this.cmpn(A)>=0},n.prototype.gte=function(A){return this.cmp(A)>=0},n.prototype.ltn=function(A){return -1===this.cmpn(A)},n.prototype.lt=function(A){return -1===this.cmp(A)},n.prototype.lten=function(A){return 0>=this.cmpn(A)},n.prototype.lte=function(A){return 0>=this.cmp(A)},n.prototype.eqn=function(A){return 0===this.cmpn(A)},n.prototype.eq=function(A){return 0===this.cmp(A)},n.red=function(A){return new y(A)},n.prototype.toRed=function(A){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),A.convertTo(this)._forceRed(A)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(A){return this.red=A,this},n.prototype.forceRed=function(A){return r(!this.red,"Already a number in reduction context"),this._forceRed(A)},n.prototype.redAdd=function(A){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,A)},n.prototype.redIAdd=function(A){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,A)},n.prototype.redSub=function(A){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,A)},n.prototype.redISub=function(A){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,A)},n.prototype.redShl=function(A){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,A)},n.prototype.redMul=function(A){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,A),this.red.mul(this,A)},n.prototype.redIMul=function(A){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,A),this.red.imul(this,A)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(A){return r(this.red&&!A.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,A)};var I={k256:null,p224:null,p192:null,p25519:null};function m(A,e){this.name=A,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function f(){m.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function E(){m.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){m.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Q(){m.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function y(A){if("string"==typeof A){var e=n._prime(A);this.m=e.p,this.prime=e}else r(A.gtn(1),"modulus must be greater than 1"),this.m=A,this.prime=null}function B(A){y.call(this,A),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var A=new n(null);return A.words=Array(Math.ceil(this.n/13)),A},m.prototype.ireduce=function(A){var e,t=A;do this.split(t,this.tmp),e=(t=(t=this.imulK(t)).iadd(this.tmp)).bitLength();while(e>this.n)var r=e<this.n?-1:t.ucmp(this.p);return 0===r?(t.words[0]=0,t.length=1):r>0?t.isub(this.p):void 0!==t.strip?t.strip():t._strip(),t},m.prototype.split=function(A,e){A.iushrn(this.n,0,e)},m.prototype.imulK=function(A){return A.imul(this.k)},i(f,m),f.prototype.split=function(A,e){for(var t=Math.min(A.length,9),r=0;r<t;r++)e.words[r]=A.words[r];if(e.length=t,A.length<=9){A.words[0]=0,A.length=1;return}var i=A.words[9];for(e.words[e.length++]=4194303&i,r=10;r<A.length;r++){var n=0|A.words[r];A.words[r-10]=(4194303&n)<<4|i>>>22,i=n}i>>>=22,A.words[r-10]=i,0===i&&A.length>10?A.length-=10:A.length-=9},f.prototype.imulK=function(A){A.words[A.length]=0,A.words[A.length+1]=0,A.length+=2;for(var e=0,t=0;t<A.length;t++){var r=0|A.words[t];e+=977*r,A.words[t]=0x3ffffff&e,e=64*r+(e/0x4000000|0)}return 0===A.words[A.length-1]&&(A.length--,0===A.words[A.length-1]&&A.length--),A},i(E,m),i(w,m),i(Q,m),Q.prototype.imulK=function(A){for(var e=0,t=0;t<A.length;t++){var r=(0|A.words[t])*19+e,i=0x3ffffff&r;r>>>=26,A.words[t]=i,e=r}return 0!==e&&(A.words[A.length++]=e),A},n._prime=function(A){var e;if(I[A])return I[A];if("k256"===A)e=new f;else if("p224"===A)e=new E;else if("p192"===A)e=new w;else if("p25519"===A)e=new Q;else throw Error("Unknown prime "+A);return I[A]=e,e},y.prototype._verify1=function(A){r(0===A.negative,"red works only with positives"),r(A.red,"red works only with red numbers")},y.prototype._verify2=function(A,e){r((A.negative|e.negative)==0,"red works only with positives"),r(A.red&&A.red===e.red,"red works only with red numbers")},y.prototype.imod=function(A){return this.prime?this.prime.ireduce(A)._forceRed(this):A.umod(this.m)._forceRed(this)},y.prototype.neg=function(A){return A.isZero()?A.clone():this.m.sub(A)._forceRed(this)},y.prototype.add=function(A,e){this._verify2(A,e);var t=A.add(e);return t.cmp(this.m)>=0&&t.isub(this.m),t._forceRed(this)},y.prototype.iadd=function(A,e){this._verify2(A,e);var t=A.iadd(e);return t.cmp(this.m)>=0&&t.isub(this.m),t},y.prototype.sub=function(A,e){this._verify2(A,e);var t=A.sub(e);return 0>t.cmpn(0)&&t.iadd(this.m),t._forceRed(this)},y.prototype.isub=function(A,e){this._verify2(A,e);var t=A.isub(e);return 0>t.cmpn(0)&&t.iadd(this.m),t},y.prototype.shl=function(A,e){return this._verify1(A),this.imod(A.ushln(e))},y.prototype.imul=function(A,e){return this._verify2(A,e),this.imod(A.imul(e))},y.prototype.mul=function(A,e){return this._verify2(A,e),this.imod(A.mul(e))},y.prototype.isqr=function(A){return this.imul(A,A.clone())},y.prototype.sqr=function(A){return this.mul(A,A)},y.prototype.sqrt=function(A){if(A.isZero())return A.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var t=this.m.add(new n(1)).iushrn(2);return this.pow(A,t)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);r(!i.isZero());var s=new n(1).toRed(this),o=s.redNeg(),l=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new n(2*c*c).toRed(this);0!==this.pow(c,l).cmp(o);)c.redIAdd(o);for(var d=this.pow(c,i),u=this.pow(A,i.addn(1).iushrn(1)),g=this.pow(A,i),h=a;0!==g.cmp(s);){for(var C=g,p=0;0!==C.cmp(s);p++)C=C.redSqr();r(p<h);var I=this.pow(d,new n(1).iushln(h-p-1));u=u.redMul(I),d=I.redSqr(),g=g.redMul(d),h=p}return u},y.prototype.invm=function(A){var e=A._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},y.prototype.pow=function(A,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return A.clone();var t=Array(16);t[0]=new n(1).toRed(this),t[1]=A;for(var r=2;r<t.length;r++)t[r]=this.mul(t[r-1],A);var i=t[0],a=0,s=0,o=e.bitLength()%26;for(0===o&&(o=26),r=e.length-1;r>=0;r--){for(var l=e.words[r],c=o-1;c>=0;c--){var d=l>>c&1;if(i!==t[0]&&(i=this.sqr(i)),0===d&&0===a){s=0;continue}a<<=1,a|=d,(4==++s||0===r&&0===c)&&(i=this.mul(i,t[a]),s=0,a=0)}o=26}return i},y.prototype.convertTo=function(A){var e=A.umod(this.m);return e===A?e.clone():e},y.prototype.convertFrom=function(A){var e=A.clone();return e.red=null,e},n.mont=function(A){return new B(A)},i(B,y),B.prototype.convertTo=function(A){return this.imod(A.ushln(this.shift))},B.prototype.convertFrom=function(A){var e=this.imod(A.mul(this.rinv));return e.red=null,e},B.prototype.imul=function(A,e){if(A.isZero()||e.isZero())return A.words[0]=0,A.length=1,A;var t=A.imul(e),r=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=t.isub(r).iushrn(this.shift),n=i;return i.cmp(this.m)>=0?n=i.isub(this.m):0>i.cmpn(0)&&(n=i.iadd(this.m)),n._forceRed(this)},B.prototype.mul=function(A,e){if(A.isZero()||e.isZero())return new n(0)._forceRed(this);var t=A.mul(e),r=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=t.isub(r).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):0>i.cmpn(0)&&(a=i.iadd(this.m)),a._forceRed(this)},B.prototype.invm=function(A){return this.imod(A._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,A.e)},780353,(A,e,t)=>{let r;t.formatArgs=function(A){if(A[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+A[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;let t="color: "+this.color;A.splice(1,0,t,"color: inherit");let r=0,i=0;A[0].replace(/%[a-zA-Z%]/g,A=>{"%%"!==A&&(r++,"%c"===A&&(i=r))}),A.splice(i,0,t)},t.save=function(A){try{A?t.storage.setItem("debug",A):t.storage.removeItem("debug")}catch(A){}},t.load=function(){let A;try{A=t.storage.getItem("debug")||t.storage.getItem("DEBUG")}catch(A){}return!A&&"u">typeof process&&"env"in process&&(A=process.env.DEBUG),A},t.useColors=function(){let A;return!("u">typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("u">typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"u">typeof navigator&&navigator.userAgent&&(A=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(A[1],10)>=31||"u">typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(A){}}(),r=!1,t.destroy=()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))},t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=A.r(420319)(t);let{formatters:i}=e.exports;i.j=function(A){try{return JSON.stringify(A)}catch(A){return"[UnexpectedJSONParseError]: "+A.message}}},420319,(A,e,t)=>{e.exports=function(e){function t(A){let e,i,n,a=null;function s(...A){if(!s.enabled)return;let r=Number(new Date);s.diff=r-(e||r),s.prev=e,s.curr=r,e=r,A[0]=t.coerce(A[0]),"string"!=typeof A[0]&&A.unshift("%O");let i=0;A[0]=A[0].replace(/%([a-zA-Z%])/g,(e,r)=>{if("%%"===e)return"%";i++;let n=t.formatters[r];if("function"==typeof n){let t=A[i];e=n.call(s,t),A.splice(i,1),i--}return e}),t.formatArgs.call(s,A),(s.log||t.log).apply(s,A)}return s.namespace=A,s.useColors=t.useColors(),s.color=t.selectColor(A),s.extend=r,s.destroy=t.destroy,Object.defineProperty(s,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==a?a:(i!==t.namespaces&&(i=t.namespaces,n=t.enabled(A)),n),set:A=>{a=A}}),"function"==typeof t.init&&t.init(s),s}function r(A,e){let r=t(this.namespace+(void 0===e?":":e)+A);return r.log=this.log,r}function i(A,e){let t=0,r=0,i=-1,n=0;for(;t<A.length;)if(r<e.length&&(e[r]===A[t]||"*"===e[r]))"*"===e[r]?(i=r,n=t):t++,r++;else{if(-1===i)return!1;r=i+1,t=++n}for(;r<e.length&&"*"===e[r];)r++;return r===e.length}return t.debug=t,t.default=t,t.coerce=function(A){return A instanceof Error?A.stack||A.message:A},t.disable=function(){let A=[...t.names,...t.skips.map(A=>"-"+A)].join(",");return t.enable(""),A},t.enable=function(A){for(let e of(t.save(A),t.namespaces=A,t.names=[],t.skips=[],("string"==typeof A?A:"").trim().replace(/\s+/g,",").split(",").filter(Boolean)))"-"===e[0]?t.skips.push(e.slice(1)):t.names.push(e)},t.enabled=function(A){for(let e of t.skips)if(i(A,e))return!1;for(let e of t.names)if(i(A,e))return!0;return!1},t.humanize=A.r(951550),t.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(e).forEach(A=>{t[A]=e[A]}),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(A){let e=0;for(let t=0;t<A.length;t++)e=(e<<5)-e+A.charCodeAt(t)|0;return t.colors[Math.abs(e)%t.colors.length]},t.enable(t.load()),t}},426914,(A,e,t)=>{"u"<typeof process||"renderer"===process.type||process.__nwjs?e.exports=A.r(780353):e.exports=A.r(278766)},278766,(A,e,t)=>{let r=A.r(870722),i=A.r(224361);t.init=function(A){A.inspectOpts={};let e=Object.keys(t.inspectOpts);for(let r=0;r<e.length;r++)A.inspectOpts[e[r]]=t.inspectOpts[e[r]]},t.log=function(...A){return process.stderr.write(i.formatWithOptions(t.inspectOpts,...A)+"\n")},t.formatArgs=function(A){let{namespace:r,useColors:i}=this;if(i){let t=this.color,i="\x1b[3"+(t<8?t:"8;5;"+t),n=` ${i};1m${r} \x1b[0m`;A[0]=n+A[0].split("\n").join("\n"+n),A.push(i+"m+"+e.exports.humanize(this.diff)+"\x1b[0m")}else A[0]=(t.inspectOpts.hideDate?"":new Date().toISOString()+" ")+r+" "+A[0]},t.save=function(A){A?process.env.DEBUG=A:delete process.env.DEBUG},t.load=function(){return process.env.DEBUG},t.useColors=function(){return"colors"in t.inspectOpts?!!t.inspectOpts.colors:r.isatty(process.stderr.fd)},t.destroy=i.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),t.colors=[6,2,3,4,5,1];try{let e=A.r(524353);e&&(e.stderr||e).level>=2&&(t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(A){}t.inspectOpts=Object.keys(process.env).filter(A=>/^debug_/i.test(A)).reduce((A,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(A,e)=>e.toUpperCase()),r=process.env[e];return r=!!/^(yes|on|true|enabled)$/i.test(r)||!/^(no|off|false|disabled)$/i.test(r)&&("null"===r?null:Number(r)),A[t]=r,A},{}),e.exports=A.r(420319)(t);let{formatters:n}=e.exports;n.o=function(A){return this.inspectOpts.colors=this.useColors,i.inspect(A,this.inspectOpts).split("\n").map(A=>A.trim()).join(" ")},n.O=function(A){return this.inspectOpts.colors=this.useColors,i.inspect(A,this.inspectOpts)}},425530,(A,e,t)=>{var r;function i(A){for(var e,t,r,i,n=1,a=[].slice.call(arguments),s=0,o=A.length,l="",c=!1,d=!1,u=function(){return a[n++]};s<o;++s)if(e=A[s],c)switch(c=!1,"."==e?(d=!1,e=A[++s]):"0"==e&&"."==A[s+1]?(d=!0,s+=2,e=A[s]):d=!0,i=function(){for(var t="";/\d/.test(A[s]);)t+=A[s++],e=A[s];return t.length>0?parseInt(t):null}(),e){case"b":l+=parseInt(u(),10).toString(2);break;case"c":"string"==typeof(t=u())||t instanceof String?l+=t:l+=String.fromCharCode(parseInt(t,10));break;case"d":l+=parseInt(u(),10);break;case"f":r=String(parseFloat(u()).toFixed(i||6)),l+=d?r:r.replace(/^0/,"");break;case"j":l+=JSON.stringify(u());break;case"o":l+="0"+parseInt(u(),10).toString(8);break;case"s":l+=u();break;case"x":l+="0x"+parseInt(u(),10).toString(16);break;case"X":l+="0x"+parseInt(u(),10).toString(16).toUpperCase();break;default:l+=e}else"%"===e?c=!0:l+=e;return l}(r=e.exports=i).format=i,r.vsprintf=function(A,e){return i.apply(null,[A].concat(e))},"u">typeof console&&"function"==typeof console.log&&(r.printf=function(){console.log(i.apply(null,arguments))})},436057,(A,e,t)=>{let{marked:r}=A.r(754461);r.setOptions({breaks:!0,smartyPants:!0}),e.exports=class A{static md_to_html(A){return r.parse(A)}static jira_to_html(e){return r.parse(A.to_markdown(e))}static to_markdown(A){return A.replace(/^[ \t]*(\*+)\s+/gm,(A,e)=>`${Array(e.length).join(" ")}* `).replace(/^[ \t]*(#+)\s+/gm,(A,e)=>`${Array(e.length).join(" ")}1. `).replace(/^h([0-6])\.(.*)$/gm,(A,e,t)=>Array(parseInt(e,10)+1).join("#")+t).replace(/\*(\S.*)\*/g,"**$1**").replace(/_(\S.*)_/g,"*$1*").replace(/\{\{([^}]+)\}\}/g,"`$1`").replace(/\+([^+]*)\+/g,"<ins>$1</ins>").replace(/\^([^^]*)\^/g,"<sup>$1</sup>").replace(/~([^~]*)~/g,"<sub>$1</sub>").replace(/(\s+)-(\S+.*?\S)-(\s+)/g,"$1~~$2~~$3").replace(/\{code(:([a-z]+))?([:|]?(title|borderStyle|borderColor|borderWidth|bgColor|titleBGColor)=.+?)*\}([^]*?)\n?\{code\}/gm,"```$2$5\n```").replace(/{noformat}/g,"```").replace(/\[([^|]+?)\]/g,"<$1>").replace(/!(.+)!/g,"").replace(/\[(.+?)\|(.+?)\]/g,"[$1]($2)").replace(/^bq\.\s+/gm,"> ").replace(/\{color:[^}]+\}([^]*?)\{color\}/gm,"$1").replace(/\{panel:title=([^}]*)\}\n?([^]*?)\n?\{panel\}/gm,"\n| $1 |\n| --- |\n| $2 |").replace(/^[ \t]*((?:\|\|.*?)+\|\|)[ \t]*$/gm,(A,e)=>{let t=e.replace(/\|\|/g,"|");return`
|
|
1611
|
+
`)]);return{ids:d.map(({id:A})=>A),totalCount:Number(u[0].totalCount)}}var n=A.i(794231),a=A.i(666680),s=A.i(662114),o=A.i(135475),l=A.i(751976),c=A.i(388385),d=A.i(384439),u=A.i(69988),g=A.i(111479),h=A.i(197337),C=A.i(963408);function p(A){return null===A||["string","number","boolean"].includes(typeof A)?A:JSON.stringify(A)}function I(A,e){if("ALL"===A.op)return A.conditions.every(A=>I(A,e));if("ANY"===A.op)return A.conditions.some(A=>I(A,e));if("NOT"===A.op)return!I(A.condition,e);if(!("left"in A))return!1;let t=(0,C.S)(A.left,e),r=(0,C.S)(A.right,e);switch(A.op){case"EXISTS":return null!=t;case"EQ":return JSON.stringify(t)===JSON.stringify(r);case"NE":return JSON.stringify(t)!==JSON.stringify(r);case"GT":return p(t)>p(r);case"GTE":return p(t)>=p(r);case"LT":return p(t)<p(r);case"LTE":return p(t)<=p(r);case"CONTAINS":return Array.isArray(t)?t.some(A=>JSON.stringify(A)===JSON.stringify(r)):String(t??"").includes(String(r??""));case"MATCHES":return(0,l.u)(String(r??""),{label:"Workflow condition pattern"}).test(String(t??""))}}var m=A.i(454228),f=A.i(222335),E=A.i(997671),w=A.i(266368);A.i(256554);var Q=A.i(118387),y=A.i(848201),B=A.i(972425),D=A.i(927305),k=A.i(879838),b=A.i(945565);async function S(A,e){let t=A.trim();if(!t||t.length>5e4)throw Error(`Workflow script must contain 1–${5e4.toLocaleString()} characters`);let r=await (0,k.f)(),i=Date.now()+250;try{return r.evalCode(`"use strict"; const session = Object.freeze(${JSON.stringify(e)}); (${t})(session);`,{memoryLimitBytes:8388608,maxStackSizeBytes:524288,shouldInterrupt:(0,b.s)(i)})}catch(e){let A=e instanceof Error?e.message:String(e);throw Error(`Workflow script failed: ${"interrupted"===A?"execution timed out after 250ms":A}`)}}var R=A.i(696985);let M="workflows:changed",O=A=>`workflow-run:${A}`,N=A=>`workflow-run:${A}:events`,H=A=>`workflow-run:${A}:questions`,v=["QUEUED","RUNNING","PAUSING","PAUSED","WAITING","BLOCKED"],T=new Set(["SUCCEEDED","FAILED","CANCELLED"]),U=new Set(["SUCCEEDED","FAILED","CANCELLED","SKIPPED","SUPERSEDED"]),J=new Set(["RUNNING","WAITING"]),x=new Set(["WORKTREE_CREATE","WORKTREE_DELETE","WORKTREE_MOVE","WORKTREE_MOVE_CONTROL"]);function _(A){return A&&"object"==typeof A&&!Array.isArray(A)?A:{}}function G(A,e){let t;if(A.exclusiveWorktree&&("string"==typeof(t=(0,C.x)(e,"worktree.id"))&&t?t:null)!==A.worktreeId)throw Error("Exclusive workflows cannot change worktrees; start a new workflow on the target worktree instead")}let L=A=>JSON.parse(A);function P(A){return{agent:{id:A.id,name:A.name,hostname:A.hostname,...void 0!==A.lastSeenAt&&void 0!==A.disconnectedAt?{connected:null!==A.lastSeenAt&&null===A.disconnectedAt&&Date.now()-A.lastSeenAt.getTime()<=(0,Q.z)(A)}:{},...void 0!==A.diskFreeBytes?{diskFreeBytes:A.diskFreeBytes}:{},...void 0!==A.memoryFreeBytes?{memoryFreeBytes:A.memoryFreeBytes}:{}}}}function j(A){return(0,C.d)(P(A.agent),{codebase:{id:A.id,folder:A.folder,agentId:A.agentId,branch:A.branch,headSha:A.headSha},repo:{id:A.repository.id,name:A.repository.name,url:A.repository.displayOrigin,canonicalOrigin:A.repository.canonicalOrigin,displayOrigin:A.repository.displayOrigin,defaultBranch:A.defaultBranch}})}function Y(A,e,t){let r=A.trim();if(!r)throw Error(`${e} is required`);if(r.length>t)throw Error(`${e} is too long`);return r}function F(A){let e=A?.trim().toUpperCase()||"QUEUE";if(!new Set(["QUEUE","CONCURRENT","COALESCE_LATEST"]).has(e))throw Error("Workflow overlap policy is not supported");return e}function K(A){let e=A?.trim().toUpperCase()||"WORKTREE";if(!new Set(["WORKTREE","GLOBAL"]).has(e))throw Error("Workflow overlap scope is not supported");return e}let q=["EXCLUSIVE","NON_EXCLUSIVE","EXCLUDED"];function V(A,e){let t=A?.trim().toUpperCase()||(!0===e?"EXCLUSIVE":"NON_EXCLUSIVE");if(!q.includes(t))throw Error("Workflow worktree concurrency is not supported");return t}function z(A,e){return"EXCLUSIVE"===A||(e??!1)}function W(A,e){return"WORKTREE"===A?{worktreeId:e}:{}}function $(A,e){let t=A??("CONCURRENT"===e?4:1);if(!Number.isInteger(t)||t<1||t>32)throw Error("Maximum concurrent runs must be between 1 and 32");return t}function Z(A){return Array.isArray(A)?`[${A.map(Z).join(",")}]`:A&&"object"==typeof A?`{${Object.entries(A).sort(([A],[e])=>A.localeCompare(e)).map(([A,e])=>`${JSON.stringify(A)}:${Z(e)}`).join(",")}}`:JSON.stringify(A)}function X(A,e,t){if(Buffer.byteLength(A,"utf8")>t)throw Error(`${e} is too large`)}function AA(A,e){if(!A||"object"!=typeof A||Array.isArray(A))throw Error(`${e} must be an object`);return A}function Ae(A){y._H.publish(M,{workflowChanged:{id:A}})}function At(A){y._H.publish(O(A),{workflowRunChanged:{id:A}}),y._H.publish(M,{workflowChanged:{id:"runs",runId:A}}),y._H.publish(y.fb,{sidebarStatusChanged:!0}),y._H.publish(y.Wy,{actionCenterChanged:!0})}function Ar(A){return[...c.E.get(A.kind).requiredPaths.map(e=>e.replaceAll("<stepId>",A.id)),...A.requiredPaths,...(0,f.x)(A.kind,"step",A.config)]}function Ai(A){return[...c.E.get(A.kind).providedPaths.map(e=>e.replaceAll("<stepId>",A.id)),...A.providedPaths,`steps.${A.id}.*`]}async function An(A){return(await A.workflowRunNumberSequence.upsert({where:{id:"default"},create:{id:"default",nextValue:2},update:{nextValue:{increment:1}}})).nextValue-1}A.s(["f",0,class{events;executor;checkpointRestorer;credentials;agentControl;notifications;runsService;worktrees;commandsService;jiraService;runtimeTimer;commandOutputStream;ticking;workerId;activeExecutions;claimedSecretJobs;waitPollers;constructor(A,e=new R.f,t,r,i,n,s,o,l,c){this.events=A,this.executor=e,this.checkpointRestorer=t,this.credentials=r,this.agentControl=i,this.notifications=n,this.runsService=s,this.worktrees=o,this.commandsService=l,this.jiraService=c,this.ticking=!1,this.workerId=(0,a.randomUUID)(),this.activeExecutions=new Map,this.claimedSecretJobs=new Set,this.waitPollers=new Map,this.runsService?.setWorktreeAdmissionPromoter(async()=>{await this.startQueuedRuns()}),this.agentControl&&(this.executor.register("TERMINAL_RUN",A=>this.startTerminalJob(A)),this.executor.register("WORKTREE_SNAPSHOT",A=>this.startCheckpointJob(A)),this.agentControl.registerCompletionHandler(D.e,A=>this.workflowAgentJobCompleted(A)),this.agentControl.registerCompletionObserver(A=>this.genericAgentJobCompleted(A)),this.agentControl.registerCompletionHandler(D.Q,A=>this.workflowAgentJobCompleted(A)))}async controlLinkedAgentRuns(A,e){if(!this.runsService)return;let t=await (0,o.U)(),r=await t.workflowRunResourceLink.findMany({where:{runId:A,kind:"AGENT_RUN",attempt:{status:{in:["RUNNING","WAITING"]}}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(r.map(async({resourceId:A})=>{let t=await this.runsService.get(A);!t||"MANAGED"!==t.origin||"PAUSE"===e&&"IN_PROGRESS"!==t.status||"CONTINUE"===e&&"PAUSED"!==t.status||"CANCEL"===e&&new Set(["COMPLETED","FAILED","CANCELLED"]).has(t.status)||await this.runsService.lifecycle(A,e)}))}async cancelWaitingCommandRuns(A){if(!this.commandsService)return;let e=await (0,o.U)(),t=await e.workflowRunResourceLink.findMany({where:{runId:A,kind:"COMMAND_RUN",attempt:{status:"WAITING"}},select:{resourceId:!0},distinct:["resourceId"]});await Promise.allSettled(t.map(({resourceId:A})=>this.commandsService.terminateRun(A)))}async promoteWorktreeAdmissions(A){if(A)try{await this.runsService?.reconcileQueuedRuns(),await this.startQueuedRuns()}catch(e){console.error(`Could not promote worktree queue for ${A}:`,e instanceof Error?e.message:e)}}async runWorktree(A){let e=(0,C.x)(L(A),"worktree.id");return"string"==typeof e&&e?(await (0,o.U)()).worktree.findUnique({where:{id:e},select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}):null}async runAgent(A){let e=L(A),t=(0,C.x)(e,"agent.id")??(0,C.x)(e,"codebase.agentId"),r=await (0,o.U)();if("string"==typeof t&&t)return r.agent.findUnique({where:{id:t}});let i=(0,C.x)(e,"worktree.id");if("string"!=typeof i||!i)return null;let n=await r.worktree.findUnique({where:{id:i},select:{codebase:{select:{agent:!0}}}});return n?.codebase.agent??null}async queueForWorktree(A){let e=await (0,o.U)(),[t,r,i]=await Promise.all([e.workflowRun.findMany({where:{worktreeId:A,status:"QUEUED"},orderBy:[{queuedAt:"asc"},{id:"asc"}],select:{id:!0,displayNumber:!0,status:!0,phase:!0,queuedAt:!0,exclusiveWorktree:!0,worktreeConcurrency:!0,worktreeLeaseOwnerRunId:!0,workflowId:!0,workflow:{select:{name:!0}},worktree:{select:{id:!0,folder:!0,branch:!0,highlightColor:!0}}}}),e.agentRun.findMany({where:{worktreeId:A,origin:"MANAGED",status:"QUEUED",kind:{in:["PLAN","SESSION"]}},orderBy:[{createdAt:"asc"},{id:"asc"}],select:{id:!0,kind:!0,displayNumber:!0,status:!0,phase:!0,createdAt:!0,initialPrompt:!0,worktreeConcurrencyLimit:!0,worktree:{select:{id:!0,folder:!0,branch:!0,highlightColor:!0}},workflowRun:{select:{id:!0,workflowId:!0,worktreeLeaseOwnerRunId:!0}}}}),e.worktreeWorkflowLease.findUnique({where:{worktreeId:A},select:{workflowRunId:!0}})]);return[...t.map(e=>({id:e.id,kind:"WORKFLOW",displayNumber:e.displayNumber,name:e.workflow.name,status:e.status,phase:e.phase,worktreeId:A,worktree:e.worktree,workflowId:e.workflowId,workflowRunId:e.id,queuedAt:e.queuedAt,exclusiveWorktree:e.exclusiveWorktree,worktreeConcurrency:e.worktreeConcurrency,worktreeConcurrencyLimit:null,leaseOwnerRunId:e.worktreeLeaseOwnerRunId})),...r.map(e=>({id:e.id,kind:e.kind,displayNumber:e.displayNumber,name:e.initialPrompt,status:e.status,phase:e.phase,worktreeId:A,worktree:e.worktree,workflowId:e.workflowRun?.workflowId??null,workflowRunId:e.workflowRun?.id??null,queuedAt:e.createdAt,exclusiveWorktree:!1,worktreeConcurrency:"NON_EXCLUSIVE",worktreeConcurrencyLimit:e.worktreeConcurrencyLimit,leaseOwnerRunId:e.workflowRun?.worktreeLeaseOwnerRunId??null}))].sort((A,e)=>{if(i){let t=A.leaseOwnerRunId===i.workflowRunId;if(t!==(e.leaseOwnerRunId===i.workflowRunId))return t?-1:1}return A.queuedAt.getTime()-e.queuedAt.getTime()||A.id.localeCompare(e.id)}).map(({leaseOwnerRunId:A,...e},t)=>({...e,position:t+1,queuedAt:e.queuedAt.toISOString()}))}async runQueue(A){if(A.worktreeId)return this.queueForWorktree(A.worktreeId);if(!A.workflowId)throw Error("A worktree or workflow is required to read its queue");let e=await (0,o.U)(),[t,r]=await Promise.all([e.workflowRun.findMany({where:{workflowId:A.workflowId,status:"QUEUED"},select:{id:!0,worktreeId:!0,displayNumber:!0,status:!0,phase:!0,queuedAt:!0,exclusiveWorktree:!0,worktreeConcurrency:!0,workflow:{select:{name:!0}}}}),e.agentRun.findMany({where:{origin:"MANAGED",status:"QUEUED",workflowRun:{workflowId:A.workflowId}},select:{id:!0,worktreeId:!0}})]),i=new Set(t.map(({id:A})=>A)),n=new Set(r.map(({id:A})=>A)),a=[...new Set([...t,...r].map(({worktreeId:A})=>A).filter(A=>!!A))];return[...(await Promise.all(a.map(A=>this.queueForWorktree(A)))).flat().filter(A=>"WORKFLOW"===A.kind?i.has(A.id):n.has(A.id)),...t.filter(({worktreeId:A})=>!A).sort((A,e)=>A.queuedAt.getTime()-e.queuedAt.getTime()||A.id.localeCompare(e.id)).map((e,t)=>({position:t+1,id:e.id,kind:"WORKFLOW",displayNumber:e.displayNumber,name:e.workflow.name,status:e.status,phase:e.phase,worktreeId:null,worktree:null,workflowId:A.workflowId,workflowRunId:e.id,queuedAt:e.queuedAt.toISOString(),exclusiveWorktree:e.exclusiveWorktree,worktreeConcurrency:e.worktreeConcurrency,worktreeConcurrencyLimit:null}))].sort((A,e)=>new Date(A.queuedAt).getTime()-new Date(e.queuedAt).getTime()||A.id.localeCompare(e.id))}async runQueueForWorkflowRun(A){let e=await (0,o.U)(),t=await e.workflowRun.findUnique({where:{id:A},select:{status:!0,worktreeId:!0,workflowId:!0}});return t&&"QUEUED"===t.status?t.worktreeId?this.queueForWorktree(t.worktreeId):(await this.runQueue({workflowId:t.workflowId})).filter(({worktreeId:A})=>!A):[]}async notifyRun(A,e,t,r,i){if(!this.notifications)return;let n=await (0,o.U)(),a=await n.workflowRun.findUnique({where:{id:A},select:{sessionDataJson:!0,workflow:{select:{completionNotificationsEnabled:!0}}}});if("WORKFLOW_COMPLETED"===e&&a?.workflow.completionNotificationsEnabled===!1)return;let s=a?await this.runWorktree(a.sessionDataJson):null,l=await n.$transaction(n=>this.notifications.recordInTransaction(n,{dedupeKey:`workflow:${A}:${i}`,typeKey:e,title:t,body:r,href:`/dashboard/workflows/runs/${A}`,resourceKind:"WORKFLOW_RUN",resourceId:A,worktreeId:s?.id??null,highlightColor:s?.highlightColor??null}));this.notifications.created(l)}startRuntime(){this.runtimeTimer||(this.consumeCommandOutputMatches(),this.runtimeTimer=setInterval(()=>{this.tick().catch(A=>{console.error("Workflow runtime tick failed:",A)})},1e3),this.runtimeTimer.unref?.(),this.tick().catch(A=>{console.error("Workflow runtime startup failed:",A)}))}stopRuntime(){for(let A of(this.runtimeTimer&&clearInterval(this.runtimeTimer),this.runtimeTimer=void 0,this.commandOutputStream?.return?.(),this.commandOutputStream=void 0,this.activeExecutions.values()))A.abort();this.activeExecutions.clear()}catalog(){return{schemaVersion:c.c,globalConcurrency:4,steps:c.T,triggers:c.s}}registerWaitPoller(A,e){this.waitPollers.set(A,e)}async list(A={}){let e=await (0,o.U)(),t=Math.min(Math.max(A.first??100,1),200),r=A.archive?.toUpperCase()??"ACTIVE",i=A.search?.trim(),n=await e.workflow.findMany({where:{..."ALL"===r?{}:"ARCHIVED"===r?{archivedAt:{not:null}}:{archivedAt:null},...null===A.enabled||void 0===A.enabled?{}:{enabled:A.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:t+1,...A.after?{cursor:{id:A.after},skip:1}:{}});return{items:n.slice(0,t),nextCursor:n.length>t?n[t-1].id:null,totalCount:await e.workflow.count()}}async get(A){return(await (0,o.U)()).workflow.findUnique({where:{id:A},include:{activeVersion:!0,versions:{orderBy:{version:"desc"}},quickActionRepositories:{include:{repository:!0}},_count:{select:{runs:!0}}}})}async version(A){return(await (0,o.U)()).workflowVersion.findUnique({where:{id:A},include:{triggers:!0}})}async create(A){let e=Y(A.name,"Workflow name",200),t=(0,c.d)(A.definition??(0,c.p)(e)),r=JSON.stringify({...t,name:e,description:A.description?.trim()??t.description});X(r,"Workflow definition",2097152);let i=F(A.overlapPolicy),n=V(A.worktreeConcurrency,A.exclusiveWorktree),s=await (0,o.U)(),l=await s.workflow.create({data:{id:(0,a.randomUUID)(),name:e,description:A.description?.trim()??t.description,draftDefinitionJson:r,draftSchemaVersion:c.c,overlapPolicy:i,overlapScope:K(A.overlapScope),maxConcurrentRuns:$(A.maxConcurrentRuns,i),completionNotificationsEnabled:A.completionNotificationsEnabled??!0,exclusiveWorktree:"EXCLUSIVE"===n,worktreeConcurrency:n,blocksGitOperations:z(n,A.blocksGitOperations)}});return Ae(l.id),this.get(l.id)}async saveDraft(A){let e=(0,c.d)(A.definition),t=JSON.stringify(e);X(t,"Workflow definition",2097152);let r=await this.get(A.id);if(!r)throw Error("Workflow not found");let i=F(A.overlapPolicy??r.overlapPolicy),n=V(A.worktreeConcurrency??(null===A.exclusiveWorktree||void 0===A.exclusiveWorktree?r.worktreeConcurrency:null),A.exclusiveWorktree??r.exclusiveWorktree),a=await (0,o.U)();return await a.workflow.update({where:{id:A.id},data:{name:e.name,description:e.description,draftDefinitionJson:t,draftSchemaVersion:e.schemaVersion,overlapPolicy:i,overlapScope:K(A.overlapScope??r.overlapScope),maxConcurrentRuns:$(A.maxConcurrentRuns??r.maxConcurrentRuns,i),completionNotificationsEnabled:A.completionNotificationsEnabled??r.completionNotificationsEnabled,exclusiveWorktree:"EXCLUSIVE"===n,worktreeConcurrency:n,blocksGitOperations:z(n,A.blocksGitOperations??r.blocksGitOperations)}}),Ae(A.id),this.get(A.id)}async validateDraft(A){let e=await this.get(A);if(!e)throw Error("Workflow not found");let t=(0,c.f)(L(e.draftDefinitionJson)),r=[...t.diagnostics];return t.definition&&(r.push(...(0,h.f)(t.definition,r)),r.push(...await this.validateSubworkflows(e.id,t.definition))),{valid:!(0,c.C)(r),diagnostics:r}}async validateSubworkflows(A,e){let t=e.nodes.filter(({kind:A})=>"CONTROL_SUBWORKFLOW"===A).map(A=>({node:A,versionId:A.config.versionId})).filter(A=>"string"==typeof A.versionId);if(!t.length)return[];let r=await (0,o.U)(),i=new Map,n=new Map,a=new Set,s=new Set,l=t.map(({versionId:A})=>A);for(;l.length;){let A=[...new Set(l)].filter(A=>!s.has(A));if(!A.length)break;for(let e of(A.forEach(A=>s.add(A)),l=[],await r.workflowVersion.findMany({where:{id:{in:A}}}))){i.set(e.id,e);try{let A=(0,c.d)(L(e.definitionJson)).nodes.filter(({kind:A})=>"CONTROL_SUBWORKFLOW"===A).map(({config:A})=>A.versionId).filter(A=>"string"==typeof A);n.set(e.id,A),l.push(...A)}catch{a.add(e.id)}}}let d=(A,e)=>{let t=i.get(A);if(!t)return"MISSING";if(a.has(A))return"INVALID";if(e.has(t.workflowId))return"RECURSIVE";let r=new Set(e).add(t.workflowId);for(let e of n.get(A)??[]){let A=d(e,r);if(A)return A}return null},u=[];for(let{node:e,versionId:r}of t){let t=d(r,new Set([A]));"MISSING"===t?u.push({severity:"ERROR",code:"SUBWORKFLOW_NOT_FOUND",message:"Pinned sub-workflow chain contains a missing version",nodeId:e.id}):"INVALID"===t?u.push({severity:"ERROR",code:"SUBWORKFLOW_INVALID",message:"Pinned sub-workflow chain contains an invalid definition",nodeId:e.id}):"RECURSIVE"===t&&u.push({severity:"ERROR",code:"SUBWORKFLOW_RECURSION",message:"Pinned sub-workflow calls cannot form a recursive chain",nodeId:e.id})}return u}async publish(A){let e=await this.get(A);if(!e)throw Error("Workflow not found");let t=(0,c.d)(L(e.draftDefinitionJson)),r=await this.validateDraft(A);if(!r.valid)throw Error(`Workflow cannot be published: ${r.diagnostics.filter(({severity:A})=>"ERROR"===A).map(({message:A})=>A).slice(0,5).join("; ")}`);let i=await (0,o.U)(),n=await i.$transaction(async e=>{let r=await e.workflowVersion.findFirst({where:{workflowId:A},orderBy:{version:"desc"}}),i=(0,a.randomUUID)(),n=await e.workflowVersion.create({data:{id:i,workflowId:A,version:(r?.version??0)+1,name:t.name,description:t.description,schemaVersion:t.schemaVersion,definitionJson:JSON.stringify(t),contentHash:(0,a.createHash)("sha256").update(Z(t)).digest("hex"),triggers:{create:t.triggers.map(A=>({id:(0,a.randomUUID)(),nodeId:A.id,kind:A.kind,configJson:JSON.stringify(A.config)}))}},include:{triggers:!0}});return await e.workflow.update({where:{id:A},data:{activeVersionId:i}}),n});return Ae(A),n}async setEnabled(A,e){let t=await (0,o.U)(),r=await t.workflow.findUnique({where:{id:A}});if(!r)throw Error("Workflow not found");if(e&&!r.activeVersionId)throw Error("Publish the workflow before enabling it");return await t.workflow.update({where:{id:A},data:{enabled:e}}),Ae(A),this.get(A)}async setQuickAction(A){let e=await (0,o.U)(),t=[...new Set(A.repositoryIds.map(A=>A.trim()).filter(Boolean))],[r,i]=await Promise.all([e.workflow.findUnique({where:{id:A.id},select:{id:!0}}),e.codebaseRepository.count({where:{id:{in:t}}})]);if(!r)throw Error("Workflow not found");if(i!==t.length)throw Error("One or more repositories were not found");let n=A.quickActionIconKey.trim();if(!d.t.includes(A.kind))throw Error("Quick action kind is invalid");if("none"!==n&&!s.H.includes(n))throw Error("Quick action icon is invalid");let a=A.quickActionButtonVariant.trim();if(!["default","outline","secondary","destructive"].includes(a))throw Error("Quick action button style is invalid");return await e.$transaction(async e=>{await e.workflow.update({where:{id:A.id},data:{quickActionKind:A.kind,quickActionIconKey:n,quickActionButtonVariant:a}}),await e.workflowQuickActionRepository.deleteMany({where:{workflowId:A.id}}),t.length&&await e.workflowQuickActionRepository.createMany({data:t.map(e=>({workflowId:A.id,repositoryId:e}))})}),Ae(A.id),this.get(A.id)}async archive(A,e){let t=await (0,o.U)();return await t.workflow.update({where:{id:A},data:{archivedAt:e?new Date:null,...e?{enabled:!1}:{}}}),Ae(A),this.get(A)}async delete(A){let e=await (0,o.U)();if(await e.workflowRun.count({where:{workflowId:A}}))throw Error("Archive workflows that have run history instead of deleting them");return await e.workflow.delete({where:{id:A}}),Ae(A),!0}export(A,e){return this.exportInternal(A,e)}async exportInternal(A,e){let t=await this.get(A);if(!t)throw Error("Workflow not found");let r=e?t.versions.find(A=>A.id===e):null;if(e&&!r)throw Error("Workflow version not found");let i=(0,c.d)(L(r?.definitionJson??t.draftDefinitionJson));return{format:"aide.workflow.export",schemaVersion:c.c,exportedAt:new Date().toISOString(),workflow:{name:r?.name??t.name,description:r?.description??t.description,overlapPolicy:t.overlapPolicy,overlapScope:t.overlapScope,maxConcurrentRuns:t.maxConcurrentRuns,completionNotificationsEnabled:t.completionNotificationsEnabled,exclusiveWorktree:t.exclusiveWorktree,worktreeConcurrency:t.worktreeConcurrency,blocksGitOperations:t.blocksGitOperations,definition:(0,c.x)(i)}}}async import(A){X("string"==typeof A.payload?A.payload:JSON.stringify(A.payload),"Workflow import",2097152);let e=AA("string"==typeof A.payload?JSON.parse(A.payload):A.payload,"Workflow import"),t="aide.workflow.export"===e.format,r=t?AA(e.workflow,"Exported workflow"):e,i=(0,c.d)(t?r.definition:r);return this.create({name:A.name?.trim()||i.name,description:i.description,definition:{...i,name:A.name?.trim()||i.name},overlapPolicy:"string"==typeof r.overlapPolicy?r.overlapPolicy:"QUEUE",overlapScope:"string"==typeof r.overlapScope?r.overlapScope:!0===r.exclusiveWorktree?"WORKTREE":"GLOBAL",maxConcurrentRuns:"number"==typeof r.maxConcurrentRuns?r.maxConcurrentRuns:1,completionNotificationsEnabled:"boolean"!=typeof r.completionNotificationsEnabled||r.completionNotificationsEnabled,worktreeConcurrency:"string"==typeof r.worktreeConcurrency?r.worktreeConcurrency:!0===r.exclusiveWorktree?"EXCLUSIVE":"NON_EXCLUSIVE",blocksGitOperations:"boolean"==typeof r.blocksGitOperations?r.blocksGitOperations:!0===r.exclusiveWorktree,exclusiveWorktree:"boolean"==typeof r.exclusiveWorktree&&r.exclusiveWorktree})}async runs(A={}){let e=await (0,o.U)(),t=Math.min(Math.max(A.first??100,1),200),r=Number(A.search),n=A.archive?.toUpperCase()??"ACTIVE",a="ALL"===n?{}:"ARCHIVED"===n?{archivedAt:{not:null}}:{archivedAt:null},s=A.agentId?await i(e,{...A,agentId:A.agentId,first:t}):null,l=await e.workflowRun.findMany({where:{...a,...s?{id:{in:s.ids}}:{},...A.workflowId?{workflowId:A.workflowId}:{},...A.status?{status:A.status.toUpperCase()}:{},...Number.isInteger(r)&&r>0?{displayNumber:r}:A.search?.trim()?{workflow:{name:{contains:A.search.trim()}}}:{}},include:{workflow:!0,version:!0,trigger:!0,_count:{select:{attempts:!0,events:!0}}},orderBy:[{createdAt:"desc"},{id:"desc"}],take:t+1,...!s&&A.after?{cursor:{id:A.after},skip:1}:{}});return{items:l.slice(0,t),nextCursor:l.length>t?l[t-1].id:null,totalCount:s?.totalCount??await e.workflowRun.count({where:{...a,...A.workflowId?{workflowId:A.workflowId}:{}}})}}async archiveRuns(A,e){let t=await (0,o.U)(),r=[...new Set(A)],i=await t.workflowRun.updateMany({where:{id:{in:r}},data:{archivedAt:e?new Date:null}});for(let A of r)At(A);return i.count}async deleteRuns(A){let e=await (0,o.U)(),t=[...new Set(A)];if(await e.workflowRun.count({where:{id:{in:t},status:{notIn:["SUCCEEDED","FAILED","CANCELLED"]}}}))throw Error("Cancel runs that have not finished before deleting them");let r=await e.workflowRun.deleteMany({where:{id:{in:t}}});for(let A of t)At(A);return r.count}async run(A,e=!0){return(await (0,o.U)()).workflowRun.findUnique({where:{id:A},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:!!e&&{orderBy:{sequence:"asc"}},_count:{select:{events:!0}},resourceLinks:{orderBy:{createdAt:"asc"}}}})}async runEvents(A,e=-1,t=500,r={}){let i=await (0,o.U)(),n=r.latest||null!=r.beforeSequence,a=await i.workflowRunEvent.findMany({where:{runId:A,sequence:{gt:e,...null==r.beforeSequence?{}:{lt:r.beforeSequence}}},orderBy:{sequence:n?"desc":"asc"},...null==t?{}:{take:Math.min(Math.max(t,1),1e3)}});return n?a.reverse():a}async questionBatch(A){return(await (0,o.U)()).runQuestionBatch.findUnique({where:{id:A},include:{questions:{orderBy:{position:"asc"},include:{options:{orderBy:{position:"asc"}}}},answerRevisions:{orderBy:{revision:"asc"}},checkpoint:!0}})}async jobSecrets(A,e){if(!this.credentials||!this.agentControl)throw Error("Workflow credentials are unavailable");if(this.claimedSecretJobs.has(e))throw Error("Workflow job secrets were already claimed");let t=await this.agentControl.getJob(e);if(!t||t.agentId!==A||"workflow.terminal.run"!==t.kind||"RUNNING"!==t.status)throw Error("Workflow job is not eligible to claim secrets");let r=(0,D.r)(L(t.payloadJson)),i=new Set(Object.values(B.x)),n=[];for(let A of r.credentialEnvironment){if(!i.has(A.credential.kind))throw Error("Workflow references an unsupported credential kind");let e=await this.credentials.getText(A.credential);if(null===e)throw Error(`Credential ${A.credential.id} is unavailable`);n.push({name:A.name,value:e})}return this.claimedSecretJobs.add(e),n}async workflowAgentContext(A){let e=await (0,o.U)(),t=(0,C.x)(A,"worktree.id");if("string"==typeof t){let A=await e.worktree.findUnique({where:{id:t},include:{codebase:{include:{agent:!0}}}});if(!A)throw Error("Workflow worktree is unavailable");let r=JSON.parse(A.codebase.agent.capabilitiesJson);return{agentId:A.codebase.agentId,codebaseId:A.codebaseId,worktreeId:A.id,cwd:A.folder,capabilities:Array.isArray(r)?r.filter(A=>"string"==typeof A):[]}}let r=(0,C.x)(A,"codebase.id");if("string"!=typeof r)throw Error("Workflow requires a codebase or worktree");let i=await e.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(A=>"string"==typeof A):[]}}async startTerminalJob(A){if(!this.agentControl)throw Error("Agent control is unavailable");let e=await this.workflowAgentContext(A.sessionData);if(!e.capabilities.includes(D.e))throw Error("The selected agent must be updated to run workflow terminal steps");let t={...A.node.config.environment&&"object"==typeof A.node.config.environment&&!Array.isArray(A.node.config.environment)?Object.fromEntries(Object.entries(A.node.config.environment).map(([A,e])=>[A,String(e)])):{},AIDE_TICKET_KEY:String((0,C.x)(A.sessionData,"ticket.key")??""),AIDE_TICKET_TITLE:String((0,C.x)(A.sessionData,"ticket.title")??""),AIDE_BRANCH:String((0,C.x)(A.sessionData,"worktree.branch")??""),AIDE_BASE_BRANCH:String((0,C.x)(A.sessionData,"worktree.baseBranch")??""),AIDE_WORKTREE_PATH:String((0,C.x)(A.sessionData,"worktree.path")??e.cwd),AIDE_CODEBASE_PATH:String((0,C.x)(A.sessionData,"codebase.folder")??e.cwd),AIDE_REPO_ORIGIN:String((0,C.x)(A.sessionData,"repo.displayOrigin")??"")},r=Array.isArray(A.node.config.credentials)?A.node.config.credentials:[],i=await this.agentControl.createJob({agentId:e.agentId,kind:D.e,payload:{workflowRunId:A.run.id,stepAttemptId:A.attempt.id,stepId:A.node.id,codebaseId:e.codebaseId,worktreeId:e.worktreeId,cwd:e.cwd,script:Y(String(A.node.config.script??""),"Terminal script",1e6),interpreter:"NODE"===A.node.config.interpreter?"NODE":"SHELL",sessionData:A.sessionData,environment:t,credentialEnvironment:r},idempotencyKey:A.attempt.idempotencyKey,timeoutSeconds:Number(A.node.config.timeoutSeconds??900),codebaseId:e.codebaseId,worktreeId:e.worktreeId,visibility:"SYSTEM",blocksGitOperations:A.run.blocksGitOperations});return{output:{jobId:i.id},links:[{kind:"AGENT_JOB",resourceId:i.id,label:"Workflow terminal job",url:`/dashboard/jobs/${i.id}`}],wait:{kind:"AGENT_JOB",externalKey:i.id,resumeAfter:(0,E.P)(A.node.config),timeoutAt:(0,E.I)(A.node.config,900)}}}async startCheckpointJob(A){if(!this.agentControl)throw Error("Agent control is unavailable");let e=await this.workflowAgentContext(A.sessionData);if(!e.capabilities.includes(D.Q))throw Error("The selected agent must be updated to capture workflow checkpoints");let t=await this.agentControl.createJob({agentId:e.agentId,kind:D.Q,payload:{operation:"CAPTURE",workflowRunId:A.run.id,stepAttemptId:A.attempt.id,cwd:e.cwd,kind:String(A.node.config.kind??"STEP"),checkpoint:null,stash:!1},idempotencyKey:A.attempt.idempotencyKey,timeoutSeconds:300,codebaseId:e.codebaseId,worktreeId:e.worktreeId,visibility:"SYSTEM"});return{output:{jobId:t.id},links:[{kind:"AGENT_JOB",resourceId:t.id,label:"Workflow checkpoint job",url:`/dashboard/jobs/${t.id}`}],wait:{kind:"AGENT_JOB",externalKey:t.id,resumeAfter:(0,E.P)(A.node.config),timeoutAt:(0,E.I)(A.node.config)}}}async workflowAgentJobCompleted(A){if(A.kind===D.e){let e=(0,D.r)(L(A.payloadJson));if("SUCCEEDED"!==A.status||!A.resultJson)return void await this.resolveExternalWait("AGENT_JOB",A.id,{jobId:A.id,status:A.status},A.error||`Workflow terminal job ${A.status.toLowerCase()}`);let t=AA(L(A.resultJson),"Workflow terminal result");return void await this.resolveExternalWait("AGENT_JOB",A.id,{...t,jobId:A.id,stepAttemptId:e.stepAttemptId})}if(A.kind!==D.Q)return;let e=(0,D.P)(L(A.payloadJson));if("SUCCEEDED"!==A.status||!A.resultJson)return void await this.resolveExternalWait("AGENT_JOB",A.id,{jobId:A.id,status:A.status},A.error||`Workflow checkpoint job ${A.status.toLowerCase()}`);let t=AA(L(A.resultJson),"Workflow checkpoint result"),r=null;if(t.checkpoint&&"object"==typeof t.checkpoint){let A=t.checkpoint,i=await (0,o.U)();r=(0,a.randomUUID)(),await i.$transaction([i.runCheckpoint.create({data:{id:r,workflowStepAttemptId:e.stepAttemptId,kind:String(A.kind??e.kind),headSha:"string"==typeof A.headSha?A.headSha:null,branch:"string"==typeof A.branch?A.branch:null,upstreamSha:"string"==typeof A.upstreamSha?A.upstreamSha:null,indexTree:"string"==typeof A.indexTree?A.indexTree:null,worktreeTree:"string"==typeof A.worktreeTree?A.worktreeTree:null,refName:"string"==typeof A.refName?A.refName:null,manifestJson:"string"==typeof A.manifestJson?A.manifestJson:null,diffSummary:"string"==typeof A.diffSummary?A.diffSummary:null,diffPatch:"string"==typeof A.diffPatch?A.diffPatch:null,stashRef:"string"==typeof t.stashRef?t.stashRef:"string"==typeof A.stashRef?A.stashRef:null}}),i.workflowRunResourceLink.create({data:{id:(0,a.randomUUID)(),runId:e.workflowRunId,attemptId:e.stepAttemptId,kind:"CHECKPOINT",resourceId:r,label:`${String(A.kind??e.kind)} checkpoint`}})])}await this.resolveExternalWait("AGENT_JOB",A.id,{...t,jobId:A.id,checkpointId:r})}async genericAgentJobCompleted(A){if(A.kind===D.e||A.kind===D.Q)return;let e=A.resultJson?AA(L(A.resultJson),"Agent job result"):{status:A.status};if("SUCCEEDED"===A.status){let t=await (0,o.U)(),r=e.worktree&&"object"==typeof e.worktree&&!Array.isArray(e.worktree)?e.worktree:null,i=r&&"string"==typeof r.gitDirectory?r.gitDirectory:null,n=A.codebaseId?await t.worktree.findFirst({where:{codebaseId:A.codebaseId,...A.worktreeId?{id:A.worktreeId}:i?{gitDirectory:i}:{id:"__missing__"}},include:{codebase:{include:{repository:!0,agent:!0}}}}):null,a=n?.codebase??(A.codebaseId?await t.codebase.findUnique({where:{id:A.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 A=e.sessionPatch&&"object"==typeof e.sessionPatch&&!Array.isArray(e.sessionPatch)?e.sessionPatch:{};e={...e,sessionPatch:(0,C.d)(A,s)}}}await this.resolveExternalWait("AGENT_JOB",A.id,{...e,jobId:A.id,status:A.status},"SUCCEEDED"===A.status?null:A.error||`Agent job ${A.status.toLowerCase()}`)}async restoreCheckpointWithAgent(A,e){if(!this.agentControl)throw Error("Agent control is unavailable");let t=await (0,o.U)(),r=await t.runCheckpoint.findUnique({where:{id:A},include:{workflowStepAttempt:{include:{run:!0}}}}),i=r?.workflowStepAttempt;if(!r||!i)throw Error("Workflow checkpoint not found");let n=await this.workflowAgentContext((0,C.h)(i.run.sessionDataJson)),s=await this.agentControl.createJob({agentId:n.agentId,kind:D.Q,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:e.stash},idempotencyKey:`workflow:restore:${A}:${(0,a.randomUUID)()}`,timeoutSeconds:300,codebaseId:n.codebaseId,worktreeId:n.worktreeId,visibility:"SYSTEM"}),l=Date.now()+3e5;for(;Date.now()<l;){let A=await this.agentControl.getJob(s.id);if(!A)throw Error("Workflow restore job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(A.status)){if("SUCCEEDED"!==A.status)throw Error(A.error||`Workflow restore job ${A.status.toLowerCase()}`);return}await new Promise(A=>setTimeout(A,250))}throw await this.agentControl.cancelJob(s.id),Error("Workflow restore job timed out")}async compareCheckpointWithAgent(A){if(!this.agentControl)throw Error("Agent control is unavailable");let e=await (0,o.U)(),t=await e.runCheckpoint.findUnique({where:{id:A},include:{workflowStepAttempt:{include:{run:!0}}}}),r=t?.workflowStepAttempt;if(!t||!r)throw Error("Workflow checkpoint not found");let i=await this.workflowAgentContext((0,C.h)(r.run.sessionDataJson)),n=await this.agentControl.createJob({agentId:i.agentId,kind:D.Q,payload:{operation:"COMPARE",workflowRunId:r.runId,stepAttemptId:r.id,cwd:i.cwd,kind:"REPLAY_PREVIEW",checkpoint:{headSha:t.headSha,branch:t.branch,upstreamSha:t.upstreamSha,indexTree:t.indexTree,worktreeTree:t.worktreeTree,refName:t.refName},stash:!1},idempotencyKey:`workflow:compare:${A}:${(0,a.randomUUID)()}`,timeoutSeconds:60,codebaseId:i.codebaseId,worktreeId:i.worktreeId,visibility:"SYSTEM"}),s=Date.now()+6e4;for(;Date.now()<s;){let A=await this.agentControl.getJob(n.id);if(!A)throw Error("Workflow comparison job disappeared");if(new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]).has(A.status)){if("SUCCEEDED"!==A.status||!A.resultJson)throw Error(A.error||`Workflow comparison job ${A.status.toLowerCase()}`);let e=AA(L(A.resultJson),"Workflow comparison result");return AA(e.comparison,"Git checkpoint comparison")}await new Promise(A=>setTimeout(A,250))}throw await this.agentControl.cancelJob(n.id),Error("Workflow comparison job timed out")}async runSummariesForResource(A,e,t=6){return(await (0,o.U)()).workflowRun.findMany({where:{resourceLinks:{some:{kind:A.trim().toUpperCase(),resourceId:e.trim()}}},take:Math.min(Math.max(t,1),100),select:{id:!0,displayNumber:!0,status:!0,workflow:{select:{id:!0,name:!0}}},orderBy:[{createdAt:"desc"},{id:"desc"}]})}async targetSummaries(A){if(A.length>200)throw Error("At most 200 workflow targets are allowed");let e=new Map;for(let t of A){let A=t.resourceKind.trim().toUpperCase(),r=t.resourceId.trim();if(!A||!r)throw Error("Invalid workflow target");e.set(JSON.stringify([A,r]),{resourceKind:A,resourceId:r})}let t=[...e.values()];if(!t.length)return[];let r=t.map(({resourceKind:A,resourceId:e})=>({kind:A,resourceId:e})),i=await (0,o.U)(),n=await i.workflowRun.findMany({where:{archivedAt:null,status:{in:[...v]},resourceLinks:{some:{OR:r}}},select:{id:!0,workflowId:!0,displayNumber:!0,status:!0,resourceLinks:{where:{OR:r},select:{kind:!0,resourceId:!0}}},orderBy:[{displayNumber:"asc"},{id:"asc"}]});return t.map(A=>({...A,activeRuns:n.filter(e=>e.resourceLinks.some(e=>e.kind===A.resourceKind&&e.resourceId===A.resourceId)).map(({resourceLinks:A,...e})=>e)}))}async runsForResource(A,e,t){return(await (0,o.U)()).workflowRun.findMany({where:{resourceLinks:{some:{kind:A.trim().toUpperCase(),resourceId:e.trim()}}},...null==t?{}:{take:Math.min(Math.max(t,1),100)},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"},{id:"desc"}]})}async acceptingResource(A){let e=A.trim().toUpperCase(),t=await (0,o.U)();return(await t.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:!0},orderBy:{name:"asc"}})).filter(A=>!!A.activeVersion&&(0,c.d)(L(A.activeVersion.definitionJson)).triggers.some(A=>(0,d.g)(A.kind)&&(0,c.F)(A.config)===e))}async quickActions(A){let e=await (0,o.U)();if(!d.t.includes(A.kind))throw Error("Quick action kind is invalid");let t=A.resourceKind.trim().toUpperCase(),r=A.repositoryId?.trim()||null;return(await e.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null},quickActionKind:A.kind,OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:r??""}}}]},include:{activeVersion:!0},orderBy:[{name:"asc"},{id:"asc"}]})).filter(A=>!!A.activeVersion&&(0,c.d)(L(A.activeVersion.definitionJson)).triggers.some(A=>(0,d.g)(A.kind)&&(0,c.F)(A.config)===t))}async recordEvent(A){return this.events.record(A)}async hydrateResourceSessionData(A,e,t){let r=A?.toUpperCase()??null,i=await (0,o.U)(),n={},a=null;if("CODEBASE"===r&&e){let A=await i.codebase.findUnique({where:{id:e},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}}}});A&&(n=j(A))}if("BUILD"===r&&e){let A=await i.build.findUnique({where:{id:e},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(A){a=A.worktreeId;let e=e=>{let t=A.reports.find(A=>A.kind===e);if(t)try{return(0,C.h)(t.summaryJson)}catch{return}},t=e("TEST_RESULTS"),r=e("CODE_COVERAGE");n=(0,C.d)(A.codebase?j(A.codebase):A.agent?P(A.agent):{},{build:{id:A.id,status:A.status,action:A.action,error:A.error,artifactDirectory:A.artifactDirectory,artifacts:A.artifacts,...t?{testSummary:t}:{},...r?{coverageSummary:r}:{}}})}}if("AGENT_RUN"===r&&e){let A=await i.agentRun.findUnique({where:{id:e},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}});A&&(a=A.worktreeId,n=(0,C.d)(A.agent?P(A.agent):{},{run:{id:A.id,kind:A.kind,status:A.status,phase:A.phase,origin:A.origin,provider:A.provider,model:A.model,branch:A.branch,finalOutput:A.finalOutput,error:A.error,usage:{inputTokens:A.inputTokens,outputTokens:A.outputTokens,reasoningTokens:A.reasoningTokens,cacheReadTokens:A.cacheReadTokens,cacheWriteTokens:A.cacheWriteTokens,toolCallCount:A.toolCallCount,estimatedCost:A.estimatedCost}},...A.jiraIssueKey?{ticket:{key:A.jiraIssueKey}}:{}}))}if("PULL_REQUEST"===r&&e&&this.worktrees?.workflowSessionDataForPullRequest){let A=/^([^/]+)\/([^#]+)#([1-9]\d*)$/.exec(e);A&&(n=(0,C.d)(n,await this.worktrees.workflowSessionDataForPullRequest(A[1],A[2],Number(A[3]))))}if("JIRA_TICKET"===r&&e&&this.jiraService)try{let A=await this.jiraService.ticket(e),t=A.comments.at(-1)??null;n=(0,C.d)(n,{ticket:{...A,title:A.summary,type:A.issueType,url:A.jiraUrl},...t?{comment:{id:t.id,body:t.content?.rawText??"",author:t.author}}:{}})}catch{}let s=(0,C.x)(t,"worktree.id"),l="WORKTREE"===r?e:"GITHUB_PIPELINE"===r||"GITHUB_JOB"===r?"string"==typeof s?s:null:a;if(l&&this.worktrees)if(this.worktrees.workflowSessionDataForWorktree)n=(0,C.d)(await this.worktrees.workflowSessionDataForWorktree(l),n);else{let A=await this.worktrees.ticketKeyForWorktree(l);A&&(n=(0,C.d)({ticket:{key:A}},n))}let c=(0,C.x)(t,"pipeline.pullRequests");!(0,C.x)(n,"pr")&&!(0,C.x)(t,"pr")&&Array.isArray(c)&&c[0]&&"object"==typeof c[0]&&!Array.isArray(c[0])&&(n=(0,C.d)(n,{pr:c[0]}));let d=(0,C.x)(t,"pr.jiraKey")??(0,C.x)(t,"pipeline.jiraKey");return"string"!=typeof(0,C.x)(n,"ticket.key")&&"string"==typeof d&&d.trim()&&(n=(0,C.d)(n,{ticket:{key:d}})),(0,C.d)(n,t)}async trigger(A){let e=await (0,o.U)(),t=await e.workflow.findUnique({where:{id:A.workflowId},include:{activeVersion:{include:{triggers:!0}}}});if(!t?.activeVersion)throw Error("Published workflow not found");if(!t.enabled||t.archivedAt)throw Error("Workflow is paused");let r=A.resourceKind?.toUpperCase()??null,i=A.choice?.trim()||null,{triggers:n}=t.activeVersion,s=r?"RESOURCE_MANUAL":"MANUAL",l=r?"RESOURCE_MANUAL_CHOICE":"MANUAL_CHOICE",d=A=>n.find(e=>e.kind===A&&(!r||(0,c.F)(AA(L(e.configJson),"Trigger configuration"))===r))??null,u=d(l),g=d(s),h=i?u:g;if(i&&!u)throw Error(r?`No resource trigger offers choices for ${r} resources`:"This workflow has no manual trigger with choices");if(!i&&!g&&u){let A=(0,c.q)(AA(L(u.configJson),"Trigger configuration"));throw Error(`This workflow needs a choice: ${A.map(({key:A})=>A).join(", ")}`)}if(r&&!h)throw Error(`No resource trigger accepts ${A.resourceKind} resources`);if(i&&u&&!(0,c.q)(AA(L(u.configJson),"Trigger configuration")).some(({key:A})=>A===i))throw Error(`Unknown choice ${i}`);let C=A.subjectKey?.trim()||(r&&A.resourceId?`${r}:${A.resourceId}`:`manual:${(0,a.randomUUID)()}`),p={sessionData:await this.hydrateResourceSessionData(A.resourceKind,A.resourceId,A.sessionData??{}),resourceKind:A.resourceKind??null,resourceId:A.resourceId??null,choice:i,manual:!0},I=await this.createRunForTrigger(t,t.activeVersion,h,null,i?l:s,C,p,`manual:${t.id}:${(0,a.randomUUID)()}`);return At(I.id),this.run(I.id)}async createRunForTrigger(A,e,t,r,i,n,s,l,c=null,d=null){return(await (0,o.U)()).$transaction(async o=>{if(d){let A=await o.workflowTriggerDelivery.findUnique({where:{id:d},include:{run:!0}});if(A)return A.run}let u=async A=>(d&&await o.workflowTriggerDelivery.create({data:{id:d,runId:A.id}}),A),g=await o.workflowRun.findUnique({where:{idempotencyKey:l}});if(g)return u(g);let h=AA(s.sessionData??{},"Session data"),p=(0,C.x)(h,"worktree.id"),I="string"==typeof p&&p?(await o.worktree.findUnique({where:{id:p},select:{id:!0}}))?.id??null:null;if("COALESCE_LATEST"===A.overlapPolicy){let e=await o.workflowRun.findFirst({where:{workflowId:A.id,triggerSubjectKey:n,status:"QUEUED",...W(A.overlapScope,I)},orderBy:{queuedAt:"desc"}});if(e)return u(await o.workflowRun.update({where:{id:e.id},data:{triggerId:t?.id??null,triggerEventId:r,triggerKind:i,triggerPayloadJson:JSON.stringify(s),queuedAt:new Date}}))}let m=(0,a.randomUUID)(),f=JSON.stringify((0,C.d)({workflow:{id:A.id,name:e.name,runId:m,startedAt:null,trigger:{id:t?.nodeId??null,kind:i,subjectKey:n,choice:"string"==typeof s.choice?s.choice:null}},steps:{}},h));X(f,"Workflow session data",2097152);let E=c?await o.workflowRun.findUnique({where:{id:c},select:{worktreeId:!0,worktreeLeaseOwnerRunId:!0}}):null,Q=(E?.worktreeId===I?E.worktreeLeaseOwnerRunId:null)??(!c&&"EXCLUSIVE"===A.worktreeConcurrency&&I?m:null),y=await o.workflowRun.create({data:{id:m,displayNumber:await An(o),workflowId:A.id,versionId:e.id,triggerId:t?.id??null,triggerEventId:r,parentRunId:c,worktreeId:I,worktreeLeaseOwnerRunId:Q,exclusiveWorktree:"EXCLUSIVE"===A.worktreeConcurrency,worktreeConcurrency:A.worktreeConcurrency,blocksGitOperations:A.blocksGitOperations,idempotencyKey:l,triggerKind:i,triggerSubjectKey:n,triggerPayloadJson:JSON.stringify(s),sessionDataJson:f,phase:Q?"WAITING_FOR_WORKTREE":"QUEUED"}}),B=(0,w.t)(i,s);return B&&await o.workflowRunResourceLink.create({data:{id:(0,a.randomUUID)(),runId:y.id,kind:B.kind.toUpperCase(),resourceId:B.resourceId,label:B.label??null,url:B.url??null,metadataJson:B.metadata?JSON.stringify(B.metadata):null}}),u(y)})}async processTriggerEvents(){let A=await (0,o.U)(),e=await A.workflowTriggerEvent.findMany({where:{status:"PENDING"},orderBy:{receivedAt:"asc"},take:50});if(!e.length)return;let t=await A.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:!0}}}});for(let s of e)try{let e=AA(L(s.payloadJson),"Trigger payload");for(let o of t)if(o.activeVersion)for(let t of o.activeVersion.triggers.filter(({kind:A})=>A===s.kind)){var r,i,n;if(e.workflowCorrelation&&"object"==typeof e.workflowCorrelation&&e.workflowCorrelation.workflowId===o.id)continue;let l=(r=s.dedupeKey,i=o.id,n=t.nodeId,(0,a.createHash)("sha256").update(JSON.stringify([r,i,n])).digest("hex"));if(await A.workflowTriggerDelivery.findUnique({where:{id:l},select:{id:!0}})||!await this.triggerMatches(t,s.subjectKey,e))continue;let c=await this.createRunForTrigger({...o,activeVersion:o.activeVersion},o.activeVersion,t,s.id,s.kind,s.subjectKey,e,l,null,l);At(c.id)}await A.workflowTriggerEvent.update({where:{id:s.id},data:{status:"PROCESSED",processedAt:new Date,error:null}})}catch(e){await A.workflowTriggerEvent.update({where:{id:s.id},data:{status:"FAILED",processedAt:new Date,error:e instanceof Error?e.message:String(e)}})}}async triggerMatches(A,e,t){let r,i=(0,C.S)(AA(L(A.configJson),"Trigger configuration"),t);"SIGNING_ASSET_EXPIRING"===A.kind&&void 0===i.thresholdPath&&(i.thresholdPath="signingProfile.expiresInDays",i.thresholdOperator="LTE",i.thresholdValue=30);let n=null;if(void 0!==t.cursorValue&&"WORKTREE_DIRTY_DURATION"!==A.kind&&("string"!=typeof i.thresholdPath||"string"!=typeof i.thresholdOperator)){let i=await (0,o.U)(),s=await i.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:A.id,subjectKey:e}}});if(n=Z(r=s?.cursorJson?AA(L(s.cursorJson),"Trigger cursor").value:void 0)!==Z(t.cursorValue),"WORKTREE_CLEAN"===A.kind&&(n=!0===r&&!1===t.cursorValue),"JIRA_SPRINT_STARTED"===A.kind||"JIRA_SPRINT_ENDED"===A.kind){let A=Array.isArray(r)?r:null,e=Array.isArray(t.cursorValue)?t.cursorValue:null;n=null!==A&&null!==e&&e.some(e=>!A.some(A=>Z(A)===Z(e)))}await i.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:A.id,subjectKey:e}},create:{id:(0,a.randomUUID)(),triggerId:A.id,subjectKey:e,cursorJson:JSON.stringify({value:t.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}},update:{cursorJson:JSON.stringify({value:t.cursorValue}),lastMatched:n,...n?{lastFiredAt:new Date}:{}}})}if("GITHUB_ISSUE_COMMAND"===A.kind){let A=(0,C.x)(t,"comment.author.login"),e=(0,C.x)(t,"comment.body"),r=Array.isArray(i.allowedLogins)?i.allowedLogins:[];if("string"!=typeof A||!r.includes(A)||"string"!=typeof e||"string"!=typeof i.commandPattern||!(0,l.u)(i.commandPattern,{label:"GitHub issue command pattern"}).test(e))return!1}if("GITLAB_NOTE_COMMAND"===A.kind){let A=(0,C.x)(t,"comment.author.username"),e=(0,C.x)(t,"comment.body"),r=Array.isArray(i.allowedUsernames)?i.allowedUsernames:[];if("string"!=typeof A||!r.includes(A)||"string"!=typeof e||"string"!=typeof i.commandPattern||!(0,l.u)(i.commandPattern,{label:"GitLab note command pattern"}).test(e))return!1}if("JIRA_ISSUE_COMMAND"===A.kind){let A=(0,C.x)(t,"comment.author.accountId"),e=(0,C.x)(t,"comment.body"),r=Array.isArray(i.allowedAccountIds)?i.allowedAccountIds:[];if("string"!=typeof A||!r.includes(A)||"string"!=typeof e||"string"!=typeof i.commandPattern||!(0,l.u)(i.commandPattern,{label:"Jira issue command pattern"}).test(e))return!1}if("COMMAND_OUTPUT_MATCH"===A.kind){let A=(0,C.x)(t,"output.data");if("string"!=typeof A||"string"!=typeof i.outputPattern||!(0,l.u)(i.outputPattern,{label:"Command output trigger pattern"}).test(A))return!1}if("WORKTREE_CONFLICT"===A.kind&&!0!==(0,C.x)(t,"worktree.conflicted")||"WORKTREE_MISSING"===A.kind&&null==(0,C.x)(t,"worktree.missingAt")||"WORKTREE_DIVERGED"===A.kind&&"DIVERGED"!==(0,C.x)(t,"worktree.pushStatus"))return!1;let s=!0;if(i.filters&&"object"==typeof i.filters)for(let[A,e]of Object.entries(i.filters)){let r=(0,C.x)(t,A);if(Array.isArray(e)){if(!e.some(A=>Z(A)===Z(r))){s=!1;break}}else if(Z(e)!==Z(r)){s=!1;break}}if("WORKTREE_DIRTY_DURATION"===A.kind){let r=await (0,o.U)(),n={triggerId_subjectKey:{triggerId:A.id,subjectKey:e}},l=await r.workflowTriggerState.findUnique({where:n}),c=function(A){let e=A.durationSeconds??3600;if("number"!=typeof e||!Number.isInteger(e)||e<1||e>31536e3)throw Error("Dirty duration must be an integer between 1 and 31536000 seconds");let t=A.previousCursor&&"object"==typeof A.previousCursor&&"dirtySince"in A.previousCursor?A.previousCursor.dirtySince:null,r=A.dirty?"number"==typeof t&&Number.isFinite(t)&&t<=A.now?t:A.now:null,i=null!==r&&A.now-r>=1e3*e;return{cursor:{dirtySince:r},matched:i,fire:i&&!A.previouslyMatched}}({dirty:!0===(0,C.x)(t,"worktree.dirty"),durationSeconds:i.durationSeconds,now:Date.now(),previousCursor:l?.cursorJson?AA(L(l.cursorJson),"Dirty duration cursor"):void 0,previouslyMatched:l?.lastMatched}),d=c.fire&&s,u=c.matched&&(l?.lastMatched||d),g={cursorJson:JSON.stringify(c.cursor),lastMatched:!!u,...d?{lastFiredAt:new Date}:{}};await r.workflowTriggerState.upsert({where:n,create:{id:(0,a.randomUUID)(),triggerId:A.id,subjectKey:e,...g},update:g});let h={...t.worktree,dirtySince:null===c.cursor.dirtySince?null:new Date(c.cursor.dirtySince).toISOString(),dirtyDurationSeconds:null===c.cursor.dirtySince?0:Math.floor((Date.now()-c.cursor.dirtySince)/1e3)};return t.worktree=h,t.sessionData={...t.sessionData,worktree:h},d}if(!s)return!1;if("string"==typeof i.thresholdPath&&"string"==typeof i.thresholdOperator){let r=I({op:i.thresholdOperator,left:{source:"SESSION",path:i.thresholdPath},right:i.thresholdValue},t),n=await (0,o.U)(),s=await n.workflowTriggerState.findUnique({where:{triggerId_subjectKey:{triggerId:A.id,subjectKey:e}}});return await n.workflowTriggerState.upsert({where:{triggerId_subjectKey:{triggerId:A.id,subjectKey:e}},create:{id:(0,a.randomUUID)(),triggerId:A.id,subjectKey:e,lastMatched:r,cursorJson:JSON.stringify({value:(0,C.x)(t,i.thresholdPath)}),...r?{lastFiredAt:new Date}:{}},update:{lastMatched:r,cursorJson:JSON.stringify({value:(0,C.x)(t,i.thresholdPath)}),...r&&!s?.lastMatched?{lastFiredAt:new Date}:{}}}),r&&!s?.lastMatched}return n??!0}async processSchedules(){let A=await (0,o.U)(),e=await A.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null}},include:{activeVersion:{include:{triggers:{where:{kind:"SCHEDULE"},include:{states:!0}}}}}}),t=new Date;for(let r of e)for(let e of r.activeVersion?.triggers??[]){let i=AA(L(e.configJson),"Schedule configuration"),n=Number(i.cadenceSeconds);if(!Number.isInteger(n)||n<1)continue;let s=r.id,o=e.states.find(A=>A.subjectKey===s);if(!o){let r="string"==typeof i.firstRunAt?new Date(i.firstRunAt):null,l=r&&Number.isFinite(r.getTime())?r:new Date(t.getTime()+1e3*n);o=await A.workflowTriggerState.create({data:{id:(0,a.randomUUID)(),triggerId:e.id,subjectKey:s,nextScheduledAt:l}})}if(!o.nextScheduledAt||o.nextScheduledAt>t)continue;let l=o.nextScheduledAt,c=new Date(Math.max(t.getTime(),l.getTime())+1e3*n);await A.workflowTriggerState.update({where:{id:o.id},data:{lastFiredAt:t,nextScheduledAt:c}}),await this.events.record({kind:"SCHEDULE",subjectKey:s,dedupeKey:`schedule:${e.id}:${l.toISOString()}`,payload:{sessionData:{},scheduledFor:l.toISOString(),cadenceSeconds:n}})}}async lifecycle(A,e){let t=await (0,o.U)(),r=await t.workflowRun.findUnique({where:{id:A}});if(!r)throw Error("Workflow run not found");if("PAUSE"===e){if(!new Set(["RUNNING","WAITING","BLOCKED"]).has(r.status))throw Error("Only an active workflow run can be paused");if(!await t.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:A,status:{in:["RUNNING","WAITING","BLOCKED"]}},data:{status:"PAUSING",phase:"DRAINING"}})).count&&(await e.workflowStepAttempt.updateMany({where:{runId:A,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}}),!0)))return this.run(A);await this.controlLinkedAgentRuns(A,"PAUSE"),await this.appendEvent(A,null,"RUN_PAUSING","Workflow pause requested")}else if("RESUME"===e){if("PAUSED"!==r.status)throw Error("Only a paused workflow run can be resumed");if(!(await t.workflowRun.updateMany({where:{id:A,status:"PAUSED"},data:{status:"RUNNING",phase:"SCHEDULING",pausedAt:null}})).count)return this.run(A);await this.controlLinkedAgentRuns(A,"CONTINUE"),await this.appendEvent(A,null,"RUN_RESUMED","Workflow resumed")}else{if(T.has(r.status))return this.run(A);for(let[e,r]of(await this.controlLinkedAgentRuns(A,"CANCEL"),await this.cancelWaitingCommandRuns(A),this.activeExecutions)){let i=await t.workflowStepAttempt.findUnique({where:{id:e},select:{runId:!0}});i?.runId===A&&r.abort()}if(!await t.$transaction(async e=>!!(await e.workflowRun.updateMany({where:{id:A,status:{notIn:[...T]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date}})).count&&(await e.workflowStepAttempt.updateMany({where:{runId:A,status:{notIn:[...U]}},data:{status:"CANCELLED",phase:"CANCELLED",finishedAt:new Date,claimOwner:null,claimExpiresAt:null}}),await e.workflowWait.updateMany({where:{runId:A,status:"PENDING"},data:{status:"CANCELLED",resolvedAt:new Date}}),await e.workflowResourceLease.deleteMany({where:{runId:A}}),await e.worktreeWorkflowLease.deleteMany({where:{workflowRunId:A}}),!0)))return this.run(A);await this.appendEvent(A,null,"RUN_CANCELLED","Workflow cancelled"),await this.promoteWorktreeAdmissions(r.worktreeId)}return At(A),this.run(A)}async repairRunData(A,e){let t=AA(e,"Session data patch"),r=await (0,o.U)(),i=await r.workflowRun.findUnique({where:{id:A}});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=(0,C.h)(i.sessionDataJson),a=(0,C.x)(n,"workflow"),s=(0,C.d)(n,t);a&&"object"==typeof a&&(s=(0,C.H)(s,"workflow",a)),G(i,s);let l=JSON.stringify(s);return X(l,"Workflow session data",2097152),await r.$transaction([r.workflowRun.update({where:{id:A},data:{sessionDataJson:l,sessionRevision:{increment:1},status:"PAUSED"===i.status?"PAUSED":"RUNNING",phase:"PAUSED"===i.status?"PAUSED":"SCHEDULING",blockedReason:null}}),r.workflowStepAttempt.updateMany({where:{runId:A,status:"BLOCKED"},data:{status:"PENDING",phase:"PENDING",error:null}})]),await this.appendEvent(A,null,"RUN_DATA_REPAIRED","Workflow session data repaired"),At(A),this.run(A)}async answerQuestion(A,e){let t=await (0,o.U)(),r=await t.$transaction(async t=>{let r=await t.runQuestionBatch.findUnique({where:{id:A},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 t.runAnswerRevision.create({data:{id:(0,a.randomUUID)(),batchId:A,revision:r.answerRevisions.length,answersJson:JSON.stringify(e)}}),await t.runQuestionBatch.update({where:{id:A},data:{status:"ANSWERED",answeredAt:new Date}}),await t.workflowWait.updateMany({where:{attemptId:i.id,status:"PENDING",kind:"HUMAN"},data:{status:"RESOLVED",resultJson:JSON.stringify({answers:e}),resolvedAt:new Date}}),i});return await this.completeWaitingAttempt(r.id,{answers:e},"HUMAN"),y._H.publish(H(r.runId),{workflowQuestionChanged:{id:A,runId:r.runId}}),this.run(r.runId)}async consumeCommandOutputMatches(){if(this.commandOutputStream||!this.commandsService)return;let A=y._H.iterate(y.jU);this.commandOutputStream=A;try{for await(let e of A){if(this.commandOutputStream!==A)break;await this.reconcileCommandOutputMatches(e.commandRunOutputAdded.runId).catch(A=>console.error("Could not process workflow command output:",A))}}finally{this.commandOutputStream===A&&(this.commandOutputStream=void 0),await A.return?.()}}async commandOutputRows(A,e,t){if(!this.commandsService)return[];let r=[],i=e,n=t;for(;;){let e=await this.commandsService.listOutput(A,i,n,5e3);if(r.push(...e),e.length<5e3)return r;let t=e.at(-1);i=t.attempt.attempt,n=t.sequence}}commandMatchBranchNodes(A,e){let t=new Map;for(let e of A.edges)t.set(e.source,[...t.get(e.source)??[],e]);let r=(t.get(e)??[]).filter(({sourceHandle:A})=>"match"===A).map(({target:A})=>A),i=new Set;for(;r.length;){let A=r.shift();i.has(A)||(i.add(A),r.push(...(t.get(A)??[]).map(({target:A})=>A)))}return A.nodes.filter(({id:A})=>i.has(A))}async persistCommandMatches(A,e,t){var r;let i=await (0,o.U)(),n=(r=A.predicateJson,JSON.stringify({...r?_(L(r)):{},outputMatch:e}));if(!t.length)return!!(await i.workflowWait.updateMany({where:{id:A.id,status:"PENDING",predicateJson:A.predicateJson},data:{predicateJson:n}})).count;let s=(0,c.d)(L(A.attempt.run.version.definitionJson)),l=s.nodes.find(({id:e})=>e===A.attempt.nodeId);if(!l)throw Error("Workflow command step is missing");let d=this.commandMatchBranchNodes(s,l.id);if(!await i.$transaction(async e=>{if(!(await e.workflowWait.updateMany({where:{id:A.id,status:"PENDING",predicateJson:A.predicateJson},data:{predicateJson:n}})).count)return!1;let r=await e.workflowRun.findUnique({where:{id:A.runId}});if(!r||!J.has(r.status))return!1;let i=(0,C.h)(r.sessionDataJson??"{}"),s=`steps.${l.id}`,o=_((0,C.x)(i,s)),c=Array.isArray(o.matches)?o.matches:[],u=[...c,...t];G(r,i=(0,C.H)(i,s,{...o,matches:u,latestMatch:t.at(-1)}));let g=JSON.stringify(i);X(g,"Workflow session data",2097152);let h=d.length?t.flatMap((e,r)=>{let i=`match.${A.attempt.id}.${e.ordinal}`,n=(0,C.H)({},s,{...o,matches:[...c,...t.slice(0,r+1)],latestMatch:e}),u={runId:A.runId,generation:A.attempt.generation,iterationKey:i,attempt:0};return[{id:(0,a.randomUUID)(),...u,nodeId:l.id,kind:l.kind,status:"SUCCEEDED",phase:"MATCH_EMITTED",inputJson:JSON.stringify(n),outputJson:JSON.stringify({value:e,selectedHandles:["match"],sessionPatch:n}),requiredPathsJson:JSON.stringify(Ar(l)),providedPathsJson:JSON.stringify(Ai(l)),idempotencyKey:`${A.runId}:${l.id}:${A.attempt.generation}:${i}:0`,startedAt:new Date,finishedAt:new Date},...d.map(e=>({id:(0,a.randomUUID)(),...u,nodeId:e.id,kind:e.kind,status:"PENDING",phase:"MATCH_PENDING",inputJson:JSON.stringify(n),requiredPathsJson:JSON.stringify(Ar(e)),providedPathsJson:JSON.stringify(Ai(e)),idempotencyKey:`${A.runId}:${e.id}:${A.attempt.generation}:${i}:0`}))]}):[];return h.length&&await e.workflowStepAttempt.createMany({data:h}),await e.workflowRun.update({where:{id:A.runId},data:{sessionDataJson:g,sessionRevision:{increment:1}}}),!0}))return!1;for(let e of t)await this.appendEvent(A.runId,A.attemptId,"STEP_OUTPUT_MATCHED",`Step ${l.name??l.id} matched command output`,{nodeId:l.id,match:e});return At(A.runId),await this.progressRun(A.runId),await this.dispatchReadyAttempts(),!0}async failCommandMatchWait(A,e){let t=await (0,o.U)();if(!(await t.workflowWait.updateMany({where:{id:A.id,status:"PENDING",predicateJson:A.predicateJson},data:{status:"FAILED",resolvedAt:new Date}})).count)return;await this.commandsService?.terminateRun(A.externalKey);let r=(0,c.d)(L(A.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===A.attempt.nodeId);await this.failAttempt(A.attempt,r??null,e)}async processCommandMatchWait(A){if(!A.externalKey||!this.commandsService)return;let e=function(A){if(!A)return null;let e=_(L(A)),t=_(e.outputMatch);return"string"==typeof t.pattern&&t.pattern?{pattern:t.pattern,mode:(0,u.O)({outputMatchMode:t.mode}),matchCount:Number.isInteger(t.matchCount)?Number(t.matchCount):0,matched:!0===t.matched,scanAttempt:Number.isInteger(t.scanAttempt)&&Number(t.scanAttempt)>0?Number(t.scanAttempt):1,scanCharacterOffset:Number.isInteger(t.scanCharacterOffset)&&Number(t.scanCharacterOffset)>=0?Number(t.scanCharacterOffset):0,observedAttempt:Number.isInteger(t.observedAttempt)&&Number(t.observedAttempt)>=0?Number(t.observedAttempt):0,observedSequence:Number.isInteger(t.observedSequence)?Number(t.observedSequence):-1}:null}(A.predicateJson);if(e)try{let t=await this.commandOutputRows(A.externalKey,e.observedAttempt,e.observedSequence);if(!t.length)return;let r=t.at(-1);if(e.observedAttempt=r.attempt.attempt,e.observedSequence=r.sequence,"ONCE"===e.mode&&e.matched)return void await this.persistCommandMatches(A,e,[]);let i=await this.commandOutputRows(A.externalKey,e.scanAttempt-1,-1),n=new Map;for(let A of i){let t=A.attempt.attempt;t<e.scanAttempt||n.set(t,[...n.get(t)??[],A])}let a=[...n.keys()].sort((A,e)=>A-e),s=[],o=(0,g.f)(e.pattern,!0);for(let t=0;t<a.length;t+=1){let r,i=a[t],l=n.get(i),c="",d=new Map,g=[];for(let A of l){if("STDOUT"!==A.stream&&"STDERR"!==A.stream)continue;let e=d.get(A.stream)??new TextDecoder("utf-8",{fatal:!1});d.set(A.stream,e);let t=e.decode(Buffer.from(A.dataBase64,"base64"),{stream:!0}),r=c.length;c+=t,g.push({sequence:A.sequence,start:r,end:c.length})}let h=i===e.scanAttempt?Math.min(e.scanCharacterOffset,c.length):0,C=c.slice(h);if(Buffer.byteLength(C,"utf8")>u.R)throw Error("Command output matcher exceeded its 16 MiB unmatched-output limit");for(o.lastIndex=h;r=o.exec(c);){let t=r[0];if(!t.length)throw Error("Command output patterns must consume at least one character");let n=r.index,a=n+t.length,o=(A,e)=>{let t=g.find(({start:t,end:r})=>e?A>t&&A<=r:A>=t&&A<r)??g.at(-1);return{sequence:t.sequence,offset:Math.max(0,A-t.start)}};e.matchCount+=1;let l={ordinal:e.matchCount,text:t,captures:r.slice(1).map(A=>A??null),namedCaptures:Object.fromEntries(Object.entries(r.groups??{}).map(([A,e])=>[A,e??null])),commandRunId:A.externalKey,commandAttempt:i,start:o(n,!1),end:o(a,!0)};if(s.push(l),e.scanAttempt=i,e.scanCharacterOffset=a,"ONCE"===e.mode){e.matched=!0;break}}if(e.matched)break;let p=a[t+1];void 0!==p?(e.scanAttempt=p,e.scanCharacterOffset=0):i>e.scanAttempt&&(e.scanAttempt=i,e.scanCharacterOffset=0)}await this.persistCommandMatches(A,e,s)}catch(e){await this.failCommandMatchWait(A,e instanceof Error?e:Error(String(e)))}}async reconcileCommandOutputMatches(A){if(!this.commandsService)return;let e=await (0,o.U)();for(let t of(await e.workflowWait.findMany({where:{kind:"COMMAND_RUN",status:"PENDING",predicateJson:{not:null},...A?{externalKey:A}:{},run:{status:{in:[...J]}}},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100})))await this.processCommandMatchWait(t)}async tick(){if(!this.ticking){this.ticking=!0;try{await this.recoverExpiredClaims(),await this.processSchedules(),await this.processTriggerEvents(),await this.events.maintain(),await this.reconcileCommandOutputMatches(),await this.resolveDueWaits(),await this.startQueuedRuns();let A=await (0,o.U)();for(let{id:e}of(await A.workflowRun.findMany({where:{status:{in:["RUNNING","WAITING","PAUSING"]}},select:{id:!0},orderBy:{updatedAt:"asc"},take:100})))await this.progressRun(e);await this.dispatchReadyAttempts()}finally{this.ticking=!1}}}async recoverExpiredClaims(){let A=await (0,o.U)();for(let e of(await A.workflowStepAttempt.findMany({where:{status:"RUNNING",claimExpiresAt:{lt:new Date}},include:{run:!0},take:100})))await A.$transaction([A.workflowStepAttempt.update({where:{id:e.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}}),A.workflowRun.update({where:{id:e.runId},data:{status:"BLOCKED",phase:"RECOVERY_BLOCKED",blockedReason:`Step ${e.nodeId} needs recovery review`}}),A.workflowResourceLease.deleteMany({where:{attemptId:e.id}})]),await this.appendEvent(e.runId,e.id,"STEP_RECOVERY_BLOCKED","Step needs recovery review after its worker lease expired"),await this.notifyRun(e.runId,"WORKFLOW_RECOVERY_PAUSED","Workflow paused during recovery","An interrupted step requires external-state verification before replay.",`recovery:${e.id}`),At(e.runId)}async startQueuedRuns(){let A=await (0,o.U)();for(let e of(await A.workflowRun.findMany({where:{status:"QUEUED"},include:{workflow:!0,version:!0},orderBy:[{queuedAt:"asc"},{id:"asc"}],take:200}))){let t=(0,c.d)(L(e.version.definitionJson)),r=new Date,i=(0,C.H)((0,C.h)(e.sessionDataJson),"workflow.startedAt",r.toISOString());await A.$transaction(async A=>{let n="CONCURRENT"===e.workflow.overlapPolicy?e.workflow.maxConcurrentRuns:1;if(await A.workflowRun.count({where:{workflowId:e.workflowId,id:{not:e.id},...W(e.workflow.overlapScope,e.worktreeId),status:{in:v.filter(A=>"QUEUED"!==A)}}})>=n)return!1;if(e.worktreeId&&"EXCLUDED"!==e.worktreeConcurrency){await A.worktreeAdmissionLane.upsert({where:{worktreeId:e.worktreeId},create:{worktreeId:e.worktreeId},update:{updatedAt:r}}),await A.worktreeWorkflowLease.deleteMany({where:{worktreeId:e.worktreeId,workflowRun:{status:{in:[...T]}}}}),await A.worktreeRunLease.deleteMany({where:{worktreeId:e.worktreeId,purpose:{not:"ANSWER_REVISION"},run:{status:{in:["COMPLETED","FAILED","CANCELLED"]}}}});let t=await A.worktreeWorkflowLease.findUnique({where:{worktreeId:e.worktreeId}});if(t&&e.worktreeLeaseOwnerRunId!==t.workflowRunId)return await A.workflowRun.updateMany({where:{id:e.id,status:"QUEUED"},data:{phase:"WAITING_FOR_WORKTREE"}}),!1;if(!t){let t=await A.workflowRun.findFirst({where:{worktreeId:e.worktreeId,status:"QUEUED",parentRunId:null,worktreeConcurrency:"EXCLUSIVE"},orderBy:[{queuedAt:"asc"},{id:"asc"}],select:{id:!0,queuedAt:!0}});if(t&&t.id!==e.id&&function(A,e,t,r){let i=A.getTime()-t.getTime();return i<0||0===i&&e<r}(t.queuedAt,t.id,e.queuedAt,e.id))return await A.workflowRun.updateMany({where:{id:e.id,status:"QUEUED"},data:{phase:"WAITING_FOR_WORKTREE"}}),!1;if(e.worktreeLeaseOwnerRunId===e.id){let[t,r,i,n]=await Promise.all([A.worktreeRunLease.count({where:{worktreeId:e.worktreeId}}),A.workflowRun.count({where:{worktreeId:e.worktreeId,id:{not:e.id},worktreeConcurrency:{not:"EXCLUDED"},status:{in:v.filter(A=>"QUEUED"!==A)}}}),A.agentRun.findFirst({where:{worktreeId:e.worktreeId,origin:"MANAGED",status:"QUEUED",OR:[{createdAt:{lt:e.queuedAt}},{createdAt:e.queuedAt,id:{lt:e.id}}]},select:{id:!0}}),A.workflowRun.findFirst({where:{worktreeId:e.worktreeId,status:"QUEUED",id:{not:e.id},worktreeConcurrency:{not:"EXCLUDED"},OR:[{queuedAt:{lt:e.queuedAt}},{queuedAt:e.queuedAt,id:{lt:e.id}}]},select:{id:!0}})]);if(t||r||i||n)return await A.workflowRun.updateMany({where:{id:e.id,status:"QUEUED"},data:{phase:"WAITING_FOR_WORKTREE"}}),!1;await A.worktreeWorkflowLease.create({data:{worktreeId:e.worktreeId,workflowRunId:e.id}})}}}return!!(await A.workflowRun.updateMany({where:{id:e.id,status:"QUEUED"},data:{status:"RUNNING",phase:"SCHEDULING",startedAt:r,sessionDataJson:JSON.stringify(i),sessionRevision:{increment:1}}})).count&&(await A.workflowStepAttempt.count({where:{runId:e.id,generation:e.generation}})||await A.workflowStepAttempt.createMany({data:t.nodes.map(A=>({id:(0,a.randomUUID)(),runId:e.id,nodeId:A.id,kind:A.kind,generation:e.generation,iterationKey:"",attempt:0,requiredPathsJson:JSON.stringify(Ar(A)),providedPathsJson:JSON.stringify(Ai(A)),idempotencyKey:`${e.id}:${A.id}:${e.generation}::0`}))}),!0)})&&(e.startedAt||await this.appendEvent(e.id,null,"RUN_STARTED","Workflow started"),At(e.id))}}selectedTrigger(A,e){let t=A.trigger?.nodeId??e.triggers.find(({kind:e})=>e===A.triggerKind)?.id??null;if(!(0,d.j)(A.triggerKind))return{id:t,choice:null};let r=AA(L(A.triggerPayloadJson),"Trigger payload");return{id:t,choice:"string"==typeof r.choice?r.choice:null}}attemptOutput(A){if(!A.outputJson)return{};let e=L(A.outputJson);return e&&"object"==typeof e&&!Array.isArray(e)?e:{value:e}}edgeState(A,e,t,r){if(!r.has(A.source))return A.source!==e.id||e.choice&&A.sourceHandle!==e.choice?"INACTIVE":"ACTIVE";let i=t.get(A.source);if(!i||!U.has(i.status))return"PENDING";if(new Set(["SKIPPED","CANCELLED","SUPERSEDED"]).has(i.status))return"INACTIVE";let n=r.get(A.source);if("FAILED"===i.status)return"failure"===A.sourceHandle||"catch"===A.sourceHandle||"CONTINUE"===n.failurePolicy&&"success"===A.sourceHandle?"ACTIVE":"INACTIVE";let a=this.attemptOutput(i).selectedHandles;return a?.length?a.includes(A.sourceHandle)?"ACTIVE":"INACTIVE":"success"===A.sourceHandle||"output"===A.sourceHandle?"ACTIVE":"INACTIVE"}async progressRun(A){let e=await (0,o.U)(),t=await e.workflowRun.findUnique({where:{id:A},include:{version:!0,trigger:!0,attempts:!0,waits:!0}});if(!t||T.has(t.status))return;if("PAUSING"===t.status){await e.workflowStepAttempt.updateMany({where:{runId:A,status:"READY"},data:{status:"PENDING",phase:"PAUSED_PENDING"}});let r=new Set(["AGENT_JOB","BUILD","SKILL_RUN","WORKTREE_MOVE","GITHUB_CHECKS"]),i=new Set(t.waits.filter(({status:A,kind:e})=>"PENDING"===A&&r.has(e)).map(({attemptId:A})=>A));!t.attempts.some(({id:A,status:e})=>"RUNNING"===e||"WAITING"===e&&i.has(A))&&(await e.workflowRun.updateMany({where:{id:A,status:"PAUSING"},data:{status:"PAUSED",phase:"PAUSED",pausedAt:new Date}})).count&&(await this.appendEvent(A,null,"RUN_PAUSED","Workflow paused"),At(A));return}if(!new Set(["RUNNING","WAITING"]).has(t.status))return;let r=(0,c.d)(L(t.version.definitionJson)),i=new Map(r.nodes.map(A=>[A.id,A])),n=new Map;for(let A of r.edges)n.set(A.target,[...n.get(A.target)??[],A]);let a=!0;for(;a;){if(a=!1,!(t=await e.workflowRun.findUnique({where:{id:A},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=t.attempts.filter(({generation:A,supersededAt:e})=>A===t.generation&&!e),o=new Map;for(let A of s){let e=`${A.nodeId}:${A.iterationKey}`,t=o.get(e);(!t||t.attempt<A.attempt)&&o.set(e,A)}let l=new Map([...o.values()].filter(({iterationKey:A})=>!A).map(A=>[A.nodeId,A])),c=this.selectedTrigger(t,r);for(let A of r.nodes){let t=l.get(A.id);if(!t||"PENDING"!==t.status)continue;let s=r.nodes.find(e=>"CONTROL_FOR_EACH"===e.kind&&e.config.joinNodeId===A.id);if(s){let A=l.get(s.id);if(!A||!U.has(A.status)||[...o.values()].filter(({iterationKey:A})=>!!A).some(({status:A})=>!U.has(A)))continue;await e.workflowStepAttempt.update({where:{id:t.id},data:{status:"READY",phase:"ITERATIONS_JOINED"}}),a=!0;continue}let d=n.get(A.id)??[];if(!d.length)continue;let u=d.map(A=>this.edgeState(A,c,l,i)),g=u.filter(A=>"ACTIVE"===A).length,h=u.filter(A=>"PENDING"===A).length;("ANY"==("CONTROL_JOIN"===A.kind&&"ANY"===A.config.mode?"ANY":"ALL")?g>0:0===h&&g>0)?(await e.workflowStepAttempt.update({where:{id:t.id},data:{status:"READY",phase:"READY"}}),a=!0):0===h&&0===g&&(await e.workflowStepAttempt.update({where:{id:t.id},data:{status:"SKIPPED",phase:"INACTIVE_BRANCH",finishedAt:new Date}}),a=!0)}await this.progressIterationAttempts(r,t,c,i,n,o,l)&&(a=!0)}if(!(t=await e.workflowRun.findUnique({where:{id:A},include:{version:!0,trigger:!0,attempts:!0,waits:!0}})))return;let s=new Map;for(let A of t.attempts.filter(({generation:A,supersededAt:e})=>A===t.generation&&!e)){let e=`${A.nodeId}:${A.iterationKey}`,t=s.get(e);(!t||t.attempt<A.attempt)&&s.set(e,A)}let l=[...s.values()],d=t.waits.some(({status:A})=>"PENDING"===A),u=l.some(({status:A})=>!U.has(A));if(d||u){let r=d?"WAITING":"RUNNING";t.status!==r&&(await e.workflowRun.updateMany({where:{id:A,status:{in:[...J]}},data:{status:r,phase:d?"WAITING":"SCHEDULING"}})).count&&At(A);return}let g=(0,c.d)(L(t.version.definitionJson)),h=l.find(A=>{if("FAILED"!==A.status)return!1;let e=g.nodes.find(({id:e})=>e===A.nodeId);return!!e&&"CONTINUE"!==e.failurePolicy&&!g.edges.some(A=>A.source===e.id&&new Set(["failure","catch"]).has(A.sourceHandle))});await this.finishRun(t,h?"FAILED":"SUCCEEDED",h?.error??null)}async finishRun(A,e,t){let r=await (0,o.U)();await r.$transaction(async r=>!!(await r.workflowRun.updateMany({where:{id:A.id,status:{in:[...J]}},data:{status:e,phase:e,error:t,finishedAt:new Date}})).count&&(await r.workflowResourceLease.deleteMany({where:{runId:A.id}}),await r.worktreeWorkflowLease.deleteMany({where:{workflowRunId:A.id}}),!0))&&(await this.appendEvent(A.id,null,`RUN_${e}`,"SUCCEEDED"===e?"Workflow completed":"Workflow failed",t?{error:t}:null),await this.resolveExternalWait("WORKFLOW_RUN",A.id,{status:e,runId:A.id},"FAILED"===e?t||"Sub-workflow failed":null),await this.events.record({kind:"WORKFLOW_FINISHED",subjectKey:A.workflowId,dedupeKey:`workflow-finished:${A.id}`,payload:{sessionData:(0,C.h)(A.sessionDataJson),run:{id:A.id,status:e},workflowCorrelation:{workflowId:A.workflowId,runId:A.id}}}),await this.notifyRun(A.id,"SUCCEEDED"===e?"WORKFLOW_COMPLETED":"WORKFLOW_FAILED","SUCCEEDED"===e?"Workflow completed":"Workflow failed",t||`Workflow run ${A.displayNumber} ${e.toLowerCase()}`,e.toLowerCase()),await this.promoteWorktreeAdmissions(A.worktreeId),At(A.id))}async dispatchReadyAttempts(){let A=await (0,o.U)(),e=Math.max(0,4-await A.workflowStepAttempt.count({where:{status:"RUNNING"}}));if(e)for(let t of(await A.workflowStepAttempt.findMany({where:{status:"READY",run:{status:{in:[...J]}}},orderBy:{createdAt:"asc"},take:2*e}))){if(e<=0)break;if(!(await A.workflowStepAttempt.updateMany({where:{id:t.id,status:"READY",run:{status:{in:[...J]}}},data:{status:"RUNNING",phase:"RUNNING",claimOwner:this.workerId,claimExpiresAt:new Date(Date.now()+3e5),startedAt:t.startedAt??new Date}})).count)continue;e-=1;let r=new AbortController;this.activeExecutions.set(t.id,r),this.executeAttempt(t.id,r.signal).catch(A=>{console.error(`Workflow attempt ${t.id} failed unexpectedly:`,A)}).finally(()=>{this.activeExecutions.delete(t.id)})}}async acquireResourceLease(A,e,t){let r=c.E.get(e.kind),i=null;if(r.mutatesWorktree){let A=(0,C.x)(t,"worktree.id")??(0,C.x)(t,"worktree.path")??(0,C.x)(t,"codebase.id");A&&(i=`git:${String(A)}`)}else if(e.kind.startsWith("BUILD_")){let A=(0,C.x)(t,"build.id");A&&(i=`build:${String(A)}`)}if(!i)return!0;let n=await (0,o.U)();await n.workflowResourceLease.deleteMany({where:{key:i,expiresAt:{lt:new Date}}});try{return await n.workflowResourceLease.create({data:{key:i,runId:A.runId,attemptId:A.id,expiresAt:new Date(Date.now()+3e5)}}),await n.workflowStepAttempt.update({where:{id:A.id},data:{resourceLockKey:i}}),!0}catch{return await n.workflowStepAttempt.update({where:{id:A.id},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",claimOwner:null,claimExpiresAt:null}}),!1}}async executeAttempt(A,e){let t=await (0,o.U)(),r=await t.workflowStepAttempt.findUnique({where:{id:A},include:{run:{include:{version:!0}}}});if(!r||"RUNNING"!==r.status)return;let i=(0,c.d)(L(r.run.version.definitionJson)),n=i.nodes.find(({id:A})=>A===r.nodeId);if(!n)return void await this.failAttempt(r,null,Error("Workflow step definition is missing"));let a=(0,C.h)(r.run.sessionDataJson);r.iterationKey&&(a=await this.iterationSessionData(r.run,r,a));let s=Ar(n).filter(A=>!(0,C.E)(a,A));if(s.length){await t.$transaction([t.workflowStepAttempt.update({where:{id:r.id},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",error:`Missing required session data: ${s.join(", ")}`,claimOwner:null,claimExpiresAt:null}}),t.workflowRun.update({where:{id:r.runId},data:{status:"BLOCKED",phase:"MISSING_REQUIREMENTS",blockedReason:`Step ${n.name??n.id} needs ${s.join(", ")}`}}),t.workflowResourceLease.deleteMany({where:{attemptId:A}})]),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}`),At(r.runId);return}if(r.run.exclusiveWorktree&&x.has(n.kind))return void await this.failAttempt(r,n,Error("Exclusive workflows cannot run steps that create, delete, or move their worktree"));if(await t.workflowStepAttempt.update({where:{id:r.id},data:{inputJson:JSON.stringify(a)}}),await this.acquireResourceLease(r,n,a))try{let A,t={...n,config:(0,C.S)(n.config,a)};if(A=n.kind.startsWith("CONTROL_")||"HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind?await this.executeControl(r.run,r,t,a,i):await this.executor.execute({run:r.run,attempt:r,node:t,sessionData:a,signal:e}),e.aborted)throw Error("Workflow step was cancelled");A.wait?await this.parkAttempt(r,n,A):await this.completeAttempt(r,n,A)}catch(e){let A=e instanceof Error?e:Error(String(e));if(await this.holdForBusyCodebase(r,A))return;await this.failAttempt(r,n,A)}}async holdForBusyCodebase(A,e){if(!(0,m.D)(e))return!1;let t=A.startedAt??A.createdAt;if(Date.now()-t.getTime()>6e5)return!1;let r=await (0,o.U)();return!!(await r.workflowStepAttempt.updateMany({where:{id:A.id,status:"RUNNING",claimOwner:this.workerId},data:{status:"READY",phase:"WAITING_FOR_RESOURCE",error:e.message,claimOwner:null,claimExpiresAt:null}})).count&&(await r.workflowResourceLease.deleteMany({where:{attemptId:A.id}}),await r.workflowRunEvent.findFirst({where:{attemptId:A.id,type:"STEP_WAITING_FOR_RESOURCE"},select:{id:!0}})||await this.appendEvent(A.runId,A.id,"STEP_WAITING_FOR_RESOURCE","Step is waiting for the codebase to become available",{error:e.message}),At(A.runId),!0)}async iterationSessionData(A,e,t){let r=await (0,o.U)(),i=await r.workflowStepAttempt.findMany({where:{runId:A.id,generation:e.generation,iterationKey:e.iterationKey,status:"SUCCEEDED"},orderBy:{finishedAt:"asc"}}),n=t;for(let A of(e.inputJson&&(n=(0,C.d)(n,AA(L(e.inputJson),"Iteration input"))),i)){let e=this.attemptOutput(A);e.sessionPatch&&(n=(0,C.d)(n,e.sessionPatch))}return n}async executeControl(A,e,t,r,i){switch(t.kind){case"CONTROL_IF":{let A=t.config.condition;if(!A)throw Error("If steps require a condition");let e=I(A,r);return{output:{matched:e},selectedHandles:[e?"true":"false"]}}case"CONTROL_JOIN":{let r=i.nodes.find(A=>"CONTROL_FOR_EACH"===A.kind&&A.config.joinNodeId===t.id);if(r){let t=await (0,o.U)(),i=await t.workflowStepAttempt.findMany({where:{runId:A.id,generation:e.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 t.workflowStepAttempt.count({where:{runId:A.id,generation:e.generation,iterationKey:{not:""}}}),failures:i.map(({nodeId:A,iterationKey:e,error:t})=>({nodeId:A,iterationKey:e,error:t}))}}}return{output:{joined:!0}}}case"CONTROL_TRY":return{output:{started:!0}};case"CONTROL_DELAY":{let A=Number(t.config.seconds??0);if(!Number.isFinite(A)||A<0||A>31536e3)throw Error("Delay must be between zero and 31,536,000 seconds");return{wait:{kind:"DELAY",resumeAfter:new Date(Date.now()+1e3*A)}}}case"CONTROL_WAIT_UNTIL":{let A=t.config.condition;if(!A)throw Error("Wait-until steps require a condition");if(I(A,r))return{output:{matched:!0}};let e=(0,E.G)(t.config,15);return{wait:{kind:"PREDICATE",predicate:{condition:A,cadenceSeconds:e},resumeAfter:new Date(Date.now()+1e3*e),timeoutAt:(0,E.I)(t.config)}}}case"CONTROL_SET_VARIABLE":{if("string"!=typeof t.config.path)throw Error("Set-variable steps require an output path");let A="string"==typeof t.config.script?await S(t.config.script,r):t.config.value;return{output:A,sessionPatch:(0,C.H)({},t.config.path,A)}}case"CONTROL_FOR_EACH":{let n=Array.isArray(t.config.items)?t.config.items:"string"==typeof t.config.listPath?(0,C.x)(r,t.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(A,e,t,i,n),{output:{itemCount:n.length},selectedHandles:n.length?["body"]:["empty"],sessionPatch:(0,C.H)({},`steps.${t.id}.items`,n)}}case"CONTROL_SUBWORKFLOW":return this.startSubworkflow(A,e,t,r);case"HUMAN_CONFIRM":case"HUMAN_CHOICE":return this.createHumanQuestion(A,e,t);default:throw Error(`Unsupported control step ${t.kind}`)}}async progressIterationAttempts(A,e,t,r,i,n,a){let s=await (0,o.U)(),l=!1;for(let A of new Set([...n.values()].map(({iterationKey:A})=>A).filter(Boolean))){let e=new Map(a);for(let t of n.values())t.iterationKey===A&&e.set(t.nodeId,t);for(let n of e.values()){if(n.iterationKey!==A||"PENDING"!==n.status)continue;let a=r.get(n.nodeId);if(!a)continue;let o=(i.get(a.id)??[]).map(A=>this.edgeState(A,t,e,r)),c=o.filter(A=>"ACTIVE"===A).length,d=o.filter(A=>"PENDING"===A).length;("ANY"==("CONTROL_JOIN"===a.kind&&"ANY"===a.config.mode?"ANY":"ALL")?c>0:0===d&&c>0)?(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"READY",phase:"ITERATION_READY"}}),l=!0):0===d&&0===c&&(await s.workflowStepAttempt.update({where:{id:n.id},data:{status:"SKIPPED",phase:"INACTIVE_ITERATION_BRANCH",finishedAt:new Date}}),l=!0)}}return l}async spawnForEach(A,e,t,r,i){let n="string"==typeof t.config.joinNodeId?t.config.joinNodeId:null,s=r.nodes.find(({id:A})=>A===n);if(!s||"CONTROL_JOIN"!==s.kind)throw Error("For-each steps require an explicit joinNodeId");let l=new Map;for(let A of r.edges)l.set(A.source,[...l.get(A.source)??[],A]);let c=(l.get(t.id)??[]).filter(({sourceHandle:A})=>"body"===A).map(({target:A})=>A),d=new Set;for(;c.length;){let A=c.shift();A===n||d.has(A)||(d.add(A),c.push(...(l.get(A)??[]).map(({target:A})=>A)))}if(i.length&&!d.size)throw Error("For-each body is not connected to its body handle");let u=r.nodes.filter(({id:A})=>d.has(A)),g=await (0,o.U)();await g.$transaction(async r=>{await r.workflowStepAttempt.updateMany({where:{runId:A.id,generation:e.generation,iterationKey:e.iterationKey,nodeId:{in:[...d]},status:"PENDING"},data:{status:"SKIPPED",phase:"ITERATION_TEMPLATE",finishedAt:new Date}}),i.length&&u.length&&await r.workflowStepAttempt.createMany({data:i.flatMap((r,i)=>{let n=e.iterationKey?`${e.iterationKey}.${i}`:String(i),s=JSON.stringify({loop:{current:{forEachNodeId:t.id,index:i,item:r},[t.id]:{index:i,item:r}}});return u.map(t=>({id:(0,a.randomUUID)(),runId:A.id,nodeId:t.id,kind:t.kind,generation:e.generation,iterationKey:n,attempt:0,status:"PENDING",phase:"ITERATION_PENDING",inputJson:s,requiredPathsJson:JSON.stringify(Ar(t)),providedPathsJson:JSON.stringify(Ai(t)),idempotencyKey:`${A.id}:${t.id}:${e.generation}:${n}:0`}))})})})}async startSubworkflow(A,e,t,r){let i="string"==typeof t.config.versionId?t.config.versionId:null;if(!i)throw Error("Sub-workflow version is required");let n=await (0,o.U)(),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=A,l=0;for(;s;){if(s.workflowId===a.workflowId)throw Error("Recursive sub-workflow invocation is not allowed");if((l+=1)>=10)throw Error("Sub-workflow depth is limited to 10");s=s.parentRunId?await n.workflowRun.findUnique({where:{id:s.parentRunId}}):null}let c={};if(t.config.inputMapping&&"object"==typeof t.config.inputMapping)for(let[A,e]of Object.entries(t.config.inputMapping))c=(0,C.H)(c,A,(0,C.S)(e,r));let d=await this.createRunForTrigger({...a.workflow,activeVersion:a},a,null,null,"SUBWORKFLOW",A.id,{sessionData:c,parentRunId:A.id},`${e.id}:subworkflow:${a.id}`,A.id);return At(d.id),{output:{childRunId:d.id},links:[{kind:"WORKFLOW_RUN",resourceId:d.id,label:`Workflow run #${d.displayNumber}`,url:`/dashboard/workflows/runs/${d.id}`}],wait:{kind:"WORKFLOW_RUN",externalKey:d.id,resumeAfter:(0,E.P)(t.config),timeoutAt:(0,E.I)(t.config)}}}async createHumanQuestion(A,e,t){let r=Array.isArray(t.config.questions)?t.config.questions:[{header:t.name??null,prompt:"string"==typeof t.config.prompt?t.config.prompt:"HUMAN_CONFIRM"===t.kind?"Continue this workflow?":"Choose an option",multiSelect:!!t.config.multiSelect,allowCustom:"HUMAN_CONFIRM"!==t.kind&&!1!==t.config.allowCustom,options:"HUMAN_CONFIRM"===t.kind?[{label:"Confirm",description:null},{label:"Cancel",description:null}]:Array.isArray(t.config.options)?t.config.options:[]}];if(!r.length||r.length>10)throw Error("Workflow questions must contain between one and ten questions");let i=await (0,o.U)(),n=(0,a.randomUUID)();return await i.runQuestionBatch.create({data:{id:n,workflowStepAttemptId:e.id,nativeRequestId:`workflow:${e.id}`,questions:{create:r.map((A,e)=>{let t=AA(A,"Workflow question"),r=Array.isArray(t.options)?t.options:[];return{id:(0,a.randomUUID)(),position:e,header:"string"==typeof t.header?t.header:null,prompt:Y(String(t.prompt??""),"Question prompt",1e4),multiSelect:!!t.multiSelect,allowCustom:!1!==t.allowCustom,options:{create:r.map((A,e)=>{let t=AA(A,"Question option");return{id:(0,a.randomUUID)(),position:e,label:Y(String(t.label??""),"Option label",500),description:"string"==typeof t.description?t.description.slice(0,2e3):null}})}}})}}}),y._H.publish(H(A.id),{workflowQuestionChanged:{id:n,runId:A.id}}),{output:{questionBatchId:n},wait:{kind:"HUMAN",externalKey:n,timeoutAt:(0,E.I)(t.config)}}}async parkAttempt(A,e,t){let r=t.wait;if(!r)throw Error("Workflow wait is missing");let i=await (0,o.U)(),n=(0,a.randomUUID)();if(await i.$transaction(async i=>{let s=await i.workflowRun.findUnique({where:{id:A.runId}});if(!s||T.has(s.status))return!1;let o=(0,C.h)(s.sessionDataJson??"{}"),l=!A.iterationKey&&("SAVED_COMMAND"===e.kind||"CUSTOM_COMMAND"===e.kind);l&&t.sessionPatch&&(o=(0,C.d)(o,t.sessionPatch)),G(s,o);let c=JSON.stringify(o);return X(c,"Workflow session data",2097152),!!(await i.workflowStepAttempt.updateMany({where:{id:A.id,status:"RUNNING"},data:{status:"WAITING",phase:r.kind,outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:l?void 0:t.sessionPatch}),claimOwner:null,claimExpiresAt:null}})).count&&(await i.workflowWait.create({data:{id:n,runId:A.runId,attemptId:A.id,kind:r.kind,predicateJson:r.predicate?JSON.stringify(r.predicate):null,externalKey:r.externalKey??null,resumeAfter:r.resumeAfter??null,timeoutAt:r.timeoutAt??null}}),t.links?.length&&await i.workflowRunResourceLink.createMany({data:t.links.map(e=>({id:(0,a.randomUUID)(),runId:A.runId,attemptId:A.id,kind:e.kind.toUpperCase(),resourceId:e.resourceId,label:e.label??null,url:e.url??null,metadataJson:e.metadata?JSON.stringify(e.metadata):null}))}),await i.workflowRun.updateMany({where:{id:A.runId,status:{in:[...J]}},data:{status:"WAITING",phase:r.kind,sessionDataJson:c,sessionRevision:{increment:1}}}),await i.workflowResourceLease.deleteMany({where:{attemptId:A.id}}),!0)})){let t,i;await this.appendEvent(A.runId,A.id,"STEP_WAITING",(t=e.name??e.id,i=(0,E.D)(r.kind),"DELAY"===r.kind&&r.resumeAfter?`Step ${t} is waiting for ${i} until ${r.resumeAfter.toISOString()}`:`Step ${t} is waiting for ${i}`),{waitId:n,kind:r.kind,nodeId:e.id,externalKey:r.externalKey??null,resumeAfter:r.resumeAfter?.toISOString()??null,timeoutAt:r.timeoutAt?.toISOString()??null}),At(A.runId)}}async completeAttempt(A,e,t,r){let i=await (0,o.U)();if(await i.$transaction(async r=>{let i=await r.workflowRun.findUnique({where:{id:A.runId}});if(!i)throw Error("Workflow run disappeared");if(T.has(i.status))return!1;let n=(0,C.h)(i.sessionDataJson);if(A.iterationKey)n=(0,C.H)(n,`steps.${e.id}.iterations.${A.iterationKey.replaceAll(".","_")}`,{status:"SUCCEEDED",output:t.output??null,data:t.sessionPatch??null});else{t.sessionPatch&&(n=(0,C.d)(n,t.sessionPatch));let A=`steps.${e.id}`,r=_((0,C.x)(n,A));n=(0,C.H)(n,A,{...r,status:"SUCCEEDED",output:t.output??null,snapshotId:t.links?.find(({kind:A})=>"CHECKPOINT"===A)?.resourceId??null})}G(i,n);let s=JSON.stringify(n);return X(s,"Workflow session data",2097152),!!(await r.workflowStepAttempt.updateMany({where:{id:A.id,status:{in:["RUNNING","WAITING"]}},data:{status:"SUCCEEDED",phase:"SUCCEEDED",outputJson:JSON.stringify({value:t.output,selectedHandles:t.selectedHandles,sessionPatch:t.sessionPatch}),error:null,finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(t.links?.length&&await r.workflowRunResourceLink.createMany({data:t.links.map(e=>({id:(0,a.randomUUID)(),runId:A.runId,attemptId:A.id,kind:e.kind.toUpperCase(),resourceId:e.resourceId,label:e.label??null,url:e.url??null,metadataJson:e.metadata?JSON.stringify(e.metadata):null}))}),await r.workflowRun.update({where:{id:A.runId},data:{sessionDataJson:s,sessionRevision:{increment:1}}}),await r.workflowRun.updateMany({where:{id:A.runId,status:{in:[...J]}},data:{status:"RUNNING",phase:"SCHEDULING"}}),await r.workflowResourceLease.deleteMany({where:{attemptId:A.id}}),!0)})){if(r)try{await r()}catch(e){console.error(`Failed to append completion diagnostics for workflow attempt ${A.id}:`,e)}await this.appendEvent(A.runId,A.id,"STEP_SUCCEEDED",`Step ${e.name??e.id} completed`),At(A.runId)}}async failAttempt(A,e,t,r={}){let i=await (0,o.U)(),n=e??(await i.workflowRun.findUnique({where:{id:A.runId},include:{version:!0}}))?.version.definitionJson,s="string"==typeof n?(0,c.d)(L(n)).nodes.find(({id:e})=>e===A.nodeId)??null:n,l=s?.retry,d=!!(l&&A.attempt+1<l.maxAttempts),u=l?Math.min(86400,"EXPONENTIAL"===l.strategy?l.delaySeconds*2**A.attempt:l.delaySeconds):0;await i.$transaction(async e=>{let i=await e.workflowRun.findUnique({where:{id:A.runId}});if(!i||T.has(i.status))return!1;let n=(0,C.h)(i.sessionDataJson);if(!A.iterationKey){r.sessionPatch&&(n=(0,C.d)(n,r.sessionPatch));let e=`steps.${A.nodeId}`,i=_((0,C.x)(n,e));n=(0,C.H)(n,e,{...i,status:"FAILED",error:t.message,...void 0!==r.output?{output:r.output}:{}})}G(i,n);let s=JSON.stringify(n);return X(s,"Workflow session data",2097152),!!(await e.workflowStepAttempt.updateMany({where:{id:A.id,status:{in:["RUNNING","WAITING"]}},data:{status:"FAILED",phase:d?"RETRY_SCHEDULED":"FAILED",error:t.message.slice(0,2e4),finishedAt:new Date,claimOwner:null,claimExpiresAt:null}})).count&&(d&&await e.workflowWait.create({data:{id:(0,a.randomUUID)(),runId:A.runId,attemptId:A.id,kind:"RETRY",resumeAfter:new Date(Date.now()+1e3*u)}}),await e.workflowRun.update({where:{id:A.runId},data:{sessionDataJson:s,sessionRevision:{increment:1}}}),await e.workflowRun.updateMany({where:{id:A.runId,status:{in:[...J]}},data:{status:d?"WAITING":"RUNNING",phase:d?"RETRY_WAIT":"SCHEDULING"}}),await e.workflowResourceLease.deleteMany({where:{attemptId:A.id}}),!0)})&&(await this.appendEvent(A.runId,A.id,d?"STEP_RETRY_SCHEDULED":"STEP_FAILED",d?`Step failed and will retry in ${u} seconds`:`Step failed: ${t.message}`,{error:t.message,retry:d}),At(A.runId))}async resolveDueWaits(){let A=await (0,o.U)(),e=new Date,t=(e,t)=>A.workflowWait.updateMany({where:{id:e,status:"PENDING",run:{status:{in:[...J]}}},data:t});for(let r of(await A.workflowWait.findMany({where:{status:"PENDING",run:{status:{in:[...J]}},OR:[{resumeAfter:{lte:e}},{timeoutAt:{lte:e}}]},include:{attempt:{include:{run:{include:{version:!0}}}}},orderBy:{createdAt:"asc"},take:100}))){if(r.timeoutAt&&r.timeoutAt<=e&&"RETRY"!==r.kind&&"DELAY"!==r.kind){if(!(await t(r.id,{status:"TIMED_OUT",resolvedAt:e})).count)continue;await this.failAttempt(r.attempt,(0,c.d)(L(r.attempt.run.version.definitionJson)).nodes.find(({id:A})=>A===r.attempt.nodeId)??null,Error("Workflow wait timed out"));continue}if("RETRY"===r.kind){let t=r.attempt.attempt+1;await A.$transaction(async A=>{if(!(await A.workflowWait.updateMany({where:{id:r.id,status:"PENDING",run:{status:{in:[...J]}}},data:{status:"RESOLVED",resolvedAt:e}})).count)return!1;if(await A.workflowStepAttempt.create({data:{id:(0,a.randomUUID)(),runId:r.runId,nodeId:r.attempt.nodeId,kind:r.attempt.kind,generation:r.attempt.generation,iterationKey:r.attempt.iterationKey,attempt:t,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}:${t}`,replayedFromId:r.attempt.id}}),!(await A.workflowRun.updateMany({where:{id:r.runId,status:{in:[...J]}},data:{status:"RUNNING",phase:"SCHEDULING"}})).count)throw Error("Workflow lifecycle changed while resuming retry");return!0})&&At(r.runId)}else if("DELAY"===r.kind){if(!(await t(r.id,{status:"RESOLVED",resolvedAt:e})).count)continue;await this.completeWaitingAttempt(r.attemptId,{delayed:!0},"TIMER")}else if("PREDICATE"===r.kind){let A=r.predicateJson?AA(L(r.predicateJson),"Wait predicate"):{},i=A.condition,n=(0,C.h)(r.attempt.run.sessionDataJson);if(i&&I(i,n)){if(!(await t(r.id,{status:"RESOLVED",resultJson:JSON.stringify({matched:!0}),resolvedAt:e})).count)continue;await this.completeWaitingAttempt(r.attemptId,{matched:!0},"POLL")}else{let e=Math.max(1,Number(A.cadenceSeconds??15));await t(r.id,{resumeAfter:new Date(Date.now()+1e3*e)})}}else if(r.externalKey&&this.waitPollers.has(r.kind)){let A=await this.waitPollers.get(r.kind)(r.externalKey);if("COMMAND_RUN"!==r.kind||A.pending||await this.reconcileCommandOutputMatches(r.externalKey),A.pending){let e=(0,c.d)(L(r.attempt.run.version.definitionJson)).nodes.find(({id:A})=>A===r.attempt.nodeId)?.config??{};await t(r.id,{resumeAfter:new Date(Date.now()+1e3*(0,E.G)(e,A.pollAfterSeconds??15))})}else{if(!(await t(r.id,{status:A.error?"FAILED":"RESOLVED",resultJson:JSON.stringify(A.result??{}),resolvedAt:new Date})).count)continue;if(A.error){let e=(0,c.d)(L(r.attempt.run.version.definitionJson)).nodes.find(({id:A})=>A===r.attempt.nodeId),t=this.attemptOutput(r.attempt),i=_(A.result),n=i.sessionPatch&&"object"==typeof i.sessionPatch&&!Array.isArray(i.sessionPatch)?(0,C.d)(t.sessionPatch??{},i.sessionPatch):t.sessionPatch;await this.failAttempt(r.attempt,e??null,Error(A.error),{output:A.result??t.value,sessionPatch:n})}else await this.completeWaitingAttempt(r.attemptId,A.result??{},"POLL")}}}}async completeWaitingAttempt(A,e,t="PUSH"){let r=await (0,o.U)(),i=await r.workflowStepAttempt.findUnique({where:{id:A},include:{run:{include:{version:!0}}}});if(!i||"WAITING"!==i.status)return;let n=(0,c.d)(L(i.run.version.definitionJson)).nodes.find(({id:A})=>A===i.nodeId);if(!n)throw Error("Workflow step definition is missing");let a=this.attemptOutput(i),s=a.sessionPatch;if("TERMINAL_RUN"===n.kind&&e&&"object"==typeof e&&!Array.isArray(e)&&e.sessionData&&"object"==typeof e.sessionData&&!Array.isArray(e.sessionData)){let A=structuredClone(e.sessionData),t=(0,C.x)((0,C.h)(i.run.sessionDataJson),"workflow");s=t?(0,C.H)(A,"workflow",t):A}e&&"object"==typeof e&&!Array.isArray(e)&&e.sessionPatch&&"object"==typeof e.sessionPatch&&!Array.isArray(e.sessionPatch)&&(s=(0,C.d)(s??{},e.sessionPatch)),n.kind.startsWith("RUN_")&&e&&"object"==typeof e&&!Array.isArray(e)&&(s=(0,C.d)(s??{},(0,C.H)({},`run.${n.id}`,e))),"BUILD_START"===n.kind&&e&&"object"==typeof e&&!Array.isArray(e)&&(s=(0,C.d)(s??{},(0,C.H)({},"build",e))),"WORKTREE_WAIT_PUSH_READY"===n.kind&&e&&"object"==typeof e&&!Array.isArray(e)&&(s=(0,C.d)(s??{},(0,C.H)({},"worktree",{id:e.id,pushStatus:e.pushStatus}))),"SKILL_APPLY"===n.kind&&e&&"object"==typeof e&&!Array.isArray(e)&&(s=(0,C.d)(s??{},(0,C.H)({},`steps.${n.id}`,e))),("HUMAN_CONFIRM"===n.kind||"HUMAN_CHOICE"===n.kind)&&(s=(0,C.d)(s??{},(0,C.H)({},`steps.${n.id}.answer`,e)));try{await this.completeAttempt(i,n,{output:e??a.value,selectedHandles:a.selectedHandles,sessionPatch:s},()=>this.appendWaitResolvedEvent(i,n,t))}catch(A){await this.failAttempt(i,n,A instanceof Error?A:Error(String(A)))}}async resolveExternalWait(A,e,t,r=null){let i=await (0,o.U)(),n=await i.workflowWait.findMany({where:{kind:A,externalKey:e,status:"PENDING"},include:{attempt:{include:{run:{include:{version:!0}}}}}});for(let A of n)if(await i.workflowWait.update({where:{id:A.id},data:{status:r?"FAILED":"RESOLVED",resultJson:JSON.stringify(t),resolvedAt:new Date}}),r){let e=(0,c.d)(L(A.attempt.run.version.definitionJson)).nodes.find(({id:e})=>e===A.attempt.nodeId);await this.failAttempt(A.attempt,e??null,Error(r))}else await this.completeWaitingAttempt(A.attemptId,t,"PUSH");return n.length}descendants(A,e){let t=new Map;for(let e of A.edges)t.set(e.source,[...t.get(e.source)??[],e.target]);let r=new Set([e]),i=[e];for(;i.length;){let A=i.shift();for(let e of t.get(A)??[])r.has(e)||(r.add(e),i.push(e))}return[...r]}async prepareReplay(A,e){let t=await (0,o.U)(),r=await t.workflowRun.findUnique({where:{id:A},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=(0,c.d)(L(r.version.definitionJson));if(!i.nodes.some(({id:A})=>A===e))throw Error("Workflow step not found");let n=this.descendants(i,e),a=r.attempts.filter(({generation:A,nodeId:e})=>A===r.generation&&n.includes(e)),s=a.filter(A=>A.nodeId===e).sort((A,e)=>e.attempt-A.attempt)[0],l=s?.checkpoints.slice().sort((A,e)=>A.createdAt.getTime()-e.createdAt.getTime())[0],d=a.flatMap(A=>A.resourceLinks.filter(({kind:A})=>"CHECKPOINT"!==A).map(({kind:A,resourceId:e,label:t,url:r})=>({kind:A,resourceId:e,label:t,url:r}))),u=null,g=null;if(l&&this.agentControl)try{u=await this.compareCheckpointWithAgent(l.id)}catch(A){g=`Git comparison unavailable: ${A instanceof Error?A.message:String(A)}`}return{runId:A,nodeId:e,affectedNodeIds:n,affectedAttemptIds:a.map(({id:A})=>A),externalEffects:d,checkpointId:l?.id??null,gitComparison:u,warning:[d.length?"External Jira, GitHub, build, deployment, and notification effects will not be undone.":null,g].filter(Boolean).join(" ")||null}}async replay(A,e,t={}){let r=await this.prepareReplay(A,e);if(t.restore){if(!r.checkpointId)throw Error("No restorable Git checkpoint is available for this step");this.checkpointRestorer?await this.checkpointRestorer(r.checkpointId,{stash:!!t.stash}):await this.restoreCheckpointWithAgent(r.checkpointId,{stash:!!t.stash})}let i=await (0,o.U)(),n=await i.workflowRun.findUnique({where:{id:A},include:{version:!0,attempts:!0}});if(!n)throw Error("Workflow run not found");let s=(0,c.d)(L(n.version.definitionJson)),l=n.attempts.filter(A=>A.generation===n.generation&&A.nodeId===e).sort((A,e)=>e.attempt-A.attempt)[0];if(!l)throw Error("Selected step has no execution history");let d=l.inputJson?AA(L(l.inputJson),"Step input snapshot"):(0,C.h)(n.sessionDataJson),u=n.generation+1,g=new Map;for(let A of n.attempts.filter(({generation:A,iterationKey:e})=>A===n.generation&&!e)){let e=g.get(A.nodeId);(!e||e.attempt<A.attempt)&&g.set(A.nodeId,A)}let h=(0,C.H)(d,"workflow.replay",{generation:u,fromNodeId:e,replayedAt:new Date().toISOString()});return G(n,h),await i.$transaction(async e=>{await e.workflowStepAttempt.updateMany({where:{runId:A,generation:n.generation,nodeId:{in:r.affectedNodeIds},supersededAt:null},data:{supersededAt:new Date}}),await e.workflowStepAttempt.createMany({data:s.nodes.map(e=>{let t=r.affectedNodeIds.includes(e.id),i=g.get(e.id);return{id:(0,a.randomUUID)(),runId:A,nodeId:e.id,kind:e.kind,generation:u,iterationKey:"",attempt:0,status:t?"PENDING":i?.status==="SKIPPED"?"SKIPPED":"SUCCEEDED",phase:t?"REPLAY_PENDING":"REUSED_FROM_PRIOR_GENERATION",inputJson:t?null:i?.inputJson,outputJson:t?null:i?.outputJson,error:null,startedAt:t?null:i?.startedAt,finishedAt:t?null:new Date,requiredPathsJson:JSON.stringify(Ar(e)),providedPathsJson:JSON.stringify(Ai(e)),idempotencyKey:`${A}:${e.id}:${u}::0`,replayedFromId:i?.id??null}})}),await e.workflowWait.updateMany({where:{runId:A,status:"PENDING"},data:{status:"SUPERSEDED",resolvedAt:new Date}}),await e.workflowRun.update({where:{id:A},data:{generation:u,sessionDataJson:JSON.stringify(h),sessionRevision:{increment:1},status:n.worktreeId?"QUEUED":"RUNNING",phase:n.worktreeId?"WAITING_FOR_WORKTREE":"REPLAYING",queuedAt:n.worktreeId?new Date:n.queuedAt,blockedReason:null,error:null,pausedAt:null,finishedAt:null}})}),await this.appendEvent(A,null,"RUN_REPLAYED",`Replaying from step ${e}`,{generation:u,affectedNodeIds:r.affectedNodeIds}),n.worktreeId&&await this.startQueuedRuns(),At(A),this.run(A)}async appendWaitResolvedEvent(A,e,t){let r=await (0,o.U)(),i=await r.workflowWait.findFirst({where:{attemptId:A.id},orderBy:{createdAt:"desc"}});if(!i)return;let n=Math.max(0,(i.resolvedAt??new Date).getTime()-i.createdAt.getTime());await this.appendEvent(A.runId,A.id,"STEP_WAIT_RESOLVED",`Step ${e.name??e.id} resumed after waiting ${(0,E.h)(n)} for ${(0,E.D)(i.kind)}`,{waitId:i.id,kind:i.kind,nodeId:e.id,externalKey:i.externalKey,waitedMs:n,resolvedBy:t})}async appendEvent(A,e,t,r,i=null){let n=await (0,o.U)(),s=await n.$transaction(async n=>{let s=await n.workflowRunEvent.findFirst({where:{runId:A},orderBy:{sequence:"desc"},select:{sequence:!0}});return n.workflowRunEvent.create({data:{id:(0,a.randomUUID)(),runId:A,attemptId:e,sequence:(s?.sequence??-1)+1,type:t,message:r.slice(0,2e4),detailJson:i?JSON.stringify(i):null}})});return y._H.publish(N(A),{workflowRunEventAdded:s}),s}subscribeChanges(A={}){let t=y._H.iterate(M);return(0,n.G)(t,async({workflowChanged:t})=>{if("runs"!==t.id)return!A.workflowId||t.id===A.workflowId;if(!t.runId||!A.workflowId&&!A.resourceId)return!0;let r=await (0,o.U)(),i=await r.workflowRun.findUnique({where:{id:t.runId},select:{worktreeId:!0,workflowId:!0,...A.resourceId?{resourceLinks:{where:{kind:A.resourceKind?.trim().toUpperCase(),resourceId:A.resourceId.trim()},select:{id:!0},take:1}}:{}}});return!i||(!A.workflowId||i.workflowId===A.workflowId||!!(A.includeQueuePeers&&await (0,e.f)(A.workflowId,i.worktreeId)))&&(!A.resourceId||!!i.resourceLinks?.length)})}subscribeWorkflows(){return y._H.iterate(M)}subscribeRun(A){return y._H.iterate(O(A))}subscribeRunEvents(A){return y._H.iterate(N(A))}subscribeRunQuestions(A){return y._H.iterate(H(A))}}],90615)},741193,A=>{A.i(520962),A.i(374421),A.s([])},251063,A=>{var e=A.i(135475);function t(A){return A?JSON.parse(A):null}function r(A){return t(A)?.targets.flatMap(A=>A.result?[A.result]:[])??[]}async function i(A,i){if(!A?.branch)return null;let n=t(i),a=n?.sourceBranch===A.branch&&n.origin===A.codebase.repository.canonicalOrigin?n:null,s=a?.destinationBaseBranch??A.baseBranchOverride??A.codebase.defaultBranch??null,o=!1;try{let e=JSON.parse(A.codebase.remoteBranchesJson??"[]");o=Array.isArray(e)&&e.includes(s)}catch{}let l=await (0,e.U)(),c=await l.worktree.findMany({where:{id:{not:A.id},missingAt:null,codebase:{repository:{canonicalOrigin:A.codebase.repository.canonicalOrigin}},OR:[{baseBranchOverride:A.branch},{baseBranchOverride:null,codebase:{defaultBranch:A.branch}}]},include:{codebase:{include:{agent:!0}}},orderBy:[{folder:"asc"},{id:"asc"}]});return{destinationBaseBranch:s,worktrees:c.map(e=>({id:e.id,branch:e.branch,folder:e.folder,agentName:e.codebase.agent.name,baseBranch:e.baseBranchOverride??e.codebase.defaultBranch,canUpdate:!!(o&&s&&s!==A.branch&&s!==e.branch)})),selectedWorktreeIds:a?.targets.filter(e=>o&&s!==A.branch&&c.some(A=>A.id===e.id&&A.codebaseId===e.codebaseId&&A.branch===e.branch&&A.branch!==s)).map(A=>A.id)??[],results:r(i)}}async function n(A,t,r){if(!t?.worktreeIds.length)return null;let n=await (0,e.U)(),a=A?await n.worktree.findFirst({where:{id:A,missingAt:null},include:{codebase:{include:{repository:!0}}}}):null;if(!a?.branch)throw Error("A matching source worktree is required for base updates");let s=await i(a,r);if(!s?.destinationBaseBranch||s.destinationBaseBranch!==t.destinationBaseBranch)throw Error("The destination base branch changed; refresh merge options and try again");let o=[...new Set(t.worktreeIds)];if(o.some(A=>!s.worktrees.some(e=>e.id===A&&e.canUpdate)))throw Error("A selected worktree no longer targets this branch; refresh merge options and try again");let l=await n.worktree.findMany({where:{id:{in:o}},include:{codebase:{include:{repository:!0}}}});if(l.length!==o.length||l.some(A=>A.missingAt||A.codebase.repository.canonicalOrigin!==a.codebase.repository.canonicalOrigin||(A.baseBranchOverride??A.codebase.defaultBranch)!==a.branch||A.branch===t.destinationBaseBranch))throw Error("A selected worktree changed; refresh merge options and try again");return JSON.stringify({origin:a.codebase.repository.canonicalOrigin,sourceBranch:a.branch,destinationBaseBranch:t.destinationBaseBranch,targets:l.map(A=>({id:A.id,codebaseId:A.codebaseId,branch:A.branch,baseBranch:a.branch,folder:A.folder}))})}async function a(A,r,i){let n=await (0,e.U)(),a=await n.$transaction(async e=>{let i="GITHUB"===A.provider?await e.worktreeAutoMerge.findUnique({where:{worktreeId:A.id}}):await e.gitLabMergeOperation.findUnique({where:{id:A.id}}),n=t(i?.baseBranchUpdatesJson);if(!n)return[];if(n.origin.toLowerCase()!==r.origin.toLowerCase()||n.sourceBranch!==r.branch)throw Error("The merged source does not match the reviewed base updates");let a=[];for(let A of n.targets){if(A.result)continue;let t=await e.worktree.findUnique({where:{id:A.id},include:{codebase:{include:{repository:!0}}}}),r=t?t.baseBranchOverride??t.codebase.defaultBranch:null,i=t&&!t.missingAt&&t.codebaseId===A.codebaseId&&t.branch===A.branch&&t.codebase.repository.canonicalOrigin===n.origin,s="SKIPPED",o="Worktree was removed or its repository, branch, or base changed";i&&r===n.destinationBaseBranch?(s="ALREADY_UPDATED",o=null):i&&r===A.baseBranch&&t.branch!==n.destinationBaseBranch&&(await e.worktree.update({where:{id:A.id},data:{baseBranchOverride:n.destinationBaseBranch}}),a.push({id:A.id,codebaseId:A.codebaseId}),s="UPDATED",o=null),A.result={worktreeId:A.id,folder:A.folder,status:s,reason:o}}let s={baseBranchUpdatesJson:JSON.stringify(n)};return"GITHUB"===A.provider?await e.worktreeAutoMerge.update({where:{worktreeId:A.id},data:s}):await e.gitLabMergeOperation.update({where:{id:A.id},data:s}),a});await Promise.all(a.map(A=>i.refreshBaseBranchWatch(A.id,A.codebaseId)))}A.s(["B",0,r,"V",0,a,"o",0,i,"f",0,n])},121e3,A=>{var e=A.i(666680),t=A.i(380592),r=A.i(135475),i=A.i(454228);let n=["COMPLETED","CANCELED"],a=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]),s=new Map;function o(A){let e=A instanceof Error?A.message:String(A),t=A?.statusCode??A?.status;return(0,i.D)(A)||/offline|busy|another operation|active job|temporar|fetch failed|ECONN|network|rate limit|timeout|timed out/i.test(e)||429===t||!!(t&&t>=500)}class l extends Error{}async function c(A,e){let t,r=s.get(A)??Promise.resolve(),i=new Promise(A=>{t=A});s.set(A,i),await r;try{return await e()}finally{t(),s.get(A)===i&&s.delete(A)}}function d(A){let e=JSON.parse(A??"null");if(!e||1!==e.version||!e.headSha||!e.sourceOrigin||!e.targetOrigin||!e.targetBranch||!e.agentId||!e.gitDirectory)throw Error("The saved branch sync is invalid. Review and enable Auto Merge again.");return e}async function u(A){return(await (0,r.U)()).worktree.findUnique({where:{id:A},include:{codebase:{include:{agent:!0,repository:!0}}}})}async function g(A){let e;if(!A)return"Link a matching worktree to automatically sync this branch.";let r=await u(A);if(!r||r.missingAt||"AVAILABLE"!==r.availability)return"The linked worktree is unavailable.";try{e=JSON.parse(r.codebase.agent.capabilitiesJson)}catch{e=[]}return Array.isArray(e)&&e.includes(t.f)?null:"Update the agent to use Auto Merge branch syncing."}async function h(A,e){let t=await (0,r.U)(),[i,a]=await Promise.all([e?.provider==="GITHUB"?null:t.worktreeAutoMerge.findFirst({where:{worktreeId:A,autoSync:!0,state:{notIn:n}}}),t.gitLabMergeOperation.findFirst({where:{worktreeId:A,autoSync:!0,state:{notIn:n},...e?.provider==="GITLAB"?{id:{not:e.id}}:{}}})]);return!!(i||a)}async function C(A,e,t){let i=await g(A);if(i)throw Error(i);if(await h(A,t))throw Error("Another Auto Merge operation owns this worktree.");let n=await (0,r.U)(),a=await n.worktreeAutoSync.findUnique({where:{worktreeId:A}});if(a?.activeJobId||a?.workflowRunId)throw Error("Wait for the active Auto Sync operation before enabling Auto Merge.");let s=await u(A);if(!s)throw Error("The linked worktree is unavailable.");if(s.branch!==e.sourceBranch||s.codebase.repository.canonicalOrigin.toLowerCase()!==e.sourceOrigin.toLowerCase()||s.headSha!==e.headSha)throw Error("The linked worktree does not match the reviewed source branch and commit. Refresh it before enabling Auto Merge.");if(s.hasConflicts||s.rebaseInProgress||s.hasStagedChanges||s.hasUnstagedChanges)throw Error("Resolve conflicts and stash or commit changes before enabling Auto Merge.");return JSON.stringify({version:1,sourceOrigin:e.sourceOrigin,sourceBranch:e.sourceBranch,headSha:e.headSha,targetOrigin:e.targetOrigin,targetUrl:e.targetUrl,targetBranch:e.targetBranch,syncedTargetSha:null,jobId:null,requestId:null,codebaseId:s.codebaseId,agentId:s.codebase.agentId,folder:s.folder,gitDirectory:s.gitDirectory})}async function p(A){return c(A.worktreeId,async()=>{let t=d(A.syncStateJson),i=A.state,n=async(e,r=null)=>{i=e,await A.save({state:i,syncStateJson:JSON.stringify(t),lastError:r,acceptedHeadSha:t.headSha})},s=A=>A.sourceOrigin===t.sourceOrigin&&A.sourceBranch===t.sourceBranch&&A.targetOrigin===t.targetOrigin&&A.targetBranch===t.targetBranch;try{let o=await A.readiness();if(!s(o))throw Error("The source repository, branch or merge target changed. Review it before resuming Auto Merge.");if("MERGED"===o.state){if(o.headSha!==t.headSha)throw Error("A different source commit was merged. Review the follow-ups manually.");return!0}if("OPEN"!==o.state)throw Error("The request closed without merging.");if(o.nativeAutoMerge)throw Error("Native Auto Merge was enabled separately. Cancel it before resuming branch syncing.");if("MERGING"===i)return Date.now()-A.updatedAt.getTime()>12e4&&await n("ACTION_REQUIRED","The provider has not confirmed the merge. Review its state before resuming."),!1;let l=await u(A.worktreeId);if(!l||l.missingAt||l.branch!==t.sourceBranch||l.codebaseId!==t.codebaseId||l.codebase.agentId!==t.agentId||l.folder!==t.folder||l.gitDirectory!==t.gitDirectory||l.codebase.repository.canonicalOrigin.toLowerCase()!==t.sourceOrigin.toLowerCase())throw Error("The linked worktree identity changed. Review it before resuming Auto Merge.");if(t.requestId){let e=await (0,r.U)(),i=t.jobId?await A.agents.getJob(t.jobId):await e.agentJob.findFirst({where:{agentId:t.agentId,idempotencyKey:`worktree:auto-sync:sync:${t.requestId}:${A.worktreeId}`}});if(!i){if(o.headSha!==t.headSha)throw Error("The source commit changed. Review it before resuming Auto Merge.");i=await A.worktrees.createAutoSyncJob(A.worktreeId,"SYNC",t.sourceBranch,t.requestId,!1,{codebaseId:t.codebaseId,agentId:t.agentId,folder:t.folder,gitDirectory:t.gitDirectory,expectedOrigin:t.sourceOrigin},{expectedHeadSha:t.headSha,targetUrl:t.targetUrl,targetBranch:t.targetBranch,targetSha:o.targetSha})}if(t.jobId=i.id,!a.has(i.status))return await n("SYNCING"),!1;if("SUCCEEDED"!==i.status)return await n("ACTION_REQUIRED",i.error||"Branch sync failed. Review the worktree before resuming."),!1;let l=JSON.parse(i.resultJson??"null");if(l?.outcome==="CONFLICT")throw Error("Resolve the rebase conflicts, finish and push the rebase, then resume Auto Merge.");if(l?.outcome==="PREPARATION_CONFLICT")throw Error("Repository preparations block the rebase. Resolve them before resuming Auto Merge.");if(!l||!["SYNCED","NO_CHANGE"].includes(l.outcome??"")||l.previousHeadSha!==t.headSha||!l.syncedHeadSha||!l.syncedTargetSha)throw Error("Branch sync did not return a verified source and target revision.");if(o=await A.readiness(),!s(o)||o.headSha!==l.syncedHeadSha)throw Error("The source commit changed after syncing. Review it before resuming Auto Merge.");t.headSha=l.syncedHeadSha,t.syncedTargetSha=l.syncedTargetSha,t.jobId=null,t.requestId=null,await n("WAITING_CI")}if(o.headSha!==t.headSha)throw Error("The source commit changed. Review it before resuming Auto Merge.");if(!t.requestId&&l.headSha!==t.headSha&&l.headSha!==d(A.syncStateJson).headSha)throw Error("The local source commit changed. Review it before resuming Auto Merge.");if(!t.requestId&&(l.hasConflicts||l.rebaseInProgress||l.hasStagedChanges||l.hasUnstagedChanges))throw Error("Resolve conflicts and stash or commit worktree changes before resuming Auto Merge.");if(o.blocker)throw Error(o.blocker);if(t.syncedTargetSha!==o.targetSha)return t.requestId=(0,e.randomUUID)(),await n("SYNCING"),!1;if(!o.ciPassed)return await n("WAITING_CI"),!1;if(!o.canMerge)return await n("WAITING_REQUIREMENTS"),!1;if(o=await A.readiness(),!s(o)||o.headSha!==t.headSha)throw Error("The source commit or merge target changed before merging.");if(o.targetSha!==t.syncedTargetSha)return t.requestId=(0,e.randomUUID)(),await n("SYNCING"),!1;if(o.blocker)throw Error(o.blocker);if(!o.ciPassed||!o.canMerge||o.nativeAutoMerge)return await n("WAITING_REQUIREMENTS"),!1;await n("MERGING"),await A.merge(t.headSha,t.syncedTargetSha);let c=await A.readiness();return"MERGED"===c.state&&s(c)&&c.headSha===t.headSha}catch(t){let A=t instanceof Error?t.message:String(t),e=o(t);return await n(t instanceof l?"WAITING_REQUIREMENTS":"MERGING"===i?"MERGING":e?i:"ACTION_REQUIRED",A),!1}})}async function I(A,e){let i=d(A),n=i.jobId?await e.getJob(i.jobId):i.requestId?await (await (0,r.U)()).agentJob.findFirst({where:{agentId:i.agentId,idempotencyKey:{contains:i.requestId},kind:t.d}}):null;n&&!a.has(n.status)&&await e.cancelJob(n.id)}A.s(["X",0,"Another operation is active for this codebase","S",0,["SYNCING","WAITING_CI","WAITING_REQUIREMENTS","MERGING"],"y",0,l,"C",0,p,"v",0,I,"D",0,o,"M",0,h,"e",0,g,"I",0,C,"N",0,d,"s",0,c])},133898,A=>{async function e(A,e){return e.moveTicketToDone&&e.ticketKey&&!e.ticketMovedAt?(await A.transitionTicketToConfiguredDone(e.ticketKey),new Date):e.ticketMovedAt}A.s(["T",0,e,"t",0,function(A,e,t="pull request"){if(A.deleteWorktree&&!e.canDeleteWorktree)throw Error("Only a linked, non-primary worktree can be deleted after merge");if(A.moveTicketToDone&&(!e.ticketKey||!e.ticketDoneStatusConfigured))throw Error(e.ticketKey?"Configure this Jira project's done status before enabling this option":`This ${t} is not linked to a Jira ticket`)}])},999585,A=>{var e=A.i(666680),t=A.i(750227);A.s(["H",0,0x1400000,"O",0,500,"b",0,function(A){let e=4*Math.ceil(0xa00000/3);if(A.length>e)throw Error("Each preparation upload must be 10 MiB or smaller");let t=Buffer.from(A,"base64");if(t.toString("base64")!==A)throw Error("Uploaded preparation contents are not valid base64");if(t.byteLength>0xa00000)throw Error("Each preparation upload must be 10 MiB or smaller");return t},"l",0,function(A){let e=A.trim(),r=e.split("/");if(!e||"."===e||e.startsWith("/")||/^[A-Za-z]:\//.test(e)||/[\\\0\r\n*?[\]]/.test(e)||r.some(A=>!A||"."===A||".."===A)||r.some(A=>".git"===A.toLowerCase())||t.posix.normalize(e)!==e)throw Error(`${A||"Path"} must be an exact repository-relative file path`);return e},"a",0,function(A){if(0===A.length)return"NOT_CONFIGURED";for(let e of["ERROR","DRIFTED","SUSPENDED","PENDING","UNDONE","UNKNOWN"])if(A.includes(e))return e;return A.every(A=>"NOT_APPLICABLE"===A)?"NOT_APPLICABLE":"APPLIED"},"B",0,function(A){return(0,e.createHash)("sha256").update(A).digest("hex")},"d",0,function(A){let t=(0,e.createHash)("sha256");return t.update(A.kind),t.update("\0"),t.update(A.path),t.update("\0"),A.contents&&t.update(A.contents),t.digest("hex")},"U",0,function(A){return{id:A.id,kind:A.kind,path:A.path,contentBase64:"WRITE"===A.kind&&A.contents?Buffer.from(A.contents).toString("base64"):null,definitionHash:A.definitionHash}}])},374421,A=>{var e=A.i(251063),t=A.i(666680),r=A.i(380592),i=A.i(864637),n=A.i(135475),a=A.i(454228),s=A.i(133898),o=A.i(121e3);let l="server:worktree-automations",c=new Set(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"]),d=new Set(["SUCCEEDED","FAILED","CANCELLED"]);function u(A){let[e,t,r]=A.split("/");if(!e||!t||r)throw Error("A GitHub repository must be in owner/name format");return{owner:e,name:t}}function g(A){if(!A)return null;try{let e=JSON.parse(A);if(!e||"object"!=typeof e||Array.isArray(e))return null;return"string"==typeof e.outcome?String(e.outcome):null}catch{return null}}function h(A){return{worktreeId:A.worktreeId,state:A.state,conflictWorkflowId:A.conflictWorkflowId,conflictWorkflowChoice:A.conflictWorkflowChoice,lastError:A.lastError,pauseReason:A.pauseReason,lastSyncedAt:A.lastSyncedAt?.toISOString()??null,updatedAt:A.updatedAt.toISOString()}}function C(A){return{...A,autoSync:A.autoSync??!1,mergeMethod:A.mergeMethod,baseBranchUpdateResults:(0,e.B)(A.baseBranchUpdatesJson),updatedAt:A.updatedAt.toISOString()}}A.s(["f",0,class{worktrees;github;jira;workflows;agentControl;polling;timer;running;rerunRequested;mergeOperationTail;async withMergeLock(A){let e,t=this.mergeOperationTail;this.mergeOperationTail=new Promise(A=>{e=A}),await t;try{return await A()}finally{e()}}constructor(A,e,t,r,i,n){this.worktrees=A,this.github=e,this.jira=t,this.workflows=r,this.agentControl=i,this.polling=n,this.timer=null,this.running=!1,this.rerunRequested=!1,this.mergeOperationTail=Promise.resolve(),this.agentControl.registerCompletionObserver(async A=>{A.codebaseId&&this.changed()}),this.agentControl.registerConnectionHandler(async()=>this.changed()),this.polling?.register({id:l,kind:"WORKTREE_AUTOMATION",runtime:"SERVER",enabled:!0,cadenceSeconds:60,details:{}})}startRuntime(){queueMicrotask(()=>void this.reconcile())}schedule(){this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>void this.reconcile(),6e4),this.timer.unref(),this.polling?.schedule(l,new Date(Date.now()+6e4))}changed(){if(this.running){this.rerunRequested=!0;return}this.timer&&clearTimeout(this.timer),this.timer=null,queueMicrotask(()=>void this.reconcile())}async stopAutoSyncWork(A){A?.activeJobId&&await this.agentControl.cancelJob(A.activeJobId).catch(()=>null),A?.workflowRunId&&await this.workflows.lifecycle(A.workflowRunId,"CANCEL").catch(()=>null)}async autoSync(A){let e=await (0,n.U)(),t=await e.worktreeAutoSync.findUnique({where:{worktreeId:A}});return t?h(t):null}async configureAutoSync(A){let e=await (0,n.U)(),t=await e.worktree.findFirst({where:{id:A.worktreeId,missingAt:null},select:{id:!0,branch:!0,codebaseId:!0,codebase:{select:{repositoryId:!0}}}});if(!t?.branch)throw Error("Auto Sync requires a branch");await this.stopAutoSyncWork(await e.worktreeAutoSync.findUnique({where:{worktreeId:t.id},select:{activeJobId:!0,workflowRunId:!0}}));let r=A.conflictWorkflowId?.trim()||null;if(r){let A=await e.workflow.findUnique({where:{id:r},select:{enabled:!0,archivedAt:!0,activeVersionId:!0,quickActionKind:!0,quickActionRepositories:{select:{repositoryId:!0}}}});if(!A?.enabled||A.archivedAt||!A.activeVersionId||"MERGE_CONFLICT"!==A.quickActionKind)throw Error("Select an enabled merge-conflict quick action workflow");if(A.quickActionRepositories.length>0&&!A.quickActionRepositories.some(({repositoryId:A})=>A===t.codebase.repositoryId))throw Error("The merge-conflict workflow is not available for this repository")}let i=await e.worktreeAutoSync.upsert({where:{worktreeId:t.id},create:{worktreeId:t.id,branch:t.branch,conflictWorkflowId:r,conflictWorkflowChoice:A.conflictWorkflowChoice?.trim()||null},update:{state:"ACTIVE",branch:t.branch,conflictWorkflowId:r,conflictWorkflowChoice:A.conflictWorkflowChoice?.trim()||null,activeJobId:null,workflowRunId:null,lastError:null,pauseReason:null}});return this.worktrees.publishAutomationChange(t.id,t.codebaseId),this.changed(),h(i)}async cancelAutoSync(A){let e=await (0,n.U)(),t=await e.worktreeAutoSync.findUnique({where:{worktreeId:A},select:{activeJobId:!0,workflowRunId:!0}});await this.stopAutoSyncWork(t);let r=await e.worktreeAutoSync.deleteMany({where:{worktreeId:A}});return this.worktrees.publishAutomationChange(A),r.count>0}async retryAutoSync(A){let e=await (0,n.U)(),t=await e.worktreeAutoSync.update({where:{worktreeId:A},data:{state:"ACTIVE",activeJobId:null,workflowRunId:null,lastError:null,pauseReason:null}});return this.worktrees.publishAutomationChange(A),this.changed(),h(t)}async autoMerge(A){let e=await (0,n.U)(),t=await e.worktreeAutoMerge.findUnique({where:{worktreeId:A}});return t?C(t):null}pullRequestState(A){let{owner:e,name:t}=u(A.repositoryNameWithOwner);return A.autoSync?this.github.pullRequestAutomationState(e,t,A.pullRequestNumber,!0):this.github.pullRequestAutomationState(e,t,A.pullRequestNumber)}async pullRequestMergeOptions(A,t,r,a,s){let l=await this.github.pullRequestMergeOptions(A,t,r,a),c=await (0,n.U)(),d=l.headRepositoryNameWithOwner?`github.com/${l.headRepositoryNameWithOwner.toLowerCase()}`:null,u=s||d?await c.worktree.findFirst({where:s?{id:s,missingAt:null}:{missingAt:null,branch:l.headRefName,codebase:{repository:{canonicalOrigin:d}}},orderBy:{updatedAt:"desc"},include:{autoMerge:!0,codebase:{include:{repository:!0}}}}):null;if(s&&!u)throw Error("The linked worktree is no longer available");if(u&&(!d||u.branch!==l.headRefName||u.codebase.repository.canonicalOrigin.toLowerCase()!==d))throw Error("The pull request head repository or branch does not match this worktree");let g=u?await this.worktrees.ticketKeyForWorktree(u.id):null,h=await this.github.getSettings(),p=(await c.gitHubRepository.findMany()).find(e=>e.nameWithOwner.toLowerCase()===`${A}/${t}`.toLowerCase()),I=(0,i.N)(l.defaultCommitHeadline,p?.jiraKeyRegex??h.defaultJiraKeyRegex),m=s&&"WORKTREE_AUTOMATION"===a?g:I??g,f=m?await c.jiraProject.findUnique({where:{key:m.split("-")[0]},select:{doneStatusId:!0}}):null,E=u?.autoMerge,w=E&&E.pullRequestNumber===r&&E.repositoryNameWithOwner.toLowerCase()===`${A}/${t}`.toLowerCase()?E:null,Q=await (0,o.e)(u?.id);return{...l,canAutoMergeWithSync:!Q&&!!l.canAutoMergeWithSync,autoSyncBlockedReason:Q,defaultAutoSync:w?.autoSync??!1,autoMergeOperation:w?.autoSync?C(w):null,baseBranchUpdateOptions:await (0,e.o)(u,w?.baseBranchUpdatesJson),defaultMethod:w&&l.availableMethods.includes(w.mergeMethod)?w.mergeMethod:l.defaultMethod,defaultCommitHeadline:w?.commitHeadline??l.defaultCommitHeadline,defaultCommitBody:w?.commitBody??l.defaultCommitBody,defaultCommitEmail:w?w.authorEmail:l.defaultCommitEmail,defaultMoveTicketToDone:w?.moveTicketToDone??l.defaultMoveTicketToDone,defaultDeleteWorktree:w?.deleteWorktree??l.defaultDeleteWorktree,worktreeId:u?.id??null,worktreeFolder:u?.folder??null,canDeleteWorktree:!!(u&&!u.primary),ticketKey:m,ticketDoneStatusConfigured:!!f?.doneStatusId}}async mergePullRequest(A,e){return this.withMergeLock(()=>this.mergePullRequestWithFollowUps(A,e))}async mergePullRequestWithFollowUps(A,t){let r=await this.pullRequestMergeOptions(A.owner,A.name,A.number,t,A.worktreeId);(0,s.t)(A,r);let i=A.baseBranchUpdate?.worktreeIds.length&&r.worktreeId?await (await (0,n.U)()).worktreeAutoMerge.findUnique({where:{worktreeId:r.worktreeId}}):null,a=await (0,e.f)(r.worktreeId,A.baseBranchUpdate,i?.pullRequestNumber===A.number&&i.repositoryNameWithOwner.toLowerCase()===`${A.owner}/${A.name}`.toLowerCase()?i.baseBranchUpdatesJson:null),o=await this.github.mergePullRequest(A,t);if("MERGED"!==o.state)return o;try{if(r.worktreeId){let e=await (0,n.U)(),t={state:A.moveTicketToDone||A.deleteWorktree||a?"POST_MERGE":"COMPLETED",repositoryNameWithOwner:`${A.owner}/${A.name}`,pullRequestNumber:A.number,branch:r.headRefName,baseBranchUpdatesJson:a,mergeMethod:A.method,commitHeadline:A.commitHeadline.trim(),commitBody:A.commitBody,authorEmail:A.authorEmail?.trim()||null,deleteWorktree:A.deleteWorktree??!1,moveTicketToDone:A.moveTicketToDone??!1,ticketKey:r.ticketKey,ticketMovedAt:null,deleteJobId:null,lastError:null};await e.worktreeAutoMerge.upsert({where:{worktreeId:r.worktreeId},create:{worktreeId:r.worktreeId,...t},update:t}),this.worktrees.publishAutomationChange(r.worktreeId),this.changed()}else A.moveTicketToDone&&r.ticketKey&&await this.jira.transitionTicketToConfiguredDone(r.ticketKey);return{...o,ticketKey:r.ticketKey,postMergeError:null}}catch(A){return{...o,ticketKey:r.ticketKey,postMergeError:A instanceof Error?A.message:String(A)}}}async configureAutoMerge(A){return this.withMergeLock(async()=>{let t=await (0,n.U)(),r=await t.worktree.findFirst({where:{id:A.worktreeId,missingAt:null},select:{id:!0,primary:!0,branch:!0,codebaseId:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}});if(!r?.branch)throw Error("Auto Merge requires a branch");if(A.deleteWorktree&&r.primary)throw Error("The primary worktree cannot be deleted after merge");let i=await t.worktreeAutoMerge.findUnique({where:{worktreeId:r.id}}),a=await this.worktrees.ticketKeyForWorktree(r.id);if(A.moveTicketToDone){if(!a)throw Error("This worktree is not linked to a Jira ticket");let A=await t.jiraProject.findUnique({where:{key:a.split("-")[0]??""},select:{doneStatusId:!0}});if(!A?.doneStatusId)throw Error("Configure this Jira project's done status before enabling this option")}let s=u(A.repositoryNameWithOwner),l=await this.github.pullRequestAutomationState(s.owner,s.name,A.pullRequestNumber);if(l.headRefName!==r.branch)throw Error("The pull request does not belong to this worktree branch");if(!l.headRepositoryNameWithOwner)throw Error("The pull request head repository is unavailable");if(r.codebase.repository.canonicalOrigin.toLowerCase()!==`github.com/${l.headRepositoryNameWithOwner.toLowerCase()}`)throw Error("The pull request head repository does not match this worktree");let c=await (0,e.f)(r.id,A.baseBranchUpdate,i?.pullRequestNumber===A.pullRequestNumber&&i.repositoryNameWithOwner.toLowerCase()===A.repositoryNameWithOwner.toLowerCase()?i.baseBranchUpdatesJson:null),d=!!(i&&(i.repositoryNameWithOwner.toLowerCase()!==A.repositoryNameWithOwner.toLowerCase()||i.pullRequestNumber!==A.pullRequestNumber));if(A.autoSync)return(0,o.s)(r.id,async()=>{if(i?.autoSync&&!d&&o.S.includes(i.state))return C(i);i?.autoSync&&await (0,o.v)(i.syncStateJson,this.agentControl);let e=await this.github.managedMergeReadiness(s.owner,s.name,A.pullRequestNumber);if(!A.expectedHeadSha||e.headSha!==A.expectedHeadSha)throw Error("The source commit changed. Refresh and review it before enabling Auto Merge.");if("OPEN"!==e.state||e.blocker)throw Error(e.blocker??"Only open pull requests can use Auto Merge.");if(!(await this.github.pullRequestMergeOptions(s.owner,s.name,A.pullRequestNumber,"WORKTREE_AUTOMATION")).availableMethods.includes(A.method))throw Error("The selected merge method is not available.");if(!A.commitHeadline.trim())throw Error("A commit message is required");let n={autoSync:!0,syncStateJson:await (0,o.I)(r.id,e,{provider:"GITHUB",id:r.id}),state:"SYNCING",repositoryNameWithOwner:A.repositoryNameWithOwner,pullRequestNumber:A.pullRequestNumber,branch:r.branch,mergeMethod:A.method,commitHeadline:A.commitHeadline.trim(),commitBody:A.commitBody,authorEmail:A.authorEmail?.trim()||null,baseBranchUpdatesJson:c,deleteWorktree:A.deleteWorktree,moveTicketToDone:A.moveTicketToDone,ticketKey:a,ticketMovedAt:null,deleteJobId:null,lastError:null},l=await t.worktreeAutoMerge.upsert({where:{worktreeId:r.id},create:{worktreeId:r.id,...n},update:n});try{d&&i&&await this.github.disablePullRequestAutoMerge({...u(i.repositoryNameWithOwner),number:i.pullRequestNumber},"WORKTREE_AUTOMATION"),e.nativeAutoMerge&&await this.github.disablePullRequestAutoMerge({...s,number:A.pullRequestNumber},"WORKTREE_AUTOMATION")}catch(A){throw await t.worktreeAutoMerge.update({where:{worktreeId:r.id},data:{state:"ACTION_REQUIRED",lastError:String(A)}}),this.worktrees.publishAutomationChange(r.id,r.codebaseId),A}return this.worktrees.publishAutomationChange(r.id,r.codebaseId),this.changed(),C(l)});i?.autoSync&&await (0,o.v)(i.syncStateJson,this.agentControl);let g=!1,h=!1;try{if(i&&d){let A=u(i.repositoryNameWithOwner),e=await this.github.pullRequestAutomationState(A.owner,A.name,i.pullRequestNumber);"OPEN"===e.state&&e.autoMergeEnabled&&(await this.github.disablePullRequestAutoMerge({...A,number:i.pullRequestNumber},"WORKTREE_AUTOMATION"),g=!0)}h=!0,await this.github.enablePullRequestAutoMerge({...s,number:A.pullRequestNumber,method:A.method,commitHeadline:A.commitHeadline,commitBody:A.commitBody,authorEmail:A.authorEmail},"WORKTREE_AUTOMATION");let e=await t.worktreeAutoMerge.upsert({where:{worktreeId:r.id},create:{worktreeId:r.id,autoSync:!1,repositoryNameWithOwner:A.repositoryNameWithOwner,pullRequestNumber:A.pullRequestNumber,branch:r.branch,mergeMethod:A.method,commitHeadline:A.commitHeadline.trim(),commitBody:A.commitBody,authorEmail:A.authorEmail?.trim()||null,baseBranchUpdatesJson:c,deleteWorktree:A.deleteWorktree,moveTicketToDone:A.moveTicketToDone,ticketKey:a},update:{state:"ACTIVE",autoSync:!1,syncStateJson:null,repositoryNameWithOwner:A.repositoryNameWithOwner,pullRequestNumber:A.pullRequestNumber,branch:r.branch,mergeMethod:A.method,commitHeadline:A.commitHeadline.trim(),commitBody:A.commitBody,authorEmail:A.authorEmail?.trim()||null,baseBranchUpdatesJson:c,deleteWorktree:A.deleteWorktree,moveTicketToDone:A.moveTicketToDone,ticketKey:a,ticketMovedAt:null,deleteJobId:null,lastError:null}});return this.worktrees.publishAutomationChange(r.id,r.codebaseId),this.changed(),C(e)}catch(e){if(h&&await this.github.disablePullRequestAutoMerge({...s,number:A.pullRequestNumber},"WORKTREE_AUTOMATION").catch(()=>null),i&&(g||!d)){let A=u(i.repositoryNameWithOwner);await this.github.enablePullRequestAutoMerge({...A,number:i.pullRequestNumber,method:i.mergeMethod,commitHeadline:i.commitHeadline,commitBody:i.commitBody,authorEmail:i.authorEmail},"WORKTREE_AUTOMATION").catch(()=>null)}throw e}})}async forceAutoSync(A,e){if(!e.trim())throw Error("requestId is required");let t=await (0,n.U)(),r=await t.worktreeAutoSync.findUnique({where:{worktreeId:A}});if(!r||"PAUSED"!==r.state||"PREPARATION_CONFLICT"!==r.pauseReason)throw Error("Auto Sync is not paused for a preparation conflict");let i=await this.worktrees.createAutoSyncJob(A,"SYNC",r.branch,e,!0);return await t.worktreeAutoSync.update({where:{worktreeId:A},data:{state:"SYNCING",activeJobId:i.id,workflowRunId:null,lastError:null,pauseReason:null}}),this.worktrees.publishAutomationChange(A),this.changed(),i}async cancelAutoMerge(A){return this.withMergeLock(async()=>{let e=await (0,n.U)(),t=await e.worktreeAutoMerge.findUnique({where:{worktreeId:A}}),r=t?await e.worktree.findUnique({where:{id:A},include:{pullRequest:!0,codebase:{include:{repository:!0}}}}):null;if(t&&!r)return!1;let i=r?.pullRequest,a=t&&(r?.branch!==t.branch||i&&(i.number!==t.pullRequestNumber||i.repositoryNameWithOwner.toLowerCase()!==t.repositoryNameWithOwner.toLowerCase()));if(!t||a){let e=await this.worktrees.refreshPullRequest(A),t=e.pullRequest;if(!t||!e.branch)return!1;let r=u(t.repositoryNameWithOwner),i=await this.github.pullRequestAutomationState(r.owner,r.name,t.number,!0);if(i.headRefName!==e.branch||!i.headRepositoryNameWithOwner||`github.com/${i.headRepositoryNameWithOwner.toLowerCase()}`!==e.codebase.repository.canonicalOrigin.toLowerCase())throw Error("The pull request does not match this worktree");return"OPEN"===i.state&&!!i.autoMergeEnabled&&(await this.github.disablePullRequestAutoMerge({...r,number:t.number},"WORKTREE_AUTOMATION"),await this.worktrees.refreshPullRequest(A),this.worktrees.publishAutomationChange(A,e.codebaseId),!0)}let s=u(t.repositoryNameWithOwner),l=await this.github.pullRequestAutomationState(s.owner,s.name,t.pullRequestNumber,!0);if(l.headRefName!==r.branch||!l.headRepositoryNameWithOwner||`github.com/${l.headRepositoryNameWithOwner.toLowerCase()}`!==r.codebase.repository.canonicalOrigin.toLowerCase())throw Error("The pull request does not match this worktree");if(t.autoSync&&await (0,o.v)(t.syncStateJson,this.agentControl),"OPEN"===l.state&&l.autoMergeEnabled&&await this.github.disablePullRequestAutoMerge({...s,number:t.pullRequestNumber},"WORKTREE_AUTOMATION"),t.autoSync&&"MERGED"===l.state){let r=(0,o.N)(t.syncStateJson);if(l.headRefOid!==r.headSha||l.headRefName!==r.sourceBranch||`github.com/${l.headRepositoryNameWithOwner?.toLowerCase()}`!==r.sourceOrigin.toLowerCase())throw Error("A different source commit merged. Review follow-ups manually.");await e.worktreeAutoMerge.update({where:{worktreeId:A},data:{state:"POST_MERGE",lastError:null}}),this.changed()}else await e.worktreeAutoMerge.delete({where:{worktreeId:A}});return this.worktrees.publishAutomationChange(A),!0})}async retryAutoMerge(A){let e=await (0,n.U)(),t=await e.worktreeAutoMerge.findUniqueOrThrow({where:{worktreeId:A}}),r=await this.pullRequestState(t);if(t.autoSync&&"MERGED"!==r.state)throw Error("Refresh and review the current source commit, then resume Auto Merge from its configuration.");let i="MERGED"===r.state?"POST_MERGE":"ACTIVE",a=await e.worktreeAutoMerge.update({where:{worktreeId:A},data:{state:i,lastError:null,deleteJobId:null}});return this.worktrees.publishAutomationChange(A),this.changed(),C(a)}async reconcile(){if(this.running){this.rerunRequested=!0;return}this.running=!0;try{let A=async()=>{do this.rerunRequested=!1,await this.reconcileAutoMerge(),await this.reconcileAutoSync();while(this.rerunRequested)};this.polling?await this.polling.run(l,A):await A()}catch{}finally{this.running=!1,this.schedule()}}async recoverLegacyAutoSync(A){if("PAUSED"!==A.state||"ERROR"!==A.pauseReason||A.lastError!==o.X)return null;let e=await (0,n.U)(),t=A.workflowRunId;if(!t&&!A.activeJobId&&A.conflictWorkflowId){let i=await e.agentJob.findFirst({where:{worktreeId:A.worktreeId,codebaseId:A.worktree.codebaseId,kind:r.d},orderBy:[{createdAt:"desc"},{id:"desc"}]}),n=await e.worktree.findUnique({where:{id:A.worktreeId},select:{codebaseId:!0,branch:!0,folder:!0,gitDirectory:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}}),a=!1;try{let e=JSON.parse(i?.payloadJson??"null");a=!!n&&n.codebaseId===A.worktree.codebaseId&&n.branch===A.branch&&e?.expectedBranch===A.branch&&e?.folder===n.folder&&e?.gitDirectory===n.gitDirectory&&"string"==typeof e?.expectedOrigin&&e.expectedOrigin.toLowerCase()===n.codebase.repository.canonicalOrigin.toLowerCase()&&e?.phase==="SYNC"&&!e?.mergeGuard}catch{}if(a&&i?.status==="SUCCEEDED"&&i.finishedAt&&i.finishedAt<=A.updatedAt&&"CONFLICT"===g(i.resultJson)){let r=await e.workflowRun.findMany({where:{worktreeId:A.worktreeId,workflowId:A.conflictWorkflowId,triggerSubjectKey:`auto-sync:${A.worktreeId}:${i.id}`,status:"SUCCEEDED",finishedAt:{gte:i.finishedAt,lte:A.updatedAt}},select:{id:!0},take:2});1===r.length&&(t=r[0].id)}}let i={state:A.activeJobId?"SYNCING":t?"RESOLVING":"ACTIVE",workflowRunId:t,lastError:null,pauseReason:null};return(await e.worktreeAutoSync.updateMany({where:{worktreeId:A.worktreeId,state:"PAUSED",pauseReason:"ERROR",lastError:o.X,updatedAt:A.updatedAt},data:i})).count?i:null}async reconcileAutoSync(){let A=await (0,n.U)();for(let e of(await A.worktreeAutoSync.findMany({where:{OR:[{state:{in:["ACTIVE","SYNCING","RESOLVING"]}},{state:"PAUSED",pauseReason:"ERROR",lastError:o.X}]},include:{worktree:{select:{codebaseId:!0}}},orderBy:[{updatedAt:"asc"},{worktreeId:"asc"}]})))await (0,o.s)(e.worktreeId,async()=>{let i=e;try{if("PAUSED"===i.state){let A=await this.recoverLegacyAutoSync(i);if(!A)return;i={...i,...A}}if(await (0,o.M)(i.worktreeId))return;let e=await A.worktree.findUnique({where:{id:i.worktreeId},select:{branch:!0}});if(e?.branch!==i.branch)throw Error("Auto Sync paused because the worktree branch changed");if("ACTIVE"===i.state){if((await A.agentJob.findMany({where:{worktreeId:i.worktreeId,codebaseId:i.worktree.codebaseId,kind:r.d,status:"SUCCEEDED",finishedAt:{gte:new Date(Date.now()-6e4)}},select:{resultJson:!0}})).some(A=>["SYNCED","NO_CHANGE"].includes(g(A.resultJson)??"")))return;let e=await this.worktrees.createAutoSyncJob(i.worktreeId,"SYNC",i.branch,(0,t.randomUUID)());await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"SYNCING",activeJobId:e.id,lastError:null,pauseReason:null}});return}if("RESOLVING"===i.state){if(!i.workflowRunId)throw Error("The conflict workflow run is missing");let e=await this.workflows.run(i.workflowRunId);if(!e||!d.has(e.status))return;if("SUCCEEDED"!==e.status)throw Error(`The conflict workflow ${e.status.toLowerCase()}`);let r=await this.worktrees.createAutoSyncJob(i.worktreeId,"FINALIZE",i.branch,(0,t.randomUUID)());await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"SYNCING",activeJobId:r.id,workflowRunId:null,pauseReason:null}});return}if(!i.activeJobId)throw Error("The Auto Sync job is missing");let n=await this.agentControl.getJob(i.activeJobId);if(!n||!c.has(n.status))return;if("SUCCEEDED"!==n.status)throw Error(n.error||`Auto Sync ${n.status.toLowerCase()}`);let a=g(n.resultJson);if("PREPARATION_CONFLICT"===a){let e=function(A){if(!A)return[];try{let e=JSON.parse(A);if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=e.preparationConflictPaths;return Array.isArray(t)?t.filter(A=>"string"==typeof A):[]}catch{return[]}}(n.resultJson);await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"PAUSED",activeJobId:null,workflowRunId:null,lastError:"Auto Sync paused because repository preparations block the rebase"+(e.length?`: ${e.join(", ")}`:""),pauseReason:"PREPARATION_CONFLICT"}});return}if("CONFLICT"===a){if(!i.conflictWorkflowId)return void await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"PAUSED",activeJobId:null,workflowRunId:null,lastError:"Auto Sync paused because the rebase has merge conflicts",pauseReason:"REBASE_CONFLICT"}});let e=await this.workflows.trigger({workflowId:i.conflictWorkflowId,resourceKind:"WORKTREE",resourceId:i.worktreeId,subjectKey:`auto-sync:${i.worktreeId}:${n.id}`,choice:i.conflictWorkflowChoice});if(!e)throw Error("The conflict workflow did not start");await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"RESOLVING",activeJobId:null,workflowRunId:e.id,lastError:null,pauseReason:null}});return}if("UNRESOLVED"===a)throw Error("The conflict workflow did not fully resolve the rebase");if("SYNCED"!==a&&"NO_CHANGE"!==a)throw Error("The Auto Sync job returned an unknown result");await A.worktreeAutoSync.update({where:{worktreeId:i.worktreeId},data:{state:"ACTIVE",activeJobId:null,workflowRunId:null,lastError:null,pauseReason:null,..."SYNCED"===a?{lastSyncedAt:new Date}:{}}})}catch(n){if((0,a.D)(n)||"PAUSED"===i.state&&i.lastError===o.X&&(0,o.D)(n))return;let e=n instanceof Error?n.message:String(n),t=/offline|busy|already has an active job|temporarily/i.test(e);if(t&&"RESOLVING"===i.state)return;let r=/branch changed/i.test(e)?"BRANCH_CHANGED":"ERROR";await A.worktreeAutoSync.updateMany({where:{worktreeId:i.worktreeId},data:{state:t?"ACTIVE":"PAUSED",activeJobId:null,workflowRunId:null,lastError:e,pauseReason:t?null:r}})}finally{this.worktrees.publishAutomationChange(i.worktreeId,i.worktree.codebaseId)}})}async reconcileAutoMerge(){return this.withMergeLock(()=>this.reconcileAutoMergeRules())}async reconcileAutoMergeRules(){let A=await (0,n.U)();for(let r of(await A.worktreeAutoMerge.findMany({where:{OR:[{state:{in:["ACTIVE","POST_MERGE",...o.S]}},{state:"ACTION_REQUIRED",lastError:o.X}]},include:{worktree:{select:{codebaseId:!0,branch:!0,headSha:!0,primary:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}}}}))){let i=r;try{let r=u(i.repositoryNameWithOwner);if("ACTION_REQUIRED"===i.state){if(i.lastError!==o.X)continue;let e=await this.github.pullRequestAutomationState(r.owner,r.name,i.pullRequestNumber,!0),t=i.autoSync?(0,o.N)(i.syncStateJson).headSha:i.worktree.headSha;if("MERGED"!==e.state||e.headRefName!==i.branch||e.headRefOid!==t||!e.headRepositoryNameWithOwner||`github.com/${e.headRepositoryNameWithOwner.toLowerCase()}`!==i.worktree.codebase.repository.canonicalOrigin.toLowerCase()||!(await A.worktreeAutoMerge.updateMany({where:{worktreeId:i.worktreeId,state:"ACTION_REQUIRED",lastError:o.X,updatedAt:i.updatedAt},data:{state:"POST_MERGE",lastError:null}})).count)continue;i={...i,state:"POST_MERGE",lastError:null}}if(i.autoSync&&"POST_MERGE"!==i.state){await (0,o.C)({...i,worktrees:this.worktrees,agents:this.agentControl,readiness:()=>this.github.managedMergeReadiness(r.owner,r.name,i.pullRequestNumber),save:({acceptedHeadSha:e,...t})=>A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:t}),merge:(A,e)=>this.github.mergePullRequest({...r,number:i.pullRequestNumber,method:i.mergeMethod,commitHeadline:i.commitHeadline,commitBody:i.commitBody,authorEmail:i.authorEmail,expectedHeadSha:A,expectedTargetSha:e},"WORKTREE_AUTOMATION")})&&(await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{state:"POST_MERGE",lastError:null}}),this.rerunRequested=!0);continue}if("ACTIVE"===i.state){let e=await this.pullRequestState(i);if("MERGED"===e.state)await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{state:"POST_MERGE",lastError:null}}),this.rerunRequested=!0;else if("OPEN"!==e.state)throw Error("The pull request closed without merging");else if(!e.autoMergeEnabled)throw Error("GitHub Auto Merge is no longer enabled");continue}if(i.baseBranchUpdatesJson){let A=await this.pullRequestState(i);if("MERGED"!==A.state||!A.headRepositoryNameWithOwner)throw Error("The pull request merge is not confirmed for base updates");await (0,e.V)({provider:"GITHUB",id:i.worktreeId},{origin:`github.com/${A.headRepositoryNameWithOwner.toLowerCase()}`,branch:A.headRefName},this.worktrees)}if(i.moveTicketToDone&&i.ticketKey&&!i.ticketMovedAt){let e=await (0,s.T)(this.jira,i);await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{ticketMovedAt:e,lastError:null}})}if(!i.deleteWorktree){await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{state:"COMPLETED",lastError:null}});continue}if(i.worktree.primary)throw Error("The primary worktree cannot be deleted");if(!i.deleteJobId){let e=await this.pullRequestState(i);if("MERGED"!==e.state)throw Error("The pull request is no longer merged");if(!e.headRepositoryNameWithOwner||i.worktree.codebase.repository.canonicalOrigin.toLowerCase()!==`github.com/${e.headRepositoryNameWithOwner.toLowerCase()}`)throw Error("The merged pull request head repository does not match the worktree");if(e.headRefName!==i.branch)throw Error("The merged pull request branch does not match the Auto Merge rule");if(i.worktree.branch!==i.branch)throw Error("The worktree branch changed after Auto Merge completed");if(!i.worktree.headSha||i.worktree.headSha!==e.headRefOid)throw Error("The worktree HEAD does not match the merged pull request");let r=await this.worktrees.deleteWorktree({worktreeId:i.worktreeId,deleteRemoteBranch:!1,requireClean:!0,expectedBranch:i.branch,expectedHeadSha:e.headRefOid,requestId:`auto-merge-${(0,t.randomUUID)()}`});await A.worktreeAutoMerge.update({where:{worktreeId:i.worktreeId},data:{deleteJobId:r.id,lastError:null}});continue}let n=await this.agentControl.getJob(i.deleteJobId);if(!n||!c.has(n.status))continue;if("SUCCEEDED"!==n.status)throw Error(n.error||`Worktree deletion ${n.status.toLowerCase()}`);await A.worktreeAutoMerge.updateMany({where:{worktreeId:i.worktreeId},data:{state:"COMPLETED",lastError:null}})}catch(e){if((0,a.D)(e)||"ACTION_REQUIRED"===i.state&&i.lastError===o.X&&(0,o.D)(e))continue;await A.worktreeAutoMerge.updateMany({where:{worktreeId:i.worktreeId},data:{state:"ACTION_REQUIRED",lastError:e instanceof Error?e.message:String(e)}})}finally{this.worktrees.publishAutomationChange(i.worktreeId,i.worktree.codebaseId)}}}}])},520962,A=>{var e=A.i(380592),t=A.i(666680),r=A.i(750227),i=A.i(591135),n=A.i(135475),a=A.i(532982),s=A.i(751976),o=A.i(454228),l=A.i(388385),c=A.i(384439),d=A.i(963408);A.i(256554);var u=A.i(118387),g=A.i(848201);A.i(253992);var h=A.i(183291);A.i(484628);var C=A.i(897051),p=A.i(429047),I=A.i(999585);let m=["PENDING","RUNNING"],f=["QUEUED","RUNNING","CANCELLING"],E="server:worktree-bulk-sync",w={codebase:{include:{agent:!0,repository:{include:{preparations:!0}}}}},Q={items:{orderBy:{position:"asc"}}};function y(A){if(A.missingAt||"AVAILABLE"!==A.availability)return"Worktree is unavailable";if("AVAILABLE"!==A.codebase.availability)return"Codebase is unavailable";let t=A.codebase.agent;if(t.disconnectedAt||!t.lastSeenAt||Date.now()-t.lastSeenAt.getTime()>(0,u.z)(t))return"Agent is offline";let r=function(A){try{let e=JSON.parse(A);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}}(t.capabilitiesJson);return r.includes(e.d)?A.codebase.repository.preparations.length>0&&!r.includes(e.r)?"Update the agent to use repository preparations":A.branch?A.upstream?A.baseBranchOverride??A.codebase.defaultBranch?A.hasConflicts||A.rebaseInProgress?"Resolve the current rebase or conflicts before syncing":A.hasStagedChanges||A.hasUnstagedChanges?"Stash or commit changes before syncing":null:"Sync requires a base branch":"Sync requires an upstream branch":"Sync requires a branch":"Update the agent to use Bulk Sync"}function B(A){return{...A,createdAt:A.createdAt.toISOString(),updatedAt:A.updatedAt.toISOString(),finishedAt:A.finishedAt?.toISOString()??null,items:A.items.map(A=>({...A,createdAt:A.createdAt.toISOString(),startedAt:A.startedAt?.toISOString()??null,finishedAt:A.finishedAt?.toISOString()??null}))}}class D{worktrees;timer;running;rerunRequested;started;polling;constructor(A,t){this.worktrees=A,this.timer=null,this.running=!1,this.rerunRequested=!1,this.started=!1,t.registerCompletionObserver(A=>(A.kind===e.d&&this.changed(),Promise.resolve())),t.registerConnectionHandler(()=>(this.changed(),Promise.resolve()))}startRuntime(A){this.started||(this.started=!0,this.polling=A,A?.register({id:E,kind:"WORKTREE_AUTOMATION",runtime:"SERVER",enabled:!0,cadenceSeconds:5,details:{operation:"BULK_SYNC"}}),this.changed())}changed(){if(this.started){if(this.running){this.rerunRequested=!0;return}this.timer&&clearTimeout(this.timer),this.timer=null,queueMicrotask(()=>void this.reconcile())}}async batch(A){let e=await (0,n.U)(),t=await e.worktreeSyncBatch.findUnique({where:{id:A},include:Q});return t?B(t):null}async active(A,e){let t=await (0,n.U)(),r=A?await t.appRepository.findMany({where:{appId:A},select:{repositoryId:!0}}):null;return(await t.worktreeSyncBatch.findMany({where:{status:"ACTIVE",...r||e?{items:{some:{...r?{repositoryId:{in:r.map(A=>A.repositoryId)}}:{},...e?{worktreeId:e}:{}}}}:{}},include:Q,orderBy:{createdAt:"asc"}})).map(B)}existingBatch(A,e){if(A.appId!==(e.appId??null)||A.agentId!==(e.agentId??null)||A.items.length!==e.worktreeIds.length||A.items.some(A=>!e.worktreeIds.includes(A.worktreeId)))throw Error("This request ID was already used for another Bulk Sync selection");return B(A)}async start(A){let e,r=A.requestId.trim(),i=[...new Set(A.worktreeIds.map(A=>A.trim()).filter(Boolean))];if(!r)throw Error("requestId is required");if(!i.length)throw Error("Select at least one worktree to sync");let a={...A,requestId:r,worktreeIds:i},s=await (0,n.U)(),o=await s.worktreeSyncBatch.findUnique({where:{requestId:r},include:Q});if(o)return this.existingBatch(o,a);let l=new Map((await s.worktree.findMany({where:{id:{in:i},codebase:{...A.agentId?{agentId:A.agentId}:{},...A.appId?{repository:{apps:{some:{appId:A.appId}}}}:{}}},include:w})).map(A=>[A.id,A]));if(l.size!==i.length)throw Error("Some selected worktrees no longer exist or are outside the page scope");let c=await Promise.all(i.map(async(A,e)=>{let r=l.get(A),i=y(r)??(null===r.baseBehind?"Worktree freshness is unknown; fetch and try again":r.baseBehind<=0?"Worktree is already up to date":null),n=await this.worktrees.ticketKeyForWorktree(A),a=n?await s.jiraCachedTicket.findUnique({where:{issueKey:n},select:{detailJson:!0,summaryJson:!0}}):null,o=null;try{let A=JSON.parse(a?.detailJson??a?.summaryJson??"null");if(A&&"object"==typeof A&&"fields"in A){let e=A.fields;e&&"object"==typeof e&&"summary"in e&&"string"==typeof e.summary&&(o=e.summary)}}catch{}return{id:(0,t.randomUUID)(),position:e,worktreeId:A,codebaseId:r.codebaseId,agentId:r.codebase.agentId,agentName:r.codebase.agent.name,repositoryId:r.codebase.repositoryId,repositoryName:r.codebase.repository.name,branch:r.branch??"",baseBranch:r.baseBranchOverride??r.codebase.defaultBranch??"",folder:r.folder,gitDirectory:r.gitDirectory,expectedOrigin:r.codebase.repository.canonicalOrigin,ticketKey:n,ticketTitle:o,baseBehind:r.baseBehind??0,status:i?"SKIPPED":"PENDING",error:i,finishedAt:i?new Date:null}})),d=c.some(A=>"PENDING"===A.status);try{e=await s.worktreeSyncBatch.create({data:{id:(0,t.randomUUID)(),requestId:r,appId:A.appId??null,agentId:A.agentId??null,status:d?"ACTIVE":"COMPLETED",finishedAt:d?null:new Date,items:{create:c}},include:Q})}catch(e){let A=await s.worktreeSyncBatch.findUnique({where:{requestId:r},include:Q});if(!A)throw e;return this.existingBatch(A,a)}return this.worktrees.publishAutomationChange(i[0],null),this.changed(),B(e)}async updateItem(A,e){let t=await (0,n.U)();await t.$transaction(async t=>{let r=await t.worktreeSyncItem.updateMany({where:{id:A.id,status:A.status},data:e});return r.count&&await t.worktreeSyncBatch.update({where:{id:A.batchId},data:{updatedAt:new Date}}),r.count>0})&&this.worktrees.publishAutomationChange(A.worktreeId,A.codebaseId)}async advance(A){let e,t=await (0,n.U)(),r=A.jobId?await t.agentJob.findUnique({where:{id:A.jobId}}):await t.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:A.agentId,idempotencyKey:`worktree:auto-sync:sync:${A.id}:${A.worktreeId}`}}});if(r){if(f.includes(r.status)){"RUNNING"===A.status&&A.jobId||await this.updateItem(A,{status:"RUNNING",jobId:r.id,startedAt:r.createdAt});return}let e="FAILED",t=r.error;if("SUCCEEDED"===r.status){let A={};try{let e=JSON.parse(r.resultJson??"{}");e&&"object"==typeof e&&!Array.isArray(e)&&(A=e)}catch{}"SYNCED"===A.outcome||"NO_CHANGE"===A.outcome?(e="SUCCEEDED",t=null):"CONFLICT"===A.outcome||"PREPARATION_CONFLICT"===A.outcome?(e="ATTENTION_REQUIRED",t="CONFLICT"===A.outcome?"Resolve the rebase conflicts in this worktree":"Repository preparation paths require manual attention"):t="Sync returned an unknown result; inspect the agent job"}else t||=`Sync ${r.status.toLowerCase()}`;await this.updateItem(A,{status:e,error:t,jobId:r.id,startedAt:r.createdAt,finishedAt:r.finishedAt??new Date}),this.rerunRequested=!0;return}if(A.jobId){await this.updateItem(A,{status:"FAILED",error:"The sync job is no longer available",finishedAt:new Date}),this.rerunRequested=!0;return}let i=await t.worktree.findUnique({where:{id:A.worktreeId},include:w}),a=i&&(i.codebaseId!==A.codebaseId||i.codebase.agentId!==A.agentId||i.branch!==A.branch||i.folder!==A.folder||i.gitDirectory!==A.gitDirectory||i.codebase.repository.canonicalOrigin!==A.expectedOrigin||(i.baseBranchOverride??i.codebase.defaultBranch)!==A.baseBranch),s=i?a?"Worktree identity, branch, or base changed; select it again to sync":y(i):"Worktree was deleted";if(s){await this.updateItem(A,{status:"SKIPPED",error:s,finishedAt:new Date}),this.rerunRequested=!0;return}try{e=await this.worktrees.createAutoSyncJob(A.worktreeId,"SYNC",A.branch,A.id,!1,A)}catch(e){if((0,o.D)(e))return;if(await t.agentJob.findUnique({where:{agentId_idempotencyKey:{agentId:A.agentId,idempotencyKey:`worktree:auto-sync:sync:${A.id}:${A.worktreeId}`}}})){this.rerunRequested=!0;return}await this.updateItem(A,{status:"FAILED",error:e instanceof Error?e.message:String(e),finishedAt:new Date}),this.rerunRequested=!0;return}await this.updateItem(A,{status:"RUNNING",jobId:e.id,startedAt:e.createdAt})}async reconcile(){if(this.running){this.rerunRequested=!0;return}this.running=!0;try{let A=async()=>{do{this.rerunRequested=!1;let A=await (0,n.U)(),e=await A.worktreeSyncItem.findMany({where:{status:{in:m},batch:{status:"ACTIVE"}},orderBy:[{createdAt:"asc"},{batchId:"asc"},{position:"asc"}]}),t=new Map;for(let A of e){let e=t.get(A.codebaseId);e&&("RUNNING"===e.status||"RUNNING"!==A.status)||t.set(A.codebaseId,A)}let r=await Promise.allSettled([...t.values()].map(A=>this.advance(A))),i=await A.worktreeSyncBatch.findMany({where:{status:"ACTIVE",items:{none:{status:{in:m}}}},select:{id:!0}});i.length&&(await A.worktreeSyncBatch.updateMany({where:{id:{in:i.map(A=>A.id)},status:"ACTIVE"},data:{status:"COMPLETED",finishedAt:new Date}}),this.worktrees.publishAutomationChange(null,null));let a=r.find(A=>"rejected"===A.status);if(a?.status==="rejected")throw a.reason}while(this.rerunRequested)};this.polling?await this.polling.run(E,A):await A()}catch(A){this.polling||console.error("Bulk Sync reconciliation failed",A)}finally{this.running=!1,this.started&&(this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>void this.reconcile(),5e3),this.timer.unref(),this.polling?.schedule(E,new Date(Date.now()+5e3)))}}}let k="default",b=["QUEUED","RUNNING"],S=new Set([e.l,e.T,e.d,e.o,e.B,e.W,e.R,e.Z,e.r]),R=["PUSHING","CHECKING_OUT","AWAITING_STASH","CLEANING_UP"];async function M(A,e){let t;try{return await Promise.race([A.then(()=>!0),new Promise(A=>{t=setTimeout(()=>A(!1),Math.min(1e3,Math.max(0,e-Date.now())))})])}finally{clearTimeout(t)}}let O=["gray","stone","red","rose","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","lavender","maroon","brown","olive","navy"],N={codebase:{include:{agent:!0,repository:{include:{projects:{where:{type:"IOS_APP"},include:{configurations:{select:{id:!0}}}}}},jobs:{where:o.i,orderBy:{createdAt:"desc"},take:1}}},tags:{include:{tag:!0}},builds:{orderBy:{createdAt:"desc"},take:1,select:{id:!0,status:!0,action:!0,destinationType:!0,destinationJson:!0,snapshotJson:!0,createdAt:!0,finishedAt:!0,artifacts:{select:{id:!0,kind:!0}}}},autoSync:!0,autoMerge:!0,pullRequest:!0,gitLabMergeRequest:!0,_count:{select:{builds:{where:{status:{in:["QUEUED","PREPARING","RUNNING"]}}}}}};function H(A,e){return{...A?{apps:{some:{appId:A}}}:{},...e?{codebases:{some:{worktrees:{some:{id:e}}}}}:{}}}function v(A){return null!==A.lastSeenAt&&Date.now()-A.lastSeenAt.getTime()<=(0,u.z)(A)&&null===A.disconnectedAt}function T(A){try{let e=JSON.parse(A.capabilitiesJson);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}}function U(A){try{let e=JSON.parse(A);return Array.isArray(e)?e.filter(A=>"string"==typeof A):[]}catch{return[]}}function J(A,e){if(!A||!e)return null;try{let t=(0,s.u)(e,{flags:"i",label:"Jira branch regex"}).exec(A),r=(t?.[1]??t?.[0])?.trim();return r?r.toUpperCase():null}catch{return null}}function x(A){try{let e=JSON.parse(A);return Array.isArray(e)?e:[]}catch{return[]}}function _(A,e){return{id:A.githubId,number:A.number,title:A.title,url:A.url,repositoryGithubId:A.repositoryGithubId,repositoryNameWithOwner:A.repositoryNameWithOwner,repositoryUrl:A.repositoryUrl,labels:x(A.labelsJson),jiraKey:A.jiraKey,pipelineStatus:e?.pipelineStatus??"NONE",pipelines:e?.pipelines??[],pipelineRevision:e?.revision??0,reviewDecision:A.reviewDecision,requestedReviewerCount:A.requestedReviewerCount,unresolvedReviewThreadCount:A.unresolvedReviewThreadCount,state:A.state,isDraft:A.isDraft,mergeable:A.mergeable,mergeStateStatus:A.mergeStateStatus,autoMergeEnabled:A.autoMergeEnabled,viewerCanEnableAutoMerge:A.viewerCanEnableAutoMerge,viewerCanDisableAutoMerge:A.viewerCanDisableAutoMerge,headRefOid:A.headRefOid,headRefName:A.headRefName,worktreeId:A.worktreeId,worktreeHighlightColor:null,createdAt:A.githubCreatedAt.toISOString()}}function G(A){return{reviewDecision:A.reviewDecision,requestedReviewerCount:A.requestedReviewerCount??0,unresolvedReviewThreadCount:A.unresolvedReviewThreadCount,state:A.state,isDraft:A.isDraft,mergeable:A.mergeable,mergeStateStatus:A.mergeStateStatus,autoMergeEnabled:A.autoMergeEnabled,viewerCanEnableAutoMerge:A.viewerCanEnableAutoMerge,viewerCanDisableAutoMerge:A.viewerCanDisableAutoMerge,headRefOid:A.headRefOid}}function L(A){return/^[A-Za-z]:[\\/]/.test(A)||A.startsWith("\\\\")}function P(A,e){if(!e)return A;let t=L(e);if(t!==L(A))return A;let i=t?r.win32:r.posix,n=i.relative(e,A);return i.isAbsolute(n)||".."===n||n.startsWith(`..${i.sep}`)?A:n||"."}function j(A){if("SUCCEEDED"!==A.status||!A.resultJson)throw Error(A.error||"Worktree job failed");let e=JSON.parse(A.resultJson);if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Worktree job returned an invalid result");return e}A.s(["B",0,class{agentControl;jiraService;gitHubService;skillsService;workflowEvents;pipelineStatus;gitLabService;notifications;syncService;get syncBatches(){return this.syncService??=new D(this,this.agentControl)}preparationInspections;gitStateInspections;diffInspections;watchDemand;constructor(A,t,r,i,n,a=new h.f,s,o){this.agentControl=A,this.jiraService=t,this.gitHubService=r,this.skillsService=i,this.workflowEvents=n,this.pipelineStatus=a,this.gitLabService=s,this.notifications=o,this.preparationInspections=new Map,this.gitStateInspections=new Map,this.diffInspections=new Map,this.watchDemand=new Map,this.agentControl.registerCompletionHandler(e.l,A=>this.projectOperation(A)),this.agentControl.registerCompletionHandler(e.T,A=>this.projectOperation(A)),this.agentControl.registerCompletionHandler(e.d,A=>this.projectOperation(A)),this.agentControl.registerCompletionHandler(e.o,A=>this.projectOperation(A)),this.agentControl.registerCompletionHandler(e.B,A=>this.projectBranchOperation(A)),this.agentControl.registerCompletionHandler(e.W,A=>this.advanceMoveAfterPush(A)),this.agentControl.registerCompletionHandler(e.R,A=>this.advanceMoveAfterCheckout(A)),this.agentControl.registerCompletionHandler(e.Z,A=>this.projectDeleteOperation(A)),this.agentControl.registerCompletionHandler(e.r,A=>this.projectPreparationOperation(A))}async preparationOverview(){let A=await (0,n.U)(),[t,r,i,a]=await Promise.all([A.codebaseRepository.findMany({where:{codebases:{some:{}}},include:{preparations:{orderBy:[{kind:"asc"},{path:"asc"}]}},orderBy:[{name:"asc"},{canonicalOrigin:"asc"}]}),A.worktree.findMany({include:N,orderBy:[{codebase:{repository:{name:"asc"}}},{codebase:{agent:{name:"asc"}}},{primary:"desc"},{branch:"asc"},{folder:"asc"}]}),A.worktreePreparationStatus.findMany(),A.agentJob.findMany({where:{kind:e.r,status:{in:b}},orderBy:{createdAt:"desc"}})]),s=new Map(i.map(A=>[`${A.worktreeId}\0${A.preparationId}`,A])),o=new Map;for(let A of a){A.worktreeId&&o.set(A.worktreeId,A);try{let e=JSON.parse(A.payloadJson);if(!e||"object"!=typeof e||Array.isArray(e))continue;let t=e.worktrees;if(!Array.isArray(t))continue;for(let e of t)e&&"object"==typeof e&&!Array.isArray(e)&&"string"==typeof e.worktreeId&&o.set(String(e.worktreeId),A)}catch{}}let l=new Map;for(let A of r){let e=A.codebase.repositoryId;l.set(e,[...l.get(e)??[],A])}return{repositories:t.map(A=>({repository:A,worktrees:(l.get(A.id)??[]).map(t=>{let r=!t.missingAt&&"AVAILABLE"===t.availability&&v(t.codebase.agent)&&T(t.codebase.agent).includes(e.r),i=A.preparations.map(A=>{let e=s.get(`${t.id}\0${A.id}`),r=e?.definitionHash===A.definitionHash?e.state:"PENDING";return{preparation:A,state:r,message:e?.message??null,checkedAt:e?.definitionHash===A.definitionHash?e.checkedAt:null}});return{worktree:this.view(t),agent:t.codebase.agent,supported:r,unsupportedReason:r?null:t.missingAt||"AVAILABLE"!==t.availability?"Worktree is unavailable":v(t.codebase.agent)?"Agent must be updated to use preparations":"Agent is offline",overallState:(0,I.a)(i.map(A=>A.state)),statuses:i,activeJob:o.get(t.id)??null}})}))}}async runPreparations(A,t,r){if(!r.trim())throw Error("requestId is required");if(!e.u.includes(t))throw Error("Unknown preparation action");let i=[...new Set(A)];if(i.length!==A.length||i.length>500)throw Error("worktreeIds must be unique and contain at most 500 values");let a=await (0,n.U)(),s=new Map((await a.worktree.findMany({where:{id:{in:i}},include:{codebase:{include:{agent:!0,repository:{include:{preparations:!0}}}}}})).map(A=>[A.id,A])),o=[],l=[],c=new Map;for(let A of i){let t=s.get(A),r=null;if(!t||t.missingAt||"AVAILABLE"!==t.availability?r="Worktree is unavailable":v(t.codebase.agent)?T(t.codebase.agent).includes(e.r)||(r="Agent must be updated to use preparations"):r="Agent is offline",r||!t){l.push({worktreeId:A,reason:r??"Worktree not found"});continue}c.set(t.codebaseId,[...c.get(t.codebaseId)??[],t])}for(let[A,i]of c){let n=i[0];try{o.push(await this.createPreparationJob({agentId:n.codebase.agentId,codebaseId:A,worktreeId:1===i.length?n.id:null,kind:e.r,payload:{codebaseId:A,expectedOrigin:n.codebase.repository.canonicalOrigin,action:t,preparations:n.codebase.repository.preparations.map(I.U),worktrees:i.map(A=>({worktreeId:A.id,folder:A.folder,gitDirectory:A.gitDirectory}))},idempotencyKey:`worktree:prepare:${t.toLowerCase()}:${r}:${A}`,timeoutSeconds:600},"INSPECT"===t))}catch(A){for(let e of i)l.push({worktreeId:e.id,reason:A instanceof Error?A.message:String(A)})}}return{jobs:o,skipped:l}}createPreparationJob(A,e){if(!e)return this.agentControl.createJob(A);let t=JSON.stringify(A.payload),r=JSON.stringify([A.agentId,A.codebaseId,t]),i=this.preparationInspections.get(r);if(i)return i;let a=(async()=>{let e=await (0,n.U)();return await e.agentJob.findFirst({where:{agentId:A.agentId,codebaseId:A.codebaseId,kind:A.kind,status:{in:["QUEUED","RUNNING"]},payloadJson:t}})??this.agentControl.createJob(A)})().finally(()=>this.preparationInspections.delete(r));return this.preparationInspections.set(r,a),a}async settings(){return(await (0,n.U)()).worktreeSettings.upsert({where:{id:k},create:{id:k,editorVariant:"CODE"},update:{}})}async saveSettings(A){let e="string"==typeof A?{editorVariant:A}:A,t=e.editorVariant??void 0;if(t&&!["CODE","CODE_INSIDERS","NONE"].includes(t))throw Error("Unknown editor setting");let r=await (0,n.U)();if(e.highlightColorMode&&!["SPREAD","RANDOM"].includes(e.highlightColorMode))throw Error("Unknown highlight color mode");let i={editorVariant:t,autoAssignHighlightColor:e.autoAssignHighlightColor??void 0,highlightColorMode:e.highlightColorMode??void 0},a=await r.worktreeSettings.upsert({where:{id:k},create:{id:k,...i},update:i});return this.publish(null,null),a}async requestRefresh(){let A=await (0,n.U)(),e=await A.codebase.findMany({select:{agentId:!0}});return this.agentControl.requestCodebaseReconcile(e.map(A=>A.agentId))}async cleanupExpired(){let A=await (0,n.U)();await A.worktree.deleteMany({where:{missingAt:{lt:new Date(Date.now()-6048e5)}}})}view(A,t=""){var r;let i=A.codebase.repository.jiraBranchRegex??t,n=!A.pullRequestLookupOrigin&&!A.pullRequestLookupBranch||A.pullRequestLookupOrigin?.toLowerCase()===A.codebase.repository.canonicalOrigin.toLowerCase()&&A.pullRequestLookupBranch===A.branch,a=n&&A.pullRequest?_(A.pullRequest):null,s=n&&A.gitLabMergeRequest?{id:(r=A.gitLabMergeRequest).gitlabId,iid:r.iid,projectId:r.projectId,title:r.title,description:r.description,state:r.state,draft:r.draft,webUrl:r.webUrl,sourceBranch:r.sourceBranch,targetBranch:r.targetBranch,sha:r.sha,author:JSON.parse(r.authorJson),reviewers:x(r.reviewersJson),labels:x(r.labelsJson),detailedMergeStatus:r.detailedMergeStatus,mergeWhenPipelineSucceeds:r.mergeWhenPipelineSucceeds,squashOnMerge:r.squashOnMerge,hasConflicts:r.hasConflicts,blockingDiscussionsResolved:r.blockingDiscussionsResolved,createdAt:r.gitlabCreatedAt.toISOString(),updatedAt:r.gitlabUpdatedAt.toISOString(),mergedAt:r.mergedAt?.toISOString()??null}:null;return{...A,relativePath:P(A.folder,A.codebase.agent.baseRepoDirectory),tags:A.tags.map(A=>A.tag),activeJob:A.codebase.jobs.find(t=>t.worktreeId===A.id&&function(A){if(!S.has(A.kind))return!1;if(A.kind!==e.l)return!0;try{let e=JSON.parse(A.payloadJson);return!!e&&"object"==typeof e&&!Array.isArray(e)&&"string"==typeof e.operation&&"OPEN_EDITOR"!==e.operation}catch{return!1}}(t))??null,baseBranch:A.baseBranchOverride??A.codebase.defaultBranch??null,ticketKey:J(A.branch,String(i)),ticketTitle:null,ticketStatus:null,pullRequest:a,gitLabMergeRequest:s,sourceControlRequest:s??a,gitLabPipelines:[],latestBuild:A.builds?.[0]?{...A.builds[0],outOfDate:(0,p.f)({...A.builds[0],worktree:A})}:null}}async storePullRequest(A,e,t,r){let i=await (0,n.U)(),a=new Date;await i.$transaction(async i=>{if(await i.worktree.update({where:{id:A},data:{pullRequestLookupOrigin:e,pullRequestLookupBranch:t,pullRequestLookupAt:a}}),r){let e={githubId:r.id,number:r.number,title:r.title,url:r.url,repositoryGithubId:r.repositoryGithubId,repositoryNameWithOwner:r.repositoryNameWithOwner,repositoryUrl:r.repositoryUrl,labelsJson:JSON.stringify(r.labels),jiraKey:r.jiraKey,reviewDecision:r.reviewDecision,requestedReviewerCount:r.requestedReviewerCount??0,unresolvedReviewThreadCount:r.unresolvedReviewThreadCount,state:r.state,isDraft:r.isDraft,mergeable:r.mergeable,mergeStateStatus:r.mergeStateStatus,autoMergeEnabled:r.autoMergeEnabled,viewerCanEnableAutoMerge:r.viewerCanEnableAutoMerge,viewerCanDisableAutoMerge:r.viewerCanDisableAutoMerge,headRefOid:r.headRefOid,headRefName:r.headRefName,githubCreatedAt:new Date(r.createdAt)};await i.worktreeGitLabMergeRequest?.deleteMany({where:{worktreeId:A}}),await i.worktreePullRequest.upsert({where:{worktreeId:A},create:{worktreeId:A,...e},update:e})}else await i.worktreePullRequest.deleteMany({where:{worktreeId:A}})})}async storeGitLabMergeRequest(A,e,t,r){let i=await (0,n.U)();await i.$transaction(async i=>{if(await i.worktree.update({where:{id:A},data:{pullRequestLookupOrigin:e,pullRequestLookupBranch:t,pullRequestLookupAt:new Date}}),await i.worktreePullRequest.deleteMany({where:{worktreeId:A}}),r){let e={sourceControlProvider:"GITLAB",gitlabId:r.id,iid:r.iid,projectId:r.projectId,title:r.title,description:r.description,webUrl:r.webUrl,state:r.state,draft:r.draft,sourceBranch:r.sourceBranch,targetBranch:r.targetBranch,sha:r.sha,authorJson:JSON.stringify(r.author),reviewersJson:JSON.stringify(r.reviewers),labelsJson:JSON.stringify(r.labels),detailedMergeStatus:r.detailedMergeStatus,mergeWhenPipelineSucceeds:r.mergeWhenPipelineSucceeds,squashOnMerge:r.squashOnMerge,hasConflicts:r.hasConflicts,blockingDiscussionsResolved:r.blockingDiscussionsResolved,gitlabCreatedAt:new Date(r.createdAt),gitlabUpdatedAt:new Date(r.updatedAt),mergedAt:r.mergedAt?new Date(r.mergedAt):null};await i.worktreeGitLabMergeRequest?.upsert({where:{worktreeId:A},create:{worktreeId:A,...e},update:e})}else await i.worktreeGitLabMergeRequest?.deleteMany({where:{worktreeId:A}})})}async clearPullRequest(A,e=!0){let t=await (0,n.U)(),r=t.worktreeGitLabMergeRequest?.deleteMany({where:{worktreeId:A}});await t.$transaction([t.worktreePullRequest.deleteMany({where:{worktreeId:A}}),...r?[r]:[],...e?[t.worktree.update({where:{id:A},data:{pullRequestLookupOrigin:null,pullRequestLookupBranch:null,pullRequestLookupAt:null}})]:[]])}async synchronizePullRequests(A,e){let t=await (0,n.U)(),r=await this.gitHubService.effectiveCacheTtlSeconds("GitHubWorktreePullRequests")*1e3,i=new Set,a=new Map;for(let e of A){let A=e.codebase.repository.canonicalOrigin;!(e.branch&&e.pullRequestLookupOrigin?.toLowerCase()===A.toLowerCase()&&e.pullRequestLookupBranch===e.branch)&&(e.pullRequest||e.pullRequestLookupOrigin||e.pullRequestLookupBranch||e.pullRequestLookupAt)&&(await this.clearPullRequest(e.id),e.pullRequest=null,e.gitLabMergeRequest=null,e.pullRequestLookupOrigin=null,e.pullRequestLookupBranch=null,e.pullRequestLookupAt=null)}let s=A.filter(A=>A.pullRequest);if(s.length)try{let A=await this.gitHubService.pullRequestLiveStatuses(s.flatMap(A=>A.pullRequest?[A.pullRequest.id]:[]),{requestSource:"WORKTREES"});for(let e of s){let r=e.pullRequest;if(!r)continue;let n=A.get(r.id)??null;if(!n||"OPEN"!==n.state){a.set(e.id,r),e.pullRequest=null,i.add(e.id);continue}let s=G(n),o=G(r);JSON.stringify(s)!==JSON.stringify(o)&&(await t.worktreePullRequest.updateMany({where:{worktreeId:e.id},data:s}),e.pullRequest={...r,...n})}}catch{for(let A of s)e?.(A,"Could not refresh GitHub pull request status. Try again.")}let o=Date.now(),l=A.filter(A=>{if(A.pullRequest||!A.branch)return!1;let e=A.codebase.repository.canonicalOrigin;return!!/^github\.com\/[^/]+\/[^/]+$/i.test(e)&&(!!i.has(A.id)||A.pullRequestLookupOrigin?.toLowerCase()!==e.toLowerCase()||A.pullRequestLookupBranch!==A.branch||!A.pullRequestLookupAt||o-A.pullRequestLookupAt.getTime()>=r)}),c=new Map;for(let A of l){let e=A.codebase.repository.canonicalOrigin,t=`${i.has(A.id)?"force":"cached"}\0${e}`;c.set(t,[...c.get(t)??[],A])}await Promise.all([...c.entries()].map(async([A,t])=>{let r=A.startsWith("force\0"),i=t[0].codebase.repository.canonicalOrigin;try{let A=await this.gitHubService.pullRequestsForBranches(i,t.flatMap(A=>A.branch?[A.branch]:[]),{force:r,allowStaleOnError:!r,requestSource:"WORKTREES"});await Promise.all(t.map(async e=>{let t=e.branch,r=A.get(t)??null;await this.storePullRequest(e.id,i,t,r),e.pullRequest=r,e.pullRequestLookupOrigin=i,e.pullRequestLookupBranch=t,e.pullRequestLookupAt=new Date}))}catch{for(let A of t){let e=a.get(A.id);e&&(A.pullRequest=e)}for(let A of t)e?.(A,"Could not discover GitHub pull requests. Try again.")}}))}async synchronizeGitLabMergeRequests(A,e,t){if(!this.gitLabService)return;let r=Date.now(),i=t??await this.gitLabProjects(A,e);await (0,a.f)(A,async A=>{if(!A.branch)return;let t=A.codebase.repository.canonicalOrigin,n=i.get(t);if(!n)return;let a=A.pullRequestLookupOrigin?.toLowerCase()===t.toLowerCase()&&A.pullRequestLookupBranch===A.branch,s=A.gitLabMergeRequest?.detailedMergeStatus==="ci_still_running";if(!(a&&A.pullRequestLookupAt&&r-A.pullRequestLookupAt.getTime()<3e5)||s)try{let e=await this.gitLabService.mergeRequestForBranch(n.id,A.branch,s);await this.storeGitLabMergeRequest(A.id,t,A.branch,e),A.gitLabMergeRequest=e,A.pullRequest=null,A.pullRequestLookupOrigin=t,A.pullRequestLookupBranch=A.branch,A.pullRequestLookupAt=new Date}catch{e?.(A,"Could not refresh GitLab merge requests. Try again.")}})}async hydratePullRequestPipelines(A){let e=new Map((await this.pipelineStatus.snapshots(A.flatMap(A=>A.pullRequest?[{repositoryGithubId:A.pullRequest.repositoryGithubId,headSha:A.pullRequest.headRefOid}]:[]))).map(A=>[`${A.repositoryGithubId}\0${A.headSha}`,A]));for(let t of A){if(!t.pullRequest)continue;let A=e.get(`${t.pullRequest.repositoryGithubId}\0${t.pullRequest.headRefOid}`);t.pullRequest={...t.pullRequest,pipelineStatus:A?.pipelineStatus??t.pullRequest.pipelineStatus,pipelines:A?.pipelines??t.pullRequest.pipelines,pipelineRevision:A?.revision??t.pullRequest.pipelineRevision??0}}}async hydrateGitLabPipelines(A,e,t=!0,r){if(!this.gitLabService)return;let i=r??await this.gitLabProjects(A,e),n=new Map;for(let e of A){let A=i.get(e.codebase.repository.canonicalOrigin);if(!A||!e.headSha)continue;let t=`${A.id}\0${e.headSha}`,r=n.get(t)??{projectId:A.id,headSha:e.headSha,targets:[]};r.targets.push(e),n.set(t,r)}await (0,a.f)([...n.values()],async({projectId:A,headSha:r,targets:i})=>{try{let n=await this.gitLabService.pipelinesForCommit(A,r,{force:t,onWarning:A=>i.forEach(t=>e?.(t,A))});for(let A of i)A.gitLabPipelines=n.map(e=>({...e,worktreeId:A.id,worktreeHighlightColor:A.highlightColor}))}catch{for(let A of i)e?.(A,"Could not refresh GitLab pipelines; saved status is still available. Try again.")}})}async hydrateGitLabMergeRequestSummaries(A,e){this.gitLabService&&await (0,a.f)(A,async A=>{if(A.gitLabMergeRequest)try{A.gitLabMergeRequest=await this.gitLabService.mergeRequestSummary(A.gitLabMergeRequest,e?(t,r)=>e(A,t,r):void 0)}catch{e?.(A,"Could not refresh GitLab approval and discussion details. Try again.",["APPROVAL_STATE","UNRESOLVED_DISCUSSIONS_COUNT"])}})}async gitLabProjects(A,e){let t=[...new Set(A.map(A=>A.codebase.repository.canonicalOrigin))];return new Map(await (0,a.f)(t,async t=>{try{return[t,await this.gitLabService.projectForCanonicalOrigin(t)]}catch{for(let r of A)r.codebase.repository.canonicalOrigin===t&&e?.(r,"Could not read GitLab project settings. Check the GitLab connection and try again.");return[t,null]}}))}async hydrateJira(A,e,t){let r=[...new Set(A.flatMap(A=>A.ticketKey?[A.ticketKey]:[]))],i=e?await this.jiraService.storedSummaries(r):new Map(await (0,a.f)(r,async e=>{try{return[e,await this.jiraService.summary(e,!0)]}catch{for(let r of A)r.ticketKey===e&&t?.(r,"Could not refresh this Jira summary. Try again.");return[e,null]}}));for(let e of A){let A=e.ticketKey?i.get(e.ticketKey):null;e.ticketTitle=A?.summary??null,e.ticketStatus=A?.status??null}}async hydrateStoredMetadata(A){await Promise.all([this.hydratePullRequestPipelines(A),this.hydrateJira(A,!0),(async()=>{if(!this.gitLabService)return;let e=await this.gitLabProjects(A),t=new Map;for(let r of A){let A=e.get(r.codebase.repository.canonicalOrigin);A&&r.headSha&&t.set(`${A.id}\0${r.headSha}`,{projectId:A.id,headSha:r.headSha})}let r=await this.gitLabService.storedPipelines([...t.values()]);for(let t of A){let A=e.get(t.codebase.repository.canonicalOrigin);t.gitLabPipelines=(r.get(`${A?.id}\0${t.headSha}`)??[]).map(A=>({...A,worktreeId:t.id,worktreeHighlightColor:t.highlightColor}))}})()])}async enrichment({appId:A,worktreeId:e,kind:t,force:r=!1}){let i=performance.now(),a=await (0,n.U)(),[s,o]=await Promise.all([a.worktree.findMany({where:{missingAt:null,codebase:{repository:H(A,e)}},include:N}),a.codebaseSettings.findUnique({where:{id:"default"}})]),l=s.map(A=>this.view(A,o?.defaultJiraBranchRegex??"")),c="GITHUB"===t?l.filter(A=>/^github\.com\//i.test(A.codebase.repository.canonicalOrigin)):l,d=[],u=new Set,g=(A,e,t=[])=>{d.push({worktreeId:A.id,message:e,preserveFields:t})},h=(A,e)=>{u.add(A.id),g(A,e)};try{let A=t.startsWith("GITLAB")&&this.gitLabService?await this.gitLabProjects(c,h):new Map;switch(t.startsWith("GITLAB")&&(c=c.filter(e=>A.get(e.codebase.repository.canonicalOrigin))),t){case"GITHUB":await this.synchronizePullRequests(c,h),await this.hydratePullRequestPipelines(c);break;case"GITLAB_MERGE_REQUESTS":await this.synchronizeGitLabMergeRequests(c,h,A),await this.hydrateGitLabMergeRequestSummaries(c,g);break;case"GITLAB_PIPELINES":await this.hydrateGitLabPipelines(c,h,r,A);break;case"JIRA":await this.hydrateJira(c,!1,h);break;default:throw Error("Unknown worktree enrichment kind")}}catch{for(let A of c)h(A,"Could not refresh optional metadata. Try again.")}return{updates:c.filter(A=>!u.has(A.id)).map(A=>({worktree:{...A,sourceControlRequest:A.gitLabMergeRequest??A.pullRequest},canonicalOrigin:A.codebase.repository.canonicalOrigin})),durationMs:performance.now()-i,warnings:d}}async hydratedView(A,e=""){let t=this.view(A,e);return await Promise.all([this.hydratePullRequestPipelines([t]),this.hydrateGitLabPipelines([t]),this.hydrateGitLabMergeRequestSummaries([t])]),t.sourceControlRequest=t.gitLabMergeRequest??t.pullRequest,t}async refreshPullRequest(A){let e=await (0,n.U)(),t=await e.worktree.findUnique({where:{id:A},include:N});if(!t||t.missingAt)throw Error("Worktree not found");let r=t.codebase.repository.canonicalOrigin;if(!t.branch)throw Error("A named worktree branch is required");let i=await this.gitLabService?.projectForCanonicalOrigin(r);if(i){let n=await this.gitLabService.mergeRequestForBranch(i.id,t.branch,!0);await this.storeGitLabMergeRequest(A,r,t.branch,n);let a=await e.worktree.findUniqueOrThrow({where:{id:A},include:N});return this.publish(A,t.codebaseId),this.hydratedView(a)}if(!/^github\.com\/[^/]+\/[^/]+$/i.test(r))throw Error("The worktree repository does not match configured GitHub or GitLab projects");let a=await this.gitHubService.pullRequestsForBranches(r,[t.branch],{force:!0,allowStaleOnError:!1,requestSource:"WORKTREES"});await this.storePullRequest(A,r,t.branch,a.get(t.branch)??null);let s=await e.worktree.findUniqueOrThrow({where:{id:A},include:N});return this.publish(A,t.codebaseId),this.hydratedView(s)}async attachPullRequestForBranch(A,e,t){let r=await (0,n.U)(),i=(await r.worktree.findMany({where:{branch:e,missingAt:null},select:{id:!0,codebaseId:!0,codebase:{select:{repository:{select:{canonicalOrigin:!0}}}}}})).filter(e=>e.codebase.repository.canonicalOrigin.toLowerCase()===A.toLowerCase());return await Promise.all(i.map(async r=>{await this.storePullRequest(r.id,A,e,t),this.publish(r.id,r.codebaseId)})),i.length}async overview(A,e,t=!1){let r=performance.now();await this.cleanupExpired();let i=await (0,n.U)(),a=H(A,e),[s,o,d,u,g,h]=await Promise.all([i.worktree.findMany({where:{missingAt:null,...A||e?{codebase:{repository:a}}:{}},include:N,orderBy:[{codebase:{agent:{name:"asc"}}},{codebase:{repository:{name:"asc"}}},{primary:"desc"},{branch:"asc"},{folder:"asc"}]}),i.worktreeTag.findMany({orderBy:{name:"asc"}}),this.settings(),i.codebaseSettings.findUnique({where:{id:"default"}}),i.worktree.count({where:{missingAt:{not:null},...A||e?{codebase:{repository:a}}:{}}}),i.worktreeMove.findMany({where:{status:{in:R}},orderBy:{createdAt:"asc"}})]),C=u?.defaultJiraBranchRegex??"",p=s.map(A=>this.view(A,C)),I=new Set(p.map(A=>A.codebase.id)),m=A||e?h.filter(A=>I.has(A.sourceCodebaseId)||I.has(A.targetCodebaseId)):h,f=[...new Set(p.map(A=>A.codebase.repository.id))],E=(await i.workflow.findMany({where:{enabled:!0,archivedAt:null,activeVersionId:{not:null},quickActionKind:{in:["STANDARD","MERGE_CONFLICT"]},OR:[{quickActionRepositories:{none:{}}},{quickActionRepositories:{some:{repositoryId:{in:f}}}}]},include:{activeVersion:{include:{triggers:!0}},quickActionRepositories:{select:{repositoryId:!0}}},orderBy:[{name:"asc"},{id:"asc"}]})).filter(A=>A.activeVersion?.triggers.some(A=>{if(!(0,c.g)(A.kind))return!1;try{return"WORKTREE"===(0,l.F)(JSON.parse(A.configJson))}catch{return!1}}));for(let A of(t?await this.hydrateStoredMetadata(p):(await this.synchronizePullRequests(p),await this.synchronizeGitLabMergeRequests(p),await Promise.all([this.hydratePullRequestPipelines(p),this.hydrateGitLabPipelines(p),this.hydrateGitLabMergeRequestSummaries(p),this.hydrateJira(p,!1)])),p))A.sourceControlRequest=A.gitLabMergeRequest??A.pullRequest;let w=new Map;for(let A of p){let e=A.codebase.agent,t=w.get(e.id);t||(t={agent:e,codebases:[],codebaseMap:new Map},w.set(e.id,t));let r=t.codebaseMap.get(A.codebase.id);r||(r={codebase:A.codebase,repository:A.codebase.repository,worktrees:[],blockingJob:A.codebase.jobs[0]??null,iosBuildConfigured:A.codebase.repository.projects?.some(A=>"IOS_APP"===A.type)??!1,quickActions:E.filter(e=>"STANDARD"===e.quickActionKind&&(0===e.quickActionRepositories.length||e.quickActionRepositories.some(({repositoryId:e})=>e===A.codebase.repository.id))),mergeConflictQuickActions:E.filter(e=>"MERGE_CONFLICT"===e.quickActionKind&&(0===e.quickActionRepositories.length||e.quickActionRepositories.some(({repositoryId:e})=>e===A.codebase.repository.id)))},t.codebaseMap.set(A.codebase.id,r),t.codebases.push(r)),r.worktrees.push(A)}return{agents:[...w.values()].map(A=>({agent:A.agent,codebases:A.codebases})),tags:o,settings:d,hiddenCount:g,activeMoves:m,syncScope:{appId:A,worktreeId:e},durationMs:performance.now()-r}}async hidden(A){await this.cleanupExpired();let e=await (0,n.U)(),t=await e.codebaseSettings.findUnique({where:{id:"default"}}),r=(await e.worktree.findMany({where:{missingAt:{not:null},...A?{codebase:{repository:{apps:{some:{appId:A}}}}}:{}},include:N,orderBy:{missingAt:"desc"}})).map(A=>this.view(A,t?.defaultJiraBranchRegex??""));return await this.hydratePullRequestPipelines(r),r}async report(A,r){let i=await (0,n.U)(),a=[],s=!1;for(let n of r.slice(0,100)){let r=(0,e.D)(n),o=await i.codebase.findUnique({where:{id:r.codebaseId}});if(!o||o.agentId!==A)throw Error("Codebase not found for this agent");let l=r.worktrees.slice(0,1e3).map(A=>(0,e.y)(A)),c=await i.worktree.findMany({where:{codebaseId:o.id},select:{gitDirectory:!0,folder:!0,missingAt:!0}}),d=new Map(c.map(A=>[A.gitDirectory,A])),u=new Set(l.map(A=>A.gitDirectory));s||=l.some(A=>{let e=d.get(A.gitDirectory);return!e||e.folder!==A.folder||null!==e.missingAt})||r.complete&&c.some(A=>null===A.missingAt&&!u.has(A.gitDirectory)),await i.$transaction(async A=>{await A.codebase.update({where:{id:o.id},data:{defaultBranch:r.defaultBranch,localBranchesJson:JSON.stringify(r.localBranches),remoteBranchesJson:JSON.stringify(r.remoteBranches),...r.fetchedAt?{lastFetchedAt:new Date(r.fetchedAt)}:{},...r.fetchAttemptedAt?{lastFetchAttemptAt:new Date(r.fetchAttemptedAt),lastFetchError:r.fetchError}:r.fetchError?{lastFetchError:r.fetchError}:{}}});let e=[];for(let r of l){e.push(r.gitDirectory);let i=await A.worktree.upsert({where:{codebaseId_gitDirectory:{codebaseId:o.id,gitDirectory:r.gitDirectory}},create:{id:(0,t.randomUUID)(),codebaseId:o.id,gitDirectory:r.gitDirectory,...this.inventoryData(r)},update:{}}),n=i.branch!==r.branch,s=await A.worktree.updateMany({where:{id:i.id,OR:[{lastCheckedAt:null},{lastCheckedAt:{lt:new Date(r.checkedAt)}}]},data:{...this.inventoryData(r),missingAt:null,...n?{pullRequestLookupOrigin:null,pullRequestLookupBranch:null,pullRequestLookupAt:null}:{}}});n&&s.count>0&&await A.worktreePullRequest.deleteMany({where:{worktreeId:i.id}}),a.push(i.id)}r.complete&&await A.worktree.updateMany({where:{codebaseId:o.id,missingAt:null,...e.length?{gitDirectory:{notIn:e}}:{}},data:{missingAt:new Date}})}),this.publish(null,o.id)}return await this.cleanupExpired(),s&&await this.skillsService?.requestAutoReconcile(),i.worktree.findMany({where:{id:{in:a}},include:N})}async reportActivity(A,t){let r=(0,e.a)(t),i=await (0,n.U)(),a=await i.worktree.findFirst({where:{codebaseId:r.codebaseId,gitDirectory:r.gitDirectory,missingAt:null,codebase:{agentId:A}},select:{id:!0,codebaseId:!0,branch:!0}});if(!a)throw Error("Worktree activity source was not found");let s=void 0!==r.branch||void 0!==r.headSha||void 0!==r.upstream||void 0!==r.ahead||void 0!==r.behind||void 0!==r.syncState||void 0!==r.baseAhead||void 0!==r.baseBehind,o=!0;if(s||void 0!==r.hasStagedChanges||void 0!==r.hasUnstagedChanges||void 0!==r.rebaseInProgress||void 0!==r.hasConflicts||void 0!==r.codeStateHash||void 0!==r.pushStatus){let A=void 0!==r.branch&&r.branch!==a.branch;(o=(await i.worktree.updateMany({where:{id:a.id,OR:[{lastCheckedAt:null},{lastCheckedAt:{lt:new Date(r.observedAt)}}]},data:{...void 0===r.branch?{}:{branch:r.branch},...A?{pullRequestLookupOrigin:null,pullRequestLookupBranch:null,pullRequestLookupAt:null}:{},...void 0===r.headSha?{}:{headSha:r.headSha},...void 0===r.upstream?{}:{upstream:r.upstream},...void 0===r.ahead?{}:{ahead:r.ahead},...void 0===r.behind?{}:{behind:r.behind},...void 0===r.syncState?{}:{syncState:r.syncState},...void 0===r.baseAhead?{}:{baseAhead:r.baseAhead},...void 0===r.baseBehind?{}:{baseBehind:r.baseBehind},lastCheckedAt:new Date(r.observedAt),...void 0===r.hasStagedChanges?{}:{hasStagedChanges:r.hasStagedChanges},...void 0===r.hasUnstagedChanges?{}:{hasUnstagedChanges:r.hasUnstagedChanges},...void 0===r.rebaseInProgress?{}:{rebaseInProgress:r.rebaseInProgress},...void 0===r.hasConflicts?{}:{hasConflicts:r.hasConflicts},...void 0===r.codeStateHash?{}:{codeStateHash:r.codeStateHash},...void 0===r.pushStatus?{}:{pushStatus:r.pushStatus}}})).count>0)&&(A&&await i.worktreePullRequest.deleteMany({where:{worktreeId:a.id}}),this.publish(a.id,a.codebaseId))}let l={worktreeId:a.id,...void 0===r.branch?{}:{branch:r.branch},...void 0===r.headSha?{}:{headSha:r.headSha},...void 0===r.upstream?{}:{upstream:r.upstream},...void 0===r.ahead?{}:{ahead:r.ahead},...void 0===r.behind?{}:{behind:r.behind},...void 0===r.syncState?{}:{syncState:r.syncState},...void 0===r.baseAhead?{}:{baseAhead:r.baseAhead},...void 0===r.baseBehind?{}:{baseBehind:r.baseBehind},...void 0===r.hasStagedChanges?{}:{hasStagedChanges:r.hasStagedChanges},...void 0===r.hasUnstagedChanges?{}:{hasUnstagedChanges:r.hasUnstagedChanges},...void 0===r.rebaseInProgress?{}:{rebaseInProgress:r.rebaseInProgress},...void 0===r.hasConflicts?{}:{hasConflicts:r.hasConflicts},...void 0===r.pushStatus?{}:{pushStatus:r.pushStatus},observedAt:r.observedAt};return this.watchDemand.has(a.id)&&o&&g._H.publish((0,g.ys)(a.id),{worktreeInspectionChanged:l}),l}inventoryData(A){return{folder:A.folder,relativePath:A.relativePath,primary:A.primary,branch:A.branch,headSha:A.headSha,codeStateHash:A.codeStateHash??null,upstream:A.upstream,ahead:A.ahead,behind:A.behind,syncState:A.syncState,baseAhead:A.baseAhead,baseBehind:A.baseBehind,hasStagedChanges:A.hasStagedChanges??!1,hasUnstagedChanges:A.hasUnstagedChanges??!1,rebaseInProgress:A.rebaseInProgress??!1,hasConflicts:A.hasConflicts??!1,pushStatus:A.pushStatus??"UNKNOWN",availability:A.availability,statusError:A.error,lastCheckedAt:new Date(A.checkedAt)}}async updateBaseBranch(A,e){let t=await (0,n.U)(),r=await t.worktree.findUnique({where:{id:A},include:{codebase:!0}});if(!r||r.missingAt)throw Error("Worktree not found");let i=e?.trim()||null;if(i&&!U(r.codebase.remoteBranchesJson).includes(i))throw Error("The selected origin branch is unavailable; fetch and try again");let a=await t.worktree.update({where:{id:A},data:{baseBranchOverride:i},include:N});return this.publish(A,r.codebaseId),await this.restartWatch(A),this.hydratedView(a)}requireColor(A){if(null===A||""===A)return null;if(!O.includes(A))throw Error("Unknown worktree color");return A}async updateHighlight(A,e){let t=await (0,n.U)(),r=await t.worktree.update({where:{id:A},data:{highlightColor:this.requireColor(e),initialHighlightApplied:!0},include:N});return this.publish(A,r.codebaseId),this.hydratedView(r)}async setTags(A,e){let t=await (0,n.U)(),r=[...new Set(e)].slice(0,100);if(await t.worktreeTag.count({where:{id:{in:r}}})!==r.length)throw Error("One or more tags were not found");await t.$transaction([t.worktreeTagAssignment.deleteMany({where:{worktreeId:A}}),...r.length?[t.worktreeTagAssignment.createMany({data:r.map(e=>({worktreeId:A,tagId:e}))})]:[]]);let i=await t.worktree.findUniqueOrThrow({where:{id:A},include:N});return this.publish(A,i.codebaseId),this.hydratedView(i)}async saveTag(A){let e=A.name.trim();if(!e||e.length>40)throw Error("Tag names must contain 1–40 characters");let r=this.requireColor(A.color),i=await (0,n.U)(),a=(await i.worktreeTag.findMany()).find(A=>A.name.toLocaleLowerCase()===e.toLocaleLowerCase());if(a&&a.id!==A.id)throw Error("Tag names must be unique");let s=A.id?await i.worktreeTag.update({where:{id:A.id},data:{name:e,color:r}}):await i.worktreeTag.create({data:{id:(0,t.randomUUID)(),name:e,color:r}});return this.publish(null,null),s}async deleteTag(A){let e=await (0,n.U)(),t=await e.worktreeTag.deleteMany({where:{id:A}});return t.count&&this.publish(null,null),t.count>0}async repositoryTakenBranches(A){let e=await (0,n.U)();return new Set((await e.codebase.findMany({where:{repositoryId:A},select:{localBranchesJson:!0,remoteBranchesJson:!0,worktrees:{where:{missingAt:null},select:{branch:!0}}}})).flatMap(A=>[...U(A.localBranchesJson),...U(A.remoteBranchesJson),...A.worktrees.flatMap(A=>A.branch?[A.branch]:[])]))}requireBaseBranch(A,e){let t=e.trim();if(!t||!U(A.remoteBranchesJson).includes(t))throw Error("The selected origin base branch is unavailable; fetch and try again");return t}async ticketContext(A){let e=await (0,n.U)(),t=await e.codebase.findUnique({where:{id:A.codebaseId},include:{agent:!0,repository:!0}});if(!t)throw Error("Codebase not found");let r=null;if(A.worktreeId){let t=await e.worktree.findFirst({where:{id:A.worktreeId,codebaseId:A.codebaseId,missingAt:null},select:{branch:!0}});if(!t)throw Error("Worktree not found for this codebase");r=t.branch}return{codebase:t,currentBranch:r,ticket:await this.jiraService.branchTicket(A.ticketKey)}}async aiTicketNaming(A,t){if(!v(A.agent))throw Error("Agent is offline");if(!T(A.agent).includes(e.Q))throw Error("Update this agent to use AI branch naming");let r=/\{\{\s*ticket\.description\s*\}\}/.test(t.branchNamingPrompt)?await this.jiraService.branchTicket(t.ticketKey,!0):t,i=(0,e.q)({provider:r.branchNamingProvider,model:r.branchNamingModel,effort:r.branchNamingEffort,prompt:(0,e.X)(r.branchNamingPrompt,{key:r.ticketKey,type:r.ticketType??"",title:r.ticketTitle,description:r.ticketDescription??""})}),a=await (0,n.U)(),s=await a.runProviderSync.findUnique({where:{agentId_provider:{agentId:A.agentId,provider:i.provider}}});if(!T(A.agent).includes(`runs.provider.${i.provider.toLowerCase()}`)||s?.status==="FAILED")throw Error(`${i.provider} is unavailable on this agent`);let o=s?.catalogJson?JSON.parse(s.catalogJson):null,l=o?.models?.find(A=>A.id===i.model);if("default"!==i.model&&!l)throw Error(`Model ${i.model} is unavailable on this agent; select an available model in Jira project settings`);if(l?.efforts?.length&&i.effort&&"auto"!==i.effort&&!l.efforts.includes(i.effort))throw Error("The selected model does not support this effort");return i}async ticketBranch(A,t,r,i){let n,a=await this.jiraService.branchTicket(t?.trim()??"");if(null!=i&&i.trim())n=(0,e.k)(i);else if("AI"===a.branchNamingMode)throw Error("Generate an AI branch name before previewing it");else n=await (0,C._)(a.branchNamingScript,{ticketKey:a.ticketKey,type:a.ticketType??"",title:a.ticketTitle});let s=await this.repositoryTakenBranches(A.repositoryId),o=n.filter(A=>A===r||!s.has(A));if(!o.length)throw Error("Every generated ticket branch name is already taken");return{ticket:a,candidates:o}}async worktreeTicketBranchContext(A){let{codebase:e,currentBranch:t,ticket:r}=await this.ticketContext(A),i="AI"===r.branchNamingMode?null:(await this.ticketBranch(e,r.ticketKey,t)).candidates[0];return{ticketKey:r.ticketKey,ticketTitle:r.ticketTitle,ticketType:r.ticketType,projectKey:r.projectKey,branchNamingMode:r.branchNamingMode??"JAVASCRIPT",branchName:i}}async generateTicketBranch(A){let{codebase:t,currentBranch:r,ticket:i}=await this.ticketContext(A);if("AI"!==i.branchNamingMode)throw Error("AI branch naming is not enabled for this Jira project");let n=await this.aiTicketNaming(t,i);return this.agentControl.createJob({agentId:t.agentId,codebaseId:t.id,worktreeId:A.worktreeId??null,kind:e.Q,payload:{naming:n,takenBranches:[...await this.repositoryTakenBranches(t.repositoryId)],currentBranch:r},idempotencyKey:`jira:branch:generate:${A.requestId}:${t.id}`,timeoutSeconds:120})}async previewTicketBranch(A){let r=await this.worktreeTicketBranchContext(A);if(r.branchName)return{...r,branchName:r.branchName};let i=await this.generateTicketBranch({...A,requestId:(0,t.randomUUID)()}),n=Date.now()+125e3;for(;Date.now()<n;){let A=await this.agentControl.getJob(i.id);if(!A)throw Error("Branch generation job disappeared");if("SUCCEEDED"===A.status){let t=JSON.parse(A.resultJson??"{}").branchName;return{...r,branchName:(0,e.k)(t??"")[0]}}if(!["QUEUED","RUNNING"].includes(A.status))throw Error(A.error??"Branch generation failed");await new Promise(A=>setTimeout(A,250))}throw await this.agentControl.cancelJob(i.id),Error("Branch generation timed out")}async ticketKeyForWorktree(A,e){let t=await (0,n.U)(),[r,i]=await Promise.all([t.worktree.findFirst({where:{id:A,missingAt:null},select:{branch:!0,codebase:{select:{repository:{select:{jiraBranchRegex:!0}}}}}}),t.codebaseSettings.findUnique({where:{id:k}})]);if(void 0!==e&&r?.branch!==e)throw Error("The worktree branch changed after reviewers were assigned. Open the original Jira ticket to update its status.");if(!r)return null;let a=r.codebase.repository.jiraBranchRegex??i?.defaultJiraBranchRegex??"";return J(r.branch,a)}async workflowSessionDataForWorktree(A,e={}){var t;let r=await (0,n.U)(),[i,a]=await Promise.all([r.worktree.findFirst({where:{id:A,...e.includeMissing?{}:{missingAt:null}},select:{id:!0,folder:!0,branch:!0,baseBranchOverride:!0,headSha:!0,upstream:!0,ahead:!0,behind:!0,syncState:!0,baseAhead:!0,baseBehind:!0,rebaseInProgress:!0,hasConflicts:!0,pushStatus:!0,hasStagedChanges:!0,hasUnstagedChanges:!0,missingAt:!0,pullRequest:!0,codebase:{select:{id:!0,folder:!0,agentId:!0,branch:!0,headSha:!0,defaultBranch:!0,agent:{select:{id:!0,name:!0,hostname:!0}},repository:{select:{id:!0,name:!0,displayOrigin:!0,canonicalOrigin:!0,jiraBranchRegex:!0}}}}}}),r.codebaseSettings.findUnique({where:{id:k}})]);if(!i)return{};let s=i.codebase.repository,o=s.jiraBranchRegex??a?.defaultJiraBranchRegex??"",l=J(i.branch,o),c=null;if(l)try{c=await this.jiraService.cachedTicket(l)}catch{}let d=i.pullRequest?await this.pipelineStatus.snapshot({repositoryGithubId:i.pullRequest.repositoryGithubId,headSha:i.pullRequest.headRefOid}):null;return{worktree:{id:i.id,path:i.folder,branch:i.branch,baseBranch:i.baseBranchOverride??i.codebase.defaultBranch,headSha:i.headSha,upstream:i.upstream,ahead:i.ahead,behind:i.behind,syncState:i.syncState,baseAhead:i.baseAhead,baseBehind:i.baseBehind,rebaseInProgress:i.rebaseInProgress,hasConflicts:i.hasConflicts,pushStatus:i.pushStatus,dirty:i.hasStagedChanges||i.hasUnstagedChanges,missingAt:i.missingAt?.toISOString()??null},codebase:{id:i.codebase.id,folder:i.codebase.folder,agentId:i.codebase.agentId,branch:i.codebase.branch,headSha:i.codebase.headSha},agent:i.codebase.agent,repo:{id:s.id,name:s.name,url:s.displayOrigin,canonicalOrigin:s.canonicalOrigin,displayOrigin:s.displayOrigin,defaultBranch:i.codebase.defaultBranch},...i.pullRequest?{pr:{...t=_(i.pullRequest,d),headBranch:t.headRefName,headSha:t.headRefOid,merged:"MERGED"===t.state}}:{},...l?{ticket:{key:l,title:c?.summary??null,status:c?.status??null,projectKey:c?.projectKey??null}}:{}}}async workflowSessionDataForPullRequest(A,e,t){let r=A.trim().toLowerCase(),i=e.trim().toLowerCase();if(!r||!i||!Number.isInteger(t)||t<1)return{};let a=await (0,n.U)(),s=await a.worktreePullRequest.findMany({where:{number:t,worktree:{missingAt:null}},select:{worktreeId:!0,repositoryNameWithOwner:!0},orderBy:{updatedAt:"desc"}}),o=`${r}/${i}`,l=s.find(({repositoryNameWithOwner:A})=>A.toLowerCase()===o);return l?this.workflowSessionDataForWorktree(l.worktreeId):{}}async resolveBranchSelection(A,t,r){let i=this.requireBaseBranch(A,t.baseBranch);if("TICKET"===t.mode){let e=await this.jiraService.branchTicket(t.ticketKey??"");if("AI"===e.branchNamingMode&&!t.branchName?.trim())return{baseBranch:i,mode:"NEW",candidates:[],aiNaming:{naming:await this.aiTicketNaming(A,e),takenBranches:[...await this.repositoryTakenBranches(A.repositoryId)],currentBranch:r?.branch??null}};let{candidates:n}=await this.ticketBranch(A,t.ticketKey,r?.branch??null,t.branchName);return{baseBranch:i,mode:"NEW",candidates:n}}let a=t.branchName?.trim()??"";if(!(0,e.S)(a))throw Error("Enter a valid Git branch name");if("NEW"===t.mode){if((await this.repositoryTakenBranches(A.repositoryId)).has(a))throw Error(`Branch ${a} is already taken`);return{baseBranch:i,mode:"NEW",candidates:[a]}}if("EXISTING"!==t.mode)throw Error("Unknown worktree branch mode");if(!new Set([...U(A.localBranchesJson),...U(A.remoteBranchesJson)]).has(a))throw Error(`Existing branch ${a} is unavailable; refresh and try again`);let s=await (0,n.U)();if(await s.worktree.findFirst({where:{codebaseId:A.id,branch:a,missingAt:null,...r?{id:{not:r.id}}:{}},select:{id:!0}}))throw Error(`Branch ${a} is checked out in another worktree`);return{baseBranch:i,mode:"EXISTING",candidates:[a]}}async createWorktree(A){let t=await this.requireRunnableCodebase(A.codebaseId),r=await this.resolveBranchSelection(t,A.selection,null);return this.agentControl.createJob({agentId:t.agentId,codebaseId:t.id,kind:e.B,payload:{codebaseId:t.id,rootFolder:t.folder,folder:null,gitDirectory:null,expectedOrigin:t.repository.canonicalOrigin,baseBranch:r.baseBranch,action:"CREATE",mode:r.mode,candidates:r.candidates,...r.aiNaming?{aiNaming:r.aiNaming}:{},stashOnFailure:!1,preparations:(t.repository.preparations??[]).map(I.U)},idempotencyKey:`worktree:branch:create:${A.requestId}:${t.id}`,timeoutSeconds:600})}async changeWorktreeBranch(A){let t=await this.requireRunnable(A.worktreeId,e.B);if((t.codebase.repository.preparations?.length??0)>0&&!T(t.codebase.agent).includes(e.r))throw Error("Agent must be updated to apply repository preparations");let r=await this.resolveBranchSelection(t.codebase,A.selection,{id:t.id,branch:t.branch});return this.agentControl.createJob({agentId:t.codebase.agentId,codebaseId:t.codebaseId,worktreeId:t.id,kind:e.B,payload:{codebaseId:t.codebaseId,rootFolder:t.codebase.folder,folder:t.folder,gitDirectory:t.gitDirectory,expectedOrigin:t.codebase.repository.canonicalOrigin,baseBranch:r.baseBranch,action:"CHANGE",mode:r.mode,candidates:r.candidates,...r.aiNaming?{aiNaming:r.aiNaming}:{},stashOnFailure:!!A.stashOnFailure,preparations:(t.codebase.repository.preparations??[]).map(I.U)},idempotencyKey:`worktree:branch:change:${A.requestId}:${t.id}`,timeoutSeconds:600})}async getMove(A){return(await (0,n.U)()).worktreeMove.findUnique({where:{id:A}})}async moveWorktree(A){let r,i=await (0,n.U)(),a=await i.worktreeMove.findUnique({where:{sourceWorktreeId_requestId:{sourceWorktreeId:A.sourceWorktreeId,requestId:A.requestId}}});if(a)return a;let s=await this.requireRunnable(A.sourceWorktreeId,e.W);if(!s.branch||!s.headSha)throw Error("A named source branch is required");if(s.hasStagedChanges||s.hasUnstagedChanges||"READY"!==s.pushStatus)throw Error("The source branch must be clean and safely pushable before moving");if(A.deleteSource&&s.primary)throw Error("The primary worktree cannot be deleted after moving");if(A.deleteSource&&!T(s.codebase.agent).includes(e.Z))throw Error("Source agent must be updated to remove the old worktree");let o=await this.requireRunnableCodebase(A.targetCodebaseId,e.R);if(s.codebase.repositoryId!==o.repositoryId||s.codebase.agentId===o.agentId)throw Error("The destination must be the same repository on another agent");let l=A.targetWorktreeId?await i.worktree.findFirst({where:{id:A.targetWorktreeId,codebaseId:o.id,missingAt:null,availability:"AVAILABLE"}}):null;if(A.targetWorktreeId&&!l)throw Error("Destination worktree not found");if(await i.worktree.findFirst({where:{codebaseId:o.id,branch:s.branch,missingAt:null,...l?{id:{not:l.id}}:{}},select:{id:!0}}))throw Error("The source branch is already checked out in another destination worktree");let c=o.defaultBranch??s.codebase.defaultBranch;if(!c)throw Error("The destination default branch is unavailable");let d=(0,t.randomUUID)();try{r=await i.worktreeMove.create({data:{id:d,requestId:A.requestId,sourceWorktreeId:s.id,sourceCodebaseId:s.codebaseId,targetCodebaseId:o.id,targetWorktreeId:l?.id??null,destinationMode:l?"EXISTING":"NEW",branch:s.branch,headSha:s.headSha,baseBranch:c,deleteSource:A.deleteSource,status:"PUSHING"}})}catch(t){let e=await i.worktreeMove.findUnique({where:{sourceWorktreeId_requestId:{sourceWorktreeId:A.sourceWorktreeId,requestId:A.requestId}}});if(e)return e;throw t}try{let A=await this.agentControl.createJob({agentId:s.codebase.agentId,codebaseId:s.codebaseId,worktreeId:s.id,kind:e.W,payload:{moveId:r.id,codebaseId:s.codebaseId,folder:s.folder,gitDirectory:s.gitDirectory,expectedOrigin:s.codebase.repository.canonicalOrigin,branch:s.branch,expectedHeadSha:s.headSha},idempotencyKey:`worktree:move:push:${r.id}`,timeoutSeconds:600});return r=await i.worktreeMove.update({where:{id:r.id},data:{sourceJobId:A.id}}),this.publish(s.id,s.codebaseId),r}catch(A){throw await i.worktreeMove.update({where:{id:r.id},data:{status:"FAILED",error:A instanceof Error?A.message:String(A),finishedAt:new Date}}),A}}async retryWorktreeMoveWithStash(A){let e=await (0,n.U)(),t=await e.worktreeMove.findUnique({where:{id:A}});if(!t||"AWAITING_STASH"!==t.status)throw Error("This move is not waiting for a stash decision");let r=await this.createMoveCheckoutJob(t,!0);if(1!==(await e.worktreeMove.updateMany({where:{id:A,status:"AWAITING_STASH"},data:{status:"CHECKING_OUT",targetJobId:r.id,error:null}})).count){let t=await e.worktreeMove.findUniqueOrThrow({where:{id:A}});if("AWAITING_STASH"!==t.status)return t;throw Error("The move state changed; refresh and try again")}return this.publish(t.sourceWorktreeId,t.sourceCodebaseId),e.worktreeMove.findUniqueOrThrow({where:{id:A}})}async cancelWorktreeMove(A){let e=await (0,n.U)(),t=await e.worktreeMove.findUnique({where:{id:A}});if(!t||"AWAITING_STASH"!==t.status)throw Error("Only a move waiting for a stash decision can be cancelled");let r=await e.worktreeMove.update({where:{id:A},data:{status:"CANCELLED",finishedAt:new Date}});return this.publish(t.sourceWorktreeId,t.sourceCodebaseId),r}async deleteWorktree(A){let t=await this.requireRunnable(A.worktreeId,e.Z);if(t.primary)throw Error("The primary worktree cannot be deleted");if(void 0!==A.expectedBranch&&t.branch!==A.expectedBranch)throw Error("The worktree branch changed before deletion");if(!0===A.requireClean&&void 0!==A.expectedHeadSha&&t.headSha!==A.expectedHeadSha)throw Error("The worktree HEAD changed before deletion");if(A.deleteRemoteBranch&&(!t.branch||t.branch===t.codebase.defaultBranch))throw Error("The default remote branch cannot be deleted");return this.agentControl.createJob({agentId:t.codebase.agentId,codebaseId:t.codebaseId,worktreeId:t.id,kind:e.Z,payload:{moveId:null,codebaseId:t.codebaseId,rootFolder:t.codebase.folder,...T(t.codebase.agent).includes(e.w)?{derivedData:{mode:t.codebase.agent.derivedDataLocationMode??"DEFAULT",path:t.codebase.agent.derivedDataPath??null}}:{},folder:t.folder,gitDirectory:t.gitDirectory,expectedOrigin:t.codebase.repository.canonicalOrigin,branch:void 0===A.expectedBranch?t.branch:A.expectedBranch,defaultBranch:t.codebase.defaultBranch,deleteRemoteBranch:A.deleteRemoteBranch,requireClean:A.requireClean??!1,expectedHeadSha:!0===A.requireClean?A.expectedHeadSha??t.headSha:null},idempotencyKey:`worktree:delete:${A.requestId}:${t.id}`,timeoutSeconds:600})}async inspect(A,t){let r=await this.requireRunnable(A,e.H,!0),i=await this.createSerializedCodebaseJob({agentId:r.codebase.agentId,codebaseId:r.codebaseId,worktreeId:r.id,kind:e.H,payload:this.payload(r),idempotencyKey:`worktree:inspect:${t}:${A}`,timeoutSeconds:30,visibility:"SYSTEM"});try{let A=await this.waitForJob(i.id),e=j(A).detail;if(!e||"object"!=typeof e)throw Error("Invalid worktree detail");let n=Array.isArray(e.changes)?e.changes.map(A=>A&&"object"==typeof A&&!Array.isArray(A)?{...A,changeType:"string"==typeof A.changeType?A.changeType:"MODIFIED"}:A):[],a={...e,changes:n,branchChanges:Array.isArray(e.branchChanges)?e.branchChanges:[],branchChangesTruncated:!0===e.branchChangesTruncated};if(this.workflowEvents){let A=n.filter(A=>A&&"object"==typeof A&&!Array.isArray(A)&&!0===A.conflicted),e=(0,d.d)(await this.workflowSessionDataForWorktree(r.id),{repo:{id:r.codebase.repository.id,name:r.codebase.repository.name,url:r.codebase.repository.displayOrigin,canonicalOrigin:r.codebase.repository.canonicalOrigin,displayOrigin:r.codebase.repository.displayOrigin,defaultBranch:r.codebase.defaultBranch},codebase:{id:r.codebase.id,folder:r.codebase.folder,agentId:r.codebase.agentId},worktree:{id:r.id,path:r.folder,branch:r.branch,headSha:r.headSha,conflicted:A.length>0,conflicts:A}});await this.workflowEvents.record({kind:"WORKTREE_CONFLICT",subjectKey:r.id,dedupeKey:`worktree-conflict:${r.id}:${t}`,payload:{...e,sessionData:e,cursorValue:A.length?A.map(A=>String(A.path??"")):[]}})}return a}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:i.id,visibility:"SYSTEM"}})}}async inspectDiff(A,t,r){let i=await this.requireRunnable(A,e.U,!0),a=this.payload(i);if(!a.baseBranch)throw Error("A base branch is required");let s={...a,baseBranch:a.baseBranch,scope:t.scope,path:t.path??null,previousPath:t.previousPath??null,commitSha:t.commitSha??null,uploadId:null,side:null},o=JSON.stringify([i.codebase.agentId,i.id,i.branch,i.headSha,i.codeStateHash,s]);return this.coalesceInspection(this.diffInspections,o,async()=>{let t=await this.createSerializedCodebaseJob({agentId:i.codebase.agentId,codebaseId:i.codebaseId,worktreeId:i.id,kind:e.U,payload:s,idempotencyKey:`worktree:diff:${r}:${A}`,timeoutSeconds:30,visibility:"SYSTEM"});try{let A=await this.waitForJob(t.id),e=j(A).diff;if(!e||"object"!=typeof e)throw Error("Invalid worktree diff result");return e}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:t.id,visibility:"SYSTEM"}})}})}async prepareDiffAsset(A,t,r){let i=await this.requireRunnable(A,e.L,!0),a=this.payload(i);if(!a.baseBranch)throw Error("A base branch is required");let s=await this.createSerializedCodebaseJob({agentId:i.codebase.agentId,codebaseId:i.codebaseId,worktreeId:i.id,kind:e.L,payload:{...a,baseBranch:a.baseBranch,scope:t.scope,path:t.path,previousPath:t.previousPath??null,commitSha:t.commitSha??null,uploadId:r,side:t.side},idempotencyKey:`worktree:diff-asset:${r}:${A}`,timeoutSeconds:60,visibility:"SYSTEM"});try{j(await this.waitForJob(s.id))}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:s.id,visibility:"SYSTEM"}})}}async diffAssetAgentId(A){let e=await (0,n.U)(),t=await e.worktree.findUnique({where:{id:A},select:{codebase:{select:{agentId:!0}}}});return t?.codebase.agentId??null}async runOperation(A,t,r,i=!1){if(!e.i.includes(t))throw Error("Unknown worktree operation");let n=await this.requireRunnable(A,e.l),a=await this.settings(),s=n.codebase.repository.preparations??[];if(s.length>0&&!T(n.codebase.agent).includes(e.r))throw Error("Agent must be updated to use repository preparations");return this.agentControl.createJob({agentId:n.codebase.agentId,codebaseId:n.codebaseId,worktreeId:n.id,kind:e.l,payload:{...this.payload(n),operation:t,forcePreparations:i,preparations:s.map(I.U),..."OPEN_EDITOR"===t?{editorVariant:a.editorVariant}:{}},idempotencyKey:`worktree:operation:${r}:${A}`,timeoutSeconds:"OPEN_EDITOR"===t?30:600})}async commitWorktree(A){if(!A.requestId.trim())throw Error("requestId is required");if(!A.message.trim())throw Error("Commit message is required");let t=!1!==A.stageAll,r=A.paths??[];if(!t&&0===r.length)throw Error("A partial commit requires at least one path");let i=await this.requireRunnable(A.worktreeId,e.T);return this.agentControl.createJob({agentId:i.codebase.agentId,codebaseId:i.codebaseId,worktreeId:i.id,kind:e.T,payload:{...this.payload(i),message:A.message,signed:A.signed??null,stageAll:t,paths:r},idempotencyKey:`worktree:commit:${A.requestId}:${A.worktreeId}`,timeoutSeconds:120})}async createAutoSyncJob(A,t,r,i,n=!1,a,s){let o=await this.requireRunnable(A,e.d),l=this.payload(o);if(s&&!T(o.codebase.agent).includes(e.f))throw Error("Update the agent to use Auto Merge branch syncing");if(a&&(o.branch!==r||o.codebaseId!==a.codebaseId||o.codebase.agentId!==a.agentId||l.folder!==a.folder||l.gitDirectory!==a.gitDirectory||void 0!==a.baseBranch&&l.baseBranch!==a.baseBranch||l.expectedOrigin!==a.expectedOrigin))throw Error("Worktree changed before Bulk Sync could be dispatched");if(!l.baseBranch&&!s)throw Error("Auto Sync requires a base branch");if((o.codebase.repository.preparations?.length??0)>0&&!T(o.codebase.agent).includes(e.r))throw Error("Agent must be updated to use repository preparations");return this.agentControl.createJob({agentId:o.codebase.agentId,codebaseId:o.codebaseId,worktreeId:o.id,kind:e.d,payload:{...l,expectedBranch:r,baseBranch:s?.targetBranch??l.baseBranch,...s?{mergeGuard:s}:{},phase:t,forcePreparations:n,preparations:(o.codebase.repository.preparations??[]).map(I.U)},idempotencyKey:`worktree:auto-sync:${t.toLowerCase()}:${i}:${A}`,timeoutSeconds:600})}publishAutomationChange(A,e=null){this.publish(A,e)}async inspectGitState(A,t){if(!t.trim())throw Error("requestId is required");let r=await this.requireRunnable(A,e.V,!0),a=JSON.stringify([r.codebase.agentId,r.id,r.branch,r.headSha,r.codeStateHash,this.payload(r)]);return this.coalesceInspection(this.gitStateInspections,a,async()=>{let a=await this.createSerializedCodebaseJob({agentId:r.codebase.agentId,codebaseId:r.codebaseId,worktreeId:r.id,kind:e.V,payload:{action:"STATE",codebaseId:r.codebaseId,folder:r.folder,gitDirectory:r.gitDirectory,expectedOrigin:r.codebase.repository.canonicalOrigin},idempotencyKey:`worktree:git:state:${t}:${A}`,timeoutSeconds:30,visibility:"SYSTEM"});try{let A=await this.waitForJob(a.id);return(0,i.G)(j(A).state)}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:a.id,visibility:"SYSTEM"}})}})}coalesceInspection(A,e,t){let r=A.get(e);if(r)return r;let i=t().finally(()=>{A.get(e)===i&&A.delete(e)});return A.set(e,i),i}async runGitOperation(A){if(!A.requestId.trim())throw Error("requestId is required");if(!e.g.includes(A.operation))throw Error("Unknown worktree Git operation");let t=await this.requireRunnable(A.worktreeId,e.o);return this.agentControl.createJob({agentId:t.codebase.agentId,codebaseId:t.codebaseId,worktreeId:t.id,kind:e.o,payload:{codebaseId:t.codebaseId,folder:t.folder,gitDirectory:t.gitDirectory,expectedOrigin:t.codebase.repository.canonicalOrigin,baseBranch:t.baseBranchOverride??t.codebase.defaultBranch??null,defaultBranch:t.codebase.defaultBranch,operation:A.operation,...A.branch?{branch:A.branch}:{},...A.stashOid?{stashOid:A.stashOid}:{},..."SWITCH_BRANCH"===A.operation?{stashChanges:!!A.stashChanges}:{}},idempotencyKey:`worktree:git:${A.operation}:${A.requestId}:${A.worktreeId}`,timeoutSeconds:"PULL_BRANCH"===A.operation?300:60})}payload(A){return{codebaseId:A.codebaseId,folder:A.folder,gitDirectory:A.gitDirectory,expectedOrigin:A.codebase.repository.canonicalOrigin,baseBranch:A.baseBranchOverride??A.codebase.defaultBranch??null}}async createSerializedCodebaseJob(A){let e=await (0,n.U)(),t=Date.now()+3e4;for(;Date.now()<t;){let r=await e.agentJob.findFirst({where:{codebaseId:A.codebaseId,...o.i},select:{id:!0,idempotencyKey:!0,kind:!0}});if(r){if(r.idempotencyKey===A.idempotencyKey)return this.agentControl.createJob(A);await this.waitForCodebaseJob(r.id,t);continue}try{return await this.agentControl.createJob(A)}catch(A){if(!(0,o.G)(A))throw A}}throw new o.S}async waitForCodebaseJob(A,e){let t=g._H.iterate((0,g.BC)(A)),r=t.next();try{for(;;){let i=await this.agentControl.getJob(A);if(!i||!b.includes(i.status))return;if(Date.now()>=e)throw new o.S;await M(r,e)&&(r=t.next())}}finally{await t.return?.()}}async requireRunnable(A,e,t=!1){let r=await (0,n.U)(),i=await r.worktree.findUnique({where:{id:A},include:{codebase:{include:{agent:!0,repository:{include:{preparations:!0}}}}}});if(!i||i.missingAt||"AVAILABLE"!==i.availability)throw Error("Worktree is unavailable");if(!v(i.codebase.agent))throw Error("Agent is offline");if(!T(i.codebase.agent).includes(e))throw Error("Agent must be updated to use worktrees");if(!t){let[A,e]=await Promise.all([r.agentJob.findFirst({where:{codebaseId:i.codebaseId,...o.i}}),r.worktreeMove.findFirst({where:{status:{in:R},OR:[{sourceCodebaseId:i.codebaseId},{targetCodebaseId:i.codebaseId}]}})]);if(A||e)throw new o.S}return i}async requireRunnableCodebase(A,t=e.B){let r=await (0,n.U)(),i=await r.codebase.findUnique({where:{id:A},include:{agent:!0,repository:{include:{preparations:!0}}}});if(!i||"AVAILABLE"!==i.availability)throw Error("Codebase is unavailable");if(!v(i.agent))throw Error("Agent is offline");if(!T(i.agent).includes(t))throw Error("Agent must be updated to create or change worktrees");if((i.repository.preparations?.length??0)>0&&!T(i.agent).includes(e.r))throw Error("Agent must be updated to apply repository preparations");let[a,s]=await Promise.all([r.agentJob.findFirst({where:{codebaseId:A,...o.i}}),r.worktreeMove.findFirst({where:{status:{in:R},OR:[{sourceCodebaseId:A},{targetCodebaseId:A}]}})]);if(a||s)throw new o.S;return i}async purge(A){let e=await (0,n.U)(),t=await e.worktree.deleteMany({where:{id:A,missingAt:{not:null}}});return t.count&&this.publish(A,null),t.count>0}async purgeAll(){let A=await (0,n.U)(),e=await A.worktree.deleteMany({where:{missingAt:{not:null}}});return e.count&&this.publish(null,null),e.count}subscribe(){return g._H.iterate(g.MA)}async *subscribeInspection(A){let e=g._H.iterate((0,g.ys)(A)),t=!1;try{for await(let r of(await this.acquireWatch(A),t=!0,e))yield r}finally{await e.return?.(),t&&await this.releaseWatch(A)}}async acquireWatch(A){let r=this.watchDemand.get(A);if(r){r.subscribers+=1,await r.started;return}let i=await this.requireRunnable(A,e.I,!0),n=(0,t.randomUUID)(),a=this.payload(i),s={subscribers:1,watchId:n,agentId:i.codebase.agentId,worktreeId:i.id,codebaseId:i.codebaseId,payload:a,started:Promise.resolve()};s.started=this.runWatchAction(s,"START"),this.watchDemand.set(A,s);try{await s.started}catch(e){throw this.watchDemand.get(A)===s&&this.watchDemand.delete(A),e}}async releaseWatch(A){let e=this.watchDemand.get(A);if(e&&(e.subscribers-=1,!(e.subscribers>0))){this.watchDemand.delete(A);try{await e.started,await this.runWatchAction(e,"STOP")}catch(A){console.error("Could not stop worktree watcher:",A instanceof Error?A.message:A)}}}async runWatchAction(A,t){let r=await this.agentControl.createJob({agentId:A.agentId,worktreeId:A.worktreeId,kind:e.I,payload:{...A.payload,action:t,watchId:A.watchId},idempotencyKey:`worktree:watch:${t}:${A.watchId}`,timeoutSeconds:30,visibility:"SYSTEM"});try{j(await this.waitForJob(r.id))}finally{let A=await (0,n.U)();await A.agentJob.deleteMany({where:{id:r.id,visibility:"SYSTEM"}})}}async refreshBaseBranchWatch(A,e){this.publish(A,e),await this.restartWatch(A)}async restartWatch(A){let r=this.watchDemand.get(A);if(r)try{if(await r.started,this.watchDemand.get(A)!==r||(await this.runWatchAction(r,"STOP"),this.watchDemand.get(A)!==r))return;let i=await this.requireRunnable(A,e.I,!0),n={subscribers:r.subscribers,watchId:(0,t.randomUUID)(),agentId:i.codebase.agentId,worktreeId:i.id,codebaseId:i.codebaseId,payload:this.payload(i),started:Promise.resolve()};n.started=this.runWatchAction(n,"START"),this.watchDemand.set(A,n),await n.started}catch(A){console.error("Could not restart worktree watcher:",A instanceof Error?A.message:A)}}publish(A,e){g._H.publish(g.fb,{sidebarStatusChanged:!0}),g._H.publish(g.MA,{worktreeOverviewChanged:{worktreeId:A,codebaseId:e}})}moveIdFromJob(A){let e=JSON.parse(A.payloadJson);if(!e||"object"!=typeof e||Array.isArray(e)||"string"!=typeof e.moveId)throw Error("Move job is missing its workflow identifier");return String(e.moveId)}async failMove(A,e,t){let r=await (0,n.U)();(await r.worktreeMove.updateMany({where:{id:A,status:e},data:{status:"FAILED",error:t,finishedAt:new Date}})).count&&this.publish(null,null)}async createMoveCheckoutJob(A,t){let r=await (0,n.U)(),i=await r.codebase.findUnique({where:{id:A.targetCodebaseId},include:{agent:!0,repository:{include:{preparations:!0}}}});if(!i)throw Error("Destination codebase no longer exists");if(!v(i.agent))throw Error("Destination agent is offline");if(!T(i.agent).includes(e.R))throw Error("Destination agent must be updated to move worktrees");if((i.repository.preparations?.length??0)>0&&!T(i.agent).includes(e.r))throw Error("Destination agent must be updated to apply preparations");let a=A.targetWorktreeId?await r.worktree.findFirst({where:{id:A.targetWorktreeId,codebaseId:i.id,missingAt:null,availability:"AVAILABLE"}}):null;if("EXISTING"===A.destinationMode&&!a)throw Error("Destination worktree is no longer available");return this.agentControl.createJob({agentId:i.agentId,codebaseId:i.id,worktreeId:a?.id??null,kind:e.R,payload:{moveId:A.id,codebaseId:i.id,rootFolder:i.folder,folder:a?.folder??null,gitDirectory:a?.gitDirectory??null,expectedOrigin:i.repository.canonicalOrigin,branch:A.branch,expectedHeadSha:A.headSha,baseBranch:A.baseBranch,mode:A.destinationMode,stashOnFailure:t,preparations:(i.repository.preparations??[]).map(I.U)},idempotencyKey:`worktree:move:checkout:${A.id}:${t?"stash":"initial"}`,timeoutSeconds:600})}async advanceMoveAfterPush(A){let e=this.moveIdFromJob(A),t=await (0,n.U)(),r=await t.worktreeMove.findUnique({where:{id:e}});if(!r||"PUSHING"!==r.status||r.sourceJobId&&r.sourceJobId!==A.id)return;if("SUCCEEDED"!==A.status)return void await this.failMove(r.id,"PUSHING",A.error||"Could not push the source branch");let i=j(A);if(i.headSha!==r.headSha||i.branch!==r.branch)return void await this.failMove(r.id,"PUSHING","The source push returned an unexpected branch");try{let A=await this.createMoveCheckoutJob(r,!1);await t.worktreeMove.updateMany({where:{id:r.id,status:"PUSHING"},data:{status:"CHECKING_OUT",targetJobId:A.id}}),this.publish(r.sourceWorktreeId,r.sourceCodebaseId)}catch(A){await this.failMove(r.id,"PUSHING",A instanceof Error?A.message:String(A))}}async projectMoveDestination(A,r){let i=(0,e.y)(r),a=await (0,n.U)(),s=await a.codebase.findUnique({where:{id:A.targetCodebaseId},select:{localBranchesJson:!0}});if(!s)throw Error("Destination codebase no longer exists");let o=new Set(U(s.localBranchesJson));i.branch&&o.add(i.branch);let l=A.targetWorktreeId,c=null;return await a.$transaction(async e=>{if(await e.codebase.update({where:{id:A.targetCodebaseId},data:{localBranchesJson:JSON.stringify([...o].sort((A,e)=>A.localeCompare(e)))}}),l){if(1!==(await e.worktree.updateMany({where:{id:l,codebaseId:A.targetCodebaseId},data:{...this.inventoryData(i),gitDirectory:i.gitDirectory,baseBranchOverride:A.baseBranch,missingAt:null}})).count)throw Error("Destination worktree no longer exists")}else{let r=await e.worktree.upsert({where:{codebaseId_gitDirectory:{codebaseId:A.targetCodebaseId,gitDirectory:i.gitDirectory}},create:{id:(0,t.randomUUID)(),codebaseId:A.targetCodebaseId,gitDirectory:i.gitDirectory,...this.inventoryData(i),baseBranchOverride:A.baseBranch},update:{...this.inventoryData(i),baseBranchOverride:A.baseBranch,missingAt:null}});l=r.id,c=await this.worktreeCreatedNotification(e,r.id,i,r.highlightColor)}await e.worktreeMove.update({where:{id:A.id},data:{targetWorktreeId:l}})}),this.notifications?.created(c),this.publish(l??null,A.targetCodebaseId),await this.skillsService?.requestAutoReconcile(),l}async scheduleMoveCleanup(A){let t=await (0,n.U)(),r=await t.worktreeMove.findUniqueOrThrow({where:{id:A}}),i=await t.worktree.findUnique({where:{id:r.sourceWorktreeId},include:{codebase:{include:{agent:!0,repository:!0}}}});if(!i||i.missingAt||i.primary){await t.worktreeMove.update({where:{id:r.id},data:{status:"SUCCEEDED_WITH_WARNING",warning:"Destination is ready, but the source worktree could not be removed",finishedAt:new Date}}),this.publish(r.sourceWorktreeId,r.sourceCodebaseId);return}try{let A=await this.agentControl.createJob({agentId:i.codebase.agentId,codebaseId:i.codebaseId,worktreeId:i.id,kind:e.Z,payload:{moveId:r.id,codebaseId:i.codebaseId,rootFolder:i.codebase.folder,...T(i.codebase.agent).includes(e.w)?{derivedData:{mode:i.codebase.agent.derivedDataLocationMode??"DEFAULT",path:i.codebase.agent.derivedDataPath??null}}:{},folder:i.folder,gitDirectory:i.gitDirectory,expectedOrigin:i.codebase.repository.canonicalOrigin,branch:i.branch,defaultBranch:i.codebase.defaultBranch,deleteRemoteBranch:!1,requireClean:!0,expectedHeadSha:r.headSha},idempotencyKey:`worktree:move:cleanup:${r.id}`,timeoutSeconds:600});await t.worktreeMove.updateMany({where:{id:r.id,status:{in:["PUSHING","CHECKING_OUT","AWAITING_STASH"]}},data:{status:"CLEANING_UP",cleanupJobId:A.id}}),this.publish(i.id,i.codebaseId)}catch(A){await t.worktreeMove.update({where:{id:r.id},data:{status:"SUCCEEDED_WITH_WARNING",warning:A instanceof Error?A.message:String(A),finishedAt:new Date}}),this.publish(i.id,i.codebaseId)}}async advanceMoveAfterCheckout(A){let e=this.moveIdFromJob(A),t=await (0,n.U)(),r=await t.worktreeMove.findUnique({where:{id:e}});if(!r||!["PUSHING","CHECKING_OUT","AWAITING_STASH"].includes(r.status)||r.targetJobId&&r.targetJobId!==A.id)return;if("SUCCEEDED"!==A.status)return void await this.failMove(r.id,r.status,A.error||"Could not check out the destination branch");let i=j(A);if("NEEDS_STASH"===i.outcome){await t.worktreeMove.updateMany({where:{id:r.id,status:{in:["PUSHING","CHECKING_OUT","AWAITING_STASH"]}},data:{status:"AWAITING_STASH",error:"string"==typeof i.message?i.message:"Destination changes block the branch switch"}}),this.publish(r.sourceWorktreeId,r.sourceCodebaseId);return}if("CHECKED_OUT"!==i.outcome||!i.worktree)return void await this.failMove(r.id,r.status,"Destination checkout returned an invalid result");let a=await this.projectMoveDestination(r,i.worktree);await this.projectPreparationResults(a,A.resultJson),r.deleteSource?await this.scheduleMoveCleanup(r.id):(await t.worktreeMove.update({where:{id:r.id},data:{status:"SUCCEEDED",error:null,finishedAt:new Date}}),this.publish(r.sourceWorktreeId,r.sourceCodebaseId))}async projectDeleteOperation(A){let e=[];try{let t=JSON.parse(A.resultJson??"{}");Array.isArray(t?.buildDataCleanup?.warnings)&&(e=t.buildDataCleanup.warnings.filter(A=>"string"==typeof A&&A.length>0))}catch{}let t=JSON.parse(A.payloadJson),r=t&&"object"==typeof t&&!Array.isArray(t)&&"string"==typeof t.moveId?String(t.moveId):null,i=await (0,n.U)();if(r){let t=await i.worktreeMove.findUnique({where:{id:r}});if(!t||!["PUSHING","CHECKING_OUT","AWAITING_STASH","CLEANING_UP"].includes(t.status)||t.cleanupJobId&&t.cleanupJobId!==A.id)return;if("SUCCEEDED"!==A.status){await i.worktreeMove.update({where:{id:t.id},data:{status:"SUCCEEDED_WITH_WARNING",warning:A.error||"Destination is ready, but the source worktree was retained",finishedAt:new Date}}),this.publish(t.sourceWorktreeId,t.sourceCodebaseId);return}await i.$transaction([i.worktree.deleteMany({where:{id:t.sourceWorktreeId}}),i.worktreeMove.update({where:{id:t.id},data:{status:e.length?"SUCCEEDED_WITH_WARNING":"SUCCEEDED",warning:e.length?e.join("\n"):null,finishedAt:new Date}})]),this.publish(t.sourceWorktreeId,t.sourceCodebaseId);return}if("SUCCEEDED"!==A.status||!A.worktreeId)return;let a=await i.worktree.findUnique({where:{id:A.worktreeId},select:{codebaseId:!0,branch:!0,highlightColor:!0}});if(await i.worktree.deleteMany({where:{id:A.worktreeId}}),this.publish(A.worktreeId,a?.codebaseId??null),e.length&&this.notifications)try{let t=await i.$transaction(t=>this.notifications.recordInTransaction(t,{dedupeKey:`worktree-cleanup-warning:${A.id}`,typeKey:"WORKTREE_CLEANUP_FAILED",title:"Worktree deleted; build data cleanup needs attention",body:[a?.branch,...e].filter(Boolean).join(" · ").slice(0,1e3),href:`/dashboard/jobs/${encodeURIComponent(A.id)}`,resourceKind:"AGENT_JOB",resourceId:A.id,highlightColor:a?.highlightColor??null}));this.notifications.created(t)}catch(A){console.error("Worktree cleanup warning notification failed:",A)}}async projectOperation(A){if(!A.worktreeId||!A.resultJson||(await this.projectPreparationResults(A.worktreeId,A.resultJson),"SUCCEEDED"!==A.status))return;let t=j({...A,error:null});if(!t.worktree)return;let r=(0,e.y)(t.worktree),i=await (0,n.U)(),a=await i.worktree.findUnique({where:{id:A.worktreeId}});if(!a)return;let s=new Date(r.checkedAt);(await i.worktree.updateMany({where:{id:a.id,OR:[{lastCheckedAt:null},{lastCheckedAt:{lt:s}}]},data:{branch:r.branch,headSha:r.headSha,upstream:r.upstream,ahead:r.ahead,behind:r.behind,syncState:r.syncState,baseAhead:r.baseAhead,baseBehind:r.baseBehind,hasStagedChanges:r.hasStagedChanges??!1,hasUnstagedChanges:r.hasUnstagedChanges??!1,rebaseInProgress:r.rebaseInProgress??!1,hasConflicts:r.hasConflicts??!1,pushStatus:r.pushStatus??"UNKNOWN",availability:r.availability,statusError:r.error,lastCheckedAt:s}})).count>0&&this.publish(a.id,a.codebaseId)}async projectBranchOperation(A){if(!A.codebaseId||"SUCCEEDED"!==A.status||!A.resultJson)return;let r=j({...A,error:null});if(!r.worktree||"string"!=typeof r.baseBranch)return;let i=(0,e.y)(r.worktree),a=await (0,n.U)(),s=await a.codebase.findUnique({where:{id:A.codebaseId},select:{localBranchesJson:!0}});if(!s)return;let o=new Set(U(s.localBranchesJson));i.branch&&o.add(i.branch);let l=A.worktreeId,c=null;await a.$transaction(async e=>{if(await e.codebase.update({where:{id:A.codebaseId},data:{localBranchesJson:JSON.stringify([...o].sort((A,e)=>A.localeCompare(e)))}}),A.worktreeId){if(1!==(await e.worktree.updateMany({where:{id:A.worktreeId,codebaseId:A.codebaseId},data:{...this.inventoryData(i),gitDirectory:i.gitDirectory,baseBranchOverride:r.baseBranch,missingAt:null}})).count)throw Error("Worktree no longer exists");return}let n=await e.worktree.upsert({where:{codebaseId_gitDirectory:{codebaseId:A.codebaseId,gitDirectory:i.gitDirectory}},create:{id:(0,t.randomUUID)(),codebaseId:A.codebaseId,gitDirectory:i.gitDirectory,...this.inventoryData(i),baseBranchOverride:r.baseBranch},update:{...this.inventoryData(i),baseBranchOverride:r.baseBranch,missingAt:null}});l=n.id;let a=n.highlightColor;if(!n.initialHighlightApplied){let t=await e.worktreeSettings.findUnique({where:{id:k}}),r=n.highlightColor;if(!r&&t?.autoAssignHighlightColor!==!1){let i=await e.worktree.findMany({where:{codebaseId:A.codebaseId,missingAt:null,availability:"AVAILABLE"},select:{highlightColor:!0}}),n=new Map;for(let A of i)A.highlightColor&&n.set(A.highlightColor,(n.get(A.highlightColor)??0)+1);r=t?.highlightColorMode==="RANDOM"?O[Math.floor(Math.random()*O.length)]:O.reduce((A,e)=>(n.get(e)??0)<(n.get(A)??0)?e:A)}await e.worktree.update({where:{id:n.id},data:{highlightColor:r,initialHighlightApplied:!0}}),a=r}c=await this.worktreeCreatedNotification(e,n.id,i,a)}),this.notifications?.created(c),this.publish(l??null,A.codebaseId),l&&await this.projectPreparationResults(l,A.resultJson),!A.worktreeId&&l&&await this.recordWorktreeCreated(l),await this.skillsService?.requestAutoReconcile(),A.worktreeId&&await this.restartWatch(A.worktreeId)}async projectPreparationOperation(A){let e;if(!A.resultJson)return;try{e=JSON.parse(A.resultJson)}catch{return}let t=[];if(e&&"object"==typeof e&&!Array.isArray(e)){let A=e.worktrees;if(Array.isArray(A))for(let e of A.slice(0,500))!(!e||"object"!=typeof e||Array.isArray(e))&&"string"==typeof e.worktreeId&&Array.isArray(e.preparations)&&(await this.projectPreparationResults(e.worktreeId,JSON.stringify({checkedAt:e.checkedAt,preparations:e.preparations})),t.push(e.worktreeId))}0===t.length&&A.worktreeId&&(await this.projectPreparationResults(A.worktreeId,A.resultJson),t.push(A.worktreeId));let r=await (0,n.U)();for(let A of t){let e=await r.worktree.findUnique({where:{id:A},select:{codebaseId:!0}});this.publish(A,e?.codebaseId??null)}}async projectPreparationResults(A,t){let r;try{r=JSON.parse(t)}catch{return}if(!r||"object"!=typeof r||Array.isArray(r))return;let i=r;if(!Array.isArray(i.preparations))return;let a="string"!=typeof i.checkedAt||Number.isNaN(Date.parse(i.checkedAt))?new Date:new Date(i.checkedAt),s=await (0,n.U)();for(let t of i.preparations.slice(0,500)){if(!(!t||"object"!=typeof t||Array.isArray(t)))"string"==typeof t.id&&"string"==typeof t.definitionHash&&"string"==typeof t.state&&e.n.includes(t.state)&&await s.codebaseRepositoryPreparation.findUnique({where:{id:t.id},select:{id:!0}})&&await s.worktreePreparationStatus.upsert({where:{worktreeId_preparationId:{worktreeId:A,preparationId:t.id}},create:{worktreeId:A,preparationId:t.id,definitionHash:t.definitionHash,state:t.state,message:"string"==typeof t.message?t.message:null,checkedAt:a},update:{definitionHash:t.definitionHash,state:t.state,message:"string"==typeof t.message?t.message:null,checkedAt:a}})}}async worktreeCreatedNotification(A,e,t,r){return this.notifications?.recordInTransaction(A,{dedupeKey:`worktree-created:${e}`,typeKey:"WORKTREE_CREATED",title:"Worktree created",body:(t.branch||t.relativePath).slice(0,1e3),href:`/dashboard/worktrees/${encodeURIComponent(e)}`,resourceKind:"WORKTREE",resourceId:e,worktreeId:e,highlightColor:r})??null}async recordWorktreeCreated(A){if(!this.workflowEvents)return;let e=await this.workflowSessionDataForWorktree(A);Object.keys(e).length&&await this.workflowEvents.record({kind:"WORKTREE_CREATED",subjectKey:A,dedupeKey:`worktree-created:${A}`,payload:{...e,sessionData:e}})}async waitForJob(A){let e=g._H.iterate((0,g.BC)(A)),t=e.next(),r=Date.now()+3e4;try{for(;;){let i=await this.agentControl.getJob(A);if(!i)throw Error("Worktree job disappeared");if(["SUCCEEDED","FAILED","CANCELLED","TIMED_OUT"].includes(i.status))return i;if(Date.now()>=r)throw await this.agentControl.cancelJob(A),Error("Agent did not respond in time");await M(t,r)&&(t=e.next())}}finally{await e.return?.()}}},"b",0,P],520962)}],701256,(A,e,t)=>{e.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}},247409,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/applicator":!0},$recursiveAnchor:!0,title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{additionalItems:{$recursiveRef:"#"},unevaluatedItems:{$recursiveRef:"#"},items:{anyOf:[{$recursiveRef:"#"},{$ref:"#/$defs/schemaArray"}]},contains:{$recursiveRef:"#"},additionalProperties:{$recursiveRef:"#"},unevaluatedProperties:{$recursiveRef:"#"},properties:{type:"object",additionalProperties:{$recursiveRef:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$recursiveRef:"#"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$recursiveRef:"#"}},propertyNames:{$recursiveRef:"#"},if:{$recursiveRef:"#"},then:{$recursiveRef:"#"},else:{$recursiveRef:"#"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$recursiveRef:"#"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$recursiveRef:"#"}}}}},632375,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/content",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/content":!0},$recursiveAnchor:!0,title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentMediaType:{type:"string"},contentEncoding:{type:"string"},contentSchema:{$recursiveRef:"#"}}}},32546,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/core",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/core":!0},$recursiveAnchor:!0,title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{type:"string",format:"uri"},$anchor:{type:"string",pattern:"^[A-Za-z][-A-Za-z0-9.:_]*$"},$ref:{type:"string",format:"uri-reference"},$recursiveRef:{type:"string",format:"uri-reference"},$recursiveAnchor:{type:"boolean",default:!1},$vocabulary:{type:"object",propertyNames:{type:"string",format:"uri"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$recursiveRef:"#"},default:{}}}}},674259,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/format",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/format":!0},$recursiveAnchor:!0,title:"Format vocabulary meta-schema",type:["object","boolean"],properties:{format:{type:"string"}}}},451421,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/meta-data":!0},$recursiveAnchor:!0,title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}},911967,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/meta/validation",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/validation":!0},$recursiveAnchor:!0,title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}},const:!0,enum:{type:"array",items:!0},type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}},584785,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://json-schema.org/draft/2019-09/schema",$vocabulary:{"https://json-schema.org/draft/2019-09/vocab/core":!0,"https://json-schema.org/draft/2019-09/vocab/applicator":!0,"https://json-schema.org/draft/2019-09/vocab/validation":!0,"https://json-schema.org/draft/2019-09/vocab/meta-data":!0,"https://json-schema.org/draft/2019-09/vocab/format":!1,"https://json-schema.org/draft/2019-09/vocab/content":!0},$recursiveAnchor:!0,title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format"},{$ref:"meta/content"}],type:["object","boolean"],properties:{definitions:{$comment:"While no longer an official keyword as it is replaced by $defs, this keyword is retained in the meta-schema to prevent incompatible extensions as it remains in common use.",type:"object",additionalProperties:{$recursiveRef:"#"},default:{}},dependencies:{$comment:'"dependencies" is no longer a keyword, but schema authors should avoid redefining it to facilitate a smooth transition to "dependentSchemas" and "dependentRequired"',type:"object",additionalProperties:{anyOf:[{$recursiveRef:"#"},{$ref:"meta/validation#/$defs/stringArray"}]}}}}},705129,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/applicator":!0},$dynamicAnchor:"meta",title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}}}},699737,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/content",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}}}},785062,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/core",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0},$dynamicAnchor:"meta",title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},$defs:{anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}}}},649145,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/format-annotation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},$dynamicAnchor:"meta",title:"Format vocabulary meta-schema for annotation results",type:["object","boolean"],properties:{format:{type:"string"}}}},231758,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},$dynamicAnchor:"meta",title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}},566081,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/unevaluated",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},$dynamicAnchor:"meta",title:"Unevaluated applicator vocabulary meta-schema",type:["object","boolean"],properties:{unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}}}},133378,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/validation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/validation":!0},$dynamicAnchor:"meta",title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}},9457,(A,e,t)=>{e.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/schema",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],type:["object","boolean"],$comment:"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",properties:{definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}}}},371891,(A,e,t)=>{e.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}},622578,(A,e,t)=>{!function(e,t){"use strict";function r(A,e){if(!A)throw Error(e||"Assertion failed")}function i(A,e){A.super_=e;var t=function(){};t.prototype=e.prototype,A.prototype=new t,A.prototype.constructor=A}function n(A,e,t){if(n.isBN(A))return A;this.negative=0,this.words=null,this.length=0,this.red=null,null!==A&&(("le"===e||"be"===e)&&(t=e,e=10),this._init(A||0,e||10,t||"be"))}e.exports=n,n.BN=n,n.wordSize=26;try{l=A.r(500874).Buffer}catch(A){}function a(A,e){var t=A.charCodeAt(e);return t>=65&&t<=70?t-55:t>=97&&t<=102?t-87:t-48&15}function s(A,e,t){var r=a(A,t);return t-1>=e&&(r|=a(A,t-1)<<4),r}function o(A,e,t,r){for(var i=0,n=Math.min(A.length,t),a=e;a<n;a++){var s=A.charCodeAt(a)-48;i*=r,s>=49?i+=s-49+10:s>=17?i+=s-17+10:i+=s}return i}n.isBN=function(A){return A instanceof n||null!==A&&"object"==typeof A&&A.constructor.wordSize===n.wordSize&&Array.isArray(A.words)},n.max=function(A,e){return A.cmp(e)>0?A:e},n.min=function(A,e){return 0>A.cmp(e)?A:e},n.prototype._init=function(A,e,t){if("number"==typeof A)return this._initNumber(A,e,t);if("object"==typeof A)return this._initArray(A,e,t);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(A=A.toString().replace(/\s+/g,""))[0]&&(i++,this.negative=1),i<A.length&&(16===e?this._parseHex(A,i,t):(this._parseBase(A,e,i),"le"===t&&this._initArray(this.toArray(),e,t)))},n.prototype._initNumber=function(A,e,t){A<0&&(this.negative=1,A=-A),A<0x4000000?(this.words=[0x3ffffff&A],this.length=1):A<0x10000000000000?(this.words=[0x3ffffff&A,A/0x4000000&0x3ffffff],this.length=2):(r(A<0x20000000000000),this.words=[0x3ffffff&A,A/0x4000000&0x3ffffff,1],this.length=3),"le"===t&&this._initArray(this.toArray(),e,t)},n.prototype._initArray=function(A,e,t){if(r("number"==typeof A.length),A.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(A.length/3),this.words=Array(this.length);for(var i,n,a=0;a<this.length;a++)this.words[a]=0;var s=0;if("be"===t)for(a=A.length-1,i=0;a>=0;a-=3)n=A[a]|A[a-1]<<8|A[a-2]<<16,this.words[i]|=n<<s&0x3ffffff,this.words[i+1]=n>>>26-s&0x3ffffff,(s+=24)>=26&&(s-=26,i++);else if("le"===t)for(a=0,i=0;a<A.length;a+=3)n=A[a]|A[a+1]<<8|A[a+2]<<16,this.words[i]|=n<<s&0x3ffffff,this.words[i+1]=n>>>26-s&0x3ffffff,(s+=24)>=26&&(s-=26,i++);return this.strip()},n.prototype._parseHex=function(A,e,t){this.length=Math.ceil((A.length-e)/6),this.words=Array(this.length);for(var r,i=0;i<this.length;i++)this.words[i]=0;var n=0,a=0;if("be"===t)for(i=A.length-1;i>=e;i-=2)r=s(A,e,i)<<n,this.words[a]|=0x3ffffff&r,n>=18?(n-=18,a+=1,this.words[a]|=r>>>26):n+=8;else for(i=(A.length-e)%2==0?e+1:e;i<A.length;i+=2)r=s(A,e,i)<<n,this.words[a]|=0x3ffffff&r,n>=18?(n-=18,a+=1,this.words[a]|=r>>>26):n+=8;this.strip()},n.prototype._parseBase=function(A,e,t){this.words=[0],this.length=1;for(var r=0,i=1;i<=0x3ffffff;i*=e)r++;r--,i=i/e|0;for(var n=A.length-t,a=n%r,s=Math.min(n,n-a)+t,l=0,c=t;c<s;c+=r)l=o(A,c,c+r,e),this.imuln(i),this.words[0]+l<0x4000000?this.words[0]+=l:this._iaddn(l);if(0!==a){var d=1;for(l=o(A,c,A.length,e),c=0;c<a;c++)d*=e;this.imuln(d),this.words[0]+l<0x4000000?this.words[0]+=l:this._iaddn(l)}this.strip()},n.prototype.copy=function(A){A.words=Array(this.length);for(var e=0;e<this.length;e++)A.words[e]=this.words[e];A.length=this.length,A.negative=this.negative,A.red=this.red},n.prototype.clone=function(){var A=new n(null);return this.copy(A),A},n.prototype._expand=function(A){for(;this.length<A;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var l,c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],u=[0,0,0x2000000,0x290d741,0x1000000,0x2e90edd,0x39aa400,0x267bf47,0x1000000,0x290d741,1e7,0x12959c3,0x222c000,0x3bd7765,7529536,0xadcea1,0x1000000,0x1704f61,0x206fc40,0x2cddcf9,64e6,4084101,5153632,6436343,7962624,9765625,0xb54ba0,0xdaf26b,0x1069c00,0x138f9ad,243e5,0x1b4d89f,0x2000000,0x25528a1,0x2b54a20,0x3216b93,0x39aa400];function g(A,e,t){t.negative=e.negative^A.negative;var r=A.length+e.length|0;t.length=r,r=r-1|0;var i=0|A.words[0],n=0|e.words[0],a=i*n,s=0x3ffffff&a,o=a/0x4000000|0;t.words[0]=s;for(var l=1;l<r;l++){for(var c=o>>>26,d=0x3ffffff&o,u=Math.min(l,e.length-1),g=Math.max(0,l-A.length+1);g<=u;g++){var h=l-g|0;c+=(a=(i=0|A.words[h])*(n=0|e.words[g])+d)/0x4000000|0,d=0x3ffffff&a}t.words[l]=0|d,o=0|c}return 0!==o?t.words[l]=0|o:t.length--,t.strip()}n.prototype.toString=function(A,e){if(e=0|e||1,16===(A=A||10)||"hex"===A){for(var t="",i=0,n=0,a=0;a<this.length;a++){var s=this.words[a],o=((s<<i|n)&0xffffff).toString(16);n=s>>>24-i&0xffffff,(i+=2)>=26&&(i-=26,a--),t=0!==n||a!==this.length-1?c[6-o.length]+o+t:o+t}for(0!==n&&(t=n.toString(16)+t);t.length%e!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}if(A===(0|A)&&A>=2&&A<=36){var l=d[A],g=u[A];t="";var h=this.clone();for(h.negative=0;!h.isZero();){var C=h.modn(g).toString(A);t=(h=h.idivn(g)).isZero()?C+t:c[l-C.length]+C+t}for(this.isZero()&&(t="0"+t);t.length%e!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var A=this.words[0];return 2===this.length?A+=0x4000000*this.words[1]:3===this.length&&1===this.words[2]?A+=0x10000000000000+0x4000000*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-A:A},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(A,e){return r(void 0!==l),this.toArrayLike(l,A,e)},n.prototype.toArray=function(A,e){return this.toArrayLike(Array,A,e)},n.prototype.toArrayLike=function(A,e,t){var i,n,a=this.byteLength(),s=t||Math.max(1,a);r(a<=s,"byte array longer than desired length"),r(s>0,"Requested array length <= 0"),this.strip();var o=new A(s),l=this.clone();if("le"===e){for(n=0;!l.isZero();n++)i=l.andln(255),l.iushrn(8),o[n]=i;for(;n<s;n++)o[n]=0}else{for(n=0;n<s-a;n++)o[n]=0;for(n=0;!l.isZero();n++)i=l.andln(255),l.iushrn(8),o[s-n-1]=i}return o},Math.clz32?n.prototype._countBits=function(A){return 32-Math.clz32(A)}:n.prototype._countBits=function(A){var e=A,t=0;return e>=4096&&(t+=13,e>>>=13),e>=64&&(t+=7,e>>>=7),e>=8&&(t+=4,e>>>=4),e>=2&&(t+=2,e>>>=2),t+e},n.prototype._zeroBits=function(A){if(0===A)return 26;var e=A,t=0;return(8191&e)==0&&(t+=13,e>>>=13),(127&e)==0&&(t+=7,e>>>=7),(15&e)==0&&(t+=4,e>>>=4),(3&e)==0&&(t+=2,e>>>=2),(1&e)==0&&t++,t},n.prototype.bitLength=function(){var A=this.words[this.length-1],e=this._countBits(A);return(this.length-1)*26+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var A=0,e=0;e<this.length;e++){var t=this._zeroBits(this.words[e]);if(A+=t,26!==t)break}return A},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(A){return 0!==this.negative?this.abs().inotn(A).iaddn(1):this.clone()},n.prototype.fromTwos=function(A){return this.testn(A-1)?this.notn(A).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(A){for(;this.length<A.length;)this.words[this.length++]=0;for(var e=0;e<A.length;e++)this.words[e]=this.words[e]|A.words[e];return this.strip()},n.prototype.ior=function(A){return r((this.negative|A.negative)==0),this.iuor(A)},n.prototype.or=function(A){return this.length>A.length?this.clone().ior(A):A.clone().ior(this)},n.prototype.uor=function(A){return this.length>A.length?this.clone().iuor(A):A.clone().iuor(this)},n.prototype.iuand=function(A){var e;e=this.length>A.length?A:this;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]&A.words[t];return this.length=e.length,this.strip()},n.prototype.iand=function(A){return r((this.negative|A.negative)==0),this.iuand(A)},n.prototype.and=function(A){return this.length>A.length?this.clone().iand(A):A.clone().iand(this)},n.prototype.uand=function(A){return this.length>A.length?this.clone().iuand(A):A.clone().iuand(this)},n.prototype.iuxor=function(A){this.length>A.length?(e=this,t=A):(e=A,t=this);for(var e,t,r=0;r<t.length;r++)this.words[r]=e.words[r]^t.words[r];if(this!==e)for(;r<e.length;r++)this.words[r]=e.words[r];return this.length=e.length,this.strip()},n.prototype.ixor=function(A){return r((this.negative|A.negative)==0),this.iuxor(A)},n.prototype.xor=function(A){return this.length>A.length?this.clone().ixor(A):A.clone().ixor(this)},n.prototype.uxor=function(A){return this.length>A.length?this.clone().iuxor(A):A.clone().iuxor(this)},n.prototype.inotn=function(A){r("number"==typeof A&&A>=0);var e=0|Math.ceil(A/26),t=A%26;this._expand(e),t>0&&e--;for(var i=0;i<e;i++)this.words[i]=0x3ffffff&~this.words[i];for(t>0&&(this.words[i]=~this.words[i]&0x3ffffff>>26-t,i++);i<this.length;i++)this.words[i]=0;return this.strip()},n.prototype.notn=function(A){return this.clone().inotn(A)},n.prototype.setn=function(A,e){r("number"==typeof A&&A>=0);var t=A/26|0,i=A%26;return this._expand(t+1),e?this.words[t]=this.words[t]|1<<i:this.words[t]=this.words[t]&~(1<<i),this.strip()},n.prototype.iadd=function(A){if(0!==this.negative&&0===A.negative)return this.negative=0,e=this.isub(A),this.negative^=1,this._normSign();if(0===this.negative&&0!==A.negative)return A.negative=0,e=this.isub(A),A.negative=1,e._normSign();this.length>A.length?(t=this,r=A):(t=A,r=this);for(var e,t,r,i=0,n=0;n<r.length;n++)e=(0|t.words[n])+(0|r.words[n])+i,this.words[n]=0x3ffffff&e,i=e>>>26;for(;0!==i&&n<t.length;n++)e=(0|t.words[n])+i,this.words[n]=0x3ffffff&e,i=e>>>26;if(this.length=t.length,0!==i)this.words[this.length]=i,this.length++;else if(t!==this)for(;n<t.length;n++)this.words[n]=t.words[n];return this},n.prototype.add=function(A){var e;return 0!==A.negative&&0===this.negative?(A.negative=0,e=this.sub(A),A.negative^=1,e):0===A.negative&&0!==this.negative?(this.negative=0,e=A.sub(this),this.negative=1,e):this.length>A.length?this.clone().iadd(A):A.clone().iadd(this)},n.prototype.isub=function(A){if(0!==A.negative){A.negative=0;var e,t,r=this.iadd(A);return A.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(A),this.negative=1,this._normSign();var i=this.cmp(A);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(e=this,t=A):(e=A,t=this);for(var n=0,a=0;a<t.length;a++)n=(r=(0|e.words[a])-(0|t.words[a])+n)>>26,this.words[a]=0x3ffffff&r;for(;0!==n&&a<e.length;a++)n=(r=(0|e.words[a])+n)>>26,this.words[a]=0x3ffffff&r;if(0===n&&a<e.length&&e!==this)for(;a<e.length;a++)this.words[a]=e.words[a];return this.length=Math.max(this.length,a),e!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(A){return this.clone().isub(A)};var h=function(A,e,t){var r,i,n,a=A.words,s=e.words,o=t.words,l=0,c=0|a[0],d=8191&c,u=c>>>13,g=0|a[1],h=8191&g,C=g>>>13,p=0|a[2],I=8191&p,m=p>>>13,f=0|a[3],E=8191&f,w=f>>>13,Q=0|a[4],y=8191&Q,B=Q>>>13,D=0|a[5],k=8191&D,b=D>>>13,S=0|a[6],R=8191&S,M=S>>>13,O=0|a[7],N=8191&O,H=O>>>13,v=0|a[8],T=8191&v,U=v>>>13,J=0|a[9],x=8191&J,_=J>>>13,G=0|s[0],L=8191&G,P=G>>>13,j=0|s[1],Y=8191&j,F=j>>>13,K=0|s[2],q=8191&K,V=K>>>13,z=0|s[3],W=8191&z,$=z>>>13,Z=0|s[4],X=8191&Z,AA=Z>>>13,Ae=0|s[5],At=8191&Ae,Ar=Ae>>>13,Ai=0|s[6],An=8191&Ai,Aa=Ai>>>13,As=0|s[7],Ao=8191&As,Al=As>>>13,Ac=0|s[8],Ad=8191&Ac,Au=Ac>>>13,Ag=0|s[9],Ah=8191&Ag,AC=Ag>>>13;t.negative=A.negative^e.negative,t.length=19,r=Math.imul(d,L);var Ap=(l+r|0)+((8191&(i=(i=Math.imul(d,P))+Math.imul(u,L)|0))<<13)|0;l=((n=Math.imul(u,P))+(i>>>13)|0)+(Ap>>>26)|0,Ap&=0x3ffffff,r=Math.imul(h,L),i=(i=Math.imul(h,P))+Math.imul(C,L)|0,n=Math.imul(C,P),r=r+Math.imul(d,Y)|0;var AI=(l+r|0)+((8191&(i=(i=i+Math.imul(d,F)|0)+Math.imul(u,Y)|0))<<13)|0;l=((n=n+Math.imul(u,F)|0)+(i>>>13)|0)+(AI>>>26)|0,AI&=0x3ffffff,r=Math.imul(I,L),i=(i=Math.imul(I,P))+Math.imul(m,L)|0,n=Math.imul(m,P),r=r+Math.imul(h,Y)|0,i=(i=i+Math.imul(h,F)|0)+Math.imul(C,Y)|0,n=n+Math.imul(C,F)|0,r=r+Math.imul(d,q)|0;var Am=(l+r|0)+((8191&(i=(i=i+Math.imul(d,V)|0)+Math.imul(u,q)|0))<<13)|0;l=((n=n+Math.imul(u,V)|0)+(i>>>13)|0)+(Am>>>26)|0,Am&=0x3ffffff,r=Math.imul(E,L),i=(i=Math.imul(E,P))+Math.imul(w,L)|0,n=Math.imul(w,P),r=r+Math.imul(I,Y)|0,i=(i=i+Math.imul(I,F)|0)+Math.imul(m,Y)|0,n=n+Math.imul(m,F)|0,r=r+Math.imul(h,q)|0,i=(i=i+Math.imul(h,V)|0)+Math.imul(C,q)|0,n=n+Math.imul(C,V)|0,r=r+Math.imul(d,W)|0;var Af=(l+r|0)+((8191&(i=(i=i+Math.imul(d,$)|0)+Math.imul(u,W)|0))<<13)|0;l=((n=n+Math.imul(u,$)|0)+(i>>>13)|0)+(Af>>>26)|0,Af&=0x3ffffff,r=Math.imul(y,L),i=(i=Math.imul(y,P))+Math.imul(B,L)|0,n=Math.imul(B,P),r=r+Math.imul(E,Y)|0,i=(i=i+Math.imul(E,F)|0)+Math.imul(w,Y)|0,n=n+Math.imul(w,F)|0,r=r+Math.imul(I,q)|0,i=(i=i+Math.imul(I,V)|0)+Math.imul(m,q)|0,n=n+Math.imul(m,V)|0,r=r+Math.imul(h,W)|0,i=(i=i+Math.imul(h,$)|0)+Math.imul(C,W)|0,n=n+Math.imul(C,$)|0,r=r+Math.imul(d,X)|0;var AE=(l+r|0)+((8191&(i=(i=i+Math.imul(d,AA)|0)+Math.imul(u,X)|0))<<13)|0;l=((n=n+Math.imul(u,AA)|0)+(i>>>13)|0)+(AE>>>26)|0,AE&=0x3ffffff,r=Math.imul(k,L),i=(i=Math.imul(k,P))+Math.imul(b,L)|0,n=Math.imul(b,P),r=r+Math.imul(y,Y)|0,i=(i=i+Math.imul(y,F)|0)+Math.imul(B,Y)|0,n=n+Math.imul(B,F)|0,r=r+Math.imul(E,q)|0,i=(i=i+Math.imul(E,V)|0)+Math.imul(w,q)|0,n=n+Math.imul(w,V)|0,r=r+Math.imul(I,W)|0,i=(i=i+Math.imul(I,$)|0)+Math.imul(m,W)|0,n=n+Math.imul(m,$)|0,r=r+Math.imul(h,X)|0,i=(i=i+Math.imul(h,AA)|0)+Math.imul(C,X)|0,n=n+Math.imul(C,AA)|0,r=r+Math.imul(d,At)|0;var Aw=(l+r|0)+((8191&(i=(i=i+Math.imul(d,Ar)|0)+Math.imul(u,At)|0))<<13)|0;l=((n=n+Math.imul(u,Ar)|0)+(i>>>13)|0)+(Aw>>>26)|0,Aw&=0x3ffffff,r=Math.imul(R,L),i=(i=Math.imul(R,P))+Math.imul(M,L)|0,n=Math.imul(M,P),r=r+Math.imul(k,Y)|0,i=(i=i+Math.imul(k,F)|0)+Math.imul(b,Y)|0,n=n+Math.imul(b,F)|0,r=r+Math.imul(y,q)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(B,q)|0,n=n+Math.imul(B,V)|0,r=r+Math.imul(E,W)|0,i=(i=i+Math.imul(E,$)|0)+Math.imul(w,W)|0,n=n+Math.imul(w,$)|0,r=r+Math.imul(I,X)|0,i=(i=i+Math.imul(I,AA)|0)+Math.imul(m,X)|0,n=n+Math.imul(m,AA)|0,r=r+Math.imul(h,At)|0,i=(i=i+Math.imul(h,Ar)|0)+Math.imul(C,At)|0,n=n+Math.imul(C,Ar)|0,r=r+Math.imul(d,An)|0;var AQ=(l+r|0)+((8191&(i=(i=i+Math.imul(d,Aa)|0)+Math.imul(u,An)|0))<<13)|0;l=((n=n+Math.imul(u,Aa)|0)+(i>>>13)|0)+(AQ>>>26)|0,AQ&=0x3ffffff,r=Math.imul(N,L),i=(i=Math.imul(N,P))+Math.imul(H,L)|0,n=Math.imul(H,P),r=r+Math.imul(R,Y)|0,i=(i=i+Math.imul(R,F)|0)+Math.imul(M,Y)|0,n=n+Math.imul(M,F)|0,r=r+Math.imul(k,q)|0,i=(i=i+Math.imul(k,V)|0)+Math.imul(b,q)|0,n=n+Math.imul(b,V)|0,r=r+Math.imul(y,W)|0,i=(i=i+Math.imul(y,$)|0)+Math.imul(B,W)|0,n=n+Math.imul(B,$)|0,r=r+Math.imul(E,X)|0,i=(i=i+Math.imul(E,AA)|0)+Math.imul(w,X)|0,n=n+Math.imul(w,AA)|0,r=r+Math.imul(I,At)|0,i=(i=i+Math.imul(I,Ar)|0)+Math.imul(m,At)|0,n=n+Math.imul(m,Ar)|0,r=r+Math.imul(h,An)|0,i=(i=i+Math.imul(h,Aa)|0)+Math.imul(C,An)|0,n=n+Math.imul(C,Aa)|0,r=r+Math.imul(d,Ao)|0;var Ay=(l+r|0)+((8191&(i=(i=i+Math.imul(d,Al)|0)+Math.imul(u,Ao)|0))<<13)|0;l=((n=n+Math.imul(u,Al)|0)+(i>>>13)|0)+(Ay>>>26)|0,Ay&=0x3ffffff,r=Math.imul(T,L),i=(i=Math.imul(T,P))+Math.imul(U,L)|0,n=Math.imul(U,P),r=r+Math.imul(N,Y)|0,i=(i=i+Math.imul(N,F)|0)+Math.imul(H,Y)|0,n=n+Math.imul(H,F)|0,r=r+Math.imul(R,q)|0,i=(i=i+Math.imul(R,V)|0)+Math.imul(M,q)|0,n=n+Math.imul(M,V)|0,r=r+Math.imul(k,W)|0,i=(i=i+Math.imul(k,$)|0)+Math.imul(b,W)|0,n=n+Math.imul(b,$)|0,r=r+Math.imul(y,X)|0,i=(i=i+Math.imul(y,AA)|0)+Math.imul(B,X)|0,n=n+Math.imul(B,AA)|0,r=r+Math.imul(E,At)|0,i=(i=i+Math.imul(E,Ar)|0)+Math.imul(w,At)|0,n=n+Math.imul(w,Ar)|0,r=r+Math.imul(I,An)|0,i=(i=i+Math.imul(I,Aa)|0)+Math.imul(m,An)|0,n=n+Math.imul(m,Aa)|0,r=r+Math.imul(h,Ao)|0,i=(i=i+Math.imul(h,Al)|0)+Math.imul(C,Ao)|0,n=n+Math.imul(C,Al)|0,r=r+Math.imul(d,Ad)|0;var AB=(l+r|0)+((8191&(i=(i=i+Math.imul(d,Au)|0)+Math.imul(u,Ad)|0))<<13)|0;l=((n=n+Math.imul(u,Au)|0)+(i>>>13)|0)+(AB>>>26)|0,AB&=0x3ffffff,r=Math.imul(x,L),i=(i=Math.imul(x,P))+Math.imul(_,L)|0,n=Math.imul(_,P),r=r+Math.imul(T,Y)|0,i=(i=i+Math.imul(T,F)|0)+Math.imul(U,Y)|0,n=n+Math.imul(U,F)|0,r=r+Math.imul(N,q)|0,i=(i=i+Math.imul(N,V)|0)+Math.imul(H,q)|0,n=n+Math.imul(H,V)|0,r=r+Math.imul(R,W)|0,i=(i=i+Math.imul(R,$)|0)+Math.imul(M,W)|0,n=n+Math.imul(M,$)|0,r=r+Math.imul(k,X)|0,i=(i=i+Math.imul(k,AA)|0)+Math.imul(b,X)|0,n=n+Math.imul(b,AA)|0,r=r+Math.imul(y,At)|0,i=(i=i+Math.imul(y,Ar)|0)+Math.imul(B,At)|0,n=n+Math.imul(B,Ar)|0,r=r+Math.imul(E,An)|0,i=(i=i+Math.imul(E,Aa)|0)+Math.imul(w,An)|0,n=n+Math.imul(w,Aa)|0,r=r+Math.imul(I,Ao)|0,i=(i=i+Math.imul(I,Al)|0)+Math.imul(m,Ao)|0,n=n+Math.imul(m,Al)|0,r=r+Math.imul(h,Ad)|0,i=(i=i+Math.imul(h,Au)|0)+Math.imul(C,Ad)|0,n=n+Math.imul(C,Au)|0,r=r+Math.imul(d,Ah)|0;var AD=(l+r|0)+((8191&(i=(i=i+Math.imul(d,AC)|0)+Math.imul(u,Ah)|0))<<13)|0;l=((n=n+Math.imul(u,AC)|0)+(i>>>13)|0)+(AD>>>26)|0,AD&=0x3ffffff,r=Math.imul(x,Y),i=(i=Math.imul(x,F))+Math.imul(_,Y)|0,n=Math.imul(_,F),r=r+Math.imul(T,q)|0,i=(i=i+Math.imul(T,V)|0)+Math.imul(U,q)|0,n=n+Math.imul(U,V)|0,r=r+Math.imul(N,W)|0,i=(i=i+Math.imul(N,$)|0)+Math.imul(H,W)|0,n=n+Math.imul(H,$)|0,r=r+Math.imul(R,X)|0,i=(i=i+Math.imul(R,AA)|0)+Math.imul(M,X)|0,n=n+Math.imul(M,AA)|0,r=r+Math.imul(k,At)|0,i=(i=i+Math.imul(k,Ar)|0)+Math.imul(b,At)|0,n=n+Math.imul(b,Ar)|0,r=r+Math.imul(y,An)|0,i=(i=i+Math.imul(y,Aa)|0)+Math.imul(B,An)|0,n=n+Math.imul(B,Aa)|0,r=r+Math.imul(E,Ao)|0,i=(i=i+Math.imul(E,Al)|0)+Math.imul(w,Ao)|0,n=n+Math.imul(w,Al)|0,r=r+Math.imul(I,Ad)|0,i=(i=i+Math.imul(I,Au)|0)+Math.imul(m,Ad)|0,n=n+Math.imul(m,Au)|0,r=r+Math.imul(h,Ah)|0;var Ak=(l+r|0)+((8191&(i=(i=i+Math.imul(h,AC)|0)+Math.imul(C,Ah)|0))<<13)|0;l=((n=n+Math.imul(C,AC)|0)+(i>>>13)|0)+(Ak>>>26)|0,Ak&=0x3ffffff,r=Math.imul(x,q),i=(i=Math.imul(x,V))+Math.imul(_,q)|0,n=Math.imul(_,V),r=r+Math.imul(T,W)|0,i=(i=i+Math.imul(T,$)|0)+Math.imul(U,W)|0,n=n+Math.imul(U,$)|0,r=r+Math.imul(N,X)|0,i=(i=i+Math.imul(N,AA)|0)+Math.imul(H,X)|0,n=n+Math.imul(H,AA)|0,r=r+Math.imul(R,At)|0,i=(i=i+Math.imul(R,Ar)|0)+Math.imul(M,At)|0,n=n+Math.imul(M,Ar)|0,r=r+Math.imul(k,An)|0,i=(i=i+Math.imul(k,Aa)|0)+Math.imul(b,An)|0,n=n+Math.imul(b,Aa)|0,r=r+Math.imul(y,Ao)|0,i=(i=i+Math.imul(y,Al)|0)+Math.imul(B,Ao)|0,n=n+Math.imul(B,Al)|0,r=r+Math.imul(E,Ad)|0,i=(i=i+Math.imul(E,Au)|0)+Math.imul(w,Ad)|0,n=n+Math.imul(w,Au)|0,r=r+Math.imul(I,Ah)|0;var Ab=(l+r|0)+((8191&(i=(i=i+Math.imul(I,AC)|0)+Math.imul(m,Ah)|0))<<13)|0;l=((n=n+Math.imul(m,AC)|0)+(i>>>13)|0)+(Ab>>>26)|0,Ab&=0x3ffffff,r=Math.imul(x,W),i=(i=Math.imul(x,$))+Math.imul(_,W)|0,n=Math.imul(_,$),r=r+Math.imul(T,X)|0,i=(i=i+Math.imul(T,AA)|0)+Math.imul(U,X)|0,n=n+Math.imul(U,AA)|0,r=r+Math.imul(N,At)|0,i=(i=i+Math.imul(N,Ar)|0)+Math.imul(H,At)|0,n=n+Math.imul(H,Ar)|0,r=r+Math.imul(R,An)|0,i=(i=i+Math.imul(R,Aa)|0)+Math.imul(M,An)|0,n=n+Math.imul(M,Aa)|0,r=r+Math.imul(k,Ao)|0,i=(i=i+Math.imul(k,Al)|0)+Math.imul(b,Ao)|0,n=n+Math.imul(b,Al)|0,r=r+Math.imul(y,Ad)|0,i=(i=i+Math.imul(y,Au)|0)+Math.imul(B,Ad)|0,n=n+Math.imul(B,Au)|0,r=r+Math.imul(E,Ah)|0;var AS=(l+r|0)+((8191&(i=(i=i+Math.imul(E,AC)|0)+Math.imul(w,Ah)|0))<<13)|0;l=((n=n+Math.imul(w,AC)|0)+(i>>>13)|0)+(AS>>>26)|0,AS&=0x3ffffff,r=Math.imul(x,X),i=(i=Math.imul(x,AA))+Math.imul(_,X)|0,n=Math.imul(_,AA),r=r+Math.imul(T,At)|0,i=(i=i+Math.imul(T,Ar)|0)+Math.imul(U,At)|0,n=n+Math.imul(U,Ar)|0,r=r+Math.imul(N,An)|0,i=(i=i+Math.imul(N,Aa)|0)+Math.imul(H,An)|0,n=n+Math.imul(H,Aa)|0,r=r+Math.imul(R,Ao)|0,i=(i=i+Math.imul(R,Al)|0)+Math.imul(M,Ao)|0,n=n+Math.imul(M,Al)|0,r=r+Math.imul(k,Ad)|0,i=(i=i+Math.imul(k,Au)|0)+Math.imul(b,Ad)|0,n=n+Math.imul(b,Au)|0,r=r+Math.imul(y,Ah)|0;var AR=(l+r|0)+((8191&(i=(i=i+Math.imul(y,AC)|0)+Math.imul(B,Ah)|0))<<13)|0;l=((n=n+Math.imul(B,AC)|0)+(i>>>13)|0)+(AR>>>26)|0,AR&=0x3ffffff,r=Math.imul(x,At),i=(i=Math.imul(x,Ar))+Math.imul(_,At)|0,n=Math.imul(_,Ar),r=r+Math.imul(T,An)|0,i=(i=i+Math.imul(T,Aa)|0)+Math.imul(U,An)|0,n=n+Math.imul(U,Aa)|0,r=r+Math.imul(N,Ao)|0,i=(i=i+Math.imul(N,Al)|0)+Math.imul(H,Ao)|0,n=n+Math.imul(H,Al)|0,r=r+Math.imul(R,Ad)|0,i=(i=i+Math.imul(R,Au)|0)+Math.imul(M,Ad)|0,n=n+Math.imul(M,Au)|0,r=r+Math.imul(k,Ah)|0;var AM=(l+r|0)+((8191&(i=(i=i+Math.imul(k,AC)|0)+Math.imul(b,Ah)|0))<<13)|0;l=((n=n+Math.imul(b,AC)|0)+(i>>>13)|0)+(AM>>>26)|0,AM&=0x3ffffff,r=Math.imul(x,An),i=(i=Math.imul(x,Aa))+Math.imul(_,An)|0,n=Math.imul(_,Aa),r=r+Math.imul(T,Ao)|0,i=(i=i+Math.imul(T,Al)|0)+Math.imul(U,Ao)|0,n=n+Math.imul(U,Al)|0,r=r+Math.imul(N,Ad)|0,i=(i=i+Math.imul(N,Au)|0)+Math.imul(H,Ad)|0,n=n+Math.imul(H,Au)|0,r=r+Math.imul(R,Ah)|0;var AO=(l+r|0)+((8191&(i=(i=i+Math.imul(R,AC)|0)+Math.imul(M,Ah)|0))<<13)|0;l=((n=n+Math.imul(M,AC)|0)+(i>>>13)|0)+(AO>>>26)|0,AO&=0x3ffffff,r=Math.imul(x,Ao),i=(i=Math.imul(x,Al))+Math.imul(_,Ao)|0,n=Math.imul(_,Al),r=r+Math.imul(T,Ad)|0,i=(i=i+Math.imul(T,Au)|0)+Math.imul(U,Ad)|0,n=n+Math.imul(U,Au)|0,r=r+Math.imul(N,Ah)|0;var AN=(l+r|0)+((8191&(i=(i=i+Math.imul(N,AC)|0)+Math.imul(H,Ah)|0))<<13)|0;l=((n=n+Math.imul(H,AC)|0)+(i>>>13)|0)+(AN>>>26)|0,AN&=0x3ffffff,r=Math.imul(x,Ad),i=(i=Math.imul(x,Au))+Math.imul(_,Ad)|0,n=Math.imul(_,Au),r=r+Math.imul(T,Ah)|0;var AH=(l+r|0)+((8191&(i=(i=i+Math.imul(T,AC)|0)+Math.imul(U,Ah)|0))<<13)|0;l=((n=n+Math.imul(U,AC)|0)+(i>>>13)|0)+(AH>>>26)|0,AH&=0x3ffffff,r=Math.imul(x,Ah);var Av=(l+r|0)+((8191&(i=(i=Math.imul(x,AC))+Math.imul(_,Ah)|0))<<13)|0;return l=((n=Math.imul(_,AC))+(i>>>13)|0)+(Av>>>26)|0,Av&=0x3ffffff,o[0]=Ap,o[1]=AI,o[2]=Am,o[3]=Af,o[4]=AE,o[5]=Aw,o[6]=AQ,o[7]=Ay,o[8]=AB,o[9]=AD,o[10]=Ak,o[11]=Ab,o[12]=AS,o[13]=AR,o[14]=AM,o[15]=AO,o[16]=AN,o[17]=AH,o[18]=Av,0!==l&&(o[19]=l,t.length++),t};function C(A,e,t){return new p().mulp(A,e,t)}function p(A,e){this.x=A,this.y=e}Math.imul||(h=g),n.prototype.mulTo=function(A,e){var t=this.length+A.length;return 10===this.length&&10===A.length?h(this,A,e):t<63?g(this,A,e):t<1024?function(A,e,t){t.negative=e.negative^A.negative,t.length=A.length+e.length;for(var r=0,i=0,n=0;n<t.length-1;n++){var a=i;i=0;for(var s=0x3ffffff&r,o=Math.min(n,e.length-1),l=Math.max(0,n-A.length+1);l<=o;l++){var c=n-l,d=(0|A.words[c])*(0|e.words[l]),u=0x3ffffff&d;a=a+(d/0x4000000|0)|0,s=0x3ffffff&(u=u+s|0),i+=(a=a+(u>>>26)|0)>>>26,a&=0x3ffffff}t.words[n]=s,r=a,a=i}return 0!==r?t.words[n]=r:t.length--,t.strip()}(this,A,e):C(this,A,e)},p.prototype.makeRBT=function(A){for(var e=Array(A),t=n.prototype._countBits(A)-1,r=0;r<A;r++)e[r]=this.revBin(r,t,A);return e},p.prototype.revBin=function(A,e,t){if(0===A||A===t-1)return A;for(var r=0,i=0;i<e;i++)r|=(1&A)<<e-i-1,A>>=1;return r},p.prototype.permute=function(A,e,t,r,i,n){for(var a=0;a<n;a++)r[a]=e[A[a]],i[a]=t[A[a]]},p.prototype.transform=function(A,e,t,r,i,n){this.permute(n,A,e,t,r,i);for(var a=1;a<i;a<<=1)for(var s=a<<1,o=Math.cos(2*Math.PI/s),l=Math.sin(2*Math.PI/s),c=0;c<i;c+=s)for(var d=o,u=l,g=0;g<a;g++){var h=t[c+g],C=r[c+g],p=t[c+g+a],I=r[c+g+a],m=d*p-u*I;I=d*I+u*p,p=m,t[c+g]=h+p,r[c+g]=C+I,t[c+g+a]=h-p,r[c+g+a]=C-I,g!==s&&(m=o*d-l*u,u=o*u+l*d,d=m)}},p.prototype.guessLen13b=function(A,e){var t=1|Math.max(e,A),r=1&t,i=0;for(t=t/2|0;t;t>>>=1)i++;return 1<<i+1+r},p.prototype.conjugate=function(A,e,t){if(!(t<=1))for(var r=0;r<t/2;r++){var i=A[r];A[r]=A[t-r-1],A[t-r-1]=i,i=e[r],e[r]=-e[t-r-1],e[t-r-1]=-i}},p.prototype.normalize13b=function(A,e){for(var t=0,r=0;r<e/2;r++){var i=8192*Math.round(A[2*r+1]/e)+Math.round(A[2*r]/e)+t;A[r]=0x3ffffff&i,t=i<0x4000000?0:i/0x4000000|0}return A},p.prototype.convert13b=function(A,e,t,i){for(var n=0,a=0;a<e;a++)n+=0|A[a],t[2*a]=8191&n,n>>>=13,t[2*a+1]=8191&n,n>>>=13;for(a=2*e;a<i;++a)t[a]=0;r(0===n),r((-8192&n)==0)},p.prototype.stub=function(A){for(var e=Array(A),t=0;t<A;t++)e[t]=0;return e},p.prototype.mulp=function(A,e,t){var r=2*this.guessLen13b(A.length,e.length),i=this.makeRBT(r),n=this.stub(r),a=Array(r),s=Array(r),o=Array(r),l=Array(r),c=Array(r),d=Array(r),u=t.words;u.length=r,this.convert13b(A.words,A.length,a,r),this.convert13b(e.words,e.length,l,r),this.transform(a,n,s,o,r,i),this.transform(l,n,c,d,r,i);for(var g=0;g<r;g++){var h=s[g]*c[g]-o[g]*d[g];o[g]=s[g]*d[g]+o[g]*c[g],s[g]=h}return this.conjugate(s,o,r),this.transform(s,o,u,n,r,i),this.conjugate(u,n,r),this.normalize13b(u,r),t.negative=A.negative^e.negative,t.length=A.length+e.length,t.strip()},n.prototype.mul=function(A){var e=new n(null);return e.words=Array(this.length+A.length),this.mulTo(A,e)},n.prototype.mulf=function(A){var e=new n(null);return e.words=Array(this.length+A.length),C(this,A,e)},n.prototype.imul=function(A){return this.clone().mulTo(A,this)},n.prototype.imuln=function(A){r("number"==typeof A),r(A<0x4000000);for(var e=0,t=0;t<this.length;t++){var i=(0|this.words[t])*A,n=(0x3ffffff&i)+(0x3ffffff&e);e>>=26,e+=(i/0x4000000|0)+(n>>>26),this.words[t]=0x3ffffff&n}return 0!==e&&(this.words[t]=e,this.length++),0===A&&(this.length=1,this._normSign()),this},n.prototype.muln=function(A){return this.clone().imuln(A)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(A){var e=function(A){for(var e=Array(A.bitLength()),t=0;t<e.length;t++){var r=t/26|0,i=t%26;e[t]=(A.words[r]&1<<i)>>>i}return e}(A);if(0===e.length)return new n(1);for(var t=this,r=0;r<e.length&&0===e[r];r++,t=t.sqr());if(++r<e.length)for(var i=t.sqr();r<e.length;r++,i=i.sqr())0!==e[r]&&(t=t.mul(i));return t},n.prototype.iushln=function(A){r("number"==typeof A&&A>=0);var e,t=A%26,i=(A-t)/26,n=0x3ffffff>>>26-t<<26-t;if(0!==t){var a=0;for(e=0;e<this.length;e++){var s=this.words[e]&n,o=(0|this.words[e])-s<<t;this.words[e]=o|a,a=s>>>26-t}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},n.prototype.ishln=function(A){return r(0===this.negative),this.iushln(A)},n.prototype.iushrn=function(A,e,t){r("number"==typeof A&&A>=0);var i=e?(e-e%26)/26:0,n=A%26,a=Math.min((A-n)/26,this.length),s=0x3ffffff^0x3ffffff>>>n<<n;if(i-=a,i=Math.max(0,i),t){for(var o=0;o<a;o++)t.words[o]=this.words[o];t.length=a}if(0===a);else if(this.length>a)for(this.length-=a,o=0;o<this.length;o++)this.words[o]=this.words[o+a];else this.words[0]=0,this.length=1;var l=0;for(o=this.length-1;o>=0&&(0!==l||o>=i);o--){var c=0|this.words[o];this.words[o]=l<<26-n|c>>>n,l=c&s}return t&&0!==l&&(t.words[t.length++]=l),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(A,e,t){return r(0===this.negative),this.iushrn(A,e,t)},n.prototype.shln=function(A){return this.clone().ishln(A)},n.prototype.ushln=function(A){return this.clone().iushln(A)},n.prototype.shrn=function(A){return this.clone().ishrn(A)},n.prototype.ushrn=function(A){return this.clone().iushrn(A)},n.prototype.testn=function(A){r("number"==typeof A&&A>=0);var e=A%26,t=(A-e)/26;return!(this.length<=t)&&!!(this.words[t]&1<<e)},n.prototype.imaskn=function(A){r("number"==typeof A&&A>=0);var e=A%26,t=(A-e)/26;return(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=t)?this:(0!==e&&t++,this.length=Math.min(t,this.length),0!==e&&(this.words[this.length-1]&=0x3ffffff^0x3ffffff>>>e<<e),0===this.length&&(this.words[0]=0,this.length=1),this.strip())},n.prototype.maskn=function(A){return this.clone().imaskn(A)},n.prototype.iaddn=function(A){return(r("number"==typeof A),r(A<0x4000000),A<0)?this.isubn(-A):0!==this.negative?(1===this.length&&(0|this.words[0])<A?(this.words[0]=A-(0|this.words[0]),this.negative=0):(this.negative=0,this.isubn(A),this.negative=1),this):this._iaddn(A)},n.prototype._iaddn=function(A){this.words[0]+=A;for(var e=0;e<this.length&&this.words[e]>=0x4000000;e++)this.words[e]-=0x4000000,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(A){if(r("number"==typeof A),r(A<0x4000000),A<0)return this.iaddn(-A);if(0!==this.negative)return this.negative=0,this.iaddn(A),this.negative=1,this;if(this.words[0]-=A,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=0x4000000,this.words[e+1]-=1;return this.strip()},n.prototype.addn=function(A){return this.clone().iaddn(A)},n.prototype.subn=function(A){return this.clone().isubn(A)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(A,e,t){var i,n,a=A.length+t;this._expand(a);var s=0;for(i=0;i<A.length;i++){n=(0|this.words[i+t])+s;var o=(0|A.words[i])*e;n-=0x3ffffff&o,s=(n>>26)-(o/0x4000000|0),this.words[i+t]=0x3ffffff&n}for(;i<this.length-t;i++)s=(n=(0|this.words[i+t])+s)>>26,this.words[i+t]=0x3ffffff&n;if(0===s)return this.strip();for(r(-1===s),s=0,i=0;i<this.length;i++)s=(n=-(0|this.words[i])+s)>>26,this.words[i]=0x3ffffff&n;return this.negative=1,this.strip()},n.prototype._wordDiv=function(A,e){var t,r=this.length-A.length,i=this.clone(),a=A,s=0|a.words[a.length-1];0!=(r=26-this._countBits(s))&&(a=a.ushln(r),i.iushln(r),s=0|a.words[a.length-1]);var o=i.length-a.length;if("mod"!==e){(t=new n(null)).length=o+1,t.words=Array(t.length);for(var l=0;l<t.length;l++)t.words[l]=0}var c=i.clone()._ishlnsubmul(a,1,o);0===c.negative&&(i=c,t&&(t.words[o]=1));for(var d=o-1;d>=0;d--){var u=(0|i.words[a.length+d])*0x4000000+(0|i.words[a.length+d-1]);for(u=Math.min(u/s|0,0x3ffffff),i._ishlnsubmul(a,u,d);0!==i.negative;)u--,i.negative=0,i._ishlnsubmul(a,1,d),i.isZero()||(i.negative^=1);t&&(t.words[d]=u)}return t&&t.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:t||null,mod:i}},n.prototype.divmod=function(A,e,t){var i,a,s;return(r(!A.isZero()),this.isZero())?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===A.negative?(s=this.neg().divmod(A,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(a=s.mod.neg(),t&&0!==a.negative&&a.iadd(A)),{div:i,mod:a}):0===this.negative&&0!==A.negative?(s=this.divmod(A.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):(this.negative&A.negative)!=0?(s=this.neg().divmod(A.neg(),e),"div"!==e&&(a=s.mod.neg(),t&&0!==a.negative&&a.isub(A)),{div:s.div,mod:a}):A.length>this.length||0>this.cmp(A)?{div:new n(0),mod:this}:1===A.length?"div"===e?{div:this.divn(A.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(A.words[0]))}:{div:this.divn(A.words[0]),mod:new n(this.modn(A.words[0]))}:this._wordDiv(A,e)},n.prototype.div=function(A){return this.divmod(A,"div",!1).div},n.prototype.mod=function(A){return this.divmod(A,"mod",!1).mod},n.prototype.umod=function(A){return this.divmod(A,"mod",!0).mod},n.prototype.divRound=function(A){var e=this.divmod(A);if(e.mod.isZero())return e.div;var t=e.mod.abs(),r=A.abs().iushrn(1),i=1&A.words[0],a=t.cmp(r);if(a<0||1===i&&0===a)return e.div;var s=new n(1);return s.negative=this.negative^A.negative,e.div.iadd(s)},n.prototype.modn=function(A){r(A<=0x3ffffff);for(var e=0x4000000%A,t=0,i=this.length-1;i>=0;i--)t=(e*t+(0|this.words[i]))%A;return t},n.prototype.idivn=function(A){r(A<=0x3ffffff);for(var e=0,t=this.length-1;t>=0;t--){var i=(0|this.words[t])+0x4000000*e;this.words[t]=i/A|0,e=i%A}return this.strip()},n.prototype.divn=function(A){return this.clone().idivn(A)},n.prototype.egcd=function(A){r(0===A.negative),r(!A.isZero());var e=this,t=A.clone();e=0!==e.negative?e.umod(A):e.clone();for(var i=new n(1),a=new n(0),s=new n(0),o=new n(1),l=0;e.isEven()&&t.isEven();)e.iushrn(1),t.iushrn(1),++l;for(var c=t.clone(),d=e.clone();!e.isZero();){for(var u=0,g=1;(e.words[0]&g)==0&&u<26;++u,g<<=1);if(u>0)for(e.iushrn(u);u-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(c),a.isub(d)),i.iushrn(1),a.iushrn(1);for(var h=0,C=1;(t.words[0]&C)==0&&h<26;++h,C<<=1);if(h>0)for(t.iushrn(h);h-- >0;)(s.isOdd()||o.isOdd())&&(s.iadd(c),o.isub(d)),s.iushrn(1),o.iushrn(1);e.cmp(t)>=0?(e.isub(t),i.isub(s),a.isub(o)):(t.isub(e),s.isub(i),o.isub(a))}return{a:s,b:o,gcd:t.iushln(l)}},n.prototype._invmp=function(A){r(0===A.negative),r(!A.isZero());var e,t=this,i=A.clone();t=0!==t.negative?t.umod(A):t.clone();for(var a=new n(1),s=new n(0),o=i.clone();t.cmpn(1)>0&&i.cmpn(1)>0;){for(var l=0,c=1;(t.words[0]&c)==0&&l<26;++l,c<<=1);if(l>0)for(t.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(o),a.iushrn(1);for(var d=0,u=1;(i.words[0]&u)==0&&d<26;++d,u<<=1);if(d>0)for(i.iushrn(d);d-- >0;)s.isOdd()&&s.iadd(o),s.iushrn(1);t.cmp(i)>=0?(t.isub(i),a.isub(s)):(i.isub(t),s.isub(a))}return 0>(e=0===t.cmpn(1)?a:s).cmpn(0)&&e.iadd(A),e},n.prototype.gcd=function(A){if(this.isZero())return A.abs();if(A.isZero())return this.abs();var e=this.clone(),t=A.clone();e.negative=0,t.negative=0;for(var r=0;e.isEven()&&t.isEven();r++)e.iushrn(1),t.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;t.isEven();)t.iushrn(1);var i=e.cmp(t);if(i<0){var n=e;e=t,t=n}else if(0===i||0===t.cmpn(1))break;e.isub(t)}return t.iushln(r)},n.prototype.invm=function(A){return this.egcd(A).a.umod(A)},n.prototype.isEven=function(){return(1&this.words[0])==0},n.prototype.isOdd=function(){return(1&this.words[0])==1},n.prototype.andln=function(A){return this.words[0]&A},n.prototype.bincn=function(A){r("number"==typeof A);var e=A%26,t=(A-e)/26,i=1<<e;if(this.length<=t)return this._expand(t+1),this.words[t]|=i,this;for(var n=i,a=t;0!==n&&a<this.length;a++){var s=0|this.words[a];s+=n,n=s>>>26,s&=0x3ffffff,this.words[a]=s}return 0!==n&&(this.words[a]=n,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(A){var e,t=A<0;if(0!==this.negative&&!t)return -1;if(0===this.negative&&t)return 1;if(this.strip(),this.length>1)e=1;else{t&&(A=-A),r(A<=0x3ffffff,"Number is too big");var i=0|this.words[0];e=i===A?0:i<A?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(A){if(0!==this.negative&&0===A.negative)return -1;if(0===this.negative&&0!==A.negative)return 1;var e=this.ucmp(A);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(A){if(this.length>A.length)return 1;if(this.length<A.length)return -1;for(var e=0,t=this.length-1;t>=0;t--){var r=0|this.words[t],i=0|A.words[t];if(r!==i){r<i?e=-1:r>i&&(e=1);break}}return e},n.prototype.gtn=function(A){return 1===this.cmpn(A)},n.prototype.gt=function(A){return 1===this.cmp(A)},n.prototype.gten=function(A){return this.cmpn(A)>=0},n.prototype.gte=function(A){return this.cmp(A)>=0},n.prototype.ltn=function(A){return -1===this.cmpn(A)},n.prototype.lt=function(A){return -1===this.cmp(A)},n.prototype.lten=function(A){return 0>=this.cmpn(A)},n.prototype.lte=function(A){return 0>=this.cmp(A)},n.prototype.eqn=function(A){return 0===this.cmpn(A)},n.prototype.eq=function(A){return 0===this.cmp(A)},n.red=function(A){return new y(A)},n.prototype.toRed=function(A){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),A.convertTo(this)._forceRed(A)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(A){return this.red=A,this},n.prototype.forceRed=function(A){return r(!this.red,"Already a number in reduction context"),this._forceRed(A)},n.prototype.redAdd=function(A){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,A)},n.prototype.redIAdd=function(A){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,A)},n.prototype.redSub=function(A){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,A)},n.prototype.redISub=function(A){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,A)},n.prototype.redShl=function(A){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,A)},n.prototype.redMul=function(A){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,A),this.red.mul(this,A)},n.prototype.redIMul=function(A){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,A),this.red.imul(this,A)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(A){return r(this.red&&!A.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,A)};var I={k256:null,p224:null,p192:null,p25519:null};function m(A,e){this.name=A,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function f(){m.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function E(){m.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){m.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function Q(){m.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function y(A){if("string"==typeof A){var e=n._prime(A);this.m=e.p,this.prime=e}else r(A.gtn(1),"modulus must be greater than 1"),this.m=A,this.prime=null}function B(A){y.call(this,A),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var A=new n(null);return A.words=Array(Math.ceil(this.n/13)),A},m.prototype.ireduce=function(A){var e,t=A;do this.split(t,this.tmp),e=(t=(t=this.imulK(t)).iadd(this.tmp)).bitLength();while(e>this.n)var r=e<this.n?-1:t.ucmp(this.p);return 0===r?(t.words[0]=0,t.length=1):r>0?t.isub(this.p):void 0!==t.strip?t.strip():t._strip(),t},m.prototype.split=function(A,e){A.iushrn(this.n,0,e)},m.prototype.imulK=function(A){return A.imul(this.k)},i(f,m),f.prototype.split=function(A,e){for(var t=Math.min(A.length,9),r=0;r<t;r++)e.words[r]=A.words[r];if(e.length=t,A.length<=9){A.words[0]=0,A.length=1;return}var i=A.words[9];for(e.words[e.length++]=4194303&i,r=10;r<A.length;r++){var n=0|A.words[r];A.words[r-10]=(4194303&n)<<4|i>>>22,i=n}i>>>=22,A.words[r-10]=i,0===i&&A.length>10?A.length-=10:A.length-=9},f.prototype.imulK=function(A){A.words[A.length]=0,A.words[A.length+1]=0,A.length+=2;for(var e=0,t=0;t<A.length;t++){var r=0|A.words[t];e+=977*r,A.words[t]=0x3ffffff&e,e=64*r+(e/0x4000000|0)}return 0===A.words[A.length-1]&&(A.length--,0===A.words[A.length-1]&&A.length--),A},i(E,m),i(w,m),i(Q,m),Q.prototype.imulK=function(A){for(var e=0,t=0;t<A.length;t++){var r=(0|A.words[t])*19+e,i=0x3ffffff&r;r>>>=26,A.words[t]=i,e=r}return 0!==e&&(A.words[A.length++]=e),A},n._prime=function(A){var e;if(I[A])return I[A];if("k256"===A)e=new f;else if("p224"===A)e=new E;else if("p192"===A)e=new w;else if("p25519"===A)e=new Q;else throw Error("Unknown prime "+A);return I[A]=e,e},y.prototype._verify1=function(A){r(0===A.negative,"red works only with positives"),r(A.red,"red works only with red numbers")},y.prototype._verify2=function(A,e){r((A.negative|e.negative)==0,"red works only with positives"),r(A.red&&A.red===e.red,"red works only with red numbers")},y.prototype.imod=function(A){return this.prime?this.prime.ireduce(A)._forceRed(this):A.umod(this.m)._forceRed(this)},y.prototype.neg=function(A){return A.isZero()?A.clone():this.m.sub(A)._forceRed(this)},y.prototype.add=function(A,e){this._verify2(A,e);var t=A.add(e);return t.cmp(this.m)>=0&&t.isub(this.m),t._forceRed(this)},y.prototype.iadd=function(A,e){this._verify2(A,e);var t=A.iadd(e);return t.cmp(this.m)>=0&&t.isub(this.m),t},y.prototype.sub=function(A,e){this._verify2(A,e);var t=A.sub(e);return 0>t.cmpn(0)&&t.iadd(this.m),t._forceRed(this)},y.prototype.isub=function(A,e){this._verify2(A,e);var t=A.isub(e);return 0>t.cmpn(0)&&t.iadd(this.m),t},y.prototype.shl=function(A,e){return this._verify1(A),this.imod(A.ushln(e))},y.prototype.imul=function(A,e){return this._verify2(A,e),this.imod(A.imul(e))},y.prototype.mul=function(A,e){return this._verify2(A,e),this.imod(A.mul(e))},y.prototype.isqr=function(A){return this.imul(A,A.clone())},y.prototype.sqr=function(A){return this.mul(A,A)},y.prototype.sqrt=function(A){if(A.isZero())return A.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var t=this.m.add(new n(1)).iushrn(2);return this.pow(A,t)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);r(!i.isZero());var s=new n(1).toRed(this),o=s.redNeg(),l=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new n(2*c*c).toRed(this);0!==this.pow(c,l).cmp(o);)c.redIAdd(o);for(var d=this.pow(c,i),u=this.pow(A,i.addn(1).iushrn(1)),g=this.pow(A,i),h=a;0!==g.cmp(s);){for(var C=g,p=0;0!==C.cmp(s);p++)C=C.redSqr();r(p<h);var I=this.pow(d,new n(1).iushln(h-p-1));u=u.redMul(I),d=I.redSqr(),g=g.redMul(d),h=p}return u},y.prototype.invm=function(A){var e=A._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},y.prototype.pow=function(A,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return A.clone();var t=Array(16);t[0]=new n(1).toRed(this),t[1]=A;for(var r=2;r<t.length;r++)t[r]=this.mul(t[r-1],A);var i=t[0],a=0,s=0,o=e.bitLength()%26;for(0===o&&(o=26),r=e.length-1;r>=0;r--){for(var l=e.words[r],c=o-1;c>=0;c--){var d=l>>c&1;if(i!==t[0]&&(i=this.sqr(i)),0===d&&0===a){s=0;continue}a<<=1,a|=d,(4==++s||0===r&&0===c)&&(i=this.mul(i,t[a]),s=0,a=0)}o=26}return i},y.prototype.convertTo=function(A){var e=A.umod(this.m);return e===A?e.clone():e},y.prototype.convertFrom=function(A){var e=A.clone();return e.red=null,e},n.mont=function(A){return new B(A)},i(B,y),B.prototype.convertTo=function(A){return this.imod(A.ushln(this.shift))},B.prototype.convertFrom=function(A){var e=this.imod(A.mul(this.rinv));return e.red=null,e},B.prototype.imul=function(A,e){if(A.isZero()||e.isZero())return A.words[0]=0,A.length=1,A;var t=A.imul(e),r=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=t.isub(r).iushrn(this.shift),n=i;return i.cmp(this.m)>=0?n=i.isub(this.m):0>i.cmpn(0)&&(n=i.iadd(this.m)),n._forceRed(this)},B.prototype.mul=function(A,e){if(A.isZero()||e.isZero())return new n(0)._forceRed(this);var t=A.mul(e),r=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=t.isub(r).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):0>i.cmpn(0)&&(a=i.iadd(this.m)),a._forceRed(this)},B.prototype.invm=function(A){return this.imod(A._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,A.e)},780353,(A,e,t)=>{let r;t.formatArgs=function(A){if(A[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+A[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;let t="color: "+this.color;A.splice(1,0,t,"color: inherit");let r=0,i=0;A[0].replace(/%[a-zA-Z%]/g,A=>{"%%"!==A&&(r++,"%c"===A&&(i=r))}),A.splice(i,0,t)},t.save=function(A){try{A?t.storage.setItem("debug",A):t.storage.removeItem("debug")}catch(A){}},t.load=function(){let A;try{A=t.storage.getItem("debug")||t.storage.getItem("DEBUG")}catch(A){}return!A&&"u">typeof process&&"env"in process&&(A=process.env.DEBUG),A},t.useColors=function(){let A;return!("u">typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("u">typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"u">typeof navigator&&navigator.userAgent&&(A=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(A[1],10)>=31||"u">typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(A){}}(),r=!1,t.destroy=()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))},t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=A.r(420319)(t);let{formatters:i}=e.exports;i.j=function(A){try{return JSON.stringify(A)}catch(A){return"[UnexpectedJSONParseError]: "+A.message}}},420319,(A,e,t)=>{e.exports=function(e){function t(A){let e,i,n,a=null;function s(...A){if(!s.enabled)return;let r=Number(new Date);s.diff=r-(e||r),s.prev=e,s.curr=r,e=r,A[0]=t.coerce(A[0]),"string"!=typeof A[0]&&A.unshift("%O");let i=0;A[0]=A[0].replace(/%([a-zA-Z%])/g,(e,r)=>{if("%%"===e)return"%";i++;let n=t.formatters[r];if("function"==typeof n){let t=A[i];e=n.call(s,t),A.splice(i,1),i--}return e}),t.formatArgs.call(s,A),(s.log||t.log).apply(s,A)}return s.namespace=A,s.useColors=t.useColors(),s.color=t.selectColor(A),s.extend=r,s.destroy=t.destroy,Object.defineProperty(s,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==a?a:(i!==t.namespaces&&(i=t.namespaces,n=t.enabled(A)),n),set:A=>{a=A}}),"function"==typeof t.init&&t.init(s),s}function r(A,e){let r=t(this.namespace+(void 0===e?":":e)+A);return r.log=this.log,r}function i(A,e){let t=0,r=0,i=-1,n=0;for(;t<A.length;)if(r<e.length&&(e[r]===A[t]||"*"===e[r]))"*"===e[r]?(i=r,n=t):t++,r++;else{if(-1===i)return!1;r=i+1,t=++n}for(;r<e.length&&"*"===e[r];)r++;return r===e.length}return t.debug=t,t.default=t,t.coerce=function(A){return A instanceof Error?A.stack||A.message:A},t.disable=function(){let A=[...t.names,...t.skips.map(A=>"-"+A)].join(",");return t.enable(""),A},t.enable=function(A){for(let e of(t.save(A),t.namespaces=A,t.names=[],t.skips=[],("string"==typeof A?A:"").trim().replace(/\s+/g,",").split(",").filter(Boolean)))"-"===e[0]?t.skips.push(e.slice(1)):t.names.push(e)},t.enabled=function(A){for(let e of t.skips)if(i(A,e))return!1;for(let e of t.names)if(i(A,e))return!0;return!1},t.humanize=A.r(951550),t.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(e).forEach(A=>{t[A]=e[A]}),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(A){let e=0;for(let t=0;t<A.length;t++)e=(e<<5)-e+A.charCodeAt(t)|0;return t.colors[Math.abs(e)%t.colors.length]},t.enable(t.load()),t}},426914,(A,e,t)=>{"u"<typeof process||"renderer"===process.type||process.__nwjs?e.exports=A.r(780353):e.exports=A.r(278766)},278766,(A,e,t)=>{let r=A.r(870722),i=A.r(224361);t.init=function(A){A.inspectOpts={};let e=Object.keys(t.inspectOpts);for(let r=0;r<e.length;r++)A.inspectOpts[e[r]]=t.inspectOpts[e[r]]},t.log=function(...A){return process.stderr.write(i.formatWithOptions(t.inspectOpts,...A)+"\n")},t.formatArgs=function(A){let{namespace:r,useColors:i}=this;if(i){let t=this.color,i="\x1b[3"+(t<8?t:"8;5;"+t),n=` ${i};1m${r} \x1b[0m`;A[0]=n+A[0].split("\n").join("\n"+n),A.push(i+"m+"+e.exports.humanize(this.diff)+"\x1b[0m")}else A[0]=(t.inspectOpts.hideDate?"":new Date().toISOString()+" ")+r+" "+A[0]},t.save=function(A){A?process.env.DEBUG=A:delete process.env.DEBUG},t.load=function(){return process.env.DEBUG},t.useColors=function(){return"colors"in t.inspectOpts?!!t.inspectOpts.colors:r.isatty(process.stderr.fd)},t.destroy=i.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),t.colors=[6,2,3,4,5,1];try{let e=A.r(524353);e&&(e.stderr||e).level>=2&&(t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(A){}t.inspectOpts=Object.keys(process.env).filter(A=>/^debug_/i.test(A)).reduce((A,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(A,e)=>e.toUpperCase()),r=process.env[e];return r=!!/^(yes|on|true|enabled)$/i.test(r)||!/^(no|off|false|disabled)$/i.test(r)&&("null"===r?null:Number(r)),A[t]=r,A},{}),e.exports=A.r(420319)(t);let{formatters:n}=e.exports;n.o=function(A){return this.inspectOpts.colors=this.useColors,i.inspect(A,this.inspectOpts).split("\n").map(A=>A.trim()).join(" ")},n.O=function(A){return this.inspectOpts.colors=this.useColors,i.inspect(A,this.inspectOpts)}},425530,(A,e,t)=>{var r;function i(A){for(var e,t,r,i,n=1,a=[].slice.call(arguments),s=0,o=A.length,l="",c=!1,d=!1,u=function(){return a[n++]};s<o;++s)if(e=A[s],c)switch(c=!1,"."==e?(d=!1,e=A[++s]):"0"==e&&"."==A[s+1]?(d=!0,s+=2,e=A[s]):d=!0,i=function(){for(var t="";/\d/.test(A[s]);)t+=A[s++],e=A[s];return t.length>0?parseInt(t):null}(),e){case"b":l+=parseInt(u(),10).toString(2);break;case"c":"string"==typeof(t=u())||t instanceof String?l+=t:l+=String.fromCharCode(parseInt(t,10));break;case"d":l+=parseInt(u(),10);break;case"f":r=String(parseFloat(u()).toFixed(i||6)),l+=d?r:r.replace(/^0/,"");break;case"j":l+=JSON.stringify(u());break;case"o":l+="0"+parseInt(u(),10).toString(8);break;case"s":l+=u();break;case"x":l+="0x"+parseInt(u(),10).toString(16);break;case"X":l+="0x"+parseInt(u(),10).toString(16).toUpperCase();break;default:l+=e}else"%"===e?c=!0:l+=e;return l}(r=e.exports=i).format=i,r.vsprintf=function(A,e){return i.apply(null,[A].concat(e))},"u">typeof console&&"function"==typeof console.log&&(r.printf=function(){console.log(i.apply(null,arguments))})},436057,(A,e,t)=>{let{marked:r}=A.r(754461);r.setOptions({breaks:!0,smartyPants:!0}),e.exports=class A{static md_to_html(A){return r.parse(A)}static jira_to_html(e){return r.parse(A.to_markdown(e))}static to_markdown(A){return A.replace(/^[ \t]*(\*+)\s+/gm,(A,e)=>`${Array(e.length).join(" ")}* `).replace(/^[ \t]*(#+)\s+/gm,(A,e)=>`${Array(e.length).join(" ")}1. `).replace(/^h([0-6])\.(.*)$/gm,(A,e,t)=>Array(parseInt(e,10)+1).join("#")+t).replace(/\*(\S.*)\*/g,"**$1**").replace(/_(\S.*)_/g,"*$1*").replace(/\{\{([^}]+)\}\}/g,"`$1`").replace(/\+([^+]*)\+/g,"<ins>$1</ins>").replace(/\^([^^]*)\^/g,"<sup>$1</sup>").replace(/~([^~]*)~/g,"<sub>$1</sub>").replace(/(\s+)-(\S+.*?\S)-(\s+)/g,"$1~~$2~~$3").replace(/\{code(:([a-z]+))?([:|]?(title|borderStyle|borderColor|borderWidth|bgColor|titleBGColor)=.+?)*\}([^]*?)\n?\{code\}/gm,"```$2$5\n```").replace(/{noformat}/g,"```").replace(/\[([^|]+?)\]/g,"<$1>").replace(/!(.+)!/g,"").replace(/\[(.+?)\|(.+?)\]/g,"[$1]($2)").replace(/^bq\.\s+/gm,"> ").replace(/\{color:[^}]+\}([^]*?)\{color\}/gm,"$1").replace(/\{panel:title=([^}]*)\}\n?([^]*?)\n?\{panel\}/gm,"\n| $1 |\n| --- |\n| $2 |").replace(/^[ \t]*((?:\|\|.*?)+\|\|)[ \t]*$/gm,(A,e)=>{let t=e.replace(/\|\|/g,"|");return`
|
|
1612
1612
|
${t}
|
|
1613
1613
|
${t.replace(/\|[^|]+/g,"| --- ")}`}).replace(/^[ \t]*\|/gm,"|")}static to_jira(A){let e={del:"-",ins:"+",sup:"^",sub:"~"};return A.replace(/^\n((?:\|.*?)+\|)[ \t]*\n((?:\|\s*?-{3,}\s*?)+\|)[ \t]*\n((?:(?:\|.*?)+\|[ \t]*\n)*)$/gm,(A,e,t,r)=>{let i=e.match(/[^|]+(?=\|)/g),n=t.match(/[^|]+(?=\|)/g);return i.length!==n.length?A:2===r.split("\n").length&&1===i.length?`{panel:title=${i[0].trim()}}
|
|
1614
1614
|
${r.replace(/^\|(.*)[ \t]*\|/,"$1").trim()}
|