feat(harness): improve trace fallback and reasoning audit

This commit is contained in:
zhuyongxin
2026-07-23 17:52:01 +08:00
parent 8fbc443f76
commit e20249c5d9
38 changed files with 1355 additions and 75 deletions
@@ -0,0 +1,61 @@
package com.superbiz.agent.domain.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.PrePersist;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Entity
@Table(name = "agent_reasoning_audit", indexes = {
@Index(name = "idx_reasoning_run_step", columnList = "run_id, step_index"),
@Index(name = "idx_reasoning_session_created", columnList = "session_id, created_at")
})
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AgentReasoningAudit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "session_id", nullable = false, length = 64)
private String sessionId;
@Column(name = "run_id", nullable = false, length = 64)
private String runId;
@Column(name = "step_index", nullable = false)
private Integer stepIndex;
@Column(name = "agent_name", nullable = false, length = 64)
private String agentName;
@Column(name = "reasoning_available", nullable = false)
private Boolean reasoningAvailable;
@Column(name = "reasoning_content", columnDefinition = "LONGTEXT")
private String reasoningContent;
@Column(name = "content_bytes", nullable = false)
private Integer contentBytes;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
createdAt = LocalDateTime.now();
}
}
@@ -0,0 +1,73 @@
package com.superbiz.agent.domain.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.PrePersist;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import java.time.LocalDateTime;
@Entity
@Table(name = "diagnosis_trace_event", indexes = {
@Index(name = "idx_trace_event_run_sequence", columnList = "run_id, sequence_no, id"),
@Index(name = "idx_trace_event_session_created", columnList = "session_id, created_at, id"),
@Index(name = "idx_trace_event_phase", columnList = "phase, event_type")
})
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DiagnosisTraceEvent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "session_id", nullable = false, length = 64)
private String sessionId;
@Column(name = "run_id", nullable = false, length = 64)
private String runId;
@Column(name = "sequence_no", nullable = false)
private Integer sequenceNo;
@Column(name = "phase", nullable = false, length = 32)
private String phase;
@Column(name = "event_type", nullable = false, length = 48)
private String eventType;
@Column(name = "status", nullable = false, length = 32)
private String status;
@Column(name = "attempt_no")
private Integer attemptNo;
@Column(name = "duration_ms")
private Integer durationMs;
@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "details", nullable = false, columnDefinition = "JSON")
private String details;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
if (createdAt == null) {
createdAt = LocalDateTime.now();
}
}
}