diff --git a/tui-plugins/oc-session-all.js b/tui-plugins/oc-session-all.js index 6f4edde..c06d1a2 100644 --- a/tui-plugins/oc-session-all.js +++ b/tui-plugins/oc-session-all.js @@ -426,26 +426,38 @@ function mmReadCatalog() { return new Promise((resolve) => { try { const py = process.platform === "win32" ? "python" : "python3" + // 注意:Python `-c` 单行脚本里 `if row: import sys;` 是非法语法(import 不能跟在 if 同行) + // 提前 import sys,用 `sys.stdout.write(row[0]) if row else None` 替代 if 行 const script = - "import sqlite3,os;" + + "import sqlite3,os,sys;" + "db=os.path.join(os.path.expanduser('~'),'.local','share','opencode','opencode.db');" + "con=sqlite3.connect(db);" + "row=con.execute(\"SELECT value FROM kv WHERE key='models-dev:catalog'\").fetchone();" + "con.close();" + - "if row: import sys; sys.stdout.write(row[0])" + "sys.stdout.write(row[0]) if row else None" const r = spawn(py, ["-c", script], { stdio: ["ignore", "pipe", "pipe"] }) let out = "" + let err = "" r.stdout.on("data", (d) => (out += d)) + r.stderr.on("data", (d) => (err += d)) r.on("close", () => { try { if (out.trim()) resolve(JSON.parse(out.trim())) - else resolve(null) + else { + log("[oc-session-all] mmReadCatalog 空结果 err:" + err.slice(0, 200)) + resolve(null) + } } catch (e) { + log("[oc-session-all] mmReadCatalog parse 失败: " + e.message + " err:" + err.slice(0, 120)) resolve(null) } }) - r.on("error", () => resolve(null)) + r.on("error", (e) => { + log("[oc-session-all] mmReadCatalog spawn error: " + e.message) + resolve(null) + }) } catch (e) { + log("[oc-session-all] mmReadCatalog 异常: " + e.message) resolve(null) } })