🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

鸿蒙调试桥 1na-ko/dsh-hdc-bridge

DeepSeek Harnessv0.10.2
1na-ko14 天前有提交已提供中文文档扫描:含敏感能力

DSH 原生鸿蒙开发助手:hdc 设备闭环调试看设备 → 截图 → 看图 → 改码 → 装包 → 验证+…

43.4/100
综合分
19
GitHub 星标
491
npm 周下载
—/5
用户评分

数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-hdc-bridge
npm 源 · dsh-hdc-bridge 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · dev
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-hdc-bridge @ 0.10.2
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 04:33:02

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 73 处,展示前 41 条)
  • 读取本地文件
    lib/host.js:48
    if (existsSync(win)) return win
  • 读取本地文件
    lib/host.js:50
    return existsSync(posix) ? posix : ''
  • 读取本地文件
    lib/host.js:54
    if (existsSync(win)) return win
  • 读取本地文件
    lib/host.js:56
    return existsSync(posix) ? posix : ''
  • 读取本地文件
    lib/host.js:705
    if (existsSync(joinPath(home, 'bin', 'java.exe')) || existsSync(joinPath(home, 'bin', 'java'))) return home
  • 读取本地文件
    lib/host.js:1107
    if (existsSync(p)) return { ok: true, path: p, kind: 'launcher' }
  • 删除本地文件
    lib/host.js:1570
    try { unlinkSync(reportPath) } catch (e) { }
  • 读取本地文件
    lib/sdk-dts.mjs:19
    if (!existsSync(dir)) return false
  • 读取本地文件
    lib/sdk-dts.mjs:21
    return readdirSync(dir).some((f) => f.startsWith('@ohos.') && f.endsWith('.d.ts'))
  • 读取本地文件
    lib/sdk-dts.mjs:28
    try { return JSON.parse(readFileSync(file, 'utf8')) } catch { return null }
  • 读取本地文件
    lib/sdk-dts.mjs:53
    const vers = readdirSync(root).filter((d) => NUMERIC_RE.test(d)).sort((a, b) => parseInt(b, 10) - parseInt(a, 10))
  • 读取本地文件
    lib/sdk-dts.mjs:82
    return readdirSync(apiDir)
  • 读取本地文件
    lib/sdk-dts.mjs:97
    if (!file.startsWith(apiDir) || !existsSync(file)) return { ok: false, error: 'module not found in the local SDK: ' + module }
  • 读取本地文件
    lib/knowledge.mjs:27
    export function available() { return existsSync(INDEX_PATH) }
  • 读取本地文件
    lib/knowledge.mjs:30
    if (!cache) cache = JSON.parse(readFileSync(INDEX_PATH, 'utf8'))
  • 读取本地文件
    lib/knowledge.mjs:77
    const text = readFileSync(join(BASE, e.file), 'utf8')
  • 读取本地文件
    lib/panel.mjs:32
    accessOk(p) { try { accessSync(p, constants.X_OK); return true } catch (e) { return false } },
  • 执行外部命令来自配置/变量
    lib/panel.mjs:36
    execFile(file, args, { timeout: timeoutMs || 12000, maxBuffer: maxBuffer || 65536, windowsHide: true }, (error, stdout, stderr) => {
  • 执行外部命令来自配置/变量
    lib/panel.mjs:95
    execFile(hdcPath, args, { timeout: timeoutMs || CMD_TIMEOUT, maxBuffer: maxBuffer || 1048576, windowsHide: true }, (error, stdout, stderr) => {
  • 读取本地文件
    lib/panel.mjs:182
    PLUGIN_VERSION = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version || ''
  • 写入本地文件
    lib/panel.mjs:190
    try { mkdirSync(shotDir, { recursive: true }) } catch (e) { }
  • 读取本地文件
    lib/panel.mjs:261
    try { cache.shotBytes = readFileSync(local) } catch (e) { cache.shotBytes = null }
  • 执行外部命令固定命令
    lib/studio.mjs:76
    return execFileSync('reg.exe', args, {
  • 读取本地文件
    lib/studio.mjs:137
    if (!existsSync(infoFile)) return false
  • 读取本地文件
    lib/studio.mjs:139
    const info = JSON.parse(readFileSync(infoFile, 'utf8'))
  • 读取本地文件
    lib/studio.mjs:144
    return existsSync(join(root, 'bin', 'devecostudio64.exe')) && existsSync(join(root, 'sdk'))
  • 读取本地文件
    lib/studio.mjs:189
    if (!existsSync(candidate)) return
  • 读取本地文件
    lib/studio.mjs:209
    for (const entry of readdirSync(root, { withFileTypes: true })) {
  • 读取本地文件
    lib/studio.mjs:265
    const info = JSON.parse(readFileSync(join(root, 'product-info.json'), 'utf8'))
  • 读取本地文件
    lib/devecocli.mjs:30
    const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))
  • 读取本地文件
    lib/devecocli.mjs:34
    if (!existsSync(cliJs)) return { ok: false, error: 'bin file missing: ' + cliJs }
  • 读取本地文件
    lib/devecocli.mjs:70
    if (real && real !== shimPath && / (c|m)?js$/i.test(real) && existsSync(real)) {
  • 读取本地文件
    lib/clt.mjs:39
    if (!existsSync(path)) continue
  • 读取本地文件
    lib/clt.mjs:40
    const pkg = JSON.parse(readFileSync(path, 'utf8'))
  • 读取本地文件
    lib/clt.mjs:58
    if (!existsSync(cltSdkRoot(root))) return false
  • 读取本地文件
    lib/clt.mjs:60
    if (existsSync(join(root, name))) return true
  • 读取本地文件
    lib/clt.mjs:62
    return existsSync(join(root, 'sdk', 'default', 'openharmony'))
  • 读取本地文件
    lib/clt.mjs:89
    if (existsSync(marker)) {
  • 读取本地文件
    lib/version-detect.mjs:33
    if (existsSync(file)) {
  • 读取本地文件
    lib/version-detect.mjs:34
    try { return { ok: true, path: file, text: readFileSync(file, 'utf8'), dir } } catch (e) {
  • 读取本地文件
    lib/compile-session-cwd.mjs:42
    return statSync(file).isFile()
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • hdc设备闭环调试
  • 设备面板

DSH 原生鸿蒙开发助手:hdc 设备闭环调试 + 设备面板(官方 client 插件形态)+ 离线官方知识层(Tier-1 随包)+ DevEco CLI 构建、签名、模拟器控制

v0.10.22026-10-12
· v0.10.2 — 环境级失败判定的两处补齐(v0.10.1 之后的发现) v0.10.1 修复了"宿主跑不了沙箱命令时整个进程被污染"的主链路。发布后的回归核对又发现两处判定缺口,本版补齐;v0.10.1 的主要修复内容不变。 · 修复 / Fixes · CLI 探测的 PATH 分支:沙箱拒绝以命令输出形式返回时(运行器非零退出并把后端错误写到 stderr)此前只在包路径分支与异常分支被识别,PATH 分支会把它当成"devecocli 未安装"并缓存下来。未安装本地 @deveco/deveco-cli 的宿主走的正是这条分支,因此现在与异常形式同等处理:延后、不缓存、不误报未安装 · hdc 发现:候选路径以"非零退出 + stderr"形式返回拒绝时,同样记录环境原因,hdc_diag / hms_setup 的 hdcError 直报"该宿主无法运行沙箱命令",不再退化成一概 hdc not found · 方言探针判据:bash 结论同时接受"非空且非版本号的输出"与"非零退出"两种确凿证据(此前只看后者,POSIX 风格 command not found 这类退出码为 0 的输出会被误判为不确定);空输出且正常退出、以及探针无法运行这两种情况仍保持平台默认 · 验证 / Verified · smoke 128 项断言 ALL PASS:分别在"有本地 deveco 包"与"屏蔽该包解析(等价 CI 裸 checkout)"两种模式下各跑一遍 · CI 四步全绿:Regression smoke / Syntax check / License gate(9 notices PASS)/ Pack dry run · v0.10.1 的实测结论继续有效:Windows + DevEco Studio 6.1.1.300 + DSH 0.2.0-rc.2 + 模拟器(API 23)下 25 个工具全部调用通过 · 说明 / Notes · 本版与 v0.10.1 的差异仅在上面三处判定;已发布 v0.10.1 的用户如未遇到"宿主无法运行沙箱命令"的场景,升级与否不影响日常使用
v0.10.12026-10-12
· v0.10.1 — 宿主无法运行沙箱命令时的健壮性修复(修复 v0.10.0 回归) v0.10.0 在"宿主跑不了沙箱命令"的环境下,会把一次启动期失败放大成整进程故障:方言探针被改判为 bash(Windows 上等于把 POSIX 引号发给 pwsh,40 个 hdc 候选全部解析失败,退化成一概 hdc not found),CLI 探测结论又被永久缓存,于是设备层与官方 CLI 通道同时不可用。本版本修掉这条链路,并让失败始终以可读原因呈现。 · 修复 / Fixes · 方言探测:只有确凿证据才改判——输出为版本号 → pwsh;非零退出且输出不含环境失败特征 → bash;探针抛异常或空输出时保持平台默认(此前无条件的 shellFlavor = 'bash' 回退是本次故障的根因) · CLI 探测:策略可证明无法运行时(Windows 下沙箱策略根包含系统临时目录,典型成因是 DSH 从用户主目录启动)立即延后、不做探测;沙箱后端类失败(抛异常或 stderr 带特征)一律不写缓存;缓存新增"是否会话策略"归因,会话策略到位后自动重探 · 列表命令:shellListRetry 两次尝试都不再抛异常,宿主侧目录遍历兜底得以生效(arkts_check 的自动收集不再炸掉整个调用) · 工具层契约:工具注册处新增全局兜底,任何宿主级异常都转成 { ok: false, error, hint },README 的返回值约定对全部 25 个工具成立 · 诊断:所有 hdc 候选都因环境原因失败时,上报真实原因(hdc probes could not run on this host: …),不再退化成一概 hdc not found · 验证 / Verified · smoke 128 项断言 ALL PASS(新增 12 项:抛异常宿主下工具不抛、口味保持平台默认、CLI 结论延后且宿主恢复后自动重探、以 stderr 形式返回的拒绝同样延后且不缓存、3 项源码守卫) · Windows + DevEco Studio 6.1.1.300 + DSH 0.2.0-rc.2 + 模拟器(API 23)实测:25 个工具全部完成调用,成功与失败两条分支均按契约返回——设备层 hdc_diag / hdc_list_targets / hdc_connect(幂等重连)/ hdc_shell / hdc_screenshot(配 read_image 看图)/ hdc_hilog / hdc_crash / hdc_ui_dump / hdc_ui_find / hdc_ui / hdc_app / hdc_log / hdc_install(不存在的路径返回官方错误原文);工具链与官方 CLI 通道 hms_setup(hdc / Studio 6.1.1.300 / SDK API 24 / devecocli 1.3.0 / hvigor)、hms_build status、hms_docs、hms_emulator、start_app、hms_api_change(版本门 26.0.0.810 给出官方指引);本地层 hms_api / hms_knowledge / hms_lint(rules / read-rule / check)、switch_cwd、build_project、arkts_check · 本轮未覆盖:需要真实鸿蒙工程的构建与静态检查成功路径(build_project、arkts_check 本轮以非工程目录验证失败分支),以及需要 .hap 的 hdc_install 成功路径 · 行为变化 / Behaviour · 宿主无法运行沙箱命令时,面板工具链徽章与 hms_setup 会显示 devecocli probe deferred: …(延后而非失败),首次带会话策略的调用会自动重探,无需重启 DSH
v0.10.02026-10-12
· v0.10.0 — 社区 issue 批次 #8-#13 修复 + DSH 0.2.0-rc.2 shell 契约迁移 感谢 @228998098 一次性提交的六条高质量报告(#8-#13,均附根因、证据与实测环境),以及 @yylovehhy 的 PR #14——本版本吸收了它的 rc.2 shell 适配与两处构建修复思路(提交与下述条目均已署名致谢)。 · 兼容 / Compatibility · DSH 0.2.0-rc.2(新契约):上游已移除 ctx.shell.run(),改为 resolve() + execute(spec)(句柄 result() 取结果)。插件以新契约为准(#8) · 旧线兼容垫片:0.1.5 及更早宿主只暴露 run()(npm 上 latest 标签仍指向该线),插件自动回退,双线可用;两条 seam 都缺失时抛出明确的 seam 报错,设备层不再退化成误导性的 hdc not found。README 环境要求同步为「DSH ≥ 0.1.7-rc.2(推荐 ≥ 0.2.0-rc.2)」 · 修复 / Fixes · CLT 探测(#10):无 version.txt 的发行形态(HNP/系统集成包,如 HarmonyOS PC 的 hmos-clt_1.0.0)此前被硬门禁跳过——现以布局签名(内嵌 sdk/ + 组件目录/openharmony 树)识别根,世代号取自 sdk/default/sdk-pkg.json(特性门接受 apiVersion ≥ 26);同时读取 COMMAND_LINE_TOOL_PATH、候选包名覆盖平台包(@deveco/deveco-cli-openharmony-arm64 等)、PATH 命中的 shim 解析符号链接后改用自带 node 运行(绕开平台包的 #!/bin/env node) · bash 宿主探测(#9):shellFlavor 默认值与「先探口味再发命令」的顺序修正,CLI 负缓存按口味归因;PATH 探测与 hvigor 命令头按 shell 方言引用(含撇号路径不再丢字符) · 构建判定(#11):增量构建产物 mtime 未变不再判失败(仅产物缺失才失败,保留 stale 告警);无 bin/ 的 CLT 用工具链自带 node 运行 hvigor/bin/hvigorw.js · arkts_check(#12):Studio 优先、独立 CLT 兜底(/node),解析出的根同时用于 --deveco-home 与 DEVECO_HOME · hms_lint(#13):JSON 报表经 --output-path 落到工作区 .dsh-hdc/lint/ 的唯一 .json、读后即删(CLI 要求路径以 .json 结尾且尚不存在);stdout JSON 兼容旧版;回传 filesChecked,为 0 时提示「本次未检查任何文件」,避免把空范围误读为通过 · 面板:工具链徽章带上失败原因(悬停可见);hms_setup 增加 CLT apiVersion/识别方式,paths 回显 COMMAND_LINE_TOOL_PATH · 验证 / Verified · smoke 118 项断言 ALL PASS(新增约 32 项:双 seam 主机、seam 缺失上报、bash 宿主探测顺序、无 version.txt 的 CLT 树与世代门、裸 sdk 拒绝、arkts 运行时选择、hvigor 命令头与撇号安全、lint 报表落盘/清理/空范围告警/stdout 兜底) · Windows + DevEco Studio 6.1.1.300 + DSH 0.2.0-rc.2 实测:无头真实调用 hms_setup 与 hdc_diag,hdc / Studio / SDK / devecocli / hvigorFallback 全部解析成功 · 本机无独立 CLT、无 HarmonyOS PC 环境:CLT 相关的实机路径以报告者(#10/#12/#13)的复验为准,欢迎复验后回报 · 行为变化与已知限制 · hms_build action=status 的 hvigorFallback 由 { ok, path, kind } 统一为 { found, path, kind }(与 hms_setup 一致) · hms_lint check 会在会话工作区写入并删除临时报表 .dsh-hdc/lint/*.json(唯一命名) · 随包 ArkTS checker 识别 /sdk/default/... 与 /sdk/openharmony/... 两种 SDK 布局(CLT 实
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-hdc-bridge DSH 原生鸿蒙开发助手:hdc 设备闭环调试(看设备 → 截图 → 看图 → 改码 → 装包 → 验证)+ 官方优先版本化知识层(离线 Tier-1 随包 + SDK 机读 + 官方文档检索)+ 可选官方 DevEco CLI 构建/签名通道。 A DSH-native HarmonyOS dev assistant: the hdc device loop (inspect → screenshot → view → fix → install → verify), an official-first version-classified knowledge layer (offline Tier-1 bundled + SDK-accurate reads + official docs search), and an optional official DevEco CLI build/sign backend. 定位 hdc_mcp 等 MCP 服务器已覆盖 hdc 能力层。
展开完整文档(README 剩余 1 节)
dsh-hdc-bridge

DSH 原生鸿蒙开发助手:hdc 设备闭环调试(看设备 → 截图 → 看图 → 改码 → 装包 → 验证)+ 官方优先版本化知识层(离线 Tier-1 随包 + SDK 机读 + 官方文档检索)+ 可选官方 DevEco CLI 构建/签名通道。
A DSH-native HarmonyOS dev assistant: the hdc device loop (inspect → screenshot → view → fix → install → verify), an official-first version-classified knowledge layer (offline Tier-1 bundled + SDK-accurate reads + official docs search), and an optional official DevEco CLI build/sign backend.

定位

hdc_mcp 等 MCP 服务器已覆盖 hdc 能力层。本插件不重写 hdc 协议,直接复用本机 hdc 二进制(3.x),价值在 DSH 原生层:

- 会话内工具卡片与 read_image 原生闭环
- 按调用会话解析沙箱策略(与 pwsh 工具同款路线),截图写入 <workspace>/.dsh-hdc/screenshots/
- 结构化的失败上报(hdc 传输层退出码不可靠,插件用输出标记 + 落盘校验兜底)
- v0.7 起面板按官方 client 插件形态集成(边栏入口 + 浮动面板 + 官方主题),v0.9 补齐会话级编译、静态检查、部署与日志工具(switch_cwd / build_project / arkts_check / start_app / hdc_log)

截图 / Screenshots

浮动设备面板(点左侧边栏「鸿蒙」入口打开;设备列表 / 系统区 / 工具链徽章 / hilog 尾部,官方主题随深浅色自适应):

鸿蒙开发面板

工具

约定:所有工具失败不抛异常,统一返回业务值 { ok: false, error, hint }(error 为可读原因,hint 为修复指引);成功返回带 ok: true 的结果对象。工具描述里同时给出 error 示例。这是本插件的显式约定(官方工具层允许抛 ToolFailure,本插件为面板/技能一致性选择返回值形式并在此声明)。

这份 README 是 dsh-hdc-bridge 的项目版使用手册。它不仅列出原始工具,还说明模型在真实鸿蒙工程中应如何编排调用、如何判断回退是否真的成功,以及安装本插件后新增的 DSH 能力边界。

| 工具 | 说明 |
| hdc_list_targets | 列出已连接设备/模拟器(空列表 + 连接指引) |
| hdc_connect | hdc tconn(严格 host:port 校验) |
| hdc_shell | 设备 shell(param get / ps / uitest dumpLayout…) |
| hdc_screenshot | 截图 → 拉取 JPEG → 落盘校验(API 10+ 的 snapshot_display 仅支持 .jpeg) |
| hdc_install | 安装 .hap(默认 -r;输出标记级失败检测) |
| hdc_hilog | hilog 尾部 N 行(可选域名 -T 过滤,如 PARAM) |
| hdc_ui_dump | 文本化 UI 快照:uitest 布局树 → 可见文本节点(纯文本模型的「文字截图」) |
| hdc_ui_find | 按文本/hint 找控件:返回 bounds 与中心坐标,配合 tap 免手算坐标 |
| hdc_ui | UI 操作:tap / doubleTap / longPress / swipe / input / key(Back/Home/Power/keyID),配合 dump 形成「观察 → 操作 → 验证」闭环 |
| hdc_app | 应用管理:query / start / stop / clear-data / uninstall(破坏性动作已标注) |
| hdc_crash | 崩溃抓取:faultlogger 目录里最近的 jscrash / cppcrash / appfreeze,可按包名过滤,并解析结构化摘要(错误名/信息/错误码/源码帧/已知错误码提示) |
| hdc_diag | 诊断:shell 口味 / hdc 路径 / 策略解析 / 探测日志 |
| 错误码提示 | install / app / build 失败按 11 条已知错误码附中文修复建议(9568332 签名未绑 UDID→AGC 登记设备、9568289/9568322 签名配置、1300002 空间不足…);签名类错误附三类修复(AGC 证书配置 / 重装自签名 / 换 debug 签名)+ 直达 AGC 链接 |
| hms_setup | 环境体检:hdc / DevEco Studio / SDK(API 版本) / devecocli / 设备五项 + 目标 API 版本三源解析(项目→设备→SDK)与不一致告警;CLT 形态额外回显 apiVersion 与根识别方式(version.txt / sdk-pkg.json) |
| hms_build | 官方构建/签名/运行通道:status / build / run / sign / clean;devecocli 缺失时自动回退本机 hvigorw + hdc_install + hdc_app 闭环 |
| hms_api | 官方优先的版本化 API 知识:读本机 SDK .d.ts(@since/@deprecated/@syscap 精确到 API 版本),按目标版本分类"可用/已废弃/不可用" |
| hms_knowledge | 离线随包官方知识层(Tier-1):OpenHarmony 官方文档(CC-BY-4.0)未改文字节选 28 篇高频 API 模块、窗口(window/Window 类)、导航组件 Navigation 与应用模型/ArkTS 指南(大文件按节选入,文件内附节选声明),无需 SDK/CLI/网络。catalog / read(先目录后按小节读)/ search |
| hms_docs | 官方本地文档检索:devecocli docs search / read / catalog(Tier-2:全量文档,需 devecocli) |
| hms_api_change | 官方跨版本破坏性变更扫描:devecocli check compat(versions / diff)——回答「知识在哪一版变了」 |
| hms_lint | 官方 lint:rules(本机 57+ 条 codelinter 规则索引)/ read-rule / check(devecocli check lint——JSON 报告经 --output-path 落工作区暂存、读后即删;回传 filesChecked,为 0 时给出「本次未检查任何文件」告警) |
| hms_emulator | 官方模拟器控制(devecocli emulator):list / start / stop / create / delete + 状态注入 shake / power / rotate / volume / fold / battery / geolocation / sensor / scene;未装命令行时按官方 SKILL.md 指路安装(第 20 个工具) |
| switch_cwd | 为当前会话切换 HarmonyOS 工程根目录,供后续编译工具使用 |
| build_project | 构建项目并验证 .hap 产物(增量构建产物未变不再判失败,仅缺失才失败并保留 stale 告警);devecocli 通道失败时回退到本机 hvigorw(CLT 的 hvigor/bin/hvigorw.js 用工具链自带 node 运行) |
| arkts_check | 通过 SDK ets-loader 进行 ArkTS 静态检查(DevEco Studio 优先,独立 CLT 兜底);未传文件时自动收集 .ets |
| start_app | 不重新构建地部署启动;devecocli 不可用时回退至 hdc 安装和启动 |
| hdc_log | 收集、清除或列出设备日志;支持关键词、bundle 和 PID 过滤 |
| 运行时技能 | hdc-bridge、deveco-cli、harmonyos-knowledge、deveco-compile 与本地 harmony-next 指引,模型按需加载 |
| 设备记忆 | 工具默认使用本会话上次使用的设备(显式 target 或面板点选设备即切换默认;掉线自动回退首台连接设备);hdc_list_targets 暴露 preferred/preferredActive 字段 |
| 设备面板 | 官方 client 插件形态(对齐平台 cordis 面板与社区远程控制插件):入口挂左侧边栏 sidebar.footer.action 槽位——折叠 rail 态 36px 圆钮 + 状态点 + 数量角标(多条目自动竖排成图标列),展开态「鸿蒙」标签 + 设备数按官方间距紧贴前序按钮;点击经 ReactDOM portal 打开右上角浮动面板(拖拽 / 八向缩放 / 收起 / 归位 / × 关闭,不打断主界面)——设备列表(型号/API/电池)、一键截图、hilog 尾部、系统区、工具链徽章;主题走官方 --dsw-alias- token、样式按官方 data-plugin-css 约定注入、层级对齐官方弹层,随平台生命周期卸载;面板打开 8s/20s、关闭降为 60s 慢轮询(入口状态点保持新鲜);数据走 /api2/hdc-bridge/ 只读 REST;headless 宿主自动跳过 |
| 可选知识搭配 | Tier-2 社区包 harmony-next.skills(无 LICENSE,不随包,用户自行 npx skills add linhay/harmony-next.skills) |

安装 / Installation

npm 安装 / install from npm
dsh plugin --profile <name> add dsh-hdc-bridge

或直接从 GitHub 安装(纯 JS、无构建步骤,无需授权 prepare)/ or install straight from GitHub (plain JS, no build step, no prepare grant needed)
dsh plugin --profile <name> add github:1na-ko/dsh-hdc-bridge

验证组合层,然后启动 / verify the composed layer, then boot
dsh --profile <name> --dump-config # 确认出现 dsh-hdc-bridge 层 / confirms the dsh-hdc-bridge layer
dsh --profile <name>

环境要求

- DSH ≥ 0.1.7-rc.2(推荐 ≥ 0.2.0-rc.2,0.2.0-rc.2 已实测):上游 0.2.0-rc.2 起把 ctx.shell.run() 换成 resolve() + execute()(句柄 result() 取结果)——新契约为准;0.1.5 及更早的旧线(run())由兼容垫片接管,两条线都可用。两条 seam 都不存在的宿主会直接给出「seam 缺失」的明确报错,而不是误导性的 hdc not found
- HarmonyOS 设备/模拟器;真机需开发者模式 + USB 调试
- hdc 二进制自动探测(工具与面板共用同一套候选源):显式 devecoPath / DEVECO_STUDIO_HOME / DEVECO_HOME / DEVECO_SDK_HOME → Windows 注册表(含 WOW6432Node)→ 非默认 DevEco/CLT SDK 根 → 默认安装根(apiVer 覆盖 default/10…18)→ PATH 回退(where.exe / Get-Command / which);面板优先复用工具层已解析路径,两侧行为一致
- 截图查看需图像输入模型;纯文本模型可用 hdc_ui_dump 做文本化 UI 检查
- 可选后端 @deveco/deveco-cli(MIT)不随插件安装(插件零依赖,安装期不执行任何第三方脚本),工具链二选一:
- 路线 A|DevEco Studio:本机装 DevEco Studio ≥ 6.1.0(macOS/Windows)+ npm i -g @deveco/deveco-cli;
- 路线 B|独立 Command Line Tools:华为官方 zip 发行版(codelinter / hvigorw / ohpm / emulator / 内嵌 SDK,≥ 26.0.0,解压即用),下载自 developer.huawei.com/consumer/cn/download/command-line-tools-for-hmos,设置 DEVECO_CLI_CLT_PATH(或 COMMAND_LINE_TOOL_PATH)指向解压目录即可被自动识别;根识别支持 version.txt 与无 version.txt 的发行形态(HNP/系统集成包:以 sdk/default 布局为准,世代号取自 sdk/default/sdk-pkg.json);Linux 主机仅支持此形态。
- 未安装时相关工具全部优雅降级并给出安装指引;hms_setup 一眼可查当前 toolchainKind(studio / clt)。签名前需一次人工 devecocli auth login(浏览器 OAuth)
- 本机无任何工具链时仍可用:hdc_* 全部工具、设备面板与 Tier-1 离线知识层(随包内置)
- hms_api / hms_lint rules 直接读本机 DevEco Studio/SDK 安装(零再分发);未装 Studio 时这两项降级并给出指引
- hms_knowledge 的 Tier-1 官方知识节选随包内置(28 篇约 1.7MB,CC-BY-4.0 逐字节选并附署名 + 逐文件溯源),离线可用,无需任何本机安装
- hms_api_change(check compat)需要更高版本的 DevEco Studio(实测 6.1.0.830 报"min required 26.0.0.810");不满足时工具返回官方错误原文 + 升级指引,并提示先用 hms_api 的 @since/@deprecated 版本知识

依赖与许可合规

- 本包零 npm 依赖(安装期不执行任何第三方脚本);devecocli 为可选后端,需要时由用户自行安装(见上)
- 引用资源严格分四类并记录于 THIRD_PARTY_NOTICES.md(机器源 notices.json):① 可选后端(devecocli,MIT,不随装——本机探测/PATH 使用);② 随包内容(knowledge/ 官方文档逐字节选,CC-BY-4.0 署名 + 逐文件溯源);③ 改写内容(deveco-cli 技能改编自官方 SKILL.md,MIT 版权声明保留);④ 仅引用不分发(SDK .d.ts、codelinter 规则、harmony-next.skills 等——本机读取或链接指路)
- 发布前跑 npm run license-check 门禁:白名单校验(MIT/Apache-2.0/CC-BY-4.0/ISC/BSD/0BSD)、依赖声明与 notices 一致性、改写内容版权行存在性

权限与沙箱

- 工具按调用会话解析沙箱策略(会话 cwd 为工作区边界)
- 截图默认写入 <workspace>/.dsh-hdc/screenshots/,建议加入项目 .gitignore
- 若部署沙箱 runner 不可用(SandboxUnavailableError),按 DSH 规范对单条命令以更宽模式升级重试;hvigor 构建因其用户级缓存(~/.hvigor、npm 缓存)在工作区外,通常需要该升级
- devecocli 内部会派生管道 stdio 子进程(签名校验、hvigor fork):在受限沙箱会话中会报 EPERM/误报"未签名",工具透传官方错误原文并给出沙箱外执行指引(build/run/sign 官方本就标注 [Outside sandbox])

实测矩阵

| 环境 | 结果 |
| Windows + hdc 3.2.0c + 真机(API 24) | 全部工具 ✓ |
| Windows + hdc 3.2.0c + 模拟器(API 23) | 全部工具 ✓(含 -t 多目标覆盖) |
| 双目标(USB + TCP 模拟器) | 列表/覆盖/默认目标选择 ✓ |
| 无设备 | 结构化降级 + 连接指引 ✓ |
| 装包(签名已绑定 UDID) | 双目标安装成功 + 应用启动 + UI 文本验证 ✓ |
| 装包签名未绑定 UDID | 结构化上报 9568332 + 修复提示 ✓ |
| v0.2 UI 操作闭环 | tap 聚焦 → input 输入 → dump 验证文本回显 ✓(模拟器实测) |
| v0.2 应用生命周期 | stop → clear-data → uninstall → install → start 全链路 ✓(模拟器实测) |
| v0.2 崩溃抓取 | jscrash 按包名过滤返回源码级堆栈 ✓(模拟器);无崩溃时优雅返回 ✓(真机) |
| v0.2 实机登录流程 | 拉起 → dump 定位 → 分段输入 → 校验 → 点登录、请求发出 ✓(真机实测) |
| v0.7 面板三态(无头 Edge 实测) | 展开态入口贴排(6px 官方间距)、折叠态四行图标列、往返切换、浮动面板截图即时出图、层级正确 ✓ |
| v0.7 模拟器全量 | 20 工具 + 4 REST 路由 + 知识层 28 篇读取 + hms_emulator 降级指路 ✓(发布前回归) |
| v0.7.4 统一 hdc 发现(issue #4 回归) | 工具层候选全败时 PATH 回退命中、面板复用工具层解析结果、面板自身 PATH 回退三场景断言 ✓(smoke);真机环境经 DEVECO_SDK_HOME 动态根端到端解析直连 ✓ |
| v0.9 回归 | 25 工具 + 5 运行时技能 + 4 REST 路由 + 官方 slots 面板 + 知识层 28 篇读取(发布前 smoke) |
| 社区 issue 批次(#8-#13)回归 | Windows + DSH 0.2.0-rc.2 实测:shell 双 seam 兼容(新线 execute / 旧线 run)、bash 宿主先探口味再探 CLI、无 version.txt 的 CLT 树识别 + 世代门、arkts_check 的 Studio→CLT 回退、hms_lint 经 --output-path 取回报表;smoke 118 项断言全绿(含假 CLT 树/假 seam/假 CLI 写报表的行为级用例) |

已知限制 / Known limitations

- snapshot_display 仅支持 .jpeg(API 10+ 实测;API 24 真机 2800×1840 已验证)
- 真机安装需签名 profile 绑定设备 UDID,否则报 9568332 install sign info inconsistent(应用签名问题,非插件问题)
- hdc 客户端对远端失败可能仍返回退出码 0,插件以输出标记 + 落盘校验兜底
- hms_lint check 的 JSON 报表依赖 CLI 的 --output-path(Studio ≥ 6.1 / CLT ≥ 26):报表暂存在工作区 .dsh-hdc/lint/ 并读取后删除;旧版 CLI 仍按 stdout JSON 兼容解析
- arkts_check 的随包 checker 只识别 <root>/sdk/default/... 与 <root>/sdk/openharmony/... 两种 SDK 布局(CLT 实机布局即前者);<root>/sdk/<api>/... 的社区变体需把 DEVECO_CLI_CLT_PATH/Studio 指到与布局匹配的根
- hvigorw 回退的 kind=js 入口(CLT 无 bin/ 时)必须由工具链自带 node 运行:CLT <root>/node,Studio <root>/tools/node,缺失时退回宿主 node
- hdc_shell 的命令跨三层解析(本机宿主 shell → hdc 参数拼接 → 设备端 sh),插件自 v0.8.1 起自动逐层转义保证保真(pwsh 与 POSIX 宿主一致);命令中的其余 sh 元字符(双引号、$、; 等)按设备端 sh 原语义生效,请直接传入目标语义的合法命令- UI 输入实战经验(真机实测):
- 混合字符串(数字→字母→数字)注入时,IME 模式切换会稳定吞掉紧跟字母后的第一个字符;规避:分段输入 + hdc_ui_dump 校验 + 缺失字符单独补发
- 软键盘会改变页面布局:每次点击/输入前使用最新 dump 的坐标,否则可能点到键盘区
- 键盘可能遮住按钮:先 hdc_ui action=key key=Back 收起键盘,再按新坐标点击

模型调用手册

标准工程闭环

模型接手一个 HarmonyOS 工程时,按以下顺序调用:

1. switch_cwd 指向包含 build-profile.json5 的工程根目录。
2. hms_setup action=doctor 确认 DevEco Studio、SDK、JBR、hdc、devecocli 和目标 API。
3. hdc_log action=list_devices 或 hdc_list_targets 确认设备;多设备时保存返回的 preferred 或明确选择 target。
4. 修改 .ets 后调用 arkts_check。
5. 调用 build_project;需要全量重建时传 clean:true,该调用执行 clean → build → HAP 产物校验。
6. 需要安装、启动和 mission 证明时调用 hms_build action=run;只启动已有 HAP 时调用 start_app。
7. 用 hdc_ui_dump、hdc_ui_find、hdc_screenshot、hdc_hilog 或 hdc_crash 做设备侧验证。

不要把 build_project 的文字输出当作唯一成功依据;同时检查 ok、backend、artifactVerified、hapAfter 和真实设备状态。

典型 tool call

{"name":"switch_cwd","arguments":{"path":"E:\\ScribePad"}}

{"name":"hms_setup","arguments":{"action":"doctor"}}

{"name":"hdc_log","arguments":{"action":"list_devices"}}

{"name":"arkts_check","arguments":{}}

普通增量构建:

{"name":"build_project","arguments":{"clean":false,"product":"default","build_mode":"debug"}}

全量重建:

{"name":"build_project","arguments":{"clean":true,"product":"default","build_mode":"debug"}}

真实部署闭环:

{"name":"hms_build","arguments":{"action":"run","projectPath":"E:\\ScribePad","device":"192.168.1.11:12345"}}

成功时应看到 ok:true、stage:"start"、目标 target、HAP 路径和 missionVerified:true。只清理构建目录时使用 hms_build action=clean;它是 clean-only,不会自动重新 build。

start_app 的安全调用方式

start_app 不重新构建。未传 hvd 时只发现设备,不安装、不启动:

{"name":"start_app","arguments":{}}

模型应从返回的在线设备列表中选择目标,再显式调用:

{"name":"start_app","arguments":{"hvd":"192.168.1.11:12345"}}
可选参数是 ability、module、target。当 devecocli 的设备发现通道被 mojo 阻断时,主提示仍以 hdc 的真实在线设备为准,不再并列显示误导性的「未检测到可用设备」。

UI 观察 → 操作 → 验证

{"name":"hdc_ui_dump","arguments":{}}

{"name":"hdc_ui_find","arguments":{"text":"登录","exact":true}}

把 hdc_ui_find 返回的 center 坐标传给操作工具:

{"name":"hdc_ui","arguments":{"action":"tap","x":540,"y":1460}}

{"name":"hdc_ui","arguments":{"action":"input","text":"test@example.com"}}

每次键盘弹出、页面滚动或窗口改变后,都要重新 dump/find,不能复用旧坐标。键盘遮挡时先发送 {"action":"key","key":"Back"}。

截图、日志和崩溃

{"name":"hdc_screenshot","arguments":{}}

截图返回的本地 JPEG 路径交给 read_image。纯文本模型使用:

{"name":"hdc_hilog","arguments":{"lines":200,"tag":"PARAM"}}

{"name":"hdc_log","arguments":{"action":"collect","bundle":"com.example.scribepad","lines":300}}

{"name":"hdc_crash","arguments":{"kind":"all","bundleName":"com.example.scribepad","lines":80}}

新增能力速查

设备层(12 个工具)

hdc_list_targets 列出全量 hdc targets;hdc_connect 连接 TCP 设备;hdc_shell 执行设备 shell;hdc_screenshot 截图并拉回 JPEG;hdc_install 安装 HAP;hdc_hilog 读取 hilog;hdc_ui_dump 文本化 UI 层级树;hdc_ui_find 按文本/hint 查控件并计算中心点;hdc_ui 执行 tap、doubleTap、longPress、swipe、input、key;hdc_app 管理应用生命周期;hdc_crash 读取 faultlogger 崩溃;hdc_diag 诊断本机插件和沙箱状态。

官方工具链层(8 个工具)

hms_setup 汇总 hdc/Studio/SDK/devecocli/设备和三源 API 版本;hms_build 封装官方 build/run/sign/clean/status;hms_lint 提供本机 57+ 条规则、规则文档和官方 lint;hms_api 从本机 SDK .d.ts 读取模块、声明和 @since/@deprecated/@syscap;hms_knowledge 提供 28 篇离线官方知识;hms_docs 访问 devecocli 官方本地文档;hms_api_change 扫描 SDK 版本间破坏性变更;hms_emulator 控制模拟器和注入电量、GPS、传感器、折叠、旋转、运动场景等状态。

DevEco Code 编译层(5 个工具)

switch_cwd、build_project、arkts_check、start_app、hdc_log 是从 deveco-code-gitcode 对照移植的会话编译闭环。它们共享会话工程根目录、沿用官方参数命名,并在本插件层补充 hdc 设备过滤、HAP 产物校验、JBR 注入和结构化失败结果。

返回值契约

- hdc_log action=list_devices 返回 devices、全量 targets、preferred、preferredActive;COM 串口只保留在 targets。
- hms_build build 返回 backend、artifactVerified、hapBefore、hapAfter;没有真实 HAP 时不得 ok:true。
- hms_build run fallback 返回 stage、hap、bundleName、target、start.ok、missionVerified。
- build_project 返回 artifactStale、hapBefore、hapAfter、backend;clean:true 的 command 明确显示 clean → build。
- start_app 未传 hvd 时返回 availableDevices,只做发现;传入 hvd 后才允许部署和启动。
- 构建日志和 hms_build 输出会清除 ANSI 转义码;长输出按尾部截断,状态行保持在末尾可见。

知识查询纪律

涉及 ArkTS/API 时先确定目标 API 版本,再按以下优先级:

1. hms_api:本机 SDK 的机器可读声明和版本标签;
2. hms_knowledge:离线官方节选,适合概念和用法;
3. hms_docs:全量官方本地文档;
4. hms_api_change:跨版本破坏性变更;
5. hms_lint:本机官方规则验证。

示例:

{"name":"hms_api","arguments":{"action":"lookup","module":"@ohos.promptAction","name":"showToast"}}

{"name":"hms_knowledge","arguments":{"action":"search","keywords":"Navigation 路由"}}

{"name":"hms_lint","arguments":{"action":"rules","limit":10}}

面板与 REST

Web profile 注册以下路由:

- /api2/hdc-bridge/panel-state:设备、工具链、SDK/API 和面板状态;
- /api2/hdc-bridge/select:选择会话默认设备;
- /api2/hdc-bridge/screenshot.jpeg:当前目标截图;
- /api2/hdc-bridge/hilog:面板日志。

面板入口挂左侧边栏 sidebar.footer.action 槽位(折叠态图标 + 状态点 + 数量角标,展开态「鸿蒙」标签贴排);点击经 ReactDOM portal 打开右上角浮动面板(可拖拽、八向缩放、收起、归位、× 关闭),样式使用 DSH 官方 --dsw-alias-* token 和 data-plugin-css 注入,随平台生命周期卸载。

工具链探测和沙箱

Windows 探测顺序为:显式路径/环境变量 → 注册表(含 WOW6432Node)→ PATH 反查 → 常见 DevEco Studio/SDK 目录。Studio 根目录继续用于定位 SDK API、JBR Java、hvigorw 和 hdc.exe。

构建、运行、签名、compat 等官方命令可能被 DSH 受限策略阻断。插件会返回 mojoFatal 或 outsideWorkspace,并在可行时切换到本地 hvigorw/hdc 回退;回退必须通过真实产物、安装结果和 mission 检查。所有插件管理的 hvigor 任务都会先在项目内的 .dsh-hvigor-tmp 设置 HVIGOR_USER_HOME 和 BUILD_CACHE_DIR(后者把 build.log 等项目缓存也收进隔离目录),首次运行时复用默认 hvigor home 已缓存的 wrapper/pnpm,执行 hvigorw --stop-daemon,再注入 DevEco Studio JBR 的 JAVA_HOME 和 bin 到 PATH,最后以 --no-daemon 执行,避免旧 daemon 缓存裸 java 环境导致 spawn java ENOENT(包括 app_packing_tool.jar / onDeviceTest 类任务)。停止旧 daemon 若被宿主权限策略拒绝不会阻断当前的无 daemon 任务;任务本身仍按真实退出码和产物校验判定成功。hms_emulator list 与 hms_api_change 的 JSON 通道为空时,包装层会重试宿主策略并回退到 devecocli emulator list / check compat versions 的纯文本输出(compat 回退合并 stderr 透传官方原文,且 Studio 低于 26.0.0.810 时由本地版本前置直接合成官方报错),成功路径也始终返回可读 output;hms_emulator list 先确保 hdc 已初始化,再在 hdc 有 Connected 模拟器目标时用 hdc 事实回填,start 会幂等轮询任意 Connected 模拟器目标(兼容 devecocli 的 status/state/isRunning 字段)到 running 才报成功。hms_build / build_project 返回体带 daemonStopped、javaHome、hvigorUserHome、buildCacheDir 诊断字段。签名 OAuth 仍需用户在宿主终端执行一次 devecocli auth login。

当前实测范围

Windows + DevEco Studio 6.1.1.300 + SDK API 24 + TCP 真机 192.168.1.11:12345 已验证:

- 25 个工具、5 个运行时 skill、4 个面板 REST 路由注册;
- switch_cwd、ArkTS 32 文件检查、设备首次发现和 preferred 回填;
- build_project(clean=true) 真实 clean → build → HAP 校验;
- hms_build clean/build/run 真实产物、安装、启动和 missionVerified:true;
- start_app 无 hvd 时列设备且不自动部署;
- build/run 输出 ANSI 清理;
- 离线知识 28 篇、hms_lint 57+ 规则索引和插件 smoke 回归。

仍需人工覆盖:面板 GUI 视觉逐态、签名 OAuth 成功路径、不同 Studio/SDK 版本;macOS 宿主经社区报告(issue #7)实测验证(SDK API 26,截图/dump 路径已修复)。

路线图

- [x] DevEco CLI(devecocli)构建/签名封装(v0.4:可选后端 + hvigorw 降级)
- [x] 官方优先版本化知识层(v0.4:SDK .d.ts + 官方文档检索 + 跨版本变更扫描 + 官方 lint 规则)
- [x] 按 API 版本整理的官方知识节选随包内置(v0.5:hms_knowledge,28 个高频主题逐字节选,CC-BY-4.0 合规)
- [x] 输入行设备面板(v0.6:Web 宿主 REST 数据通道 + 对话输入行入口)
- [x] 深度优化 + 面板官方化(v0.7:全量回归 smoke、hdc-core/errors 拆分与 11 条错误码、hms_build 工作区预检、hms_emulator 模拟器控制、签名三类指引、Tier-1 扩至 28 篇;面板使用官方 client 槽位和主题 token,胶囊上方锚定展开)
- [x] 上游整合移植(v0.9.0:吸收 PR #6——会话编译闭环五工具、运行时技能补全、emulator hdc 交叉校验、CLT 双形态;面板保持官方 client 形态)
- [x] macOS 宿主路径兼容(v0.9.1:社区报告 + 实测验证,joinPath 化修复截图/dump 暂存路径;其余工具待完整实机回归)
- [x] 统一 hdc 发现 + 支持独立 Command Line Tools(v0.10:面板/工具层单源探测、DEVECO_SDK_HOME 动态根、CLT >=26 双形态识别,SDK/hdc/hvigorw/codelinter 全链自动覆盖,Linux 仅 CLT 形态)
- [x] 社区 issue 批次 #8-#13(DSH 0.2.0-rc.2 shell 契约迁移 + 双 seam 垫片、bash 宿主 CLI 探测与负缓存失效、无 version.txt 的 CLT 发现与世代门、构建产物判定与 hvigorw node 前缀、arkts_check CLT 回退、lint 报表落盘)

License

MIT
预览分享卡片长什么样 ↓1na-ko/dsh-hdc-bridge
分享 · DeepSeek Harness Hub
1na-ko/dsh-hdc-bridge

DSH 原生鸿蒙开发助手:hdc 设备闭环调试看设备 → 截图 → 看图 → 改码 → 装包 → 验证+…

回到顶部