DeepSeek Harness (DSH) 工作区的代码通常在本地管理。如果要将其发布到 GitHub,通常需要手动创建仓库、初始化 git、配置认证信息并推送。dsh-github-sync 插件通过 DSH 的凭据库管理 GitHub Personal Access Token (PAT),自动完成仓库创建、初始化、提交和推送。该插件由 s-huizhuy-u 维护,采用 MIT 许可证。
核心功能¶
插件提供以下能力:
- 创建仓库:GitHub 上不存在则创建,已存在则复用。
- 初始化 git:沿用项目当前所在分支;新仓库默认使用
main。 - 提交:暂存整棵工作树并提交;没有变更时复用现有
HEAD,而不是报错。 - 推送:历史分叉时先 fetch 再 rebase 再推送。
- 自动配置:写入账号的提交身份,并把分支上游记录下来。
- 只读预览:
github_status报告同步将要做什么,不改动任何东西。
安装与启用¶
将插件包复制到 DSH profile 目录,并执行安装脚本:
node scripts/install.mjs
脚本会定位 DSH home,将插件复制到 <profile>/.local-plugins/ 和 <profile>/node_modules/,并更新 dsh.profile.bundles 和 cordis.patch.yml。安装完成后重启 DSH。
环境要求¶
运行此插件需要满足以下条件:
- DeepSeek Harness
0.1.5-rc.2或更高版本 - Node.js
20.12+(需要AbortSignal.any) PATH中包含 git 可执行文件
典型用法¶
插件提供了三个主要工具:
github_sync:发布当前工作区。github_status:报告同步将会做什么。github_configure:向 GitHub API 校验并存储 token。
示例交互¶
用户向助手发出指令:
你:把这个项目传到 GitHub
助手执行 github_sync 后反馈:
DSH:已同步 12 个变更文件到 octocat/my-project(分支 main)。
仓库:https://github.com/octocat/my-project
认证配置¶
使用前需要一个 GitHub Personal Access Token (PAT)。
提供方式¶
有三种方式提供 token:
- 环境变量:设置
GITHUB_TOKEN或GH_TOKEN。这是 CI 和共享机器上的最佳选择,不会在磁盘留下痕迹。 - 助手存储:说「存一下我的 GitHub token」,助手会使用
github_configure存储。 - HTTP API:向
POST /api/github-sync.token发送请求,body 为{"token": "..."}。
权限要求¶
| Token 类型 | 需要的权限 |
|---|---|
| classic | repo(仅发布公开仓库可用 public_repo) |
| fine-grained | Contents: Read and write;若要创建仓库,还需 Administration: Read and write |
重要说明:存储的 token 保存在 DSH 凭据库中,不在 settings.yaml。所有 token 在日志或对话记录前都会被遮蔽。
设计取舍¶
为了安全性和稳定性,插件做出了以下设计决定:
- token 永不落盘:
origin保存干净的仓库 URL,认证信息仅在单次git push时使用。token 不会进入.git/config。 - git 永不弹出提示:每次调用都设置
GIT_TERMINAL_PROMPT=0、GIT_ASKPASS=和GCM_INTERACTIVE=never,避免认证失败时调用挂起。 - 远端分叉是协调:冲突时使用
git rebase --abort回滚,工作树保持原样,需手动解决冲突或显式开启force覆盖。 - 非并发安全:同一工作区多次 git 操作会在索引锁上冲突。
故障排查¶
| 现象 | 原因与处理 |
|---|---|
No GitHub token is configured |
设置 GITHUB_TOKEN 环境变量,或使用 github_configure 存储并重启 DSH |
GitHub rejected the request (HTTP 401) |
Token 过期或错误,需重新签发 |
HTTP 403 且带权限提示 |
检查 token 权限。fine-grained token 需勾选仓库并授予 Contents 和 Administration 写权限 |
TLS_UNTRUSTED |
若使用了 GitHub 加速器(如 Watt Toolkit、FastGithub),需配置 NODE_EXTRA_CA_CERTS |
git push failed … non-fast-forward |
远端有新提交,可重试或传 force 参数覆盖 |