mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-08 00:25:05 +00:00
## 要判的是什么
GUI(cmd/gui/main.js)作为**设备端**被 agent 驱动,走的是 WS 上行/下行的
op 消息,与服务端 remotedevice 插件共享同一套能力契约。这条通道此前
**没有任何强制手段** —— endpoint-align.test.mjs 只守 REST 面
(api("...") 对齐 webui 的 mux.HandleFunc),明确不碰设备桥。
两套实现(Go client / GUI JS / 鸿蒙 ETS)全靠注释人工对齐
(main.js:1367「与鸿蒙端 DeviceBridge.ets:209 对齐」)。
## 真实漂移(2026-10-05 核实)
GUI caps 含 "omniparse",executeHomeagentCmd 有完整 case(调 PowerShell
+ ha_omniparse_*.ps1)。但 capabilityTools 里没有这个键,整个
remotedevice 包 grep omniparse 命中 0 ⇒ deviceSupportsTool 恒 false
⇒ agent 永远不会下发 ⇒ 那段实现是死代码。
修复:capabilityTools 补键,使其可被下发。
## 删 devicebridge_dll.js
三条都查证过:
1. 无人引用 —— 全仓 grep DeviceBridgeDLL 命中 0;
2. 必然抛 —— start() 无条件 throw 'koffi not fully implemented',
且 loadFFI() 的 ffi-napi 备选分支只 return true 不返回 lib;
3. 方向已废弃 —— GUI 走 main.js:999 手工构造的原生 WebSocket
(Sec-WebSocket-Key/Version 握手),不经 FFI。
⚠ koffi **依赖保留**:main.js:1873 用 koffi.load("user32.dll") 做
computeruse 的鼠标键盘注入,那是真实在用的,与本文件无关。
## 撤回两个误判
写门禁初版时判错两处,均已在判据注释里记录理由:
- 「GUI 声明 cmdrun/cmdresult 会绕过能力矩阵」是错的。device_ctl_cmdrun
(device.go:270)是所有能力的**统一下发通道**:agent 调
computeruse/screensue 最终都由它下发 homeagent-*,SupportsTool 查的是
具体能力名而非 cmdrun。声明 cmdrun 是对的。
- 「status/deviceinfo 服务端不认」也是错的。二者是元信息通道而非设备
工具:status 是心跳上报(registry.go:831),deviceinfo 的实现
(device.go:338)直接回显 meta.Caps 原始值、不经 deviceSupportsTool。
判据改为区分 capabilityTools(可裁剪能力)与 metaCaps(元信息通道)。
## 门禁(cmd/gui/device-align.test.mjs)
从 registry.go / protocol.go / main.js 三方**源码文本**提取,不抄逻辑
重写 —— 同 endpoint-align 路子。9 条判据覆盖:cap 双向识别、capability-
> 实现的一致性、protocol.go 消息类型落点、多处 hello 的 caps 一致性、
DLL 桩守卫。
变异测试验证非假红:撤掉服务端 omniparse ⇒ 第 3、5 条立刻转红;
只改第二处 caps ⇒ 第 9 条报「第 2 处起有 1 处不一致」。
## 验证
- node device-align.test.mjs ⇒ 11 条全绿
- gofmt -l registry.go ⇒ 干净
- go vet ./internal/plugins/remotedevice/ ⇒ 本包无告警
⚠ go test ./internal/plugins/remotedevice/ 未能跑通:internal/agent/api 的
cgo 构建失败(codec_cgo.go 静态断言 + C 符号解析)。已确认该失败在**未
改动的 main 上同样存在**,需先构建 csrc 静态库,是既有环境前置条件,
与本次改动无关。
顺带同步 cmd/gui/package-lock.json 版本号 1.0.0 → 1.4.0,与
cmd/gui/package.json 对齐。