Skip to content

feat(Log): 提交记录显示 GitHub CI 最终状态(绿勾/红叉 + 悬停 Tooltip 明细)#37

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/log-ci-status-icons
Jun 30, 2026
Merged

feat(Log): 提交记录显示 GitHub CI 最终状态(绿勾/红叉 + 悬停 Tooltip 明细)#37
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/log-ci-status-icons

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景

需求:在 Log 视图(IDEA 风格提交图)每条提交记录上显示其 CI 最终状态 —— 绿勾=通过、红叉=未通过;鼠标悬停图标以 Tooltip 展示「未通过原因 + 各项 Actions/检查(含运行链接)」,效果对标 IntelliJ IDEA / GitHub 提交列表。

现状:Log 视图纯由本地 git log 驱动,此前完全没有 GitHub/CI 集成。CI(GitHub Actions + Commit Status)数据只存在于 GitHub,需经其 API 拉取。

设计要点

  • 认证:复用 VS Code 内置 GitHub 登录(repo 范围,支持私有+公开仓库),凭证不经过 chat/日志;静默复用已有会话,绝不自动弹窗,仅用户点击「登录 GitHub」按钮时才触发原生授权。
  • 平台:GitHub.com + GitHub Enterprise,按 origin 远程主机自动判定。
  • 懒加载:仅取可见行(约 50 行/次),终态整会话缓存、pending 30s TTL;GraphQL 批量 ≤100 oid/次、并发上限 2、限流冷却。1000 提交永不触发 1000 次请求,从根本上规避限流。
  • 图标位置:提交行最右侧(日期之后);.narrow 窄屏隐藏 author/date 时 CI 图标例外保留可见。
  • Tooltip:自定义 HTML 浮层(置于 #rows 之外,虚拟滚动重写不销毁),列出各项 check + 失败原因 + 运行链接,悬停意图(show 350ms / hide 220ms)+ 键盘可达 + 滚动/重绘重锚。
  • 安全openExternal 校验 https 且主机属 GitHub(反 SSRF,detailsUrl 属观察内容不盲信)。
  • 零新增运行时依赖:使用 Node 全局 fetch,不引入 octokit。

架构(分层)

文件 职责
Engine(纯逻辑,Vitest 可测) src/engine/ci/{types,remote-parser,graphql-query,rollup,model}.ts 远程解析、查询构造、状态归一化、响应解析
Adapter(唯一触碰 vscode/网络) src/adapter/ci/{github-auth,github-ci-service}.ts 认证、缓存、批量、限流、openExternal
协议 src/shared/protocol.ts log/requestCilog/ciDatalog/ciMetalog/openExternallog/ciSignIn
渲染 src/adapter/webview/log-webview.ts host 接线 + webview 图标/Tooltip/懒加载
配置/命令 package.json hyperGit.log.ci.{enabled,remote,provider}hyperGit.ci.signIn

验证

  • pnpm run check-types + pnpm run lint + pnpm run compile(esbuild)通过。
  • pnpm run test:unit 全绿(271 项,含新增 53 项 CI 单测:ci-remote-parser/ci-graphql-query/ci-rollup/ci-model)。
  • 边界:未推送/无 CI → 无图标;非 GitHub 远程 → 功能隐藏;断网/限流 → 不崩溃、建图正常;GHE 自动判定。
  • 文档:新增 docs/features/log-ci-status.md,并同步知识索引。

待人工验证(Extension Development Host)

OAuth/SSO 认证遵循协议由用户在 VS Code 原生 UI 完成,Agent 不代登录/不绕过。请在 F5 启动的 EH 中打开 GitHub 仓库复测:登录提示 → 授权 → 图标渐次出现 → 悬停红叉见明细与链接 → 点击打开 run。

🤖 Generated with Claude Code

- 新增 engine/ci(纯逻辑):GitHub 远程解析、GraphQL 批量查询构造、状态归一化与聚合、响应解析
- 新增 adapter/ci:复用 VS Code 内置 GitHub 认证、按 oid 缓存、批量 + 限流冷却、openExternal 反 SSRF
- 扩展协议:log/requestCi、log/ciData、log/ciMeta、log/openExternal、log/ciSignIn
- Log webview:提交行最右侧 CI 图标(懒加载仅取可见行)+ 自定义 Tooltip 浮层(明细 + 失败原因 + 跳转链接)
- 配置 hyperGit.log.ci.{enabled,remote,provider} 与命令 hyperGit.ci.signIn
- 新增单测 53 项覆盖 engine 层(ci-remote-parser/graphql-query/rollup/model)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI ThreeFish-AI merged commit 1465807 into feature/1.x.x Jun 30, 2026
5 checks passed
ThreeFish-AI added a commit that referenced this pull request Jun 30, 2026
* chore(Release): 发布 v0.0.5 首个 MVP 正式版:版本号/发布说明/CHANGELOG/文档引用全链路收敛;

- package.json 版本号 0.0.1 → 0.0.5(唯一权威版本源)
- Release Note 重命名为 docs/releases/v0.0.5.md 并重写:升级叙事、更新规模口径、补入提交图 CI 状态(#37)与 Checkpointer 过滤(#38)两特性
- CHANGELOG.md 仅保留 v0.0.5 段,含全部特性介绍
- 同步 README/docs/knowledge-map/implementation-status 版本引用,消除 0.0.1 与 0.5.0 残留

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* docs(Branding): 全仓措辞去「复刻 IDEA」产品定位,改为功能化专业描述;

- 用户可见/发布文案(package.json、README、CHANGELOG、Release Note v0.0.5、log-ci-status):
  「完整复刻 IntelliJ IDEA Git 工具窗口/Commit 窗口」改为「提供统一的 Git 变更管理与提交工作流」;
  「IDEA 风格提交图/Commit 窗口」改为「可视化提交图(DAG)/自绘提交面板」
- 内部调研/架构/需求/里程碑文档:产品定位句功能化,机制佐证动词软化为「参考/借鉴 JetBrains」,
  完整保留 JetBrains 源码 URL、CheckinHandler/ChangeListManager 等客观技术对照与证据链
- src/ 与 tests/ 代码注释(32 src + 1 test):去「复刻/IDEA 风格/IDEA 等价」定位,
  机制佐证软化为参考 JetBrains,仅改注释不动逻辑
- 验证:pnpm run compile GREEN;test:unit 280/280 全绿;全仓无活跃产品定位措辞残留

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* chore(Release): 扩展更名为 Hyper Git - Agentic Git 并发布 v0.0.6 重新上架;

因 VS Code Marketplace 上「Hyper Git」名称被误删不可用,将扩展以新发布名重新上架:
- package.json:name hyper-git → hyper-git-agentic-git(extension ID,Marketplace 唯一标识);
  displayName → Hyper Git - Agentic Git;version 0.0.5 → 0.0.6
- 保留 publisher、viewsContainers id(hyper-git)/title(Hyper Git)、228 处 hyperGit.* 命令与配置 key 不变,不破坏用户既有配置
- Release Note 重命名为 docs/releases/v0.0.6.md 并更新标题/导语/安装段(新 vsix 名 hyper-git-agentic-git-0.0.6.vsix + 新搜索名)
- CHANGELOG 仅保留 [0.0.6] 段并注明改名上架;README/docs 版本与安装引用同步 v0.0.6
- 验证:pnpm run compile GREEN;vsce package 产出 hyper-git-agentic-git-0.0.6.vsix;全仓无遗留 0.0.5 引用

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(Test): 集成测试 extension ID 改为从 package.json 动态推导,修复改名后冒烟测试失败;

扩展更名为 hyper-git-agentic-git 后,tests/suite/extension.test.js 中硬编码的旧 ID
`threefish-ai.hyper-git` 导致 getExtension 返回 undefined,三平台集成测试断言「扩展未找到」
失败,进而 Package/GitHub Release/Publish 全部 skipped、v0.0.6 未发布。

改为从 package.json 的 publisher + name 动态拼接 EXT_ID(单一事实源),
未来任何改名都不再需要同步改测试。本地集成测试验证 3 passing(exit 0)。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
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