Files
ai-agent/workflow/controller/session/session_controller.go
T
19904408334 cef837a35c feat: 支持工作流断点续跑并拆分错误信息存储
- 新增同会话+同工作流最近执行失败且参数一致时断点续跑逻辑
- exec_workflow/exec_chat 新增 error 字段存储原始错误,error_message 仅存友好提示
- 新增 UpdateExecChatReq 与 exec_chat_dao Update 方法
- 新增 GetLatestBySessionAndFlow 查询最近执行记录
- 修正 ListDates 分组与排序 SQL 表达式
- 新增 pipeline 配置结构,删除旧设计文档
2026-08-21 09:54:06 +08:00

62 lines
2.1 KiB
Go

package session
import (
flowDto "ai-agent/workflow/model/dto/flow"
sessionDto "ai-agent/workflow/model/dto/session"
"ai-agent/workflow/service/flow"
sessionService "ai-agent/workflow/service/session"
"context"
"gitea.redpowerfuture.com/red-future/common/beans"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/glog"
)
type session struct{}
var Session = new(session)
func (c *session) WsExecute(ctx context.Context, req *sessionDto.WebSocketConnectReq) (res *beans.ResponseEmpty, err error) {
r := g.RequestFromCtx(ctx)
// 首次连接仅升级 WebSocket,不区分普通对话/工作流;由后续消息 type 路由到对应处理器
err = flow.WsConnect(ctx, r, req)
if err != nil {
glog.Errorf(ctx, "ws connect failed: %v", err)
return nil, err
}
// 标记响应缓冲区,使 MiddlewareHandlerResponse 跳过
r.Response.Writeln("")
return
}
func (c *session) Get(ctx context.Context, req *sessionDto.GetSessionInfoReq) (res *sessionDto.GetSessionInfoRes, err error) {
return sessionService.SessionService.Get(ctx, req)
}
func (c *session) List(ctx context.Context, req *sessionDto.ListSessionReq) (res *sessionDto.ListSessionRes, err error) {
return sessionService.SessionService.List(ctx, req)
}
func (c *session) Delete(ctx context.Context, req *sessionDto.DeleteSessionReq) (res *beans.ResponseEmpty, err error) {
if err = sessionService.SessionService.Delete(ctx, req); err != nil {
return
}
return &beans.ResponseEmpty{}, nil
}
func (c *session) DeleteRecord(ctx context.Context, req *sessionDto.DeleteSessionRecordReq) (res *beans.ResponseEmpty, err error) {
if err = sessionService.SessionService.DeleteRecord(ctx, req); err != nil {
return
}
return &beans.ResponseEmpty{}, nil
}
func (c *session) ResultList(ctx context.Context, req *sessionDto.ListWorkflowResultReq) (res *flowDto.ListFlowExecutionTreeRes, err error) {
return sessionService.SessionService.ResultList(ctx, req)
}
func (c *session) ResultDelete(ctx context.Context, req *sessionDto.DeleteWorkflowResultReq) (res *beans.ResponseEmpty, err error) {
err = sessionService.SessionService.ResultDelete(ctx, req)
return
}