前言¶
在 DeepSeek Harness(DSH)里写提示词,常见做法是直接在 Composer 输入框里打草稿,再发送给模型。草稿往往口语化、信息不全,自己改一版又费时间;若用 setDraft 之类 API 整体替换文本,编辑器撤销栈里通常拿不到润色前的内容,Ctrl+Z 也回不到原文。下面介绍社区插件 dsh-composer-polish(维护者 ljxdsg12,分类:客户端):在对话框工具行「权限」按钮右侧增加「润色」,读当前草稿、由模型推断意图并改写成更清晰的提示词;润色完成后按钮变为「取消」,一键恢复润色前的原文。
这是什么¶
dsh-composer-polish 是 DSH 的 Cordis bundle 插件(npm 包名 dsh-composer-polish,当前版本 0.1.0,MIT 许可证)。它在 Composer 工具行里、conversation.input.left 插槽落位——视觉上在「权限 / 计划」按钮右边——提供 润色 能力:读取 InputState.draft,调用宿主侧 POST /dsh-composer-polish/polish,把结果写回输入框;组件自行保存润色前快照,不依赖撤销栈回退。
目录页:https://www.skillhub.cn/plugins/ljxdsg12/dsh-composer-polish
源码:https://github.com/ljxdsg12/dsh-composer-polish
界面落位¶
工具行大致布局如下(资料中的示意):
[ + ] [ 权限 ][ 计划 ] [ 润色 ] … [ 模型 ] [ 发送 ]
└── .modes ──┘ └ input.left ┘
插槽依据 @deepseek-ai/dsh-client-ui-conversation 中 .modes 容器之后的 conversation.input.left list seat。装好并启用后,可通过 Slots.listSubTree('conversation.input.left') 看到 occupant:registrant: 'dsh-composer-polish',id: 'prompt-polish',order: 10。
核心功能与交互¶
| 状态 | 按钮 | 行为 |
|---|---|---|
| idle | 润色 | 读草稿 → POST 润色端点 → inputActions.setDraft(结果) |
| busy | 润色中… | 请求在途,按钮禁用(超时 120s) |
| done | 取消 | 用组件内快照恢复润色前原文,回到 idle |
| error | 重试 | title 显示失败原因,点击重试 |
补充行为(与 README 一致):
- 输入框为空时「润色」禁用。
- 请求期间若用户自行改了草稿,返回后不会用旧结果覆盖新输入(按草稿快照比对)。
- 「取消」态下若手改草稿、发送清空或切换会话,回退锚点失效,按钮回到「润色」,不会把旧原文写进已改过的输入框。
- 模型认为原文已足够好、输出与原文一致时不写回,按钮直接回到「润色」。
Host 半(index.js)注册 exact 端点 POST /dsh-composer-polish/polish,使用当前会话默认模型与 ctx.get('llm').prepareCall / stream;带同源门禁、64KB 请求体上限、JSON 校验、12000 字草稿上限。浏览器半(client.js)通过 window.__ModuleLoader__.load 占插槽,用 useInput 读草稿、fetch 调端点。端点未走 Connection RPC,而是 webServer 的 kind:'exact',以避免自有前缀走 RPC 时 POST 落到静态兜底 405 的问题。
安装与启用¶
引擎要求:node >= 20,dsh >= 0.2.0-rc.1 < 0.3.0-0。资料给出的安装方式如下。
方式一:从本地目录安装(plugin_manager 的 install_bundle,target 为本仓库绝对路径)
方式二:发布到 npm 后,在 DSH 插件市场按包名安装
npm i dsh-composer-polish
装好即自动启用;profile 里是软链,改源码后重装可省。新增 bundle 需要完全退出 DSH 再重开才会加载。
- 改
index.js:宿主插件重载后生效(资料称端点可直接 200)。 - 改
client.js:刷新页面(Ctrl+R)后生效;未跑pnpm run dev:web时不会热替换。
安装前请自行阅读仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行,润色请求会经宿主调用你配置的 LLM provider。
典型用法¶
在 Composer 里写好草稿,点击「润色」。例如 README 中已验证的请求与响应:
POST http://127.0.0.1:57908/dsh-composer-polish/polish
{"draft":"帮我看下这个登录页面为啥一直500,日志里好像有null pointer"}
200 {"ok":true,
"intent":"排查登录页面持续返回 500 错误(疑似空指针)的原因",
"polished":"登录页面一直返回 500,日志里似乎有 NullPointerException。请帮我分析可能的原因并给出排查方向;如果需要更多信息(例如完整堆栈、相关代码、复现步骤),请列出你具体需要哪些内容。",
"provider":"deepseek-official","model":"deepseek-flash","truncated":false}
端口随本机 DSH 实例变化;日常只需在 UI 点按钮,无需手调 HTTP。若结果满意则直接发送;若要保留原草稿,点「取消」即可恢复润色前文本。
适用场景与注意¶
适合经常在 Composer 里写长提示、希望快速把口语草稿整理成结构化指令的 DSH 用户。不适合把插件当作「自动发送」或会话管理工具——它只改写输入框草稿,并负责润色前后的本地回退。
务必理解:InputActions.setDraft 是整体替换,且程序化写入不会单独进入可撤销历史,因此取消能力依赖插件内的 savedRef 快照,而不是编辑器 Undo。社区目录 skillhub.cn 与 DeepSeek / 幻方无官方从属关系,安装来源以你信任的仓库与 npm 包为准。
结尾¶
dsh-composer-polish 把「推断意图 + 润色提示词 + 一键还原原文」收进 Composer 工具行的一枚按钮,Host / Client 分工清晰,端点与插槽行为在 README 中有可复现示例。需要详情时可查阅 SkillHub 目录页 与 GitHub 仓库。