# Architecture Map — 跨仓库架构地图 > 生成日期: 2026-06-05 | 三个仓库的拓扑关系和协议边界 --- ## 整体拓扑 ``` ┌─────────────────────────────────────────────────────────────┐ │ 用户桌面 (localhost) │ │ │ │ ┌──────────────────────┐ ┌───────────────────────────┐ │ │ │ xworkmate-app │ │ xworkmate-bridge │ │ │ │ (Flutter/Dart) │ │ (Go, :8787) │ │ │ │ │ │ │ │ │ │ ┌──────────────────┐ │ │ ┌───────────────────────┐ │ │ │ │ │ AppController │ │ │ │ HTTP/WS Handler │ │ │ │ │ │ Desktop │ │ │ │ /acp (WS) │ │ │ │ │ └────────┬─────────┘ │ │ │ /acp/rpc (HTTP POST) │ │ │ │ │ │ │ │ └───────────┬───────────┘ │ │ │ │ ┌────────▼─────────┐ │ │ │ │ │ │ │ │ GatewayRuntime │ │◄───┼── ACP ──────┘ │ │ │ │ │ (WS + ACP Client)│ │ │ JSON-RPC 2.0 │ │ │ │ └────────┬─────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────────┐ │ │ │ │ ┌────────▼─────────┐ │ │ │ Router │ │ │ │ │ │ GoTaskService │ │ │ │ (provider selection) │ │ │ │ │ │ (任务分派) │ │ │ └───────┬───────┬───────┘ │ │ │ │ └──────────────────┘ │ │ │ │ │ │ │ └──────────────────────┘ │ ┌────▼──┐ ┌──▼──────┐ │ │ │ │ │ codex │ │ opencode│ │ │ │ │ │(CLI) │ │ (serve) │ │ │ │ │ └───────┘ └─────────┘ │ │ │ │ ┌───────┐ ┌─────────┐ │ │ │ │ │ gemini│ │ hermes │ │ │ │ │ │(CLI) │ │ (CLI) │ │ │ │ │ └───────┘ └─────────┘ │ │ │ └─────────────┬─────────────┘ │ │ │ │ │ ┌─────────────────┼────────────────┤ │ │ OpenClaw 网关 │ │ │ (ws://127.0.0.1:18789) │ │ │ / openclaw.svc.plus:443 │ │ └─────────────────┬───────────────┘ │ │ │ ┌─────────────────▼───────────────┐ │ │ openclaw-multi-session-plugins │ │ │ (TypeScript, npm 插件) │ │ │ │ │ │ 网关方法: │ │ │ xworkmate.tasks.get │ │ │ xworkmate.artifacts.* │ │ │ │ │ │ Agent 工具: │ │ │ openclaw_multi_session_artifacts│ │ └─────────────────────────────────┘ │ │ └─────────────────────────────────────────────────────────────┘ 云端服务 ┌──────────────────┐ ┌──────────────────────────────┐ │ accounts.svc.plus│ │ xworkmate-bridge.svc.plus │ │ (账户/MFA) │ │ (托管 Bridge, 多租户) │ └──────────────────┘ └──────────────────────────────┘ ┌──────────────────┐ │ ollama.svc.plus │ │ ollama.com │ │ (LLM 推理) │ └──────────────────┘ ``` --- ## 协议边界 ### 边界 1: App ↔ Bridge (ACP JSON-RPC) | 属性 | 值 | |------|-----| | 协议 | JSON-RPC 2.0 | | 传输 | WebSocket (`/acp`) + HTTP POST/SSE (`/acp/rpc`) | | 认证 | Bearer token (BRIDGE_AUTH_TOKEN) | | 方向 | App → Bridge (请求), Bridge → App (SSE 推送) | | 关键方法 | `session.start`, `session.message`, `acp.capabilities`, `xworkmate.gateway.*` | ### 边界 2: Bridge ↔ AI Providers (ACP JSON-RPC) | 属性 | 值 | |------|-----| | 协议 | JSON-RPC 2.0 | | 传输 | WebSocket (codex) / HTTP (opencode, gemini, hermes) | | 认证 | Bearer token | | 方向 | Bridge → Provider (请求/响应) | | 特殊 | gemini/hermes 通过子进程 stdio 中转(adapter 模式) | ### 边界 3: Bridge ↔ OpenClaw Gateway (Gateway RPC) | 属性 | 值 | |------|-----| | 协议 | 自定义 WebSocket RPC(Ed25519 加密握手) | | 传输 | WebSocket | | 默认端点 | `ws://127.0.0.1:18789` (本地) / `wss://openclaw.svc.plus:443` (云端) | | 关键方法 | `chat.send`, `xworkmate.artifacts.*`, `agent.wait` | | 方向 | 双向 (Bridge 发起请求 + 订阅推送事件) | ### 边界 4: OpenClaw Gateway ↔ Plugin (内部插件 API) | 属性 | 值 | |------|-----| | 协议 | OpenClaw Plugin SDK (内存调用) | | 方法 | `xworkmate.tasks.get`, `xworkmate.artifacts.prepare/export/collect-and-snapshot/list/read` | | 工具 | `openclaw_multi_session_artifacts` | --- ## 数据流方向 ``` 用户输入 │ ▼ xworkmate-app ──── session.start ────► xworkmate-bridge │ │ │ ├──► codex/opencode/gemini/hermes │ │ (AI agent 执行) │ │ │ └──► OpenClaw Gateway │ │ │ chat.send │ │ ◄─────────────┘ │ SSE stream (token by token) │ xworkmate.gateway.push ◄───────────────────────────────── │ │ 工件下载: │ GET /artifacts/openclaw/download?ref= ├──────────────────────────────────► xworkmate-bridge │ │ │ └──► xworkmate.artifacts.read │ │ │ ▼ │ openclaw-multi-session-plugins │ ▼ 本地文件: ~/.xworkmate/threads// ``` --- ## 关键配置项 ### xworkmate-app (config/settings.yaml) ```yaml bridge: server_url: "https://xworkmate-bridge.svc.plus" auth_token: "" accounts: base_url: "https://accounts.svc.plus" ``` ### xworkmate-bridge (环境变量 / config.yaml) ```yaml upstream: gateway_url: "ws://127.0.0.1:18789" # GATEWAY_RPC_URL codex_url: "" # CODEX_RPC_URL opencode_url: "http://127.0.0.1:38993" # OPENCODE_RPC_URL gemini_url: "http://127.0.0.1:8791" # GEMINI_RPC_URL hermes_url: "http://127.0.0.1:3920" # HERMES_RPC_URL distributed_nodes: - id: xworkmate-bridge role: primary endpoint: "http://172.29.10.1:8787" - id: cn-xworkmate-bridge role: edge endpoint: "http://172.29.10.2:8787" ``` ### openclaw-multi-session-plugins (openclaw.plugin.json) ```json { "gatewayMethods": [ "xworkmate.tasks.get", "xworkmate.artifacts.prepare", "xworkmate.artifacts.export", "xworkmate.artifacts.collect-and-snapshot", "xworkmate.artifacts.list", "xworkmate.artifacts.read" ], "config": { "workspaceDir": "~/.openclaw/workspace", "maxFiles": 1000, "artifactRefSigningSecret": "" } } ```