**Inline-edit & recall your own user messages in the DeepSeek Harness Web UI — lazily, seamlessly, and without ever losing your work.**
Click your own message bubble to edit it in place; hit the recall button beside copy to withdraw it and everything after it. Nothing is ever really changed until you commit — the conversation, the model context, and the session log stay untouched until you press **Confirm** (rewrite) or **Send** (recall).
> Compatible with DeepSeek Harness Web (**2.4.0 requires dsh 0.1.2-rc.1+**; users on dsh 0.1.1-rc.2 and older hosts, please stay on **2.3.1** — the final release of that line, fully functional, no further features). Built on official extension points only — no source patches.
---
## Features (what we've built)
### Recall (撤回) — done, end to end
- **Recall key** next to the official copy key on every user message.
- **Inline confirmation capsule** (dsh-styled grey pill: `撤回这条消息及其后 x 条提问?` + white-on-black **Confirm / Cancel** pills).
- **Lazy commit**: confirming only fills the composer — the real truncation happens when you press **Send**. Close dsh mid-way and nothing in the conversation changes.
- **"正在修改" bar** inside the composer (divider + label + round ×) — × cancels the recall and restores your original draft.
- **Overwrite / merge** fill modes; in overwrite mode your pre-recall draft is always restored after send or cancel. Zero information loss.
- **Live count of what will be removed** (user questions only, toggleable) — 0 remaining shows `是否撤回这条消息?`.
- **One pending operation per session**, drafts persist per session across reloads and tab switches.
- **Seamless replacement**: send executes the recall — the original session is **archived**, a **same-titled** session (history truncated before the target message) takes its place, and your edited text is sent automatically. Feels like editing the original conversation, not forking a new one.
### Rewrite (inline edit) — shipped (M2)
- Click the bubble → inline editor (original Markdown source preserved), Esc cancels / Ctrl+Enter confirms.
- **Three editable widths** (Compact: starts at bubble width, up to 360px / Standard: fixed 360px / Expanded: 748px), auto-grow + inner scroll.
- Edit mode keeps the recall key (hides copy); **Confirm** = truncate-style edit-resend: truncate → archive original → same-titled session → edited text sent automatically.
- Edit drafts persist per session (survive tab switch / refresh).
- **Full image support for Rewrite — recall key & bubble edit**: images send together with your edited text; inside bubble edit you can delete (×), paste or drag-and-drop new images, switch model & reasoning effort on the spot, and your edit progress survives a page refresh. No comparable feature in any competitor.
### Settings — shipped (M3)
- **Settings → Plugins → Plugin config**: an official-style collapsible card (click the header to expand/collapse); UI language follows the interface (中文 / English / 日本語).
- Every option applies instantly: bubble edit toggle, show recall key when bubble edit is off, recall confirmation capsule, recall visual mode (Simple / Minimal / Info), recall stats scope (user questions only), composer fill mode (Overwrite / Merge), edit width (Compact / Standard / Expanded / Custom).
### Draft auto-backup — shipped (M3)
- A pending draft left untouched for more than 10s is auto-backed-up to a local file (refreshed every 5s); the backup is removed once the draft is handled (Confirm / Send).
- Location: `$DSH_HOME/dsh-easyrewrite/backups/