会话修改审查插件:追踪会话内 write/edit 工具调用并展示 diff 对比;会话隔离、子代理聚合、SSE 实时推送、角标与颜色自定义。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:cirelir/dsh-change-review
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。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(DSH)会话修改审查插件:自动追踪会话内的文件写入/编辑操作,在会话视图中以 diff 对比形式展示,支持颜色自定义、实时推送、会话隔离与子代理聚合。
一个包同时承载 Host 逻辑与浏览器 UI(
dsh.bundle+dsh.client双 manifest)。
✨ 功能
| 功能 | 说明 |
|---|---|
| 自动追踪 | 监听 write / edit 工具调用,记录修改前后内容与时间 |
| diff 对比 | LCS 行级 diff:新增(绿)/ 删除(红)/ 上下文(灰),含新旧行号 |
| 会话隔离 | 每个会话只展示自己的修改,切换会话即切换审查内容 |
| 子代理聚合 | 子代理(subagent)的修改自动聚合到根父会话 |
| 实时推送 | SSE 服务端推送,修改文件后角标/列表即时刷新(零轮询) |
| 撤回变更 | 可单独撤回某一项修改(保留其后无冲突的修改),或撤回整个文件的全部修改(恢复到本次会话首次修改前;会话中新建的文件则删除)——直接改写磁盘文件 |
| 轮次内审查 | 每轮对话尾部展示本轮变更的文件列表与可展开的 diff(支持单项撤回),与「审查」标签的会话累计视图相互区分 |
| 数量角标 | 「审查」标签显示待审文件数,背景/文字颜色可自定义 |
| 颜色自定义 | 12 项颜色在 设置 → 修改审查 页调整(含对话底部变更列表的背景色、边框色、新增/删除行数颜色),每个颜色项都带透明度滑块(支持 rgba),localStorage 持久化 |
| 侧边栏净化 | 隐藏左侧栏的 Cordis 插件运行提示(cordis-panel) |
📸 截图
| 「审查」标签页 — 文件列表 + diff 预览 | 轮次内审查卡片 |
|---|---|
![]() |
![]() |
| 展开的 diff 与单项撤回 | 颜色自定义:设置 → 修改审查 |
|---|---|
![]() |
![]() |
| 插件市场安装 |
|---|
![]() |
📦 安装
方式一:dsh plugin add(npm 发布后)
dsh plugin --profile web add dsh-change-review
方式二:手动部署
- 将包放入 harness 可解析的
node_modules,并在 profile 的cordis.patch.yml注册:
- insert:
- id: diff-review
name: 'dsh-change-review'
- id: ui-diff-review
name: 'dsh-change-review'
- 重启 dsh web
本插件面向 Web profile(
dsh --profile web)。
🚀 使用
- 打开会话,点击会话顶部视图标签 「审查」(位于「对话」之后、「轨迹」之前)
- 左侧文件列表(写入/编辑次数、~新增/~删除统计),右侧选中文件的 diff 对比。左右两栏独立滚动(滚动文件列表不会带动 diff 预览,反之亦然),浏览文件时预览位置保持不动。顶部可切换审查范围:「此会话」(会话累计)或 「最新一轮」(最近一轮对话的修改)
- 文件被修改时角标实时 +1;顶部「↻」刷新、「清空」清除当前会话记录
- 撤回修改(每次操作会二次确认,确认后直接改写磁盘文件):
- 撤回某一项:每条修改(编辑/写入)标题栏右侧的 撤回此项 按钮,文件恢复到该项修改之前的内容,其后无冲突的修改保留(有重叠则提示无法单独撤回)
- 撤回整个文件:详情区顶部的 撤回全部修改 按钮,恢复到本次会话首次修改之前的状态;会话中新建的文件则直接删除
- 轮次内审查:每轮对话结束后,对话尾部显示 「本轮变更审查」 卡片,列出本轮修改过的文件;点击文件展开查看该轮修改的 diff,并可对其中某一项修改撤回。会话累计变更仍在「审查」标签查看,二者相互独立
- 颜色:设置 → 修改审查(8 项 + 深浅色预设 + 恢复默认),改动自动保存,刷新保留
🎨 颜色配置
| 配置项 | 键名 | 浅色默认 | 深色预设 |
|---|---|---|---|
| 新增行背景 | addBg |
#e6ffec |
#10251c |
| 新增行文字 | addFg |
#1a7f37 |
#7ee787 |
| 删除行背景 | delBg |
#ffebe9 |
#2d1415 |
| 删除行文字 | delFg |
#cf222e |
#ffa198 |
| 上下文背景 | ctxBg |
#f6f8fa |
#161b22 |
| 行号 / 标记 | gutter |
#57606a |
#8b949e |
| 角标背景 | badgeBg |
#0969da |
#4493f8 |
| 角标文字 | badgeFg |
#ffffff |
#0d1117 |
| 新增行数(对话底部) | turnAdd |
#1a7f37 |
#7ee787 |
| 删除行数(对话底部) | turnDel |
#cf222e |
#ffa198 |
| 背景色(对话底部) | turnBg |
rgba(255,183,77,.1)(淡橙 10%) |
rgba(255,183,77,.1)(淡橙 10%) |
| 边框色(对话底部) | turnBorder |
#ffb74d(淡橙) |
#ffb74d(淡橙) |
🧠 行为说明
- 追踪范围:本进程内所有会话的
write/edit工具调用;按会话隔离,子代理改动沿 owner 链聚合到根父会话 - 实时性:Host 记录后经 SSE(
/diff-review/events)推送,客户端只处理当前会话事件 - 持久性:颜色持久化(localStorage
dsh.diff-review.colors);审查记录持久化到磁盘(写操作后防抖自动保存,退出时同步落盘,文件位于~/.dsh/profiles/web/diff-review-state.json),重启 dsh web 后自动恢复;删除该文件即清空历史记录 - 容量保护:单文件最多 100 次操作;单次内容截断 120KB;diff 单侧最多 1500 行;单独撤回时的三路合并限制单侧最多 2000 行
- 撤回原理:记录每项修改的完整前后内容快照(来自 write/edit 工具返回值)。撤回最后一项 = 精确还原快照;撤回中间项 = 三路行合并(保留其后修改、撤销该项),重叠即拒绝并提示;撤回成功后该修改及其后的修改从待审列表移除
- 升级说明:升级前(未记录内容快照)产生的修改记录无法撤回(不显示撤回按钮);Host 端改动需重启 dsh web 生效,浏览器端改动刷新页面即可
- 轮次划分:每项修改记录其所属的会话轮次(turn),由 Host 直接扫描会话日志(
turn/start/turn/end)得出——不依赖事件监听,重启/恢复的会话也能正确归属,多轮修改会正确分到各轮;子代理在父会话轮次内产生的修改也计入该轮。每轮对话尾部的卡片与该轮次对应;「审查」页的「最新一轮」视图展示最近一个轮次。升级前(未记录轮次)的旧记录不会出现在轮次卡片中,但仍可在「审查」标签查看
📝 更新日志
v0.2.4 — 文件树 / 右键菜单 / 异步竞态修复(2026-08-17)
- 修复 UI 错乱 — 异步请求竞态(快速切换会话/文件选择)、会话切换后残留旧状态、SSE 重连未同步等问题已全部修复:请求加入序号令牌防串、会话切换时清空所有旧状态、
es.onopen重连后重新同步 - 文件列表按目录分组 — 审查页左侧文件列表改为目录树结构(文件夹可折叠、显示文件数),长列表浏览更清晰
- 右键上下文菜单 — 审查页文件列表与轮次变更卡片(文件行 + 产物 chips)均支持右键菜单:「打开文件」(在选定编辑器或预览面板中打开)与「在 Finder 中展示」
- 编辑器选择器 — 在会话头部(会话日志按钮左侧)新增代码编辑器选择器。自动检测已安装的编辑器(VS Code / Cursor / Windsurf / Zed / Xcode / Android Studio / IntelliJ IDEA / PyCharm / WebStorm / GoLand / PhpStorm / RubyMine / CLion / DataGrip / Sublime Text / BBEdit / TextMate / Nova / CotEditor / Vim / Neovim / Emacs 等),通过
which命令与/Applications路径识别。按钮文字显示「用xxx打开」并展示编辑器自带的应用图标(通过/diff-review/editor-icon/:id路由从应用 bundle 读取 .icns 并转 PNG 提供)。选中后所有「打开文件」操作均用该编辑器打开;未选择时回退系统默认。选择保存在 localStorage,路由/diff-review/open-with-editor在主机端派发编辑器命令。检测同时解析 app bundle 内的真实可执行路径(execPaths),即使 CLI 未加入 PATH 也能用编辑器自身的二进制打开文件。 - 新工作区会话监听 — 会话摘要/详情/轮次接口按会话 id 查找时若未命中,自动尝试解析其根会话 id,兼容新建工作区产生的新会话,确保文件修改能被正确监听与汇总。
- 在 Finder 中展示 — 右键菜单新增「在 Finder 中展示」,直接调用
open -R(macOS)/explorer(Windows)/xdg-open(Linux)在文件管理器中高亮文件。 - 文件列表平铺 — 文件列表从按文件夹分组改回平铺展示,文件名与修改统计同行显示,更紧凑。
- 布局稳定性 —
.drv-view在各会话阶段保持稳定
v0.2.3 — 左右两栏独立滚动(2026-08-16)
- 独立滚动 — 审查页左侧文件列表与右侧 diff 预览现在各自独立滚动(视图在任何阶段都填满可用高度,并用
overscroll-behavior: contain阻止两栏之间的滚动联动),浏览文件时预览位置保持不动,方便审查
v0.2.2 — 修复插件注册(2026-08-16)
- 修复插件加载 — 客户端 bundle 改用正确的
dsh-change-reviewid 注册(原为@deepseek-ai/dsh-client-ui-diff-review),并从cordis.patch.yml移除了重复的ui-diff-review注入项,插件只会注入一次且能正确加载
v0.2.0 — 撤回与轮次内审查(2026-08-15)
- 撤回变更 — 可单独撤回某一项修改(三路合并保留其后无冲突的修改,有重叠则拒绝),或撤回整个文件的全部修改(恢复会话首次修改前状态;会话内新建的文件则删除)。确认后直接改写磁盘
- 轮次内审查 — 每轮对话尾部展示本轮变更审查卡片,列出本轮修改的文件与可展开 diff;「审查」页新增「最新一轮」范围切换
- 持久化 — 审查记录现在可跨 dsh web 重启保留(
~/.dsh/profiles/web/diff-review-state.json,防抖自动保存 + 退出时同步落盘) - 升级说明 — 升级前的记录无内容快照与轮次标记:仍可在「审查」页查看,但无法撤回;升级后请重启 dsh web
v0.1.0 — 首个版本
- 会话隔离追踪
write/edit工具调用,LCS 行级 diff、子代理聚合、SSE 实时推送、颜色自定义、数量角标
🗂 架构
Host(lib/index.js)
· tools/result 监听 → 按会话分桶记录
· LCS 行级 diff
· HTTP 路由:/diff-review/summary · /file · /clear · /revert · /turn(均带 ?session=)
· SSE:/diff-review/events
│ HTTP + SSE(同源)
Browser UI(lib/client.js,__ModuleLoader__ bundle)
· 会话头部探针同步当前会话(隐藏)
· 「审查」视图标签 + 角标
· 设置页「修改审查」颜色自定义
· EventSource 实时订阅
⚖️ 免责声明
插件代码与你的 harness 进程同权限运行。使用前请审阅源码;收录于社区市场不构成安全背书。
📄 License
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-git-graph★ 8121
输入框上方提供 Git 分支选择器,并把分支泳道与提交历史画成图谱,沿着时间线找到任意变更。
Akimiya-z/codex-guard#dsh★ 138
在 DeepSeek Harness 内做提交前的 Pull Request 卫生检查:扫描当前改动中的 TODO 残留、硬编码密钥与非规范提交信息。
Cerbur/clutch-dsh#clutch-dsh-worktree★ 29
为 DSH Web UI 增加按 Git Worktree 组织 Session 的视角,同时继续由 DSH 管理原始 Project 和 Session 数据。
lehhair/dsh-diff-viewer★ 27
PiUI 风格 diff 查看器,替换 write/edit 工具调用的默认 DiffBlock。
DietCokewithSugar/dsh-user-experience★ 20
帮你发现项目中可能存在的用户体验问题:自动走查 React/TypeScript 源码,定位问题并给出具体优化建议。
DamonKoy/dsh-web-ui#dsh-git-graph★ 19
dsh web GUI 会话头部栏的 Git 分支选择器与提交图。





社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。