dsh-plan-plus
DeepSeek Harness 计划评审增强插件:评审弹窗内直接提意见修改计划,随时回看、对比、编辑每一版计划
- Stars
- 0
- Language
- JavaScript
- Created
- Sep 8, 2026
- Updated
- Sep 8, 2026
Introduction
dsh-plan-plus
#dsh #deepseek-harness #计划评审 #plan-mode #行级diff #版本回看
让 DeepSeek Harness Web 的计划评审不再是"一锤子买卖"——评审弹窗内直接提意见修改计划,随时回看、对比、甚至直接编辑每一版计划。
DeepSeek Harness(DSH)内置 plan mode:模型制定计划后通过 exit_plan_mode 弹出评审卡片,用户只能 批准 / 拒绝 / 回到聊天框。痛点有两个:
- 想提个小修改意见,只能先关掉弹窗、再去聊天框打字,打断评审上下文。
- 弹窗关闭后,计划正文散落在对话流里,无法随时完整回看。
本插件补齐这两个缺口,全程不改动 DSH 仓库任何文件,纯插件方式增强,卸载即还原。
兼容性:适配 DeepSeek Harness Web(
dsh web,profileweb)。依赖官方 Slot 契约:conversation.composer/conversation.input.left/shell.overlay;不同版本 Slot 树若变化,评审接管会自动降级为原生 UI,「查看计划」按钮不受影响。
快速开始
# 从 GitHub 一键安装
dsh plugin --profile web add github:lsdt45/dsh-plan-plus
重启 dsh web(默认 http://127.0.0.1:3080),页面 Ctrl+Shift+R 硬刷新,打开任意会话即可生效。
安装
# 方式一:GitHub 直装(推荐)
dsh plugin --profile web add github:lsdt45/dsh-plan-plus
# 方式二:克隆后本地安装(便于修改源码 / 二次开发)
git clone https://github.com/lsdt45/dsh-plan-plus.git
cd dsh-plan-plus
dsh plugin --profile web add .
# 方式三:手动软链接(不需要 pnpm)
ln -s "$(pwd)" ~/.dsh/profiles/web/node_modules/dsh-plan-plus
# 并在 ~/.dsh/profiles/web/package.json 中把 dsh-plan-plus 加入
# dsh.profile.bundles 数组与 dependencies(link: 协议)
功能特性
1. 评审弹窗内直接继续对话修改计划
exit_plan_mode 弹出的评审卡片中新增多行输入框 + 发送按钮:
- 在弹窗里直接输入修改意见(Enter 发送,Shift+Enter 换行,兼容中文输入法组合态)
- 意见经原生 custom 答案通道发回模型,模型修订计划后自动重新弹出评审
- 原有「确认执行 / 拒绝 / 去聊天里说」三个动作语义完全不变
实现上通过 conversation.composer chain 插槽(priority: -5,先于原生评审卡片命中)接管 plan-review 问题,收窄规则与原生 planReviewOf 完全一致;收窄失败时静默降级为原生 UI,不影响任何其他问题/审批流程。
2. 输入行「查看计划」按钮
- 会话一旦产生过计划(存在
exit_plan_mode调用记录),composer 输入行左端出现 SVG 图标的「查看计划」小按钮 - 点击弹出全屏浮层,展示最新一版计划全文(markdown 渲染:标题层级/列表/代码块/加粗/表格/任务列表/链接/引用块)
- 计划正文由宿主半从会话日志(
tool/call事件)恢复,刷新页面后依然可查 - 可点关闭按钮或点击背景关闭
3. 版本回看与修订对比
每次模型经 exit_plan_mode 呈现计划都会留档为一个版本,浮层支持:
- 版本下拉:列出 v1…vN 及各自时间,随时回看任意历史版本
- 对比模式:勾选「对比上一版」,当前版本与前一版本做行级 diff(新增行绿色、删除行红色),一眼看清模型改了哪里;相邻版本内容相同时显示「无改动」
- 单版本或选中 v1 时对比按钮自动禁用;超过 500 行的超长计划自动降级为展示最新版全文
4. 评审卡内嵌「修订自动对比」
模型根据评审反馈修订计划、重新弹出评审卡时,正文直接呈现与上一版的逐行差异:
- 新增行绿色、删除行红色,行首带
+/-符号(与浮层对比共用同一 DiffView 组件与样式) - 顶部工具条「差异 / 全文」切换,右端弱化计数徽标(
+N/-M) - 首次呈现计划(无上一版)不出现工具条,行为与旧版一致;内容未变时显示「较上一版没有改动」并展示全文
5. 直接在 UI 编辑计划内容
「查看计划」浮层新增编辑模式,可不必经模型往返、直接修改计划正文:
- 工具栏新增「编辑」按钮,点击后正文切换为 markdown 原文编辑器
- 支持「保存 / 取消」,⌘/Ctrl+Enter 快速保存、Esc 取消
- 保存后作为新版本留档:带「已编辑」徽标、出现在版本下拉、可与上一版做行级 diff
- 编辑内容持久化到浏览器 localStorage(键
dsh.planPlus.v1.edits),刷新页面后仍保留,且不随模型后续修订丢失 - 说明:本地编辑是可留档、可对比的用户副本,不改变模型实际执行计划(批准仍执行模型原始计划)
6. 主题适配
- 修复深色主题下评审弹窗反馈输入框、浮层编辑输入框「白字白底」看不清的问题
- 全部 UI 颜色从通用
--color-*变量迁移到 DSH 原生--dsw-*主题 token(输入表面、文字、边框、警示/品牌色、遮罩、滚动条等),卡片/浮层/版本下拉/按钮在亮、暗两套主题下均与原生 UI 配色一致
7. 展开到会话区域查看
- 评审弹窗标题条、查看计划浮层工具条新增「展开查看」按钮
- 点击后计划以沉浸式面板铺满整个会话区域(会话头部 + 消息区 + 输入区,不含侧栏/详情栏),一键阅读完整计划
- 展开态保留版本下拉与「对比上一版」差分视图,支持滚动;点「收起」(或按 Esc)返回原视图;评审任一动作成功后展开态自动收起
- 展开层实时贴合会话列边界:侧栏/详情栏拖拽宽度、窗口缩放都会自动跟随
使用方法
| 场景 | 操作 |
|---|---|
| 修改计划 | 评审弹窗底部的输入框输入意见 → Enter(或点「发送修改意见」) |
| 批准计划 | 点「确认执行」(与原生一致,退出 plan mode 开始执行) |
| 保持规划 | 点「拒绝」(与原生一致,模型继续规划) |
| 自由讨论 | 点「去聊天里说」(关闭弹窗回输入框) |
| 回看计划 | 输入行左端「查看计划」按钮 → 浮层查看 → ✕ 或点背景关闭 |
| 回看历史版本 | 浮层顶部「版本」下拉选择 v1…vN |
| 对比修订 | 浮层勾选「对比上一版」,红/绿高亮显示与上一版的差异 |
| 评审时看改动 | 模型修订后重弹评审卡,正文默认即差异视图;工具条切「全文」回原文 |
| 编辑计划 | 浮层工具栏点「编辑」→ 修改正文 → 保存(或 ⌘/Ctrl+Enter);编辑留档为新版本并持久化 |
| 展开阅读 | 评审弹窗标题条或浮层工具条点「展开查看」→ 计划铺满整个会话区域 → 点「收起」或按 Esc 返回 |
技术说明
| 部分 | 文件 | 说明 |
|---|---|---|
| 宿主半 | index.mjs | ESM Cordis 插件;注册 GET /planx-latest-plan?sessionId=... HTTP 路由,从会话日志扫描全部 exit_plan_mode 的 tool/call 事件,返回版本数组({ plan, plans: [...] },plans 按时间排序) |
| 浏览器半 | client.js | window.__ModuleLoader__.load 自注册 bundle;注册 3 个 Slot:conversation.composer(评审接管卡)、conversation.input.left(查看计划按钮)、shell.overlay(计划浮层);浮层内含版本下拉、行级 diff(手写 LCS)与计划编辑模式;用户编辑经 localStorage 键 dsh.planPlus.v1.edits 持久化 |
| 组合声明 | cordis.patch.yml | - insert 一行把插件挂进 profile |
静态插件没有动态插件的 Package 私有 RPC(
harness.handle/host.call),因此宿主与浏览器之间改用webServerHTTP 路由通信。
参与贡献
欢迎提 Issue 与 PR(https://github.com/lsdt45/dsh-plan-plus)。
主要负责人:@lsdt45
许可
MIT,详见 LEGAL.md。