tianji-qingtian/dsh-composer-polish

DeepSeek Harness plugin: one-click ✨ polish for composer drafts — flash rewrite, auto fill-back · DeepSeek Har

dsh-composer-polish is a one-click draft polisher for the DeepSeek Harness composer: type a rambling draft, hit the ✨ Polish button in the input tool row, and a few seconds later the polished text replaces the draft in the input box — you preview, maybe edit, then send. No scoring, no evaluations: draft in → better draft out. The rewrite answers in the draft's language and keeps the user's voice (strips filler without turning text more formal, salesy, or robotic); code blocks, file paths, command lines, identifiers, and technical terms stay verbatim. Image attachments are never touched — only the text is replaced. Failures leave the draft untouched (console log only, no toasts).

Web UI Enhancements ★ 6 updated 2026-09-03 ⏳ pending
View on GitHub ↗

Install

dsh plugin --profile web add "github:tianji-qingtian/dsh-composer-polish#v0.1.5"

GitHub bundle install per README (pinned release tag): dsh plugin --profile web add "github:tianji-qingtian/dsh-composer-polish#v0.1.5", then restart the harness with that profile (dsh --profile web) — add only edits the profile files; a running instance does not hot-load the new bundle. Built lib/ artifacts are committed, so no build script runs at install time. The dsh CLI must be on PATH (npm install -g @deepseek-ai/dsh) or prefix commands with npx @deepseek-ai/dsh. Verify under Settings → Plugins that dsh-composer-polish is listed. Re-verified 2026-09-18: README install line now pins #v0.1.5 (entry had #v0.1.3).

Compatibility

DeepSeek Harness (dsh) web profile, developer preview — compatibility-breaking changes expected. Client button sits in conversation.input.right (the official seat for clickable controls beside the send button); the host half rides the built-in commands remote (no custom wire protocol). Zero-prefix flash rewrite with a single deepseek-v4-flash stream (reasoningEffort 'off', ~2000 token cap); the main model never runs and its prefix cache is never touched, with a one-time flash-class fallback via llm.listModels. Draft cap 50 KB; stale-edit guard via draftRev; /polish registers recordInput: false so the raw draft never lands in the session log. i18n zh/en.

Details

Recent updates

The current bilingual README (English primary) documents: features (the ✨ button, zero-prefix flash rewrite, fill-back not chat, fails silent, privacy, no custom wire protocol, i18n, language and voice following the draft), install with prerequisites, how it works (button seat, client → host commands remote, host rewrite, result channel, stale-edit guard, draft cap), and a behavior spec table from REQUIREMENTS.md.

FAQ

Does polishing send the message?
No — the polished text goes straight into the input box through inputActions.setDraft; nothing is sent until you press send. You can edit it again or polish a second time.
What happens if the rewrite fails?
It fails silent: a failed or empty rewrite leaves the draft untouched (console log only, no toasts), and double-clicks never fire a second request while the spinner is shown.
Is my raw draft stored in the session log?
No — the /polish command registers with recordInput: false, so the raw draft never lands in the session log; only the polished result is recorded in command/done.

Alternatives

timeance/dsh-approve-for-me · PerryLink/dsh-auto-review · whyihaveyou/dsh-suite

More plugins in Web UI Enhancements

Browse more in Web UI Enhancements

Guides for Web UI Enhancements plugins