import { normalizeStructuredPromptSection } from "./prompt-cache-stability.js" ;
export const SYSTEM_PROMPT_CACHE_BOUNDARY = "\n<!-- OPENCLAW_CACHE_BOUNDARY -->\n" ;
export function stripSystemPromptCacheBoundary(text: string): string {
return text.replaceAll(SYSTEM_PROMPT_CACHE_BOUNDARY, "\n" );
}
export function splitSystemPromptCacheBoundary(
text: string,
): { stablePrefix: string; dynamicSuffix: string } | undefined {
const boundaryIndex = text.indexOf(SYSTEM_PROMPT_CACHE_BOUNDARY);
if (boundaryIndex === -1 ) {
return undefined;
}
return {
stablePrefix: text.slice(0 , boundaryIndex).trimEnd(),
dynamicSuffix: text.slice(boundaryIndex + SYSTEM_PROMPT_CACHE_BOUNDARY.length).trimStart(),
};
}
export function prependSystemPromptAdditionAfterCacheBoundary(params: {
systemPrompt: string;
systemPromptAddition?: string;
}): string {
const systemPromptAddition =
typeof params.systemPromptAddition === "string"
? normalizeStructuredPromptSection(params.systemPromptAddition)
: "" ;
if (!systemPromptAddition) {
return params.systemPrompt;
}
const split = splitSystemPromptCacheBoundary(params.systemPrompt);
if (!split) {
return `${systemPromptAddition}\n\n${params.systemPrompt}`;
}
const dynamicSuffix = split.dynamicSuffix
? normalizeStructuredPromptSection(split.dynamicSuffix)
: "" ;
if (!dynamicSuffix) {
return `${split.stablePrefix}${SYSTEM_PROMPT_CACHE_BOUNDARY}${systemPromptAddition}`;
}
return `${split.stablePrefix}${SYSTEM_PROMPT_CACHE_BOUNDARY}${systemPromptAddition}\n\n${dynamicSuffix}`;
}
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland