修复DB执行器旧版残留导致停用整厂假成功:内容感知落盘+DB写失败不报已重载
This commit is contained in:
+38
-3
@@ -409,11 +409,36 @@ async function processOutbox(ctx: any): Promise<void> {
|
||||
const depth = queueDepth()
|
||||
fileLog(`DB 写结果 op=${op}: ${res},队列剩余=${depth}`)
|
||||
|
||||
// ── 堵假成功(2026-10-20 修):DB 写失败时不维护状态、不写「成功 flush」──────
|
||||
// 否则 TUI 侧照常热重载并 toast「已重载」,但 catalog 压根没改(模型安然无恙)。
|
||||
const s = String(res)
|
||||
const failed =
|
||||
s.startsWith("unknown op") ||
|
||||
s.startsWith("spawn-fail") ||
|
||||
s.startsWith("Traceback") ||
|
||||
/^rc=[1-9]/.test(s)
|
||||
if (failed) {
|
||||
fileLog(`✗ DB 写未生效 op=${op}: ${s.slice(0, 300)}`)
|
||||
if (s.startsWith("unknown op")) {
|
||||
ensureDbExec()
|
||||
fileLog("已按当前插件版本重写 DB 执行器(磁盘为旧版本缺新 op),请重新执行该操作")
|
||||
}
|
||||
try {
|
||||
writeFileSync(
|
||||
FLUSH,
|
||||
JSON.stringify({ at: Date.now(), lastOp: op, serverReload: false, error: `DB 写未生效: ${s.slice(0, 160)}` }),
|
||||
)
|
||||
fileLog("已写「失败 flush」标记(TUI 会提示失败,不报已重载): tag=" + op)
|
||||
} catch (e: any) {
|
||||
fileLog("失败 flush 标记写入失败: " + (e && e.message ? e.message : String(e)))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ── 维护持久化停用状态(只有 DB 真实进入目标态才动)────────────────────
|
||||
// provider 级 → cfg.json 的「以下是停用列表」(用户可见可手改)
|
||||
// modelID 级 → model-manager.disabled.json 镜像
|
||||
try {
|
||||
const s = String(res)
|
||||
const prov = payload.provider
|
||||
if (op === "disable_all" && (s.startsWith("disabled_all ") || s.startsWith("already empty"))) {
|
||||
const list = readStopList()
|
||||
@@ -611,10 +636,20 @@ else:
|
||||
|
||||
// 把 DB 执行器落盘(首次 setup 时写一次,幂等)
|
||||
function ensureDbExec(): void {
|
||||
// 内容感知落盘(2026-10-20 修):旧版只判 existsSync → 插件升级后磁盘残留旧执行器,
|
||||
// 新 op(disable_all/remove_provider)打过去报 unknown op,DB 没写却照报「已重载」= 假成功。
|
||||
try {
|
||||
if (!existsSync(DB_EXEC)) {
|
||||
let cur: string | null = null
|
||||
if (existsSync(DB_EXEC)) {
|
||||
try {
|
||||
cur = readFileSync(DB_EXEC, "utf-8")
|
||||
} catch {
|
||||
cur = null
|
||||
}
|
||||
}
|
||||
if (cur !== DB_EXEC_SRC) {
|
||||
writeFileSync(DB_EXEC, DB_EXEC_SRC, "utf-8")
|
||||
fileLog("DB 执行器已落盘 " + DB_EXEC)
|
||||
fileLog(cur === null ? "DB 执行器已落盘 " + DB_EXEC : "DB 执行器已更新(磁盘为旧版本,已强制重写)")
|
||||
}
|
||||
} catch (e: any) {
|
||||
fileLog("DB 执行器落盘失败: " + (e && e.message ? e.message : String(e)))
|
||||
|
||||
Reference in New Issue
Block a user