Hunk 0.22 版本全解:仓库历史化身为响应式审查工作区
开发工具代码评审CLIAI 应用【免费下载链接】hunkReview-first terminal diff viewer for agentic coders项目地址https://gitcode.com/gh_mirrors/hu/hunk点击查看免费下载导读Hunk 0.22 是一次以“交互式仓库历史interactive history”为核心的里程碑式发布把hunk log从静态文本输出升级为可浏览、可筛选、可多选提交的终端浏览器同时为 diff 审查引入了持久化多行选择、键盘驱动的线程化评论与更丰富的扩展上下文。本文以官方 0.22 变更记录为主体结合仓库源码与配置文档完整梳理本次发布2026-09-08 至 2026-09-10共 3 个版本、81 项变更的功能细节、底层实现与可落地的配置方法。版本概览与升级路径本系列共发布 3 个版本0.22.0-beta.09 月 8 日、0.22.0-beta.19 月 9 日、0.22.09 月 10 日。beta.0确立了全部核心功能beta.1与0.22.0在此基础上补充了少量 minor 与 patch 修复。全新安装Hunk 的默认安装脚本会校验下载当发布校验和与本地工具可用时否则给出警告curl -fsSL https://hunk.dev/install.sh | sh从既有版本升级若你正使用 0.20 或更新版本且安装途径为默认安装脚本、npm 或 Homebrew可直接用官方规范升级命令hunk update更早的版本需先通过原始安装脚本或包管理器升级一次之后即可统一使用hunk update。mise、Nix、源码编译与自定义目录安装仍由各自的更新流程负责——这些方式不受hunk update管辖这是官方文档明确说明的适用前提。核心主题一交互式hunk log历史浏览器0.22 的最大亮点是把hunk log重塑为“自动响应的终端浏览器”在终端中打开时呈现 GitHub 风格的提交行右对齐提交链接与复制操作当 stdout 不是终端时管道、重定向则保留静态纯文本输出交互式 TUI 不再被强行拉起对应 packages/hunk/src/core/history/ 模块群与--static参数。浏览与选择交互逐行移动Up/Down或j/k移动焦点先按v进入可视选择再用相同按键扩展连续提交范围。直接扩展ShiftUp/ShiftDown或大写K/J直接扩展选择Escape收起选择。翻页与跳转PageUp/PageDown、b/f、ShiftSpace/Space整页翻动u/d或Ctrl-U/Ctrl-D半页移动g/G与Home/End跳转首尾。检索与动作/搜索、n/N切换匹配、t切换主题、r刷新、y复制焦点提交完整 id、Enter在 Hunk 审查中打开选中提交、q或Ctrl-C退出。鼠标支持Shift 点击行扩展选择终端转发修饰键时、点击提交 id 直接打开、点击相邻复制图标复制完整不可变 id、点击行选中、双击行打开。连续多提交选择0.22.0新增“可取消的连续多提交选择”在未过滤的历史中可用 Shift方向键、J/K 或 Shift 点击选中一段连续提交一次性打开包含全部所选提交的累积变更cumulative change进行审查。此功能有明确边界使用--all或作者、消息、日期、路径过滤时不可用因为这类遍历可能交错不相关的提交或隐藏中间提交——这是源码实现中 lanePlanner.ts 严格保证“子提交先于父提交、跨页边界的 child-before-parent 顺序”的原因对应 extension-architecture.md 中 VCS adapters 一节的说明。可选提交图视图与主题化重设计历史视图被重新设计为 GitHub 风格的天分组day groups、账号式作者句柄、相对时间戳并新增可选的提交图视图Graph view——以提交拓扑泳道替代默认时间线。图中使用Up/Down/j/k移动、v扩展选择、Escape收起。提交图背后的拓扑规划在 lanePlanner.ts 中实现planHistoryPage以“最新优先”顺序为每个提交分配泳道lane独立 tip如--all产生的多分支从左缘进入合并提交的父提交若已活跃于其他泳道则保留最左泳道并去重使拓扑状态始终受“活跃前沿”约束HistoryLaneCheckpoint见 types.ts将泳道快照序列化为 JSON供后续页面续算泳道因此分页加载时图的连线不会断裂。桌面菜单、主题选择器与合并父提交选择交互式历史浏览器还获得了 Hunk 的桌面菜单外观File、View、Navigate、Commit、Help 菜单F10打开、实时主题选择器t键与提供者所有的合并父提交选择Commit 菜单的 “Compare with first parent” 与 “Compare with parent…” 将选中提交与有序的提供者父提交比较且不移动历史选择位置。退出打开的提交审查后会返回保留的历史选择与视口。历史视图的专属命令表hunk.history.*命令使用与审查面相同的可配置按键解析器但保留历史特有的语义见 docs/keybindings.md 的完整命令表命令 id作用默认键hunk.history.openSelection打开选中提交enterhunk.history.copyRevision复制焦点提交 idyhunk.history.refresh刷新仓库历史rhunk.history.previousCommit上一条提交up,khunk.history.nextCommit下一条提交down,jhunk.history.startVisualSelection开始可视选择vhunk.history.clearSelection清除可视选择escapehunk.history.extendPrevious/extendNext向上/下扩展选择shiftup,K/shiftdown,Jhunk.history.pageUp/pageDown整页移动pageup,b,shiftspace/pagedown,space,fhunk.history.halfPageUp/halfPageDown半页移动u,ctrlu/d,ctrldhunk.history.jumpToFirst/jumpToLast跳转首尾home,g/end,Ghunk.history.search/nextMatch/previousMatch历史搜索//n/Nhunk.history.toggleGraph等开关切换图/Unicode/作者/日期/装饰(none)hunk.history.openFirstParent/openParent与父提交比较(none)在[keybindings]中绑定历史命令所有快捷键都是具名命令[keybindings]表将命令 id 映射到按键。历史命令与审查命令共用解析器因此配置方式一致用户配置示例完整语法见 docs/keybindings.md[keybindings] hunk.history.nextCommit ctrln # 历史使用自己的命令 id hunk.history.toggleGraph g # 给原本无键的命令绑定 hunk.review.nextNote n # 给原本无键的注释导航绑定 hunk.view.toggleMenuBar false # 彻底解绑注意规则用户绑定会替换默认值而非追加把某个默认键夺走后原命令保留其余键false或[]表示解绑两个条目占用同一按键即冲突文件中靠前者生效并上报[keybindings]只从用户配置读取仓库内的.hunk/config.toml无法改写你的按键。打开提交的审查信息面板从交互式hunk log打开提交后review-info 面板会以历史风格展示提交元数据GitHub 式天分组、作者句柄、相对时间戳并提供右对齐的可复制修订号短 id面板同样支持公开剪贴板与主题。直接对 Git、Jujutsu、Sapling 的 CLI 修订版本进行审查时也会在标题栏上方显示提交与比较信息含 7 字符短修订号见0.22.0patch完整 Git 提交 id 缩短为七字符以保证标题栏紧凑。核心主题二持久化 diff 选择与多行评论锚点鼠标与键盘双通道的持久选择0.22.0新增持久化的鼠标与键盘 diff 选择并配套显式的Comment、Copy、Clear动作支持多行评论锚点选择后可按y复制选中内容对应hunk.review.copySelection、按v开始可视行选择hunk.review.startVisualSelection、按Escape或hunk.review.clearSelection清除选择可直接转化为评论锚点c为当前行/选区添加审查评论hunk.review.startNote。Escape 的语义是“上下文式清除活动选择”在覆盖层与扩展模式让出所有权后无选择时 Escape 仍留给扩展命令使用因为 clear-selection 默认未绑定按键。可见的键盘注释选择评论notes现在有了可见的键盘选择逐行移动会在渲染顺序上停驻于每条评论与回复上保存或点击某条评论使其成为“活动注释”随后可用上一/下一条注释导航hunk.review.nextNote/previousNote在注释间移动活动注释上可持续使用编辑、回复、删除快捷键E编辑选中 hunk 内第一条可编辑用户注释R回复其第一条可见存储注释回复继承代码锚点、可无限嵌套产品层不设深度上限D删除活动注释仅限无回复的用户注释——父注释必须等回复移除后才能删除内联已保存注释同时暴露可点击的Edit、Reply、Delete动作。线程化回复卡片的右侧范围连接线不再重复绘制0.22.0patch并保留多行复制选择与注释范围引导线同时恢复了长包裹分屏行的快速首帧渲染。会话 CLI 回复既有注释0.22.0为会话 CLI 增加“回复既有内联审查注释”的能力回复会继承代码锚点——这意味着 Agent 驱动的审查会话可以针对既有注释直接追加回复而无需重新定位代码行。核心主题三扩展系统的新上下文与刷新能力委托补丁携带提供者中立元数据扩展 CLI 命令将补丁委托进 Hunk 时现在可以附加经过校验、提供者中立provider-neutral的审查元数据并暴露给扩展面板与实时会话快照在简洁的内置顶部面板中展示委托变更请求身份delegated change-request identity。从架构文档 extension-architecture.md 可知该描述符只随同一文件补丁身份的重载保留重载选择其他输入时即清除它属于注册元数据而非ReviewDocumentV1字段也不暗示任何提供者或远程重载能力。外部 Agent 改动文件后的合并审查重载扩展生命周期与自定义事件处理器现在可请求合并式coalesced主机审查重载——当外部 Agent 改动被审查文件后多个重载请求会被合并、与手动/watch/工作区/守护进程重载串行化避免风暴式重复刷新。扩展 API v23 与 v25兼容与新增0.22.0将单列 diff 布局更名为unified新增规范的 OpenTUI 与扩展 API v23 字段并保留废弃栈的兼容性——既有 CLI、配置、命令、OpenTUI 与扩展集成的行为不变。旧命令hunk.view.layoutStack仍作为hunk.view.layoutUnified的废弃别名hunk.view.toggleSidebar也仍是hunk.view.toggleFilesPane的兼容别名。扩展 API 生成版本 25 新增返回 Promise、可取消的watchSignature钩子。扩展面板的尺寸推导扩展面板现在能从当前审查事实推导首选尺寸未声明尺寸时使用主机默认值垂直放置左/右默认宽{preferred: 34, min: 22}水平放置上/下默认高{preferred: 8, min: 3}见 packages/hunk/src/extensions/panes.ts。多提交历史元数据也以紧凑响应行展示并带可复用的点击复制修订操作。性能、响应性与稳定性修复0.22 的 patch 更新中有大量“保持响应性/快速首帧/不崩溃”类修复可归为四个方向Watch 模式不再冻结审查Watch 模式检查 Git 变更时不再冻结审查界面0.22.0并新增 Promise 返回、可取消的watchSignature钩子。Linux 上删除并重建嵌套目录后自动刷新保持可用目录监视器以小批量注册保证大仓库首次交互依然响应0.22.0patch对应 packages/hunk/src/core/watch/ 模块群。动画上限与animations false面板开合的滑动动画被限制在30 FPS避免不必要的 CPU 占用同时新增animations false配置项以立即切换面板。该配置在 packages/hunk/src/core/run/config.ts 中解析默认值为true见 L1370并在 App.tsx 中通过bootstrap.input.options.animations ! false生效paneSlide.test.ts 明确测试了禁用动画时立即定版的行为。可写入用户配置animations false渲染与终端交互修复长包裹分屏行恢复快速首帧同时保留多行复制选择与注释范围引导线换行 diff 行共享一个悬停目标此前每行视觉行各建一个影响响应性保存注释后延迟的编辑器更新不再导致审查崩溃提交审查期间内嵌 VCS 命令运行时界面保持响应保留的历史与内嵌审查共享同一个正确归属的扩展生命周期alt/option键绑定同时兼容传统终端与 Kitty 键盘编码终端上报时保留独立的 Meta 绑定Kitty 事件可区分 Alt 与 Meta传统终端不可——altn与metan可能重叠被挂起的 Hunk 作业保持存活fg可恢复 TUI 及进行中的状态stdout 非终端时输出静态纯文本而非拉起交互 TUIhunk log与打开的提交审查共用同一终端渲染器返回时不会暴露旧终端输出。默认布局与安装校验布局默认值变更unified 布局默认键1split 布局默认键20.22.0与beta.1均有此改动。若你的配置显式绑定了其他键以你的配置为准。curl 安装校验优化默认走全局刷新元数据的缓存端点可选用、隐私保护、自动检查限流保留直接 GitHub 回退与分析退出选项会话守护进程端口不可验证时上报底层健康探测失败原因。其他值得注意的变更宽侧边栏树中的文件夹支持鼠标折叠/展开文件导航可揭示折叠文件夹内的目标在历史与提交审查之间切换时diff 视图偏好与主题变更保持生效主题化历史加载界面保持可见直到选中提交的审查准备好接管终端退出交互式hunk log时会提示保存主题变更与其他审查命令一致从仓库外启动的直接文件比较恢复自动与手动重载捆绑 Bun 运行时升级至 1.4.2降低内存占用并修复运行时问题审查以静态纯文本打印而非启动交互 TUI——当 stdout 不是终端时如管道这正是hunk log --static的行为基础。相关文档导航交互式历史与提交审查working-trees-and-commits 主题文档 所在的 docs 目录website/src/content/docs/docs/内含 configure/keybindings、extend/extension-api、extend/custom-sidebars 等配套章节按键与命令完整表docs/keybindings.md扩展系统架构纵深docs/extension-architecture.md、docs/extensions.md历史拓扑规划实现lanePlanner.ts、types.ts配置解析实现config.ts、commandInputs.ts面板尺寸与动画panes.ts、App.tsx、paneSlide.test.ts赞分享开发工具代码评审CLIAI 应用【免费下载链接】hunkReview-first terminal diff viewer for agentic coders项目地址https://gitcode.com/gh_mirrors/hu/hunk点击查看免费下载相关推荐Foundry Anvil 零区块费历史修复eth_feeHistory 空响应行为解析Foundry Anvil 零区块费历史修复eth_feeHistory 空响应行为解析 Anvil 的 eth_feeHistory RPC 在收到 blo区块链开发工具ROCm 版本发布历史全解析从 5.0.0 到 7.14.0 的版本演进与仓库发布工具链ROCm 版本发布历史全解析从 5.0.0 到 7.14.0 的版本演进与仓库发布工具链 本篇技术指南以 AMD ROCm 官方文档仓库中的 版本发布历史表开发工具高性能计算文档awesome-cheatsheets Org Mode速查表如何用Emacs打造个人知识管理体系完整教程awesome cheatsheets Org Mode速查表如何用Emacs打造个人知识管理体系完整教程 awesome cheatsheets 是一份文档上一篇5步实现老旧Mac现代化升级OpenCore Legacy Patcher完整指南下一篇Matterbridge插件管理器入门5分钟快速上手教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Mopidy HTTP JSON-RPC API 完整指南:通过 HTTP POST 与 WebSocket 调用 Core API 并订阅事件

