[Bug] 重启后子代理列表全部显示"不可用":v0 日志的 header.system 无法迁移到 v3,且错误被降级为可重试的 unavailable
#6455
Replies: 2 comments
复核结论:迁移器其实会转换
|
|
核实结论:缺陷2(错误分类)成立且比原帖更深;缺陷1不成立——转换器恰好会做原帖建议的自动转换;缺的是那份日志被拒的真实错误.
|
Uh oh!
There was an error while loading. Please reload this page.
环境
0.1.5-rc.2(在0.1.5-rc.1上复现,升级后仍存在)web@deepseek-ai/dsh-subagent、@deepseek-ai/dsh-session-query、@deepseek-ai/dsh-session-format-v2-to-v3症状
Web GUI「任务管理」面板中,某父会话派生的全部子代理不再显示标题/模式/活动状态,只显示各自 UUID + 灰色「不可用」。
Analyze docs and experiments等标题最小复现
delegationDepth: 2)。期望:显示子代理标题/模式/状态。
实际:UUID + 「不可用」。
根因
链路如下:
① 冷读取
dsh-subagent/lib/index.js的resolveColdIdentity()(2240-2248 行):② 冷读触发 v3 迁移
observeSession→SessionObservationReader.read()→ 冷读 → 迁移到当前格式。③ 迁移器直接拒绝
dsh-session-format-v2-to-v3/lib/index.js:236:④ 错误被错误分类
SessionFormatUnsupportedMigrationError既不是SESSION_QUERY_CORRUPT_SESSION也不是SESSION_QUERY_SOURCE_CONFLICT,于是被归为unavailable(语义是"暂时失败、下次重试"),而不是"此日志格式需要升级 harness"。因为每次重列都必然失败,该占位文案永久留存。
证据
涉及的子代理日志均为
version: 0,其中各有一条违规的request/header:用
0.1.5-rc.2自带的格式目录验证:同一批数据经
createRestore(...)与decodeEvent(...)零失败 ——说明日志可读、内容完整,失败点纯粹是 v3 迁移策略拒绝了已废弃字段。
为什么只有子代理受影响
父会话重启后仍是活会话(
sessions.get(id) !== undefined),走projections.snapshot(live)快路径,不读盘、不迁移。子代理是冷会话,必须回读磁盘,于是撞上迁移拒绝。两个可独立修复的缺陷
缺陷 1:迁移器拒绝而非转换
header.system已被system/message取代,而迁移器自己就认识这个类型 ——dsh-session-format-v2-to-v3/lib/index.js第 9 行的SURFACE_TYPES明确列有"system/message"。因此理论上可自动转换(把
header.system抽成一条system/message事件),不必让整份日志不可用。若确实不做自动转换,也应明确指引"请升级 harness",而不是让用户看到一个像是临时故障的状态。值得注意的是:
dsh-session-persistence-jsonl/lib/index.js:960(refuseForeignFormatVersion的注释)已经声明了正确意图 ——但该路径只覆盖"外来格式版本",没有覆盖 v0 → v3 的
header.system这一情形,也没有贯彻到 subagent 的 catalog 路径。缺陷 2:错误分类吞掉了不可重试的失败
dsh-subagent/lib/index.js:2245-2248只把两种错误码映射为corrupt,其余一律unavailable,导致"格式不受支持、重试无用"被错误地划入"可重试"。已验证:
dsh-subagent全文中reason:只出现"corrupt"(2160、2255、2261 行)与"unavailable"(2247 行),从不产生"unsupported"。因此浏览器端已有的
subagentDiagUnsupported(「子代理记录版本不受支持」)在该路径上永远不可达 —— 而它恰恰是本 bug 最该显示的文案。建议修复
dsh-session-format-v2-to-v3:把header.system自动转换为system/message(推荐),或至少将该失败标记为不可重试。dsh-subagent:在resolveColdIdentity的错误分类中识别SessionFormatUnsupportedMigrationError,映射为unsupported,使 UI 显示「子代理记录版本不受支持」。subagents.list的载荷保留诊断原因字符串,便于用户与开发者定位。影响
附:如何自行验证(无需 GUI)
All reactions