feat(cloud): add edge host enrollment
This commit is contained in:
@@ -338,7 +338,60 @@ Console 默认连接 `http://127.0.0.1:8000`。已由上面启动脚本连接的
|
||||
`iphone-1` 会出现在设备列表中。不要在 Console 中重复登记同一台设备;当前登记
|
||||
操作只写入配置,不会自动 connect。
|
||||
|
||||
## 9. 多设备与端口
|
||||
## 9. 启动云端受管 Host Agent
|
||||
|
||||
完成 Appium/WDA 真机验证后,可以把这台 Mac 作为只发起出站连接的边缘 Host。
|
||||
先把设备连接参数写入本地配置;这里的 `device_id` 只是 Mac 内部引用,不需要与
|
||||
云端协调,云端会在首次启动时下发正式 ID:
|
||||
|
||||
```bash
|
||||
uv run --package device-agent-runtime python - <<'PY'
|
||||
import os
|
||||
from storage.device_config import DeviceConfigStore
|
||||
|
||||
DeviceConfigStore("tasks/device_config.sqlite3").add(
|
||||
device_id="local-iphone-1",
|
||||
name="Edge iPhone",
|
||||
driver_type="wda",
|
||||
connection_info={
|
||||
"server_url": "http://127.0.0.1:4723",
|
||||
"device_name": "iPhone",
|
||||
"udid": os.environ["DEVICE_UDID"],
|
||||
"wda_local_port": 8100,
|
||||
"xcodeOrgId": os.environ["APPLE_TEAM_ID"],
|
||||
"xcodeSigningId": "Apple Development",
|
||||
"updatedWDABundleId": os.environ["WDA_BUNDLE_ID"],
|
||||
},
|
||||
)
|
||||
PY
|
||||
```
|
||||
|
||||
从云端管理员获取一枚未使用的一次性 enrollment token,然后启动:
|
||||
|
||||
```bash
|
||||
export HOST_AGENT_CONTROL_PLANE_URL="https://cloud.example.com"
|
||||
export HOST_AGENT_ENROLLMENT_TOKEN="<one-time enrollment token>"
|
||||
export HOST_AGENT_IDENTITY_PATH="tasks/host_identity.json"
|
||||
export HOST_AGENT_DISPLAY_NAME="Edge Mac 01"
|
||||
|
||||
export AI_PLANNER_ENABLED="true"
|
||||
export AI_PLANNER_PROVIDER="anthropic"
|
||||
export ANTHROPIC_API_KEY="<secret>"
|
||||
|
||||
uv run --package device-host-agent device-host-agent
|
||||
```
|
||||
|
||||
首次启动顺序为:持久化候选 Host secret、向云端换取 `host_id`、为每个本地设备
|
||||
换取 `device_id`、保存映射、连接 WDA、发送 heartbeat、开始 long-poll 领取任务。
|
||||
Host Agent 不监听入站端口。成功后可以从边缘环境移除 enrollment token,但必须
|
||||
保留并保护 `tasks/host_identity.json` 和 `tasks/device_config.sqlite3`;前者等同于
|
||||
Host bearer credential。
|
||||
|
||||
需要回滚到静态模式时,停止 Host Agent,由云端管理员配置匹配的静态 Host
|
||||
credential,然后显式设置 `HOST_AGENT_HOST_ID` 与 `HOST_AGENT_TOKEN`。这两个变量
|
||||
同时存在时优先于 enrollment state。
|
||||
|
||||
## 10. 多设备与端口
|
||||
|
||||
同时连接多台 iPhone 时,每台设备至少需要:
|
||||
|
||||
@@ -364,7 +417,7 @@ Console 默认连接 `http://127.0.0.1:8000`。已由上面启动脚本连接的
|
||||
`webDriverAgentUrl`。常规单机使用优先让 Appium 管理 WDA,不要一开始就引入
|
||||
`iproxy` 或手工 WDA 生命周期。
|
||||
|
||||
## 10. 常见故障
|
||||
## 11. 常见故障
|
||||
|
||||
### Appium 返回 `device offline`
|
||||
|
||||
@@ -420,7 +473,7 @@ Appium server 默认使用 4723;WDA 通常使用 8100。多设备必须为每
|
||||
input、launch 和 UI tree 验证基础控制,再单独处理 PaddleOCR/PaddlePaddle 的 macOS
|
||||
wheel 与 Apple Silicon 兼容性。
|
||||
|
||||
## 11. 完成检查表
|
||||
## 12. 完成检查表
|
||||
|
||||
- [ ] Xcode 能看到已解锁的 iPhone。
|
||||
- [ ] iPhone 已信任 Mac,并启用 Developer Mode。
|
||||
@@ -433,8 +486,9 @@ wheel 与 Apple Silicon 兼容性。
|
||||
- [ ] 实机 integration test 通过。
|
||||
- [ ] Runtime API 返回 `iphone-1`,并能执行 screenshot/tap/launch。
|
||||
- [ ] 如需 OCR,另行确认 PaddleOCR 在当前 Mac/Python 架构下可运行。
|
||||
- [ ] 云端受管部署已保存 Host identity,并能在 `/v1/hosts`、`/v1/devices` 中看到。
|
||||
|
||||
## 12. 后续代码改进建议
|
||||
## 13. 后续代码改进建议
|
||||
|
||||
为了让后续执行不再依赖内联 Python 启动脚本,建议另开变更实现:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user