Replies: 9 comments
|
English summary: source-verified at rc.7 (99f6f02) — the root-cause analysis is exactly right, with one half-good missing fact: the READ side already honors 源码验证(rc.7
但缺了半个关键事实(好消息)——读侧已经支持 ignorable 标记: envelope 契约在 非 surface 类型的 opts 是空元组——任何插件都无法在 append 时带上 家族谱系:这是第 5 位独立插件作者撞上同一缺口:
known-event-types.ts 里 "deferred until such a consumer exists" 的前提已被 5 个消费者证伪——这个接口缺口现在有确凿的社区需求。 三个方案逐一评估:
两个补充建议(与家族修复蓝图一致):
修复形态(一 PR):strict-typed |
|
已按方案 2(ignorable envelope 写侧暴露)完成实现,源码级验证 + 测试全绿 ✅ 实现内容(与讨论中 argszero 给出的修复形态一致)代码位置(基于 rc.7 = 99f6f02):
验证结果
变更分支
|
|
独立核验 Mchsd 的实现(拉分支 6430083 + 对照当前 main)——实现实质成立,一处基底标注需要修正。 1. Diff 审阅通过(相对分支真实基底)。 2. 独立测试(main 99f6f02 + 补丁,本机 Windows / Node 24 / pnpm 11): 3. 一个小建议(非阻塞): 结论:与 argszero 开的"修复形态(一 PR)"完全吻合(strict-typed ignorable opts + 回归测试 + warn-at-append + 文案修正),cherry-pick 就绪。建议 Mchsd rebase 到当前 main 后就可以作为官方 PR 通道打开时的首选合并对象。👍 |
|
顺手把实现 rebase 到了当前 main(99f6f02),推了一个"开箱即用"的版本: https://github.com/zoahdev/deepseek-harness/tree/fix/session-append-ignorable-envelope-rebased
Mchsd 想的话可以直接从这版继续(或自己 rebase 覆盖,都行);已登记到 zoahdev 的 upstream patch queue(dsh-docs #44)。 |
|
?? dsh-click ????????????:???????????????????????,???? rc.6/rc.7? ?????
??????????????(??????):????????? detached SessionStore ????? append( ??????:???(1)? envelope(2)????? envelope ??????,???????????"???????",??????????;???(??? |
|
感谢 @zoahdev 的独立核验与 rebase 帮助——基底标注确实是我的疏漏(本地 clone 时 origin/master 还在 47f9438,fetch 到 99f6f02 后未同步到分支描述),已修正。 已完成的跟进:
再次感谢验证与 rebase!当前状态与 argszero 的"修复形态(一 PR)"完全对齐,随时可 cherry-pick。
|
|
@PerryLink 感谢回复!不过有个问题需要先确认:你的这条回复在我这边显示为乱码(中文字符全部变成 方便的话请用英文重新发一遍要点(或确认是否已修正编码后重发),我好准确回应。 从乱码中能辨认出的框架(如有误请纠正):
先直接回应第 2 点(如果我没理解错):本次实现正是让 rc.7+ 的写侧暴露 期待你的完整回复,我可以据此把三个新消费者(dsh-draw/checkpoint-rewind/background-agents)补进提案的家族谱,并确认实现是否覆盖你们的场景。
|
|
I turned the current behavior into an operator-focused, source-pinned guide: Persist custom plugin events without breaking Session resume. The practical boundary today is:
If the public writer later exposes the existing |
|
感谢 @denial123789 的实践指南——"插件存在/缺失/升级三种冷恢复"和"重建关键记录 vs 纯信息记录"的边界划分非常清晰,与 types.ts:412-422 的 envelope 契约语义完全一致。 回应你的核心关切(ignorable 只能用于"删除该类型所有记录也不会改变重建状态"的事件):这正是本次实现的设计约束—— 已按你的指南补充回归测试(
当前分支
如果你愿意,可以把这份指南链接进 harness 仓库的文档(比如
|
Uh oh!
There was an error while loading. Please reload this page.
问题 Problem
第三方插件写入的自定义会话事件(session events)会导致会话恢复崩溃(resume refused)。
dsh-click(桌面控制插件,
dsh-click/observed/dsh-click/action审计事件)实测在 rc.6 / rc.7 上触发:后果:QQ/IM 客户端恢复会话失败 → 强制
create新会话 → 历史上下文全部丢失。对插件重度部署这是确定性事故(每次用过 dsh-click 工具的会话都不可恢复)。根因 Root cause
@deepseek-ai/dsh-session的KNOWN_SESSION_EVENT_TYPES是静态编译白名单。known-event-types.js注释明确承认:dsh-click 就是第一个撞上这个缺口的消费者。且 rc.6 / rc.7 的
Session.append(type, data)没有 append-envelope(ignorable)选项——插件无法把自己的事件标记为 ignorable,恢复端只能整段拒绝。影响 Impact
任何向会话追加自定义事件类型的第三方插件都会中招:
建议方案 Proposal(任一)
pluginInventory/api-remotes同层)Session.append支持{ ignorable: true };恢复端对未知类型默认跳过 + 警告(写死"拒绝整段"过于脆弱——silently skipping a required event 的风险远小于不可恢复的会话)临时 workaround(当前可用)
KNOWN_SESSION_EVENT_TYPES追加dsh-click/observed、dsh-click/action(两个文件,升级后需重打)auditSessionEvents开关(默认 true,可关)→ PR PerryLink/dsh-click#2期待官方对这个接口缺口的回应/规划。
All reactions