import type { AgentMessage } from "@earendil-works/pi-agent-core";
import { liveThreads } from "./state.ts";
import type { ObserverPacket, Registry } from "./types.ts";

const assistantText = (messages: AgentMessage[]): string =>
	messages
		.flatMap((message) =>
			message.role === "assistant"
				? message.content.filter((part) => part.type === "text").map((part) => part.text)
				: [],
		)
		.join("\n\n");

export function buildPacket(
	registry: Registry,
	messages: AgentMessage[],
	targetMessageIds: ReadonlySet<string>,
): ObserverPacket {
	return {
		threads: liveThreads(registry),
		userMessages: registry.unreconciled.filter((message) => targetMessageIds.has(message.messageId)),
		completedAssistantTurn: assistantText(messages),
	};
}
