# AgentsMeeting — Dashboard 架构

> 版本: v1.0 | 部署: Linux 246 :5803 | 入口: http://192.168.1.246:5803

---

## Tab 结构

```
AgentsMeeting Dashboard
├── Agents        — Agent 状态总览（在线/离线/消息量）
├── Kanban        — 看板任务管理
├── Infrastructure — 平台服务 + EasyTier VPN + RDP + OpenCode Usage
└── 开发原则
    ├── G 规范     — 开发规范 / Spec 文档（dev-spec.md）
    ├── K 测试     — 测试报告（Tier1/Tier2）
    ├── F 健康     — 系统健康监控（三层管线）
    └── H 需求     — 产品需求文档（PRD.md）
```

---

## API 端点清单

### Agent 管理

| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/agents` | 所有 Agent 列表（状态/平台/JID/消息量） |
| GET | `/api/agents/<id>/logs?lines=50` | Agent 实时日志 |
| POST | `/api/agents/<id>/start` | 启动 Agent |
| POST | `/api/agents/<id>/stop` | 停止 Agent |
| POST | `/api/agents/<id>/restart` | 重启 Agent |

### 服务监控

| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/services` | 所有注册服务状态（health ok/端口可达） |
| GET | `/api/expected` | 期望状态矩阵（含 key/spec/check 方式） |
| GET | `/api/monitor` | 聚合监控数据（tasks + Tier1 + Tier2） |
| GET | `/api/autoheal` | 最近一次自动修复记录 |
| GET | `/api/health` | Dashboard 自身健康检查 |
| GET | `/api/module-spec/<module>` | 读取 specs/{module}.json |

### 基础设施

| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/platform` | 平台服务状态（xmpp_bot/article_processor 等） |
| GET | `/api/ejabberd` | ejabberd XMPP 服务器状态（在线用户列表） |
| GET | `/api/easytier` | EasyTier VPN 状态（各节点连通性） |
| POST | `/api/easytier/toggle` | EasyTier 开关 |
| GET | `/api/rdp` | RDP 远程桌面隧道状态 |
| POST | `/api/rdp/toggle` | RDP 隧道开关 |
| GET | `/api/usage` | OpenCode Go API 额度监控 |
| POST | `/api/usage/refresh` | 触发额度数据采集 |

### 知识管理

| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/kanban` | 看板任务列表 |
| GET | `/api/spec` | 开发规范文档（dev-spec.md 渲染） |
| GET | `/api/spec/history` | 规范文档 Git 历史 |
| GET | `/api/tests` | 测试报告（Tier1/Tier2） |
| GET | `/api/prd` | 产品需求文档（PRD.md 渲染） |
| GET | `/api/prd/history` | PRD 文档 Git 历史 |

---

## 前端架构

### 技术栈
- 纯 HTML/CSS/JS（无框架）
- 深色主题（GitHub Dark 风格）
- 5 秒自动轮询（Agents / Infra 页）

### Spec 系统（?§ 按钮）

每个有 spec 的模块在 UI 上显示两个按钮：
- `?` → 调用 `showModuleHelp(module, 'human')` → 读取 `human_help` → 人类可读的帮助文档
- `§` → 调用 `showModuleHelp(module, 'ai')` → 读取 `ai_spec` → AI 可用的接口/约束/依赖

**Spec 文件位置**: `gateway/scripts/specs/{module}.json`
**API 端点**: `GET /api/module-spec/{module}` → 直接返回 JSON 文件内容

### F Tab 渲染逻辑

三层结构：
1. **系统概览** — 总健康状态 + 关键异常数 + T1 通过率
2. **异常服务** — critical 服务中实际状态异常的列表
3. **全部服务** — 按层分组（通信层 → AI网关 → 辅助服务），每项含 ?§ 按钮

定时任务单独渲染（从 `/api/monitor.tasks`），状态映射：
- `cron_ok` → 绿色 "正常"
- `not_deployed` → 黄色 "未部署"
- 其他 → 红色 "异常"

自动修复记录从 `/api/autoheal` 读取最近一次修复动作。

---

## 数据流

```
crontab (每 5 分钟)
  ├── agents_health_check.py → last_health_check.json
  ├── auto_heal.py → last_auto_heal.json
  └── agents_daily_health.py → last_daily_health.json (每天)

Dashboard (:5803)
  ├── /api/monitor  ← 聚合读取以上 JSON 文件
  └── /api/services ← 实时 TCP/HTTP 检测

前端 (dashboard.html)
  ├── 5s 轮询 /api/services + /api/expected
  └── 按需请求 /api/monitor（F Tab 打开时）
```
