Files
2026Technology-Competition/docs/superpowers/plans/ws-task-4-report.md
T
lhl 80daadcd31 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% 达标
2026-08-29 14:36:12 +08:00

30 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Task 4 报告:前端 chat_ws.js 实时渲染进度/错误
- **状态**:完成
- **commit 短哈希**`14a7dc3`
- **分支**`feat/websocket-progress`
## 改动清单
1. 新增 `src/genesis/server/static/chat_ws.js`(UMD,带异常保护,照抄任务规格)。
2. `src/genesis/server/app.py``chat_state_js` 路由之后新增 `GET /chat_ws.js` 路由(仿 `/chat_state.js`,使用已有的 `FileResponse``_error``static_dir`)。
3. `src/genesis/server/static/chat.html` 集成:
-`<script src="/chat_state.js">` 之后紧邻加 `<script src="/chat_ws.js"></script>`
- 会话状态变量处声明 `let progressWs = null;`
- `send()` 中:首条消息建会话成功后、以及已有 `sid` 的重发路径,均在确认 `sid` 非 null 后打开 WS(先关闭旧连接)。
- `loadSession(id)` 成功取得会话(`sid = id` 之后)打开对应 sid 的 WS(先关闭旧连接)。
- `newSession()` 开头关闭并置空旧连接。
- `connectProgressWs` 返回 `null` 时由 `if (progressWs)` 守卫,不抛错;持久化 + 重载兜底仍可见进度。
4. 新增 `tests/test_chat_ws.js`Node 单测,照抄任务规格)。
## 疑虑与确认
- **植入点准确性**
- `send()`WS 打开放在 `if (!sid) { ...新建会话... }` 块结束之后、`inputEl.value=''` 之前,确保首条与续发都覆盖。✅
- `loadSession()`:放在 `sid = id; ...; badge.textContent=...` 之后、`const msgs = await ...` 之前,即会话已落到 `sid` 后。✅
- `newSession()`:放在函数最开头 `sid = null` 之前,确保切换/新建时关闭旧连接。✅
- **addMsg 是否支持 progress/error 样式**:已支持。chat.html 中 `.msg.progress .bubble`(220-222 行,蓝色虚线灰条)与 `.msg.error .bubble`223 行,红条)样式已存在;`loadSession` 历史渲染也已用 `addMsg(role, ...)` 复用同样类名(790-792 行)。新增 WS 实时消息直接复用 `addMsg(role, text)`,样式一致,**未新增任何样式**。✅
- 后端 `/api/sessions/{sid}/ws` WebSocket 端点已由本分支既有代码实现(app.py 约 309 行),本任务未改动其 Python 逻辑。
## 测试输出
- Node 单测:`node --test tests/test_chat_ws.js``tests 2 ... pass 2 ... fail 0`2 passed)。
- 后端冒烟:`python -m pytest tests/test_server_chat_api.py -q -o addopts=""``6 passed, 1 warning`(既有测试未改动,仍全绿)。