86 lines
1.7 KiB
Go
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))
|
|
}
|
|
}
|