修改助手回复内容,并从该回合分叉出新会话版本
29.3/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Branwen050/dsh-pencil该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
消息编辑铅笔:编辑助手回复,从该回合分叉出新版本会话
README
由 DeepSeek 最新模型翻译生成dsh-pencil
dsh-pencil 是 DSH(DeepSeek Harness)桌面端的客户端插件。DSH 的会话日志采用 append-only 机制,无法原地修改已生成的模型回复。该插件在助手回复底部添加编辑按钮。你修改回复正文并保存后,插件会从当前回合分叉(fork)出一个新的会话版本,把修改后的文本写入新会话历史,原会话则完整保留。
功能
- 编辑入口:在助手回复操作栏注入铅笔按钮,点击后弹出编辑浮层,并预填当前回复的正文。
- 版本分叉:保存修改后,以该回复所在回合为界分叉生成新 session,新 session 中该条回复更新为编辑后的内容,模型后续对话基于新文本继续生成。
- 历史保留:原 session 完整保留,可随时切回。
展开完整文档(README 剩余 1 节)
dsh-pencil
dsh-pencil 是 DSH(DeepSeek Harness)桌面端的客户端插件。DSH 的会话日志采用 append-only 机制,无法原地修改已生成的模型回复。该插件在助手回复底部添加编辑按钮。你修改回复正文并保存后,插件会从当前回合分叉(fork)出一个新的会话版本,把修改后的文本写入新会话历史,原会话则完整保留。
功能
- 编辑入口:在助手回复操作栏注入铅笔按钮,点击后弹出编辑浮层,并预填当前回复的正文。
- 版本分叉:保存修改后,以该回复所在回合为界分叉生成新 session,新 session 中该条回复更新为编辑后的内容,模型后续对话基于新文本继续生成。
- 历史保留:原 session 完整保留,可随时切回。
结构
项目由 client 交互层与 host 服务层组成:
lib/index.mjs host 插件:提供 HTTP 路由与会话版本分叉逻辑 lib/client.js client 插件:注入铅笔按钮与编辑浮层交互界面 cordis.patch.yml host 插件挂载配置
安装
本地开发安装
执行安装脚本,完成依赖链接与 bundle 注册:
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Users\31319\Desktop\dsh-pencil\install.ps1
该脚本等价于执行以下三个手动步骤:
使用 Desktop 内置的 pnpm shim,以 link 方式添加依赖:
$profile = "$env:APPDATA\dsh-desktop\harness\profiles\web"
& "$env:APPDATA\dsh-desktop\harness\.desktop-bin\pnpm.cmd" add "link:C:\Users\31319\Desktop\dsh-pencil" --prefer-offline
以 pnpm add "link:..." 方式安装后,node_modules\dsh-pencil 会创建为指向源码目录的 junction。后续修改源码只需重启应用即可生效,无需重新安装。执行时必须调用 .desktop-bin\pnpm.cmd。PATH 里的 node 是 DSH Desktop 自带的 Electron node,直接用它跑 pnpm 会出现执行异常。
运行脚本,把插件登记到 profile 的 bundle 清单:
node C:\Users\31319\Desktop\dsh-pencil\add-bundle.mjs
pnpm 仅负责处理依赖声明(写入 dependencies),不会修改 dsh.profile.bundles 字段。DSH 依据 dsh.profile.bundles 加载插件,缺少此步骤插件不会被加载。
彻底退出 DSH Desktop 后重新启动:
在系统托盘右键退出 DSH Desktop 进程,随后重新打开应用。
安装完成后的文件变动位置如下:
| 位置 | 内容 |
| profiles\web\package.json → dependencies | "dsh-pencil": "link:C:/.../dsh-pencil" |
| profiles\web\package.json → dsh.profile.bundles | "dsh-pencil" |
| profiles\web\pnpm-lock.yaml | link 记录 |
| profiles\web\node_modules\dsh-pencil | junction → 源码目录 |
从 npm 安装
包已发布到 npm,安装时给出包名即可(省略版本号则取最新):
$profile = "$env:APPDATA\dsh-desktop\harness\profiles\web"
& "$env:APPDATA\dsh-desktop\harness\.desktop-bin\pnpm.cmd" --dir $profile add dsh-pencil
node "$profile\node_modules\dsh-pencil\add-bundle.mjs"
需要锁死版本时,在包名后加版本号:
& "$env:APPDATA\dsh-desktop\harness\.desktop-bin\pnpm.cmd" --dir $profile add dsh-pencil@0.1.3
直接从 GitHub 安装
使用 Desktop 内置 pnpm 安装 GitHub 仓库并注册 bundle:
$profile = "$env:APPDATA\dsh-desktop\harness\profiles\web"
& "$env:APPDATA\dsh-desktop\harness\.desktop-bin\pnpm.cmd" --dir $profile add "github:Branwen050/dsh-pencil"
node "$profile\node_modules\dsh-pencil\add-bundle.mjs"
卸载
执行卸载脚本完成清理:
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Users\31319\Desktop\dsh-pencil\uninstall.ps1
该脚本等价于执行以下卸载与清理命令:
$profile = "$env:APPDATA\dsh-desktop\harness\profiles\web"
& "$env:APPDATA\dsh-desktop\harness\.desktop-bin\pnpm.cmd" remove dsh-pencil
node C:\Users\31319\Desktop\dsh-pencil\remove-bundle.mjs dsh-pencil
卸载时必须连带删除 node_modules 下的对应目录。DSH Desktop 启动时会依据 node_modules 物理目录自动补登记插件。如果只从 package.json 清单中移除,却残留物理目录,应用下次启动时仍会自动写回并加载。
技术实现与宿主契约
架构设计:host 为什么复用上游、client 为什么重写
本项目的 host 实现复用了上游 dsh-message-edit 经过验证的版本分叉逻辑,包括版本状态标记、逆链记录、agents.create({seed}) 事务以及失败回滚机制。在此基础上,本项目对 host 做了适配:
- 避免命名冲突:插件名调整为 dsh-pencil,路由调整为 /pencil。
- 补充消息标识:在 editableMessages() 的 assistant 条目中补充 messageId,便于 client 依据 slot props 精确匹配。
- 适配 0.2.x 事件日志:0.1.x 使用 session.events,而 0.2.x 的事件存于 session.log,因此封装 eventsOf(session) 调用 snapshotEvents() 读取。
client 实现则完全基于 DSH 0.2.x 契约全新编写,解决了上游在 0.2.x 环境下无法加载的问题。
0.2.x 契约关键技术事实
- 模块种子词限制:0.2.x 不再提供 @deepseek-ai/dsh-client-runtime(含其 /client 子路径),客户端模块表只放行 react、react-dom、@deepseek-ai/cordis、dsh-client-store、dsh-client-ui-slots、dsh-client-ui-primitives 等固定种子词。本插件 client 只引入 react。
- inject 服务名变更:UI 服务中的 conversation 在 0.2.x 中已更名为 uiConversation。声明不存在的依赖服务,会让 fiber 永久处于 pending 状态,阻断插件初始化。本插件仅注入 slots 与 sessions。
- 注册时序包裹:0.2.x 要求先通过 ctx.slots.inject 等待 slot 就绪再执行注册,即 ctx.slots.inject("conversation.chat.assistant-actions", () => ctx.slots.register(...))。未经 ctx.slots.inject 包裹的直接 register 调用会被加载期校验拒绝。
服务与路由依赖
- client 依赖服务:slots、sessions
- host 依赖服务:sessions、agents、sessionPersistence、sessionQuery、workspaceRegistry、webServer
- host 路由:GET /pencil?sessionId= 用于获取可编辑消息,POST /pencil 用于提交 edit / reroll / retry 操作
已知边界
- 只暴露助手回复正文;reasoning 块与用户消息暂未开放编辑入口
- 编辑产生的是新会话,不是原地改写历史——DSH 的会话日志 append-only,原地改没有合法路径
- 编辑会截断该回合之后的内容(cascade: "truncate")
- 失败模式受控:客户端只占一个 slot 条目,host 异常统一转成 JSON 错误;不会把 App 拖进安全模式
排查
检查插件是否在 Desktop 日志中成功加载:
Select-String "$env:APPDATA\dsh-desktop\logs\harness.log" -Pattern "dsh-pencil"
检查 host 路由是否成功注册(需 host 六个依赖服务均就绪):
Select-String "$env:APPDATA\dsh-desktop\logs\harness.log" -Pattern "/pencil"
署名与许可
- lib/index.mjs 改编自 Moeblack/dsh-message-edit(MIT 许可)。
- lib/client.js 为原创实现。
分发与使用本插件时,请保留 LICENSE 以及 CREDITS.md 中的上游署名与改动审计记录。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Branwen050/dsh-pencil
修改助手回复内容,并从该回合分叉出新会话版本
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,270已汉化DSH
70.8
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。