dsh-fresh-start: One-click summarize conversations, start new sessions, and archive old ones with /fresh

前言

在 DSH(DeepSeek Harness)里,一个会话工作得越久,积攒的事件越多,live 事件树越大,内存占用和卡顿问题随之而来。过去处理这件事是纯手工的:先把历史总结成一段摘要,再新建会话把摘要贴进去作开场,最后归档老会话释放内存,每一步都要自己操作一遍。

dsh-fresh-start 把这条收尾链路合并成一条 /fresh 命令。下面介绍它的流程、安装方法和使用注意。

这是什么

dsh-fresh-start 是由 orangeofcarl0-sys 维护的 DSH 插件,核心是 /fresh 命令:一键总结当前对话 → 开启新对话(自动跳转)→ 归档老对话,缓解超大会话的内存与卡顿。许可证为 MIT。

/fresh 的完整流程

一次 /fresh 按顺序经过五个阶段:

1、Compact-First:强制压缩当前会话;
2、对话式总结:让 LLM 生成自然语言摘要;
3、创建 seeded 新会话:摘要作为开场消息;
4、归档老会话:释放 live 事件树内存;
5、client 侧自动跳转到新会话。

下面分步介绍。

Compact-First:先压缩再总结

如果当前 preset 挂载了宿主压缩引擎(standard/code/cordis),/fresh 会先调用 compactNow 强制压缩当前会话,再进入总结阶段,这样总结面对的是收紧后的上下文。

压缩不是必须成功的:引擎不可用(minimal)、agent busy、无可压缩范围或引擎抛错时,安静降级为纯对话式总结,不阻断流程。

对话式总结

插件提取 session.requestHeader() 中的 system,加上 session.deriveMessages() 返回的全部消息,用一条简单指令让 LLM 把这些内容总结成一段自然语言摘要。

创建 seeded 新会话

拿到摘要后,插件通过 ctx.agents.create 创建新会话:

  • 继承老会话的 cwd 与 agent preset;
  • 摘要作为新对话的开场消息(seed);
  • 新会话的 header.parentSession 指向老会话。

归档与自动跳转

随后插件通过 ctx.workspaceRegistry 归档老会话,释放 live 事件树占用的内存。

跳转由配套的 client 插件完成:它监听 host/archived-sessions-changed 事件,按 parentId 找到对应的新会话,调用 ctx.sessions.open 自动跳转过去。如果归档广播发生时新会话还没同步到列表,就先进 pending,等会话列表更新后再补跳。

每一步独立,失败降级不阻断

各阶段相互独立,某一步失败会降级但不阻断后续。典型情况是总结失败:此时仍会开新对话并归档,只是新对话不带摘要。

host + client 双端架构

插件的唯一功能路径是 host 侧的 lib/index.js 加上挂载清单 cordis.patch.yml;client 侧的 lib/client.jsdsh.client 声明进入浏览器清单,负责上面提到的自动跳转。

插件还附带一份 dsh-std Community v0.15 清单 dsh-plugin.json,默认完全惰性:dsh 原生加载器不会读取它,只有显式安装 @dsh-std/adapter-dsh 后才会被发现与校验。它的宿主入口是占位实现 lib/std/host.jscontributes.commands 刻意留空——避免在装有 @dsh-std/adapter-dsh 的环境里向原生注册表投影第二个 /fresh 造成冲突。

安装与启用

安装命令:

dsh plugin --profile web add github:orangeofcarl0-sys/dsh-fresh-start

插件发新版后,用下面的命令更新:

dsh plugin --profile web update dsh-fresh-start

重启 dsh web,日志出现 [fresh-start] installed: /fresh command registered 即安装成功。

一个注意点:如果你的 profile 的 cordis.patch.yml 里已经手工挂载过本插件,请先删除那一行再安装,否则会出现双实例。

典型用法

在对话输入框输入 /fresh,可选带 preset 参数:

/fresh            # 继承当前会话的 preset
/fresh standard   # 用指定 preset 开新会话(标准模式)

支持的目标 preset:

  • /fresh standard —— 标准模式;
  • /fresh ptc(旧输入 code 兼容映射到 ptc)—— PTC 模式(Code Mode SDK);
  • /fresh minimal —— 极简模式;
  • /fresh create/fresh creator —— 创造模式(cordis)。

指定不存在的 preset 时命令直接报错,不会静默回退到继承值。

版本与兼容性

以上内容以 dsh 0.1.2-rc.1 为准(2026-09-04 验证轮,插件版本 1.3.1)。插件依赖 dsh 内部 API,包括 ctx.agents.createctx.workspaceRegistryctx.sessions.opensession.deriveMessages() 等,dsh 升级可能导致兼容性问题。

依赖声明方面,peerDependencies 为 @deepseek-ai/cordis ^4.0.2@deepseek-ai/dsh-agent-presets ^0.1.2-rc.1@deepseek-ai/dsh-llm ^0.1.2-rc.1。按 semver 预发布规则,^0.1.2-alpha.5 不包含 rc.1,所以声明必须升至 ^0.1.2-rc.1

适用场景与注意

适合的场景:长时间在同一个会话里工作、会话体量已经大到影响内存与响应速度的 DSH 用户。

一个已知局限:总结依赖 session.deriveMessages(),如果超大会话的上下文超出模型窗口,总结可能失败——此时流程仍会继续,新对话会创建、老会话会归档,只是新对话不带摘要。

安全方面需要明确:插件以当前 dsh 进程的权限运行,安装任何社区插件前,建议先阅读源码确认行为符合预期。本项目采用 MIT 许可证,源码与许可文件都在 GitHub 仓库中。

小结

dsh-fresh-start 把「总结当前对话 → 开启新会话 → 归档老会话 → 自动跳转」这条超大会话的收尾链路压缩成一条 /fresh 命令,每一步独立降级、preset 可显式指定。如果你的 DSH 会话已经开始卡顿,可以按上面的步骤装上试一下。

  • 插件目录页(社区目录,独立站点):https://www.skillhub.cn/plugins/orangeofcarl0-sys/dsh-fresh-start
  • GitHub 仓库:https://github.com/orangeofcarl0-sys/dsh-fresh-start
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye