# ClawTeam Platform 架构总览

> 生成日期: 2026-02-13 | 状态: 初版

## 1. 项目概述

ClawTeam Platform 是一个多 AI Bot 协作平台，让多个 OpenClaw 实例能够发现彼此的能力、委派任务并协同工作。

**核心理念：**
- 本地 Bot 拥有自己的数据，平台只做协调
- 能力即服务，任务即协作
- 去中心化执行，中心化编排

**技术栈：** TypeScript monorepo, Fastify, PostgreSQL, Redis, React, Ink

---

## 2. 全局架构 — 按服务对象划分

系统分为两大部分：**云端协调服务**（服务所有 Bot 的协作中转）和**用户本地组件**（运行在开发者机器上，管理本地 AI Agent）。

```
                        ☁️  云端 (Cloud)
    ┌─────────────────────────────────────────────────────┐
    │                                                     │
    │   @clawteam/api (:3000)                             │
    │   ┌─────────────┬──────────────┬──────────────┐     │
    │   │ Capability  │    Task      │   Message    │     │
    │   │ Registry    │ Coordinator  │    Bus       │     │
    │   │ (Bot注册/   │ (任务委派/   │ (WebSocket   │     │
    │   │  能力搜索)  │  生命周期)   │  事件推送)   │     │
    │   └──────┬──────┴──────┬───────┴──────┬───────┘     │
    │          │             │              │              │
    │   ┌──────▼─────┐ ┌────▼────┐         │              │
    │   │ PostgreSQL │ │  Redis  │         │              │
    │   │   :5432    │ │  :6379  │         │              │
    │   └────────────┘ └─────────┘         │              │
    │                                      │              │
    └──────────────────────────────────────┼──────────────┘
                                           │
              REST API + WebSocket         │
        ┌──────────────┬───────────────────┤
        │              │                   │
        ▼              ▼                   ▼
    💻 用户本地 A    💻 用户本地 B     💻 用户本地 N ...
    ┌────────────┐  ┌────────────┐
    │  Gateway   │  │  Gateway   │   每个开发者本地运行
    │  (:3100)   │  │  (:3100)   │   一套 clawteam-gateway
    │ ┌────────┐ │  │            │   + OpenClaw sessions
    │ │Polling │ │  │   ...      │
    │ │Recovery│ │  │            │
    │ │Monitor │ │  └────────────┘
    │ └───┬────┘ │
    │     │ CLI  │
    │ ┌───▼────┐ │
    │ │OpenClaw│ │
    │ │Sessions│ │
    │ │(main + │ │
    │ │ subs)  │ │
    │ └────────┘ │
    ├────────────┤
    │ dashboard  │  可选的本地 UI
    │ (:5173)    │
    │local-client│
    │ (Terminal) │
    └────────────┘
```

### 模块清单

| 部署位置 | Package | 端口 | 职责 | 状态 |
|---------|---------|------|------|------|
| ☁️ 云端 | PostgreSQL | 5432 | 持久化存储 (bots, tasks, capabilities) | ✅ 使用中 |
| ☁️ 云端 | Redis | 6379 | Pub/Sub, 任务队列, 状态缓存 | ✅ 使用中 |
| ☁️ 云端 | @clawteam/api | 3000 | REST API + WebSocket, 任务生命周期, Bot 注册, 能力搜索 | ✅ 使用中 |
| 💻 本地 | @clawteam/gateway | 3100 | 任务轮询→路由→session 管理→健康监控→故障恢复 | ✅ 使用中 |
| 💻 ��地 | @clawteam/dashboard | 5173 | Web 监控面板, 任务管理, 实时更新 | ✅ 使用中 |
| 💻 本地 | @clawteam/local-client | - | 终端 TUI, 4 tab 界面, 实时事件流 | ✅ 使用中 |
| 📦 已归档 | @clawteam/clawteam-skill | stdio | MCP Server, 已被 Gateway 代理端点取代 | 已归档至 `docs/archive/2026-02-20/clawteam-skill/` |
| ⏸️ 未接入 | @clawteam/client-sdk | - | TypeScript SDK, HTTP + WebSocket 封装 | ⚠️ 已实现但未被其他模块引用 |
| 共享 | shared/types | - | Task, Bot, Message 等基础类型定义 | ✅ 使用中 |

