review status
This commit is contained in:
@@ -872,6 +872,8 @@ export interface components {
|
||||
workflow_run?: string;
|
||||
/** @description With workflow: the name of the stage this task runs. */
|
||||
workflow_stage?: string;
|
||||
/** @description Whether a review of one of the task's snapshots is running. */
|
||||
reviewing: boolean;
|
||||
};
|
||||
Todo: {
|
||||
/** @description Whether the default branch has a TODO.md at its root. */
|
||||
|
||||
+4
-4
@@ -2,7 +2,7 @@ import { get, post, type ByreEvent, type Project, type Schemas, type Task } from
|
||||
import { errorText, h, replace, showAlert } from "./dom.js";
|
||||
import { markdown } from "./markdown.js";
|
||||
import { models } from "./task.js";
|
||||
import { currentSession, focusedProject, focusTask, on, onEach, state } from "./state.js";
|
||||
import { currentSession, focusedProject, focusTask, on, onEach, state, taskState } from "./state.js";
|
||||
import { taskStyle } from "./taskcolor.js";
|
||||
|
||||
type Todo = Schemas["Todo"];
|
||||
@@ -114,7 +114,7 @@ function tasksBlock(active: Task[]): HTMLElement {
|
||||
"ul",
|
||||
{ class: "task-list" },
|
||||
...active.map((task) => {
|
||||
const sess = currentSession(task.id);
|
||||
const ts = taskState(task);
|
||||
const count = state.inbox.filter((item) => item.task_id === task.id).length;
|
||||
return h(
|
||||
"li",
|
||||
@@ -128,11 +128,11 @@ function tasksBlock(active: Task[]): HTMLElement {
|
||||
focusTask(task.id);
|
||||
},
|
||||
},
|
||||
h("span", { class: `dot ${sess?.state ?? "none"}`, title: sess?.state ?? "no session" }),
|
||||
h("span", { class: `dot ${ts ?? "none"}`, title: ts ?? "no session" }),
|
||||
h("span", { class: "task-title task-name" }, task.title),
|
||||
count > 0 && h("span", { class: "badge", title: "inbox items" }, count),
|
||||
task.merge_queued_at !== undefined && h("span", { class: "task-state warn", title: "Waiting for the merge in progress in this project to finish" }, "merge held"),
|
||||
h("span", { class: "task-state" }, sess?.state ?? "no agent"),
|
||||
h("span", { class: "task-state" }, ts ?? "no agent"),
|
||||
),
|
||||
);
|
||||
}),
|
||||
|
||||
+9
-1
@@ -82,7 +82,12 @@ export function currentSession(taskId: string): AgentSession | undefined {
|
||||
return state.sessions.get(taskId)?.findLast((s) => s.state !== "completed") ?? state.sessions.get(taskId)?.at(-1);
|
||||
}
|
||||
|
||||
export function currentLead(): AgentSession | undefined {
|
||||
export function taskState(task: Task): string | undefined {
|
||||
const s = currentSession(task.id)?.state;
|
||||
return s === "idle" && task.reviewing ? "reviewing" : s;
|
||||
}
|
||||
|
||||
export function currentLead():AgentSession | undefined {
|
||||
return state.leadSessions.findLast((s) => s.state !== "completed") ?? state.leadSessions.at(-1);
|
||||
}
|
||||
|
||||
@@ -328,6 +333,9 @@ export function handleEvent(ev: ByreEvent): void {
|
||||
break;
|
||||
case "review.started":
|
||||
case "review.finished":
|
||||
if (ev.project_id) {
|
||||
void loadTasks(ev.project_id);
|
||||
}
|
||||
if (state.inbox.some((i) => i.task_id === ev.task_id && i.kind === "question")) {
|
||||
void loadInbox();
|
||||
}
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
import { post } from "./api.js";
|
||||
import { errorText, h, replace, showAlert } from "./dom.js";
|
||||
import { focusLead } from "./panes.js";
|
||||
import { activeTasks, currentSession, focusedProject, focusProject, focusTab, focusTask, lastVisits, onEach, state } from "./state.js";
|
||||
import { activeTasks, focusedProject, focusProject, focusTab, focusTask, lastVisits, onEach, state, taskState } from "./state.js";
|
||||
import { confirmMerge } from "./task.js";
|
||||
import { taskStyle } from "./taskcolor.js";
|
||||
|
||||
@@ -82,15 +82,15 @@ export function openSwitcher(): void {
|
||||
.map((m) => ({ ...m, count: inbox(m.task.id), visited: visits[m.task.id] ?? 0 }))
|
||||
.sort((a, b) => Number(b.count > 0) - Number(a.count > 0) || a.visited - b.visited);
|
||||
rows = matches.map(({ project, task, count }) => {
|
||||
const sess = currentSession(task.id);
|
||||
const ts = taskState(task);
|
||||
const el = h(
|
||||
"li",
|
||||
{ style: taskStyle(task.id) },
|
||||
h("span", { class: `dot ${sess?.state ?? "none"}`, title: sess?.state ?? "no session" }),
|
||||
h("span", { class: `dot ${ts ?? "none"}`, title: ts ?? "no session" }),
|
||||
h("span", { class: "task-title" }, h("span", { class: "project-name" }, project.name), " ", h("span", { class: "task-name" }, task.title)),
|
||||
count > 0 && h("span", { class: "badge", title: "inbox items" }, count),
|
||||
task.merge_queued_at !== undefined && h("span", { class: "task-state warn", title: "Waiting for the merge in progress in this project to finish" }, "merge held"),
|
||||
h("span", { class: "task-state" }, sess?.state ?? "no agent"),
|
||||
h("span", { class: "task-state" }, ts ?? "no agent"),
|
||||
);
|
||||
return { el, pick: () => go(task.id) };
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user