lib/assistant-reasoning.ts
Rama main · réplica de lectura del repositorio original.
import type { AssistantMessage } from "./assistant-types";
/** Keep assistant reasoning traces as compact as code-agent reasoning events. */
export const ASSISTANT_REASONING_MAX_CHARS = 2_000;
export interface AssistantReasoning {
text: string;
durationMs: number;
}
export function appendAssistantReasoning(text: string, delta: string): string {
if (text.length >= ASSISTANT_REASONING_MAX_CHARS) return text;
return (text + delta).slice(0, ASSISTANT_REASONING_MAX_CHARS);
}
/** Read the durable reasoning trace attached to an assistant message. */
export function assistantMessageReasoning(
message: AssistantMessage | null | undefined,
): AssistantReasoning | null {
if (!message || message.role !== "assistant") return null;
const raw = message.metadata?.reasoning;
if (!raw || typeof raw !== "object") return null;
const text = (raw as { text?: unknown }).text;
const durationMs = (raw as { durationMs?: unknown }).durationMs;
if (typeof text !== "string" || !text.trim()) return null;
return {
text: text.slice(0, ASSISTANT_REASONING_MAX_CHARS),
durationMs:
typeof durationMs === "number" && Number.isFinite(durationMs)
? Math.max(0, durationMs)
: 0,
};
}