feat: Phase 3 世界书引擎移植 + EJS 支持

- 新增 task-worldinfo.js: 从 EW 移植世界书激活/分桶引擎
- 新增 task-ejs.js: 从 EW 移植 EJS 模板渲染引擎
- 新增 vendor/ejs.js: EJS runtime vendor
- prompt-builder.js: 改为异步, 接入 worldInfoBefore/After/atDepth
- prompt-profiles.js: 新增内置块 charDescription/userPersona/worldInfoBefore/After
- 更新 extractor/retriever/compressor/consolidator 接入新 builder
- st-context.js: 扩展 ST 上下文字段兜底
- 新增 tests/task-worldinfo.mjs: 世界书引擎测试
This commit is contained in:
Youzini-afk
2026-03-26 13:57:07 +08:00
parent 2f9524d993
commit d31c0325d3
12 changed files with 3963 additions and 93 deletions

View File

@@ -109,7 +109,7 @@ export async function extractMemories({
? `${messages[0]?.seq ?? "?"} ~ ${messages[messages.length - 1]?.seq ?? "?"}`
: "";
const promptBuild = buildTaskPrompt(settings, "extract", {
const promptBuild = await buildTaskPrompt(settings, "extract", {
taskName: "extract",
schema: schemaDescription,
schemaDescription,
@@ -152,7 +152,10 @@ export async function extractMemories({
maxRetries: 2,
signal,
taskType: "extract",
additionalMessages: promptBuild.customMessages || [],
additionalMessages: [
...(promptBuild.customMessages || []),
...(promptBuild.additionalMessages || []),
],
});
throwIfAborted(signal);
@@ -629,7 +632,7 @@ export async function generateSynopsis({
.map((n) => `${n.fields.title}: ${n.fields.status || "active"}`)
.join("; ");
const synopsisPromptBuild = buildTaskPrompt(settings, "synopsis", {
const synopsisPromptBuild = await buildTaskPrompt(settings, "synopsis", {
taskName: "synopsis",
eventSummary: eventSummaries,
characterSummary: charSummary || "(无)",
@@ -665,7 +668,10 @@ export async function generateSynopsis({
maxRetries: 1,
signal,
taskType: "synopsis",
additionalMessages: synopsisPromptBuild.customMessages || [],
additionalMessages: [
...(synopsisPromptBuild.customMessages || []),
...(synopsisPromptBuild.additionalMessages || []),
],
});
if (!result?.summary) return;
@@ -742,7 +748,7 @@ export async function generateReflection({
.map((e) => `${e.fromId} -> ${e.toId} (${e.relation})`)
.join("\n");
const reflectionPromptBuild = buildTaskPrompt(settings, "reflection", {
const reflectionPromptBuild = await buildTaskPrompt(settings, "reflection", {
taskName: "reflection",
eventSummary,
characterSummary: characterSummary || "(无)",
@@ -785,7 +791,10 @@ export async function generateReflection({
maxRetries: 1,
signal,
taskType: "reflection",
additionalMessages: reflectionPromptBuild.customMessages || [],
additionalMessages: [
...(reflectionPromptBuild.customMessages || []),
...(reflectionPromptBuild.additionalMessages || []),
],
});
if (!result?.insight) return null;