rocklau/dsh-ui-digest

dsh-ui-digest

Turn-digest overview tab for the DeepSeek Harness (dsh) Web UI: what you asked, a one-sentence summary of what the AI did, tool-action chips.

미분류deepseek-harnessdshweb-ui

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 140 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, adds no model calls, and updates live while a turn streams. Loading older messages uses the existing Session history API.

Overview tab in a real session

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.

Installation

This checkout targets Harness 0.2.0-rc.2 and Cordis 4.0.4. Place the repositories at ai/deepseek-harness and ai/dsh-plugins/dsh-ui-digest, and build Harness first; development dependencies link to its built libraries. Build and check this package before installing its tarball.

pnpm install --ignore-scripts
pnpm run typecheck
pnpm test
pnpm build
pnpm pack
dsh plugin --profile web add ./dsh-ui-digest-0.1.0.tgz

Installation adds the ui-digest row to the profile. The browser loads lib/client.js; no Harness source changes are required.

For Desktop, open Plugins in the running application and install the generated tarball there. Enable the bundle and restart Desktop if the manager requests it. Open a conversation and select Overview (全览). Do not manage Desktop's reserved profile with the CLI Web-profile command above.

How it works

The plugin is a pure-consumer browser plugin, following the official ui-trajectory pattern:

  • registers one tab in the conversation.view slot ring (order 20),
  • folds the Chat target's nodes through the framework useChat hook 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, 140) 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.
  • History-paging failures retain the current rows and display the error beside the paging control.
  • No invariant companion is published: the plugin owns no independent state projection whose observations can diverge.
  • Colors follow the application's light and dark theme tokens.

Development

pnpm run typecheck
pnpm test
pnpm build

License

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