// 用本仓库自己的装配代码看同一份预设会拼出什么(不发请求)。 // 用法: node node_modules/tsx/dist/cli.mjs tools/st-request-diff/inspect-wa-assembly.mjs import { readFileSync } from "node:fs"; import path from "node:path"; import { importSillyTavernPreset } from "../../src/preset/importer.js"; import { assemblePlayWorkerMessages } from "../../src/preset/play-frame.js"; import { applyExtendedMarkers } from "../../src/preset/markers.js"; const file = process.argv[2]; const raw = JSON.parse(readFileSync(file, "utf8")); const report = importSillyTavernPreset(raw, { name: path.basename(file, ".json") }); const preset = report.preset; console.log("导入: prompts=" + preset.prompts.length + " order=" + preset.promptOrder.length + " squash=" + JSON.stringify(preset.messagePolicy)); console.log("警告: " + JSON.stringify(report.warnings.slice(0, 6))); const framed = applyExtendedMarkers(preset); const messages = assemblePlayWorkerMessages({ systemPrompt: "", preset, pack: { worldBookBefore: [], history: [], worldBookAfter: [], turn: "你好", postTurn: [] }, }); console.log("--- 装配结果 " + messages.length + " 条 ---"); messages.forEach((m, i) => { const text = String(m.content || ""); console.log("#" + i + " [" + m.role + "] " + text.length + " 字: " + text.replace(/\s+/g, " ").slice(0, 60)); }); const byId = new Map(preset.prompts.map((p) => [p.id, p])); for (const id of ["dcb8d472-6dd4-46b4-a74d-3c5674d7c6af", "67b2c14a-f300-4715-93e1-5f34c34462f6", "ate-toolcall-guide-sys"]) { const p = byId.get(id); const order = preset.promptOrder.find((o) => o.promptId === id); console.log("条目 " + id + ": 存在=" + Boolean(p) + " 内容=" + (p ? p.content.length : -1) + " entry.enabled=" + (p ? p.enabled : "-") + " order.enabled=" + (order ? order.enabled : "(不在 order)")); }