dsh-oc-change-review
Đã xác minhdsh-oc-change-review · v0.3.0 · MIT · Giao diện web
DeepSeek Harness 会话修改审查:追踪会话内 write/edit 工具调用,以可自定义颜色的 diff 对比展示;会话隔离、子代理聚合、SSE 实时推送。
Cài đặt
dsh plugin add dsh-oc-change-review Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Phát hành lên npm mà không có repository công khai. Hãy kiểm tra nội dung package trước khi cài.
Thẻ
Tác giả
Readme
dsh-change-review
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




