跳到主要内容
路径文档

数据与隐私

一句话版:DSH 默认会上传会话遥测(可关),凭据与会话都存本机(0600 / zstd),匿名 user.id 用于统计。本页讲清楚"什么出本机、谁能看到、怎么关"。

一、遥测(默认开启)

默认配置下会话遥测开启:

  • 内容:会话日志的原始副本:用户/助手消息全文、工具参数与结果、系统提示词、本地 session.cwd 路径
  • 节奏:批量导出(scheduledDelayMillis 等由 OTel SDK processor 配置,可调)
  • 端点:部署层缺省 https://harness-telemetry.deepseeksvc.com/v1/logs(可用 DSH_TELEMETRY_OTLP_URL 覆盖;OTel 里 exporter.url 必填无默认)
  • 身份:匿名 user.id(见下)

三种模式

session-telemetry-otelmode 决定遥测 seam 跟随会话事件、只在记录反馈时回放、还是保持本地:

mode上报什么
FULL默认。每个投影 record(含 lifecycle ops)立即交给 OTel SDK
FEEDBACK_ONLY每个 feedback/record 回放、投影、redact 该事件前的日志后缀;之后 record 等下一个 feedback,没有就留本地
DISABLED不构造任何 pipeline,无 record 出进程;feedback 留在本地会话日志

上传模式(FULL / FEEDBACK_ONLY)都要求 exporter.url(无默认、必须能解析为 http(s));DISABLED 下 exporter 可省略、被忽略。三种模式共享同一个 sharing 披露(full / feedback-only / disabled),/feedback 确认据此报告会话如何被共享。

exporter 配置

# 部署层组合里按 id 覆盖(见 配置)
- id: session-telemetry-otel
name: '@deepseek-ai/dsh-session-telemetry-otel'
config:
mode: FULL
shutdownTimeoutMillis: 3000 # 可选,DSH 外层关闭截止,默认 3000ms
exporter: # 原样传给 OTLP/HTTP log exporter
url: https://collector.example.com/v1/logs
headers:
authorization: !!js `Bearer ${process.env.OTLP_TOKEN}`
processor: {} # 可选,原样传给 BatchLogRecordProcessor

exporterprocessor整块透传给 SDK:headerstimeoutMilliscompressionkeepAlive 等到达 exporter;批量、导出节奏(scheduledDelayMillis)、重试、队列上限、持续失败下的丢失策略都是 SDK 行为,经 processor 调。字段映射:timetimestamp/observedTimestamp,severityseverityNumber/severityText(INFO 9 / WARN 13 / ERROR 17),body → 结构化日志体,attributes 原样;接收端按 (session.id, event.seq) 去重并可按严重度告警。

seam 不带 redaction 规则:没有 session-telemetry/record 监听器时,上传的是原始捕获副本。跨信任边界部署需自挂 redaction 规则(见 会话系统)。FULL 在 append 时 redact;FEEDBACK_ONLY 不保留遥测副本,记录 feedback 时用当前挂载的规则 redact。

关闭遥测

export DSH_TELEMETRY_DISABLED=1 # 任意非空值,包括 0 / false

重启 dsh 生效,关闭不影响任何功能。也可用 OTel 的 mode: DISABLED

二、匿名用户 ID(.anonymous-user-id)

  • 文件:~/.dsh/.anonymous-user-id,内容是一个随机 UUID
  • 生成规则:从主机名、网卡、git remote 等可识别来源派生:纯随机
  • 删除该文件即重置身份(下次启动生成新 UUID)

同一个 id 在三处出现,让接收端无需自建身份即可关联:

用途形式
遥测OTel Resource 的 user.id,用于聚合统计与问题定位
反馈确认/feedback 确认文本里带同一值
DeepSeek 请求dsh-llm-deepseekx-deepseek-harness-user-id 请求头发送

两点容易误解:

  • DSH_TELEMETRY_DISABLED 只停遥测导出,不影响反馈确认与 DeepSeek 请求头——关遥测不等于关身份关联
  • id 只作为 HTTP transport metadata 到达 DeepSeek,不进请求体、prompt、模型可见内容

进程内按文件路径 memoize 到进程生命周期;首次写用独占创建,并发失败方采用已持久化的胜者;写不进去(如 home 不可写)时退回进程本地 UUID,不阻塞遥测或反馈。

三、会话数据

  • 所有会话日志在本机 ~/.dsh/sessions/(默认 zstd 压缩的 session.jsonl.zstd,两级 --<cwd>--/<id>/ 目录),含对话、工具调用、工作目录路径
  • 会话持久化在本地,删除目录即清除

想直接 head/jq 明文?配 compression: 'none' 或先 zstdcat(见 会话系统)。

四、凭据

文件内容权限
~/.dsh/.credentials.yaml托管结构化凭据0600(0700 目录)
~/.dsh/.env环境层兜底权限自管

别把凭据 commit 进仓库;托管的 .credentials.yaml 由 DSH 原子落盘 0600,.env 是普通环境层、权限自负。

五、网络出口清单

目标用途可否关闭
api.deepseek.comLLM 调用(chat-completions + anthropic/v1)换 provider 可绕开
harness-telemetry.deepseeksvc.com会话遥测DSH_TELEMETRY_DISABLED=1
自定义 provider 端点你配置的模型网关配置层面控制

六、最佳实践

  1. 敏感项目使用前,评估遥测策略(或直接关)
  2. 注意第三方插件的网络行为(telegram/zotero 等有外发能力)
  3. .anonymous-user-id 删除即匿名重置,但不影响遥测开关
  4. 会话日志默认 zstd 压缩;备份/分享前脱敏

下一步