import fs from "fs" import os from "os" import path from "path" const LOG_DIR = path.join(os.homedir(), ".opencode-matrix-plugin") const LOG_FILE = path.join(LOG_DIR, "plugin.log") let appLog: ((data: any) => Promise) | null = null export function setAppLog(fn: (data: any) => Promise): void { appLog = fn } export function log(message: string): void { // Try OpenCode's logging API first if (appLog) { appLog({ service: "matrix-plugin", level: "info", message, }).catch(() => { // Fallback to file logging try { fs.mkdirSync(LOG_DIR, { recursive: true }) fs.appendFileSync(LOG_FILE, `[${new Date().toISOString()}] [matrix-plugin] ${message}\n`) } catch { // silent } }) } else { // No app log available, use file logging try { fs.mkdirSync(LOG_DIR, { recursive: true }) fs.appendFileSync(LOG_FILE, `[${new Date().toISOString()}] [matrix-plugin] ${message}\n`) } catch { // silent } } } export function logError(message: string): void { // Try OpenCode's logging API first if (appLog) { appLog({ service: "matrix-plugin", level: "error", message, }).catch(() => { // Fallback to file logging try { fs.mkdirSync(LOG_DIR, { recursive: true }) fs.appendFileSync(LOG_FILE, `[${new Date().toISOString()}] [matrix-plugin] ERROR: ${message}\n`) } catch { // silent } }) } else { // No app log available, use file logging try { fs.mkdirSync(LOG_DIR, { recursive: true }) fs.appendFileSync(LOG_FILE, `[${new Date().toISOString()}] [matrix-plugin] ERROR: ${message}\n`) } catch { // silent } } }