Mopidy HTTP JSON-RPC API 完整指南:通过 HTTP POST 与 WebSocket 调用 Core API 并订阅事件

音视频后端 【免费下载链接】mopidy Mopidy is an extensible music server written in Python 项目地址: https://gitcode.com/gh_mirrors/mo/mopidy 点击查看 免费下载 Mopidy 是可扩展的 Python 音乐服务器,其 HTTP 扩展(mopidy.http&…

2026/9/25 7:59:16 阅读更多 →
Apache Cassandra 构建与测试指南:深入解读 .build 辅助脚本体系

Apache Cassandra 构建与测试指南:深入解读 .build 辅助脚本体系

数据库分布式数据库后端 【免费下载链接】cassandra Mirror of Apache Cassandra 项目地址: https://gitcode.com/gh_mirrors/cassandr/cassandra 点击查看 免费下载 Apache Cassandra 的构建与测试既可以通过传统 ant 命令完成,也提供了一套更完整的辅…

2026/9/26 10:01:15 阅读更多 →
Atlas 300V 24G部署YOLOv5实战:从环境配置到推理调优全流程

Atlas 300V 24G部署YOLOv5实战:从环境配置到推理调优全流程

1. 先搞清楚:Atlas 300V 24G到底是一张什么卡我在过去半年里陆续接手过几个CV项目,从最开始在GPU服务器上跑YOLO,到后来被客户要求落地到国产加速卡上,可以说踩了不少坑。Atlas这个名字,很多人第一次听说时都会有个困惑…

