dsh-prompt-polish
Prompt polish ✨ — one-click rewrite of rough input into a structured professional prompt for DeepSeek Harness WebUI
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 26, 2026
- Updated
- Aug 26, 2026
Introduction
dsh-prompt-polish
A DeepSeek Harness WebUI plugin that adds a one-click Prompt Polish ✨ button to the input toolbar. Rewrite a rough, fragmented request into a structured, professional prompt — written straight back into the input box.
What it does
- You type a rough request into the input box.
- Click ✨ 润色 at the right end of the toolbar.
- The plugin calls your configured LLM (DeepSeek by default) to rewrite the request into a clear, actionable prompt.
- The polished text replaces your draft. Review it, then send normally.
Polish is non-destructive and reviewable — nothing is sent automatically.
Install
If your profile uses dshmarket, install from the marketplace UI. Otherwise:
dsh plugin --profile web add dsh-prompt-polish
Then restart the WebUI so the bundle is loaded.
Building from source (e.g. while developing): the published package ships pre-built
lib/artifacts. If you must build yourself, runpnpm install && pnpm build(usestsdown).
Configure
The plugin is mounted via its cordis.patch.yml. Override defaults by supplying config in the patch, or pass provider/model per request from the client:
- insert:
- id: prompt-polish
name: 'dsh-prompt-polish'
config:
provider: openrouter
model: deepseek/deepseek-v4-flash-0731
maxTokens: 2000
| Setting | Default | Description |
|---|---|---|
provider | (from request or unset) | LLM provider to use for polish |
model | (from request or unset) | Model id to use for polish |
maxTokens | 2000 | Output token cap per polish pass |
If neither the config nor the request supplies provider/model, the request is rejected (no model route available) — configure one of the two so polish is always routable.
Endpoint
POST /dsh-prompt-polish/polish (WebUI server, same-origin only)
{ "text": "..." }
Response:
{ "ok": true, "text": "the rewritten prompt", "truncated": false, "provider": "...", "model": "..." }
text— the polished prompt.truncated—truewhen the model hit the token cap; the text is still usable and is written back into the box.- On failure:
{ "error": "..." }with4xx.
The endpoint enforces same-origin (Origin must match Host) to prevent cross-site abuse.
Architecture
- Server (
src/index.ts) — registers the HTTP route, streams the LLM viactx.llm.stream+BlockAssembler, and returns the rewritten text. Peer deps:@deepseek-ai/cordis,@deepseek-ai/dsh-llm. - Client (
src/client/index.tsx) — registers a button on theconversation.input.rightslot, fetches the endpoint, and writes back viainputActions.setDraft. CSS is self-contained (one injected<style>tag) so the browser bundle builds with a plaintsdownconfig.
Both halves build with tsdown. The client bundle is emitted in DSH's window.__ModuleLoader__.load({ id, factory }) format and externalizes react / react/jsx-runtime to the browser module table.
License
MIT. See LICENSE.