预防并发写导致的会话损坏:在会话开始及每一步获取按会话的咨询锁,第二个 dsh 进程会明确报错而非写出重复 seq 断层;死进程持有的锁自动接管。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:po-et/dsh-session-guard
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
阻止两个 DeepSeek Harness 进程写坏同一个会话日志。
English · 姊妹项目:dsh-session-rescue(修复本插件所预防的那种损坏)
dsh 最高发的损坏家族就是并发写入:dsh web + CLI 双开、两个端口两个实例、桌面壳与网页共享一个 $DSH_HOME——每个进程各持一份内存 seq 游标,第二个写入方落盘的事件与已提交 seq 撞号,会话从此永远打不开:
history unavailable for session "…": corrupt session log: seq gap in committed region …
dsh 目前没有跨进程锁。本插件补上一把:按会话的咨询锁 + 死进程自动接管——冲突的那一步会带着可操作的报错响亮失败,而不是悄悄毁掉你的历史。
安装
暂未发布到 npm,请直接从 GitHub 安装。pnpm 会要求你放行一次这个包的构建脚本(dsh 会打印要加的那一行),那是
prepare在编译 TypeScript。
dsh plugin --profile web add github:po-et/dsh-session-guard
在用 AI agent?直接对它说:"给我的 dsh 装上 dsh-session-guard 插件。"
它救你时长这样
Error: session-guard: session session-37374e34… is already being written by another
dsh process (pid 84231 on mbp.local, held 42s, last heartbeat 3s ago). …
该步失败、日志完好、什么都没丢。崩溃的进程永远不会卡死会话:属主 pid 已消失的锁会被立即接管;无法验证的属主(共享目录上的其他主机)90 秒无心跳即过期。
配置
全部可选,写在 profile patch 的插件行上:
- id: session-guard
name: "@po-et/dsh-session-guard"
config:
mode: enforce # 'enforce'(默认)拦下冲突步;'warn' 只告警不拦
heartbeatMs: 15000 # 持有锁的心跳刷新间隔
staleAfterMs: 90000 # 无法验证的属主静默多久算过期
# lockDir: /custom # 默认 $DSH_HOME/session-locks
诚实边界
- 锁是咨询性的:只保护装了本插件的 dsh 进程,没装的进程不受约束(请在你运行的每个 profile 里都装上)。
- 只覆盖活跃写入路径(
agent/session-start、agent/pre-step)。冷加载修复路径(在任何 step 之前提交合成中断收尾事件)发生在 dsh 内部,插件无法拦截——那一半只能等官方修。 - 锁文件在
$DSH_HOME/session-locks;若你在配置里把会话根目录改到了别处,锁仍按 home + 会话 id 定位。 - 已经发生的损坏本插件救不了——dsh-session-rescue 可以。
零运行时依赖。MIT。
链接
同类插件
Minglink/dsh-infinite-gen-4★ 3277
DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
ranxianglei/billion-context★ 2276
billion-context官方版:上下文压缩插件,兼顾小窗口(100k上下文足矣)省token(省5倍token)和超长会话(数月级别几十亿token单会话)。
liangmianya/dsh-synapse★ 557
DeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
Nwflower/dsh-chat-import★ 246
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。
MichengAI/dsh-archive-manager★ 198
在设置里增加已归档会话页,可按工作区搜索、恢复和删除已归档会话。
SiriLee/dsh-rewind★ 170
同一会话窗口内的 in-place 对话回退(不 fork,Claude Code /rewind 语义):每条消息的 ↶ 按钮把模型上下文回退到任意用户消息,可选用磁盘持久化的 before-backups 还原工作区文件。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。