dsh-github-sync: 将 DSH 工作区发布到 GitHub

DeepSeek Harness (DSH) 工作区的代码通常在本地管理。如果要将其发布到 GitHub,通常需要手动创建仓库、初始化 git、配置认证信息并推送。dsh-github-sync 插件通过 DSH 的凭据库管理 GitHub Personal Access Token (PAT),自动完成仓库创建、初始化、提交和推送。该插件由 s-huizhuy-u 维护,采用 MIT 许可证。

核心功能

插件提供以下能力:

  1. 创建仓库:GitHub 上不存在则创建,已存在则复用。
  2. 初始化 git:沿用项目当前所在分支;新仓库默认使用 main。
  3. 提交:暂存整棵工作树并提交;没有变更时复用现有 HEAD,而不是报错。
  4. 推送:历史分叉时先 fetch 再 rebase 再推送。
  5. 自动配置:写入账号的提交身份,并把分支上游记录下来。
  6. 只读预览: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:

  1. 环境变量:设置 GITHUB_TOKEN 或 GH_TOKEN。这是 CI 和共享机器上的最佳选择,不会在磁盘留下痕迹。
  2. 助手存储:说「存一下我的 GitHub token」,助手会使用 github_configure 存储。
  3. 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 在日志或对话记录前都会被遮蔽。

设计取舍

为了安全性和稳定性,插件做出了以下设计决定:

  1. token 永不落盘:origin 保存干净的仓库 URL,认证信息仅在单次 git push 时使用。token 不会进入 .git/config。
  2. git 永不弹出提示:每次调用都设置 GIT_TERMINAL_PROMPT=0、GIT_ASKPASS= 和 GCM_INTERACTIVE=never,避免认证失败时调用挂起。
  3. 远端分叉是协调:冲突时使用 git rebase --abort 回滚,工作树保持原样,需手动解决冲突或显式开启 force 覆盖。
  4. 非并发安全:同一工作区多次 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 参数覆盖

生态链接

羽毛球分组比赛记分
小程序二维码

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

小夜