first commit
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"agent/internal/agent"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// listSessions 会话列表,支持 ?q=<关键词> 搜索、?limit=&offset= 分页。
|
||||
func (s *Server) listSessions(c *gin.Context) {
|
||||
query := strings.TrimSpace(c.Query("q"))
|
||||
var sessions []agent.SessionSummary
|
||||
if query != "" {
|
||||
sessions = s.store.Search(query)
|
||||
} else {
|
||||
sessions = s.store.List()
|
||||
}
|
||||
limit, offset := parsePagination(c)
|
||||
if offset > 0 || limit > 0 {
|
||||
start := offset
|
||||
if start > len(sessions) {
|
||||
start = len(sessions)
|
||||
}
|
||||
end := len(sessions)
|
||||
if limit > 0 && start+limit < end {
|
||||
end = start + limit
|
||||
}
|
||||
sessions = sessions[start:end]
|
||||
}
|
||||
ok(c, gin.H{"sessions": sessions})
|
||||
}
|
||||
|
||||
func (s *Server) createSession(c *gin.Context) {
|
||||
session := s.store.Create()
|
||||
c.JSON(http.StatusCreated, session)
|
||||
}
|
||||
|
||||
func (s *Server) getSession(c *gin.Context) {
|
||||
session, found := s.store.Get(c.Param("id"))
|
||||
if !found {
|
||||
fail(c, http.StatusNotFound, "会话不存在")
|
||||
return
|
||||
}
|
||||
ok(c, gin.H{"session": session})
|
||||
}
|
||||
|
||||
// sessionMessages 分页返回会话消息(offset 从最新一条往前数),
|
||||
// 响应含 has_more 与 total 供前端"加载更早"。
|
||||
func (s *Server) sessionMessages(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
total, exists := s.store.TotalMessages(id)
|
||||
if !exists {
|
||||
fail(c, http.StatusNotFound, "会话不存在")
|
||||
return
|
||||
}
|
||||
limit, offset := parsePagination(c)
|
||||
if limit <= 0 || limit > 200 {
|
||||
limit = 50
|
||||
}
|
||||
messages, _, hasMore := s.store.Messages(id, limit, offset)
|
||||
ok(c, gin.H{
|
||||
"messages": messages,
|
||||
"has_more": hasMore,
|
||||
"total": total,
|
||||
})
|
||||
}
|
||||
|
||||
func (s *Server) deleteSession(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
if !s.store.Delete(id) {
|
||||
fail(c, http.StatusNotFound, "会话不存在")
|
||||
return
|
||||
}
|
||||
// 释放会话持有的运行时资源(会话锁与 live 注册),避免内存泄漏
|
||||
s.agent.ForgetSession(id)
|
||||
c.Status(http.StatusNoContent)
|
||||
}
|
||||
|
||||
// clearSession 清空会话历史消息(保留会话)。
|
||||
func (s *Server) clearSession(c *gin.Context) {
|
||||
if !s.store.Clear(c.Param("id")) {
|
||||
fail(c, http.StatusNotFound, "会话不存在")
|
||||
return
|
||||
}
|
||||
c.Status(http.StatusNoContent)
|
||||
}
|
||||
Reference in New Issue
Block a user