// Command viewsagent 是桌面视觉问答助手。 package main import ( "io" "log/slog" "os" "path/filepath" "viewsagent/internal/ui" ) func main() { slog.SetDefault(slog.New(slog.NewTextHandler(logWriter(), &slog.HandlerOptions{ Level: slog.LevelInfo, }))) if err := ui.Run(); err != nil { slog.Error("启动失败", "err", err) os.Exit(1) } } // logWriter 同时输出到控制台和配置文件旁边的 app.log, // 打包成无控制台窗口后也能排查问题。 func logWriter() io.Writer { dir, err := os.UserConfigDir() if err != nil { return os.Stderr } base := filepath.Join(dir, "viewsagent") if err := os.MkdirAll(base, 0o755); err != nil { return os.Stderr } f, err := os.OpenFile(filepath.Join(base, "app.log"), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o644) if err != nil { return os.Stderr } return io.MultiWriter(os.Stderr, f) }