import type { MessageBlock } from "@rakazo/contracts"; import { cloudAgentBlockFromPayload } from "./cloud-agent.js"; /** Remove this run's live message and obsolete unscoped progress without reordering history. */ export function takeLiveMessage( messages: readonly Message[], liveId: string, ): { previous: Message | undefined; remaining: Message[] } { let previous: Message | undefined; const remaining: Message[] = []; for (const message of messages) { if (message.id === liveId) previous = message; else if (!message.id.startsWith("progress:") || message.runId) remaining.push(message); } return { previous, remaining }; } export function updateCloudAgentMessages( messages: readonly Message[], payload: Record, ): Message[] { const agentId = String(payload.agentId ?? ""); const messageId = String(payload.messageId ?? ""); const block = cloudAgentBlockFromPayload(payload); return messages.map((message) => { if ( (messageId && message.id === messageId) || message.blocks.some( (existing) => existing.kind === "cloud_agent" && existing.agentId === agentId, ) ) { return { ...message, blocks: message.blocks.map((existing) => existing.kind === "cloud_agent" && existing.agentId === agentId ? block : existing, ), }; } return message; }); }