Commit 901b31c3 authored by ligaowei's avatar ligaowei

refactor(agent): 重构事件DTO结构,合并到agent.data包

将原web.dto包中的事件DTO类迁移到agent.data包,并删除冗余类
简化事件数据结构,移除不必要的继承层级
更新相关引用以适配新的包结构
parent cfa74117
package pangea.hiagent.web.dto;
package pangea.hiagent.agent.data;
import lombok.AllArgsConstructor;
import lombok.Data;
......
......@@ -7,7 +7,7 @@ import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
import pangea.hiagent.agent.service.UserSseService;
import pangea.hiagent.common.utils.UserUtils;
import pangea.hiagent.web.dto.WorkPanelEvent;
import pangea.hiagent.agent.data.WorkPanelEvent;
/**
* 简化的ReAct回调类
......
......@@ -4,13 +4,12 @@ import lombok.extern.slf4j.Slf4j;
import pangea.hiagent.agent.data.ErrorEventDataBuilder;
import pangea.hiagent.agent.data.MapPoolService;
import pangea.hiagent.agent.data.TokenEventDataBuilder;
import pangea.hiagent.web.dto.WorkPanelEvent;
import pangea.hiagent.agent.data.WorkPanelEvent;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Map;
......@@ -601,12 +600,11 @@ public class UserSseService {
Map<String, Object> data = mapPoolService.acquireMap();
// 设置基础属性
data.put("type", event.getType());
data.put("eventType", event.getType());
data.put("timestamp", event.getTimestamp());
data.put("title", event.getTitle());
data.put("content", event.getContent());
data.put("userId", event.getUserId());
// data.put("userId", event.getUserId());
if(event.getMetadata() != null) {
data.putAll(event.getMetadata());
......
......@@ -2,11 +2,9 @@ package pangea.hiagent.tool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import pangea.hiagent.agent.service.UserSseService;
import pangea.hiagent.common.utils.UserUtils;
import pangea.hiagent.web.dto.WorkPanelEvent;
import pangea.hiagent.agent.data.WorkPanelEvent;
import java.util.HashMap;
import java.util.Map;
......
package pangea.hiagent.web.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 嵌入事件数据传输对象
* 用于表示需要嵌入显示的事件(如网页预览等)
*/
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class EmbedEvent extends WorkPanelEvent {
private static final long serialVersionUID = 1L;
/**
* Embed事件信息 - 嵌入资源URL
*/
private String embedUrl;
/**
* Embed事件信息 - MIME类型
*/
private String embedType;
/**
* Embed事件信息 - 嵌入事件标题
*/
private String embedTitle;
/**
* Embed事件信息 - HTML内容
*/
private String embedHtmlContent;
}
\ No newline at end of file
package pangea.hiagent.web.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 日志事件数据传输对象
* 用于表示系统日志事件
*/
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class LogEvent extends WorkPanelEvent {
private static final long serialVersionUID = 1L;
/**
* 日志内容
*/
private String content;
/**
* 日志级别(info/warn/error/debug)
*/
private String logLevel;
}
\ No newline at end of file
package pangea.hiagent.web.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 结果事件数据传输对象
* 用于表示最终结果事件
*/
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class ResultEvent extends WorkPanelEvent {
private static final long serialVersionUID = 1L;
/**
* 结果内容
*/
private String content;
}
\ No newline at end of file
package pangea.hiagent.web.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 思考事件数据传输对象
* 用于表示Agent的思考过程事件
*/
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class ThoughtEvent extends WorkPanelEvent {
private static final long serialVersionUID = 1L;
/**
* 思考内容
*/
private String content;
/**
* 思考类型(分析、规划、执行等)
*/
private String thinkingType;
}
\ No newline at end of file
package pangea.hiagent.web.dto;
import java.util.Map;
import java.util.UUID;
/**
* 时间轴事件工厂类
* 专门负责根据事件类型创建相应的事件DTO对象,遵循工厂模式设计原则
*/
public class TimelineEventFactory {
/**
* 生成唯一事件ID
* @return 唯一事件ID
*/
private static String generateEventId() {
return "evt_" + UUID.randomUUID().toString().replace("-", "");
}
/**
* 根据事件类型创建相应的事件DTO对象
* 这是工厂类的唯一公共入口方法,确保所有事件对象创建都通过工厂完成
*
* @param eventType 事件类型
* @param eventData 事件数据
* @return 相应的事件DTO对象
*/
public static WorkPanelEvent createTimelineEvent(String eventType, Map<String, Object> eventData) {
if (eventType == null || eventData == null) {
return null;
}
// 确保事件数据中包含唯一ID
if (!eventData.containsKey("id")) {
eventData.put("id", generateEventId());
}
switch (eventType) {
case "thought":
return createThoughtEvent(eventData);
case "tool_call":
case "tool_result":
case "tool_error":
return createToolEvent(eventType, eventData);
case "embed":
return createEmbedEvent(eventData);
case "log":
return createLogEvent(eventData);
case "result":
return createResultEvent(eventData);
default:
// 对于其他类型的事件,创建基础事件对象
return createBaseEvent(eventType, eventData);
}
}
/**
* 创建思考事件
* 专门处理思考类型事件的创建
*/
private static ThoughtEvent createThoughtEvent(Map<String, Object> eventData) {
return ThoughtEvent.builder()
.type(getStringValue(eventData, "type"))
.title(getStringValue(eventData, "title"))
.timestamp(getLongValue(eventData, "timestamp"))
.metadata(getMapValue(eventData, "metadata"))
.content(getStringValue(eventData, "content"))
.thinkingType(getStringValue(eventData, "thinkingType"))
.build();
}
/**
* 创建工具事件
* 统一处理所有工具相关事件的创建(调用、结果、错误)
*/
private static ToolEvent createToolEvent(String eventType, Map<String, Object> eventData) {
return ToolEvent.builder()
.type(eventType)
.title(getStringValue(eventData, "title"))
.timestamp(getLongValue(eventData, "timestamp"))
.metadata(getMapValue(eventData, "metadata"))
.toolName(getStringValue(eventData, "toolName"))
.toolAction(getStringValue(eventData, "toolAction"))
.toolInput(getMapValue(eventData, "toolInput"))
.toolOutput(eventData.get("toolOutput"))
.toolStatus(getStringValue(eventData, "toolStatus"))
.executionTime(getLongValue(eventData, "executionTime"))
.errorMessage(getStringValue(eventData, "errorMessage"))
.errorCode(getStringValue(eventData, "errorCode"))
.build();
}
/**
* 创建嵌入事件
* 专门处理嵌入类型事件的创建
*/
private static EmbedEvent createEmbedEvent(Map<String, Object> eventData) {
return EmbedEvent.builder()
.type(getStringValue(eventData, "type"))
.title(getStringValue(eventData, "title"))
.timestamp(getLongValue(eventData, "timestamp"))
.metadata(getMapValue(eventData, "metadata"))
.embedUrl(getStringValue(eventData, "embedUrl"))
.embedType(getStringValue(eventData, "embedType"))
.embedTitle(getStringValue(eventData, "embedTitle"))
.embedHtmlContent(getStringValue(eventData, "embedHtmlContent"))
.build();
}
/**
* 创建日志事件
* 专门处理日志类型事件的创建
*/
private static LogEvent createLogEvent(Map<String, Object> eventData) {
return LogEvent.builder()
.type(getStringValue(eventData, "type"))
.title(getStringValue(eventData, "title"))
.timestamp(getLongValue(eventData, "timestamp"))
.metadata(getMapValue(eventData, "metadata"))
.content(getStringValue(eventData, "content"))
.logLevel(getStringValue(eventData, "logLevel"))
.build();
}
/**
* 创建结果事件
* 专门处理结果类型事件的创建
*/
private static ResultEvent createResultEvent(Map<String, Object> eventData) {
return ResultEvent.builder()
.type(getStringValue(eventData, "type"))
.title(getStringValue(eventData, "title"))
.timestamp(getLongValue(eventData, "timestamp"))
.metadata(getMapValue(eventData, "metadata"))
.content(getStringValue(eventData, "content"))
.build();
}
/**
* 创建基础事件
* 处理所有其他类型事件的创建
*/
private static WorkPanelEvent createBaseEvent(String eventType, Map<String, Object> eventData) {
return WorkPanelEvent.builder()
.type(eventType)
.title(getStringValue(eventData, "title"))
.timestamp(getLongValue(eventData, "timestamp"))
.metadata(getMapValue(eventData, "metadata"))
.build();
}
/**
* 从Map中获取字符串值
* 工具方法,用于安全地从Map中提取字符串值
*/
private static String getStringValue(Map<String, Object> map, String key) {
Object value = map.get(key);
return value != null ? value.toString() : null;
}
/**
* 从Map中获取长整型值
* 工具方法,用于安全地从Map中提取长整型值
*/
private static Long getLongValue(Map<String, Object> map, String key) {
Object value = map.get(key);
if (value instanceof Number) {
return ((Number) value).longValue();
} else if (value instanceof String) {
try {
return Long.parseLong((String) value);
} catch (NumberFormatException e) {
return null;
}
}
return null;
}
/**
* 从Map中获取Map值
* 工具方法,用于安全地从Map中提取嵌套Map值
*/
@SuppressWarnings("unchecked")
private static Map<String, Object> getMapValue(Map<String, Object> map, String key) {
Object value = map.get(key);
if (value instanceof Map) {
return (Map<String, Object>) value;
}
return null;
}
}
\ No newline at end of file
package pangea.hiagent.web.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Map;
/**
* 工具事件数据传输对象
* 用于表示工具调用相关的所有事件(调用、结果、错误)
*/
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class ToolEvent extends WorkPanelEvent {
private static final long serialVersionUID = 1L;
/**
* 工具名称
*/
private String toolName;
/**
* 工具执行的方法/action
*/
private String toolAction;
/**
* 工具输入参数
*/
private Map<String, Object> toolInput;
/**
* 工具输出结果
*/
private Object toolOutput;
/**
* 工具执行状态(pending/success/failure/error)
*/
private String toolStatus;
/**
* 执行耗时(毫秒)
*/
private Long executionTime;
/**
* 错误信息
*/
private String errorMessage;
/**
* 错误代码
*/
private String errorCode;
}
\ No newline at end of file
package pangea.hiagent.web.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* 工作面板状态数据传输对象
* 用于API返回工作面板的当前状态
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WorkPanelStatusDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 工作面板ID
*/
private String id;
/**
* 当前Agent ID
*/
private String agentId;
/**
* 当前Agent名称
*/
private String agentName;
/**
* 所有事件列表
*/
private List<WorkPanelEvent> events;
/**
* 思考过程事件列表
*/
private List<WorkPanelEvent> thinkingEvents;
/**
* 工具调用事件列表
*/
private List<WorkPanelEvent> toolCallEvents;
/**
* 执行日志事件列表
*/
private List<WorkPanelEvent> logEvents;
/**
* 总事件数量
*/
private Integer totalEvents;
/**
* 成功的工具调用数
*/
private Integer successfulToolCalls;
/**
* 失败的工具调用数
*/
private Integer failedToolCalls;
/**
* 更新时间戳
*/
private Long updateTimestamp;
/**
* 是否正在处理中
*/
private Boolean isProcessing;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment