MCPcopy
hub / github.com/openclaw/clawsweeper / automaticIssueWork

Function automaticIssueWork

dashboard/worker.ts:3103–3257  ·  view source on GitHub ↗
(storedEvents, workers)

Source from the content-addressed store, hash-verified

3101}
3102
3103export 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);

Callers 2

statusSnapshotFunction · 0.85

Calls 6

nullableStringFunction · 0.85
hasMethod · 0.80
numberOrNullFunction · 0.70
issueNumberFromUrlFunction · 0.70
getMethod · 0.45

Tested by

no test coverage detected