dsh-session-save:把 DSH 会话存成单个 .dsproj 工程文件

前言

DeepSeek Harness(DSH)会把每条会话写在 ~/.dsh/sessions/ 下,例如 session.v4.jsonl.zstd 以 zstd 帧追加写入,本地持久化很稳。但若只想带走一条对话、在两台机器间轮流接着聊,或把某次讨论归档进项目仓库,直接拷贝 UUID 目录或整包同步 ~/.dsh 往往代价大、易冲突:目录里还混着记忆、附件、索引和插件状态,体积大;手动拷贝的文件名也不直观。

下面介绍社区插件 dsh-session-save(维护者 chinacaa,分类「记忆」):把一条会话(可选带上该工作区记忆)收成一个 .dsproj 文件,在标题栏提供类似 Word 的打开、保存、另存为与自动保存;换 DSH、换机器打开同一文件即可继续对话。插件以 MIT 许可发布,当前 npm 版本 0.2.1,要求 DSH >=0.2.1-rc.1;GitHub 仓库 chinacaa/dsh-session-save 星标约 2。目录页见 skillhub.cn。DSH 生态强调「一切皆插件」,社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-session-save 在 Web 客户端会话标题栏增加保存与打开 .dsproj 的入口,并在 Host 侧完成打包、导入与冲突处理。.dsproj 是 dshproj/1 格式的 ZIP,与同名的 dshproj 命令行工具包格式兼容(工具本体不在该仓库内)。

默认包里主要是会话日志原字节;工作区里的代码文件不会打进包——要带代码需另用 dshproj 等能力(README 中相关说明已截断,此处不展开未核实细节)。

核心功能

装好后,标题栏右侧会出现四个动作(README 以图标说明,此处按动作描述):

动作 说明
打开 选择 .dsproj → 导入 → 自动切换到该会话
保存 首次弹出「另存为」,之后每次覆盖同一文件
自动保存 开启后,每步结束写回已记住的路径;开启时会先存一次
另存为 每次弹窗,可换名或换位置,原文件保留

空会话页的新会话行右侧还会多一个「打开」按钮,尚未开始对话时也能直接打开工程文件。

默认不打包记忆:~/.dsh/memory 里的项目笔记等默认不进包。需要连记忆一起带走时,按住 Alt 再点保存/另存为,或请求带 ?memory=1。在别的机器上打开时,记忆默认只落成 xxx.from-dsproj-<日期> 副本,DSH 不会直接当记忆读;合并策略 README 中有单独一节,此处只强调:打开他人 .dsproj 应视同接收压缩包,插件对路径穿越、解压体积、manifest 条目声明等做了校验。

打开时的行为(概要):本机是否已有同 id 会话、创建时间与工作区路径是否一致,决定是直接切换、就地复制新 id,还是弹出冲突面板(取消 / 另存为副本 / 用文件覆盖本机 / 用本机的)。记忆文件按 sha256 比对,不同则写副本,不覆盖本机已有记忆。

多机与同步盘:包内 LOCK.json、侧车 <file>.lock、写前内容 sha256(CAS)三道机制,减轻两台机器同时写同一文件的问题;自动保存遇到「文件已在别处改过」会自行关闭自动保存且本轮不写盘。路径落在常见云同步目录时界面会提示「两台机器同时开自动保存会互相覆盖,建议只在一台写」——仅提示,不阻止。

安装与启用

插件面向 web profile,安装后必须重启 DSH(启动时组合 bundle,热装不生效)。

# 从 npm 装
dsh plugin --profile web add dsh-session-save

# 或直接从 GitHub 装
dsh plugin --profile web add github:chinacaa/dsh-session-save

另存为对话框按平台选用原生实现:Windows 用 powershell.exe,macOS 用 osascript,Linux / BSD 尝试 zenity、kdialog、qarma、matedialog 等;都没有时(无头环境)退回页面内路径输入框。

安装前建议自行查看 仓库源码 与 MIT 许可证;插件以当前 DSH 进程权限读写 ~/.dsh 与用户选定的路径,打开来源不明的 .dsproj 前请知悉上述安全策略。

典型用法

按 README「三步用起来」:

  1. 对话进行中点 保存(或先开 自动保存,会先替你存一次)。
  2. 在弹窗确认文件名——默认可为「会话标题 + 会话创建时间」,例如 把会话存成工程文件-20261025-1043.dsproj。
  3. 之后点 保存 覆盖同一文件;要留快照点 另存为。

在另一台机器:点 打开 选该文件,会话出现在列表并自动切换,可接着上次话题继续。

命名规则要点:标题来自日志里最新的 session/title;时间为会话创建时间而非保存时间;非法文件名字符替换为空格,最长 60 字;无标题时退回 时间-session-id前8位.dsproj。覆盖保存记住完整路径,标题后来变了也不会自动换文件名。

不开 DSH 也可校验或导入同一格式(README 示例):

dshproj verify   会话.dsproj
dshproj info     会话.dsproj
dshproj import   会话.dsproj --cwd D:\elsewhere

适用场景与注意

适合:需要把单次 DSH 讨论归档成单文件、通过网盘/U 盘/仓库附件传递会话、或在两台机器上轮流续聊(建议同一 .dsproj 只在一台开自动保存)。

注意:

  • .dsproj 不含工作区代码,只有会话与(可选)记忆;续聊前请在本机准备好相同或等效的项目目录。
  • 同步盘 + 双机自动保存仍可能冲突,依赖 CAS 与锁提示,不能替代良好的使用习惯。
  • 平台支持 README 标明 Windows、macOS、Linux、Web。

结尾

dsh-session-save 把「一条会话 = 一个命名清晰的 .dsproj」落到标题栏的日常操作里,减轻整目录迁移 ~/.dsh 的成本。进一步了解可阅读 GitHub README 与 skillhub 目录页。

羽毛球分组比赛记分
小程序二维码

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

小夜