(storedEvents, workers)
| 3101 | } |
| 3102 | |
| 3103 | export function automaticIssueWork(storedEvents, workers) { |
| 3104 | const grouped = new Map(); |
| 3105 | const allEvents = Array.isArray(storedEvents) ? storedEvents : []; |
| 3106 | const automaticKeys = new Set(); |
| 3107 | for (const event of allEvents) { |
| 3108 | if ( |
| 3109 | event?.automatic !== true && |
| 3110 | !String(event?.event_type || "").startsWith("clawsweeper.issue_build_") |
| 3111 | ) { |
| 3112 | continue; |
| 3113 | } |
| 3114 | const repository = nullableString(event.repository); |
| 3115 | const issueNumber = |
| 3116 | numberOrNull(event.source_item_number) ?? |
| 3117 | issueNumberFromUrl(event.source_item_url) ?? |
| 3118 | issueNumberFromUrl(event.item_url); |
| 3119 | if (repository && issueNumber) automaticKeys.add(`${repository}#${issueNumber}`); |
| 3120 | } |
| 3121 | for (const event of [...allEvents].reverse()) { |
| 3122 | const repository = nullableString(event.repository); |
| 3123 | const issueNumber = |
| 3124 | numberOrNull(event.source_item_number) ?? |
| 3125 | issueNumberFromUrl(event.source_item_url) ?? |
| 3126 | issueNumberFromUrl(event.item_url); |
| 3127 | if (!repository || !issueNumber) continue; |
| 3128 | const key = `${repository}#${issueNumber}`; |
| 3129 | if (!automaticKeys.has(key)) continue; |
| 3130 | const row = grouped.get(key) ?? { |
| 3131 | id: key, |
| 3132 | repository, |
| 3133 | issue_number: issueNumber, |
| 3134 | issue_url: |
| 3135 | nullableString(event.source_item_url) || |
| 3136 | `https://github.com/${repository}/issues/${issueNumber}`, |
| 3137 | title: nullableString(event.title) || `Issue #${issueNumber}`, |
| 3138 | phase: "queued", |
| 3139 | status: "queued", |
| 3140 | run_url: null, |
| 3141 | pr_url: null, |
| 3142 | updated_at: null, |
| 3143 | active: false, |
| 3144 | worker_id: null, |
| 3145 | timeline: [], |
| 3146 | }; |
| 3147 | const eventTitle = nullableString(event.title); |
| 3148 | if ( |
| 3149 | eventTitle && |
| 3150 | isAutomaticWorkPlaceholderTitle(row.title, repository, issueNumber) && |
| 3151 | !isAutomaticWorkPlaceholderTitle(eventTitle, repository, issueNumber) |
| 3152 | ) { |
| 3153 | row.title = eventTitle; |
| 3154 | } |
| 3155 | row.phase = nullableString(event.stage) || row.phase; |
| 3156 | row.status = nullableString(event.status) || row.status; |
| 3157 | row.run_url = nullableString(event.run_url) || row.run_url; |
| 3158 | row.pr_url = |
| 3159 | nullableString(event.pr_url) || |
| 3160 | (String(event.item_url || "").includes("/pull/") ? event.item_url : row.pr_url); |
no test coverage detected