Skip to content

release: 合入 feature/1.x.x —— v0.0.12 提交详情光标跟随悬浮卡 · Tooltip 交互修复 · 布局优化 · 依赖升级基线(主线归并) - #79

Merged
ThreeFish-AI merged 21 commits into
masterfrom
feature/1.x.x
Jul 4, 2026
Merged

release: 合入 feature/1.x.x —— v0.0.12 提交详情光标跟随悬浮卡 · Tooltip 交互修复 · 布局优化 · 依赖升级基线(主线归并)#79
ThreeFish-AI merged 21 commits into
masterfrom
feature/1.x.x

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

概述

将版本演进分支 feature/1.x.x 归并回 master,保持主线同步(同 v0.0.11 的 #68)。本次归并承载 v0.0.12 正式版(已打 tag v0.0.12 并完成 GitHub Release + VS Code Marketplace 发布)及自上次主线同步以来 feature/1.x.x 上累积的全部提交。

承载内容(v0.0.12)

发布状态

  • Tag v0.0.12 已推送,CI run 全绿(三平台矩阵 + package + github-release + publish)。
  • GitHub Release v0.0.12(正式版)已发布并附 hyper-git-agentic-git-0.0.12.vsix;Marketplace publish job 成功。

本 PR 为主线同步,不含额外源码改动;内容已随 v0.0.12 tag 经三平台 CI 校验。

ThreeFish-AI and others added 21 commits July 4, 2026 12:49
…ontrol;

根因:#48「浮层定位修复」将 positionTip/positionCommitTip 横向定位改为 left=window.innerWidth+8,
误以为 webview position:fixed 可越界渲染到编辑器。实则侧边栏 WebviewView 是沙箱 iframe,坐标系
为 iframe 自身视口,该值落到右边界外被裁剪不可见。抽出共用 positionFloat(锚触发元素右侧→越界翻
左→再越界收进视口),彻底修复 CI 与提交两处浮层。

同时按需求将面向用户的「Log」视图更名为「Graph」,并对齐 VS Code 官方 Source Control GRAPH 视图
样式(不改底层数据/协议/布局算法/CI 逻辑):
- 泳道连线 <line> 直线改三次贝塞尔 <path> 平滑曲线(fromCol===toCol 自动退化直线);
- 当前 HEAD 行节点渲染为空心环+内点(双环高亮),普通行保持实心点;
- 引用胶囊改实心半透明底+同色描边+内联 SVG 图标前缀(分支/云/tag,因无 codicon 字体);
- 工具栏 seg 按钮间距/圆角/hover 态贴近官方;
- package.json 视图名与 Refresh/Filter/Clear Graph Filter 命令标题、CI 配置描述、aria-label
  统一为 Graph(viewType hyperGit.log、log/* 消息前缀、类名等内部标识符不动)。

验证:check-types/lint/生产打包通过,324 单测全绿;贝塞尔几何与 HEAD 判定纯函数 11 项自测通过;
离线 harness 浏览器截图目视对齐官方 GRAPH 视图。

🤖 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>
Review 复核发现上一轮 chips 与官方 Source Control GRAPH 视图存在三处实质偏离,本次逐项对齐(截图逐行比对官方图确认):
- 位置:chips 从 message 左侧前缀移到右侧后缀(列序 泳道图→message→chips→author→date→CI);
- 颜色:底色改为跟随本行泳道色 laneColor(row.layout.node.colorIdx),类型靠图标区分而非颜色,
  与官方一致(同名 origin 远程分支随所在行泳道呈多色);新增 onColor() 按底色亮度自适应深/白字保可读;
- 形状:由半透明小圆角矩形(radius 3px)改为实心不透明全圆角 pill(radius 8px),保留分支/云/tag 图标前缀;
- #commit-tip 浮层内胶囊同步同款样式,与行内保持一致。

仅渲染层调整:chipsHtml/rowHtml/buildCommitTip + CSS,未触碰数据/协议/布局算法/CI 逻辑。
验证:check-types/lint/生产打包通过,324 单测全绿;DOM 结构断言(chips 在 msg 后、颜色跟泳道、
HEAD 空心环)+ Chrome headless 截图与官方图 3 逐行比对确认对齐。

🤖 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>
需求:悬停 GRAPH 列表某 commit 时,在右侧编辑器区展示该提交详情面板(对齐官方 Source Control
Graph 的 hover 面板位置)。原实现是侧栏 iframe 内 position:fixed 浮层——受浏览器沙箱限制,DOM
浮层无法渲染到 iframe 之外的编辑器区,此路架构上封死,故改用 WebviewPanel。

实现(仅渲染/呈现层,不改数据/协议既有分支/布局算法/CI 逻辑):
- 新增 CommitDetailPanel(editor 区 WebviewPanel,ViewColumn.Beside + preserveFocus 不抢焦点):
  单例复用,悬停切换只 postMessage 换数据 + reveal,不反复 create/dispose;reqSeq 竞态守卫 +
  lastHash 去重;onDidDispose 置空、下次悬停重建。面板内容 = 头像占位+作者+相对/绝对时间、完整
  message、变更统计(N files changed/+ins/-del)、完整 hash + Open on GitHub。
- GRAPH 悬停 400ms 防抖 → 发 log/showCommitDetail;移除旧侧栏浮层 #commit-tip(CSS/DOM/JS 约
  20 处),CI 浮层 #ci-tip 保持不动;i 键改为对选中提交打开面板(保留键盘可达)。
- engine 纯函数(零 vscode,可单测):parseShortStat(shortstat 解析)、commitWebUrl(GitHub 提交
  页 URL)、format-time(相对/绝对时间,host 侧预格式化下发)。github-ci-service 暴露 public
  getGitHubRemote 复用远程解析缓存;Open on GitHub 走既有 openExternal(SSRF 白名单已放行 web 域)。
- protocol 扩展 CommitDetailVM/Stat + log/showCommitDetail + commitDetail/data、openExternal 消息。

验证:check-types/lint/生产打包通过;单测 341 全绿(新增 shortstat/commitWebUrl/format-time 17
例);panel 离线 harness 浏览器截图与官方图逐项比对对齐。注:编辑器区面板生命周期/悬停/不抢焦点
需真实 VS Code F5 端到端确认(webview 交互离线不可覆盖)。

🤖 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-log-view-commit-tooltip

# Conflicts:
#	src/adapter/webview/log-webview.ts
根因:Dependabot #60 单方面把 @types/vscode 从 ~1.85.0 bump 到 ~1.125.0,未联动 engines.vscode
(自 M0 起刻意固定 ^1.85.0 的广兼容基线,从未上调)。vsce package 强制要求 @types/vscode 的
major.minor ≤ engines.vscode,1.125 > 1.85 命中校验失败,连带令基于 feature/1.x.x 的下游 PR
(含本 PR #65)Package vsix job 全部 fail。

修复(降级依赖,不动 engines):
- @types/vscode ~1.125.0 → ~1.85.0(对齐 engines.vscode ^1.85.0);同步 pnpm-lock.yaml。
- .github/dependabot.yml 为 npm 生态加 ignore: @types/vscode,防 Dependabot 再次单方面 bump
  破坏约束——该版本须与 engines 联动,属人工产品决策。

循证(Workflow 三路调研):代码未用任何 >1.85 的稳定 API(最新为 TreeView.badge,1.72 稳定),
降级不致 tsc 报错;升 engines 会不可逆抬高 Marketplace 安装门槛、收窄用户面,违背广兼容定位,不取。

验证(本地复现原失败点):check-types/lint 通过;vsce package 成功生成 vsix(原报错点解除);
单测 349 全绿。

🤖 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>
对照官方截图逐字符核验三处真实偏差并修复(DOM 文本 ground truth,非图像识别):
- diffstat:'3 files changed +86 -1'(简写)→ '3 files changed, 86 insertions(+), 1 deletion(-)'
  (完整文字、逗号分隔,绿/红着色覆盖数字+insertions(+)/deletions(-) 整段);
- 时间:'7 hr ago · 2026/7/4 09:41'(缩写/数字日期/带秒)→ '7 hours ago (2026年7月4日 09:12)'
  (相对时间全拼 hours/minutes/days、括号包裹本地化绝对时间、去掉秒);
- 作者区:邮箱从作者名旁尖括号移到第二行(与时间同色同行)。

formatRelative/formatAbsolute 同步改全拼/去秒并更新单测;check-types/lint/349 单测/vsce package 通过。

🤖 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>
撤回上一轮的 WebviewPanel(Beside) 方案(在编辑器区开 tab,与官方 hover tooltip 相悖),按方案 A 实现:

- 提交详情浮层重回 webview 内(#commit-tip),但定位改为 cursor-anchored:mousemove 跟踪光标,
  浮层锚在光标处、边沿自动翻转(右→左、下→上)、钳制视口。这是 sidebar webview iframe 限制下
  最接近官方观感的做法(GitLens/Git Graph 同款限制,无法溢出到编辑器区像素)。
- 交互:400ms 防抖请求 → host 组装富数据 → 回包渲染(无空闪);hover bridge(移到浮层不消失,
  方便点 Open on GitHub);mouseout/scroll/Escape 隐藏;i 键键盘可达(锚选中行 rect,无光标)。
- 富布局:头像+作者+邮箱·相对(绝对)时间/subject+body/diffstat(绿红 tabular-nums)/hash+Open on GitHub,
  对齐前几轮已校准的官方字符级文案。
- 统一所有 tooltip:CI 浮层也用 positionAtCursor(替换原 rect 锚),共享 editorHoverWidget 语义
  令牌/阴影/圆角,视觉语言一致。

实现:buildCommitDetail 移入 LogWebviewProvider 私有方法(复用 engine 纯函数 parseShortStat/
commitWebUrl/formatRelative/formatAbsolute);删除 commit-detail-panel.ts;protocol 新增
log/commitDetail(host→webview)。

验证:check-types/lint/生产打包/349 单测通过;harness 截图 DOM 核实浮层锚在光标右下、富布局完整。

🤖 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>
… tsconfig 迁移);

冲突解决(3 处均取 HEAD——hover tooltip 是用户最新决定方向,feature 上 #65 squash 带的是已撤回的 WebviewPanel 版本):
- log-webview.ts:保留 HEAD 光标跟随 hover tooltip + log/commitDetail 回包;丢弃 feature 的 WebviewPanel 方案。
- format-time.ts / log-format-time.test.ts:保留 HEAD 全拼(minutes/hours)+ 去秒;丢弃 feature 的缩写(min/hr)+ 带秒。
- commit-detail-panel.ts:HEAD 已删(撤回 WebviewPanel),feature 重新引入→再次删除。

feature 净并入:package.json/pnpm-lock.yaml(vitest 4 / vite 7 / typescript-eslint 8.62.1 / TS 6.0.3)、
tsconfig.json(#67 模块解析迁移)。

验证:TS 6 / vitest 4 / vite 7 新基线下 check-types/lint/生产打包/349 单测/vsce package 全通过。
回归根因:上一轮把 positionTip(rect) 统一改成无参 positionTip()(cursor-anchored),导致键盘触发
路径(聚焦 CI 图标按 Enter)传入的 rect 被忽略,tooltip 锚到过时光标坐标(甚至 0,0)→ 看似消失。

修复:positionTip(rect?) 双模式——有 rect(键盘,无光标)用 positionAtRect 锚图标 rect;
无 rect(鼠标 hover / ciData 刷新,光标已知)用 positionAtCursor 跟随光标。兼顾「键盘可达」与
「鼠标 hover 跟随光标」两个诉求。

验证:check-types/lint/生产打包/349 单测通过。

🤖 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>
回归根因:上一轮 b6877cc 重做提交详情浮层时,只保留了 author/message/diffstat/hash/github,
遗漏了引用胶囊分组(HEAD/Branches/Remotes/Tags)与 Committer(提交者+提交时间)行——数据一直都在
(chips/泳道色在 webview model.rows,committer 在 VM),仅渲染未写。

修复(数据齐备,纯补渲染):
- renderCommitTip 新增 refsHtml:从 model.rows 取该行 chips,按 HEAD/Branches/Remotes/Tags 分组,
  实心胶囊底色跟随该行泳道色(复用 laneColor/onColor/chipIcon,与行内胶囊同款)。
- 新增 Committer 行:提交者名 + 相对(绝对)时间,仅当与作者不同才显示(避免与头部冗余)。
- protocol:CommitDetailVM 增 committerDateRel/committerDateAbs(host 侧 formatRelative/Absolute 预格式化)。
- 配套 CSS:.ct-refs-wrap/.ct-sec/.ct-k/.ct-v/.ct-refs/.ct-dim。

验证:check-types/lint/生产打包/349 单测通过;harness 截图确认 Branches/Remotes/Tags 胶囊 +
Committer 行 + 原有 author/message/diffstat/hash/github 全部齐全。

🤖 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-log-view-commit-tooltip

# Conflicts:
#	src/adapter/webview/log-webview.ts
…mmit-tooltip

fix(Graph): 修复 Tooltip 两处回归——CI 键盘触发丢失 + 提交详情缺失 branches/tags/committer
将原打向 master 的 4 个 dependabot 升级合并为单个 PR,直接进入集成分支 feature/1.x.x:

- @vscode/test-electron 2.4.1 → 3.0.0(major)
- vite 7.0.0 → 8.1.3(major)
- @stylistic/eslint-plugin 2.9.0 → 5.10.0(major)
- @types/node 26.0.1 → 26.1.0

根因修复:dependabot.yml 未设 target-branch 时回退默认分支 master,与「deps 先落
feature/1.x.x,再合入 master」的集成流冲突;为 npm 与 github-actions 两个 ecosystem
锚定 target-branch: feature/1.x.x,使后续 deps PR 直接进入集成分支。

取代 dependabot PR #70 #71 #72 #73。
本地已过 check-types / lint / 生产构建 / 349 项单测;集成测试以 PR CI 为准。

🤖 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>
build(Deps): 4 项依赖升级转向 feature/1.x.x 并锚定 dependabot target-branch
问题1(两浮层叠加):鼠标在 CI 图标上时,CI 详情浮层与提交详情浮层同时显示、后者覆盖前者。
根因:commit 的 mouseover 命中 CI 图标时仅 return,未隐藏已显示/在途的提交浮层;CI 的 mouseover
显示 CI 浮层时也未隐藏提交浮层。
修复(二者严格互斥):
- commit mouseover 命中 CI 图标 → 即时 hideCommitTip()(含取消在途 400ms 定时器)再 return;
- CI mouseover → 先 hideCommitTip() 再 scheduleShow(CI);
- CI mouseout 回落到同行行体(非 CI 区)→ scheduleShowCommit 切回提交浮层。
经 Playwright 模拟 hover 序列验证:行体→仅提交浮层;CI 图标→仅 CI 浮层;移回行体→仅提交浮层。

问题2(引用胶囊截断):提交浮层内 Branches/Tags 等胶囊沿用行内 .chip 的 max-width:160px +
省略号,长名被截断(…)。
修复:#commit-tip 内覆盖为 max-width:none + chip-nm 换行不截断(overflow visible / word-break),
浮层空间充足,refs 区已 flex-wrap 换行承载。

验证:check-types/lint/生产打包/349 单测通过;Playwright 动态验证互斥;harness 核实胶囊完整显示。

🤖 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>
…mmit-tooltip

fix(Graph): CI 与提交详情 Tooltip 互斥 + 引用胶囊完整显示,并合入 #75 依赖升级
用户反馈 CI 状态详情浮层离鼠标偏远。核实:CI hover 已走 positionAtCursor(跟随光标),
但 CI 图标恒在行最右、光标 X 贴侧栏右沿,横向翻转 + gap=14 使浮层与光标间距偏大,观感不够「贴」。

修复(CI 与提交浮层共用 positionAtCursor,一并受益):
- gap 14→8:浮层紧贴光标(右沿/底边距光标仅 8px)。
- 纵向翻转补 Math.max(pad, …) 钳制,避免上翻越出视口顶部。
- 横向沿用「右侧优先、越界翻左(右沿贴光标)」,窄侧栏下浮层右上角紧邻光标。

验证:check-types/lint/生产打包/349 单测通过;Chrome headless 截图确认 CI 浮层右上角紧贴 CI 图标
(光标)左下方,较 gap=14 明显更近。

🤖 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>
…sor-gap

fix(Graph): CI 与提交详情 Tooltip 定位更贴近光标(gap 14→8)
…级基线;

- package.json: 版本 0.0.11 → 0.0.12;
- CHANGELOG: 新增 [0.0.12] 节(Changed/Fixed/Build/Docs),并入侧边栏布局条目;
- docs/releases/v0.0.12.md: 新增面向用户 Release Note(GitHub Release 正文单一事实源);
- docs/releases/README.md: 版本索引新增 v0.0.12 行;
- docs/README.md、knowledge-map: 「最新发布」指针修正为 v0.0.12(原滞留 v0.0.9);

🤖 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): 发布 v0.0.12 —— 提交详情光标跟随悬浮卡 · Tooltip 交互修复 · 布局优化 · 依赖升级基线
@ThreeFish-AI
ThreeFish-AI merged commit 2b09ff7 into master Jul 4, 2026
19 checks passed
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