DeepSeek Harness plugin

dsh-ui-digest

Turn-digest overview tab for the DeepSeek Harness (dsh) Web UI: fold every user message and its AI reply into one line — what you asked, a one-sentence summary of what the AI did, and tool-action

Jump to install

Source facts

Repository
rocklau/dsh-ui-digest
Latest update
Aug 21, 2026
Category
Tools & Capabilities
GitHub stars
0
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-21

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/rocklau/dsh-ui-digest
Plugin: dsh-ui-digest
Author: rocklau

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

dsh-ui-digest

A turn-digest overview tab for the DeepSeek Harness (dsh) Web UI.

Long agent replies — hundreds of lines of text, tool cards, diffs, reasoning — bury what you actually asked and what the AI did each round. This plugin adds a Overview (全览) tab to the conversation view ring that folds the whole session into one round per user message:

  • the message you sent,
  • a one-sentence summary of the AI reply (first sentence of the settled reply text, truncated at 160 chars),
  • tool-action chips grouped by category (commands run, files edited, files read, web searches, subagent delegations, …) with file paths extracted from edit/write arguments.

Click a row to expand the full user message and the full reply text. The summary is heuristic, deterministic and purely client-side — no LLM call, no RPC, zero cost — and updates live while a turn streams.

![Overview tab in a real session](assets/digest-overview.png)

Features

  • One line per round — user message, one-sentence AI summary, action chips; expandable rows.
  • Whole-conversation overview — the digest covers the loaded history window and pages older messages with a "Load older messages" button.
  • Live — a running turn shows as waiting for reply and settles as chunks land.
  • Zero cost — heuristic summary, pure function of the session snapshot; no LLM, no persistence, no event family.
  • Bilingual — Simplified Chinese and English copy through the dsh locale system.
  • Read-only projection — no service, no Context merge, no conversation-node definitions; follows the official ui-trajectory pure-consumer pattern.

![Digest rows](assets/digest-overview-2.png)

Installation

As a dsh bundle (recommended)

The package ships a pre-built client bundle in lib/ and declares dsh.bundle + dsh.client, so it installs with the plugin CLI. Grab the tarball from the latest release and add it (no npm account needed):

dsh plugin add https://github.com/rocklau/dsh-ui-digest/releases/download/v0.1.0/dsh-ui-digest-0.1.0.tgz

This injects the ui-digest row into your profile's composition; the browser plugin is served from lib/client.js. A local checkout works the same way: dsh plugin add ./dsh-ui-digest.

From the deepseek-harness source tree

1. Copy the package: cp -R <this-repo> <dsh-root>/packages/client/ui-digest/ 2. Register it in the web composition (3 edits, see the deepseek-harness PR pattern): - tsconfig.client.json → add { "path": "./packages/client/ui-digest" } to references - packages/bundle/web-app/package.json → add "@deepseek-ai/dsh-ui-digest": "workspace:^"… or keep the package name @deepseek-ai/dsh-client-ui-digest and add it as a workspace dep - packages/bundle/web-app/cordis.patch.yml → add a roster row - id: ui-digest / name: <package name> 3. pnpm install && pnpm run build && pnpm dsh web

Requires Node 22.19+ / 24 and pnpm 11 (matching the harness toolchain). The lib/ artifacts in this repo are built with the harness's own tsdown pipeline; rebuild with pnpm run build:lib:client inside the harness checkout.

How it works

The plugin is a pure-consumer browser plugin (mirroring the official ui-trajectory shape):

  • registers one tab in the conversation.view slot ring (order 20),
  • folds snapshot.chat.nodes via the framework standard kit's useSession into rounds keyed by user message,
  • rounds start at append-surface user/steering nodes; assistant evidence is settled text from assistant-step nodes, settled tool-call roots, or the turn-tail closing,
  • the summary is firstSentence(replyText, 160) with structured fallbacks (ran tool calls only, no text reply, reply in progress).

Tool categorization:

Categorydsh tools
shell · 运行命令bash, pwsh, terminal
read · 读取文件read, read_image
edit · 修改文件edit, write, str_replace_editor
search · 搜索文件glob, grep
web · 检索网页web_search, web_fetch
subagent · 委派子代理subagent*
todo / skill / goal / plantodo*, skill*, goal*, plan*

Unknown tools fall through to their raw name. File paths are extracted from path/filePath/oldPath/newPath/uri/root/file keys of edit/write arguments (deduplicated, up to 8 per category).

Known limitations

  • Window-scoped — the digest covers the loaded history window; page older messages with "Load older messages". Compacted sessions show only the post-compaction surface plus whatever the window retains.
  • Heuristic summaries only — first-sentence extraction is language-neutral but naive: an answer opening with a code block summarizes as its first prose fragment. LLM-generated summaries would require a host-side turn/end listener and an event family, deliberately out of scope.
  • No cross-view deep links — rows are a read-only projection; they do not jump back into the Chat view at the matching turn.

Development

# inside a deepseek-harness source checkout with this package in packages/client/
pnpm vitest run packages/client/ui-digest/tests/digest.client.spec.ts   # unit tests (19)
pnpm run build:lib:client                                                # rebuild lib/client.js
pnpm dsh web                                                             # run the Web UI

License

MIT. Built on top of deepseek-harness (MIT).