feat(trace): improve session workbench review

This commit is contained in:
zhuyongxin
2026-07-07 19:06:18 +08:00
parent 3b62a8940c
commit 0ee27eb523
9 changed files with 895 additions and 104 deletions
@@ -0,0 +1,19 @@
package com.superbiz.agent.controller;
import org.springframework.http.CacheControl;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.time.Duration;
@Controller
public class FaviconController {
@GetMapping("/favicon.ico")
public ResponseEntity<Void> favicon() {
return ResponseEntity.noContent()
.cacheControl(CacheControl.maxAge(Duration.ofDays(1)))
.build();
}
}
@@ -17,6 +17,11 @@ public interface AgentStepRepository extends JpaRepository<AgentStep, Long> {
*/
List<AgentStep> findBySessionIdOrderByStepIndex(String sessionId);
/**
* 根据会话ID查询所有步骤,调用方负责按具体视图语义排序。
*/
List<AgentStep> findBySessionId(String sessionId);
/**
* 统计某个会话的步骤数
*/
@@ -13,6 +13,7 @@ import com.superbiz.agent.repository.ToolInvocationRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -31,7 +32,7 @@ public class DiagnosisTraceService {
public DiagnosisTraceResponse getTrace(String sessionId) {
DiagnosisSession session = diagnosisSessionRepository.findBySessionId(sessionId)
.orElseThrow(() -> new SessionNotFoundException(sessionId));
List<AgentStep> steps = agentStepRepository.findBySessionIdOrderByStepIndex(sessionId);
List<AgentStep> steps = orderStepsForTrace(agentStepRepository.findBySessionId(sessionId));
List<ToolInvocation> toolInvocations = toolInvocationRepository.findBySessionIdOrderByIdAsc(sessionId);
return DiagnosisTraceResponse.builder()
@@ -42,6 +43,15 @@ public class DiagnosisTraceService {
.build();
}
private List<AgentStep> orderStepsForTrace(List<AgentStep> steps) {
return steps.stream()
.sorted(Comparator
.comparing(AgentStep::getCreatedAt, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(AgentStep::getId, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(AgentStep::getStepIndex, Comparator.nullsLast(Comparator.naturalOrder())))
.toList();
}
private DiagnosisTraceResponse.SessionTrace toSessionTrace(DiagnosisSession session) {
return DiagnosisTraceResponse.SessionTrace.builder()
.id(session.getId())