feat(flow): 链路图时间轴出口(W1)—— 所有轮次按时间正序

- 新增 GET /api/v1/admin/flow/timeline?sessionId=&limit=&before=:时间正序多轮,
  每轮 {turnId,round,startedAt,endedAt,lanes[]};limit 缺省 50/上限 200 + before 游标
- 数据源=落盘 flow_graphs + 内存最近一轮(同图 id 去重);保留期 168h 外的轮次不返回,
  但响应给 retentionHours/retentionEnabled/truncated ⇒ 前端如实标注,不悄悄少一块
- 老出口 GET /admin/flow/graph 零 diff;角色门 writeAuth(owner|admin)
- 4 个变异自检(游标 <= 重复、分组降级、去重缺失、truncated 静默)
This commit is contained in:
AskaEth committed 2026-10-06 15:59:09 +08:00
1 parent 78e99d9f4c
commit 1efe3a6a79
5 files changed
+1401

No files matched your search

+5
View File
@@ -204,6 +204,11 @@ func (s *Server) registerAdminRoutes(
// 只读、不审计;与同一张图的 WS 下行帧同档(只发 owner|admin,
// design/19 §3「flow 可视化仅 owner/admin」),因此不存在绕过帧门的旁路。
mux.Handle("GET /api/v1/admin/flow/graph", writeAuth(http.HandlerFunc(s.adminFlowGraph)))
// 多轮时间轴(切片 W1,**v0.80**;design/19 §7):把**所有轮次按时间正序串起来**
// (每轮含该轮每一路),`before` 游标向更早翻页,响应另带保留期口径供面板如实标注
// 「更早的轮次已过保留期」。与上面的最近一轮快照**同门同档**(writeAuth = owner|admin)、
// 同样只读不审计;老出口逐字不变,老客户端零影响。
mux.Handle("GET /api/v1/admin/flow/timeline", writeAuth(http.HandlerFunc(s.adminFlowTimeline)))
// 配置事实面(切片 P3,**v0.68**):记忆整理 7 键 + 安静时段两键的**进程生效值**
// 与声明默认值。只读、不审计、**不读 `.env`**、**不含任何凭据**;与消费它的面板页
// (记忆管理 / 后台思考)同门,故走 owner|admin 档而不是 viewer 监控档。