import { Plugin } from "@opencode/plugin/tui" import { appendFileSync, mkdirSync, existsSync } from "fs" import { join } from "path" // 日志文件路径 const LOG_DIR = "C:\\Users\\ypshidifu\\.config\\opencode" const LOG_FILE = join(LOG_DIR, "oc-session-all.log") // 确保日志目录存在 if (!existsSync(LOG_DIR)) { mkdirSync(LOG_DIR, { recursive: true }) } function log(msg) { const timestamp = new Date().toISOString() const line = `[${timestamp}] ${msg}\n` try { appendFileSync(LOG_FILE, line) } catch (e) { // 忽略写入错误 } console.log(msg) } export default Plugin.define({ id: "oc-session-all", setup(context) { log("[oc-session-all] v2 Plugin loaded! Attempting keymap.layer registration...") // ── 探测 context.keymap 结构 ────────────────────────────────────── const report = [] report.push("context keys: " + Object.keys(context).join(", ")) // 探测 context.keymap if (context.keymap) { const kmKeys = Object.getOwnPropertyNames(context.keymap) report.push("keymap props: " + kmKeys.join(", ")) // 尝试 keymap.layer if (typeof context.keymap.layer === "function") { report.push("keymap.layer is a function") try { // 尝试不同的调用方式 const layerResult = context.keymap.layer({ commands: [ { title: "Show All Sessions", value: "sessions-all", slash: { name: "sessions-all", aliases: ["sa"] }, description: "Display all session records in a dialog", onSelect: async () => { log("[oc-session-all] /sessions-all triggered via keymap.layer") context.ui.toast.show({ message: "Sessions-all command executed!", variant: "success", duration: 3000, }) }, }, ], }) report.push("keymap.layer result type: " + typeof layerResult) log("[oc-session-all] keymap.layer called successfully, result type: " + typeof layerResult) } catch (e) { report.push("keymap.layer ERROR: " + e.message) log("[oc-session-all] keymap.layer ERROR: " + e.message) } } else { report.push("keymap.layer is NOT a function") log("[oc-session-all] keymap.layer is NOT a function") } // 尝试 keymap.commands if (typeof context.keymap.commands === "function") { report.push("keymap.commands is a function") try { const commandsResult = context.keymap.commands() report.push("keymap.commands() result type: " + typeof commandsResult) log("[oc-session-all] keymap.commands() called, result type: " + typeof commandsResult) } catch (e) { report.push("keymap.commands ERROR: " + e.message) log("[oc-session-all] keymap.commands ERROR: " + e.message) } } else if (context.keymap.commands) { report.push("keymap.commands is an object: " + Object.keys(context.keymap.commands).join(", ")) log("[oc-session-all] keymap.commands is an object: " + Object.keys(context.keymap.commands).join(", ")) } else { report.push("keymap.commands is undefined") } // 尝试 keymap.dispatch if (typeof context.keymap.dispatch === "function") { report.push("keymap.dispatch is a function") } else { report.push("keymap.dispatch is NOT a function") } } const msg = report.join(" | ") log("[oc-session-all] KEYMAP PROBE: " + msg) try { context.ui.toast.show({ message: "Keymap probe: " + msg, variant: "info", duration: 20000, }) } catch (e) { log("[oc-session-all] toast.show ERROR: " + e.message) } }, })