Skip to content

feat(desktop): GitHub Device Flow 登录与工作区 PR 面板#115

Merged
N123999 merged 12 commits into
mainfrom
feat/desktop-github-pr-oauth
Jun 12, 2026
Merged

feat(desktop): GitHub Device Flow 登录与工作区 PR 面板#115
N123999 merged 12 commits into
mainfrom
feat/desktop-github-pr-oauth

Conversation

@N123999

@N123999 N123999 commented Jun 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • 在 Desktop 右侧工具栏新增 PR 选项卡(Electron 手动开启),支持 GitHub Device Flow 登录、当前分支 open PR 检测与 PR 详情查看。
  • host-internal 增加 GitHub remote 解析、PR API 与 Device Flow 模块;OAuth token 存 keyring,Client ID 通过 apps/desktop/.env 配置(见 .env.example)。
  • 登录流包含设备验证码展示、登录中取消、401/403 自动清凭证;移除未使用的 PKCE / loopback 遗留代码。

Test plan

  • 复制 apps/desktop/.env.example.env 并配置 SPIRIT_GITHUB_OAUTH_CLIENT_ID(OAuth App 已启用 Device Flow)
  • Electron 下通过「+」添加 PR 选项卡,未连接时显示 Connect 与示例卡片
  • Connect GitHub:浏览器打开设备授权页,面板显示 8 位验证码,授权后显示已连接用户名
  • 登录等待期间点击「取消」可中止轮询且不残留 pending 状态
  • 已连接且 origin 为 GitHub 时,当前分支有 open PR 则显示摘要;可加载详情与跳转 GitHub
  • token 失效(401)或 org SSO 未授权(403)后 UI 回到未连接状态
  • packages/host-internal Device Flow / remote / PR mapping 单测通过
  • apps/desktop npm run test:lib 通过

N123999 added 12 commits June 12, 2026 20:15
引入 host-internal github 子模块(PKCE、OAuth、remote 解析、PR API)及 Desktop keyring 存储封装。
Electron main 进程通过 loopback 回调完成 OAuth,host 命令暴露连接状态与登录/断开能力。
基于 origin 远程与当前分支调用 GitHub API,host 命令返回 PR 摘要与详情并处理认证错误。
右侧工具栏可通过 + 菜单开启 PR 面板,展示 GitHub 连接状态、示例数据与当前分支 PR 信息。
从仓库移除硬编码 Client ID,改为读取 apps/desktop/.env 中的
SPIRIT_GITHUB_OAUTH_CLIENT_ID;提供 .env.example 供协作参考。
OAuth App 的 authorization code 换 token 仍需 client_secret;改用设备流,
仅需 client_id 并在 UI 展示验证码。
PR 查询遇到 401 时清除 keyring 中的 OAuth token,面板在错误后重新拉取
auth status,避免仍显示已连接。
为 pending device auth 绑定 AbortController,disconnect 或 cancel 时
abort 轮询,避免 clearPending 后仍继续请求 GitHub。
覆盖 device code 请求、authorization_pending 轮询、abort 取消与
access_denied 错误映射。
新增 cancelGitHubDeviceLogin host 命令并在 PR 面板显示取消按钮,
登录等待期间可中止轮询而不必断开已保存的凭证。
与 401 一致,403(含 org SSO 未授权 token)时清除 keyring 中的 token,
避免 UI 仍显示已连接但 API 持续失败。
登录已统一走 Device Flow;删除 pkce 模块、authorization code 换 token
与 loopback redirect 相关常量及实现。
@N123999 N123999 merged commit 57c7763 into main Jun 12, 2026
N123999 added a commit that referenced this pull request Jul 1, 2026
feat(desktop): GitHub Device Flow 登录与工作区 PR 面板
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant