Something went wrong. Try again.
An agent harness for parametric learning.
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344import { createHash } from "node:crypto";import type { SerializedMessage } from "./types.js";
export function stableHash(value: unknown): string { return createHash("sha256").update(JSON.stringify(value)).digest("hex");}
export function cloneMessages(messages: SerializedMessage[]): SerializedMessage[] { return structuredClone(messages);}
export function textFromMessage(message: SerializedMessage | undefined): string { if (!message || message.role !== "assistant" || !Array.isArray(message.content)) return ""; return message.content .filter((part): part is { type: "text"; text: string } => { return Boolean(part && typeof part === "object" && part.type === "text" && typeof part.text === "string"); }) .map((part) => part.text) .join("");}
export function reasoningFromMessage(message: SerializedMessage | undefined): string { if (!message || message.role !== "assistant" || !Array.isArray(message.content)) return ""; return message.content .filter((part): part is { type: "thinking"; thinking: string } => { return Boolean( part && typeof part === "object" && part.type === "thinking" && typeof part.thinking === "string", ); }) .map((part) => part.thinking) .join("");}
export function lastAssistantMessage(messages: SerializedMessage[]): SerializedMessage | undefined { return messages.findLast((message) => message.role === "assistant");}
export function firstNewUserMessage( parentLength: number, messages: SerializedMessage[],): SerializedMessage | undefined { return messages.slice(parentLength).find((message) => message.role === "user");}