diff --git a/CHANGELOG.md b/CHANGELOG.md index 9149aad..648b51b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## [Unreleased] +## [0.0.19] - 2026-10-17 — Branches 视图 PR 状态徽标 · 取数安全加固 · 开发依赖升级 + ### Fixed - **CI 状态与 Branches PR 徽标注入取数主机策略**:仅 github.com 与已配置 `github-enterprise.uri` 的实例主机发送取数请求;其余「GitHub 形态」远程(origin 指向任意第三方主机)视同非 GitHub(零徽标、零请求),杜绝把 GitHub/GHE token 发往任意主机的凭证外发面。 diff --git a/docs/.agents/knowledge-map.md b/docs/.agents/knowledge-map.md index 47cf9c0..86993fb 100644 --- a/docs/.agents/knowledge-map.md +++ b/docs/.agents/knowledge-map.md @@ -29,7 +29,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.18](../releases/v0.0.18.md))。 +- [发布说明](../releases/README.md) — 各正式版 Release Notes(GitHub Release 正文单一事实源;最新 [v0.0.19](../releases/v0.0.19.md))。 ## 图资产(docs/assets/) - [Mermaid 源图索引](../assets/mermaid/README.md) — 全项目 Mermaid 源图统一管理 + **溯源矩阵**(mermaid ↔ archify ↔ 嵌入文档的唯一权威映射)。 diff --git a/docs/README.md b/docs/README.md index 93da6a6..2456e5f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,7 +15,7 @@ - [Agentic Git 偏好配置](./features/agentic-git-preferences.md) — Agentic Git 预置:Base Branch + Commit / Create PR / Review 三项 agent 指令偏好(多行文本域 + 内置默认模板;M5 前置铺垫)。 ## 发布说明 -- [Release Notes 目录](./releases/README.md) — 各正式版发布说明(GitHub Release 正文单一事实源);最新:[v0.0.18 Commit / Branches 标题栏重构 · 批量 Discard Changes · 分支级 Push](./releases/v0.0.18.md)。 +- [Release Notes 目录](./releases/README.md) — 各正式版发布说明(GitHub Release 正文单一事实源);最新:[v0.0.19 Branches 视图 PR 状态徽标 · 取数安全加固 · 开发依赖升级](./releases/v0.0.19.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 246f858..449f050 100644 --- a/docs/releases/README.md +++ b/docs/releases/README.md @@ -8,6 +8,7 @@ | 版本 | 说明 | 日期 | |---|---|---| +| [v0.0.19](./v0.0.19.md) | Branches 视图 PR 状态徽标 · 取数安全加固 · 开发依赖升级 | 2026-10-17 | | [v0.0.18](./v0.0.18.md) | Commit / Branches 标题栏重构 · 批量 Discard Changes · 分支级 Push · 双市场发布重启 | 2026-09-10 | | [v0.0.17](./v0.0.17.md) | Log 提交详情常驻面板 · VS Code 1.136 最佳实践对齐 · 稳定性与体验修复 | 2026-09-09 | | [v0.0.16](./v0.0.16.md) | 多根工作区仓库切换 · 分支前缀分组树 · Agentic Git 预置 · Diff 修复与面板布局优化 | 2026-09-01 | diff --git a/docs/releases/v0.0.19.md b/docs/releases/v0.0.19.md new file mode 100644 index 0000000..5304232 --- /dev/null +++ b/docs/releases/v0.0.19.md @@ -0,0 +1,69 @@ +# Hyper Git - Agentic Git v0.0.19 — Branches 视图 PR 状态徽标 · 取数安全加固 · 开发依赖升级 + +> 本版核心:**Branches 视图远程分支行右侧显示关联 GitHub Pull Request 状态徽标**(如 `#138 Merged`,云图标按状态着色,悬停见 PR 号、标题与 Open on GitHub 链接)——分支 → PR 三级身份匹配(fork 全名 → 同仓 headRefName → 唯一兜底,歧义宁缺勿错),复用 CI 状态的 GitHub 认证,TTL 60s 缓存零刷新循环。同时**加固取数安全**:CI 与 PR 徽标注入「取数主机策略」(仅 github.com 与已配置 `github-enterprise.uri` 实例发数,杜绝 token 外发任意主机)、Tooltip 注入面多层封堵与外链白名单统一;并升级开发依赖基线(vsce 4 / vitest 5 / Node 22)。 + +--- + +## ✨ 亮点速览 + +- **Branches 视图 PR 状态徽标**:远程分支行右侧显示 `#N Open / Merged / Closed / Draft`,云图标按状态着色(Merged 紫 / Closed 红 / Open 绿 / Draft 弱化);悬停见 PR 号、标题与经主机白名单校验的 **Open on GitHub** 链接。 +- **三级身份匹配,宁缺勿错**:fork 全名(remote 以 fork owner 命名且 URL 身份一致,host/owner/repo 三维校验)→ 同仓 headRefName(dependabot / 仓内分支主场景)→ 唯一兜底(多候选歧义时不显示)——绝不显示错误 PR。 +- **零打扰取数**:复用 VS Code 内置 GitHub 认证(与 CI 状态共享会话);未登录 / 非 GitHub 远程 / 配置关闭 → 零徽标零请求;TTL 60s 缓存 + 首轮无徽标先行渲染,绝不阻塞建树、绝无刷新循环;限流 / 失败自动退避。 +- **取数主机策略(安全)**:CI 状态与 PR 徽标仅向 github.com 与已配置 `github-enterprise.uri` 的实例发送请求——origin 指向任意第三方「GitHub 形态」主机时视同非 GitHub(零请求),杜绝把 GitHub/GHE token 发往任意主机的凭证外发面。 +- **Tooltip 与外链安全(安全)**:PR 标题等远程可控文本经单行化 + Markdown 语法转义 + 变长 code fence 多层消毒;`command:` 链接一律失效(isTrusted 白名单形态);外链主机统一白名单(github.com / `*.github.com` / 仓库主机 / api.仓库主机),并以与浏览器同规范的解析封死 `evil.com\@github.com` 类分歧绕过。 +- **依赖基线升级**:`@vscode/vsce` 4.0.0、`vitest` 5.0.1(Node 基线 22)、`ovsx` 1.2.0、`typescript-eslint` 8.70.0、`esbuild` 0.28.2;dependabot 聚合升级(minor/patch 合单 PR),根除连环 lockfile 冲突。 + +--- + +## 🧩 特性详述 + +### 1. Branches 视图 PR 状态徽标(#142) + +远程分支行右侧(ahead/behind 之后)显示关联 PR 的 `#N 状态` 徽标,云图标按 PR 状态着色: + +- **数据源**:GitHub GraphQL 按 UPDATED_AT 倒序取最近 100 条全态 PR(Open / Merged / Closed / Draft),与 CI 状态共用同一 GitHub 会话与 remote/provider 判定(单一事实源); +- **三级匹配**:fork 全名(Tier a,remote 以 fork owner 命名且其 URL 解析的 host/owner/repo 与 PR head 一致——排除 login 撞名、同 owner 他仓、异实例的误配)→ 同仓分支名(Tier b,dependabot / 仓内功能分支主场景,owner 大小写不敏感)→ 唯一兜底(Tier c,多 fork 同名歧义时不显示);同一分支名多条 PR 取最近更新者; +- **刷新语义**:TTL 60s 缓存 + in-flight 去重(键含仓根与取数上下文),数据未变返回同一索引实例(引用相等守卫,无刷新循环);切换仓库 / 登录登出 / 改配置即时失效重取(代次化,登出即隐去徽标);限流与失败按 60s 退避且失败走既有缓存(无闪烁); +- **多根工作区**:单槽缓存按仓根校验,切库零串仓; +- **配置**:`hyperGit.branches.pr.enabled`(默认开启)总开关;GitHub Enterprise 按已配置的 `github-enterprise.uri` 实例主机自动判定。 + +完整叙述见 [Branches 视图远程分支 PR 状态徽标](../features/branches-pr-status.md)。 + +### 2. 取数主机策略与注入面加固(#142) + +- **取数主机策略**:`parseGitHubRemote` 只辨「GitHub 形态」不辨主机(机制),「是否把 token 发往该主机」的策略由共享谓词 `isGitHubInstanceHost` 统一落地——CI 状态(status / getStatuses / signIn)与 Branches PR 徽标四个入口全部收口:仅 github.com 与已配置 `github-enterprise.uri` 的实例主机取数,其余视同非 GitHub(零徽标、零请求); +- **Tooltip 注入面**:PR 标题为远程可控文本,行值统一单行化 + 转义 `[]()<>`(封链接 / 图片 / autolink 语法)+ 反引号串按长度压制 code fence;`isTrusted` 采用空白名单形态(http 链接可点、`command:` 链接一律失效);主题图标替换关闭; +- **外链白名单统一**:CI 跳转链接与 PR 徽标 Open on GitHub 共用同一主机白名单谓词(github.com、`*.github.com`、仓库主机、api.仓库主机);CI `openExternal` 改用与浏览器同规范的 WHATWG URL 解析,封死 `https://evil.com\@github.com/` 类解析器分歧绕过; +- **传输与解析健壮性**:请求超时 / 扩展停用中止的保护伞覆盖到响应体读取完成;`Retry-After` 头全形态解析(非法值不再毒化限流冷却);远程 URL 含非法百分号序列时容错降级(不再静默打断取数)。 + +### 3. 开发依赖升级与 dependabot 聚合(#127–#131) + +- `@vscode/vsce` 3.9.2 → **4.0.0**、`vitest` 4.1.10 → **5.0.1**(两项 major 均把 Node 基线抬至 22,与 CI 一致)、`ovsx` 1.1.1 → 1.2.0、`typescript-eslint` 8.68.0 → 8.70.0、`esbuild` 0.28.1 → 0.28.2;五项合成单 PR 重生一次 lockfile; +- `.github/dependabot.yml` 新增 `groups`:npm 开发依赖 minor/patch 聚合单 PR(major 仍逐项单开)、github-actions 全量聚合——根除「多个 deps PR 共改 lockfile 连环冲突」的复发源。 + +--- + +## ⚙️ 升级与兼容 + +- **无破坏性移除**:全部既有命令、视图与配置项保留;本版新增配置 `hyperGit.branches.pr.enabled`(默认开启,关闭后零徽标零请求); +- **PR 徽标登录入口**:复用 Graph 视图标题栏的「登录 GitHub」按钮(需 CI 状态开启,默认开启)——「CI 关 / PR 开」组合下 Branches 视图暂无独立登录入口(已知限制); +- **GitHub Enterprise 用户**:PR 徽标与 CI 状态均要求远程主机与已配置的 `github-enterprise.uri` 实例一致(本版起的安全策略); +- **徽标覆盖范围**:最近更新的 100 条 PR 以内的远程分支(超出窗口的旧分支 PR 静默不显示);多 fork 同名分支歧义时不显示(宁缺勿错)。 + +--- + +## 📦 安装 + +- **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.19) 下载 `hyper-git-agentic-git-0.0.19.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 2e8bc8b..b91a22c 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.18", + "version": "0.0.19", "publisher": "ThreeFish-AI", "license": "MIT", "preview": true,