🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

草稿润色 ljxdsg12/dsh-composer-polish

DeepSeek Harness
ljxdsg1210 天前有提交已提供中文文档扫描:未发现敏感能力

把输入框草稿改写为清晰提示词,可一键还原原文

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ljxdsg12/dsh-composer-polish
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 10 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 1 处,展示前 1 条)
  • 发起网络请求
    client.js:137
    fetch(ENDPOINT, {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 输入框的润色按钮:重写你的提示词草稿,再取消即可回到原文。

README

由 DeepSeek 最新模型翻译生成
dsh-composer-polish · 对话框「润色」按钮 在 composer 工具行里、「权限」按钮右边加一个按钮:读你输入框里已经写好的草稿,先让模型判断你想干什么,再把草稿改写成一条高质量提示词。润色完成后按钮变成「取消」,按一下就回退到润色前的原文。 DeepSeek Harness composer 工具行的 Polish 按钮,放在权限控件右边。它读取你已经输入的草稿,推断你的意图,把草稿改写成更清晰的提示词,然后变成 Cancel 按钮,点一下就能恢复润色前的原文。 落位 conversation.input.left —— composer 工具行里 .modes 容器(权限 / 计划按钮)之后的 list seat,渲染点就在权限按钮右边: [ + ] [ 权限 ][ 计划 ] [ 润色 ] …
展开完整文档(README 剩余 1 节)
dsh-composer-polish · 对话框「润色」按钮

在 composer 工具行里、「权限」按钮右边加一个按钮:读你输入框里已经写好的草稿,先让模型判断你想干什么,再把草稿改写成一条高质量提示词。润色完成后按钮变成「取消」,按一下就回退到润色前的原文。

DeepSeek Harness composer 工具行的 Polish 按钮,放在权限控件右边。它读取你已经输入的草稿,推断你的意图,把草稿改写成更清晰的提示词,然后变成 Cancel 按钮,点一下就能恢复润色前的原文。

落位

conversation.input.left —— composer 工具行里 .modes 容器(权限 / 计划按钮)之后的 list seat,渲染点就在权限按钮右边:

[ + ] [ 权限 ][ 计划 ] [ 润色 ] … [ 模型 ] [ 发送 ] └── .modes ──┘ └ input.left ┘

DOM 依据:@deepseek-ai/dsh-client-ui-conversation/lib/client.js:19220-19256:

children: [ 加号按钮,
{ className: 'modes', children: [renderSlot('conversation.input.permission', {locked}),
renderSlot('conversation.input.plan', {locked})] },
renderSlot('conversation.input.left', {}) ]

交互

| 状态 | 按钮 | 行为 |
| idle | 润色 | 读 InputState.draft → POST /dsh-composer-polish/polish → 模型推断意图并润色 → inputActions.setDraft(结果) |
| busy | 润色中… | 请求在途,按钮禁用(请求超时 120s) |
| done | 取消 | inputActions.setDraft(润色前的原文),回到 idle |
| error | 重试 | title 显示失败原因,点一下重试 |

细节:

- 输入框为空时按钮禁用(没什么可润色)。
- 请求期间如果你自己又改了草稿,回来时不会覆盖你的新输入(按草稿快照比对)。
- 处于「取消」态时只要你手改了草稿(或发送清空、切换会话),回退锚点立即失效、按钮退回「润色」——不会把旧原文硬塞回一个已经被改过的输入框。
- 模型认为原文已经够好、输出与原文一致时不写回,按钮直接回到「润色」。

为什么必须自己存原文

InputActions.setDraft(text) 的语义是「整体替换草稿」:

Replace the whole draft (persisted-draft seed and programmatic writes).
Placeholder-sanitized; newlines split paragraphs; caret lands at the end.
Merged into history so a seed is not an undoable step of its own.

也就是说程序化写入不会在编辑器撤销栈里留下一个可撤销的编辑,Ctrl+Z 拿不回润色前的文本。所以原文由组件自己(savedRef)持有,取消按钮就是「回退到这份快照」。

没有用 captureInsertion() + insertText(text, span):那套契约是「在光标处插入一段可撤销文本」,只能增不能减,做不到「整体替换」。整体替换只有 setDraft。

两半的分工

- index.js(Host 半):注册 exact HTTP 端点 POST /dsh-composer-polish/polish。
取当前会话默认模型(ctx.get('agentDefaultModel').currentSelection()),
用 ctx.get('llm').prepareCall({provider, model, ...}) 准备,再把 prepared.config 原样展平回传进 prepared.stream({...prepared.config, system, messages}) ——少传字段会抛 INVALID_PREPARED_CALL。返回 {ok, intent, polished, original, provider, model}。
端点自带同源门禁(Sec-Fetch-Site,退化到 Origin/Host 比对)、64KB 请求体上限、 JSON 校验、12000 字草稿上限。
- client.js(浏览器半):window.__ModuleLoader__.load 形式的 slot occupant,
标准 props 里的 useInput(s => s.draft) 读草稿、inputActions.setDraft() 写草稿,
用 fetch 调上面的端点。

Host 端点没走 Connection RPC:本机 dsh-liuyao 的实测结论是插件自有前缀走 RPC 时回调可能不触发,POST 会落到前端静态兜底返回 405;webServer 的 kind:'exact' 端点总是优先于静态兜底。

文件

dsh-composer-polish/
├── package.json dsh.bundle.patch → cordis.patch.yml;dsh.client.platform = web ├── cordis.patch.yml insert: id dsh-composer-polish ├── index.js Host 半:模型调用 + exact 端点 ├── client.js 浏览器半:按钮 + 润色/取消状态机 ├── README.md └── LICENSE MIT

安装 / 重载

方式一:从本地目录安装(plugin_manager 的 install_bundle,target 用绝对包目录)
target = <本仓库绝对路径>
方式二:发布到 npm 后,在 DSH 的插件市场里按包名安装
npm i dsh-composer-polish

装好即自动启用;profile 里是软链,改源码后重装可省。新增 bundle 需要完全退出 DSH 再重开才会加载。

- 改 index.js:宿主插件重载后立即生效(本插件已验证:端点直接 200)。
- 改 client.js:刷新页面(Ctrl+R)后生效;没跑 pnpm run dev:web 时不会热替换。

已验证

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}

Slots.listSubTree('conversation.input.left') 显示 occupant
{registrant: 'dsh-composer-polish', id: 'prompt-polish', order: 10, active: true}。
预览分享卡片长什么样 ↓ljxdsg12/dsh-composer-polish
分享 · DeepSeek Harness Hub
ljxdsg12/dsh-composer-polish

把输入框草稿改写为清晰提示词,可一键还原原文

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部