package main import ( "context" "log" "os" "agent/internal/agent" "agent/internal/server" ) func main() { cfg := agent.LoadConfig() store, err := agent.NewSessionStore(cfg.DataDir) if err != nil { log.Fatalf("failed to initialize session store: %v", err) } dockerCfg, err := agent.NewDockerConfigStore(cfg.DataDir) if err != nil { log.Fatalf("failed to initialize docker config store: %v", err) } apiCfg, err := agent.NewAPIConfigStore(cfg.DataDir, agent.APIConfig{ APIKey: cfg.APIKey, BaseURL: cfg.BaseURL, Model: cfg.Model, Provider: agent.ProviderOpenAI, }) if err != nil { log.Fatalf("failed to initialize api config store: %v", err) } r, srv := server.NewRouter(cfg, store, dockerCfg, apiCfg) // 托管模式:检测到 BENCHMARK_TOKEN 时自动启动评测,无需外部触发。 // agent.Run 不依赖 HTTP 服务,可直接在 goroutine 中调用。 if os.Getenv("BENCHMARK_TOKEN") != "" { go func() { log.Printf("[benchmark] 检测到托管模式(BENCHMARK_TOKEN 已注入),自动启动评测") if err := srv.StartBenchmark(context.Background()); err != nil { log.Printf("[benchmark] 初始轮异常: %v", err) } log.Printf("[benchmark] 初始轮结束,后续 coop 完成通知将自动触发新一轮处理") }() } log.Printf("agent is running at http://localhost:%s", cfg.Port) if err := r.Run(":" + cfg.Port); err != nil { log.Fatalf("server stopped: %v", err) } }