diff --git a/CHANGELOG.md b/CHANGELOG.md index 339509a..895940a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## [Unreleased] +## [0.0.22] - 2026-10-24 — Graph 过滤持久化与激活指示 · Branches 就地更新 · 开发依赖升级 + ### Added - **Branches 视图分支就地更新(不 checkout)**:右键单个分支 **Update Branch**、多选批量更新、标题栏 Pull 按钮升级为选区感知(无选区保持原 Pull 语义,Commit 视图 Pull 不受影响)。底层原语 `git fetch refs/heads/:refs/heads/`——git 原生 fast-forward-only,diverged / ahead-only 分支被安全拒绝(附真实 stderr 原因),**永不改写本地提交**(src 侧全限定防 `+` 前缀上游名被解析为 force);当前分支自动改走 `repo.pull()`(含冲突处理通道);无上游分支透明跳过;无 remote 配置提示 `No remote repository configured` 提前返回(不误报 no upstream)。五桶对账汇总(updated / already up to date / pulled / skipped / failed,选中数 = 各桶之和),up-to-date 经前后 `objectname` 短 sha 前缀比对判定(fetch 静默 no-op 无输出;缩写长度随对象数伸缩,全等比对会误报)。upstream 解析不信任树节点数据(API 路径 `refToRaw` 不填 upstream/head),统一以一次 `for-each-ref` 取新鲜快照;`origin/x` 拆分复用 `resolveRemoteBranch` 最长前缀匹配(remote 名可含 `/`)。engine 纯逻辑 `planBranchUpdates` / `formatBranchUpdateResult` / `classifyFetchOutcome` 落于 `engine/ref/branch-update.ts`,全量单测覆盖。 @@ -14,6 +16,10 @@ - **Graph 视图过滤条件不再随重启 / 切库丢失(全部 7 个维度按仓库持久化)**:authors、File Path、Grep、Merge Mode、Date Filter、Message Regex 此前仅存于内存,重启 VS Code 或切换仓库后即被清空。现在沿用 scope/dmode 的按仓库 workspaceState 范式持久化——authors 独立 key(`hyperGit.log.authors:`),其余 6 维组合 key(`hyperGit.log.filter:`,单 key 原子读写防半恢复态,dateFrom/dateTo 经 ISO 串往返),重启与切库往返后自动恢复为上次设置;过滤生效期间标题栏过滤图标点亮为填充态(Graph Filter Active,`$(filter-filled)`,经 `hyperGit.log.filterActive` context key 与常态图标互斥呈现)——恢复的过滤不再是无声约束;重开「Filter by Author…」即预勾选已选 exact 作者并继续增删(pattern 项不参与预勾选、重开后不可见,确认新选择会将其移除);空选确认与 Clear Filter 的「清除」同样持久化,重启不复活;脏持久化数据经 engine 纯函数逐字段校验免疫。**附带行为变更**:① SCM 变更列表右键「Show History」由整替过滤器改为与其余过滤命令一致的增量式——文件历史现与活跃过滤相交,而非静默清空后者(M3 期遗留不一致);② 任何过滤对话框(Filter Graph 聚合入口 / Author / Path / Grep / Merge Mode / Date / Message Regex)或 Commit 文件右键菜单打开期间发生切库后确认,不再把旧仓库语境的选择误写新仓库(rootAtStart 切库守卫全覆盖);③ issue #107 的「切库清空 host 级过滤」限制消除——每个仓库记忆自己的完整过滤条件;④ Filter by Path 选中当前仓库外的文件(多根工作区选他仓文件 / 单仓导航到仓外)时以告警拒绝,不再落入 `../…` 垃圾 path 过滤——该垃圾 path 会随持久化成为跨重启的图加载 fatal 错误态。 +### Changed + +- 开发依赖升级(#153):eslint 10.12 → 10.13、typescript-eslint 8.71 → 8.72、vitest 5.0.4 → 5.0.5、ovsx 1.2 → 1.3——全部 devDependencies,对扩展运行时零影响。 + ## [0.0.21] - 2026-10-23 — Filter by Author 候选建议 · 多选过滤 · 元字符作者修复 ### Added diff --git a/docs/.agents/knowledge-map.md b/docs/.agents/knowledge-map.md index 3c15677..e33a24e 100644 --- a/docs/.agents/knowledge-map.md +++ b/docs/.agents/knowledge-map.md @@ -30,7 +30,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.21](../releases/v0.0.21.md))。 +- [发布说明](../releases/README.md) — 各正式版 Release Notes(GitHub Release 正文单一事实源;最新 [v0.0.22](../releases/v0.0.22.md))。 ## 图资产(docs/assets/) - [Mermaid 源图索引](../assets/mermaid/README.md) — 全项目 Mermaid 源图统一管理 + **溯源矩阵**(mermaid ↔ archify ↔ 嵌入文档的唯一权威映射)。 diff --git a/docs/README.md b/docs/README.md index a41f5d2..a1cad00 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,7 +16,7 @@ - [分支就地更新](./features/branches-update-in-place.md) — Branches 视图不 checkout 更新本地分支(fetch refspec 原生 fast-forward-only):右键 / 多选批量 / 标题栏选区感知三入口。 ## 发布说明 -- [Release Notes 目录](./releases/README.md) — 各正式版发布说明(GitHub Release 正文单一事实源);最新:[v0.0.21 Filter by Author 候选建议 · 多选过滤 · 元字符作者修复](./releases/v0.0.21.md)。 +- [Release Notes 目录](./releases/README.md) — 各正式版发布说明(GitHub Release 正文单一事实源);最新:[v0.0.22 Graph 过滤持久化与激活指示 · Branches 就地更新 · 开发依赖升级](./releases/v0.0.22.md)。 ## 调研报告(循证依据) - [02 · VS Code SCM API 与 vscode.git 集成路径](./research/02-vscode-scm-integration.md) — 路径 B 决策依据、SCM 稳定/proposed API 边界、changelist 模型映射。 diff --git a/docs/releases/README.md b/docs/releases/README.md index 2a6908a..b055c17 100644 --- a/docs/releases/README.md +++ b/docs/releases/README.md @@ -8,6 +8,7 @@ | 版本 | 说明 | 日期 | |---|---|---| +| [v0.0.22](./v0.0.22.md) | Graph 过滤持久化与激活指示 · Branches 就地更新 · 开发依赖升级 | 2026-10-24 | | [v0.0.21](./v0.0.21.md) | Filter by Author 候选建议 · 多选过滤 · 元字符作者修复 | 2026-10-23 | | [v0.0.20](./v0.0.20.md) | Delete Remote Branch 陈旧远程分支修复 · 删除失败可诊断 | 2026-10-17 | | [v0.0.19](./v0.0.19.md) | Branches 视图 PR 状态徽标 · 取数安全加固 · 开发依赖升级 | 2026-10-17 | diff --git a/docs/releases/v0.0.22.md b/docs/releases/v0.0.22.md new file mode 100644 index 0000000..17e46bc --- /dev/null +++ b/docs/releases/v0.0.22.md @@ -0,0 +1,56 @@ +# Hyper Git - Agentic Git v0.0.22 — Graph 过滤持久化与激活指示 · Branches 就地更新 · 开发依赖升级 + +> 本版核心:**Graph 视图全部 7 个过滤维度按仓库持久化**(Author / File Path / Grep / Merge Mode / Date / Message Regex)——重启 VS Code 或切换仓库再切回,过滤条件自动恢复为上次设置,每个仓库记忆自己的完整过滤组合;过滤生效期间标题栏过滤图标点亮为填充态(Graph Filter Active),恢复的过滤不再是无声约束。同时 Branches 视图迎来**分支就地更新(不 checkout)**:右键 Update Branch 以 `git fetch` 原生 fast-forward-only 原语安全前移本地分支,永不改写本地提交。 + +--- + +## ✨ 亮点速览 + +- **过滤持久化**:任一过滤维度设置后即按仓库落盘(workspaceState),重启 / 切库往返自动恢复;空选确认与 Clear Filter 的「清除」同样持久化,重启不复活;脏持久化数据逐字段校验免疫,永不崩溃。 +- **过滤激活指示**:过滤生效期间标题栏过滤图标切换为填充态 `$(filter-filled)`(悬停标注 Graph Filter Active),与常态图标按激活态互斥呈现——重启恢复的过滤一眼可见。 +- **重开 Author 过滤即续选**:重开「Filter by Author…」预勾选已选作者(含不在当前候选集的持久化作者,以 ghost 项呈现)继续增删;pattern 项经「Use pattern」逃生口完整保留。 +- **分支就地更新**:右键单个分支 **Update Branch**、多选批量更新、标题栏 Pull 升级为选区感知——fast-forward-only 安全拒绝 diverged / ahead-only 分支(附真实原因),**永不改写本地提交**;五桶对账汇总(updated / up-to-date / pulled / skipped / failed)。 +- **切库守卫全覆盖**:任何过滤对话框(含 Filter Graph 聚合入口)或 Commit 文件右键菜单打开期间发生切库后确认,不再把旧仓库语境的选择误写新仓库。 +- **越仓选择拒绝**:Filter by Path 选中当前仓库外的文件时以告警拒绝,不再落入 `../…` 垃圾 path 过滤(该垃圾 path 会随持久化成为跨重启的图加载 fatal 错误态)。 + +--- + +## 🧩 特性详述 + +### 1. Graph 过滤按仓库持久化与激活指示(#152) + +- **存储范式**:沿用 scope / detail mode 的按仓库 workspaceState 范式——authors 独立 key(`hyperGit.log.authors:`),其余 6 维组合 key(`hyperGit.log.filter:`,单 key 原子读写防半恢复态,Date 经 ISO 串往返);脏数据经 engine 层纯函数逐字段校验(空串、mergeMode `all` 等归一化不落盘); +- **激活指示**:engine 纯函数 `hasActiveFilter`(激活判定与持久化归一化同口径)驱动 `hyperGit.log.filterActive` context key,标题栏过滤图标常态(`$(filter)`)/ 填充(`$(filter-filled)`)双命令互斥呈现,`alt+g` 键绑定不受影响; +- **附带行为变更**:① SCM 变更列表右键「Show History」由整替过滤器改为与其余过滤命令一致的增量式——文件历史与活跃过滤相交而非静默清空;② issue #107 的「切库清空 host 级过滤」限制消除——每个仓库记忆自己的完整过滤条件。 + +### 2. Branches 视图分支就地更新(#151) + +- **底层原语**:`git fetch refs/heads/:refs/heads/`——git 原生 fast-forward-only,diverged / ahead-only 分支被安全拒绝(附真实 stderr 原因);当前分支自动改走 `repo.pull()`(含冲突处理通道);无上游分支透明跳过; +- **选区感知 Pull**:Branches 标题栏 Pull 按钮在有多选分支时按选区执行就地更新(无选区保持原 Pull 语义,Commit 视图 Pull 不受影响); +- **五桶对账**:updated / already up to date / pulled / skipped / failed 汇总(选中数 = 各桶之和),up-to-date 经前后 `objectname` 短 sha 前缀比对判定;upstream 解析以一次 `for-each-ref` 取新鲜快照(不信任树节点数据),`origin/x` 拆分复用最长前缀匹配(remote 名可含 `/`)。 + +--- + +## ⚙️ 升级与兼容 + +- **无破坏性变更**:全部既有命令、视图与配置项保留;过滤组合语义(各维度 AND、多作者 OR)与 v0.0.21 一致; +- **行为改进**:过滤条件由「仅内存、切库清空」升级为「按仓库持久化」——升级后首次使用即开始记忆,无迁移步骤;此前会话内的所有过滤行为(空选清除、pattern 逃生口、Clear Filter)语义不变,仅新增跨重启存活; +- **开发依赖升级**(#153):eslint 10.13 / typescript-eslint 8.72 / vitest 5.0.5 / ovsx 1.3(全部 devDependencies,对运行时零影响)。 + +--- + +## 📦 安装 + +- **VS Code Marketplace**:搜索 `Hyper Git - Agentic Git` 直接安装或更新。 +- **Open VSX**:搜索 `Hyper Git - Agentic Git` 直接安装或更新(覆盖 Cursor / Windsurf / VSCodium 等 Open VSX 系编辑器)。 +- **手动**:从 [Releases](https://github.com/ThreeFish-AI/hyper-git/releases/tag/v0.0.22) 下载 `hyper-git-agentic-git-0.0.22.vsix` → 命令面板 `Extensions: Install from VSIX`。 + +**系统要求**:VS Code ≥ 1.85.0,且启用内置 Git 扩展(`vscode.git`,默认随附)。仅支持本地 git 仓库,不支持虚拟 / Web 工作区。 + +--- + +## 💬 反馈 + +欢迎在 [GitHub Issues](https://github.com/ThreeFish-AI/hyper-git/issues) 反馈问题与建议。完整工程视角变更记录见 [CHANGELOG](../../CHANGELOG.md)。 + +许可证:[MIT](https://github.com/ThreeFish-AI/hyper-git/blob/master/LICENSE)。 diff --git a/package.json b/package.json index 0164742..5becf9e 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "theme": "dark" }, "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.21", + "version": "0.0.22", "publisher": "ThreeFish-AI", "license": "MIT", "preview": true,