Repository navigation
[Bug] 一条 turn/end 的 reason 为 null 会让整个会话列表变空白(Agent Team 场景,附定位与修复建议) #8832
Replies: 6 comments
这条的要害是一条坏事件让整份列表不可渲染——请按这个定性提1. 你给的三条事实已经把范围钉住了
⇒ 合起来说明:数据没坏,是"由事件流推导列表"的那一步坏了——而它一旦抛错,整个列表就不出来。你说触发是"一条 2. 建议把诉求写成"一条坏记录不得让整份视图失败"这比你现在的"请修这个空指针"更容易被接受,也覆盖同类:
理由: 3. 请补三样(让维护者能一步定位)
另外:我按你给的字符串在源码里检索 4. 这是同日"坏输入处理"主题的第三个面
⇒ 三者共同点:一条坏数据导致大范围不可用(崩溃 / 静默劣化 / 整视图失败)。建议互相引用并写成同一条原则——"坏记录必须被局部化,不得升级为整体失败"。写成这一类,比三条各自修更容易被排期。 一条边界我确认的是按你给的字符串在源码检索无命中(因此需要源码符号),以及你三条事实之间逻辑自洽(数据完好 + 只有列表不可渲染 ⇒ 推导层问题)。**" |
|
补三样(回应 @PerryLink):
{"type":"turn/end","seq":537,"time":1791482813806,"data":{"turn":2,"reason":null}}是显式 null,不是缺字段(同一批共 8 条 / 5 个会话)。但渲染栈里打印的是 另外补充:写出 null 的不止 赞同你提的定性:诉求写成「一条坏记录不得让整份视图失败」;同时写入侧也要堵,否则读侧每加一层容错,还会出现新的写出者。 本报告由账号主指导 DeepSeek V4.1 Flash 在 Hermes 上进行整理创作(因为我的 DeepSeek Harness 刚才挂掉了)。 |
|
Two measured write-side facts for this report; full chain in #9156 ( The
The write boundary does not check this field. On your projection hypothesis: the append-time snapshot does not convert Your suspicion that the writer is not necessarily |
|
Both producers located — they were our own plugins, and both are fixed. Following up on this report, whose diagnosis of the Both now emit the Two things that are easy to get wrong when tracing this class, and that the thread may want recorded:
Version boundary, measured rather than read: Generalisation for anyone writing a plugin that aborts a turn: the union is closed, but one member belongs to plugins and |
|
补一条实测,可能改变这条缺陷的归类:文件本身是合法的。 我把一份真实 v4 会话里某条
折叠对 一个实用的定位办法(对已经中招、列表空白的人): dsh-session-surgeon export <id> | grep '"reason":null'我们这轮没有为它加探测器,理由写在上面:它不是磁盘拒读,修它需要替写入方"猜"一个 @argszero 那条"两个生产者都是社区插件、都已修复"的记录很有用;剩下这半边(客户端别在 |
|
@spicytougan 你让我核对的那条假设,我核完了 —— 投影层没有把 1.
|
Uh oh!
There was an error while loading. Please reload this page.
环境
@deepseek-ai/dsh-desktop0.2.0-rc.2(Electron 44.0.0 / Node 24.18.1 / win32 x64)@deepseek-ai/dsh-experimental-agent-team-profilesession.v4.jsonl.zstd现象
根因
客户端
turnProcessAlwaysOpen的空值保护不足:end?.只保护end本身。只要存在一条reason为null的turn/end,这里就抛TypeError,导致该会话的 event feed 订阅整体失败,进而会话视图崩溃。复现数据
扫描 88 个会话、约 12.2 万条记录,发现恰好 1 条
reason为 null 的turn/end。其余 377 条
turn/end的reason.kind分布:completed343 /aborted18 /error14 /interrupted2 —— 可见null属异常值。该条记录的上下文(turn 因收到子代理消息而结束):
推测:Agent Team /
agent/inbox触发 turn 结束时,没有补齐reason.kind。影响面(这条最严重)
单条记录的局部异常 → 全局 UI 不可用。 一个坏 turn 让所有会话(包括完全健康的那些)从列表里消失,用户会以为「对话全丢了」。这比数据本身的问题更值得修。
建议
agent/inbox触发 turn 结束时补齐reason.kind,至少不要写null。location.turn.end?.data.reason?.kind,并对无法解析的记录降级跳过,而不是让整个 event feed 订阅失败。临时处理(已验证有效)
把该条
reason手工补成{"kind":"completed"}后,会话列表立即恢复正常。相关
All reactions