feat(gateway): 链路图冷启动快照(v0.71)+ 面板来源说明条 —— 修「轮次结束后打开页面一片空白」
- 断点已证 = **时序层**:graph_update 只走实时帧从不重放、flowGraphs 不持久化、补拉通路此前根本不存在(EndRound 注释承诺过「刷新能重放」,代码里从来没有)
铁证:15:16:38 页面重载抹掉 15:09 那轮图,而下一轮心跳要等 ~15:24 ⇒ 打开后台思考页时桶必然为空
- 新增只读端点 GET /api/v1/admin/flow/graph?sessionId=(owner|admin;省略=主会话;graph 与 graph_update 帧的 data 逐字同形)
无图 ⇒ 200 + graph:null(不画假图);图源未接线 ⇒ 500 flow_unavailable(不伪装成「没有图」);不审计、不发布
- loop.FlowPublisher.LastGraph:只读快照(不发布/不改图/不动轮次计数),FlowGraph.Clone 深拷贝避免锁外编码撕裂
- 前端 useFlowSnapshot:只在「本会话还没有图」时补拉(避免每行一个请求);Flow/Agents/Backthink 三处接入 + 来源说明条(明确「最近一轮」与「多轮历史回放尚未实现」)
- 变异实测:LastGraph 恒 nil ⇒ 4 条测试红;白名单去掉 sess-backthink ⇒ 对应测试红(首次变异因未使用 import 编译失败 ⇒ 已作废重做)
- ⚠️ 诚实边界:每会话只回**最近一轮**(多轮回放属 F2);白名单外会话(IM 群聊/陌生人)永远没有图;**后端重启后未跑新轮次前端点如实返 null(图是内存资产,不落库)**—— 主人要的「本地数据」正是 F2 要补的
This commit is contained in:
1 parent
a3482ed06e
commit
1bf85a955b
23 files changed
+1427
-36
No files matched your search
@@ -9,6 +9,7 @@ import type {
|
||||
AuditRecord,
|
||||
AdminConfigFacts,
|
||||
BackthinkItem,
|
||||
FlowGraph,
|
||||
SystemBackupResp,
|
||||
SystemRestoreResp,
|
||||
SystemRevokeKeysResp,
|
||||
@@ -46,6 +47,32 @@ export function adminBackthink(limit?: number): Promise<BackthinkItem[]> {
|
||||
return request<BackthinkItem[]>(`/admin/backthink${limitQuery(limit)}`);
|
||||
}
|
||||
|
||||
/** 最近一轮链路图快照的后端响应(契约 v0.71 §4.11(a))。`graph` **恒在**
|
||||
* (`null` 而不是缺席):`null` = 该会话**确实**还没有图,客户端必须据此
|
||||
* 渲染空态,绝不允许补画任何节点或假图。 */
|
||||
export interface AdminFlowGraphResponse {
|
||||
sessionId: string;
|
||||
graph: FlowGraph | null;
|
||||
}
|
||||
|
||||
/** GET /api/v1/admin/flow/graph?sessionId= — **最近一轮**链路图快照(契约
|
||||
* v0.71 §4.11,只读、不审计,owner/admin 档)。
|
||||
*
|
||||
* 为什么需要它:`graph_update` 是**纯实时**帧、从不重放,且前端图桶
|
||||
* (`flowGraphs`)**不持久化** ⇒ 「轮次结束后才打开页面」或「刷新过页面」
|
||||
* 此前只能看到空态。打开页面时拉一次即可补上最近一轮。
|
||||
*
|
||||
* ⚠️ 它只回**每会话最近一轮**:后台思考行上点开的图可能不是该行那一轮
|
||||
* (多轮历史回放仍未实现,`design/19 §4` P3)⇒ 面板必须在图上说明。
|
||||
*
|
||||
* `sessionId` 省略时后端默认主会话 `web`。 */
|
||||
export function adminFlowGraph(sessionId: string): Promise<AdminFlowGraphResponse> {
|
||||
const qs = new URLSearchParams();
|
||||
if (sessionId) qs.set("sessionId", sessionId);
|
||||
const q = qs.toString();
|
||||
return request<AdminFlowGraphResponse>(`/admin/flow/graph${q ? `?${q}` : ""}`);
|
||||
}
|
||||
|
||||
/** GET /api/v1/admin/config-facts — **只读**配置事实面(契约 v0.68 §4.10(a)):
|
||||
* 记忆整理 7 键 + 安静时段两键的**进程生效值** + 声明默认值,外加安静时段窗口的
|
||||
* 解释(跨午夜 / 已关闭)。owner/admin 档;**不含任何凭据值**(后端有哨兵测试钉死),
|
||||
|
||||
Reference in new issue
Block a user