Mark unread turn summaries in the switcher and Project rows

This commit is contained in:
Ian Gulliver
2026-10-16 11:08:57 -07:00
parent ec169583ff
commit 34db128afe
24 changed files with 755 additions and 239 deletions
+38 -1
View File
@@ -15,6 +15,8 @@ export const state = {
focus: { tabs: ["transcript"], tab: "transcript" },
leadSessions: [],
leadTranscript: [],
jump: undefined,
summaryReads: {},
};
const listeners = new Map();
export function on(topic, fn) {
@@ -291,6 +293,32 @@ function markVisited(taskId) {
}
localStorage.setItem(visitsKey, JSON.stringify({ ...lastVisits(), [taskId]: Date.now() }));
}
export async function loadSummaryReads() {
state.summaryReads = await get("/api/me/summary-reads");
notify("summaries");
}
export function unreadSummary(task) {
return task.summary_seq > (state.summaryReads[task.id] ?? 0);
}
function noteSummaryRead(taskId, seq) {
if ((state.summaryReads[taskId] ?? 0) >= seq) {
return false;
}
state.summaryReads[taskId] = seq;
notify("summaries");
return true;
}
export function markSummaryRead(taskId, seq) {
if (!noteSummaryRead(taskId, seq)) {
return;
}
put("/api/tasks/{taskId}/summary-read", { path: { taskId }, body: { seq } }).catch((err) => console.error("mark summary read", err));
}
export function openSummary(task) {
state.jump = { taskId: task.id, seq: task.summary_seq };
focusTask(task.id, "transcript");
notify("jump");
}
export function selectTask(taskId) {
markVisited(state.selectedTaskId);
markVisited(taskId);
@@ -353,8 +381,17 @@ export function handleEvent(ev) {
case "inbox.updated":
void loadInbox();
break;
case "turn.ended":
case "turn.ended": {
notifyTurn(ev);
const task = ev.payload["summary"] === true && ev.task_id ? findTask(ev.task_id) : undefined;
if (task && ev.seq > task.summary_seq) {
task.summary_seq = ev.seq;
notify("summaries");
}
break;
}
case "summary.read":
noteSummaryRead(String(ev.payload["task_id"]), Number(ev.payload["seq"]));
break;
case "review.started":
case "review.finished":