dsh-oauth-copilot
Verifieddsh-oauth-copilot · v0.1.0 · MIT
GitHub Copilot OAuth provider and model adapter for DeepSeek Harness
Install
dsh plugin add dsh-oauth-copilot Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
dsh-oauth-copilot
面向 DeepSeek Harness 的 GitHub Copilot 登录与模型路由插件。
通过设备码流程登录 GitHub,把 Copilot 授权存入 harness 凭据记录,并注册基于 pi-ai Copilot 模型目录的 github-copilot LLM 路由——全部走官方 seam(ctx.credentials / ctx.authorization / ctx.llm),不依赖第三方 OAuth 基座。
状态:0.1.0 —— 已针对 dsh 0.1.1-rc.2 / pi-ai 0.82.1 构建并做真实账号验证。English: README.md。
为什么不基于社区 dsh-oauth
当前 dsh-oauth(0.2.0)构建于 0.1.0-rc.6/rc.8 包线,其 peer 与出货版 dsh 0.1.1-rc.2 在 semver 上互斥(npm 拒绝同 profile 安装)。因此本插件直接对接官方 seam(凭据记录、授权 flow、LLM 适配器),dsh-llm-pi-ai 已注册的 Copilot flow 可直接复用。
安装
发布形态(无需 clone 与构建):
dsh plugin --profile web add dsh-oauth-copilot
重启 dsh web 生效。插件的 cordis.patch.yml(llm-github-copilot)经 dsh.bundle.patch 自动加载;profile patch 中的 authorization 服务条目激活登录机制(见兼容性注记)。
开发形态(仓库检出):
npm install && npm run build
dsh plugin --profile web add /path/to/dsh-oauth-copilot
使用 —— 人工 CLI 为主路径
认证是纯人工终端操作,全程不经过 LLM——非官方模型即使被提示注入,也无法发起或撤销授权。
# CLI 随 npm 包提供。可全局安装……
npm install -g dsh-oauth-copilot
dsh-copilot-auth login # 打印设备码 URL 与代码;浏览器完成授权
# ……或直接用 npx 免安装运行:
npx -y dsh-oauth-copilot login
dsh-copilot-auth status # grant 过期时间与可用模型
dsh-copilot-auth refresh # 重新拉取账号可用模型清单并写入 grant
dsh-copilot-auth logout # 移除本地 grant
仅支持 github.com(GitHub Enterprise 不支持,见"已知限制")。命令绝不回显密钥;provider 错误先脱敏;凭据文件以 0600 原子写落盘。
模型选择器说明
选择器列出 pi-ai 的 advisory 目录(29 个 Copilot 模型),并非每个模型在账号下都可用:选择不可用模型会得到 HTTP 400 "model not supported"。dsh-copilot-auth refresh 会把账号可用清单(policy=enabled)写入 grant,此后选择器只显示可用项;刷新失败/为空时仍是全量 advisory 列表——重试 refresh,或按 status 输出里的模型选择。
可选:模型端工具(默认关闭)
模型可执行的工具(github_copilot_login / github_copilot_status / github_copilot_logout)默认不注册,仅在 authorization 服务已挂载 且 配置 enableModelTools: true 时出现。工具错误在进入模型上下文前一律脱敏。
- id: llm-github-copilot
config:
enableModelTools: true # 显式开启;默认 false
loginWindowMs: 180000 # 登录工具等待授权的最长时间(毫秒)
streamIdleTimeoutMs: 300000
已知限制
- GitHub Enterprise 不支持。 凭据白名单仅接受官方端点(
proxy.individual.githubcopilot.com),模型登录工具与 CLI 均显式拒绝企业域。这是安全决策:伪造的enterpriseUrl会把 pi-ai 的自动 token 刷新指向攻击者服务器。 - 绑定 0.1.1-rc.2 包线。 peer 范围为
^0.1.1-rc.2;未来 dsh 0.1.1 稳定版或 0.2.0 会随适配器契约一起扩展。 - CLI 输出为中文(欢迎双语 PR)。
- 请勿在另一进程正在写凭据文件时执行
dsh-copilot-auth login/logout:CLI 使用 0600 原子写,但未持有 dsh 的跨进程写锁。
FAQ
dsh-copilot-auth: command not found—— npm 全局安装包(npm install -g dsh-oauth-copilot),或直接用npx -y dsh-oauth-copilot login。- 模型请求返回 HTTP 400 "model not supported" —— 先运行
dsh-copilot-auth refresh,再按status输出选模型。 - 如何彻底撤销授权?
dsh-copilot-auth logout移除本地 grant;GitHub → Settings → Applications 撤销 Copilot 授权。 - Web UI 里登录按钮在哪? 没有(dsh 0.1.1-rc.2 的 Models 页不暴露 OAuth 入口);CLI 即登录路径。
- 如何更新插件?
npm install -g dsh-oauth-copilot@latest && dsh plugin --profile web add dsh-oauth-copilot(或更新 profile package.json 版本),然后重启 dsh web。
安全姿态
已对照社区实现(dsh-oauth / dsh-oauth-openai)并完成多轮对抗性评审;既定决策:
- 凭据校验(
src/credential-store.ts与 CLI):存储载荷做 schema 校验;proxy-ep端点仅接受官方主机,且任何非空enterpriseUrl都会拒绝记录——同时封堵流量重定向与 refresh token 外泄两条路径。 - 设备码流程固定在 github.com:无 redirect_uri、无本地回调端口、scope 固定最小
read:user、每 key 单一授权尝试。 - 错误脱敏:provider 错误先做 JWT/token 正则脱敏再截断展示。
- 模型端权限:登录/注销工具默认关闭;CLI 路径完全不需要模型参与。
- 凭据 0600 存储,不进入 settings/describe/环境变量,CLI 绝不回显。
工作原理
| 部件 | 文件 | 职责 |
|---|---|---|
| 模型路由 | src/adapter.ts |
以 PiAiAdapter 注册 github-copilot;请求级 apiKey 留空,交由 pi-ai 原生 OAuth 认证 |
| 凭据桥 | src/credential-store.ts |
严格校验的 harness 记录 llm-pi-ai/github-copilot(kind grant)↔ pi-ai CredentialStore + 环境 AuthContext |
| 人工 CLI | scripts/dsh-copilot-auth.mjs |
纯人工设备码登录/状态/刷新/注销,写入同一凭据记录 |
| 登录工具 | src/login-tool.ts |
可选模型工具,驱动 ctx.authorization flow(仅显式开启时注册) |
开发
npm install
npm run typecheck
npm test # 单元 + 组合 + 凭据校验
npm run build
# scripts/ 只随仓库发布,不含在 npm 包内:请在仓库检出后运行
node scripts/smoke.mjs # 在临时 DSH_HOME 中把构建产物挂到真实 seam 上冒烟
node scripts/smoke-noauth.mjs # 验证无 authorization 服务时插件树照常启动
node scripts/verify-live.mjs # 真实 grant 端到端探测(使用真实 grant,发送一个最小请求)
node scripts/verify-vision.mjs # opencode-go 视觉路由探测(REASONING_EFFORT=low|high|max|off)
兼容性注记
模型路由始终激活;登录工具需要 authorization 服务挂载 + 显式开启。dsh 0.1.1-rc.2 的 dsh-base 默认不挂该服务——profile patch 已补充挂载。服务缺失绝不能拖垮整个插件树。
License
MIT