first commit

This commit is contained in:
2026-08-14 23:41:57 +08:00
commit 086803a8dd
471 changed files with 91938 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
package server
import (
"strings"
"time"
"agent/internal/agent"
"github.com/gin-gonic/gin"
)
// coopTaskView 是返回给前端的协作任务视图,附带容器的实时状态与协作轮次进度。
type coopTaskView struct {
ID string `json:"id"`
SessionID string `json:"session_id"`
Status string `json:"status"` // running | done
Error string `json:"error,omitempty"`
ExitCode int `json:"exit_code,omitempty"`
Blackboard string `json:"blackboard,omitempty"`
RoundMax int `json:"round_max"`
CurrentRound int `json:"current_round"`
ContainerState string `json:"container_state,omitempty"`
ContainerStatus string `json:"container_status,omitempty"`
CreatedAt time.Time `json:"created_at"`
FinishedAt time.Time `json:"finished_at,omitempty"`
}
// coopTasks 返回协作任务列表,支持 ?session=<id> 过滤到某个会话。
func (s *Server) coopTasks(c *gin.Context) {
tasks := s.agent.CoopTasks(strings.TrimSpace(c.Query("session")))
views := make([]coopTaskView, 0, len(tasks))
for _, task := range tasks {
views = append(views, s.coopTaskView(task))
}
ok(c, gin.H{"tasks": views})
}
func (s *Server) coopTaskView(task *agent.CoopTask) coopTaskView {
view := coopTaskView{
ID: task.ID,
SessionID: task.SessionID,
Status: task.Status,
Error: task.Error,
ExitCode: task.ExitCode,
Blackboard: task.Blackboard,
RoundMax: task.RoundMax,
CreatedAt: task.CreatedAt,
FinishedAt: task.FinishedAt,
}
// 轮次进度以黑板 logs 目录实际出现的轮次为准(容器清理后日志仍在)
view.CurrentRound = agent.CurrentCoopRound(task.Blackboard)
if view.CurrentRound == 0 {
view.CurrentRound = view.RoundMax
}
// 运行中的任务实时查询容器状态;已完成任务容器已被清理,直接读记录即可
if task.Status == "running" && task.ContainerID != "" {
if state, status, err := agent.ContainerInspectStatus(s.dockerCfg.Socket(), task.ContainerID); err == nil {
view.ContainerState = state
view.ContainerStatus = status
}
}
return view
}