本地数据与隐私

September 4, 2026 · View on GitHub

DSH Desktop 是单机桌面应用。项目、会话、查询记录和运行证据默认保存在当前电脑,不会因为打开应用或查看历史记录自动上传。

保存哪些内容

默认数据目录是 ~/.dsh,也可以通过 DSH_DATA_ROOT 修改:

  • local.db:项目、配置、会话索引、运行事实、审批和证据索引;
  • projects/runs/:项目工作区、每次 Agent 运行的输入、日志和产物;
  • intermediate/:分析过程中的 DuckDB 中间结果;
  • structured/uploads/:用户导入的数据和文件;
  • yitrace/:本地 Trace;
  • agent_runtime/:Agent 运行配置、会话标识和任务状态;
  • sessions/storages/:DSH Profile 的会话日志与配置存储。

启用 Agent 能力后,运行配置、会话标识和任务状态保存在上述 agent_runtime/sessions/storages/ 目录。DSH Desktop 没有外部账户系统,模型请求只连接用户在当前项目中配置的模型服务。

这些文件可能包含业务数据、SQL、文件路径、命令输出、模型回答和错误信息。API Key、Token、密码以及 MCP 配置中声明的敏感字段会在运行事实和日志中做脱敏,但用户主动写入文件或第三方工具返回的内容仍可能包含敏感信息。

DSH Profile 中的插件清单、依赖和 patch 是插件状态的唯一权威。应用启动、状态查询和更新只读已有 Profile,不会因为精选清单变化而恢复用户停用或卸载的 Bundle。只有创建新 Profile 时,应用才会在隔离目录中使用安装包内的固定 tarball 和受控 pnpm 执行官方插件命令。

启动失败时,恢复状态只记录最近失败阶段、有限长度的错误摘要和用户选择的处理结果。恢复页导出的诊断会过滤环境变量、凭据、Session 内容、用户文件内容和完整堆栈;导出文件只写入用户明确选择的位置。

什么时候会联网

Agent 默认使用工作区可写沙箱和按需审批,对应技术配置为 workspace-writeon-request。命令、文件修改和外部工具仍受沙箱、用户审批及 DSH Desktop 工具权限控制。以下操作只有在用户配置或发起后才会访问外部服务:

  • 调用模型或向量模型;
  • 连接当前项目配置的模型服务;Responses API 直接连接,Chat Completions API 通过只监听本机回环地址的适配器连接;
  • 连接远程数据库;
  • 使用 MCP、网络搜索、代理或其他第三方服务;
  • 下载依赖或执行发布流程。

外部服务收到哪些数据取决于对应配置和本次操作。启用前应查看服务提供方的隐私和保留规则。

新 Profile 默认包含 ds-harness-remote,升级后的现有 Profile 会补充一次;用户停用或卸载后,应用更新不会恢复。Profile 启动后,插件可能连接 https://dsh.r2049.cn 的第三方账号、设备目录、信令、TURN 和 Relay 服务;只有用户登录并为当前电脑完成授权后,才会提供远程访问。插件会在 DSH_HOME/remote/servers/<origin-hash>/ 保存账号隔离的设备标识、长期 X25519 身份私钥与访问凭据。Host 只建立出站连接。项目声明 Harness 业务内容通过 Noise IK 端到端加密,托管服务不能读取 Prompt、对话、工具输出、Workspace 路径或远端文件内容;服务仍会处理账号、设备名称和平台、在线状态、连接关系、时间、流量大小、IP、ICE candidate 等必要账号与网络元数据。WebRTC 不可用时,业务密文会经过该服务的 Relay。删除或撤销设备会使对应凭据和已建立连接失效;服务端账号与日志仍按第三方服务规则处理。该第三方项目目前没有受支持的自建 Server,且它的独立密码安全审查仍未完成。

自动检查更新与客户端统计

包含官网更新服务接入代码的正式安装包会在启动后及每六小时自动检查更新,不自动下载或安装;开发版不执行自动检查。请求发往 https://dshdesktopstation.com,安装包仍来自固定的 vibeinging/dsh-desktop GitHub Releases。更新服务不可用时可退回该 GitHub 更新源,统计失败不阻断更新。

首次启用时生成随机 UUIDv4,保存在 Electron userData 目录的 app-update-client.json,文件权限为 0600。这个 ID 只代表安装实例,与账号、邮箱和硬件无关;重启、应用升级或切换 Profile 不改变它,删除应用数据会重新生成,复制整份数据可能复制它。文件损坏时跳过统计,不覆盖原文件。该目录与 DSH_DATA_ROOT 管理的 Profile 数据目录不同。

检查请求通过 X-DSH-Client-Id 请求头发送随机 ID,不把 ID 放进 URL、页面状态或更新日志。服务只保存随机 ID、App 版本、系统、架构、更新通道,以及服务端的首次和最近访问时间。不上传项目、会话、文件、模型凭据、账号或硬件标识;应用统计表不保存 IP。Vercel、Neon 和 GitHub 仍会处理网络连接信息及各自的运维日志。

服务展示最近 24 小时、7 天、30 天检查过更新的客户端数,不是自然人数或实时在线人数;没有新增高频心跳。默认每天清理超过 90 天未访问的记录,正常请求也会补做过期清理。删除本机 ID 不会立即删除服务端旧记录,旧记录按未活跃期限清理。

启动进程时设置 DSH_UPDATE_STATS_DISABLED=1 可停止发送随机 ID,仍可查更新;显式设置空的 DSH_UPDATE_API_BASE_URL 可只使用固定 GitHub 更新源。旧版 App 未包含接入代码,不会因为服务上线就自动进入这套统计。

保留和删除

  • 普通项目和会话会一直保存在本机,直到用户删除或清理数据目录;
  • Agent 运行默认设置 30 天保留期;已归档运行不会按普通过期规则清理;
  • 删除运行时会一起删除对应事件、工具事实、证据、子任务和运行目录;
  • 删除 ~/.dsh 会删除本机全部应用数据,操作前应先备份;
  • 操作系统备份、用户自行复制的文件和第三方服务中的副本不受应用删除操作控制。

安全反馈

发现数据泄露或其他安全问题时,请按 SECURITY.md 的方式私下联系维护者,不要在公开 Issue 中附带密钥、真实业务数据或完整利用方法。