dsh-edit-panel:在 DSH 侧栏里分段共写文本与 Markdown

前言

在 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(维护者曾在 DSH 0.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 归纳的可复现流程,便于和模型对齐预期。

  1. 让模型调用 edit_begin,传入目标路径与大纲(可选 title)。面板打开,文件按 ## 结构创建。
  2. 模型按节调用 edit_write_section;你在侧栏对应节里可直接改 Markdown,保存有防抖,编辑中的节会被短暂锁定(实现上约 30 秒,见 lib/draft.js 说明)。
  3. 需要同步进度时,模型可调用 edit_status();你也可在面板里处理重写提案。
  4. 定稿时通过面板 Finish 或让模型调用 edit_finish();若是从 .draft 流程来的新稿,Finish 才会替换原文件并保留备份。
  5. 仅查看或就地改已有文件时,使用 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(经 DSH ctx.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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye