Fix world info custom filter payload sanitization

This commit is contained in:
Youzini-afk
2026-04-07 00:05:21 +08:00
parent c6fcbc830f
commit c32414f720
2 changed files with 45 additions and 3 deletions

View File

@@ -238,6 +238,9 @@ function blockUsesWorldInfoContent(block = {}) {
} }
function messageUsesWorldInfoContent(message = {}) { function messageUsesWorldInfoContent(message = {}) {
if (message?.derivedFromWorldInfo === true) {
return true;
}
if (usesWorldInfoSourceKey(message?.sourceKey)) { if (usesWorldInfoSourceKey(message?.sourceKey)) {
return true; return true;
} }
@@ -618,6 +621,9 @@ function sanitizePromptMessages(
injectionMode: String( injectionMode: String(
sanitized.value?.injectionMode || message?.injectionMode || "", sanitized.value?.injectionMode || message?.injectionMode || "",
), ),
derivedFromWorldInfo:
sanitized.value?.derivedFromWorldInfo === true ||
message?.derivedFromWorldInfo === true,
}, },
); );
return executionMessage; return executionMessage;
@@ -1157,6 +1163,7 @@ export async function buildTaskPrompt(settings = {}, taskType, context = {}) {
if (!block || block.enabled === false) continue; if (!block || block.enabled === false) continue;
const role = normalizeRole(block.role); const role = normalizeRole(block.role);
const blockDerivedFromWorldInfo = blockUsesWorldInfoContent(block);
let content = ""; let content = "";
if (block.type === "legacyPrompt") { if (block.type === "legacyPrompt") {
@@ -1182,7 +1189,7 @@ export async function buildTaskPrompt(settings = {}, taskType, context = {}) {
); );
} }
const blockApplyMvu = !(isCustomFilter && blockUsesWorldInfoContent(block)); const blockApplyMvu = !(isCustomFilter && blockDerivedFromWorldInfo);
const sanitizedBlockContent = sanitizeTaskPromptText( const sanitizedBlockContent = sanitizeTaskPromptText(
settings, settings,
taskType, taskType,
@@ -1229,6 +1236,7 @@ export async function buildTaskPrompt(settings = {}, taskType, context = {}) {
order: Number.isFinite(Number(block.order)) order: Number.isFinite(Number(block.order))
? Number(block.order) ? Number(block.order)
: block._orderIndex, : block._orderIndex,
derivedFromWorldInfo: blockDerivedFromWorldInfo,
injectionMode: mode, injectionMode: mode,
delivery: resolveBlockDelivery(block), delivery: resolveBlockDelivery(block),
effectiveDelivery: resolveBlockDelivery(block), effectiveDelivery: resolveBlockDelivery(block),
@@ -1242,6 +1250,7 @@ export async function buildTaskPrompt(settings = {}, taskType, context = {}) {
blockType: String(block.type || "custom"), blockType: String(block.type || "custom"),
sourceKey: String(block.sourceKey || ""), sourceKey: String(block.sourceKey || ""),
injectionMode: mode, injectionMode: mode,
derivedFromWorldInfo: blockDerivedFromWorldInfo,
}); });
if (executionMessage) { if (executionMessage) {
executionMessages.push(executionMessage); executionMessages.push(executionMessage);
@@ -1265,9 +1274,29 @@ export async function buildTaskPrompt(settings = {}, taskType, context = {}) {
assistantRoleBlockCount += 1; assistantRoleBlockCount += 1;
} }
if (mode === "prepend") { if (mode === "prepend") {
customMessages.unshift({ role, content }); customMessages.unshift({
role,
content,
source: "profile-block",
blockId: String(block.id || ""),
blockName: String(block.name || ""),
blockType: String(block.type || "custom"),
sourceKey: String(block.sourceKey || ""),
injectionMode: mode,
derivedFromWorldInfo: blockDerivedFromWorldInfo,
});
} else { } else {
customMessages.push({ role, content }); customMessages.push({
role,
content,
source: "profile-block",
blockId: String(block.id || ""),
blockName: String(block.name || ""),
blockType: String(block.type || "custom"),
sourceKey: String(block.sourceKey || ""),
injectionMode: mode,
derivedFromWorldInfo: blockDerivedFromWorldInfo,
});
} }
} }
@@ -1436,6 +1465,7 @@ export function buildTaskLlmPayload(promptBuild = null, fallbackUserPrompt = "")
blockType: String(message.blockType || ""), blockType: String(message.blockType || ""),
sourceKey: String(message.sourceKey || ""), sourceKey: String(message.sourceKey || ""),
injectionMode: String(message.injectionMode || ""), injectionMode: String(message.injectionMode || ""),
derivedFromWorldInfo: message.derivedFromWorldInfo === true,
}), }),
) )
.filter(Boolean) .filter(Boolean)

View File

@@ -670,6 +670,18 @@ try {
customInterpolatedPromptBuild.systemPrompt, customInterpolatedPromptBuild.systemPrompt,
/<status_current_variable>secret=true<\/status_current_variable>/, /<status_current_variable>secret=true<\/status_current_variable>/,
); );
const customInterpolatedPayload = buildTaskLlmPayload(
customInterpolatedPromptBuild,
"unused fallback",
);
assert.equal(
customInterpolatedPayload.promptMessages.some((message) =>
/<status_current_variable>secret=true<\/status_current_variable>/.test(
message.content,
),
),
true,
);
const noWorldInfoBlockSettings = { const noWorldInfoBlockSettings = {
taskProfiles: { taskProfiles: {