package main import ( "bufio" "fmt" "os" "strings" "syscall" ) func init() { // Windows 控制台 UTF-8 编码 kernel32 := syscall.NewLazyDLL("kernel32.dll") setConsoleCP := kernel32.NewProc("SetConsoleOutputCP") setConsoleCP.Call(65001) } func main() { args := os.Args[1:] // onboard 子命令:交互式初始化 if len(args) > 0 && args[0] == "onboard" { runOnboard() return } // 加载配置 cfg, err := LoadConfig() if err != nil { fmt.Fprintf(os.Stderr, "❌ 未找到配置文件。请先运行:\n") fmt.Fprintf(os.Stderr, " yunshu onboard\n") os.Exit(1) } // 配置已通过 init() 加载到 llmHost/llmModel/llmKey 中 _ = cfg // 生成工具目录(启动时覆写 auto 节,保留 manual 节) GenerateToolsYAML() // 查找并加载 agent 定义 agentPath := SearchFile("agents/weather-agent.md") def, err := LoadAgent(agentPath) if err != nil { fmt.Fprintf(os.Stderr, "加载 agent 失败: %v\n", err) os.Exit(1) } // 单次查询模式 if len(args) > 0 { ClearSession() query := strings.Join(args, " ") if err := RunAgent(def, query); err != nil { fmt.Fprintf(os.Stderr, "错误: %v\n", err) os.Exit(1) } return } // 交互模式 fmt.Println("☁️ 云枢 Agent — 天气情报官,输入 exit 退出") fmt.Println(strings.Repeat("─", 50)) ClearSession() scanner := bufio.NewScanner(os.Stdin) for { fmt.Print("> ") if !scanner.Scan() { break } input := strings.TrimSpace(scanner.Text()) if input == "" { continue } if input == "exit" || input == "quit" { fmt.Println("再见!") break } if err := RunAgent(def, input); err != nil { fmt.Fprintf(os.Stderr, "错误: %v\n", err) } fmt.Println(strings.Repeat("─", 50)) } }