// Command viewsagent 是桌面视觉问答助手。 // // 程序是一个完整的桌面应用:没有控制台窗口,日志既写在磁盘上, // 也能从界面上的「日志」按钮随时查看。 package main import ( "log/slog" "os" "path/filepath" "viewsagent/internal/logging" "viewsagent/internal/ui" "viewsagent/internal/win32" ) const appTitle = "视界 Agent" func main() { // 内存缓冲:界面上的「日志」弹窗直接读它。 buf := logging.NewBuffer(2000) writer, err := logging.Open(logPath(), buf) if err != nil { // 日志文件打不开也要能继续跑,此时只写内存。 win32.MessageBox(appTitle, "日志文件无法写入:\n"+err.Error(), win32.MBError) } defer writer.Close() slog.SetDefault(slog.New(logging.NewHandler(writer, slog.LevelInfo))) slog.Info("程序启动", "日志文件", logPath()) if err := ui.Run(buf); err != nil { slog.Error("启动失败", "err", err) // 没有控制台窗口,错误只能靠弹窗告知用户。 win32.MessageBox(appTitle, "启动失败:\n"+err.Error(), win32.MBError) os.Exit(1) } } // logPath 返回日志文件路径,默认放在用户配置目录下的 viewsagent/app.log。 func logPath() string { dir, err := os.UserConfigDir() if err != nil { return filepath.Join(".", "app.log") } return filepath.Join(dir, "viewsagent", "app.log") }