SuperAPI AI 工具集

gpui-screenshots

测试与质量

查看项目

更新于 11-01 11:44

技能介绍

用途

gpui-screenshots 用于查看、点击操作和截图 GPUI 客户端(crates/but-gpui),典型场景包括验证 UI 改动是否生效、复现 UI 缺陷、展示交互效果。脚本化运行时窗口不显示,应用不进入 Dock,不抢用户按键,并使用独立的应用数据,因此不会影响用户自己的项目或设置。以其他方式启动应用则会在用户屏幕上打开窗口。

主要能力

  • 脚本驱动:crates/but-gpui/scripts/drive.sh 以 --features dev-script 构建并运行客户端,支持一行一条命令的脚本,如 add(添加仓库)、wait(等待加载)、shot(截图)、click(按窗口坐标点击)、key(按键)、type(输入)等,完整命令列表见 src/dev.rs。
  • 单步探索:通过 drive.sh start、step、stop 逐条执行命令,每步保存截图并打印路径(位于 target/gpui-drive/shots)及 KEYS 行,便于从屏幕上推断下一步点击位置。
  • 动画录制:clock stop 可暂停脚本时钟,film 在指定区域按毫秒间隔逐帧保存截图(如 before.png、000.png、001.png),并生成 sheet.png 网格总览;每帧附带变化说明,列出变化像素簇的位置、尺寸、像素数与最大通道变化量。可区分起始跳变、中途停滞、结束突变与闪烁。
  • 区域截图:shot path x y w h 按逻辑坐标截取区域,并以显示器全分辨率保存(Retina Mac 为 2×)。
  • 主题与性能:可通过 GITBUTLER_GPUI_APPEARANCE=dark(或 light)选择主题;run --release 以优化构建运行,用于性能与保持时长测试。

使用方式

  1. 准备一个一次性仓库,不要添加当前工作检出或用户的任何仓库(应用会写入工作区、refs、oplog):
repo=$(mktemp -d)/repo
git init -q -b main "$repo"
git -C "$repo" -c user.name=Tester -c user.email=t@example.com commit -q --allow-empty -m "Initial commit"
echo hello > "$repo/notes.txt"

也可在此用 git 或后续 sh 步骤构建所需状态(分支、提交、未提交修改)。如需使用真实仓库,可按 crates/but-gpui/AGENTS.md(Sandboxes and fixtures)使用 APFS 克隆。 2. 编写脚本并运行:

add /path/to/repo
wait 1000
shot /tmp/before.png
click 400 184
key cmd-k
type history
shot /tmp/after.png
crates/but-gpui/scripts/drive.sh run script.txt

脚本结束即退出,超过 --timeout 秒(默认 300)会被终止。运行会打印应用报告(失败步骤为 script line N: …,提示为 PROMPT …,以及警告和错误)和应用数据、日志位置。 3. 单步探索:

crates/but-gpui/scripts/drive.sh start
crates/but-gpui/scripts/drive.sh step "add /path/to/repo" "wait 1000"
crates/but-gpui/scripts/drive.sh step "click 400 184" "key down"
crates/but-gpui/scripts/drive.sh stop

会话超过 --timeout 秒(默认 1800)自动退出,完成后应始终 stop。每个检出只能有一个会话。 4. 动画录制示例:

film /tmp/fold 200 8 0 40 340 540 -- click 306 66

该命令停止时钟,保存输入前帧为 before.png,执行输入,并按 8ms 间隔保存 200ms 内该区域的帧,然后恢复时钟。输入须为一行脚本。拖拽需在 film 前先按下并做至少两次小幅移动,触发运动的移动放在 -- 之后;GPUI 在第一次移动开始拖拽、从下一次移动才开始发送,因此帧数过少时 000 帧显示的是拖拽建立而非运动本身。

按键与坐标注意

  • 执行 add 后导航器(Navigator)持有按键焦点,输入前应先点击目标文本框。type 或单字母按键前先查看 KEYS 行(如 KEYS Workspace > Navigator > TextInput),确认键入到达的位置;在列表或 diff 中字母会触发快捷键(如 b 创建分支、⇧P 推送、e 在用户屏幕上打开编辑器)。
  • 窗口逻辑尺寸为 1360×860,click、move、drag、scroll 均使用该坐标;截图也按此尺寸保存,屏幕上的位置即点击位置。区域截图坐标为区域原点加上像素偏移的一半。

适用场景

验证 GPUI 界面改动、复现界面缺陷、展示交互效果、逐帧分析折叠与滑动等动画表现。

限制与注意事项

  • 需要 cargo 在 PATH 中;否则需在仓库开发环境中运行:nix develop --command crates/but-gpui/scripts/drive.sh …(run 和 start 需要构建,step 和 stop 不需要)。
  • 窗口从不成为 key window,因此 on_focus 与 on_blur 监听不会触发,光标不闪烁,这些需手动检查。
  • 复制操作会写入真实剪贴板,设置 › AI 会读取钥匙串;add 使用添加项目的文件夹选择器,会在用户屏幕上打开。
  • 动画必须读取 crate::clock::now() 而非 Instant::now(),否则会在真实时间上运行而其余部分静止;GPUI 自身的 with_animation、with_spring、折叠箭头与加载指示器,以及计时器(如工具提示延迟、拖拽边缘滚动)使用真实时间,会在帧间跳变,因此录制的拖拽应远离列表上下边缘。不要通过拉长代码中的时长来观察慢动作。
  • 更多细节(悬停需第二次小幅移动、文本链接需按下再释放、提示需点击按钮、拖拽专用命令等)见 crates/but-gpui/AGENTS.md 的 Scripted runs 章节;性能与保持时长测量见同文件的 Measuring performance 章节。