DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Composer Polish — DSH Plugin for DeepSeek Harness
← Plugins
C

dsh-composer-polish

Composer Polish

Composer draft polisher for DeepSeek Harness: a ✨ button in the composer tool row rewrites the current draft with a zero-prefix flash call and fills the polished text straight back into the input box.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:tianji-qingtian/dsh-composer-polish#c952e968183c00b5401557c81af97e75d7c0b471
READMECompatibilityVersions
polish button demo

Compatibility and provenance

Composer Polish is published as dsh-composer-polish and currently resolves to version 0.1.5. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/3/2026

Versions

0.1.5stable
9/3/2026
0.1.4stable
8/25/2026

Related plugins

Loading related plugins…

Latest
0.1.5
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 6
Weekly downloads
0
Last push
9/3/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in productivity-workflow.

Deepseek Ipptdeepseek-ipptiPolloWork PPT Studio and its curated slide templates as a native DeepSeek Harness conversation view.Mnemondsh-mnemonComposable three-tier memory control plane for DeepSeek Harness: persistent runtime context, searchable project documents, pluggable long-term memory, guarded strategies, WebUI, and headless tools.Codex Ui@michengai/dsh-codex-uiDSH Codex UI — 为 DeepSeek Harness Web 提供 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航 · A Codex-style sidebar, workspace session tree, global search, and turn navigation for DSH WebRewind Plugindsh-rewind-pluginIn-window conversation rewind with workspace file restore · 同窗口内对话回退并可还原工作区文件

README

dsh-composer-polish

One-click draft polisher for the DeepSeek Harness (dsh) 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 harness is in developer preview and iterates quickly — expect compatibility-breaking changes.

中文说明见 README.zh.md。

Features

  • ✨ button in the tool row — sits in conversation.input.right, the official seat for clickable controls beside the send button. Disabled while the draft is empty or pure whitespace, shows a spinner while polishing, and never lets double-clicks fire a second request.
  • Zero-prefix flash rewrite — the host half rewrites the draft with a single deepseek-v4-flash stream (reasoningEffort: 'off', ~2000 token cap). The main model never runs and its prefix cache is never touched. If the pinned model id is missing from the provider catalog, it retries once with a flash-class model discovered via llm.listModels.
  • Fill-back, not chat — the polished text goes straight into the input box through inputActions.setDraft, the official public draft write path. You can edit it again or polish a second time; nothing is sent until you press send. Image attachments are never touched — only the text is replaced.
  • Fails silent — a failed or empty rewrite leaves the draft untouched (console log only, no toasts).
  • Privacy — 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.
  • No custom wire protocol — Client→Host rides the harness's built-in commands remote (the same channel the shipped / commands use).
  • i18n zh/en — button label and tooltip follow the harness locale service.
  • Language and voice follow the draft — the rewrite answers in the draft's language and keeps the user's voice (it strips filler but won't turn the text more formal, salesy, or robotic); code blocks, file paths, command lines, identifiers, and technical terms stay verbatim.

Screenshots

The ✨ Polish button in the composer tool row, next to the send button:

polish button demo

Install

Prerequisites

The dsh CLI must be on your PATH. If you only ever ran the harness through npx, dsh is not installed and you will get zsh: command not found: dsh — install it globally first:

npm install -g @deepseek-ai/dsh

pnpm add -g @deepseek-ai/dsh also works if your pnpm global bin dir is on PATH (otherwise pnpm asks you to run pnpm setup first). Alternatively skip the global install and prefix the commands below with npx @deepseek-ai/dsh ….

Add the bundle

# 1. add the bundle to your web profile (pnpm-backed; the built lib/ artifacts
#    are committed in this repo, so no build script runs at install time)
dsh plugin --profile web add "github:tianji-qingtian/dsh-composer-polish#v0.1.5"

# 2. restart the harness with that profile — `add` only edits the profile
#    files; a running instance does not hot-load the new bundle
dsh --profile web

After the restart the ✨ button appears in the composer tool row, next to the send button, and the /polish command is registered once the host half loads. Verify under Settings → Plugins that dsh-composer-polish is listed.

How it works

PieceMechanism
Button seatconversation.input.right list slot (session scope); the standard kit's selector hook useInput((s) => s) reads the draft, inputActions.setDraft() writes it back
Client → Hostbuilt-in commands remote, hard-injected (inject: ['remote', 'remote.commands']): ctx.remote.commands.execute(sessionId, '/polish ' + draft) — the same roundtrip the shipped slash commands use; no custom RPC
Host rewrite/polish command handler → zero-prefix ctx.llm.stream on deepseek-official / deepseek-v4-flash (reasoningEffort: 'off', maxTokens 2000), one-shot, with a one-time catalog fallback when the pinned model id is unavailable
Result channelhandler returns { kind: 'success', text }; the client reads it from CommandExecution.result.text and fills it back via setDraft
PrivacyrecordInput: false → command/run omits args, so the raw draft is never written to the session log
Stale-edit guardthe client captures draftRev at click time; if the draft changed while polishing, the result is discarded instead of clobbering newer edits
Draft capboth halves cap the draft at 50 KB; longer drafts are truncated client-side before sending

Behavior spec (from REQUIREMENTS.md)

#ScenarioBehavior
1Non-empty draft, click ✨read draft → flash rewrite → fill back
2Empty / whitespace-only draftbutton disabled
3Rewrite fails / returns emptydraft untouched, console log only, no toast
4Rewrite in flightbutton shows spinner, repeat clicks blocked
5Draft has image attachmentsonly the text is polished; images untouched
6Chinese / English draftrewritten in the draft's language
7Code blocks / lists / technical termsstructure kept, code verbatim, no accuracy changes

Build

pnpm install
pnpm build   # tsdown: lib/index.js (ESM host) + lib/client.js (ModuleLoader client bundle)

Known limitations

  • The fill-back is skipped when the draft changed during the rewrite (stale-edit guard) — by design, your newer edits always win.
  • Drafts over 50 KB are truncated before the rewrite (a draft of that size is beyond what a single flash call can meaningfully restructure anyway).
  • The polished result is recorded in command/done (the commands channel's own lifecycle log); only the original draft is kept out of the log via recordInput: false.
  • deepseek-v4-flash is pinned as the rewrite model; if the harness renames model ids, the catalog fallback picks a flash-class replacement and logs a line.

License

MIT