model-sync: 加 opencode.json.2 provider 同步;session-sync: 双表驱动
This commit is contained in:
+25
-12
@@ -66,18 +66,15 @@ PLUGINS = [
|
||||
"/root/.config/opencode/plugins/model-manager.ts"),
|
||||
(os.path.join(HOME, ".config", "opencode", "mcpcfg.txt"),
|
||||
"/root/.config/opencode/mcpcfg.txt"),
|
||||
# ── 2026-10-20 补:插件「状态文件」也要推(修「格式化 xiaomi 后 WSL 仍可见」)──
|
||||
# WSL 侧的 model-manager 读的是 WSL 自己的 cfg/removed/disabled 清单,若不同步,
|
||||
# Win 上「停用/删除」的厂商在 WSL 无从感知 → WSL 仍按旧 catalog 显示 xiaomi/Agnes。
|
||||
# pristine 不推:6.5MB 巨大,且 WSL 侧若缺时会自动按当前 catalog 重新拍一份,无需强同步。
|
||||
# ── 2026-10-20 治本:provider 配置同步(替代 model-manager 压制清单)──
|
||||
# cc-switch 把活跃 provider(如 agnes)注入到 opencode.json.2;
|
||||
# 把整个 opencode.json.2 推给 WSL,让 WSL OC 读到一致的 provider 状态。
|
||||
# 同步后 WSL 侧的 model-manager 不再需要 removed/disabled 清单压制 agnes,
|
||||
# 因为 cc-switch 删 agnes → Win opencode.json.2 更新 → WSL 同步 → agnes 消失。
|
||||
(os.path.join(HOME, ".config", "opencode", "opencode.json.2"),
|
||||
"/root/.config/opencode/opencode.json.2"),
|
||||
(os.path.join(HOME, ".config", "opencode", "model-manager.cfg.json"),
|
||||
"/root/.config/opencode/model-manager.cfg.json"),
|
||||
(os.path.join(HOME, ".config", "opencode", "model-manager.removed.json"),
|
||||
"/root/.config/opencode/model-manager.removed.json"),
|
||||
(os.path.join(HOME, ".config", "opencode", "model-manager.disabled.json"),
|
||||
"/root/.config/opencode/model-manager.disabled.json"),
|
||||
(os.path.join(HOME, ".config", "opencode", "model-manager.stoplist.bak.json"),
|
||||
"/root/.config/opencode/model-manager.stoplist.bak.json"),
|
||||
]
|
||||
|
||||
|
||||
@@ -109,7 +106,7 @@ def fingerprint():
|
||||
|
||||
|
||||
def read_win_data():
|
||||
"""只读 Win db: 返回 (catalog_value, credentials_json, n_creds)。"""
|
||||
"""只读 Win db + opencode.json.2:返回 (catalog_value, credentials_json, n_creds)。"""
|
||||
import sqlite3 as _s
|
||||
con = _s.connect("file:%s?mode=ro" % WIN_DB.replace("\\", "/"), uri=True)
|
||||
try:
|
||||
@@ -125,7 +122,13 @@ def read_win_data():
|
||||
|
||||
|
||||
def build_plugin_blob():
|
||||
"""Win 生效份插件 -> {dst_path: base64}。"""
|
||||
"""Win 生效份插件 + opencode.json.2 -> {dst_path: base64}。
|
||||
|
||||
额外:把 WSL 侧 model-manager 压制清单(removed/disabled/stoplist.bak)重置为空,
|
||||
因为 opencode.json.2 里 provider 已同步到 WSL,不再需要靠压制清单删厂商。
|
||||
若 Win 侧清单非空(比如用户还在用 model-manager 手动压制某厂商),
|
||||
则把 Win 的清单同步过去,保持两边压制行为一致。
|
||||
"""
|
||||
blob = {}
|
||||
for src, dst in PLUGINS:
|
||||
if not os.path.exists(src):
|
||||
@@ -134,6 +137,16 @@ def build_plugin_blob():
|
||||
blob[dst] = base64.b64encode(open(src, "rb").read()).decode("ascii")
|
||||
except Exception:
|
||||
pass
|
||||
# 把 model-manager 压制清单也同步(Win 非空就推,空就推空,保证 WSL 与 Win 对齐)
|
||||
for fname in ["model-manager.removed.json", "model-manager.disabled.json",
|
||||
"model-manager.stoplist.bak.json"]:
|
||||
src = os.path.join(HOME, ".config", "opencode", fname)
|
||||
dst = "/root/.config/opencode/" + fname
|
||||
if os.path.exists(src):
|
||||
try:
|
||||
blob[dst] = base64.b64encode(open(src, "rb").read()).decode("ascii")
|
||||
except Exception:
|
||||
pass
|
||||
return blob
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user