Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@

> 面向用户的发布说明(含完整特性叙述与安装指引)见 [`docs/releases/`](./docs/releases/README.md)。

## [0.0.7] - 未发布
## [0.0.9-rc.2] - 2026-07-04 — 浮层定位修复

### Fixed
- **Log 提交/CI 浮层定位重做**:原 `positionTip`/`positionCommitTip` 把浮层锚定在所悬元素左沿并按 webview 宽度夹紧,420px 宽的浮层在 ~240px 窄侧边栏中从左沿一路铺到编辑器,既「撑满 LOG 视图」又方位怪异。改为横向固定到 `window.innerWidth + 8`(侧边栏右沿外、编辑器区内),纵向与所悬行/图标顶部对齐并按视口高度夹紧;复用 webview `position:fixed` 可越界渲染到编辑器区的特性,浮层不再压住 LOG 列表,自然悬浮于所悬行的右侧。

## [0.0.9-rc.1] - 2026-07-04 — 0.0.9 候选版

### Added
- **变更文件目录树切换**:Commit 视图活动 Changelist 文件列表、Log 视图选中提交的变更文件列表均支持「平铺 / 按目录分组(Group by Directory)」两态切换(工具栏 List/Tree 段控),偏好按视图 `webview.setState` 记忆。目录树由纯逻辑 [`engine/tree/file-tree.buildFileTree`](./src/engine/tree/file-tree.ts) host 侧构建随 payload 下发(复用 graph-layout「host 算、webview 渲」范式,规避内联脚本无法 import engine 的 Split-Brain),叶子以 `fileIndex` 回指扁平列表;支持单目录子链折叠(对齐 VS Code `explorer.compactFolders`);Commit 树形附目录级三态复选框。详见 [变更文件目录树](./docs/features/file-list-group-by-directory.md)。
Expand All @@ -19,6 +24,8 @@

### Fixed
- 修复 `vsce package` 打包因 ESLint `no-useless-assignment` 阻断:`engine/ci/remote-parser.ts` 中 `host`/`path` 的空串初值为 dead store(`hasScheme` 真假两分支均无条件重赋、解析失败处先 `return null`),改为带类型标注的纯声明消除,由 TS 确定赋值分析接管,运行时行为不变。
- 修复 Log 提交悬浮浮层「行→浮层→空白」后卡死不消失:`commitTipEl.mouseleave` 未复位 `overCtRow`,致 `scheduleHideCommit` 的 `!overCtRow && !overCt` 守卫恒不成立;在 `mouseleave` 一并复位 `overCtRow` 修复。
- 修复 `capBody` 截断劈开 Unicode 代理对:`String.prototype.slice(0, BODY_CAP)` 按 UTF-16 码元计数,2000 边界落在 emoji 代理对中间会留下孤立高代理位(渲染为 `�`);改用 `Array.from(t).slice(0, BODY_CAP).join('')` 按码点截断。

## [0.0.6] - 2026-06-30 — 首个 MVP 正式版

Expand Down Expand Up @@ -83,4 +90,6 @@
- 目录 / folder diff(虚拟文档)、Submodules 管理。
- M5 AI Agent(5 个接缝已预埋 Null 实现,本版未启动)。

[0.0.9-rc.2]: https://github.com/ThreeFish-AI/hyper-git/releases/tag/v0.0.9-rc.2
[0.0.9-rc.1]: https://github.com/ThreeFish-AI/hyper-git/releases/tag/v0.0.9-rc.1
[0.0.6]: https://github.com/ThreeFish-AI/hyper-git/releases/tag/v0.0.6
2 changes: 1 addition & 1 deletion docs/.agents/knowledge-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
- [工程实施方案](../docs/architecture/engineering-plan.md) — 路径 B 架构 + M0-M5 里程碑(**开发蓝图**)。
- [Git 功能矩阵](../docs/requirements/idea-feature-matrix.md) — 56 功能点 / 8 组(**验收基线**,参考 IDEA 等成熟实现)。
- [调研报告](../docs/research/README.md) — SCM 集成 / 工程蓝图 / 发布 CI / AI 接缝四路循证报告。
- [发布说明](../releases/README.md) — 各正式版 Release Notes(GitHub Release 正文单一事实源;最新 [v0.0.6](../releases/v0.0.6.md))。
- [发布说明](../releases/README.md) — 各正式版 Release Notes(GitHub Release 正文单一事实源;最新 [v0.0.9-rc.2](../releases/v0.0.9-rc.2.md))。

