+ {Array.from({ length: 5 }).map((_, i) => (
+
+
+
+ ))}
+
+ )
+}
+```
+
+### 6.3 响应式断点
+
+| 断点 | 宽度 | 布局 |
+|------|------|------|
+| mobile | < 768px | 单栏,底部导航 |
+| tablet | 768-1024px | 侧边栏折叠,内容全宽 |
+| desktop | 1024-1440px | 侧边栏+内容 |
+| wide | > 1440px | 侧边栏+内容+右侧面板 |
+
+---
+
+## 七、项目结构
+
+```
+management-ui/
+├── app/ # Next.js App Router
+│ ├── layout.tsx # 根布局(毛玻璃侧边栏+导航)
+│ ├── page.tsx # 仪表盘
+│ ├── devices/
+│ │ ├── page.tsx # 设备列表
+│ │ └── [id]/page.tsx # 设备详情
+│ ├── modules/
+│ │ ├── page.tsx # 模块列表
+│ │ └── [id]/page.tsx # 模块配置
+│ ├── messages/
+│ │ └── page.tsx # 消息中心
+│ ├── tasks/
+│ │ └── page.tsx # 任务调度
+│ ├── risk/
+│ │ └── page.tsx # 风控中心
+│ ├── analytics/
+│ │ └── page.tsx # 数据统计
+│ └── settings/
+│ └── page.tsx # 系统设置
+├── components/
+│ ├── ui/ # 毛玻璃基础组件
+│ │ ├── glass-card.tsx
+│ │ ├── glass-sidebar.tsx
+│ │ ├── glass-navbar.tsx
+│ │ ├── glass-modal.tsx
+│ │ ├── glass-button.tsx
+│ │ └── skeleton.tsx
+│ ├── device/ # 设备相关组件
+│ ├── module/ # 模块相关组件
+│ ├── messages/ # 消息相关组件
+│ └── charts/ # 图表组件
+├── lib/
+│ ├── api.ts # API客户端
+│ ├── socket.ts # WebSocket客户端
+│ └── utils.ts
+├── stores/
+│ ├── device-store.ts # 设备状态
+│ ├── module-store.ts # 模块状态
+│ └── message-store.ts # 消息状态
+├── styles/
+│ └── globals.css # 全局样式+CSS变量
+├── tailwind.config.ts
+├── next.config.js
+└── package.json
+```
+
+---
+
+## 八、开发任务拆解
+
+| 序号 | 任务 | 预估 | 优先级 |
+|:----:|------|:----:|:------:|
+| F1 | 项目初始化(Next.js+Tailwind+Shadcn) | 2h | P0 |
+| F2 | 毛玻璃基础组件库 | 4h | P0 |
+| F3 | 布局(侧边栏+导航+骨架屏) | 4h | P0 |
+| F4 | 仪表盘页面 | 6h | P0 |
+| F5 | 设备列表+详情 | 8h | P0 |
+| F6 | 模块管理页面 | 6h | P1 |
+| F7 | 消息中心(实时流) | 6h | P1 |
+| F8 | 任务调度 | 4h | P1 |
+| F9 | 风控中心 | 4h | P2 |
+| F10 | 数据统计 | 6h | P2 |
+| F11 | 系统设置 | 3h | P2 |
+| F12 | WebSocket实时通信集成 | 4h | P0 |
+| F13 | API对接+错误处理 | 4h | P0 |
+| F14 | 响应式适配+动画 | 4h | P1 |
+| | **合计** | **~65h** | |
diff --git a/开发文档/5、接口/Hook模块管理接口.md b/开发文档/5、接口/Hook模块管理接口.md
new file mode 100644
index 0000000000..62a0c0e033
--- /dev/null
+++ b/开发文档/5、接口/Hook模块管理接口.md
@@ -0,0 +1,410 @@
+# Hook模块管理接口规范
+
+> 更新:2026-02-10 | 对标奥创XESlciw Manager,定义机擎Hook模块管理的完整API
+
+---
+
+## 一、接口总览
+
+**Base URL**: `http://{server}:8899/api/v3`
+**认证方式**: Bearer Token(同现有接口)
+
+### 1.1 新增接口清单
+
+| 分类 | API | 方法 | 说明 |
+|------|-----|------|------|
+| **模块管理** | /modules | GET | 模块列表 |
+| | /modules | POST | 注册/上传模块 |
+| | /modules/{module_id} | GET | 模块详情 |
+| | /modules/{module_id} | PUT | 更新模块 |
+| | /modules/{module_id} | DELETE | 删除模块 |
+| | /modules/{module_id}/scope | PUT | 设置Scope |
+| | /modules/{module_id}/enable | POST | 启用模块 |
+| | /modules/{module_id}/disable | POST | 禁用模块 |
+| **设备模块** | /devices/{device_id}/modules | GET | 设备已加载模块 |
+| | /devices/{device_id}/modules/reload | POST | 重载设备模块 |
+| | /devices/{device_id}/modules/{module_id}/logs | GET | 模块运行日志 |
+| **脚本管理** | /scripts | GET | 脚本列表 |
+| | /scripts | POST | 上传脚本 |
+| | /scripts/{script_id} | GET | 下载脚本 |
+| | /scripts/{script_id}/deploy | POST | 部署到设备 |
+| **Hook事件** | /hook/events | GET | Hook事件历史 |
+| | /hook/events/stream | WebSocket | Hook事件实时流 |
+
+---
+
+## 二、模块管理接口
+
+### 2.1 GET /modules — 模块列表
+
+**请求**:
+```
+GET /api/v3/modules?enabled=true&scope=com.tencent.mm
+```
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "total": 3,
+ "modules": [
+ {
+ "module_id": "wechat_hook_v1",
+ "name": "微信Hook模块",
+ "version": "1.0.3",
+ "description": "微信消息收发、联系人、朋友圈Hook",
+ "enabled": true,
+ "scopes": ["com.tencent.mm"],
+ "capabilities": [
+ "send_message", "get_messages", "get_contacts",
+ "get_friend_list", "post_moment", "get_moments"
+ ],
+ "min_frida_version": "16.0.0",
+ "script_url": "/scripts/wechat_hook_v1.js",
+ "script_hash": "sha256:abc123...",
+ "device_count": 42,
+ "error_count": 0,
+ "created_at": "2026-02-10T10:00:00Z",
+ "updated_at": "2026-02-10T15:30:00Z"
+ }
+ ]
+ }
+}
+```
+
+### 2.2 POST /modules — 注册模块
+
+**请求**:
+```json
+{
+ "module_id": "wechat_hook_v1",
+ "name": "微信Hook模块",
+ "version": "1.0.3",
+ "description": "微信消息收发、联系人、朋友圈Hook",
+ "scopes": ["com.tencent.mm"],
+ "capabilities": ["send_message", "get_messages", "get_contacts"],
+ "min_frida_version": "16.0.0",
+ "script_content": "// Base64编码的脚本内容...",
+ "enabled": true
+}
+```
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "module_id": "wechat_hook_v1",
+ "script_url": "/scripts/wechat_hook_v1.js",
+ "script_hash": "sha256:abc123..."
+ }
+}
+```
+
+### 2.3 PUT /modules/{module_id}/scope — 设置Scope
+
+**请求**:
+```json
+{
+ "scopes": ["com.tencent.mm", "com.tencent.mm:push"]
+}
+```
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "module_id": "wechat_hook_v1",
+ "scopes": ["com.tencent.mm", "com.tencent.mm:push"]
+ }
+}
+```
+
+### 2.4 POST /modules/{module_id}/enable — 启用模块
+
+**请求**:
+```
+POST /api/v3/modules/wechat_hook_v1/enable
+```
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "module_id": "wechat_hook_v1",
+ "enabled": true,
+ "affected_devices": 42
+ }
+}
+```
+
+---
+
+## 三、设备模块接口
+
+### 3.1 GET /devices/{device_id}/modules — 设备已加载模块
+
+**请求**:
+```
+GET /api/v3/devices/device_001/modules
+```
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "device_id": "device_001",
+ "supports_hook": true,
+ "frida_version": "16.5.6",
+ "hook_framework": "frida-server",
+ "root_status": true,
+ "modules": [
+ {
+ "module_id": "wechat_hook_v1",
+ "version": "1.0.3",
+ "status": "loaded",
+ "loaded_at": "2026-02-10T08:00:00Z",
+ "target_process": "com.tencent.mm",
+ "target_pid": 12345,
+ "rpc_methods": ["send_message", "get_messages", "get_contacts"],
+ "last_error": null,
+ "events_today": 156
+ }
+ ]
+ }
+}
+```
+
+### 3.2 POST /devices/{device_id}/modules/reload — 重载设备模块
+
+**请求**:
+```json
+{
+ "module_ids": ["wechat_hook_v1"],
+ "force": false
+}
+```
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "reloaded": ["wechat_hook_v1"],
+ "failed": []
+ }
+}
+```
+
+---
+
+## 四、Hook指令扩展(统一API)
+
+### 4.1 通过Hook通道发消息
+
+**请求**:
+```json
+POST /api/v3/message/send
+{
+ "device_id": "device_001",
+ "platform": "wechat",
+ "to_id": "wxid_xxx",
+ "content": "你好",
+ "channel": "hook",
+ "hook_config": {
+ "script_id": "wechat_hook_v1",
+ "method": "send_message",
+ "timeout": 10
+ }
+}
+```
+
+**说明**:
+- 新增可选字段 `channel` 和 `hook_config`
+- 不传 `channel` 时由 ChannelRouter 自动选择
+- 指定 `channel: "hook"` 时强制走Hook通道
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "task_id": "task_abc123",
+ "channel_used": "hook",
+ "result": {
+ "success": true,
+ "msg_id": "12345678"
+ }
+ }
+}
+```
+
+### 4.2 通过Hook通道获取实时消息
+
+**WebSocket 事件订阅**:
+
+```json
+// 客户端发送订阅
+{
+ "type": "subscribe",
+ "data": {
+ "event_types": ["message_received", "friend_request"],
+ "device_ids": ["device_001", "device_002"],
+ "platforms": ["wechat"]
+ }
+}
+```
+
+```json
+// 服务端推送事件
+{
+ "type": "hook_event",
+ "data": {
+ "event_id": "evt_001",
+ "event_type": "message_received",
+ "device_id": "device_001",
+ "platform": "wechat",
+ "timestamp": "2026-02-10T15:30:00Z",
+ "payload": {
+ "from_id": "wxid_yyy",
+ "from_name": "张三",
+ "to_id": "wxid_xxx",
+ "content": "你好",
+ "msg_type": "text",
+ "is_group": false
+ }
+ }
+}
+```
+
+---
+
+## 五、脚本管理接口
+
+### 5.1 POST /scripts — 上传脚本
+
+**请求**(multipart/form-data):
+```
+POST /api/v3/scripts
+Content-Type: multipart/form-data
+
+file: wechat_hook_v1.js
+module_id: wechat_hook_v1
+version: 1.0.3
+description: 微信Hook脚本 v1.0.3
+```
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "script_id": "wechat_hook_v1_1.0.3",
+ "url": "/scripts/wechat_hook_v1_1.0.3.js",
+ "hash": "sha256:abc123...",
+ "size": 15360
+ }
+}
+```
+
+### 5.2 POST /scripts/{script_id}/deploy — 部署脚本到设备
+
+**请求**:
+```json
+{
+ "device_ids": ["device_001", "device_002"],
+ "auto_reload": true
+}
+```
+
+**响应**:
+```json
+{
+ "code": 200,
+ "data": {
+ "deployed": ["device_001", "device_002"],
+ "failed": [],
+ "reloaded": ["device_001", "device_002"]
+ }
+}
+```
+
+---
+
+## 六、错误码扩展
+
+| 错误码 | 说明 |
+|--------|------|
+| 5001 | 设备不支持Hook(supports_hook=false) |
+| 5002 | 模块未找到 |
+| 5003 | 模块已禁用 |
+| 5004 | Frida连接失败 |
+| 5005 | 脚本加载失败 |
+| 5006 | RPC调用超时 |
+| 5007 | 目标进程未运行 |
+| 5008 | Scope不匹配 |
+| 5009 | 脚本版本不兼容 |
+| 5010 | Hook降级到u2执行 |
+
+---
+
+## 七、与现有接口的兼容性
+
+**原则**:所有新增接口不影响现有接口,现有接口保持不变。
+
+| 现有接口 | 变化 |
+|---------|------|
+| POST /message/send | 新增可选 `channel`, `hook_config` 字段 |
+| GET /messages | 新增 `source` 字段区分Hook/u2 |
+| GET /devices/{id} | 响应新增 `supports_hook`, `hook_modules` 字段 |
+| WebSocket execute | 新增 `channel: "hook"` 支持 |
+| WebSocket response | 新增 `channel_used` 字段 |
+
+---
+
+## 八、PHP SDK 扩展
+
+```php
+class WorkPhoneClient {
+ // 现有方法不变...
+
+ // 新增:模块管理
+ public function getModules($enabled = null) {
+ $params = $enabled !== null ? ['enabled' => $enabled] : [];
+ return $this->get('/modules', $params);
+ }
+
+ public function enableModule($moduleId) {
+ return $this->post("/modules/{$moduleId}/enable");
+ }
+
+ public function disableModule($moduleId) {
+ return $this->post("/modules/{$moduleId}/disable");
+ }
+
+ public function getDeviceModules($deviceId) {
+ return $this->get("/devices/{$deviceId}/modules");
+ }
+
+ public function reloadDeviceModules($deviceId, $moduleIds = []) {
+ return $this->post("/devices/{$deviceId}/modules/reload", [
+ 'module_ids' => $moduleIds
+ ]);
+ }
+
+ // 新增:指定通道发消息
+ public function sendMessageViaHook($deviceId, $toId, $content) {
+ return $this->post('/message/send', [
+ 'device_id' => $deviceId,
+ 'platform' => 'wechat',
+ 'to_id' => $toId,
+ 'content' => $content,
+ 'channel' => 'hook'
+ ]);
+ }
+}
+```
diff --git a/开发文档/5、接口/README.md b/开发文档/5、接口/README.md
new file mode 100644
index 0000000000..925923b66c
--- /dev/null
+++ b/开发文档/5、接口/README.md
@@ -0,0 +1,17 @@
+# 5、接口
+
+**项目**:工作手机SDK v3.0(统一API + Hook模块管理API)
+
+**规则**:本目录除本 README 外最多 **3 个主文档**。
+
+**当前状态**:统一API已完成;Hook模块管理接口已设计。进度以 [开发进度总表](../10、项目管理/开发进度总表.md) 为准。
+
+---
+
+## 本目录主文档(≤3)
+
+| 文档 | 说明 |
+|------|------|
+| [接口规范.md](接口规范.md) | 统一API规范(消息/好友/群/标签/朋友圈/设备/脚本)+ PHP SDK |
+| [通用服务交互层.md](通用服务交互层.md) | Facade+ChannelRouter+三通道实现 |
+| [Hook模块管理接口.md](Hook模块管理接口.md) | **新增**:模块管理+脚本管理+Hook事件+设备模块API |
diff --git a/开发文档/5、接口/存客宝对接规范.md b/开发文档/5、接口/存客宝对接规范.md
new file mode 100644
index 0000000000..5a24ab01ab
--- /dev/null
+++ b/开发文档/5、接口/存客宝对接规范.md
@@ -0,0 +1,803 @@
+# 🔗 存客宝接口对接规范 (CunKeBao API Standard)
+
+> **用途**: 所有项目对接存客宝系统的统一规范
+> **版本**: v1.0
+> **适用场景**: 线索上报、用户画像、流量池管理
+
+---
+
+## 📋 一、快速对接指南
+
+### 1.1 对接前准备
+```yaml
+必须获取:
+ - apiKey: 存客宝分配的接口密钥(每个任务/场景唯一)
+
+接口地址:
+ - 生产环境: https://ckbapi.quwanzhi.com/v1/api/scenarios
+ - 测试环境: [按需配置]
+
+请求格式:
+ - Content-Type: application/json (推荐)
+ - 备选: application/x-www-form-urlencoded
+ - 编码: UTF-8
+```
+
+### 1.2 一分钟接入
+```javascript
+// 最简调用示例
+const response = await fetch('https://ckbapi.quwanzhi.com/v1/api/scenarios', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ apiKey: 'YOUR_API_KEY',
+ timestamp: Math.floor(Date.now() / 1000),
+ phone: '13800000000',
+ sign: generateSign(params) // 见签名算法
+ })
+});
+```
+
+---
+
+## 🔐 二、签名算法(核心)
+
+### 2.1 签名生成流程图
+
+```
+┌─────────────────────────────────────────────────────────────────────┐
+│ 签名生成流程 │
+├─────────────────────────────────────────────────────────────────────┤
+│ Step 1: 准备参数 │
+│ └── 收集所有请求参数(含 apiKey, timestamp, 业务参数) │
+│ │
+│ Step 2: 移除特殊字段 │
+│ └── 移除: sign, apiKey, portrait │
+│ │
+│ Step 3: 移除空值 │
+│ └── 移除: null, ''(空字符串) │
+│ │
+│ Step 4: 按键名排序 │
+│ └── ASCII 升序排序(a→z) │
+│ │
+│ Step 5: 拼接参数值 │
+│ └── 只取值,顺序拼接,无分隔符 │
+│ │
+│ Step 6: 第一次 MD5 │
+│ └── firstMd5 = MD5(拼接字符串) │
+│ │
+│ Step 7: 第二次 MD5 │
+│ └── sign = MD5(firstMd5 + apiKey) │
+└─────────────────────────────────────────────────────────────────────┘
+```
+
+### 2.2 签名规则详解
+
+```yaml
+# 签名规则
+不参与签名的字段:
+ - sign: 签名本身不参与
+ - apiKey: 不参与拼接,只在最后一步参与二次MD5
+ - portrait: 整个画像对象不参与(避免复杂度)
+
+空值处理:
+ - null 值字段: 不参与签名
+ - 空字符串 '': 不参与签名
+
+排序规则:
+ - 按参数名(键名)ASCII 升序
+ - 例如: name, phone, source, timestamp
+
+拼接规则:
+ - 只取值,不取键
+ - 顺序直接拼接,无分隔符
+ - 例如: "张三13800000000微信广告1710000000"
+
+MD5 规则:
+ - 使用小写 MD5
+ - 两次 MD5: 先对拼接字符串,再对结果+apiKey
+```
+
+### 2.3 签名代码实现
+
+#### TypeScript/JavaScript 实现
+```typescript
+/**
+ * 存客宝签名生成器
+ * @description 生成符合存客宝接口规范的签名
+ * @param params 请求参数(不含sign)
+ * @param apiKey 接口密钥
+ * @returns 签名字符串(小写MD5)
+ */
+function generateCKBSign(params: Record