已合并
feat(arkui): add HDC device verification skills #284
feat(arkui): add HDC device verification skills #284
已合并
lushi871202创建于 6月29日
lushi871202
6月29日

关联的 issue

https://gitcode.com/openharmonyinsight/openharmony-skills/issues/84

背景

新增 ArkUI/ACE Engine 设备端端到端自验证能力,并沉淀可跨领域复用的 Linux→Windows USB HDC 通道 skill。本 PR 面向 release 分支。

新增与检视优化

ohos-dev-hdc-reverse-ssh-setup

  • 按放置规范从 domain/arkui 迁移到 common/development,使用通用 HDC 主题名。
  • 仅建立 Linux loopback 到 Windows sshd 的反向 SSH 转发;删除独立 HDC 8710 转发。
  • HDC 命令统一通过已验证的 Windows SSH 会话执行。
  • Windows 脚本在任何系统修改前校验参数、端口和 HDC 路径,并检查 OpenSSH/服务/密钥命令结果。
  • Windows 脚本分类识别 [Empty]、Unauthorized、Offline 和 Connected 数量;反向 SSH 最多重连 5 次,失败后返回非零并打印配置/运行排查项。
  • Linux listener 缺失时明确提示检查 reverse_ssh_windows_setup.bat 配置及进程是否仍在运行。
  • 不修改 GatewayPorts,不开放 HDC 或 reverse listener 防火墙端口。

ohos-dev-arkui-hdc-demo-device-self-verify

  • 复用 ohos-dev-hdc-command-usage 的目标选择、连接排障、安装、文件和系统写规则。
  • 每个 PowerShell 原生 HDC 调用检查 $LASTEXITCODE,前一步失败立即停止。
  • 每次验证使用唯一 RUN_ID 和独立 Windows/设备目录,截图、layout 和 HAP 均要求本轮新生成,避免陈旧证据假通过。
  • native 库替换保存 hash、mode、owner/group 和安全上下文,先暂存、恢复属性、核对并原子替换;失败时执行回滚,不再固定 chmod 755。
  • 运行中 SSH/HDC 中断时立即停止 mutation,按脚本→SSH→HDC→USB 硬件→设备镜像分层恢复,并在恢复后使用新 RUN_ID。
  • 提示检查供电、完整启动、USB 调试、数据线、直连端口、Windows 驱动和授权;USB 已枚举但 daemon 异常时检查 board/product/variant 镜像、HDC daemon 与 SDK 兼容性。
  • 重新刷机前必须保留 SSH/HDC/镜像证据并取得用户明确确认。

结构化 eval

  • E2E:6 个用例,覆盖依赖索引、fail-fast、证据新鲜度、native 属性/回滚及中途断联恢复。
  • Reverse SSH:7 个用例,覆盖参数/密码、非 root、Unauthorized、直接 Linux HDC、loopback-only、listener 断联、[Empty] 和错误镜像/HDC daemon。

验证

  • 两个 skill 均通过 quick_validate.py。
  • 网站 YAML、related-skill、目录名、frontmatter 和 6+7 个 eval JSON 一致性通过。
  • Bash 语法检查通过。
  • Linux 脚本 blocker 路径返回非零并输出恢复清单;mock prerequisites/tunnel 成功路径返回成功。
  • Windows batch 静态断言通过:validate-before-mutate、HDC 状态分类、有限重连、loopback-only,且保留 CRLF。
  • 依赖安装器的仓内安装和 --check 路径通过。
  • Git diff whitespace、目标分支合并预检和 GitCode Git Hooks 通过。

Skill-Judge 基线

2026-07-15 修复前静态评分:E2E 93/120(C),Reverse SSH 86/120(C)。本轮已针对评分和检视中指出的 fail-fast、证据新鲜度、脚本 fail-closed、拓扑安全及中断恢复问题优化;未在没有完整评测环境时声明新的分数。

评分依据:https://github.com/softaworks/agent-toolkit/blob/main/skills/skill-judge/README.md

