HarmonyOS JavaScript SDK
@midscene/harmony 通过 HDC 控制 HarmonyOS 设备。HarmonyAgent 继承基础 Agent 的 AI 方法。
导入与 API 概览
日常使用推荐通过工厂函数 agentFromHdcDevice() 一步完成 Device 的创建与连接;如果需要分别管理 Device 和 Agent 的初始化过程,也可以显式构造 HarmonyDevice 与 HarmonyAgent。
agentFromHdcDevice()
连接指定的 HarmonyOS 设备并返回 绑定了该 Device 的 HarmonyAgent。deviceId 可选;省略时默认连接第一台可用设备,若未发现任何已连接设备则抛出错误。options 同时接受 Agent 配置与 Device 配置(设备发现过程同样会使用其中的 HDC 连接配置)。
HarmonyDevice / HarmonyAgent
显式实例化 HarmonyDevice 时,必须先调用 await device.connect() 完成连接,再将其传给 HarmonyAgent。每个 Device 实例只能归属于一个 Agent。
配置选项
Agent 配置
支持所有通用 Agent 配置,并额外提供以下平台配置:
appNameMapping?: Record<string, string>—— 将应用名称映射为对应的 HarmonyOS Bundle Name 或显式的bundle/Ability目标,方便在launch()、terminate()或自然语言指令中直接使用应用名称。用户传入的映射会覆盖内置映射。
Device 配置
hdcPath?: string——hdc可执行文件的自定义路径。若未设置,Midscene 会依次从HDC_HOME环境变量及常见安装路径中查找。autoDismissKeyboard?: boolean—— 文本输入完成后是否自动收起软键盘。默认值:true。keyboardDismissStrategy?: 'esc-first' | 'back-first'—— 自动收起软键盘时发送的按键策略。默认值:'esc-first'(HarmonyOS 下仅发送所选策略的首选按键:'esc-first'发送 ESC 键,'back-first'发送返回键)。keyboardTypeDelay?: number—— 按键之间的延迟(单位:毫秒,须为有限非负数)。设为正数时,'legacy'输入模式会通过uitest uiInput inputText逐个 Unicode 码点发送字符,适用于输入框因输入过快而丢字的场景。inputStrategy?: 'legacy' | 'sequential' | 'bulk'——Input动作的默认文本输入策略。默认值为'legacy':'sequential':按每个 Unicode 码点调用一次 HDC 输入命令;如需配合keyboardTypeDelay延迟输入,请使用此策略。'bulk':整段文本仅调用一次 HDC 文本输入命令;使用此策略时,不能设置keyboardTypeDelay(或须将其设为0)。
screenshotResizeScale?: number—— 已废弃(该选项已移除且不再生效)。如需调整发送给 AI 模型的截图缩放比例,请改用AgentOpt中的screenshotShrinkFactor。customActions?: DeviceAction[]—— 注册自定义动作,供 Agent 在规划时调用。可传入HarmonyDevice构造函数或agentFromHdcDevice(),定义方式请参阅自定义动作。
平台方法
launch()
打开网页或启动指定的 HarmonyOS 应用。
uri: string—— 应用的 Bundle Name(如com.huawei.hmos.settings)、显式的bundle/Ability目标、appNameMapping中注册的应用名称,或以http:///https://开头的网页 URL(网页 URL 会通过系统浏览器打开)。
runHdcShell()
在当前连接的设备上执行原始 hdc shell 命令。
command: string—— 原样传给hdc shell的命令字符串。
terminate()
强制停止正在运行的 HarmonyOS 应用。
uri: string—— 应用的 Bundle Name、appNameMapping中注册的应用名称,或bundle/Ability(仅取斜杠前的 Bundle Name 部分)。
系统导航
agent.back(): Promise<void>—— 触发系统返回操作。agent.home(): Promise<void>—— 返回系统桌面。agent.recentApps(): Promise<void>—— 打开最近任务(多任务)界面。
设备发现
返回当前通过 HDC 发现的设备列表。可通过 hdcPath 指定自定义的 hdc 可执行文件路径。
生命周期
调用 agent.destroy() 时,Agent 会等待进行中的操作结束,调用底层 Device 的 destroy(),并完成报告写入。切勿让多个 Agent 共用同一个 Device 实例,也不要在销毁后复用该 Device。
在 HarmonyOS 平台上,device.destroy() 会清理屏幕缓存和 HDC 客户端状态,但不会断开宿主机 HDC 与物理设备的连接,也不会关闭设备上的应用。
问题排查
输入文本后键盘未收起,或页面意外返回
Midscene 在输入文本后默认会自动收起软键盘。为降低误触页面返回的概率,HarmonyOS 下默认发送 ESC 键('esc-first')。如果在目标应用中 ESC 键无法收起键盘,可以将策略切换为 'back-first'(改用系统返回键) :
如果目标输入框同时监听了返回键,并在收到返回键时清空内容或关闭弹窗,可以将 autoDismissKeyboard 设为 false 以禁用自动收起:
禁用后软键盘会保持常驻,需要时可通过 aiAct 手动收起键盘,例如 await agent.aiAct('收起键盘')。
如何指定自定义的 HDC 路径?
可以通过 HDC_HOME 环境变量指定 hdc 所在的目录:
也可以在构造 HarmonyDevice(或调用 agentFromHdcDevice)时通过 hdcPath 参数传入可执行文件的完整路径:

