
loongsuite/dsh-plugin
dsh-plugin
OpenTelemetry tracing for DeepSeek Harness (dsh): turns each agent turn into a GenAI span tree — steps, LLM calls with TTFT, tool executions, token usage — exported over standard OTLP to Jaeger, Grafana Tempo, SigNoz, Langfuse, or any compatible backend.
Install
npx @deepseek-ai/dsh plugin --profile web add @loongsuite/dsh-pluginRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-plugin)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from loongsuite/dsh-plugin, cleaned of badges and images.
LoongSuite observability for DeepSeek Harness
English | 简体中文
@loongsuite/dsh-plugin is a standalone, open-source observability plugin for
DeepSeek Harness (dsh). It observes DSH's native
session, agent loop, LLM stream, and tool lifecycle, converts them into OpenTelemetry GenAI traces
and metrics, and exports standard OTLP/HTTP protobuf to any compatible backend.
LoongSuite is an open-source observability collection ecosystem built on OpenTelemetry. This repository is its native DSH integration. The plugin does not depend on or require LoongSuite Pilot, a sidecar, a local JSONL tap, or any particular vendor's backend.
<br> <em>One DSH turn exported over OTLP into self-hosted Langfuse: four react steps, per-call latency and token counts, a failed <code>web_search</code> followed by <code>bash</code> fallbacks, and the ENTRY span's GenAI attributes. Content capture was enabled for this capture; it is off by default.</em>Status: stable
0.1.xrelease. Install@loongsuite/dsh-pluginfrom npm or the DSH plugin market.
Data model
DSH session/event + llm/stream
│
▼
lifecycle coordinator
│
▼
LoongSuite GenAI OTel utility
│
▼
private TracerProvider + MeterProvider
│ OTLP/HTTP protobuf
▼
any OpenTelemetry-compatible backend
One DSH turn produces a single trace with this shape:
ENTRY
└── AGENT
└── STEP
├── LLM
└── TOOL
Each real LLM attempt gets its own LLM span, so retries remain visible under the same step. Tool
calls are correlated with their results by DSH call ID. Errors, aborts, incomplete streams, and
plugin shutdown close live spans with an error status instead of leaving them open. Subagent
sessions create their own trace and carry DSH parent-session and delegation attributes.
When content capture is enabled, ENTRY and AGENT input messages contain only the turn's direct
source.kind=user input. Synthetic DSH context such as runtime snapshots, agent instructions,
skill catalogs, goals, and coordinator relays remains visible on the LLM span, but prior-turn
conversation history is excluded so every trace contains only its own turn context. Later LLM
spans in a tool loop retain assistant tool calls and tool results produced earlier in the same
turn. ENTRY and AGENT output messages contain only the final stop response; a turn that never
reaches stop falls back to its last available assistant message.
The plugin also exports the standard gen_ai.client.operation.duration and
gen_ai.client.token.usage metrics. It does not export OpenTelemetry logs; it can coexist with a
separate DSH log exporter.
GenAI invocation construction and semantic attributes are powered by the
@loongsuite/otel-util-genai SDK.
Compatibility
| Component | Supported range | Fully verified version(s) |
|---|---|---|
| DeepSeek Harness | >=0.1.0-rc.6 <0.2.0 | 0.1.0-rc.6 headless and Web profiles |
| Node.js | >=22.19.0 | 22.19, 24.19, and 25.9 on macOS |
DSH release candidates older than 0.1.0-rc.6 are not supported. Each plugin release is tested
against the latest published DSH version rather than treating successful bundle composition alone
as full runtime compatibility.
…
