export type WidgetMessageAssetPayload = { assetId: string; filename?: string; fileSize?: number; mimeType?: string; url?: string; }; export function parseMessageAssetPayload( payload?: string, ): WidgetMessageAssetPayload | null { if (!payload?.trim()) { return null; } try { const parsed = JSON.parse(payload) as WidgetMessageAssetPayload; if (!parsed?.assetId?.trim()) { return null; } return parsed; } catch { return null; } } export function renderMessageHTML(message: { messageType: string; content: string; payload?: string; }) { if (message.messageType === "html") { return message.content; } const asset = parseMessageAssetPayload(message.payload); if (message.messageType === "image") { if (asset?.url) { return `
[图片]
"; } if (message.messageType === "attachment") { if (asset?.url) { const title = escapeHTML(asset.filename || message.content || "附件"); const meta = formatFileSize(asset.fileSize ?? 0); const metaHTML = meta ? `` : ""; return ``; } return `${escapeHTML(message.content || "[附件]")}
`; } return `${escapeHTML(message.content || "")}
`; } export function summarizeMessage(message: { messageType: string; content: string; payload?: string; }) { if (message.messageType === "image") { return "[图片]"; } if (message.messageType === "attachment") { const asset = parseMessageAssetPayload(message.payload); return asset?.filename?.trim() ? `[附件] ${asset.filename.trim()}` : "[附件]"; } if (message.messageType === "html") { const text = extractTextFromHTML(message.content); if (text.trim()) { return text.substring(0, 100); } if (message.content.includes("