Files
YunShu/src/main.go
2026-05-08 10:12:31 +08:00

86 lines
1.7 KiB
Go

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))
}
}