fix(agents): distill replay content normalization

This commit is contained in:
Ayaan Zaidi
2026-04-22 10:45:20 +05:30
parent f58dd0f9b6
commit e4da220478
2 changed files with 9 additions and 20 deletions

View File

@@ -40,7 +40,6 @@ import {
type AssistantUsageSnapshot,
type UsageLike,
} from "../usage.js";
import { log } from "./logger.js";
import { dropThinkingBlocks } from "./thinking.js";
const INTER_SESSION_PREFIX_BASE = "[Inter-session message]";
@@ -232,23 +231,15 @@ export function normalizeAssistantReplayContent(messages: AgentMessage[]): Agent
let touched = false;
const out = [...messages];
for (let i = 0; i < out.length; i += 1) {
const message = out[i] as (AgentMessage & { role?: unknown; content?: unknown }) | undefined;
if (!message || message.role !== "assistant" || Array.isArray(message.content)) {
const message = out[i];
const replayContent = (message as { content?: unknown } | undefined)?.content;
if (!message || message.role !== "assistant" || typeof replayContent !== "string") {
continue;
}
if (typeof message.content !== "string") {
log.warn(
`normalizeAssistantReplayContent: repairing malformed assistant content ` +
`(index=${i}, type=${typeof message.content})`,
);
}
out[i] = {
...(message as unknown as Record<string, unknown>),
content:
typeof message.content === "string"
? [{ type: "text", text: message.content }]
: [{ type: "text", text: "" }],
} as AgentMessage;
...message,
content: [{ type: "text", text: replayContent }],
};
touched = true;
}
return touched ? out : messages;

View File

@@ -1144,11 +1144,9 @@ export async function runEmbeddedAttempt(
throw new Error("Embedded agent session missing");
}
const activeSession = session;
if (typeof activeSession.agent.convertToLlm === "function") {
const baseConvertToLlm = activeSession.agent.convertToLlm.bind(activeSession.agent);
activeSession.agent.convertToLlm = async (messages) =>
await baseConvertToLlm(normalizeAssistantReplayContent(messages));
}
const baseConvertToLlm = activeSession.agent.convertToLlm.bind(activeSession.agent);
activeSession.agent.convertToLlm = async (messages) =>
await baseConvertToLlm(normalizeAssistantReplayContent(messages));
let prePromptMessageCount = activeSession.messages.length;
abortSessionForYield = () => {
yieldAbortSettled = Promise.resolve(activeSession.abort());