48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
// 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")
|
|
}
|