From 3f7dd0d727788aa74892f59ce921f8b5e534262c Mon Sep 17 00:00:00 2001 From: Youzini-afk <13153778771cx@gmail.com> Date: Sun, 12 Apr 2026 12:52:54 +0800 Subject: [PATCH] feat: persist extract action mode selection across panel sessions - Add extractActionMode setting (default: pending) to settings-defaults.js - Panel refresh restores dropdown from settings.extractActionMode - Dropdown change event persists selection via _patchSettings - Extract button reads settings as fallback when DOM value missing - Add default value assertion in tests/default-settings.mjs --- runtime/settings-defaults.js | 1 + tests/default-settings.mjs | 1 + ui/panel.js | 23 ++++++++++++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/runtime/settings-defaults.js b/runtime/settings-defaults.js index 2ba320a..e216167 100644 --- a/runtime/settings-defaults.js +++ b/runtime/settings-defaults.js @@ -29,6 +29,7 @@ export const defaultSettings = { extractWorldbookMode: "active", extractIncludeStoryTime: true, extractIncludeSummaries: true, + extractActionMode: "pending", // 召回设置 recallEnabled: true, diff --git a/tests/default-settings.mjs b/tests/default-settings.mjs index f56a161..d05be94 100644 --- a/tests/default-settings.mjs +++ b/tests/default-settings.mjs @@ -6,6 +6,7 @@ import { } from "../runtime/settings-defaults.js"; assert.equal(defaultSettings.extractContextTurns, 2); +assert.equal(defaultSettings.extractActionMode, "pending"); assert.equal(defaultSettings.extractAutoDelayLatestAssistant, false); assert.equal(defaultSettings.recallTopK, 20); assert.equal(defaultSettings.recallMaxNodes, 8); diff --git a/ui/panel.js b/ui/panel.js index 4c6209a..3f5722b 100644 --- a/ui/panel.js +++ b/ui/panel.js @@ -4036,7 +4036,11 @@ function _bindActions() { const btn = document.getElementById("bme-act-extract"); if (btn?.disabled) return; const mode = - String(document.getElementById("bme-extract-mode")?.value || "pending") + String( + document.getElementById("bme-extract-mode")?.value || + (_getSettings?.() || {}).extractActionMode || + "pending", + ) .trim() .toLowerCase() === "rerun" ? "rerun" @@ -4534,6 +4538,10 @@ function _refreshConfigTab() { "bme-setting-wi-filter-keywords", settings.worldInfoFilterCustomKeywords || "", ); + _setInputValue( + "bme-extract-mode", + settings.extractActionMode || "pending", + ); const wiFilterCustomSection = panelEl?.querySelector( "#bme-wi-filter-custom-section", ); @@ -4954,6 +4962,19 @@ function _bindConfigControls() { }); noticeDisplayModeEl.dataset.bmeBound = "true"; } + const extractModeEl = document.getElementById("bme-extract-mode"); + if (extractModeEl && extractModeEl.dataset.bmeBound !== "true") { + extractModeEl.addEventListener("change", () => { + _patchSettings({ + extractActionMode: + String(extractModeEl.value || "pending").trim().toLowerCase() === + "rerun" + ? "rerun" + : "pending", + }); + }); + extractModeEl.dataset.bmeBound = "true"; + } const cloudStorageModeEl = document.getElementById( "bme-setting-cloud-storage-mode", );