说明

未提交 .codespec。未执行真实设备验证;当前环境没有 Windows HDC 主机和 USB 连接的 OpenHarmony 设备。

likedislike
Pull Request已成功合入, 合并人@Wang Xing
(感谢 lushi871202 的贡献)
Llushi871202
7月15日 强制推送  1 个提交:6f339879-feat(arkui): add HDC device verification skills
Llushi871202
7月15日 强制推送  1 个提交:427c34f5-feat(arkui): add HDC device verification skills
Wang Xing
Wang Xing成员7月17日进行代码检视2
skills/domain/arkui/development/ohos-dev-arkui-hdc-demo-device-self-verify/SKILL.md
已过期
@@ -0,0 +141,4 @@
141+```bash
142+scp -P <REVERSE_SSH_PORT> <LINUX_ARTIFACT> <WINDOWS_USER>@localhost:'<WINDOWS_WORK_DIR>/demo.hap'
143+ssh -p <REVERSE_SSH_PORT> <WINDOWS_USER>@localhost \
144+ "powershell -NoProfile -Command \"& '<HDC_EXE>' <HDC_TARGET_ARGS> file send '<WINDOWS_WORK_DIR>\demo.hap' '<DEVICE_TMP_DIR>/demo.hap'; & '<HDC_EXE>' <HDC_TARGET_ARGS> shell 'bm install -p <DEVICE_TMP_DIR>/demo.hap'\""
Wang Xing
Wang Xing7月17日评论:

中:这里用 PowerShell 的 ; 串联 file send 和 bm install,但没有检查前一个原生命令的退出码。若发送失败而设备目录残留旧的 demo.hap,后续安装仍可能成功,SSH 最终也只反映末尾命令状态,从而拿旧产物生成假阳性的自验证证据;截图、dump 等组合命令也有同类风险。

建议为每个 hdc 调用检查 $LASTEXITCODE 并立即退出,或拆成独立调用;同时为每次验证创建唯一目录并在使用前确认不存在旧产物。

likedislike
System
系统消息系统
7月17日 评论:

changed this line on 9fe18f3b view diff detail

Wang Xing
Wang Xing成员7月17日进行代码检视2
skills/domain/arkui/development/ohos-dev-arkui-reverse-ssh-hdc-setup/scripts/reverse_ssh_windows_setup.bat
已过期
@@ -0,0 +98,4 @@
98+ echo [INFO] SSH 密钥已存在
99+)
100+ 
101+REM --- 第五步:参数检查 ---
Wang Xing
Wang Xing7月17日评论:

中:环境参数直到这里才检查,但脚本此前已经可能安装 OpenSSH、启动并设为自启动、修改防火墙以及生成密钥。用户直接运行未编辑的模板时,脚本会先永久修改 Windows 主机,最后才因 CHANGE_ME 退出。

建议把所有必填参数和工具路径校验移动到管理员检查之后、任何系统副作用之前;校验失败时直接退出,并在每个安装/服务/防火墙命令后验证结果。

likedislike
System
系统消息系统
7月17日 评论:

changed this line on 9fe18f3b view diff detail

Wang Xing
Wang Xing成员7月17日进行代码检视2
skills/domain/arkui/development/ohos-dev-arkui-reverse-ssh-hdc-setup/scripts/reverse_ssh_linux_setup.sh
已过期
@@ -0,0 +162,4 @@
162+show_status() {
163+ echo ""
164+ echo "============================================"
165+ info "Linux 端配置完成!"
Wang Xing
Wang Xing7月17日评论:

中:show_status 无条件输出“Linux 端配置完成”,而普通用户分支在 sshd 缺失、服务未启动或转发被禁用时只打印 warning,随后仍调用这里并以 0 退出;root 分支的防火墙错误也被 || true 吞掉。这与 eval 中“前置条件不满足应标记 blocked”的契约相反,会让调用方把未就绪环境误判为成功。

建议累计前置检查结果,存在 blocker 时输出“检查未通过”并返回非零;只有实际验证 sshd、目标监听和转发条件后才输出完成状态。

likedislike
System
系统消息系统
7月17日 评论:

changed this line on 9fe18f3b view diff detail

Wang Xing
Wang Xing成员7月17日进行代码检视2
skills/domain/arkui/development/ohos-dev-arkui-hdc-demo-device-self-verify/SKILL.md
已过期
@@ -0,0 +192,4 @@
192+```bash
193+scp -P <REVERSE_SSH_PORT> <LINUX_ARTIFACT> <WINDOWS_USER>@localhost:'<WINDOWS_WORK_DIR>/'
194+ssh -p <REVERSE_SSH_PORT> <WINDOWS_USER>@localhost \
195+ "powershell -NoProfile -Command \"& '<HDC_EXE>' <HDC_TARGET_ARGS> file send '<WINDOWS_WORK_DIR>\<artifact_name>' '<device_destination>'; & '<HDC_EXE>' <HDC_TARGET_ARGS> shell 'chmod 755 <device_destination>'\""
Wang Xing
Wang Xing7月17日评论:

