xAgent Device Profile v1
本文档定义 xagent.device.v1 的设备绑定、能力声明和设备操作边界。
公共连接、认证、工具、媒体和错误协议见
xAgent Connector Common Protocol。
1. 定位
xagent.device.v1 表示 Connector Channel 绑定到可观察或操作的设备。
Profile 负责:
- 设备目标的标准声明。
- channel 与设备绑定关系的外部语义。
- 观察类和操作类工具的安全边界。
- 设备截图等媒体结果的交付约束。
Profile 不规定 ADB、厂商云 API、局域网协议或其他具体设备协议,也不要求所有 Device Connector 提供相同工具。
2. Profile 声明
Connector Card 必须声明 device target type 和 xagent.device.v1:
{
"supports": {
"target_types": ["device"],
"targets": [
{
"target_type": "device",
"provider": "adb",
"label": "Android 设备"
}
],
"profiles": ["xagent.device.v1"]
}
}
认证或绑定完成后,Connection Descriptor 的 connection.target_type 必须是 device,并在 connection.profiles 声明 xagent.device.v1。
3. 设备绑定
必须遵守:
- Connector 通过
connector_channel_id定位当前绑定设备。 - 设备序列号、网络地址、平台账号等事实由 Connector 管理,不能要求 Agent 自由填写以绕过 channel 绑定。
- Descriptor 必须反映设备当前是否已绑定、在线和可用。
- 设备解绑、离线或权限变化后,Connector 必须回正 Descriptor 和工具可用状态。
- 多 channel 是否允许共享设备由 Connector 定义,但必须保证并发和副作用语义明确。
设备租约、断线保护时间和抢占策略属于实现建议;实现者应在 Connector 文档中说明。
4. 工具分类
Device Connector 可以声明:
- 观察类工具,例如状态、截图、传感器或可访问 UI 读取。
- 操作类工具,例如点击、输入、启动应用或发送设备指令。
- 文件或媒体类工具,例如获取截图或上传待处理文件。
必须遵守:
- 工具只能操作当前 channel 已绑定且当前可用的设备。
- 工具必须在 Card 中真实存在,并在 Descriptor 中声明当前可用状态。
- 操作类工具必须校验参数范围和目标系统权限。
- 不得把系统 API key、设备密钥或平台 token 暴露给 Agent。
- 有副作用操作必须具备明确的重复调用语义;不能把网络重试隐式解释为再次执行。
5. 并发与状态
Profile 不强制内部锁、队列或 worker 实现。
建议:
- 同一设备的有副作用操作按 channel 串行执行。
- 观察类操作可以在设备协议安全时并发。
- Connector 重启后恢复绑定时先验证设备仍可访问,再把状态投影为 connected。
- 设备离线、命令超时和权限拒绝使用不同稳定错误 code。
- 长耗时操作可以使用主协议的
tool.progress.push,最终仍以tool.invoke.ack收束。
6. 设备文件
截图、录屏或设备文件不得直接放入 WebSocket payload、工具参数或 base64 字段。
Connector 应通过 Transfer Plane 返回 file_ref 和可下载 URL。文件缓存 TTL、容量和清理周期由实现决定,但必须有限,并应在实现文档中说明。
7. 安全
- Connector 必须限制可执行的设备动作,不能把任意 shell 或未约束命令默认暴露为模型工具。
- 涉及隐私、支付、账号、安全设置等高风险操作时,Connector 可以要求额外授权或拒绝执行。
- 日志不能记录设备密钥、完整认证材料或敏感输入正文。
- Connector 不得依赖 xAgent 内部用户表、Session 或 Agent 状态做设备路由。
8. 一致性检查
- Card 和 Descriptor 是否正确声明
device与xagent.device.v1? - 所有工具是否只操作 channel 绑定设备?
- 离线和权限变化是否会回正 Descriptor?
- 有副作用工具是否定义了重复调用行为?
- 媒体是否通过 Transfer Plane 交付?
- 租约、并发、TTL 和容量等实现策略是否已在 Connector 文档中说明?