2026/9/26 8:50:41 阅读更多 →

最新新闻

大模型人工智能驱动的芯片物理验证标准平台实战复盘

大模型人工智能驱动的芯片物理验证标准平台实战复盘

如果你负责过一颗芯片流片前的物理验证,一定对Calibre那几十MB的DRC报告不陌生。过去两年我一直在做一件事——把大模型、人工智能技术塞进芯片物理验证流程里,最终落成了一个叫“基于大模型人工智能的芯片物理验证标准系统平台软件”的项目。这个项目名…

2026/9/26 13:05:10 阅读更多 →
RBAC之外:PSA与Seccomp如何守住Kubernetes容器逃逸防线

RBAC之外:PSA与Seccomp如何守住Kubernetes容器逃逸防线

这两年给客户做Kubernetes集群安全巡检,被问到最多的一个问题是:RBAC 都配好了,namespace 也隔离了,为什么还要折腾 Pod 安全准入和 Seccomp 系统调用限制?直到在一次攻击路径演练里,我们通过一个未授权访问…

2026/9/26 13:05:10 阅读更多 →
OpenCV C++正方形检测与透视校正:从编译到卡片拉正

OpenCV C++正方形检测与透视校正:从编译到卡片拉正

简介:一份面向计算机视觉入门与进阶学习者的实战资源,基于开源库OpenCV与C语言,聚焦图像处理与形状识别,覆盖边缘检测、轮廓提取、霍夫变换、阈值分割、透视变换、图像校正及特征提取等经典技术,并落地为正方形与四边形…

