refactor: move persistence repair actions into actions tab

This commit is contained in:
Youzini-afk
2026-04-15 21:32:46 +08:00
parent 0c03bc4454
commit be9e0ef719
2 changed files with 61 additions and 47 deletions

View File

@@ -252,31 +252,6 @@
<label>最近持久化</label> <label>最近持久化</label>
<div class="bme-recent-meta" id="bme-status-last-persist"></div> <div class="bme-recent-meta" id="bme-status-last-persist"></div>
</div> </div>
<div class="bme-config-row" id="bme-persist-repair-row" hidden>
<label>持久化修复</label>
<div class="bme-task-inline-actions">
<button class="bme-config-secondary-btn" id="bme-act-retry-persist" type="button">
<i class="fa-solid fa-arrows-rotate"></i>
<span>重试持久化</span>
</button>
<button class="bme-config-secondary-btn" id="bme-act-probe-graph-load" type="button">
<i class="fa-solid fa-satellite-dish"></i>
<span>重新探测图谱</span>
</button>
<button class="bme-config-secondary-btn" id="bme-act-rebuild-luker-cache" type="button">
<i class="fa-solid fa-database"></i>
<span>重建本地缓存</span>
</button>
<button class="bme-config-secondary-btn" id="bme-act-repair-luker-sidecar" type="button">
<i class="fa-solid fa-screwdriver-wrench"></i>
<span>修复主 Sidecar</span>
</button>
<button class="bme-config-secondary-btn" id="bme-act-compact-luker-sidecar" type="button">
<i class="fa-solid fa-box-archive"></i>
<span>压实主 Sidecar</span>
</button>
</div>
</div>
<div class="bme-config-help" id="bme-persist-repair-help" hidden></div> <div class="bme-config-help" id="bme-persist-repair-help" hidden></div>
<div class="bme-config-row"> <div class="bme-config-row">
<label>最近向量</label> <label>最近向量</label>
@@ -488,6 +463,38 @@
</button> </button>
</div> </div>
</div> </div>
<div class="bme-action-group" id="bme-luker-sidecar-group" hidden>
<div class="bme-action-group-header">
<span class="bme-action-group-title">持久化修复</span>
<span class="bme-action-group-sub">本地持久化与 Luker 主 sidecar 的统一修复区域</span>
</div>
<div class="bme-action-grid">
<button class="bme-action-btn" id="bme-act-retry-persist" type="button">
<i class="fa-solid fa-arrows-rotate"></i>
<span>重试持久化</span>
</button>
<button class="bme-action-btn" id="bme-act-probe-graph-load" type="button">
<i class="fa-solid fa-satellite-dish"></i>
<span>重新探测图谱</span>
</button>
<button class="bme-action-btn" id="bme-act-rebuild-luker-cache" type="button">
<i class="fa-solid fa-database"></i>
<span>重建本地缓存</span>
</button>
<button class="bme-action-btn" id="bme-act-repair-luker-sidecar" type="button">
<i class="fa-solid fa-screwdriver-wrench"></i>
<span>修复主 Sidecar</span>
</button>
<button class="bme-action-btn" id="bme-act-compact-luker-sidecar" type="button">
<i class="fa-solid fa-box-archive"></i>
<span>压实主 Sidecar</span>
</button>
</div>
<div class="bme-action-group-extra">
<div class="bme-config-help" id="bme-actions-persist-repair-help"></div>
</div>
</div>
</div> </div>
</div> </div>

View File

