更新代码

This commit is contained in:
hero920103 committed 2026-10-28 17:39:33 +08:00
1 parent eda7e8bc96
commit 6ff632e0b0
19 files changed
+2033 -197

No files matched your search

+26 -19
View File
@@ -1,40 +1,47 @@
// Command viewsagent 是桌面视觉问答助手。
//
// 程序是一个完整的桌面应用:没有控制台窗口,日志既写在磁盘上,
// 也能从界面上的「日志」按钮随时查看。
package main
import (
"io"
"log/slog"
"os"
"path/filepath"
"viewsagent/internal/logging"
"viewsagent/internal/ui"
"viewsagent/internal/win32"
)
func main() {
slog.SetDefault(slog.New(slog.NewTextHandler(logWriter(), &slog.HandlerOptions{
Level: slog.LevelInfo,
})))
const appTitle = "视界 Agent"
if err := ui.Run(); err != nil {
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)
}
}
// logWriter 同时输出到控制台和配置文件旁边的 app.log,
// 打包成无控制台窗口后也能排查问题。
func logWriter() io.Writer {
// logPath 返回日志文件路径,默认放在用户配置目录下的 viewsagent/app.log。
func logPath() string {
dir, err := os.UserConfigDir()
if err != nil {
return os.Stderr
return filepath.Join(".", "app.log")
}
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)
return filepath.Join(dir, "viewsagent", "app.log")
}