预设兼容:按真实抓包对齐装配与包装层,补上声明式工具与预设正则。
- 装配只认 prompt_order.enabled;squash_system_messages 只合并相邻 system(新增 system 档,连接符按酒馆用单换行)
- 包装层:new_chat_prompt、示例对话(new_example_chat_prompt + <START> 切段 + name)、角色卡三块与 personality_format/scenario_format、{{user}}/{{char}} 取值、任务契约并进预设条目
- 工具协议:按 ToolBindings / 伪工具协议数据声明真 tools(presetToolPolicy=preset),工具描述用到的条目不再重复作为消息发出
- 正则:promptOnly 作用于对话历史(含 depth 过滤)、写入时脚本改写回复;{{//}} 注释按配平扫描
- tools/st-request-diff:真假上游抓包对比工具、三份预设的机制结论与实测报告
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
// TavernHelper 只对"白名单里的预设"执行预设内置脚本。这个脚本把指定预设加进白名单并重载页面。
|
||||
// 用法: node allow-preset-scripts.mjs --presets linux_1.3,Reborn2.4,NVWA-Galaxia-ST [--reload]
|
||||
import { CdpSession, evaluate, sleep } from "./cdp.mjs";
|
||||
import { waitStReady } from "./lib.mjs";
|
||||
|
||||
const argv = process.argv.slice(2);
|
||||
const arg = (name, dflt) => {
|
||||
const i = argv.indexOf("--" + name);
|
||||
return i >= 0 ? String(argv[i + 1]) : dflt;
|
||||
};
|
||||
const presets = arg("presets", "").split(",").map((s) => s.trim()).filter(Boolean);
|
||||
const reload = argv.includes("--reload");
|
||||
const browserPort = Number(arg("browser-port", "8223"));
|
||||
const stHint = arg("st-url", "127.0.0.1:8123");
|
||||
|
||||
const version = await (await fetch("http://127.0.0.1:" + browserPort + "/json/version")).json();
|
||||
const cdp = await CdpSession.connect(version.webSocketDebuggerUrl, "browser");
|
||||
const { targetInfos } = await cdp.send("Target.getTargets");
|
||||
const target = targetInfos.find((t) => t.type === "page" && String(t.url).includes(stHint));
|
||||
if (!target) throw new Error("没找到酒馆页面");
|
||||
const { sessionId } = await cdp.send("Target.attachToTarget", { targetId: target.targetId, flatten: true });
|
||||
await cdp.send("Runtime.enable", {}, sessionId);
|
||||
const page = { cdp, sessionId };
|
||||
|
||||
const before = await evaluate(page, `(() => {
|
||||
const s = window.SillyTavern.getContext().extensionSettings.tavern_helper.script;
|
||||
return s.enabled;
|
||||
})()`);
|
||||
console.log("[scripts] 改前: " + JSON.stringify(before));
|
||||
|
||||
await evaluate(page, `(() => {
|
||||
const ctx = window.SillyTavern.getContext();
|
||||
const s = ctx.extensionSettings.tavern_helper.script;
|
||||
const list = new Set(s.enabled.presets || []);
|
||||
for (const name of ${JSON.stringify(presets)}) list.add(name);
|
||||
s.enabled = { global: true, presets: [...list], characters: s.enabled.characters || [] };
|
||||
ctx.saveSettingsDebounced();
|
||||
return s.enabled;
|
||||
})()`);
|
||||
await sleep(1200);
|
||||
|
||||
const after = await evaluate(page, `(() => window.SillyTavern.getContext().extensionSettings.tavern_helper.script.enabled)()`);
|
||||
console.log("[scripts] 改后: " + JSON.stringify(after));
|
||||
|
||||
if (reload) {
|
||||
await cdp.send("Page.enable", {}, sessionId);
|
||||
await cdp.send("Page.reload", {}, sessionId);
|
||||
await sleep(1500);
|
||||
await waitStReady(page, 120000, (msg) => console.log("[scripts] " + msg));
|
||||
console.log("[scripts] 页面已重载并就绪");
|
||||
const now = await evaluate(page, `(() => window.SillyTavern.getContext().extensionSettings.tavern_helper.script.enabled)()`);
|
||||
console.log("[scripts] 重载后: " + JSON.stringify(now));
|
||||
}
|
||||
cdp.close();
|
||||
Reference in New Issue
Block a user