From c569438d5f8dcd8b649a435b411014ac9134bfe5 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 24 Jun 2026 09:08:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E9=A1=B6=E6=A0=8F=20token=20?= =?UTF-8?q?=E8=AE=A1=E9=87=8F=E6=A0=8F=E5=9B=9E=E5=A4=8D=E5=90=8E=E4=B8=8D?= =?UTF-8?q?=E5=88=B7=E6=96=B0=20+=20bump=200.22.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提问→助手答完后,对话顶栏「总 token·缓存命中·花费」停在发问前旧值, 要切走再切回才更新。根因:计量栏读 state.taskMeta,而它只在 selectTask 里重拉;SSE 收尾的 fetchSse finally 只刷列表+消息,从未重拉 meta。 修:finally 里当收尾的是当前可见 task 时补一次 GET /v1/tasks/{id} → 重置 state.taskMeta → renderChatMeta(),失败 try/catch 吞掉不打断收尾。 Co-Authored-By: Claude Opus 4.8 (1M context) --- PROGRESS.md | 6 ++++++ core/__init__.py | 2 +- web/static/js/chat.js | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/PROGRESS.md b/PROGRESS.md index 23ef918..c5713eb 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -21,6 +21,12 @@ ## 已完成关键能力 +### 2026-06-24 / 修复顶栏 token 计量栏回复后不刷新(bump 0.22.1) + +- 现象:提问→助手答完后,对话顶栏的「总 token · 缓存命中 · 花费」计量栏停在发问前旧值,要切到别的 task 再切回才更新。 +- 根因:计量栏由 `renderChatMeta()` 读 `state.taskMeta` 渲染,而 `state.taskMeta` 只在 `selectTask` 里 `GET /v1/tasks/{id}` 时刷新。SSE 流结束后 `fetchSse` 的 finally 只 `loadTaskList()`(左栏列表)+ `loadMessages()`,从未重拉 meta 也没调 `renderChatMeta`——SSE 期间用量只累计进 hint,没落 taskMeta。 +- 修:`fetchSse` finally 块里,当收尾的是当前可见 task 时补一次 `GET /v1/tasks/{id}` → 重置 `state.taskMeta` → `renderChatMeta()`;失败 try/catch 吞掉不打断收尾。`web/static/js/chat.js`。 + ### 2026-06-24 / 微信接入第一期:ClawBot 个人微信(后端完成,bump 0.22.0) - 需求:把 zcbot 送进用户**个人微信**——能对话、能推简报/结果。调研三条路:wechaty/hook(违规高封号,排除)、企业微信自建应用(官方但要管理员+仅企业成员)、**微信 ClawBot**(腾讯 2026-03 官方个人号 Bot API,iLink 协议,零封号,后端接谁都行)。选 ClawBot 先行。详 DESIGN §8.7。 diff --git a/core/__init__.py b/core/__init__.py index 8e3fcca..d73cbce 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -1,3 +1,3 @@ # zcbot 版本号单一事实源:web/app.py 的 FastAPI version、/healthz 返回、前端展示都引这里。 # 改版本只动这一行。 -__version__ = "0.22.0" +__version__ = "0.22.1" diff --git a/web/static/js/chat.js b/web/static/js/chat.js index 188e468..8a1d337 100644 --- a/web/static/js/chat.js +++ b/web/static/js/chat.js @@ -1241,6 +1241,12 @@ async function fetchSse(url, run) { // 刷新 task meta + messages(拿真实持久化的);失败路径已退出,这里不再跑 loadTaskList(); if (state.taskId === ctx.taskId) { + // 重新拉 meta:SSE 期间 token/缓存命中/花费只累计进 hint,未落 state.taskMeta, + // 顶栏计量栏会停在发问前的旧值,直到切走再切回才更新 — 这里补一次让它即时刷新。 + try { + const meta = await api("GET", "/v1/tasks/" + ctx.taskId); + if (state.taskId === ctx.taskId) { state.taskMeta = meta; renderChatMeta(); } + } catch (e) { /* meta 刷新失败不致命:保留旧值,不打断收尾 */ } await loadMessages(); refreshOutline(); // 本轮新增 user 提问 → 目录补一条 loadFiles(); // 回复结束后右侧文件面板同步刷新(可能有新写入 / 修改的产物)