Skip to content
Discussion options

You must be logged in to vote

对照 0.1.2-rc.1 的宿主源码把你的根因链走了一遍——你的分析成立,而且能在代码里精确对上:

  1. dsh-sessioninterruptedTurnClosers(rc.1 编译产物)里,合成事件的第一条 seq 就是 let seq = last.seq + 1——以存储态最后一条事件为基线,和你说的一致;
  2. persistence 协调器把这些 closer 用 adoptSessionEvent 构造后,经 backend.commitRepair 直写后端commitRepair(inspection, tornMarker, closers)),全程不碰活跃 Session 的内存 seq 游标;
  3. 于是 pwsh 真正完成、真结果持久化时,活跃会话从自己那个没被推进过的游标分 seq——两边共用同一个过期基线,51695–51698 各出现两次。加载端的严格单调校验没有自愈,直接判损。

你的修复方案我补一个边界提醒(你的案例没踩到,但别人照抄会踩):interruptedTurnClosers 是给每个未决 tool-call 各生成一条占位 tool/result,再补 step/end + turn/end。你的日志里未决调用只有一个,所以删那 4 行是干净的;但如果哪次是多个并行未决调用的中断,只删了部分占位结果会留下一个"开着的 turn"——下次加载会被另一条守卫拦住(cannot load session ... while its live turn is open)。所以删完建议用你的 04 脚本复扫两件事:seq 全程连续、无残…

Replies: 2 comments

Comment options

You must be logged in to vote
0 replies
Answer selected by trump253
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants