Preface

When doing agent-based or long-conversation debugging in DeepSeek Harness (DSH) Desktop, a common requirement is: an assistant reply was written incorrectly, the chain-of-thought contains a piece of reasoning that shouldn’t be shown to the model, or you want to rewrite the historical context into what the model “believes” was said, so that subsequent turns can continue along a new narrative. Changing only what’s displayed on the page isn’t enough—the model reads the conversation log; hand-editing .jsonl.zstd often requires a restart and can easily conflict with host-side validation. The community plugin dsh-reply-forge-v3 maintained by kinggod899 (npm package name dsh-reply-forge-v3) targets this problem: in the conversation UI, select a target block (including collapsed chain-of-thought), write the change into the “model-visible” conversation state, and have the model adopt it in the next turn via the online path without restarting DSH. This plugin is classified as a client-side plugin and is listed in the SkillHub plugin catalog; the GitHub repository currently has about 6 stars and has been included in the awesome-dsh-plugin ecosystem list.

Below, we describe what it is, how it differs from the previous two generations, how to install and use it, and compatibility considerations when disabling the plugin. The DSH ecosystem follows the principle “everything is a plugin”; SkillHub and similar directories are community resources and have no official affiliation with DeepSeek / 幻方 (High-Flyer).

What Is This

dsh-reply-forge-v3 is a plugin for the DSH Desktop client (current package version 3.3.0, license MIT). Maintained by kinggod899; repository: https://github.com/kinggod899/dsh-reply-forge-v3.

In one sentence: it provides a “forge” entry next to every AI reply, allowing you to edit the body text or chain-of-thought; after writing, in every subsequent turn of that conversation, the model will only see the version you changed (this takes effect immediately when writing to a live conversation while online). In implementation, v3 uses a message projection provided by the host: it appends its own event type reply-forge/patch, and the projection collapses/folds out the rewritten message, rather than performing a surface replacement on assistant/message (the host has hard constraints on this).

Differences from v1 / v2

All three generations are separate repositories with separate plugin IDs and can be enabled independently, but the README explicitly recommends not enabling them simultaneously—they share the same message action bar, and enabling them together will show multiple entries. The install script by default removes the two earlier generations from bundles.

v1 v2 v3
What it changes Page display Persisted conversation file Live conversation object
Does the model see it? No Yes Yes
When it takes effect Immediately (local only) Requires restarting DSH Immediately
Can it change chain-of-thought? No No Yes
Implementation localStorage override Rewrites .jsonl.zstd message projection

v3 uses v2’s file-rewrite approach as a fallback: if the conversation is in memory, it writes to the live conversation; if it is not in memory, it writes to disk (writing to disk requires reloading to take effect). v2 repository: https://github.com/kinggod899/dsh-reply-forge-v2.

Core Features (Documented)

  1. In-conversation editing: Move your mouse over an AI reply and click “Forge”; in the editor, choose the target (any editable block in the current conversation, including collapsed chain-of-thought on the page), choose the write method (default “Auto”), edit the text, and click Write Forge. Before writing, a confirmation dialog appears, restating how this write will take effect.
  2. Two user-facing exits: Local rendering only (Ctrl+Enter; changes only the appearance on this page, invisible to the model, reversible) and Write Forge (changes the conversation the model sees; online writing to a live conversation takes effect immediately, or takes effect after reload on the disk-write path; irreversible).
  3. Three write methods (choose one in the UI): Auto (online if in memory, otherwise write to disk; recommended), Online only (immediate), Disk only (effective after reload).
  4. Modify the pending send queue (after v3.1): For inbox messages that haven’t been sent to the model yet, you can use the official session.updateQueue; the entry point is on bubbles with data-pending-steering. It locates targets by text matching, and will refuse to write when there are attachments or non-unique matches (see the README’s error description).
  5. Offline command line: After quitting DSH, you can use scripts/forge-session.mjs to list sequence numbers (seq), and to change the body text or chain-of-thought (--kind text / reasoning / both).
  6. Conversation repair: If early writes lack ignorable: true and the host persistence gate refuses to read them, you can use the repository’s 修复会话.bat to run a read-only diagnostic or use apply to add the missing flag (back up first).

