mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
Fix persistence pending gating and add repair actions
This commit is contained in:
@@ -85,9 +85,27 @@ function normalizePersistenceStateRecord(persistResult = null) {
|
||||
saved: persistResult?.saved === true,
|
||||
queued,
|
||||
blocked,
|
||||
attempted: true,
|
||||
};
|
||||
}
|
||||
|
||||
function hasMeaningfulPersistenceRecord(persistence = null) {
|
||||
if (!persistence || typeof persistence !== "object") return false;
|
||||
if (persistence.attempted === true) return true;
|
||||
const revision = Number(persistence?.revision || 0);
|
||||
if (Number.isFinite(revision) && revision > 0) return true;
|
||||
if (String(persistence?.storageTier || "").trim() && persistence.storageTier !== "none") {
|
||||
return true;
|
||||
}
|
||||
if (String(persistence?.saveMode || "").trim()) return true;
|
||||
if (String(persistence?.reason || "").trim()) return true;
|
||||
return (
|
||||
persistence.saved === true ||
|
||||
persistence.queued === true ||
|
||||
persistence.blocked === true
|
||||
);
|
||||
}
|
||||
|
||||
function cloneSerializable(value, fallback = null) {
|
||||
try {
|
||||
return JSON.parse(JSON.stringify(value));
|
||||
@@ -346,13 +364,15 @@ function getPendingPersistenceGateInfo(runtime) {
|
||||
const persistence = batchStatus?.persistence || null;
|
||||
const pendingPersist = runtime?.getGraphPersistenceState?.()?.pendingPersist === true;
|
||||
const accepted = isPersistenceRevisionAccepted(runtime, persistence);
|
||||
if (!pendingPersist && (!persistence || accepted)) {
|
||||
const attempted = hasMeaningfulPersistenceRecord(persistence);
|
||||
if (!pendingPersist && (!attempted || accepted)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
pendingPersist,
|
||||
accepted,
|
||||
attempted,
|
||||
outcome: String(persistence?.outcome || ""),
|
||||
reason: String(persistence?.reason || ""),
|
||||
revision: Number.isFinite(Number(persistence?.revision))
|
||||
@@ -387,7 +407,7 @@ function formatPendingPersistenceGateMessage(runtime, operationLabel = "当前
|
||||
Number.isFinite(Number(gate.revision)) && Number(gate.revision) > 0
|
||||
? ` · rev ${Number(gate.revision)}`
|
||||
: "";
|
||||
return `${operationLabel}已暂停:上一批持久化尚未确认,请优先重试持久化或触发恢复${revision}${reason}`;
|
||||
return `${operationLabel}已暂停:上一批持久化尚未确认,请先使用“重试持久化”或“重新探测图谱”${revision}${reason}`;
|
||||
}
|
||||
|
||||
export function resolveAutoExtractionPlanController(
|
||||
@@ -571,6 +591,15 @@ export async function executeExtractionBatchController(
|
||||
"failed",
|
||||
result?.error || "提取阶段未返回有效操作",
|
||||
);
|
||||
runtime.setBatchStageOutcome(
|
||||
batchStatus,
|
||||
"finalize",
|
||||
"failed",
|
||||
"提取阶段失败,未进入持久化",
|
||||
);
|
||||
batchStatus.persistence = null;
|
||||
batchStatus.historyAdvanceAllowed = false;
|
||||
batchStatus.historyAdvanced = false;
|
||||
runtime.finalizeBatchStatus(batchStatus, runtime.getExtractionCount());
|
||||
runtime.getCurrentGraph().historyState.lastBatchStatus = batchStatus;
|
||||
return {
|
||||
@@ -852,7 +881,7 @@ export async function onManualExtractController(runtime, options = {}) {
|
||||
syncRuntime: true,
|
||||
},
|
||||
);
|
||||
runtime.toastr.warning("上一批持久化尚未确认,请先重试持久化或执行恢复");
|
||||
runtime.toastr.warning("上一批持久化尚未确认,请先点“重试持久化”或“重新探测图谱”");
|
||||
return;
|
||||
}
|
||||
if (!(await runtime.recoverHistoryIfNeeded("manual-extract"))) return;
|
||||
|
||||
Reference in New Issue
Block a user