🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

链路追踪导出 CodePrometheus/dsh-observability

DeepSeek Harness
CodePrometheus81 天前有提交已提供中文文档扫描:未发现敏感能力

把每个会话导出成 OTLP 链路追踪树

27.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add CodePrometheus/dsh-observability
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · other
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 81 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/cordis-plugin-loader@deepseek-ai/cordis-plugin-logger-console@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-spine-demo@deepseek-ai/dsh-app-boot@deepseek-ai/dsh-bash-local@deepseek-ai/dsh-command-feedback@deepseek-ai/dsh-invariants@deepseek-ai/dsh-llm@deepseek-ai/dsh-loader-smoke
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 导出会话为链路追踪树
  • 遵循OTLP协议

README

由 DeepSeek 最新模型翻译生成
dsh-observability 为 DeepSeek Harness(dsh)导出 OpenTelemetry traces:把每个 agent 会话导出成 OTLP span 树——turn 对应 trace,模型 step 对应子 span,工具调用对应该 step 的子 span——带 GenAI 语义约定属性,发往任何接受 OTLP/HTTP 的 collector。 这是社区插件(dsh-plugin topic),不属于官方仓库。它实现 harness 公开的遥测 Service Definition(@deepseek-ai/dsh-session-telemetry),作为官方 Provider 之外的第二个 Service Provider——官方那个导出的是 OTLP logs。
展开完整文档(README 剩余 1 节)
dsh-observability

为 DeepSeek Harness(dsh)导出 OpenTelemetry traces:把每个 agent 会话导出成 OTLP span 树——turn 对应 trace,模型 step 对应子 span,工具调用对应该 step 的子 span——带 GenAI 语义约定属性,发往任何接受 OTLP/HTTP 的 collector。

这是社区插件(dsh-plugin topic),不属于官方仓库。它实现 harness 公开的遥测 Service Definition(@deepseek-ai/dsh-session-telemetry),作为官方 Provider 之外的第二个 Service Provider——官方那个导出的是 OTLP logs。

安装

本包自带 cordis.patch.yml,因此可以作为 profile bundle 安装:

dsh plugin --profile web add dsh-observability
export DSH_OBSERVABILITY_MODE=FULL
export DSH_OBSERVABILITY_OTLP_URL=http://127.0.0.1:4318/v1/traces

在 DSH_OBSERVABILITY_MODE 明确开启之前,共享始终关闭。配置了 endpoint 不等于同意上传会话内容,参见 离开本机的数据。

自带的 patch 会关掉 base profile 的 session-telemetry-otel 行:遥测 Service Definition 每个 context 只接受一个后端,重复加载直接抛错。

也可以作为显式的 cordis.yml 行挂载:

- id: session-telemetry-otlp-traces
name: dsh-observability
config:
mode: FULL # FULL | FEEDBACK_ONLY | DISABLED(默认) exporter: # 原样透传给 SDK 的 OTLP/HTTP trace exporter url: http://127.0.0.1:4318/v1/traces compression: gzip
processor: {} # 可选,原样透传给 BatchSpanProcessor
shutdownTimeoutMillis: 3000
maxAttributeChars: 32768

配置

| 字段 | 含义 |
| mode | FULL 实时导出每个会话;FEEDBACK_ONLY 仅在用户记录 feedback 时回放并导出 canonical 会话日志;DISABLED(默认)不构造任何东西,也没有任何数据离开进程。词表与同意语义都属于 Service Definition,与官方 Provider 完全一致。 |
| exporter | 完整的 OTLPExporterNodeConfigBase 对象,原样透传给 OTLP/HTTP trace exporter。url 是本包唯一要求并自行校验的字段,且必须是完整的 traces 路径(…/v1/traces)。 |
| processor | 原样透传给 BatchSpanProcessor(scheduledDelayMillis、maxQueueSize、maxExportBatchSize 等);批量、重试和丢失策略都是 SDK 文档化的行为。 |
| shutdownTimeoutMillis | 插件自己持有的外层截止时间,约束 SDK 的 shutdown 排空。默认 3000。 |
| maxAttributeChars | 每个 span 属性的序列化载荷上限(默认 32768)。上限约束的是导出值本身,已把 …[clipped] 标记计算在内;被截断的 span 带 dsh.payload_clipped=true——载荷本身就可能以该标记结尾,所以标记本身不足以作为判据。canonical 会话日志保留完整字节。 |

配置错误在插件加载时就 fail loud,且发生在构造任何 transport 之前:url 缺失、为空、非字符串、格式错误或非 http(s);processor.maxExportBatchSize 不是正整数(SDK 会接受,但随后在 shutdown 时挂死);shutdownTimeoutMillis 非正或非有限;maxAttributeChars 非正;以及未知的 mode。

字段映射