中:流程前面要求记录原文件元数据,但覆盖系统库后固定执行 chmod 755,没有恢复或核对原 owner、mode 和安全标签。对 /system/lib64 等路径,这既可能改变权限策略,也可能因 owner/SELinux context 不匹配导致目标进程无法按原方式加载。

建议把新文件先推到临时目录,读取并保存原文件的 mode/owner/context,再以设备支持的方式原子替换并恢复这些属性;替换后逐项比较,失败时执行已记录的回滚方案。

likedislike
System
系统消息系统
7月17日 评论:

changed this line on 9fe18f3b view diff detail

Wang Xing
Wang Xing成员7月17日进行代码检视2
skills/domain/arkui/development/ohos-dev-arkui-reverse-ssh-hdc-setup/SKILL.md
已过期
@@ -0,0 +7,4 @@
7+ HDC bridge, Linux remote HDC device access, or preparing device-side E2E verification.
8+metadata:
9+ author: openharmony
10+ scope: domain
Wang Xing
Wang Xing7月17日评论:

中:该技能被声明为 domain/arkui,但正文明确说它只负责 Linux→Windows reverse SSH transport 和 Windows-side HDC 可达性,所有步骤都与 ArkUI 无关。按仓库放置规范,跨领域的工具/流程能力应放在 common;当前归类会让其他子系统无法自然触发,并诱发重复技能。

建议将其迁到 skills/common/development/,使用通用 HDC 主题名(例如 ohos-dev-hdc-reverse-ssh-setup),同步更新 metadata、网站 YAML、README 和依赖引用。

likedislike
System
系统消息系统
7月17日 评论:

changed this line on 9fe18f3b view diff detail

Wang Xing
Wang Xing成员7月17日进行代码检视2
skills/domain/arkui/development/ohos-dev-arkui-reverse-ssh-hdc-setup/scripts/reverse_ssh_linux_setup.sh
已过期
@@ -0,0 +183,4 @@
183+ echo ""
184+ echo " [实验] 通过端口转发直接使用 HDC(不一定兼容所有 HDC 版本):"
185+ echo " hdc kill"
186+ echo " export HDC_SERVER_PORT=${HDC_PORT}"
Wang Xing
Wang Xing7月17日评论:

低:这里设置的是 HDC_SERVER_PORT,但本 PR 指定为 source of truth 的 ohos-dev-hdc-command-usage 记录的变量名是 OHOS_HDC_SERVER_PORT。按当前示例执行不会把本地客户端指向 SSH 转发端口,还可能因 8710 已被隧道占用而启动本地 server 失败。

建议改用 OHOS_HDC_SERVER_PORT 并补一个命令级验证;如果该直连路径确实版本敏感且正文要求始终通过 Windows SSH 执行 HDC,则直接删除这段实验入口和第二条 HDC 端口转发更一致。

