DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-langfuse

Langfuse

dsh-langfuse:DeepSeek Harness 的 Langfuse LLM 可观测性——每个代理会话对应一棵 OpenTelemetry 追踪树,并包含反馈评分和子代理谱系。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:TtTRz/dsh-langfuse#17c8cd5e2512a4dbee7cf569bdd058bb6a03d090
README兼容性版本

兼容性与来源证明

Langfuse 以 dsh-langfuse 发布,当前版本为 0.2.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/11/4

版本

0.2.0stable
2026/9/29
0.1.1stable
2026/8/14
0.1.0stable
2026/8/14

相关插件

正在加载相关插件…

最新版
0.2.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 1
周下载
27
最近提交
2026/9/29
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 models-usage 分类下经过校验的插件。

Experimental Cot Translation Bundle@deepseek-ai/dsh-experimental-cot-translation-bundle扩展推理的实验性机器翻译Our Free Model@ebony-vinyl/dsh-our-free-modelOur Free Model — 在 dsh 里装上这个插件即可,无需登录、注册或填 API Key,就能使用包括 DeepSeek V4.1 Flash、Kimi K3 在内的前沿模型,桌面端另有 EAC 协付渠道;2.0 起接入 LobsterAI、Qoder、TRAE、Cline、Loomy、Raccoon、MiniMax、ZCode、Gemini 十个账号渠道(原有匿名免费通道保留)(登录、账号池、积分领取、本地 OpenAI 网关与局域网转发、数据看板与运行日志),六页毛玻璃界面统一呈现。Usage@linxin666/dsh-usage用于 dsh Web GUI 的使用统计插件:检测各提供商的余额和编程套餐配额,并实时记录令牌使用情况;侧边栏 Settings 行上方显示紧凑的价格概览卡片Connect Workbuddydsh-connect-workbuddy把本机登录的 WorkBuddy 模型(国内版与国际版)接入 DeepSeek Harness:每次刷新按上游目录自动读取每个模型的积分倍率,支持逐模型图片输入开关、多账号切换与账号池自动换号,并提供每日签到、卡片与输入框里的胶囊积分读数等只读积分概览。

README

dsh-langfuse

Langfuse LLM observability for DeepSeek Harness — one OpenTelemetry trace tree per agent session, with feedback scores and subagent lineage.

Send every agent session to Langfuse as an OpenTelemetry trace tree — turn → trace, model step → generation, tool call → tool span — with GenAI semantic-convention attributes, token usage, time-to-first-token, and error statuses.

✨ Features

  • 🧵 Full session tracing — every turn, generation, and tool call lands in Langfuse with model, provider, usage (incl. cache-read & reasoning tokens), and TTFT.
  • 🚚 Content-Length transport — spans are delivered as a single write with an explicit Content-Length header, never chunked. Some Langfuse deployments sit behind gateways that mangle chunked POST bodies (400 Failed to parse OTel JSON Trace); this transport sidesteps that class of bugs entirely.
  • 👍 Feedback scores — /feedback records become TEXT scores on the session's latest turn trace.
  • 🔗 Subagent lineage — child-session turn traces link to the parent session's trace (same-process).
  • 🎚️ Three sharing modes — FULL (live), FEEDBACK_ONLY (export only when the user records feedback), DISABLED (default; nothing leaves the process).
  • 🔒 Opt-in inputs — generation input (system prompt / tools / prompt) is exported only when includeGenerationInput is on.
  • 🛡️ Fail-loud config — bad URLs, missing keys, and invalid bounds throw at plugin load, before any transport exists.

🚀 Quick Start

dsh plugin --profile web add dsh-langfuse

export LANGFUSE_PUBLIC_KEY=pk-lf-...
export LANGFUSE_SECRET_KEY=sk-lf-...
# optional: self-hosted or non-EU region
export LANGFUSE_HOST=https://langfuse.example.com

dsh web   # restart the running instance, then take a turn

With a key present the backend runs in FULL mode; without one it is DISABLED. LANGFUSE_TELEMETRY_MODE=FEEDBACK_ONLY narrows sharing to feedback-gated release, and LANGFUSE_INCLUDE_GENERATION_INPUT=1 exports generation inputs.

The bundled patch disables the base profile's session-telemetry-otel row (the telemetry seam accepts exactly one backend per context) and mounts this one. dsh --profile web --dump-config shows the composed result without booting.

As an explicit cordis.yml row

