mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-15 13:03:46 +00:00
39 lines
966 B
TypeScript
39 lines
966 B
TypeScript
import type { TaskRecord } from "@sandbox-agent/foundry-shared";
|
|
|
|
export interface RepoGroup {
|
|
repoId: string;
|
|
repoRemote: string;
|
|
tasks: TaskRecord[];
|
|
}
|
|
|
|
export function groupTasksByRepo(tasks: TaskRecord[]): RepoGroup[] {
|
|
const groups = new Map<string, RepoGroup>();
|
|
|
|
for (const task of tasks) {
|
|
const group = groups.get(task.repoId);
|
|
if (group) {
|
|
group.tasks.push(task);
|
|
continue;
|
|
}
|
|
|
|
groups.set(task.repoId, {
|
|
repoId: task.repoId,
|
|
repoRemote: task.repoRemote,
|
|
tasks: [task],
|
|
});
|
|
}
|
|
|
|
return Array.from(groups.values())
|
|
.map((group) => ({
|
|
...group,
|
|
tasks: [...group.tasks].sort((a, b) => b.updatedAt - a.updatedAt),
|
|
}))
|
|
.sort((a, b) => {
|
|
const aLatest = a.tasks[0]?.updatedAt ?? 0;
|
|
const bLatest = b.tasks[0]?.updatedAt ?? 0;
|
|
if (aLatest !== bLatest) {
|
|
return bLatest - aLatest;
|
|
}
|
|
return a.repoRemote.localeCompare(b.repoRemote);
|
|
});
|
|
}
|