likedislike
System
系统消息系统
7月17日 评论:

changed this line on 9fe18f3b view diff detail

Llushi871202
7月17日 强制推送  1 个提交:9fe18f3b-feat(arkui): add HDC device verification skills
Llushi871202
7月17日 修改了pull request 的描述
lushi871202
7月17日 评论:

已按 6 条检视意见完成更新:PowerShell HDC fail-fast、唯一运行目录与新鲜证据、Windows validate-before-mutate、Linux blocker 非零退出、native 属性保留/原子替换/回滚、Reverse SSH skill 迁移 common 并删除 HDC 8710 转发。静态验证通过;真机验证仍因环境缺失未执行。

likedislike
lushi871202
7月17日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
7月17日 评论:

首次触发
门禁构建开始,包含代码编译【skills_check编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a59ed5e64650f998b0b8702/runlist

likedislike
openharmony_ci
openharmony_ci成员
7月17日 评论:

代码门禁未通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a59ed5e64650f998b0b8702/runlist

# Device build result package
1 skills_check failed(trigger pipeline timeout) >>>

likedislike
lushi871202
7月17日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
7月17日 评论:

部分构建失败,仅触发失败构建
门禁构建开始,包含代码编译【skills_check编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a5a010a64650f998b12fa37/runlist

likedislike
openharmony_ciopenharmony_ci成员
7月17日 添加了label:编译成功
openharmony_ciopenharmony_ci成员
7月17日 通过测试
openharmony_ci
openharmony_ci成员
7月17日 评论:

代码门禁通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a5a010a64650f998b12fa37/runlist

# Device build result package
1 skills_check success >>>

likedislike
Llushi871202
7月21日 测试状态已重置,测试人: openharmony_ci
Llushi871202
7月21日 强制推送  1 个提交:8ff11b2b-feat(arkui): add HDC device verification skills
openharmony_ciopenharmony_ci成员
7月21日 删除了label:编译成功
openharmony_ci
openharmony_ci成员
7月21日 评论:

代码有更新,重置PR验证状态

likedislike
Llushi871202
7月21日 修改了pull request 的描述
lushi871202
7月21日 评论:

已按检视意见补充端到端中断恢复能力并更新提交至 8ff11b2:

  • reverse SSH listener 消失时提示检查 Windows setup 脚本配置及进程状态;
  • Windows 脚本识别 [Empty]、Unauthorized、Offline,并将无限重连改为最多 5 次;
  • HDC 异常时提示检查供电、启动状态、USB 调试、数据线、直连端口、驱动和授权;
  • USB 枚举正常但 daemon 异常时检查正确 board/product/variant 镜像、HDC daemon 和 SDK/image 兼容性;
  • 中断后停止 mutation、保留证据、重新验证同一 target,并使用新 RUN_ID;
  • 重新刷机前要求用户明确确认;
  • eval 更新为 E2E 6 个、Reverse SSH 7 个。

未提交 .codespec;当前无 Windows/HDC/USB 真机,未声明真机验证通过。

likedislike
lushi871202
7月21日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
7月21日 评论:

本地或库上代码有更新,全量重新构建,重置所有关联PR的验证状态
门禁构建开始,包含代码编译【skills_check编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a5ee98d64650f998b4d21c8/runlist

likedislike
openharmony_ciopenharmony_ci成员
7月21日 添加了label:编译成功
openharmony_ciopenharmony_ci成员
7月21日 通过测试
openharmony_ci
openharmony_ci成员
7月21日 评论:

代码门禁通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a5ee98d64650f998b4d21c8/runlist

# Device build result package
1 skills_check success >>>

likedislike
Wang XingWang Xing成员
7月21日 将wangxing-hw设为审查人
Wang XingWang Xing成员
7月21日 通过审查
Wang XingWang Xing成员
7月21日 合入了pull request,合并节点 SHA:a03b203592be0b25b01ef989f522ee72fe384579