DSH Plugin MarketA community catalog for DeepSeek Harness plugins

dsh-plugin-execution-graph

Verified Sessions & messages ★ 21 0.2.1

DeepSeek Harness plugin: adds an "Execution graph" tab to the conversation view that reconstructs a per-turn directed graph of user prompts, model replies, and tool calls/results from session events, with per-reply folding of tool segments, a resizable payload detail panel, and PNG export. Pure-consumer client plugin: registers one conversation-view slot entry, declares no service, and reverts every side effect on unload.

What it is

DeepSeek Harness plugin: adds an "Execution graph" tab to the conversation view that reconstructs a per-turn directed graph of user prompts, model replies, and tool calls/results from session events, with per-reply folding of tool segments, a resizable payload…

How to install

Run this in the DSH web profile, then refresh the page.

$ dsh plugin --profile web add dsh-plugin-execution-graph@0.2.1

DSH versions accepted

^0.2.2-rc.1

Author and traction

liqiGeGe · ★ 21 · Updated 2026-11-09

About this plugin

dsh-plugin-execution-graph

English | [中文](README.zh.md)

A DeepSeek Harness (DSH) client plugin that adds an "Execution graph" tab to the conversation view. It reconstructs one session turn's activity as a vertical timeline on a [React Flow](https://reactflow.dev) canvas: the turn's request-header, assistant-message, tool-call, and tool-result nodes are ranked into timeline steps stacked top-to-bottom and connected by arrowed edges from each step to the next. turn-group container nodes are not drawn — one turn is shown at a time (defaulting to the session's last), so a container box would be redundant. Tool calls are never merged by name — each call and its result are independent nodes tied by a resolves edge, an assistant message's tool-call blocks connect to their tool-call nodes by a triggers edge, and same-group nodes chain by a sequence edge in event order. Parallel tool calls triggered by one assistant message share a timeline step and spread horizontally; a column is capped at ten steps and then wraps into the next column block to the right, and the cross-column connectors keep React Flow's default curved edge shape — there is no right-angle rerouting. A running tool call (present in the shared Session window's running-call-id set, with no settled result yet) renders with a distinct dashed, pulsing border instead of a fabricated result. A tool-call card puts its Tool kind label and tool name on one row and a truncated argument preview on the next. Selecting a node fills a persistent detail sidebar to the right — resizable (320–600px, collapsible) — that shows a Payload JSON tree for tool calls, a line-broken command block for shell commands, and — for assistant replies — the visible text, reasoning stream, and the tool names the reply triggered. Markdown-bearing text renders through the same shared Markdown renderer the Trajectory preview uses, and a copy button in the detail header copies the node's raw Markdown source, confirming with a localized toast. A turn selector above the canvas lists turns newest first, ten per page — a pinned row loads ten more, and once the loaded window is exhausted a "Load earlier turns" row fetches one older history page from the session — and defaults to the last; switching turns re-centers the canvas at scale 1. A download button in the canvas's lower-left corner exports the whole graph as a PNG. The canvas zooms out to a scale of 0.2, and a scroll-to-top control above React Flow's zoom buttons recenters the viewport on the turn's first node. Each assistant-message card carries a fold toggle on its right edge: collapsing hides the tool calls/results that follow it up to the next assistant message (an in-place view transform — columns and coordinates stay fixed), leaving a fold capsule that bridges the collapsed reply to the next one and can be clicked to expand. The package provides no service and declares no Context merge; it registers target-specific Conversation Event Definitions, a Graph view snapshot builder, and one tab in the conversation's 'conversation.view' slot ring.

Compatibility

Install the plugin version that matches your DSH runtime. The package's

peerDependencies pin the client APIs it was built against, so dsh plugin

rejects a mismatched pair instead of loading a plugin built for another client

line.

| DSH runtime | Plugin version | Status |

| --- | --- | --- |

| 0.2.x (client peers ^0.2.2-rc.1) | 0.2.x — tags >= v0.2.0 | current |

| 0.1.x (client peers ^0.1.1-rc.2) | 0.1.x — tag v0.1.4 | maintenance only |

A bare dsh-plugin-execution-graph install resolves to the registry's latest

tag, so pin the version explicitly (see [Installation](#installation)).

What's changed in 0.2.x

  • Turn picker paging and history — turns list newest first, ten rows per page with a pinned "load more" row, and a "load earlier turns" row pulls one older session-history page when the loaded window runs out.
  • Markdown detail — assistant replies, user prompts, and request prompts render through the same shared MarkdownText renderer the Trajectory preview uses; the detail header copies the raw Markdown and confirms with a localized toast.
  • Complete assistant detail — the reasoning stream and the triggered tool names are shown, with a placeholder when a reply has no text, reasoning, or calls.
  • Default cross-column edges — the right-angle merge-junction routing was removed; wrapped columns connect with React Flow's default curves.
  • Canvas controls — the minimum zoom is 0.2, and the scroll-to-top control targets the top-left node even when wrapped columns share the same row.
  • Stable chrome — the toolbar is sticky, and the view is bound to the session viewport height so opening a long detail keeps the canvas controls visible while the sidebar scrolls internally.

Plugin results

Plugin declaration and lifecycle

This is a pure-consumer Cordis plugin with two entry faces:

  • Node half (src/index.ts) — a no-op apply(); the plugin has no host-side behavior.
  • Client half (src/client/index.ts) — the real plugin. It exports inject and apply(ctx), following the DSH function-plugin contract (no default export).

apply(ctx) performs exactly these side effects, each registered reversibly through the Cordis effect system so that unloading the plugin reverts them in full:

1. Locale dictionary — ctx.effect(() => ctx.locale.register('graph', { zh, en })); unload de-registers the graph namespace.

2. React Flow stylesheet — installGraphStyles(ctx) injects a plugin-tagged `` element for the vendored React Flow base stylesheet; the effect's disposer removes the tag on unload.

3. Conversation Event Definitions — registerGraphNodeDefinitions(ctx) folds request/header, assistant/message, user/message, and tool/call→tool/result events into graph contributions.

4. Conversation View Definition — `registerGraphConversationVi

Compare in this category

The five most-starred plugins in the same category.

PluginAuthor StarsVersionUpdated
dsh-purge kingcharleslzy-ai 6.3K 1.6.86 2026-11-08
dsh-unrestricted yexi-by 1.1K 0.2.8 2026-11-05
dsh-univer-office dream-num 707 0.4.0 2026-11-03
dsh-synapse liangmianya 697 0.5.7 2026-11-04
dsh-qqbot tencent-connect 570 0.5.5 2026-11-08