fix(websocket): 修复 app.py 不可导入并新增真实链路验证

- 将 /api/sessions/{sid}/ws 端点移入 create_app(此前置于模块级导致整模块 import NameError,回归被验证拦截)
- register_loop + subscribe 调整至 accept 之前,缩小连接已开但未订阅期间的进度丢失窗口
- 新增 tests/test_verify_ws_real_flow.py:驱动真实 HTTP 聊天流程断言 WS 收到 agent 实际发射的 parse/impact 进度
- 同步 WebSocket 计划文档 Task 3 代码片段(标注端点必须位于 create_app 内)
- 全量 pytest 实测 583 passed / 99.03% 达标
This commit is contained in:
lhl
2026-08-29 14:36:12 +08:00
parent 9f5342e2be
commit 80daadcd31
11 changed files with 383 additions and 39 deletions
+3 -1
View File
@@ -315,9 +315,11 @@ def create_app(
@app.websocket("/api/sessions/{sid}/ws")
async def session_progress_ws(ws: WebSocket, sid: str):
await ws.accept()
# 先注册事件循环并订阅,再 accept,缩小「连接已开但服务端尚未订阅」期间
# 的事件丢失窗口(否则客户端连上瞬间触发的进度会被静默丢弃)
hub.register_loop(asyncio.get_running_loop())
q = hub.subscribe(sid)
await ws.accept()
try:
while True:
event = await q.get()