- id: session-telemetry-langfuse
  name: dsh-langfuse
  config:
    mode: FULL                 # FULL | FEEDBACK_ONLY | DISABLED (default)
    exporter:
      url: https://cloud.langfuse.com/api/public/otel/v1/traces
    auth:
      publicKey: !!js process.env.LANGFUSE_PUBLIC_KEY
      secretKey: !!js process.env.LANGFUSE_SECRET_KEY
    processor: {}              # optional; passed verbatim to BatchSpanProcessor
    includeGenerationInput: false

Compatibility

Version 0.2.0 requires DeepSeek Harness 0.1.7-rc.2. The session and telemetry SDKs are peer dependencies and must be provided by the same Harness installation. Install through dsh plugin; do not install an older telemetry SDK alongside a newer host.

Upgrading from 0.1.x removes the pinned telemetry 0.1.0-rc.6 dependency that could break session creation or restoration with session.events is not iterable. Restart Harness after upgrading. Other Harness versions are not covered by the compatibility checks.

⚙️ Configuration

FieldDefaultMeaning
modeDISABLEDFULL exports every session live; FEEDBACK_ONLY exports the canonical session log only when feedback is recorded; DISABLED constructs nothing.
exporter.url—Full OTLP traces endpoint (…/api/public/otel/v1/traces). Required unless DISABLED.
exporter.timeoutMillis10000Per-request timeout.
auth.publicKey / auth.secretKey—Langfuse project key pair (Basic auth). Required unless DISABLED.
processor{}Passed verbatim to BatchSpanProcessor (scheduledDelayMillis, maxQueueSize, …). Retries (bounded backoff, 6 attempts) live in the exporter.
includeGenerationInputfalseExport langfuse.observation.input (system prompt / tool schemas / model / user prompt).
maxAttributeChars16384Per-attribute payload ceiling; longer payloads are truncated with a …[truncated] marker (the canonical log keeps the full bytes).
shutdownTimeoutMillis3000Deadline on the SDK's shutdown drain.
feedbackScoreNameuser-feedbackLangfuse score name for /feedback pushes.

🧭 What appears in Langfuse

dsh session eventLangfuse concept
turn/start / turn/endtrace (turn N; error end reasons → ERROR status)
step/start + request/header + assistant/messagegeneration (step T.S) — model, provider, output, gen_ai.usage.* tokens
first token in the embedded assistant streamlangfuse.observation.completion_start_time (TTFT)
tool/call + tool/resulttool span (arguments → input, result → output, isError → ERROR)
user/messagetrace input
feedback/recordTEXT score on the session's latest turn trace
subagent session turnstrace links to the parent session's trace
agent-error ops recordexception event + ERROR status
every other event type (todo, plan, compaction, …)span event on the open turn

Correlation attributes use this package's own vocabulary (dsh.turn_idx, dsh.step_idx, dsh.event_seq, …) so multiple telemetry backends can share one Langfuse project without attribute collisions.

🏗️ How it works

  • A telemetry-seam backend. The harness logs everything model-visible to the canonical session log; this plugin implements SessionTelemetryBackend (@deepseek-ai/dsh-session-telemetry), so it captures every event — including ones it has never heard of — with the seam's consent semantics and redaction waterfall for free.
  • OTel SDK + custom exporter. Spans are built with BasicTracerProvider + BatchSpanProcessor, serialized with @opentelemetry/otlp-transformer, and delivered by a custom SpanExporter with Content-Length and bounded retries.
  • A folding timeline. SessionTimeline replays the flat record stream into span trees keyed by (session.id, turn, step). Span boundaries always use the record's own timestamp — live capture and canonical-log replay produce identical trees.
  • At-most-once delivery (inherited from the seam): the loss window is the crash window; receivers correlate on langfuse.session.id + dsh.turn_idx + dsh.event_seq.

🧪 Development

npm run check   # biome + typecheck + vitest (unit & seam integration) + build
npm run test:install -- /path/to/stock-dsh-install

The installation smoke test requires a separate stock @deepseek-ai/dsh@0.1.7-rc.2 installation. It installs and reinstalls the packed plugin in a temporary profile, checks FULL-mode activation and session creation/reopening, and uses only a local mock collector. It does not send prompts or contact a real Langfuse project.

Tests cover config validation, the folding timeline, the transport (Content-Length, no Transfer-Encoding, retry/backoff), score pushes, and a full seam integration that drives a real SessionTelemetryCoordinator and asserts the wire payload.

⚠️ Limitations

  • One backend per context (the seam throws on duplicates — the bundled patch disables the official OTLP-logs row).
  • Subagent lineage is same-process best-effort (a resumed parent's trace id is unknown across restarts).
  • No durable delivery (at-most-once).
  • Score pushes are fire-and-forget (failures only log).

📄 License

MIT