DSH-EasyRewrite
Manifest valid★ 128DSH Web's most seamless message recall & re-edit plugin — native experience, strong compatibility, simple toggleable features, rich settings, modern lightweight UI framework. The most seamless message recall & re-edit plugin for DSH Web — native experience, strong compatibility, simple toggles, rich settings, modern
Edit and recall your own messages inline, right inside DeepSeek Harness Web — lazy, traceless, zero-loss.
Click your message bubble to edit in place; click the recall button next to copy to recall that message and everything after. All changes take effect only after you confirm — before pressing "Confirm" (edit) or "Send" (recall), the conversation, context, and logs stay untouched.
Compatible with DeepSeek Harness Web (2.4.0 requires dsh 0.1.2-rc.1+; users on host 0.1.1-rc.2 or earlier should stay on 2.3.1 — the final release of that line, fully functional, just no longer receiving new features). Implemented purely via official extension points; DSH source code is not modified.
📸 Visual Tour
✨ 独创双区拖拽与协同舒展:气泡编辑拖入文件智能分流(释放到上方气泡添加至正在编辑的消息,释放到底部 2.5x 平滑放大的输入框暂存新对话,双区隔离零串发)
Quick Start
# npm一键安装
dsh plugin --profile web add dsh-easyrewrite
Implemented Features
In-Place Bubble Editing (Rewrite) — Implemented (M2/M4)
- Click to Edit: Single-click your own message bubble to enter in-place editing mode directly (preserving the original Markdown source). Esc to cancel / Ctrl+Enter to confirm.
- Three editing width presets: Compact (starts at bubble width, capped at 360px) / Standard (fixed 360px) / Expanded (fills the message row) / Custom, with auto-height and smooth internal scrolling.
- In-place model & reasoning-level switching: The edit box includes a native model selection dropdown, allowing you to switch the resend model and reasoning depth (Reasoning Effort) for the current message.
- Full image-message editing and drag-and-drop add/remove: Multi-image messages are laid out in equal-width thumbnail rows, supporting individual
×removal, clipboard paste, and drag-in for new images; edit progress is preserved as-is after refresh.
Recall — End-to-End Complete
- Seamless native interaction: A recall button sits next to the official copy button on every user message, appearing on hover.
- Inline confirmation capsule: dsh official-style minimalist gray-white capsule(
撤回这条消息及其后 x 条提问?+ 「确定/取消」),with a live count of questions to recall (0 shows「是否撤回这条消息?」). - Lazy commit &「正在修改」banner: Confirming only backfills the draft to the bottom input box and shows an「正在修改」banner; truncation runs only on「发送」. Click
×to cancel and restore the original draft — session and context stay untouched. - Traceless replacement & folding: In edit/recall mode, history replies after the target are auto-folded; after resend the old session is archived and a same-named new one takes its place, feeling native.
Version Pager (< X >) — Implemented (M3)
- Seamless multi-version switching: After each recall or edit-resend, a
‹ X/N ›native-style pager is embedded in the action area of that query's last answer. - Context linkage: Click arrows (or ←/→) to switch branch versions; the entire downstream context auto-refreshes to follow.
- Viewport anchoring and archive swap: Viewport stays anchored without jumping; only one active session is kept, and all archived versions can be restored from Settings.
Settings Center & Personalization (Settings) — Implemented (M3/M4)
- Official-style collapsible config card: Seamlessly integrated under Settings → Plugins → EasyRewrite, with UI language auto-syncing with the system (中文 / English / 日本語).
- Rich granular options:
- Master toggle for bubble editing, fallback recall button when bubble editing is off
- Edit width (Compact / Standard / Expanded / Custom)
- Recall confirmation capsule toggle, show images on pending review, three recall visual modes (Simple / Minimal / Info)
- Shortcut recording (one-click recall of the most recent message when input is unfocused)
- Backfill conflict mode (overwrite mode fully restores the original draft after send/cancel, zero loss)
- Version history tree browsing and one-click manual restore
- Built-in self-update detection and one-click upgrade
Auto-Backup of Drafts — Implemented (M3)
- When a pending draft has been untouched for more than 10 seconds and new changes arrive, it is automatically overwritten and backed up to a local file; it is safely deleted the moment “Confirm / Send” completes.
- Backup location:
$DSH_HOME/dsh-easyrewrite/backups/<会话ID>.json. - Recovery fallback: restores from backup only when there is no pending state locally — it will never overwrite a draft currently being edited.
What Sets It Apart
| Capability | dsh-easyrewrite | Other recall/edit plugins |
|---|---|---|
| Recall | ✅ | Basic feature |
| Traceless replacement (achieving a "natively supported" feel, invisible edit-resend) | ✅ | Basic, but we do it more thoroughly |
| Lazy commit (context actually changes only after confirm, zero modifications if cancelled mid-way) | ✅ | Some competitors modify directly, causing various cache-hit/context issues |
| In-place bubble editing (Rewrite) | ✅ | No competitor currently offers this |
| Version pager < X > (switch history versions, a golden design validated countless times by Chatbox) | ✅ | No competitor currently offers this |
| Draft persistence + timeout auto-backup + crash recovery (robust recovery logic protecting every thought) | ✅ | No competitor currently offers this |
| Edit-resend preserves image attachments | ✅ | No competitor currently offers this |
| Purely official extension points (zero source patches, uninstall restores everything) | ✅ | Competitors rely on source patches, hard to uninstall, complex dependencies |
| Trilingual UI & i18n support | ✅ | Almost no thorough i18n support; we natively support multilingual with 3 preset languages |
| All features individually toggleable | ✅ | No competitor does this better than us |
Design Philosophy
1. Simple & Compatible — easy to use, easy to learn, great compatibility
- Intuitive: click a bubble to edit, undo sits next to the copy key — no new concepts or entry points.
- Sensible defaults: defaults are optimal for most cases; works out of the box, no config needed.
- Compatibility is a hard promise: only official extension points are used (keyed slot overrides, official fork RPC, official components and design tokens); no source modifications, no reliance on fragile internal APIs; we proactively adapt when DSH upgrades — never trade "modifying your install" for features.
- Uninstall restores everything: no leftover config, no changes to official files.
2. Faithful, Seamless & Invisible — restore the original experience, traceless and imperceptible
- UI language fully follows dsh native style (gray-blue palette, rounded corners, capsules, official icons), with dark/light theme auto-adaptation — looks like an official feature, not "another plugin skin".
- Original interactions preserved as-is: copy button, hover send-time, bubble appearance — nothing missing.
- Imperceptible: in daily use you barely notice the plugin exists — every feature is where you expect it, every result matches intuition; no popups, no interruptions.
- Lazy commit is the foundation of restoring the experience: entering edit or confirming recall are just local draft states; context is only truly modified on "Confirm" (rewrite) or "Send" (recall) — close dsh and nothing has changed.
- Traceless replacement: after recall, the perception is "the original conversation was edited" — old session archived, same-named new session replaces it, modified text auto-sent, with no jarring "a new conversation popped up" feeling.
- Bubble editing (coming soon): click to edit in place, WYSIWYG — a natural extension of the same traceless philosophy.
3. Persistent & Accident-Proof — persistent retention, zero loss on mishaps
- Edit/undo drafts are persisted per session: switch chats, refresh, restart dsh — progress resumes as-is, no "lost halfway through."
- In override mode, the original pre-refill draft is restored on send or cancel — no data loss on any path.
- Idle pending drafts auto-back up to a local file (deleted on completion), providing a safety net even in extreme cases.
- Every key step has confirm and undo paths: confirm pill, × cancel, single-pending constraint — typos recoverable, no data loss.
4. Comprehensive Logging — log everything, diagnose fast
- Full-chain instrumentation: every key client step (load, confirm, pending, send hook, fork, resume) is auto-reported to host, unified into
$DSH_HOME/dsh-easyrewrite.log. - Uniform JSON-line format (time / level / tag / message / data) — one reproduction locates the issue, no repeated problem descriptions needed.
- Host behavior is also logged (requests, rejection reasons, exceptions); front-end and back-end form one auditable chain.
- Logs only record local behavior; no data is uploaded.
5. Keep Moving — continuous updates, proactive compatibility
- Follows DSH version releases (rc.x → stable); upstream API changes are adapted to promptly.
- Semantic versioning + CHANGELOG; every change is traceable; breaking changes are announced in advance.
- Community-driven: issues/PRs actively addressed; new ideas and scenarios continuously folded into the roadmap.
Installation
# npm 已发布(推荐)
dsh plugin --profile web add dsh-easyrewrite
# 或从 GitHub
dsh plugin --profile web add github:Renzic-Stone/DSH-EasyRewrite
Restart dsh web, then hard-refresh the page with Ctrl+Shift+R.
Recall timing note: DSH's fork can only truncate at closed-turn boundaries; messages within an unfinished turn cannot be recalled yet — wait for the reply to complete. (The UI will show "The turn containing this message has not ended yet…")
Debugging
Every client step is reported to host and written to the unified log:
$DSH_HOME/dsh-easyrewrite.log # 例如 ~/.dsh/dsh-easyrewrite.log
JSON line format: { t, level, tag, message, data }.
Project Structure
dsh-easyrewrite/
├── lib/index.js # host half:边界解析 + /bubble/recall、/bubble/log
├── src/client.src.js # client 模板(图标构建期内联)
├── assets/ # 撤回/编辑图标(PNG,深色模式 CSS invert 自适应)
├── build.mjs # assets → data-URL → lib/client.js
├── DESIGN.md # 完整交互设计(v1.0,20 项产品决策)
├── PROJECT_PLAN.md # 路线图、架构、git 工作流
└── docs/ # api-facts、m0-verify
License
MIT
Compatibility
Versions
| Latest version | Published | Size |
|---|---|---|
| 0.2.0 | — | — |
| 0.3.0 | — | — |
| 0.4.0 | — | — |
| 1.2.2 | — | — |
| 1.2.1 | — | — |
| 1.0.0 | — | — |
| 1.3.1 | — | — |
| 1.3.2 | — | — |
| 1.3.3 | — | — |
| 1.3.4 | — | — |
| 1.3.5 | — | — |
| 2.4.1 | — | — |
| 2.4.0 | — | — |
| 2.0.0 | — | — |
| 2.2.0 | — | — |
| 2.3.0 | — | — |
| 2.5.1 | — | — |
| 2.5.3 | — | — |
| 2.5.4 | — | — |
| 2.5.0 | — | — |
Comments
Loading…
Similar plugins
by kyle123740
每条消息可撤回 / 删除 / 删除此处及之后 —— DSH 插件(append-only 墓碑,模型上下文与界面同步)。Per-message recall & delete for DeepSeek Harness. Requires dsh >= 0.1.7.
★ 3
↓ 37/wk
MIT
JavaScript
Oct 23, 2026
dsh plugin --profile web add dsh-message-recallby hg1048596-pixel
DeepSeek Harness (DSH) 插件:在模型读取前撤回已发送的文字消息,支持单条与全部撤回。A DeepSeek Harness plugin that recalls sent-but-unread text messages before the model reads them — one-by-one or all at once.
★ 126
MIT
JavaScript
Oct 3, 2026
dsh plugin --profile web add dsh-recall-unreadby JoukoPuro
一个 DeepSeek Harness(DSH)插件: 在 Web 输入框的工具行中添加一个 ✨ 图标按钮。点击后选择打磨风格,已接入的大模型 会把你草稿中的提示词改写得更专业、更易被 AI 理解 。A DeepSeek Harness plugin: icon-only composer button that rewrites your prompt via the connected LLM
★ 8
↓ 101/wk
MIT
JavaScript
Oct 17, 2026
dsh plugin --profile web add dsh-prompt-polishby yakoylp
DSH 本地通知栏插件:侧边栏【通知】入口 + 全屏通知中心(时间筛选/搜索/未读已读/删除/详情一键复制),notify_add agent 工具 + CLI 写入,JSON 持久化,实时刷新,界面跟随 dsh web 语言切换。Local notification center for DeepSeek Harness: notify_add agent tool & CLI, live re
★ 0
MIT
JavaScript
Sep 10, 2026
dsh plugin --profile web add dsh-localnotifyby SiriLee
DSH 插件:真正便捷无感的同窗口内对话回退,从不新建分支;自带轻量工作区备份,可一并还原文件(完整 Claude Code /rewind 语义)。 · DSH plugin: genuinely effortless in-window conversation rewind — never forking a new session; ships a lightweight workspac
★ 211
↓ 5.6k/wk
MIT
TypeScript
Oct 28, 2026
dsh plugin --profile web add dsh-rewind-pluginby jh1016248
DSH(DeepSeek Harness)插件:会话标题栏一键导出当前会话 —— 「保存 MD」下载纯净 Markdown,「保存 HTML」下载带左侧目录、表格与代码块渲染的网页。自动过滤模型思考过程与工具调用记录,只保留用户与助手的正文,适合归档、分享与撰写报告。安装:dsh plugin --profile web add dsh-save-session
★ 0
↓ 690/wk
MIT
JavaScript
Sep 11, 2026
dsh plugin --profile web add dsh-save-session