// 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();