openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
35 lines (34 loc) • 1.59 kB
JavaScript
import { a as asOptionalRecord } from "./record-coerce-DItp3I4t.js";
//#region src/shared/assistant-display-content.ts
const ASSISTANT_DISPLAY_CONTENT_FIELD = "openclawDisplayContent";
function isAssistantModelContentBlock(value) {
const block = asOptionalRecord(value);
if (!block) return false;
if (block.type === "text") return typeof block.text === "string";
if (block.type === "thinking") return typeof block.thinking === "string";
return block.type === "toolCall" && typeof block.id === "string" && typeof block.name === "string" && asOptionalRecord(block.arguments) !== void 0;
}
function retainAssistantModelContent(blocks) {
return blocks.filter(isAssistantModelContentBlock).map((block) => Object.assign({}, block));
}
function readAssistantDisplayContent(message) {
const record = asOptionalRecord(message);
if (!record) return [];
const display = record[ASSISTANT_DISPLAY_CONTENT_FIELD];
const content = Array.isArray(display) ? display : record.content;
return Array.isArray(content) ? content.flatMap((block) => {
const entry = asOptionalRecord(block);
return entry ? [entry] : [];
}) : [];
}
function projectAssistantDisplayContent(message) {
const display = message[ASSISTANT_DISPLAY_CONTENT_FIELD];
if (message.role !== "assistant" || !Array.isArray(display)) return message;
const { [ASSISTANT_DISPLAY_CONTENT_FIELD]: _, ...rest } = message;
return {
...rest,
content: display
};
}
//#endregion
export { retainAssistantModelContent as i, projectAssistantDisplayContent as n, readAssistantDisplayContent as r, ASSISTANT_DISPLAY_CONTENT_FIELD as t };