@@ -11750,12 +11750,15 @@ function _refreshPersistenceRepairUi(
loadInfo = _getGraphPersistenceSnapshot(), loadInfo = _getGraphPersistenceSnapshot(),
batchStatus = _getLatestBatchStatusSnapshot(), batchStatus = _getLatestBatchStatusSnapshot(),
) { ) {
const row = document.getElementById("bme-persist-repair-row");
const help = document.getElementById("bme-persist-repair-help"); const help = document.getElementById("bme-persist-repair-help");
const lukerGroup = document.getElementById("bme-luker-sidecar-group");
const actionHelp = document.getElementById("bme-actions-persist-repair-help");
const lukerCacheBtn = document.getElementById("bme-act-rebuild-luker-cache"); const lukerCacheBtn = document.getElementById("bme-act-rebuild-luker-cache");
const lukerRepairBtn = document.getElementById("bme-act-repair-luker-sidecar"); const lukerRepairBtn = document.getElementById("bme-act-repair-luker-sidecar");
const lukerCompactBtn = document.getElementById("bme-act-compact-luker-sidecar"); const lukerCompactBtn = document.getElementById("bme-act-compact-luker-sidecar");
if (!row || !help) return; const retryBtn = document.getElementById("bme-act-retry-persist");
const probeBtn = document.getElementById("bme-act-probe-graph-load");
if (!help) return;
const persistence = batchStatus?.persistence || null; const persistence = batchStatus?.persistence || null;
const accepted = _isPersistenceRevisionAccepted(persistence, loadInfo); const accepted = _isPersistenceRevisionAccepted(persistence, loadInfo);
@@ -11764,41 +11767,45 @@ function _refreshPersistenceRepairUi(
Boolean(loadInfo?.persistMismatchReason) || Boolean(loadInfo?.persistMismatchReason) ||
(_hasMeaningfulPersistenceRecord(persistence) && !accepted); (_hasMeaningfulPersistenceRecord(persistence) && !accepted);
row.hidden = !shouldShow;
help.hidden = !shouldShow; help.hidden = !shouldShow;
const isLuker = String(loadInfo?.hostProfile || "") === "luker"; const isLuker = String(loadInfo?.hostProfile || "") === "luker";
if (lukerGroup) lukerGroup.hidden = !shouldShow;
if (retryBtn) retryBtn.hidden = false;
if (probeBtn) probeBtn.hidden = false;
if (lukerCacheBtn) lukerCacheBtn.hidden = !isLuker; if (lukerCacheBtn) lukerCacheBtn.hidden = !isLuker;
if (lukerRepairBtn) lukerRepairBtn.hidden = !isLuker; if (lukerRepairBtn) lukerRepairBtn.hidden = !isLuker;
if (lukerCompactBtn) lukerCompactBtn.hidden = !isLuker; if (lukerCompactBtn) lukerCompactBtn.hidden = !isLuker;
if (!shouldShow) { if (!shouldShow) {
help.textContent = ""; help.textContent = "";
if (actionHelp) actionHelp.textContent = "";
return; return;
} }
let helpText = "";
if (loadInfo?.pendingPersist === true) { if (loadInfo?.pendingPersist === true) {
const baseMessage = helpText =
isLuker isLuker
? "最近一批提取已经完成,但 Luker manifest 还没确认。先试“重试持久化”,如果仍未确认,再“修复主 Sidecar”或“重建本地缓存”。" ? "最近一批提取已经完成,但 Luker manifest 还没确认。先试“重试持久化”,如果仍未确认,再到“操作”页的 Luker Sidecar 区域做“修复主 Sidecar”或“重建本地缓存”。"
: "最近一批提取已经完成,但正式写回还没确认。先试“重试持久化”,如果状态没变化,再试“重新探测图谱”。"; : "最近一批提取已经完成,但正式写回还没确认。先试“重试持久化”,如果状态没变化,再试“重新探测图谱”。";
help.textContent = loadInfo?.indexedDbLastError if (loadInfo?.indexedDbLastError) {
? `${baseMessage}\n本地错误:${loadInfo.indexedDbLastError}` helpText = `${helpText}\n本地错误:${loadInfo.indexedDbLastError}`;
: baseMessage; }
return; } else if (loadInfo?.persistMismatchReason) {
helpText = _formatPersistMismatchHelp(loadInfo.persistMismatchReason);
} else {
helpText =
persistence?.recoverable === true
? isLuker
? "最近一批已经捕获了恢复锚点,但 Luker 主 sidecar 还没确认。可以先重试持久化;必要时再到“操作”页的持久化修复区域执行更深修复。"
: "最近一批已经捕获了恢复锚点,但还没有进入正式 accepted 存储。可以先重试持久化;如果仍未确认,再重新探测图谱。"
: isLuker
? "最近一批持久化没有被 Luker manifest 接受。可以先重试持久化;如果主 sidecar 与本地缓存脱节,再到“操作”页的持久化修复区域执行更深修复。"
: "最近一批持久化没有被接受。可以先重试持久化;如果宿主延迟加载了本地存储,再重新探测图谱。";
} }
help.textContent = helpText;
if (loadInfo?.persistMismatchReason) { if (actionHelp) {
help.textContent = _formatPersistMismatchHelp(loadInfo.persistMismatchReason); actionHelp.textContent = helpText;
return;
} }
help.textContent =
persistence?.recoverable === true
? isLuker
? "最近一批已经捕获了恢复锚点,但 Luker 主 sidecar 还没确认。可以先重试持久化;必要时再修复主 Sidecar或重建本地缓存。"
: "最近一批已经捕获了恢复锚点,但还没有进入正式 accepted 存储。可以先重试持久化;如果仍未确认,再重新探测图谱。"
: isLuker
? "最近一批持久化没有被 Luker manifest 接受。可以先重试持久化;如果主 sidecar 与本地缓存脱节,再修复主 Sidecar或重建本地缓存。"
: "最近一批持久化没有被接受。可以先重试持久化;如果宿主延迟加载了本地存储,再重新探测图谱。";
} }
function _canRenderGraphData(loadInfo = _getGraphPersistenceSnapshot()) { function _canRenderGraphData(loadInfo = _getGraphPersistenceSnapshot()) {