Repository navigation
feat(ui): 对话动作行常驻、用户消息时间戳、回复速度展示 - #40
Conversation
|
审过了,实现主体没问题(时间戳复用 每行一个 1s 轮询 一个兼容性小点 其余( |
|
发现 原因:协作者从 fork 提 PR 时, 供参考(任选其一):把 if 收紧为 |
上游 review(ZCodium-project#40)指出两个问题: 1. 每个动作行实例独立轮询 useSessionDebug(1s 节拍),20 轮会话 = 20 个并发轮询器,远控/SSH 场景每秒 N 次跨 host readSessionDebug 往返。改为每个 (workspace, session) 一条共享循环 + useSyncExternalStore 多订阅者:最后一个订阅者退订即停循环, 订阅清零前按完成节拍续期不重叠请求。hook 签名与返回形状不变, 调试面板与动作行两个调用点零改动。 2. sessionDebugRoundSchema 新增的 prefillDurationMs / prefillTokensPerSecond 为必填 nullable,旧版 server 的快照缺字段 时 strict 校验整轮失败。改 .nullable().optional() 让新旧混布时 降级为不显示速度;消费端本就 null/undefined 双判,无需改动。 测试边界:packages/ui 无 hook 测试基建(全包 2 个测试文件), 本次为内部轮询拓扑重构、外部接口不变,验证走 typecheck + lint。
|
两点都已修复(ba38202): 1. 每行一个轮询 → 会话级共享。 2. schema 兼容。 同样的修复也落在了我们自己的产品线上。 |
|
跟进检查:在 #43(v3.15.1 再基线)合并后的最新 main 上做了本地合并验证与逐项复核,结论如下——当前 head 不建议合并。 阻塞:速度展示没有渲染出口(功能不可见)
与最新 main 的合并状态(本地实测)
建议
在以上问题解决前暂不合并。 |
用户气泡与助手回复的复制/编辑/反馈/fork 动作行原先 hover 才显现, 远控、触屏与大屏场景都出现过入口不可发现的问题(远控分支此前已 单独修过一次)。统一改为常驻: - 用户气泡:MessageActions 去掉 group-hover/user-row 门控,并补上 消息时间(formatMessageTimeLabel(row.createdAt),与 assistant 动作栏共用相对日判定与 text-ui-sm subtle 样式) - assistant 轮尾与 TurnGroup 轮尾动作行、hook 动作行:同样去掉 group-hover/assistant-* 门控 DESIGN.md 的 text-ui 约束不受影响(时间标签沿用 text-ui-sm)。
session-debug 轮次本来就有 inputTokens 与 timeToFirstContentMs(TTFT≈ prefill 段时长),但只算了 decode TPS。补齐 prefill 两个维度并接到 assistant 动作栏: - shared:round schema 增加 prefillDurationMs / prefillTokensPerSecond (inputTokens / TTFT 秒;TTFT=0 或未知时 null,不伪造速度;inputTokens 含缓存读取,缓存命中时口径为「有效 prefill 吞吐」) - bootstrap:round 生产端输出两字段 - UI:ConversationAssistantTextActions 轮询 session-debug(1s 节拍, DeveloperToolsPane 同款钩子),按「row 创建后首个完成的模型轮」关联 产出轮,动作栏时间旁显示 ↑prefill ↓decode tok/s(text-ui-sm subtle) 配合动作行常驻(上一提交):速度与时间对当前回复始终可见。
上游 review(ZCodium-project#40)指出两个问题: 1. 每个动作行实例独立轮询 useSessionDebug(1s 节拍),20 轮会话 = 20 个并发轮询器,远控/SSH 场景每秒 N 次跨 host readSessionDebug 往返。改为每个 (workspace, session) 一条共享循环 + useSyncExternalStore 多订阅者:最后一个订阅者退订即停循环, 订阅清零前按完成节拍续期不重叠请求。hook 签名与返回形状不变, 调试面板与动作行两个调用点零改动。 2. sessionDebugRoundSchema 新增的 prefillDurationMs / prefillTokensPerSecond 为必填 nullable,旧版 server 的快照缺字段 时 strict 校验整轮失败。改 .nullable().optional() 让新旧混布时 降级为不显示速度;消费端本就 null/undefined 双判,无需改动。 测试边界:packages/ui 无 hook 测试基建(全包 2 个测试文件), 本次为内部轮询拓扑重构、外部接口不变,验证走 typecheck + lint。
- useSessionDebug 改用 useOptionalServices:服务缺席(宿主未就绪/无 Provider 测试环境)时速度展示降级为不轮询,而非渲染崩溃 - useSyncExternalStore 补第三参 server snapshot,对齐上游调用惯例 - TurnGroup 两个断言旧 hover 门控行为的用例更新为「动作行常驻」语义
ba38202 to
e7b3881
Compare
review 指出的两个同源缺陷(v1.0.7 首创时即存在)导致速度从未显示: ① decodeLabel/prefillLabel 计算后无任何 JSX 引用——在时间标签旁补 ↑/↓ tok/s 渲染节点; ② 两个调用点(轮内/轮尾动作栏)均未传 workspacePath/workspaceIdentity, useSessionDebug 启动守卫恒 false、轮询不启动——补传 props。 label 计算与启动守卫抽为纯函数 formatSpeedLabels/shouldStartSessionDebugPolling (packages/ui/src/v4/speedLabels.ts,参数取结构化子集便于逻辑测试构造字面量), 配 6 例 node 语义测试(null 语义 ×3 + 启动守卫 ×3,vitest 口径)。 移植自 yazcode main 22a15d1(docs/handoff-pr40-port.md);TTFT=0 只显示 ↓、 历史消息不显示速度均为预期行为。
|
建议 1 的速度展示双缺陷已修(2aaeddb1),移植自 yazcode 侧的同源修复(v1.0.7 首创时即存在,与 review 指出的一致):
预期行为边界:TTFT=0(全缓存直出)只显示 ↓;历史/旧会话消息不显示速度(关联语义是「row 创建之后首个完成的模型轮」)。 建议 2/3(按「时间戳 + 共享轮询」拆分、动作行常驻与 main 现设计的取舍)想先听你的意见再动,当前分支保持五项完整(当前对 main 无冲突)。 |
…Codium-project#58 输入与 pptx/pdf 登记合并基线)
…Codium-project#58 输入与 pptx/pdf 登记合并基线)
Closes #39
改动(5 文件,+56/−19)
实现说明
验证
自查