Replies: 4 comments
|
这不是 seq gap,是 Alpha 把 dsh-session-surgeon 不会把区间展开成旧格式(那是改语义 / 伪迁移)。inspect 若报 能做的:
根因是磁盘格式 bump 没有迁移路径(#4910),得官方给明确的 version refuse,而不是误报 corrupt。 |
|
源码侧确认(本地 0.1.2-alpha.1 = cd5ef81;#3048 已在内,alpha.2 只是延续),并补一个你们都没点到的关键事实——这不是"预期中的格式破坏",而是版本守卫被静默绕过。 机制确认(与 OP 描述一致):
关键事实:格式版本守卫存在,但 #3048 没有 bump 版本号,导致守卫失效:
放大因素(这才是用户能踩到的原因):npm dist-tag 冻结。实测 修复 seam:
另: |
|
你现在的处境概括起来就是:升级一时爽,老数据读不了。这类"新版本写、旧版本读"的格式失配,官方修复要等下一版,等的过程里你既不能干净回退、历史又全瞎——最难受的位置。 这种事的正确姿势是让它在升级前就被拦住:dsh-backup 会在 dsh 版本变化时自动打一份 dsh plugin --profile web add @xiaoyuyu6420/dsh-backup # 装完重启 dsh web
/backup # 手动备份
/backup restore latest --dry-run # 升级翻车后先预览再还原你这批会话已经被 alpha 写过,现在能做的两步:① 先别动这批日志,等官方出修复或按楼上工具迁移;② 从现在起 |
|
同意 @argszero:这是格式 bump 没改 surgeon 仍然不会把 备份插件能挡升级翻车,修不了已经用 Alpha 写过、又被 rc.2 拒读的那份文件——那份请继续用 alpha 打开,或等官方 bump version / 读端判别。 |
Uh oh!
There was an error while loading. Please reload this page.
一句话说明错误结果:
Alpha 版本(
@deepseek-ai/dsh-session@0.1.2-alpha.2)把sourceEventSeqs写成新的区间格式(如[[1331,1424]]),而当前仍在运行的 rc.2(0.1.1-rc.2)读取端不识别该格式,导致升级后会话历史加载直接报SessionPersistenceCorruptionError(history unavailable)。复现、预期与验收
复现步骤
@deepseek-ai/dsh@0.1.2-alpha.2)运行并产生一段对话(生成多个连续 chunk,例如一次输出 94+ 个assistant/chunk)。0.1.1-rc.2)版本(如npm i -g @deepseek-ai/dsh装的latest标签实际是 rc.2)加载/打开该会话历史。history unavailable for session ...。实际结果
读取端校验抛错(可复现于
dsh-session的assertProvenance):底层原因:Alpha 的持久化写入端
dsh-session-persistence-jsonl在encodeProvenanceForStorage中用encodeSeqRanges把连续的 chunk 序号压缩成[start, end]区间对([1331,1324,...]→[[1331,1424]]);读取端 rc.2 的校验只接受扁平整数,遇到区间数组[1331,1424](非整数)即判定损坏。而 Alpha 自身的读取端expandProvenanceFromStorage→decodeSeqRanges是能展开回去的,说明这是写盘端与读盘端格式不匹配。预期结果
corrupt session/invalid seed event;或者环境
dsh:0.1.1-rc.2(npmlatest/next标签)0.1.2-alpha.2(@alpha标签)dsh web(Web GUI,http://127.0.0.1:3080)验收条件
SessionPersistenceCorruptionError(要么能正确展开区间读取,要么给出明确的“版本升级提示”)。Session.create能对既有、含区间sourceEventSeqs的日志正常加载(可参考:将assertProvenance前的读取路径接入decodeSeqRanges)。备注
[[start,end]]展开回扁平[start..end]数组,从而在 rc.2 与 Alpha 两种读取端下都能加载。All reactions