新增 WSL 插件批量同步工具 tools/sync_wsl.py;TUI 插件为 mcpcfg.txt 增加实时监测与丢失自动重建防御
This commit is contained in:
@@ -582,6 +582,48 @@ export default Plugin.define({
|
||||
return parts.join("|")
|
||||
}
|
||||
|
||||
// ── 一手防御:mcpcfg.txt 实时监测 + 自动重建(2026-10-12)─────────────
|
||||
// 背景:OC 升级/更新会删掉 ~/.config/opencode 下的非官方文件(实测
|
||||
// mcpcfg.txt、同步脚本都被删过)→ 插件判 mode=off → /mcpon /mcpoff
|
||||
// 整个不注册。这里在 watcher tick 里做实时兜底:文件丢了立刻按同目录
|
||||
// 现存配置重建(模式=自动);重建后需重启 OC 才会重注册命令(toast 提示)。
|
||||
const mcpcfgRebuiltAt = { ts: 0 }
|
||||
function ensureMcpcfgAlive() {
|
||||
try {
|
||||
if (existsSync(CFG_TXT)) return true
|
||||
const active = join(LOG_DIR, "opencode.json")
|
||||
if (!existsSync(active)) {
|
||||
log("[oc-session-all] 防御: mcpcfg.txt 与 opencode.json 均缺失,无法自动重建")
|
||||
return false
|
||||
}
|
||||
const has = activeHasMcp(active)
|
||||
const shadow = healShadowPath(active, "")
|
||||
if (!shadow || !existsSync(shadow)) {
|
||||
log("[oc-session-all] 防御: mcpcfg.txt 丢失且未找到影子配置,无法自动重建(shadow=" + shadow + ")")
|
||||
return false
|
||||
}
|
||||
const onPath = has ? active : shadow
|
||||
const quietPath = has ? shadow : active
|
||||
if (!writeMcpCfg("auto", onPath, quietPath)) return false
|
||||
log("[oc-session-all] 防御: mcpcfg.txt 丢失已自动重建(模式=自动 on=" + onPath + " quiet=" + quietPath + ")")
|
||||
const now = Date.now()
|
||||
if (now - mcpcfgRebuiltAt.ts > 60000) {
|
||||
mcpcfgRebuiltAt.ts = now
|
||||
try {
|
||||
context.ui.toast.show({
|
||||
message: "mcpcfg.txt 已自动重建(重启 OC 后 /mcpon /mcpoff 恢复)",
|
||||
variant: "warning",
|
||||
duration: 6000,
|
||||
})
|
||||
} catch (e) {}
|
||||
}
|
||||
return true
|
||||
} catch (e) {
|
||||
log("[oc-session-all] ensureMcpcfg ERROR: " + e.message)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const presentDirs = skillDirs.filter((d) => existsSync(d))
|
||||
let lastSkillSig = skillSignature()
|
||||
log(
|
||||
@@ -634,6 +676,8 @@ export default Plugin.define({
|
||||
|
||||
setInterval(() => {
|
||||
try {
|
||||
// 一手防御:mcpcfg.txt 被 OC 更新删除时自动重建(健康时仅一次 existsSync,开销可忽略)
|
||||
ensureMcpcfgAlive()
|
||||
const sig = skillSignature()
|
||||
if (sig === lastSkillSig) return
|
||||
lastSkillSig = sig
|
||||
|
||||
Reference in New Issue
Block a user