## 架构分层(src/)
> 依赖方向单向:`UI → Adapter → Engine`;`Agent` 以接口注入 `Engine`/`CommitPipeline`,不反向依赖 UI。
Expand Down
2 changes: 2 additions & 0 deletions docs/releases/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

| 版本 | 说明 | 日期 |
|---|---|---|
| [v0.0.9-rc.2](./v0.0.9-rc.2.md) | 0.0.9 候选版(浮层定位修复:浮到侧边栏右侧编辑器区) | 2026-07-04 |
| [v0.0.9-rc.1](./v0.0.9-rc.1.md) | 0.0.9 候选版(Commit/Log 视图重构 + 文件目录树 + 提交悬浮详情) | 2026-07-04 |
| [v0.0.6](./v0.0.6.md) | 首个 MVP 正式版(以「Hyper Git - Agentic Git」之名上架) | 2026-06-30 |

## 相关文档
Expand Down
69 changes: 69 additions & 0 deletions docs/releases/v0.0.9-rc.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Hyper Git - Agentic Git v0.0.9-rc.1 — 0.0.9 候选版

> ⚠️ **Release Candidate**:本版本是 0.0.9 正式版的候选版(预发布),聚焦**提交/日志视图整合与可用性增强**。已通过本地类型/Lint/324 单元测试与 Extension Development Host 实测,欢迎在 [Issues](https://github.com/ThreeFish-AI/hyper-git/issues) 反馈问题;正式版将在收口反馈后发布。

本次迭代围绕「消除冗余、对齐全 IDE 体验」做了一次内聚重构:移除与 Commit 视图数据同源的冗余 CHANGES 树视图并把其全部能力平移入 Commit webview,同时为 Commit / Log 两个文件列表补齐 IntelliJ / VS Code SCM 同款的「按目录分组」形态,并为 Log 提交图补齐悬浮详情。侧边栏视图数由 7 降为 6,提交工作流更聚焦。

---

## ✨ 亮点速览

- **Commit 视图整合(移除 CHANGES)**:原 CHANGES 树的活动 Changelist 与 Commit 视图完全重复,现删除 CHANGES,文件单击看 Diff、单文件右键菜单、Changelist 切换与管理、Git 工具栏与未提交角标**零回归**平移入 Commit 视图。
- **文件列表按目录分组**:Commit 与 Log 的变更文件列表新增 List / Tree 段控,树形按目录折叠(对齐 VS Code `explorer.compactFolders`),Commit 树附目录级三态复选框;偏好按视图记忆,切换零往返。
- **Log 提交悬浮详情**:悬停任一提交行 ~400ms,浮层展示分支/标签/HEAD、完整提交消息(subject + body)、作者与提交者、绝对+相对时间、完整 SHA;与 CI 浮层互斥,`i` 键开 `Esc` 关。

---

## 🧩 完整能力

### Commit 视图整合(原 CHANGES 视图能力全量平移)
CHANGES 树视图与 Commit 视图顶部「Active Changelist」展示同一份数据(同源 `service.getChanges()` + `registry.getGroups()`),属冗余。本版本删除 CHANGES 视图,其独有能力全部迁入 Commit webview:

- **文件交互**:活动 Changelist 文件单击打开原生 Diff(HEAD ↔ Working);右键原生 QuickPick 菜单执行 Open Diff / Move to Changelist… / Show History / Stage·Unstage Hunks… / Add to .gitignore / Discard Changes(含 discard 确认框)。
- **Changelist 管理**:头部 `<select>` 切换活动列表;`⋯` 菜单新建 / 重命名 / 删除(默认列表不可改名删除)。
- **Git 工具栏与角标**:原挂在 CHANGES 标题栏的 refresh / push / pull / fetch / push 对话框 / updateProject / createPatch / applyPatch 迁至 Commit 视图标题栏(去掉与 webview 内按钮重复的 commit / commitAndPush);活动栏未提交数角标改由 Commit `WebviewView.badge` 承载(首帧未 resolve 以 `pendingBadge` 兜底)。
- **命令实参单一事实源**:文件级命令统一接受 `ChangeItem | 路径字符串`,host 经 `resolveChange` 回落 `service.getChanges()` 解析;右键菜单复用 Log 视图「webview `postMessage` → host `showQuickPick` → 复用既有命令」范式,键盘可达、无 CSP/焦点陷阱。视图刷新改由 `registry/service.onDidChange → refreshAll → commitView.refresh()` 驱动。

### 变更文件目录树切换(Group By Directory)
Commit 视图活动 Changelist 文件列表、Log 视图选中提交的「Changed Files」列表,均支持在**平铺列表**与**按目录分组的树形**之间切换(工具栏 List/Tree 段控),默认平铺,偏好按视图各自记忆。

- **host 算树、webview 渲染**:新增纯逻辑 `engine/tree/file-tree.buildFileTree`,host 侧按同批扁平文件路径构建目录树随 payload 下发(复用 graph-layout「host 算、webview 渲」范式,规避内联脚本无法 import engine 的 Split-Brain);叶子以 `fileIndex` 回指扁平列表,不复制条目数据。
- **对齐 VS Code / IntelliJ**:目录在前、文件在后,数字感知升序稳定排序;单目录子链 compact 折叠(如 `a/b/c` → `a/b`,对齐 `explorer.compactFolders` 默认行为)。
- **Commit 目录三态**:树形叶子勾选 + 目录级三态复选框(全选/部分/未选)级联,Select All 基于全量文件;Log 为只读浏览。切换/折叠零 host 往返。

### Log 提交悬浮详情(Commit Tooltip)
鼠标悬停 Log 视图任一提交行,以浮层快速展示该提交的完整信息,**零往返、零延迟**(数据随首帧图下发):

- **内容**:所在本地/远程分支、标签、HEAD;完整提交消息(subject + body,多行保留、超长滚动 + 截断);作者 `name <email>`;(与作者不同时的)提交者;作者/提交时间(绝对 + 相对);完整 SHA。
- **复用 CI 浮层范式**:浮层置于虚拟滚动 `#rows` 之外(重写行 DOM 不销毁);与 CI 浮层互斥;滚动、刷新、切换范围、增量数据均即时消隐;`i` 键打开、`Esc` 关闭(`stopPropagation` 不与 `Enter`→提交菜单冲突);移除 chips 原生 `title` 双重气泡。
- **取数扩展**:`git log --format` 增 `%cn`(提交者)、`%cI`(提交时间)、`%b`(正文,置末字段,记录以 RS 终止、字段以 NUL 分隔,正文内换行/管道/反斜杠不被误判为边界);正文 host 侧 `capBody` 截断至上限以控 1000 行 payload。
- **XSS 安全**:分支名/标签/作者/正文等一切外部内容均经 `esc()` 转义后注入。

---

## 🐛 改进与修复

- 修复 Log 提交悬浮浮层在「行 → 浮层 → 空白」路径下卡死不消失(`mouseleave` 复位 `overCtRow`)。
- 修复 `capBody` 截断劈开 Unicode 代理对致末尾出现孤立 `�`(改用 `Array.from` 按码点截断)。

---

## ⚙️ 升级与兼容

- **视图数 7 → 6**:CHANGES 视图移除,其能力在 Commit 视图找不到的入口欢迎反馈。
- **状态持久化**:Commit webview 的 `setState` 形状扩展(新增 `mode` / `collapsed`)、Log webview 扩展(`dmode` / `dcollapsed`),旧状态自动降级为默认(平铺),无破坏性。
- 未引入新的配置项;现有 `hyperGit.commit.*` / `hyperGit.log.ci.*` 配置不变。

---

## 📦 安装

- **VS Code Marketplace**:本候选版默认不上架 Marketplace(由 CI `ENABLE_MARKETPLACE_PUBLISH` 门控)。
- **OpenVSX**:以预发布版本发布。
- **手动**:从 [Releases](https://github.com/ThreeFish-AI/hyper-git/releases/tag/v0.0.9-rc.1) 下载 `hyper-git-agentic-git-0.0.9-rc.1.vsix` → 命令面板 `Extensions: Install from VSIX`。

---

## 💬 反馈

候选版阶段尤其欢迎反馈:[GitHub Issues](https://github.com/ThreeFish-AI/hyper-git/issues)。完整工程视角变更记录见 [CHANGELOG](../../CHANGELOG.md#%E9%80%9A%E7%94%A8)。
25 changes: 25 additions & 0 deletions docs/releases/v0.0.9-rc.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Hyper Git - Agentic Git v0.0.9-rc.2 — 浮层定位修复

> ⚠️ **Release Candidate**:本版本是 0.0.9 的第二个候选版,聚焦修复 [v0.0.9-rc.1](./v0.0.9-rc.1.md) 中 Log 视图浮层的定位问题。完整特性集同 rc.1。

## 🔧 本版修复

### Log 提交/CI 浮层定位重做(不再撑满侧边栏)

rc.1 中,提交悬浮详情与 CI 状态浮层被锚定在所悬元素的**左沿**、并按 webview 宽度夹紧。在 ~240px 的窄侧边栏里,420px 宽的浮层从侧边栏左沿一路铺到编辑器,既「撑满 LOG 视图」又方位怪异。

rc.2 改为:
- **横向**:固定到 `window.innerWidth + 8`——即侧边栏右沿外 8px、编辑器区内,浮层整体浮在 LOG 视图右侧,不再压住提交列表。
- **纵向**:与所悬行/图标顶部对齐,按视口高度夹紧(超出下沿自动上移)。
- 复用 webview `position:fixed` 可越界渲染到编辑器区的特性,浮层自然悬浮于所悬行的右侧,贴近原生 tooltip 体验。

CI 状态浮层(`positionTip`)与提交详情浮层(`positionCommitTip`)同步应用该定位逻辑。

## 📦 安装

- **OpenVSX**:以预发布版本发布(Cursor / Windsurf 等 AI IDE 可装)。
- **手动**:从 [Releases](https://github.com/ThreeFish-AI/hyper-git/releases/tag/v0.0.9-rc.2) 下载 `hyper-git-agentic-git-0.0.9-rc.2.vsix` → 命令面板 `Extensions: Install from VSIX`。

## 💬 反馈

候选版阶段尤其欢迎反馈:[GitHub Issues](https://github.com/ThreeFish-AI/hyper-git/issues)。完整工程视角变更记录见 [CHANGELOG](../../CHANGELOG.md)。
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"displayName": "Hyper Git - Agentic Git",
"icon": "media/icon.png",
"description": "Hyper Git brings IntelliJ IDEA's powerful Git & Commit modules to VS Code, enhanced with AI-powered autonomous agents for intelligent repository management. Experience Git in a higher dimension.",
"version": "0.0.8",
"version": "0.0.9-rc.2",
"publisher": "ThreeFish-AI",
"license": "MIT",
"preview": true,
Expand Down
32 changes: 14 additions & 18 deletions src/adapter/webview/log-webview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -810,15 +810,13 @@ function buildTip(ci) {
}
function positionTip(rect) {
ciTipEl.style.display = 'flex';
const tw = ciTipEl.offsetWidth, th = ciTipEl.offsetHeight;
const vw = window.innerWidth, vh = window.innerHeight, pad = 6;
let left = rect.left;
if (left + tw > vw - pad) left = vw - pad - tw;
if (left < pad) left = pad;
let top = rect.bottom + 4;
if (top + th > vh - pad) top = rect.top - th - 4;
if (top < pad) top = pad;
ciTipEl.style.left = left + 'px';
const th = ciTipEl.offsetHeight;
const vh = window.innerHeight, pad = 6;
// 横向:浮到侧边栏右侧(编辑器区内),不再压住 LOG 列表本身;webview 的 position:fixed 可越界渲染到编辑器。
ciTipEl.style.left = (window.innerWidth + 8) + 'px';
// 纵向:与所悬图标顶部对齐,超出视口下沿则上移。
let top = rect.top;
if (top + th > vh - pad) top = Math.max(pad, vh - pad - th);
ciTipEl.style.top = top + 'px';
}
function scheduleShow(hash, iconEl) {
Expand Down Expand Up @@ -1032,15 +1030,13 @@ function buildCommitTip(row) {
}
function positionCommitTip(rect) {
commitTipEl.style.display = 'flex';
const tw = commitTipEl.offsetWidth, th = commitTipEl.offsetHeight;
const vw = window.innerWidth, vh = window.innerHeight, pad = 6;
let left = rect.left;
if (left + tw > vw - pad) left = vw - pad - tw;
if (left < pad) left = pad;
let top = rect.bottom + 4;
if (top + th > vh - pad) top = rect.top - th - 4;
if (top < pad) top = pad;
commitTipEl.style.left = left + 'px';
const th = commitTipEl.offsetHeight;
const vh = window.innerHeight, pad = 6;
// 横向:浮到侧边栏右侧(编辑器区内),不再压住 LOG 列表本身;webview 的 position:fixed 可越界渲染到编辑器。
commitTipEl.style.left = (window.innerWidth + 8) + 'px';
// 纵向:与所悬行顶部对齐,超出视口下沿则上移。
let top = rect.top;
if (top + th > vh - pad) top = Math.max(pad, vh - pad - th);
commitTipEl.style.top = top + 'px';
}
function scheduleShowCommit(hash, rowEl) {
Expand Down