2026/9/26 13:05:10 阅读更多 →
ABC447 ACEF题解:双指针、树状数组与线段树边界实战

ABC447 ACEF题解:双指针、树状数组与线段树边界实战

ABC447 这场打完之后,我最大的感受是:AtCoder Beginner Contest 系列做到四百多场以后,出题人越来越懂怎么用“边界处理”来淘汰人了。A、B 两题基本送分,C、D 决定你能不能排进前半区,真正让排名拉开差距的其实是 E 和…

2026/9/26 13:05:10 阅读更多 →
Go实现LeetCode 560:前缀和+哈希表解决和为K的子数组

Go实现LeetCode 560:前缀和+哈希表解决和为K的子数组

刷 LeetCode 的人应该都有个共同感受:Hot 100 里的题,表面上是一道一道的算法题,实际上是帮你把数据结构与算法里的“套路”一个一个吃透。今天要聊的 560 题「和为 K 的子数组」,是我个人非常推荐的一道题,因为它把 …

2026/9/26 13:05:10 阅读更多 →
网关常见错误解析:502 Bad Gateway与路由配置问题

网关常见错误解析:502 Bad Gateway与路由配置问题

我无法根据当前输入生成符合要求的博文。原因如下:项目标题仅为单个字母“ax”,无明确语义指向,无法界定所属领域(是缩写?产品名?命令?变量?代码片段?)&#…

2026/9/26 13:04:10 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →