mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
Fix world info custom filter payload sanitization
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user