前言¶
在 DeepSeek Harness(DSH)里让模型写长文时,常见做法是让工具直接改磁盘上的文件,或把全文堆在对话里再复制出去。前者你很难在同一时刻改同一段落,后者缺少稳定的章节结构和落盘节奏。MathieuPortmann 维护的客户端插件 dsh-edit-panel 把「按章节写文件」接到 Web UI 右侧 Live writing 面板:模型通过专用工具逐节写入,你在同一文件里可同时输入;模型对已有人工内容的改写以提案形式展示,由你逐条保留或拒绝,而不是静默覆盖。
这是什么¶
dsh-edit-panel(GitHub:MathieuPortmann/dsh-edit-panel)是 DSH 的 web 客户端插件,当前 package 版本 0.1.0,许可证 MIT。维护说明为 best-effort,Issue 可能无人回复,欢迎 fork。它不访问外网,读写范围限定在用户主目录内、非隐藏目录、且扩展名为 .md、.markdown、.txt、.text、.tex、.org、.rst、.qmd、.rmd 的文本;Markdown 里以 ## 标题划分章节。界面默认英文;当 DSH 语言为法语时,插件会随 DSH locale 显示法语文案(client.js 顶部 en / fr 表)。
核心功能¶
模型侧五个工具¶
每次对话都会向模型注册以下工具(名称与参数以 README 为准):
| 工具 | 作用 |
|---|---|
edit_begin(path, outline, title?) |
按大纲创建文件并打开面板 |
edit_write_section(section, content) |
写入一节,并立即保存到磁盘 |
edit_status() |
汇报已写内容、你的修改与下一步建议 |
edit_finish() |
结束本次草稿流程 |
edit_open(path) |
在面板中展示已有文件,不改动内容 |
Live writing 面板¶
右栏 Live writing 标签下,每一节对应一个小型富文本编辑器(粗体、斜体、标题、列表、引用、链接、撤销等;读写格式为 Markdown)。你输入的内容在短暂停顿后自动保存;正在编辑某一节时,模型不能覆盖该节。
提案而非覆盖¶
模型重写已有文字的节时,磁盘上的原文件不会直接改变。面板逐词展示提案:新增为绿色,删除为红色删除线。你可以逐条或一次性保留或拒绝变更。
已有文件的安全策略¶
- 对尚未打开编辑的已有文件:草稿写在
<file>.draft,只有在你按 Finish 时才替换原文件(原文件会先复制到备份目录);Cancel 丢弃草稿。 - 通过
edit_open打开的文件:就地编辑,操作前会先备份。
选中段落问模型¶
选中文字后,可用 ✦ Ask the AI 药丸或 Ctrl+K,把段落及其所属节带入输入框,并附带 shorten、rephrase、fix、translate 等快捷动作。
会话文档列表¶
消息框上方抽屉列出本会话中打开过的文件,点击可重新打开。对话里形如 [name](/path/file.md) 的文本文件链接点击后也会在面板中打开。
上下文回传¶
你针对各节的说明与对提案的决定会作为 runtime context 回传给模型,以便在对话压缩后仍能保留。
安装与启用¶
环境要求(见 README Compatibility):
- Node.js:
^22.19.0 || >=24.0.0 - DSH:
>=0.2.0-rc.2 <0.3.0(维护者曾在 DSH0.2.0-rc.2、Node 22.23 上验证)
官方安装命令:
dsh plugin --profile web add github:MathieuPortmann/dsh-edit-panel
安装后需重启对应 profile。README 说明包上架 npm 后也可使用 dsh plugin --profile web add dsh-edit-panel;当前文档给出的 GitHub 安装方式如上。
配置¶
在 DSH 配置里 edit-panel 一行可调以下选项:
| 选项 | 默认值 | 含义 |
|---|---|---|
dataDir |
<DSH_HOME>/edit-panel |
草稿状态(每会话一个 JSON)与会话文档列表 |
backupDir |
<DSH_HOME>/backups/edit-panel |
替换或打开文件前的备份 |
announce |
true |
每轮对话开头一行提示模型通过面板写文本;设为 false 则仅在需要时由你指示使用工具 |
典型用法¶
下面是从 README 归纳的可复现流程,便于和模型对齐预期。
- 让模型调用
edit_begin,传入目标路径与大纲(可选title)。面板打开,文件按##结构创建。 - 模型按节调用
edit_write_section;你在侧栏对应节里可直接改 Markdown,保存有防抖,编辑中的节会被短暂锁定(实现上约 30 秒,见lib/draft.js说明)。 - 需要同步进度时,模型可调用
edit_status();你也可在面板里处理重写提案。 - 定稿时通过面板 Finish 或让模型调用
edit_finish();若是从.draft流程来的新稿,Finish 才会替换原文件并保留备份。 - 仅查看或就地改已有文件时,使用
edit_open(path)。
若希望模型默认就知道这套工具,保持 announce: true;若只想在明确任务里启用,可关 announce 并在提示里说明使用 edit 系列工具。
实现要点(便于排查)¶
- 草稿与提案逻辑在
lib/draft.js,文档列表在lib/docs.js,均为纯 Node,README 称有 9 个独立测试(npm test)。 - Host 侧
index.js注册工具、推送 runtime context,并通过POST /edit-api/<method>为面板提供 RPC(经 DSHctx.connection.admit()校验)。 - 页面侧
client.js绘制侧栏与编辑器;编辑器 bundle 为 ProseMirror + markdown-it,产物在web/editor.js。
插件以当前 DSH 进程的用户权限读写主目录内符合规则的文本文件;安装前建议浏览仓库源码与 MIT 许可证及 THIRD_PARTY_NOTICES.md。维护为 best-effort,生产环境使用前请自行评估版本窗口(DSH <0.3.0)。
结尾¶
dsh-edit-panel 把「分段写盘 + 人机同屏改稿 + 重写走提案」收进 DSH Web 右栏,适合需要稳定 Markdown 章节、又不想让人机互相覆盖同一节的写作场景。
- 社区目录页:https://www.skillhub.cn/plugins/MathieuPortmann/dsh-edit-panel
- 源码与完整说明:https://github.com/MathieuPortmann/dsh-edit-panel