dsh-composer-polish:Composer 输入框「润色」与一键回退

前言

在 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 一致):

  1. 输入框为空时「润色」禁用。
  2. 请求期间若用户自行改了草稿,返回后不会用旧结果覆盖新输入(按草稿快照比对)。
  3. 「取消」态下若手改草稿、发送清空或切换会话,回退锚点失效,按钮回到「润色」,不会把旧原文写进已改过的输入框。
  4. 模型认为原文已足够好、输出与原文一致时不写回,按钮直接回到「润色」。

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 仓库。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye