# Agent 与 Hawk 边界与协同说明

## 代码隔离

| 板块 | 目录 | 职责 |
|------|------|------|
| **Agent** | `agent.py`, `skill_executor.py`, `skills/*` | 业务逻辑、技能执行、WebSocket 连接与重连策略、与服务器通信 |
| **Hawk** | `hawk/*` | 仅负责网络层：检测网络、开/关 WiFi、打开系统网络设置、连接已保存网络、重试等 |

- Agent 不实现 Hawk 的细节（如 `svc wifi`、打开设置页 UI）；Hawk 不依赖 Agent 或技能总线。
- 协同仅通过**接口**：Agent 调用 `hawk.try_reconnect_network(device)` 与 `hawk.is_network_available(device)`。

## 协同方式

1. **断网时自动恢复网络**  
   Agent 在 WebSocket 断开且准备重连前，若存在设备句柄 `self.d`，会调用 `try_reconnect_network(self.d)`，由 Hawk 在设备上执行合法网络恢复（开 WiFi、打开设置、连接已保存网络等），再继续指数退避重连。

2. **自然语言触发**  
   用户说「连接网络」「恢复网络」「打开 WiFi」「断网了」等时，Agent 通过 SkillExecutor 调用 `network_reconnect` 技能，该技能内部委托 Hawk 执行上述合法操作。

## 网络恢复行为（仅合法）

Hawk 只做以下操作，**不包含且永不包含**破解密码、未授权访问等任何违规行为：

- 通过系统 shell 开启 WiFi：`svc wifi enable`
- 打开系统「设置」→「网络/WLAN/Wi‑Fi」页面
- 在设置页中点击「已保存」「已知网络」等，尝试连接**已保存**网络
- 若仍无网络，返回说明「请在本机选择已保存网络或手动输入密码连接」

用户若需连接新网络或输入密码，仅在系统设置界面内**手动**完成。

## 依赖关系

```
Agent (agent.py, skills/)
  └─ 可选依赖 Hawk：from hawk import try_reconnect_network
Hawk (hawk/)
  └─ 仅依赖 uiautomator2 设备对象，无 Agent 依赖
```

Hawk 缺失时，Agent 仍可运行；断网时仅跳过「尝试恢复网络」步骤，直接进入重连退避。
