用途:在 IWSDK 的 grab 示例中,通过 npx @iwsdk/cli 命令行工具对抓取系统进行端到端测试,覆盖距离抓取(射线+扳机)、单手抓取(握持键)、双手抓取(双手握持键)、系统与组件注册、稳定性五类套件。
主要能力:每个工具调用格式为 npx @iwsdk/cli <subcommand> [--input-json '<JSON>'] [--timeout <ms>],需在示例工作区(cwd 为 $IWSDK_REPO_ROOT/examples/grab)内运行;CLI 会从 cwd 自动发现 IWSDK 应用根目录。输出为 stdout 上的 JSON:{ok, workspaceRoot, operation, result},需解析后校验断言。可用 npx @iwsdk/cli mcp inspect 发现可用工具及其子命令。
使用方式:先执行 cd $IWSDK_REPO_ROOT/examples/grab && npm run fresh:install 安装依赖;再以 run_in_background: true 启动 npm run dev,轮询 Vite 就绪信息(最多 60 秒),也可用 npx @iwsdk/cli dev status 检查 state.running;随后用 npx @iwsdk/cli ecs systems 验证连通性。测试前依次执行 browser reload、xr enter,并用 browser logs 检查无 error 级日志。通过 ecs find 按 DistanceGrabbable、OneHandGrabbable、TwoHandsGrabbable 动态发现实体,用 scene runtime-hierarchy 与 scene transform 获取位置。距离抓取用 xr set-select-value 触发扳机,单手与双手抓取用 xr set-gamepad-state button index 1 触发握持键;移动用 xr animate-to,状态对比用 ecs snapshot 与 ecs diff。完成后用 npx @iwsdk/cli dev down 关闭服务器,并输出各套件 PASS/FAIL 汇总表。
限制与注意事项:每条 Bash 命令需单独执行,解析 JSON 并校验断言后再执行下一条,不要串联多条 CLI 命令;等待用独立的 sleep N 命令。reload、xr enter、xr animate-to、screenshot 等操作建议 --timeout 20000。近场抓取(单手/双手)不会产生 Hovered 或 Pressed 标签,只有距离抓取才有,需用 snapshot/diff 验证。Handle 组件在初始化时添加且永不移除,抓取状态记录在 Handle.instance.outputState。扳机与握持键不可混用,用错按键会静默失败。抓取球默认半径 0.07 米,需将控制器置于物体中心。实体索引在页面重载后会变化,不可缓存,需重新用 ecs find 发现。若出现非源码缺陷的瞬时错误,可关闭并重启开发服务器后重试,每个套件仅重试一次,连续两次失败则标记 FAIL 并继续。
适用场景:面向 IWSDK 抓取交互的自动化回归与冒烟测试,适合在本地开发环境验证抓取行为与组件注册是否符合预期。