Load the lead's scrollback 50 turns at a time

This commit is contained in:
Ian Gulliver
2026-10-16 18:11:00 -07:00
parent 5dddc15ab9
commit 859aa2dd8b
20 changed files with 625 additions and 238 deletions
+30 -2
View File
@@ -366,8 +366,36 @@ export function selectTask(taskId) {
dropClosedFeeds();
notify("selection");
}
export function startLeadStream() {
subscribe(0, { lead: true }, leadFeed.push, () => undefined, () => leadFeed.load([]));
const leadPage = 50;
let leadMore = false;
async function fetchLeadTail() {
for (;;) {
try {
return await get("/api/me/lead/events", { query: { turns: leadPage } });
}
catch (err) {
console.error("load lead history", err);
await new Promise((resolve) => setTimeout(resolve, 2_000));
}
}
}
export async function startLeadStream() {
const page = await fetchLeadTail();
leadMore = page.more;
subscribe(page.events.at(-1)?.seq ?? 0, { lead: true }, leadFeed.push, () => undefined, () => leadFeed.load(page.events));
}
export function leadHasOlder() {
return leadFeed.ready && leadMore;
}
export async function loadOlderLead() {
const first = leadFeed.events[0];
if (!first) {
return [];
}
const page = await get("/api/me/lead/events", { query: { before: first.seq, turns: leadPage } });
leadMore = page.more;
leadFeed.events.unshift(...page.events);
return page.events;
}
export function handleEvent(ev) {
if (ev.task_id) {