AI图鉴

AI图鉴首页 › AI 资讯 › AI终端里复制不了代码?hmharness把鼠标还给终端 GitHub:swsg

AI终端里复制不了代码?hmharness把鼠标还给终端 GitHub:swsgbl/hmharness

来源:掘金 · 发布时间:11-02 · 由 AI图鉴每小时自动聚合

hmharness 是鸿蒙开发智能体验证框架。本文拆解 TUI 如何保留终端原生选择复制,用 ?1007 保留滚轮导航,并吞掉杂散 SGR 报文。

先说工具全貌:hmharness 是一个开源的 HarmonyOS/OpenHarmony 开发智能体框架,把工程创建、检查、构建、签名、安装、启动、日志读取和结果验证接成本地工具链,让 AI 不只是生成代码,还要用本机环境证明结果;自进化行为受审批、预算、canary 和回滚约束。它不是 DevEco Studio 的替代品,而是开发智能体和鸿蒙工具链之间的验证层。本文只展开其中一环:TUI 原生选择复制。

终端 AI 工具最容易暴露问题的地方,往往不是模型能力,而是那些看起来很小的交互细节:想划选一段命令复制出来,鼠标却先被 TUI 抢走了;想用滚轮翻列表,又担心为了滚轮开启全局鼠标跟踪。对每天在终端里工作的人来说,这不是审美问题,是效率问题。

hmharness 的 TUI 最终选择是:不开启全局鼠标捕获,把选择和复制还给终端;滚轮通过 ?1007 alternate scroll 转成上下键;选择器保持键盘操作;无法完全排除的杂散 SGR 鼠标报文直接吞掉。

1. 全局鼠标捕获为什么会让复制变难

终端应用如果开启 1000、1002 或 1006 这类鼠标报告模式,终端会把拖选、滚轮和点击事件先交给应用,而不是交给终端自己的原生选择器。这样做的收益是应用能知道鼠标位置,代价是用户熟悉的“按住左键划选,右键或快捷键复制”被抢走了。

对一个开发智能体 TUI 来说,这个取舍不划算。用户经常需要把模型输出的命令、路径、错误栈和代码片段复制到别的窗口查资料或复现问题;这些高频操作不应该为了界面内点击而牺牲。

所以 public main 的行为被固定为:启动序列不包含 1000h、1002h、1006h。原生选择和复制在任何时候都可用,而不是只在某个模式关闭后可用。

2. 不捕获鼠标后,滚轮怎么办

去掉全局鼠标捕获后,hmharness 使用 ?1007 alternate scroll。这个模式让终端在备用屏幕里把滚轮事件翻译成上下方向键。

于是职责变成:

- 终端继续负责拖选、复制和粘贴;

- ?1007 负责把滚轮变成上下键;

- TUI 的 picker 收到上下键后移动选中项。

这不是“功能少了”,而是边界更合理:需要精确选择的动作留给用户和终端,需要列表导航的滚轮进入应用。测试中,/model picker 打开时,滚轮下滚等价于按下方向键下,滚轮上滚等价于方向键上。

3. picker 回到键盘优先,杂散报文被吞掉

既然不再开启鼠标报告,picker 就不再依赖 SGR 坐标点击。选择模型或历史会话时,用户用方向键移动,用 Enter 确认,用 Esc 退出。这也更符合终端用户的肌肉记忆。

但还有一个防御细节:即使当前应用没有开启鼠标报告,某些环境仍可能传来残留或异常的 SGR 报文。如果这些字节被当成普通输入,可能污染命令草稿或触发错误行为。hmharness 对这种报文的处理是直接忽略。

当前测试锁定了三件事:全局捕获永久移除;picker 是键盘驱动;杂散 SGR 点击不会进入输入框,也不会改变选择。

4. 怎么复现证据

本文事实钉在 public main 提交 c6fdd73422ef8cb05d41412ed448e7d4e8f5a226。对应 CI run 41398333044 已通过,汇总为 1068 tests / 1067 pass / 0 fail / 1 skipped。

本地只读复现命令:

git clone https://github.com/swsgbl/hmharness.git

cd hmharness

git checkout c6fdd73422ef8cb05d41412ed448e7d4e8f5a226

npm install

node --import tsx --test packages/cli/src/__tests__/tui.test.ts

本轮本地运行结果为 35 pass / 0 fail,其中直接覆盖本功能的测试包括:

- ?1007 滚轮在 picker 打开时转为上下键;

- 全局鼠标捕获永久移除,原生选择和复制始终可用;

- picker 键盘驱动;

- 杂散 SGR 点击被吞掉。

修复链包含提交 7d024a5d3a3e7e268d2c39a0e59793e1c74818c8,但本文不采用该提交信息或旧 changelog 里“picker 临时开启鼠标跟踪”的中间方案;验收以 public main 当前源码和测试为准。

安装与发布边界也要分清:npm 当前在线包是 @hmharness/cli@0.23.50,registry 读回的 gitHead 正是 c6fdd734...;GitHub Latest Release 仍是 v0.23.26,两者不能混写成同一个发布状态。

5. 这个细节为什么值得写成一篇文章

AI 终端的价值不只在于“模型回答了什么”,还在于它是否尊重用户原本的工作方式。一个会抢走鼠标划选的 TUI,哪怕功能再多,也会让开发者频繁回到鼠标模式、终端菜单和外部编辑器之间来回搬运。

hmharness 这次的取舍很明确:应用能力不能以削弱终端原生能力为代价。原生选择复制保留,滚轮导航保留,键盘 picker 保留,异常报文不进入输入。这种小交互的确定性,正好和整个项目的证据优先原则一致。

如果你在不同终端、不同 OS 或不同 Node 环境下遇到鼠标、滚轮、粘贴或选择行为差异,欢迎把环境版本和现象反馈到 GitHub Discussions #4。环境差异是当前最有价值的测试输入。

参考:

本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。

相关 AI 工具

相关免费羊毛

同源资讯

阅读原文(juejin.cn)

标题、摘要与正文均来自该信源的公开页面,版权归原作者所有;本站自动聚合与翻译,仅作出处跳转。

← 返回 AI 资讯列表AI工具图鉴首页

返回 AI图鉴首页 · 提交工具 · 商务合作 · 关于本站 · 608 款 AI 工具分类导航 · 每日 AI 热门项目与动态