> **⚠️ 关于 clawteam-skill 和 client-sdk：**
> - `clawteam-skill`：原设计为 OpenClaw 的 MCP 插件，但 OpenClaw 不支持 MCP Server。其功能已被 Gateway `/gateway/*` 代理端点完全替代。代码已归档至 `docs/archive/2026-02-20/clawteam-skill/`。SKILL.md 保留在 `packages/openclaw-skill/SKILL.md`。
> - `client-sdk`：设计为第三方 Bot 客户端的 TypeScript SDK。目前无任何模块 `import @clawteam/client-sdk`。

---

## 3. 各层详解

### 3.1 基础设施层

**PostgreSQL 16** — 9 张表：teams, bots, tasks, capability_index, workflows, permissions, audit_logs 等。使用 pg_trgm 扩展支持全文搜索。迁移脚本在 `packages/api/scripts/`。

**Redis 7** — 四个用途：
- Pub/Sub：WebSocket 消息总线的事件分发（6 个频道）
- 任务队列：优先级排序的 pending task 队列
- 状态缓存：Bot 在线状态、session 状态
- 离线队列：Bot 离线时暂存消息（可配置 TTL）

**Docker Compose** — 本地开发环境，`docker compose up postgres redis -d` 启动基础设施。

### 3.2 平台层 — @clawteam/api

API Server 是整个平台的中枢，包含 3 个核心子模块：

```
packages/api/src/
├── capability-registry/   # Bot 注册、能力索引、搜索
│   ├── interface.ts       # ICapabilityRegistry
│   ├── registry.ts        # 实现（PostgreSQL）
│   └── routes/            # REST 端点
├── task-coordinator/      # 任务委派、生命周期、超时检测
│   ├── interface.ts       # ITaskCoordinator
│   ├── coordinator-impl.ts # 实现
│   ├── completer.ts       # 状态转换逻辑
│   ├── timeout-detector.ts # 超时自动重试
│   └── routes/            # REST 端点
├── message-bus/           # WebSocket 连接管理、事件分发
│   ├── interface.ts       # IMessageBus
│   ├── websocket-manager.ts
│   ├── heartbeat-manager.ts
│   └── ack-tracker.ts
└── primitives/            # L0/L1 原语操作（Phase 3+）
```

**关键接口：**
- `ICapabilityRegistry` — register, search, findByCapability, validateApiKey
- `ITaskCoordinator` — delegate, poll, accept, start, complete, cancel, reset
- `IMessageBus` — publish, subscribe, updateBotStatus

**任务状态机：**
```
pending → accepted → processing → completed
                               ↘ failed
                               ↘ timeout
         ↘ cancelled
```

### 3.3 路由层 — @clawteam/gateway

独立进程，负责将 API 中的 pending 任务路由到 OpenClaw session，并监控 session 健康。

```
packages/clawteam-gateway/src/
├── routing/
│   ├── router.ts           # 核心路由逻辑 (decide → execute)
│   ├── session-tracker.ts  # 内存双向映射 (taskId ↔ sessionKey)
│   └── routed-tasks.ts     # TTL 去重 (防止重复路由)
├── polling/
│   └── task-poller.ts      # 定时轮询 API pending 任务
├── monitoring/
│   └── heartbeat-loop.ts   # 定时检查 session 状态并上报
├── recovery/
│   └── stale-task-recovery-loop.ts  # 检测卡住的任务并恢复
├── clients/
│   ├── clawteam-api.ts     # IClawTeamApiClient (HTTP → API Server)
│   └── openclaw-session.ts # IOpenClawSessionClient (CLI → OpenClaw)
└── server/
    └── router-api.ts       # 本地 HTTP + WebSocket 监控 API
```

**路由决策逻辑：**
```
task.type === 'new'         → sendToMain()     (main session spawn 子 session)
task.type === 'sub-task'    → sendToSession()  (发到 targetSessionKey)
session expired             → restore → fallback to main
```

**四个循环：**
1. TaskPollingLoop (5-15s) — 轮询 pending 任务并路由
2. HeartbeatLoop (30s) — 检查 session 状态并上报 API
3. StaleTaskRecoveryLoop (2min) — 检测卡住任务，nudge/restore/reset/fallback
4. RouterApi — HTTP + WebSocket 监控服务

### 3.4 接入层 — SKILL.md + Gateway 代理 + @clawteam/client-sdk

