Skip to content

架构设计

系统架构概览

mermaid
graph TB
    subgraph "用户层"
        UI[Web Dashboard<br/>监控与控制]
        CLI[CLI Client<br/>命令行工具]
    end

    subgraph "中控机 Server"
        Orchestrator[任务编排器<br/>Orchestrator]
        AgentMgr[客户端管理<br/>AgentManager]
        TCPServer[TCP Server<br/>asio 异步]
        Storage[状态存储<br/>KV Store]
    end

    subgraph "受控机 1"
        Client1[TCP Client]
        Lua1[Lua Engine]
        Core1[C++ Core]
    end

    subgraph "受控机 2"
        Client2[TCP Client]
        Lua2[Lua Engine]
        Core2[C++ Core]
    end

    subgraph "受控机 N"
        ClientN[TCP Client]
        LuaN[Lua Engine]
        CoreN[C++ Core]
    end

    UI -->|WebSocket| TCPServer
    CLI -->|TCP| TCPServer
    TCPServer --> AgentMgr
    TCPServer --> Orchestrator
    Orchestrator --> Storage

    TCPServer -->|TCP 长连接| Client1
    TCPServer -->|TCP 长连接| Client2
    TCPServer -->|TCP 长连接| ClientN

    Client1 --> Lua1
    Client2 --> Lua2
    ClientN --> LuaN

    Lua1 --> Core1
    Lua2 --> Core2
    LuaN --> CoreN

    style Orchestrator fill:#f9f,stroke:#333,stroke-width:2px
    style TCPServer fill:#bbf,stroke:#333,stroke-width:2px

中控机-受控机架构

通信协议

mermaid
sequenceDiagram
    participant C as 受控机 Client
    participant S as 中控机 Server

    C->>S: TCP 连接
    S-->>C: 连接建立

    Note over C,S: 注册阶段
    C->>S: Register(agentId, hostname)
    S-->>C: OK(code=0)

    Note over C,S: 心跳保活
    loop 每 15 秒
        C->>S: Heartbeat(status, currentTask)
        S-->>C: Pong
    end

    Note over C,S: 任务执行
    S->>C: ExecuteTask(script, params)
    C->>C: Lua 执行
    C->>S: ReportProgress(stepId, progress)
    C->>S: TaskComplete(result)
    S-->>C: ACK

    Note over C,S: 断线处理
    C--xS: 连接断开
    S->>S: 标记 Agent 离线
    C->>C: 自动重连 (5秒后)
    C->>S: TCP 重连
    C->>S: Register(重新注册)

TCP 消息格式

mermaid
graph LR
    subgraph "请求消息"
        A[Request] --> B[type: 消息类型]
        A --> C[id: 请求ID]
        A --> D[timestamp: 时间戳]
        A --> E[agent_id: 发送者ID]
        A --> F[data: 业务数据JSON]
    end

    subgraph "响应消息"
        G[Response] --> H[request_id: 对应请求ID]
        G --> I[code: 错误码]
        G --> J[timestamp: 响应时间戳]
        G --> K[message: 可读描述]
        G --> L[data: 业务数据JSON]
    end

    style A fill:#e1f5ff
    style G fill:#fff4e1

信封协议

┌─────────────────────────────────────────────────────────┐
│  长度(16进制)\n                                          │
│  {"type":"heartbeat","id":"xxx","timestamp":...}\n      │
└─────────────────────────────────────────────────────────┘

错误码定义

Code名称说明
0OK成功
1UNKNOWN未知错误
2INVALID_REQUEST请求格式错误
3NOT_FOUND资源未找到
4TIMEOUT操作超时
5BUSY服务忙碌
6NOT_AUTHORIZED未授权
7ALREADY_EXISTS资源已存在
8FAILED操作失败
9DISCONNECTED连接断开
10RATE_LIMITED请求频率限制
1024+用户自定义业务错误码

多账号协作编排

工作流模型

mermaid
graph TB
    subgraph "工作流定义"
        WF[Workflow]
        S1[Step 1: 登录]
        S2[Step 2: 任务A]
        S3[Step 3: 任务B]
        S4[Step 4: 结算]

        WF --> S1
        S1 --> S2
        S1 --> S3
        S2 --> S4
        S3 --> S4
    end

    subgraph "Agent 分配"
        S1 --> A1[Agent1, Agent2, Agent3]
        S2 --> A2[Agent1, Agent2]
        S3 --> A3[Agent3]
    end

    subgraph "执行流程"
        B1[屏障同步: 所有Agent完成Step1] --> S2
        B2[屏障同步: 所有Agent完成Step2/3] --> S4
    end

    style WF fill:#f9f,stroke:#333,stroke-width:2px
    style B1 fill:#ff9,stroke:#333,stroke-width:2px
    style B2 fill:#ff9,stroke:#333,stroke-width:2px

屏障同步机制

mermaid
stateDiagram-v2
    [*] --> Pending: 提交工作流

    Pending --> Step1_Running: 启动 Step 1
    Step1_Running --> Step1_Complete: Agent1 完成
    Step1_Running --> Step1_Complete: Agent2 完成
    Step1_Running --> Step1_Complete: Agent3 完成

    Step1_Complete --> Barrier_Waiting: 等待所有 Agent
    Barrier_Waiting --> Step2_Running: 屏障通过

    Step2_Running --> Step2_Complete: Agent1 完成
    Step2_Running --> Step2_Complete: Agent2 完成

    Step2_Complete --> Barrier_Waiting2: 等待所有 Agent
    Barrier_Waiting2 --> Step3_Running: 屏障通过

    Step3_Running --> [*]: 工作流完成

    note right of Barrier_Waiting
        屏障同步: 等待该步骤
        所有分配的 Agent 完成
    end note

Agent 状态机

mermaid
stateDiagram-v2
    [*] --> Disconnected: 初始状态

    Disconnected --> Connecting: 发起连接
    Connecting --> Registering: TCP 连接成功
    Registering --> Idle: 注册成功

    Idle --> Busy: 接收任务
    Busy --> Idle: 任务完成
    Busy --> Error: 任务失败

    Idle --> Disconnected: 心跳超时
    Busy --> Disconnected: 心跳超时
    Error --> Idle: 恢复

    Registering --> Disconnected: 注册失败
    Connecting --> Disconnected: 连接失败

    Disconnected --> Connecting: 自动重连

    note right of Idle
        空闲状态,等待任务
    end note

    note right of Busy
        执行任务中,定期上报进度
    end note

核心模块

中控机模块

模块职责文件
TCPServerTCP 长连接服务server/src/server.cpp
AgentManager客户端会话管理server/src/agent_manager.cpp
Orchestrator任务编排引擎server/src/orchestrator.cpp
WorkflowStore工作流状态存储server/src/workflow_store.cpp

受控机模块

模块职责文件
TCPClientTCP 客户端server/src/client.cpp
Heartbeat心跳保活server/src/heartbeat.cpp
TaskExecutor任务执行器server/src/task_executor.cpp

核心能力模块

模块职责文件
Screen屏幕操作src/screen.cpp
Input输入模拟src/input.cpp
Window窗口管理src/window.cpp
Process进程管理src/process.cpp
Recorder宏录制src/recorder.cpp
Trigger触发器系统src/trigger.cpp
Storage存储系统src/storage.cpp
Verification验证码能力src/verification.cpp
QRCode二维码登录src/qrcode.cpp

C++ / Lua 分层

┌─────────────────────────────────────────────────────────────────┐
│                    分层决策                                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   C++ 实现                    Lua 实现                         │
│   ────────                    ─────────                         │
│                                                                  │
│   ├── 性能敏感操作                ├── 业务逻辑                  │
│   ├── 系统调用                    ├── 状态机                    │
│   ├── 内存操作                    ├── 触发器组合                │
│   ├── 图像处理                    ├── 用户自定义行为            │
│   └── TCP/网络通信                └── 脚本编排                  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

目录结构

wingman/
├── .github/workflows/       # CI/CD 配置
├── docs/                    # VitePress 文档
├── server/                  # 网络服务层
│   ├── include/wingman/server/
│   │   ├── server.hpp       # TCP Server
│   │   ├── client.hpp       # TCP Client
│   │   ├── protocol.hpp     # 通信协议
│   │   └── orchestrator.hpp # 任务编排
│   └── src/
├── src/                     # C++ 核心引擎
├── include/wingman/         # 公共头文件
├── bindings/                # Lua 绑定
├── scripts/                 # Lua 脚本示例
└── tests/                   # 测试