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

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

仓库:github.com/swsgbl/hmha...

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

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

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

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

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

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

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

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

于是职责变成:

  1. 终端继续负责拖选、复制和粘贴;
  2. ?1007 负责把滚轮变成上下键;
  3. 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。

本地只读复现命令:

bash 复制代码
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。环境差异是当前最有价值的测试输入。

参考:

相关推荐
小哈里5 小时前
【Agent】从Prompt工程、Context工程到 Harness工程,让 AI 能真正完成工作
人工智能·prompt·agent·ai编程·harness
Fox爱分享5 小时前
都问程序员双十一买什么,我的答案一定是这块专业编程显示器
后端·程序员·ai编程
ZzT5 小时前
AI-SDLC 实践 00|让 Coding Agent 参与整个项目周期:AI-SDLC 是什么、为什么要做
ai编程·claude
zilingyun20216 小时前
AI 编程工具的尽头,是软件工厂
ai编程
贾伟康6 小时前
HarmonyOS 端侧智能体长对话压缩:摘要版本、证据索引与安全回退
harmonyos·arkts·状态恢复·上下文压缩·端侧智能体
NJPJI_Yang7 小时前
鸿蒙操作系统小艺 Skill 开发实战:让应用被 HarmonyOS 7 一句话召唤
pytorch·深度学习·harmonyos
redtank20008 小时前
纯血鸿蒙学习效率三件套实测:背单词艾宾浩斯曲线、时间记录与睡眠辅助
学习·华为·harmonyos
无责任此方_修行中8 小时前
模型变强了,架构为什么反而要变?——从"折叠 subagent"到"Super-agent"
人工智能·ai编程·deepseek
打工仔折腾 AI8 小时前
鸿蒙移动端直连 Windows 远程桌面配置与性能调优实践
人工智能·windows·后端·python·华为·性能优化·harmonyos