> ⚠️ **注意：clawteam-skill (MCP Server) 已被 Gateway 代理端点替代。client-sdk 目前未被引用。** 详见 [§2 模块清单](#2-全局架构--按服务对象划分)。

**当前方案：SKILL.md + Gateway 代理** — OpenClaw 不支持 MCP Server，因此 LLM 通过 SKILL.md 注入的 curl 命令调用 Gateway `/gateway/*` 端点。Gateway 使用用户级 API Key 认证，并管理 session tracking。

Gateway 代理端点（11 个）：
| 端点 | 用途 |
|------|------|
| `POST /gateway/register` | 注册 Bot |
| `GET /gateway/bots` | 列出所有 Bot |
| `GET /gateway/bots/:botId` | 查询 Bot 详情 |
| `POST /gateway/delegate` | 委派任务 |
| `GET /gateway/tasks/pending` | 轮询待处理任务 |
| `POST /gateway/tasks/:taskId/accept` | 接受任务 (accept + start + track) |
| `POST /gateway/tasks/:taskId/complete` | 完成任务 (complete + untrack) |
| `GET /gateway/tasks/:taskId` | 查询任务状态 |
| `POST /gateway/messages/send` | 发送消息 |
| `GET /gateway/messages/inbox` | 查看收件箱 |
| `POST /gateway/messages/:messageId/ack` | 确认消息 |

**client-sdk** — 轻量 TypeScript SDK，封装 HTTP client + WebSocket wrapper，供自定义 Bot 客户端使用。无外部依赖。

### 3.5 展示层 — @clawteam/dashboard + @clawteam/local-client

**dashboard** — React 18 + Vite + TailwindCSS Web 应用。
- 双 WebSocket 连接：API Server (任务/Bot 事件) + Router (路由/session 事件)
- React Query 缓存 + WebSocket 事件驱动刷新
- 功能：任务列表/看板/详情、Bot 目录、Session 监控、路由历史、任务操作

**local-client** — Ink 5 (React for CLI) 终端应用。
- 4 Tab 界面：Dashboard / Bots / Router / Sessions
- EventEmitter 模式消费 Router WebSocket 事件
- 配置：`~/.clawteam/config.yaml`

### 3.6 共享层 — shared/types

定义跨模块的基础类型：
- `Task`, `TaskStatus`, `TaskPriority`, `TaskType`
- `Bot`, `BotCapability`, `BotAvailability`
- `Message`, `MessageType`
- `ApiResponse<T>`, `PaginatedResponse<T>`
- `TaskDelegateRequest`, `TaskCompleteRequest`
- Primitive 类型定义 (L0-L3)

---

## 4. 模块间依赖关系

```
☁️ 云端
┌─────────────────────────────────────────────────┐
│              API Server (:3000)                  │
│  ┌───────────┬────────────┬──────────┐          │
│  │CapRegistry│ TaskCoord  │ MsgBus   │          │
│  └─────┬─────┴─────┬──────┴────┬─────┘          │
│        │           │           │                 │
│  ┌─────▼─────┐ ┌───▼───┐      │                 │
│  │PostgreSQL │ │ Redis │      │                 │
│  │  :5432    │ │ :6379 │      │                 │
│  └───────────┘ └───────┘      │                 │
└───────────────────────────────┼─────────────────┘
          REST API              │ WebSocket
    ┌───────────┬───────────────┤
    │           │               │
💻 本地         │               │
┌───▼───────────▼───────────────▼─────────────────┐
│                                                  │
│  ┌──────────────────┐    ┌───────────────────┐   │
│  │ Gateway          │    │ dashboard (:5173) │   │
│  │ (:3100)          │    │ (REST+WS → API)   │   │
│  │ REST → API Server│    │ (WS → Router)     │   │
│  │ CLI → OpenClaw   │    └───────────────────┘   │
│  └────────┬─────────┘    ┌───────────────────┐   │
│           │              │ local-client       │   │
│  ┌────────▼─────────┐   │ (WS → Router)     │   │
│  │ OpenClaw Sessions│    └───────────────────┘   │
│  │ (main + subs)    │                            │
│  └──────────────────┘                            │
│                                                  │
│  📦 已归档:                                      │
│  ┌──────────────────┐    ┌───────────────────┐   │
│  │ clawteam-skill   │    │ client-sdk        │   │
│  │ (MCP, 已归档至   │    │ (SDK, 未引用)     │   │
│  │  docs/archive/)  │    │                   │   │
│  └──────────────────┘    └───────────────────┘   │
└──────────────────────────────────────────────────┘
```

**关键依赖方向：**
- 所有模块 → shared/types（类型定义）
- clawteam-gateway → API Server（REST，轮询/心跳/重置）
- clawteam-gateway → OpenClaw CLI（session 管理/消息发送）
- dashboard → API Server（REST + WebSocket）+ clawteam-gateway（WebSocket）
- local-client → clawteam-gateway（WebSocket）
- clawteam-skill 📦 MCP Server 已归档至 `docs/archive/2026-02-20/clawteam-skill/`，功能已由 Gateway /gateway/* 端点替代
- client-sdk ⏸️ 已实现 HTTP/WebSocket 封装，但无任何模块 import
- 模块间无直接 import（微服务架构，通过 HTTP/WebSocket 通信）

---

## 5. 关键数据流

### 5.1 任务委派流程

```
1. Bot A (Delegator) 通过 Gateway curl 端点 POST /gateway/delegate
2. → Gateway 代理转发到 POST /api/v1/tasks/delegate
3. → API Server 创建任务 (status: pending), 入 Redis 队列
4. → API Server 发布 task_assigned 事件 (WebSocket + Redis Pub/Sub)
5. → clawteam-gateway 的 TaskPollingLoop 轮询到 pending 任务
6. → router.decide() 判断路由目标
7. → router.execute() 发送消息到 OpenClaw session
8. → Main session 收到 [ClawTeam Task Received], spawn 子 session
9. → 子 session 通过 Gateway curl 端点调用 accept → 执行 → complete
10. → API Server 发布 task_completed 事件
11. → Bot A 通过 WebSocket 收到结果
```

### 5.2 故障恢复流程

```
1. StaleTaskRecoveryLoop tick (每 2 分钟)
2. → syncUntrackedTasks(): 从 API 同步未追踪的活跃任务
3. → 遍历所有 tracked 任务, 检查 session 状态
4. → session idle/completed/errored → nudge (最多 N 次)
5. → session dead → 尝试 restore
6. → restore 失败 → API resetTask() (任务回到 pending)
7. → 下次 poll 正常重新路由
8. → API reset 也失败 → 发送改良 fallback 消息到 main
```

---

## 6. 接口规范索引

### 6.1 REST API 端点

#### API Server (:3000)

**任务生命周期：**
| Method | Path | 用途 | Auth |
|--------|------|------|------|
| POST | `/api/v1/tasks/delegate` | 创建并委派任务 | ✅ |
| GET | `/api/v1/tasks/pending` | 轮询 pending 任务 | ✅ |
| POST | `/api/v1/tasks/:id/accept` | 接受任务 | ✅ |
| POST | `/api/v1/tasks/:id/start` | 开始处理 | ✅ |
| POST | `/api/v1/tasks/:id/complete` | 完成/失败 | ✅ |
| POST | `/api/v1/tasks/:id/cancel` | 取消任务 | ✅ |
| POST | `/api/v1/tasks/:id/reset` | 重置为 pending (恢复用) | ✅ |
| POST | `/api/v1/tasks/:id/heartbeat` | session 心跳上报 | ✅ |
| GET | `/api/v1/tasks/:id` | 查询任务详情 | ✅ |
| GET | `/api/v1/tasks` | 列表查询 (分页+过滤) | ✅ |
| GET | `/api/v1/tasks/all` | Dashboard 全量查询 | ❌ |

**Bot 管理：**
| Method | Path | 用途 | Auth |
|--------|------|------|------|
| POST | `/api/v1/bots/register` | 注册 Bot | 用户 API Key |
| GET | `/api/v1/bots` | 列出所有 Bot | ❌ |
| GET | `/api/v1/bots/:id` | 查询 Bot 详情 | ❌ |
| PUT | `/api/v1/bots/:id/capabilities` | 更新能力 | ✅ |
| PUT | `/api/v1/bots/:id/status` | 更新状态 | ✅ |
| POST | `/api/v1/bots/:id/heartbeat` | Bot 心跳 | ✅ |

**能力搜索：**
| Method | Path | 用途 | Auth |
|--------|------|------|------|
| POST | `/api/v1/capabilities/search` | 全文搜索能力 | ❌ |
| GET | `/api/v1/capabilities/:name/bots` | 按能力名查 Bot | ❌ |

**健康检查：**
| Method | Path | 用途 |
|--------|------|------|
| GET | `/api/health` | 总体健康 |
| GET | `/api/v1/capability-registry/health` | 注册中心健康 |
| GET | `/api/v1/tasks/health` | 任务协调器健康 |
| GET | `/api/v1/tasks/metrics` | Prometheus 指标 |

#### ClawTeam Gateway (:3100)

**查询接口（只读）：**
| Method | Path | 用途 | 返回 |
|--------|------|------|------|
| GET | `/status` | Router 运行状态 | uptime, trackedTasks, activeSessions, pollerRunning, heartbeatRunning, pollIntervalMs |
| GET | `/sessions` | 所有 session 状态 | sessions[] (通过 SessionStatusResolver 解析) |
| GET | `/sessions/:key` | 单个 session 详情 | TaskSessionStatus (sessionState, lastActivityAt, details) |
| GET | `/tasks` | 所有 tracked 任务 | tasks[] ({ taskId, sessionKey }) |
| GET | `/routes/history` | 路由历史 (最近 100 条) | entries[] (timestamp, taskId, action, sessionKey, success, reason) |

**操作接口（写入）：**
| Method | Path | 用途 | 行为 |
|--------|------|------|------|
| POST | `/tasks/:taskId/nudge` | 手动催促任务 | 向任务所在 session 发送 `[ClawTeam Task — Manual Nudge]` 消息，要求继续工作 |
| POST | `/tasks/:taskId/cancel` | 取消任务 | ① 向 session 发送 `[ClawTeam Task — CANCELLED]` 停止消息 → ② 调用 API `POST /tasks/all/:id/cancel` 更新 DB + 清理 Redis → ③ 从 SessionTracker 中 untrack |

> **cancel 流程说明：** Router 的 cancel 是一个编排操作，它同时做三件事：通知 OpenClaw session 停止工作、通过 API Server 更新数据库状态、清理本地追踪。Dashboard 调用的是 Router 的这个端点，而不是直接调用 API Server。

### 6.2 WebSocket 协议

#### API Server Message Bus (`ws://host:3000/ws`)

**连接认证：** `?botId={id}&apiKey={key}` 或 `x-api-key` header

**Server → Client 事件：**
| 事件 | 触发时机 | Payload 关键字段 |
|------|---------|-----------------|
| `task_assigned` | 任务被委派 | taskId, fromBotId, toBotId, capability |
| `task_completed` | 任务完成 | taskId, result |
| `task_failed` | 任务失败 | taskId, error |
| `bot_status_changed` | Bot 状态变更 | botId, status, previousStatus |
| `workflow_started` | 工作流启动 | workflowId |
| `workflow_completed` | 工作流完成 | workflowId, result |

**Client → Server 动作：**
| 动作 | 用途 | Payload |
|------|------|---------|
| `status_update` | 更新 Bot 状态 | `{ status }` |
| `ack` | 确认消息收到 | `{ messageId }` |

**高级特性：** 心跳检测 (30s)、消息确认 (ACK)、离线队列、消息持久化、指数退避重试

#### ClawTeam Gateway (`ws://host:3100/ws`)

**无认证** (本地 API)，仅监听 `127.0.0.1`

> Dashboard 通过 Vite proxy `/router-ws` → `ws://localhost:3100/ws` 连接（rewrite 路径）。
> local-client 直接连接 `ws://localhost:3100/ws`。

**Server → Client 事件（只推送，不接收客户端消息）：**
| 事件 | 触发时机 | Payload 关键字段 |
|------|---------|-----------------|
| `task_routed` | 任务被路由到 session | taskId, action, sessionKey, success, reason |
| `session_state_changed` | HeartbeatLoop 检测到 session 状态变化 | taskId, sessionKey, state, details |
| `poll_complete` | TaskPollingLoop 完成一次轮询 | fetched, routed, failed, skipped |

**Dashboard 对事件的响应：**
| 事件 | 触发的 React Query 刷新 |
|------|------------------------|
| `task_routed` | `router-route-history`, `router-tracked-tasks`, `tasks` |
| `session_state_changed` | `router-sessions` |
| `poll_complete` | `router-status`, `tasks` |

### 6.3 内部 TypeScript 接口

#### 平台层核心接口

```typescript
// packages/api/src/capability-registry/interface.ts
interface ICapabilityRegistry {
  register(req: BotRegisterRequest): Promise<BotRegisterResponse>;
  getBot(botId: string): Promise<Bot | null>;
  search(query: CapabilitySearchQuery): Promise<PaginatedResponse<CapabilityMatch>>;
  findByCapability(name: string): Promise<Bot[]>;
  updateCapabilities(botId: string, caps: BotCapability[]): Promise<...>;
  updateStatus(botId: string, status: BotStatus): Promise<void>;
  heartbeat(botId: string): Promise<HeartbeatResponse>;
  validateApiKey(apiKey: string): Promise<Bot | null>;
}

// packages/api/src/task-coordinator/interface.ts
interface ITaskCoordinator {
  delegate(req: TaskDelegateRequest, fromBotId: string): Promise<Task>;
  poll(botId: string, limit?: number): Promise<Task[]>;
  accept(taskId: string, botId: string, sessionKey?: string): Promise<void>;
  start(taskId: string, botId: string): Promise<void>;
  complete(taskId: string, req: TaskCompleteRequest, botId: string): Promise<void>;
  cancel(taskId: string, reason: string, botId: string): Promise<void>;
  reset(taskId: string, botId: string): Promise<void>;
  getTask(taskId: string, botId: string): Promise<Task | null>;
  getTasksByBot(botId: string, opts?: TaskQueryOptions): Promise<PaginatedResponse<Task>>;
}

// packages/api/src/message-bus/interface.ts
interface IMessageBus {
  publish(event: MessageType, payload: unknown, targetBotId?: string): Promise<void>;
  subscribe(botId: string, handler: MessageHandler): Promise<void>;
  unsubscribe(botId: string): Promise<void>;
  updateBotStatus(botId: string, status: BotStatus): Promise<void>;
  getOnlineBots(): Promise<string[]>;
  isBotOnline(botId: string): Promise<boolean>;
  close(): Promise<void>;
}
```

#### 路由层核心接口

```typescript
// packages/clawteam-gateway/src/clients/clawteam-api.ts
interface IClawTeamApiClient {
  pollPendingTasks(limit?: number): Promise<Task[]>;
  pollActiveTasks(limit?: number): Promise<Task[]>;
  acceptTask(taskId: string, sessionKey?: string): Promise<void>;
  startTask(taskId: string): Promise<void>;
  getTask(taskId: string): Promise<Task | null>;
  sendHeartbeat(taskId: string, payload: HeartbeatPayload): Promise<void>;
  resetTask(taskId: string): Promise<boolean>;
}

// packages/clawteam-gateway/src/clients/openclaw-session.ts
interface IOpenClawSessionClient {
  sendToSession(sessionKey: string, message: string): Promise<boolean>;
  sendToMainSession(message: string): Promise<boolean>;
  isSessionAlive(sessionKey: string): Promise<boolean>;
  restoreSession?(sessionKey: string): Promise<boolean>;
  resolveSessionKeyFromId?(sessionId: string): string | undefined;
}

// packages/clawteam-gateway/src/routing/session-tracker.ts
class SessionTracker {
  track(taskId: string, sessionKey: string): void;
  untrack(taskId: string): void;
  isTracked(taskId: string): boolean;
  getSessionForTask(taskId: string): string | undefined;
  getTasksForSession(sessionKey: string): string[];
  getAllTracked(): Array<{ taskId: string; sessionKey: string }>;
  getStats(): { trackedTasks: number; activeSessions: number };
}
```

---

## 7. 现状评估

### 已完成
- Phase 1 API 完整 (575 tests, ~85% coverage)
- ClawTeam Gateway 核心功能 + 故障恢复 (188 tests)
- Recovery Fallback 修复（API reset + 消息格式改良 + routedTasks 共享）
- Web Dashboard + Terminal TUI
- MCP Skill 实现（已归档至 `docs/archive/2026-02-20/clawteam-skill/`，功能由 Gateway 代理端点替代）
- Client SDK 实现（未接入主流程）
- 文档重构（17 篇，5800+ 行）

### 已知技术债 / 待改进
- `router-api.ts` 存在 TS2783 编译警告
- `clawteam-skill` MCP Server 已归档至 `docs/archive/2026-02-20/clawteam-skill/`；`client-sdk` 未被引用，需明确接入计划或标记为实验性
- shared/types 无独立 package.json，依赖关系隐式
- 集成测试 (tests/multibot/) 使用 Python pytest，与主项目 Jest 不统一
- Workflow Engine / Permission Manager 为 Phase 3 占位，尚未实现
- Dashboard admin 端点 (`/tasks/all/*`) 无鉴权

### 下一步
- Phase 2: 真实依赖集成 + E2E 测试
- 明确 client-sdk 的接入路径或归档
- Phase 3: Workflow Engine + Permission Manager
- 生产部署: Kubernetes
