Why: Repeated progress and coupled scrolling obscured chat, and task choices lacked a reliable independent interaction path. Evidence: 285 frontend unit tests and 23 browser scenarios pass locally before the shared event-loader extraction; final combination checks follow in Dev. Impact: Coalesce cumulative progress, retain execution records, show timestamps and quiet notifications, support versioned work actions and explicit result references without automatic chat backfill. Refs: feature/workbench-flow-completion
18 lines
681 B
TypeScript
18 lines
681 B
TypeScript
import { api } from './api'
|
|
import type { StreamEvent } from './contracts'
|
|
|
|
/** Read the durable record in bounded pages; callers own cancellation and projection. */
|
|
export async function loadRunEvents(conversationId: string, runId: string, signal: AbortSignal): Promise<StreamEvent[]> {
|
|
const events: StreamEvent[] = []
|
|
let after = 0
|
|
while (true) {
|
|
const page = await api.runEventsPage(conversationId, runId, after, signal)
|
|
const rows = page.events ?? []
|
|
events.push(...rows)
|
|
if (rows.length < 500) return events
|
|
const next = rows[rows.length - 1].seq
|
|
if (next <= after) throw new Error('process event cursor did not advance')
|
|
after = next
|
|
}
|
|
}
|