dsh-git-credentials:把 Git 平台 API token 值挡在模型上下文之外

前言

在 DSH 智能体中调用 GitLab、GitHub、Gitee、Gitea 或 Bitbucket 的 API 时,一个常见痛点是:工具需要访问远端仓库资源,但 token 值又不宜进入模型上下文。

dsh-git-credentials 是一个 DeepSeek Harness 插件,用来管理 GitLab、GitHub、Gitee、Gitea 和 Bitbucket 的 API token。它让 token 值不进入模型上下文,只在工具调用时从插件自己的加密存储中解密,并用于出站 Authorization 头。

这是什么

  • 插件名:dsh-git-credentials
  • 维护仓库:https://github.com/revive/dsh-git-credentials
  • 许可证:MIT
  • 定位:DeepSeek Harness 插件,管理 Git 平台 API token,使 token 值不进入模型上下文

它解决的核心问题是:在多个 Git 托管站点之间复用 DSH 工具调用能力,同时避免把真实 token 值交给模型上下文处理。

核心能力

token 值不进入模型上下文

插件管理 GitLab、GitHub、Gitee、Gitea 和 Bitbucket 的 API token。模型侧只处理站点、项目、路径等业务参数,token 值不进入模型上下文。

调用时,token 值从插件的 AES-256-GCM 加密存储中解密,并用于出站 Authorization 头。

加密落盘

插件使用两个文件保存凭据相关数据:

  • AES-256-GCM 加密的数据文件
  • 独立 32 字节随机密钥文件,路径为 ~/.dsh/git-credentials.key

两个文件权限为 0600,写入时采用原子写入。

按 provider 限制工具范围

工具按平台命名空间划分:

gitlab_*
github_*
gitee_*
gitea_*
bitbucket_*

gitlab_* 只访问对应 GitLab 站点,github_* 只访问对应 GitHub 站点,gitee_*gitea_*bitbucket_* 同理。

Web 设置面板

插件提供 Web 设置面板,入口为:

Settings → Git Credentials

面板可以完成以下操作:

  • 添加站点
  • 编辑站点
  • 删除站点
  • 保存 token 值
  • 清除 token 值

面板响应不携带 token 值,只返回配置状态。

热加载与即时生效

插件支持在运行中的 GUI 上挂载或卸载,不需要重启 GUI。

每次工具调用都会读取新解密的快照,因此编辑站点、轮换 token 后,下一次调用即生效。

安装与启用

安装 release tarball

先从仓库 releases 下载对应版本的 tarball,例如:

dsh-git-credentials-0.2.2.tgz

然后执行安装:

dsh plugin --profile <name> add ./dsh-git-credentials-0.2.2.tgz

安装后可以验证配置层:

dsh --profile <name> --dump-config

在输出中查找:

# == dsh-git-credentials

注意:通过 dsh plugin add 安装 bundle 时,不会热挂载到当前运行中的 GUI。安装完成后需要重启 GUI 进程。重启后,插件会出现在:

Settings → Git Credentials

源码安装

源码安装前需要先构建浏览器产物:

lib/client.js

release tarball 已包含构建产物,源码安装则需要先完成构建。

然后把插件目录软链到 profile 可解析的 node_modules 路径:

mkdir -p ~/.dsh/profiles/node_modules
ln -s /path/to/dsh-git-credentials ~/.dsh/profiles/node_modules/dsh-git-credentials

再在 ~/.dsh/cordis.patch.yml 中添加一个 id: git-credentialsinsert 行。最小示例为:

- insert:
    - id: git-credentials

典型用法

添加站点

打开:

Settings → Git Credentials

添加站点时需要填写:

  • provider:GitLab、GitHub、Gitee、Gitea 或 Bitbucket
  • site id
  • API base URL
  • token reference name
  • 可选 token value
  • 可选 default project

token 值可以用专门的 Save Token 按钮写入,也可以在 Add Site 时一起保存。

编辑已有站点

已有站点默认只读。可以看到:

  • provider
  • base URL
  • token reference name
  • default project
  • 配置状态

点击 Edit 后进入编辑模式,可以:

  • 修改站点配置
  • 保存新 token
  • 清除 token
  • 删除站点

调用写操作前确认

插件提供的工具会访问远端 Git 平台资源。写操作会真实修改远端资源,因此模型在调用前应先与用户确认。

适用场景与注意

适合以下场景:

  • 需要同时管理多个 Git 托管站点的 API token
  • 希望 token 值不进入模型上下文
  • 希望在 Web 设置页中添加、编辑、删除站点
  • 希望轮换 token 后立即对后续工具调用生效

使用前需要注意:

  • 插件以当前 dsh 进程权限运行。安装前应检查源码、许可证和依赖。
  • 许可证为 MIT
  • peerDependencies 要求:
  • @deepseek-ai/cordis ^4.0.1-rc.1
  • @deepseek-ai/dsh-tools ^0.0.1-rc.1
  • @deepseek-ai/schemastery ^3.18.1-rc.1
  • 丢失 ~/.dsh/git-credentials.key 后,加密数据不可恢复。
  • 只复制加密数据文件是安全的,没有密钥文件无法解密。
  • 同 UID 进程如果同时读取数据和密钥文件,不受该加密方案保护。
  • 密钥与数据同权限存放,属于“discretion, not a boundary”。
  • 用户故意要求模型读取这些文件时,不属于该威胁模型可阻止的范围。
  • 写操作会真实修改远端资源,调用前应与用户确认。

结尾

dsh-git-credentials 的价值在于:它把 Git 平台 API token 的管理从模型上下文中移出去,让 token 值只保留在插件的加密存储和出站请求头中。对于需要在 DSH 中访问多个 Git 托管站点的场景,它是一个偏凭据管理的配套插件。

目录页地址未在本次已核实资料中确认,本文不给出具体 URL。仓库地址为:

https://github.com/revive/dsh-git-credentials
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