mirror of https://github.com/openclaw/openclaw.git
48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
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}`;
|
|
}
|