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>
<div class="bme-recent-meta" id="bme-status-last-persist"></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-row">
<label>最近向量</label>
@@ -488,6 +463,38 @@
</button>
</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>

View File

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