import { wrapExternalContent } from "./external-content.js" ;
const DEFAULT_MAX_CHARS = 800 ;
const DEFAULT_MAX_ENTRY_CHARS = 400 ;
function normalizeEntry(entry: string): string {
return entry.replace(/\s+/g, " " ).trim();
}
function truncateText(value: string, maxChars: number): string {
if (maxChars <= 0 ) {
return "" ;
}
if (value.length <= maxChars) {
return value;
}
const trimmed = value.slice(0 , Math.max(0 , maxChars - 3 )).trimEnd();
return `${trimmed}...`;
}
export function buildUntrustedChannelMetadata(params: {
source: string;
label: string;
entries: Array<string | null | undefined>;
maxChars?: number;
}): string | undefined {
const cleaned = params.entries
.map((entry) => (typeof entry === "string" ? normalizeEntry(entry) : "" ))
.filter((entry) => Boolean (entry))
.map((entry) => truncateText(entry, DEFAULT_MAX_ENTRY_CHARS));
const deduped = cleaned.filter((entry, index, list) => list.indexOf(entry) === index);
if (deduped.length === 0 ) {
return undefined;
}
const body = deduped.join("\n" );
const header = `UNTRUSTED channel metadata (${params.source})`;
const labeled = `${params.label}:\n${body}`;
const truncated = truncateText(`${header}\n${labeled}`, params.maxChars ?? DEFAULT_MAX_CHARS);
return wrapExternalContent(truncated, {
source: "channel_metadata" ,
includeWarning: false ,
});
}
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland