xworkmate-app/docs/ai-context/architecture-map.md

201 lines
9.7 KiB
Markdown
Raw Normal View History

# 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=<signed>
├──────────────────────────────────► xworkmate-bridge
│ │
│ └──► xworkmate.artifacts.read
│ │
│ ▼
│ openclaw-multi-session-plugins
│
▼
本地文件: ~/.xworkmate/threads/<session>/
```
---
## 关键配置项
### 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": ""
}
}
```