Persistence-wise, before entering host persistence, v3 uniformly adds ignorable: true to its own events so that conversations can still be opened when the plugin is not loaded, and forged content silently reverts to the original text. For the full mechanism and failure codes, see PLAN.md and 使用说明.md in the repository.

Installation and Activation

Prerequisites: DSH Desktop is installed. Static configuration is loaded only at startup, so after installation or after modifying bundles, you must fully quit and restart DSH.

Install by entering the package name dsh-reply-forge-v3 in the DSH “Plugin Manager”; or after closing DSH, run in a terminal:

dsh plugin --profile desktop add dsh-reply-forge-v3

The Plugin Manager can switch between the official npm registry, a China mainland mirror, or a custom registry.

Route 2: zip + script (requires Node.js or the Node bundled with DSH)

In the extracted directory, double-click 安装插件.bat. The script creates a junction, writes bundles and dependencies into package.json, and registers the lockfile, but does not run pnpm install. If Node is not available, the bat prints a manual four-step guide.

Other bats: 启用插件.bat, 关闭插件.bat (when startup errors occur, you can roll back by removing it from bundles). If you want to keep v1/v2 alongside for comparison: node scripts/install.mjs --keep-v2 --keep-v1.

The plugin runs inside the DSH process. Before installation, you should review the repository source code and the MIT license to ensure it meets your security and compliance requirements.

Typical Usage

Quick UI Flow

  1. Move your mouse over any AI reply and click “Forge”;
  2. Select the target block and write method (default Auto), edit the body text or chain-of-thought;
  3. Click “Write Forge”; after confirming the prompt, it completes. On success, the UI shows a green acknowledgment, and the model continues according to the rewritten content in the next turn.

If you only want the page to look better locally and don’t want the model to treat it as real, use Ctrl+Enter for “Local rendering only”.

Offline Modification of Conversation Files (Quit DSH First)

List editable blocks:

node scripts/forge-session.mjs --session <会话id> --list
node scripts/forge-session.mjs --session <会话id> --list --kind reasoning

Try a rewrite:

node scripts/forge-session.mjs --session <会话id> --seq 42 --block-index 1 \
  --kind text --text "改后的正文" --dry-run

--kind can be text, reasoning, or both (default text).

Use Cases and Notes

Who it’s for: Developers and heavy users who need to correct historical assistant wording in DSH, unify chain-of-thought with body text, or perform controlled “context injection” without restarting every time or manually crafting jsonl.

Must know:

  • Writing a forge changes the conversational facts the model relies on subsequently; this is an irreversible semantic operation and should only be used in your own environment or in explicitly authorized scenarios.
  • The plugin runs with the current DSH process permissions; for any third-party plugin, it is recommended to review the source code before installation.
  • To disable the plugin normally, use 关闭插件.bat or remove the bundle in the manager and then restart DSH; hot-removing while running may trigger host errors such as session message projection "reply-forge/patch" was removed.
  • Do not enable it together with v1 or v2; unlike technical approaches such as dsh-chat-thinking-editor, v3 emphasizes its own events + ignorable so that conversations remain readable on cold start even when the plugin is absent.

The repository contains 321 tests / 14 suites (some require the local package @deepseek-ai/dsh-session; if missing they will be SKIPped), with P0 coverage for persistence and the ignorable shim. You can run node --test "tests/*.test.mjs" to verify.

Conclusion

dsh-reply-forge-v3 consolidates “change what the assistant said, including chain-of-thought, and have the model adopt it online immediately” into a single workflow inside the DSH client, and aligns with host persistence rules via message projection and the ignorable flag. Directory page: https://www.skillhub.cn/plugins/kinggod899/dsh-reply-forge-v3; source code and full documentation: https://github.com/kinggod899/dsh-reply-forge-v3.