前言¶
在 DeepSeek Harness(DSH)里用智能体改代码、跑命令,会话一拉长,上下文里会堆满历史轮次、工具结果和运行时注入。官方已有 /compact 把历史压成摘要,以及会话菜单里的「分叉」复制整段历史前缀——两种做法都能「接着干」,但前者可能丢掉路径、参数这类可核对的具体信息,后者则把大量旧上下文一并带进新会话。
下面介绍社区插件 dsh-session-inherit(仓库 MacilyDots/dsh-session-inherit):在会话「…」菜单增加一行「继承」,从源会话日志里不调模型地提取任务、最近用户指令、改过的文件、工具失败、命令、待办等锚点,生成交接单,再创建不带旧历史的新会话,并把交接单作为首条消息发出。维护者为 MacilyDots,在 SkillHub 等社区目录中归类为「记忆」相关能力;当前 npm 包版本为 0.5.5,许可证 MIT。
这是什么¶
一句话定位:会话菜单里的「继承」入口 + 机械提取交接单 + 新建干净会话继续工作。
与 /compact、官方「分叉」的差异,README 用表格概括:压缩留在同一会话且摘要偏抽象意图;分叉复制整段历史;继承只搬可核对的具体锚点,新会话上下文从几千字符量级起步。交接单生成过程零 LLM 调用,每条内容可回溯源会话核对。
核心功能¶
会话菜单与命令入口¶
侧边栏任一会话行尾「…」菜单中,在 DSH 自带的置顶、重命名、分叉、归档之外,本插件注册 继承(slot sidebar.workspaces.session.menu.item,id session-inherit,order 350)。对包括已冷掉的会话均可操作:读取走 sessionQuery.readSession,不会激活 agent。
同等入口还有提示词里的 /inherit 命令,例如:
/inherit # 继承当前会话
/inherit <sessionId> # 继承指定会话
/inherit --next 先跑一次 npm test # 指定第一步
/inherit <sessionId> --next 换个文件继续
另注册 session_inherit 工具(参数 sessionId、nextStep、start),供 agent 在上下文变长时提议换会话。
交接单内容与提取规则¶
交接单语言跟随界面语言(preview/commit 请求中的 lang)。主要章节包括:任务目标、改过的文件、最近失败、最近的用户指令、读过的文件、文中提到的路径、项目内相对引用、最近执行的命令、待办、源会话最后一次回复,以及你在预览里填写的「下一步」。章节标题不带序号,避免某一节为空时序号与客户端提示不一致。
提取上的要点:
- 最近的用户指令仅保留
source.kind === 'user'的真实用户消息,过滤agent-instructions、runtime-context等运行时注入。 - 改过的文件来自
edit/write的结构化file_path,按最近改动排序;正文里出现的路径归入「文中提到的路径」。 - 最近失败来自
tool/result且isError,带轮次标记;成功结果、用户打断等会被丢弃,重复报错会合并。 - 绝对路径会做存在性检查,已删除或改名的标为「(已不存在)」。
交接单开头附带三条执行规约(大意:不要复述或总结交接单,读完直接做「下一步」,第一步只做一个具体动作后停下汇报)。
创建新会话时的行为¶
确认继承后,新会话标题为 继承: <源标题>,工作目录与模型路由与源会话一致;默认勾选「继承当前对话的预设」,取消则使用 DSH 默认 preset。默认勾选「创建后立即开始工作」:交接单经 sessionController.prompt 发出并立刻开工;取消则仅 session:append 写入日志不触发首轮。
插件还会在 %DSH_HOME%\session-inherit\history.json 记录重复继承提示;若自动开始失败,对话框会显示原因与新会话 id,而不是静默关闭。
回查源会话:session_read¶
新会话无法直接读源会话的多帧 zstd 日志,插件额外提供只读工具 session_read(mode: search | summary | tail),用于按关键词搜索、结构化摘要或查看尾部事件。
可选配置¶
profile 的 cordis.patch.yml 中可覆盖(均可选):
- id: session-inherit
config:
enabled: true
recentUsers: 6
startByDefault: true
cacheTtlMs: 120000
安装与启用¶
推荐从 npm 安装(README 原文命令):
dsh plugin --profile <profile> add dsh-session-inherit
也可在 profile 的 package.json 中用 link: 依赖并在 dsh.profile.bundles 中列入 dsh-session-inherit;bundles 才是加载权威,仅写 dependencies 不会挂载。安装后需重启 DSH。package.json 要求 Node >= 22。
README 注明在 DSH 0.2.0-rc.2(Windows)上验证通过;DSH 升级后若菜单项不出现,可检查 profile 的 compatibility.json 与 peerDependencies 是否匹配。
典型用法¶
- 鼠标移到侧边栏目标会话,点行尾「…」,选 继承(或对当前会话使用
/inherit)。 - 在预览中查看源会话摘要(轮次、改过文件数、失败条数等),在 下一步 输入框写明具体动作(例如指定文件与单一操作)。
- 按需展开「交接单全文(可编辑)」微调内容,确认是否继承 preset、是否创建后立即开始工作。
- 点击「创建并继承」;新会话打开后从交接单继续,源会话保持不变。
若需在 agent 侧触发,可调用 session_inherit;需要核对源会话细节时,在新会话中使用 session_read。
适用场景与注意¶
适合:单会话轮次多、历史 token 很大,但继续工作所依赖的主要是任务陈述、最近指令、已改文件路径、未解决的 tool 错误和待办状态;希望新会话不带旧对话历史,又不愿用 LLM 摘要丢失具体锚点。
不适合或需知:README 明确说明插件不治退化本身,只减少「长历史 + 抽象意图」诱因;交接单不替你推断「下一步」,留空时模型可能先询问。机械提取对路径解析、交接单 14,000 字符上限与按节丢弃策略等有 documented 限制;源会话若做过 compaction/*,更早原文可能已不在日志中。
安全与信任:DSH 生态以「一切皆插件」为思路,SkillHub(目录页)等为社区站点,与 DeepSeek / 幻方无官方从属关系。插件在当前 DSH 进程权限下运行,宿主注册本机 loopback 的 preview/commit 端点;安装前请自行查阅 GitHub 源码 与 MIT 许可证,确认符合你的环境策略。
结尾¶
dsh-session-inherit 提供第三条「接着干」的路径:不调模型、不带旧历史,用机械交接单把可验证的上下文锚点搬进干净新会话,并可选继承 preset 与立即开工。需要安装命令、配置项与限制说明时,以仓库 README(含 README.zh-CN.md)为准。