// 工具箱生成留痕的两个纯格式化助手(AI 对话记录用): // - fieldSummary:把作者填写的输入字段拼成人读摘要(author 气泡 content;长文进 content 不进 meta)。 // - renderPreviewText:把结构化预览渲染成人读文本(ai 气泡 content;不把原始产物塞进 meta)。 // 确定性纯函数,无 IO;供 GeneratorRunner 结束后 append 一批往复。 import type { ToolInputFieldView } from "@/lib/api/types"; import type { FieldValues, PreviewModel } from "./toolbox"; // 输入字段 → 「label:value」摘要,跳过空值,多字段用 · 连接。 export function fieldSummary( fields: readonly ToolInputFieldView[], values: FieldValues, ): string { return fields .map((f) => ({ label: f.label, value: (values[f.name] ?? "").trim() })) .filter((entry) => entry.value.length > 0) .map((entry) => `${entry.label}:${entry.value}`) .join(" · "); } // 预览模型 → 人读文本:每项 = heading + 「label:value」次要字段 + 正文段,项间空行分隔。 export function renderPreviewText(preview: PreviewModel): string { return preview.items .map((item) => { const lines: string[] = []; if (item.heading) lines.push(item.heading); for (const f of item.fields) lines.push(`${f.label}:${f.value}`); if (item.body) lines.push(item.body); return lines.join("\n"); }) .filter((block) => block.length > 0) .join("\n\n"); }