| dsh 会话事件 | Span |
| turn/start / turn/end | trace 根 span;结束原因写入 dsh.turn.end_reason,错误原因置 status ERROR,并带上失败的 code: message |
| step/start / step/end | 子 span,带 gen_ai.operation.name=chat |
| request/header | gen_ai.request.model、gen_ai.provider.name 和采样标量,回填到当时已经打开的 step 上。后续 header 整组替换这些属性,因此它没带的标量不会从上一份沿用下来 |
| 每个 step 的首个 assistant/chunk | dsh.step.time_to_first_chunk_ms(首 token 时间) |
| assistant/message | 组装后的回复,加上全部五个 gen_ai.usage. 计数(输入、输出、缓存读、缓存写、reasoning) |
| tool/call + tool/result | 发起该调用的 step 的子 span,带 gen_ai.operation.name=execute_tool;失败结果置 status ERROR,若上报了失败标识则带上其 code: name |
| user/message | 该 turn 认领的人类 prompt(source.kind 为 user)写入 trace 根 span 的 dsh.turn.input。同一事件类型还承载 agent.inject() 注入的上下文和 goal 续轮消息,它们作为 span event 留在时间线上,不会顶替 prompt |
| agent-error ops 记录 | 当前打开 span 上的 exception span event,带 exception.type / exception.message,并置 status ERROR |
| 其他一切事件类型(todo、plan、compaction、hooks、插件事件) | 最内层打开 span 上的时点 span event |
| 本包不认识的 ops 记录操作 | 时点 span event;该操作集由 seam 拥有且可扩展,因此未知操作永远不会截断 trace |

标识符是派生的,不是生成的:traceId 由 (session.id, turn) 派生,spanId 由 (session.id, turn, step[, callId]) 派生。因此对同一批事件,实时捕获与 FEEDBACK_ONLY 的 canonical 日志回放产出完全相同的树;cursor 丢失后的重新 adoption 造成的重复投递会落到已有 span 上,而不是产生第二棵互不相连的树。所有时间戳都取记录自带的 time,从不使用 wall clock,理由相同。

因终止事件缺失而仍然打开的 span 会被 force-end 扫描关闭并标记 dsh.force_ended:下一个 turn/start 发现前一个 turn 还开着时、会话的 shutdown 运维记录时、FEEDBACK_ONLY 回放结束时、以及后端 shutdown 时。

turn/start 缺失——崩溃窗口,或被脱敏规则扣下的记录——不会让该 turn 的子 span 变成孤儿。第一个落在未打开 turn 下的子记录会合成该 turn 的根 span 并标记 dsh.turn.synthesized,因此 collector 不会收到一个 parent 永远不会送达的 span。

离开本机的数据

在上传模式下,span 属性携带用户与 assistant 的消息内容、工具参数与结果(命令输出、文件内容)、模型与用量元数据,以及会话 cwd(一个本地路径),具体内容由 session-telemetry/record waterfall 的返回值决定。

本插件不自带任何脱敏规则。 在没有挂载 waterfall listener 的情况下,记录会原样到达 exporter,因此要导出到受信边界之外的部署必须自行挂载规则。Provider 的 API key 在结构上不存在:适配器凭据是构造参数而非会话事件,所以它们从不进入会话日志,也因此从不进入遥测。序列化载荷按 maxAttributeChars 逐属性截断,canonical 日志保留完整字节。

Model Experience

无。本插件只通过遥测 Service Definition 观察会话流,并把折叠后的 span 交给 OTel SDK,从不参与构成模型请求。

KV Cache 影响

无。本插件既不组装也不发送 provider 请求。

测试

npm test # 单测:id 派生、折叠投影、配置 fail-loud 路径
npm run build && npm run test:e2e # 通过 Loader 的真实组合,对打 mock collector

e2e 层遵循官方仓库的 REAL-composition 模式:fixture cordis.yml 加载构建后的 lib/index.js——与部署时加载的是同一个文件——断言打在 wire 上的 OTLP 载荷,而不是内部实现。

版本兼容

DeepSeek Harness 处于 developer preview,不提供兼容承诺;本插件 pin 精确的 @deepseek-ai/dsh- 版本。

| dsh-observability | @deepseek-ai/dsh-* | @deepseek-ai/cordis |
| 0.1.x | 0.1.0-rc.6 | 4.0.1 |

已知限制与待办

- 尽力投递。 继承自 Service Definition:handoff cursor 标记的是「已交出」,不是「已送达」。崩溃时留在 SDK 批队列里的内容会丢失,cursor 丢失后的重新 adoption 可能重复交出一个前缀。派生标识符让这些重复在接收端幂等,但持久化 outbox 不在本包范围内。
- 不自带脱敏规则。 见离开本机的数据。
- subagent 谱系未串联。 fork 出的会话,其树从继承边界开始;session.parent_id 和 session.seed_length 会作为 span 属性带出,但不创建 trace links。
- 每个 context 只能一个后端。 想同时跑本插件和官方 OTLP-logs Provider,需要上游 Service Definition 演进出 multi-sink 能力。
- 没有 metrics 信号。 Service Definition 的记录词表是 log 形状的(time、severity、attributes、body),所以 counter 和 histogram 只能在这里推导而非直接捕获;本插件只导出 traces。

许可

MIT
预览分享卡片长什么样 ↓CodePrometheus/dsh-observability
分享 · DeepSeek Harness Hub
CodePrometheus/dsh-observability

把每个会话导出成 OTLP 链路追踪树

这是你的仓库?认领条目

回到顶部