Skip to main content
Glama
README.md
<h1 align="center">MoeReview</h1>

<p align="center">
  <strong>给 AI 工程师的实战概念巩固站 · 借力 MCP Agent,不自己造 Agent</strong><br />
  你在做实战项目,遇到不懂的概念——让 Agent 读你的项目代码、讲清楚原理、出题验证你懂了、沉淀成可回看的稳定页面。<br />
  不是"学完再复习",是"实战中遇到的问题,搞懂后沉淀"。
</p>

<p align="center">
  <a href="https://github.com/FanRec/MoeReview">
    <img alt="Agent 思考,浏览器记忆,学习持续发生" src="https://readme-typing-svg.demolab.com?font=JetBrains+Mono&amp;weight=600&amp;size=18&amp;duration=2800&amp;pause=900&amp;color=FF75BF&amp;center=true&amp;vCenter=true&amp;repeat=true&amp;width=620&amp;height=34&amp;lines=Agent+thinks.+Browser+remembers.;Learn+deeply.+Review+clearly.;Pages.+Quizzes.+Guidance.+One+workspace." />
  </a>
</p>

<p align="center">
  <a href="./README.en.md">English</a>
  ·
  简体中文
</p>

<p align="center">
  <a href="#产品预览"><img alt="Moe powered" src="https://img.shields.io/badge/Moe_powered-ff8fcf?style=for-the-badge" /></a>
  <a href="#配置-mcp-adapter"><img alt="MCP ready" src="https://img.shields.io/badge/MCP_ready-43b3ae?style=for-the-badge" /></a>
  <a href="#agent-自动配置指南"><img alt="Agent friendly" src="https://img.shields.io/badge/Agent_friendly-8b7cf6?style=for-the-badge" /></a>
</p>

<p align="center">
  <img alt="Node.js 20.19+" src="https://img.shields.io/badge/node-%3E%3D20.19-339933?logo=node.js&logoColor=white" />
  <img alt="React" src="https://img.shields.io/badge/react-19-61DAFB?logo=react&logoColor=111" />
  <img alt="Vite" src="https://img.shields.io/badge/vite-8-646CFF?logo=vite&logoColor=white" />
  <img alt="MCP" src="https://img.shields.io/badge/MCP-agent%20tools-8A2BE2" />
  <img alt="Local first" src="https://img.shields.io/badge/storage-local--first-blue" />
  <img alt="License: GPL v3" src="https://img.shields.io/badge/license-GPLv3-blue" />
  <a href="https://github.com/FanRec/MoeReview/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/FanRec/MoeReview/actions/workflows/ci.yml/badge.svg?branch=main" /></a>
</p>

<p align="center">
  <img alt="GitHub Stars" src="https://img.shields.io/github/stars/FanRec/MoeReview?style=flat-square&amp;label=Stars&amp;color=ff8fcf" />
  <img alt="Latest Release" src="https://img.shields.io/github/v/release/FanRec/MoeReview?style=flat-square&amp;label=Release&amp;color=43b3ae" />
</p>

<p align="center">
  <sub>访问计数 · 第三方 Moe Counter 请求次数,非 GitHub 官方 Traffic</sub><br />
  <img alt="MoeReview 萌系访问计数" src="https://count.getloli.com/@FanRec_MoeReview_20260712?name=FanRec_MoeReview_20260712&amp;theme=moebooru&amp;padding=6&amp;offset=0&amp;align=center&amp;scale=1&amp;pixelated=1&amp;darkmode=auto" />
</p>

> 这不是又一个"聊天窗口套壳"。MoeReview 更像一台学习机甲的驾驶舱:Agent 负责推理和教学(可以借力 MCP filesystem 读你的真实项目代码),Hub 负责稳定连接,Web UI 负责沉淀、做题、回看和交互。问题驱动,不是体系驱动——Agent 不该一次性铺开大体系,而该基于你实战中遇到的具体问题做精准讲解 + 验证。

<a id="产品预览"></a>
## ✦ 产品预览

<p align="center">
  <a href="./docs/assets/moereview-learning-workspace.png"><img alt="MoeReview 结构化学习工作台" src="./docs/assets/moereview-learning-workspace.png" width="49%" /></a>
  <a href="./docs/assets/moereview-quick-qa.png"><img alt="MoeReview 测验与即时解惑" src="./docs/assets/moereview-quick-qa.png" width="49%" /></a>
</p>

<p align="center"><sub>结构化学习分页 · 测验与即时解惑 · 围绕当前上下文持续协作</sub></p>

<details>
<summary><strong>◇ 展开目录</strong></summary>

- [产品预览](#产品预览)
- [和已有工具的差别](#和已有工具的差别)
- [它解决什么问题](#它解决什么问题)
- [功能亮点](#功能亮点)
- [架构](#架构)
- [目录结构](#目录结构)
- [环境要求](#环境要求)
- [Agent 自动配置指南](#agent-自动配置指南)
- [快速启动](#快速启动)
- [安装与构建](#安装与构建)
- [启动 Hub](#启动-hub)
- [配置 MCP Adapter](#配置-mcp-adapter)
- [可选 Agent Skill](#可选-agent-skill)
- [核心交互模型](#核心交互模型)
- [常用命令](#常用命令)
- [本地数据](#本地数据)
- [常见问题](#常见问题)
- [开源前状态](#开源前状态)

</details>

<a id="和已有工具的差别"></a>
## ✦ 和已有工具的差别

| | NotebookLM | Anki | Obsidian + AI | **MoeReview** |
|---|---|---|---|---|
| 借力你已有的 Agent | ×(自有模型) | ×(无 Agent) | 部分 | ✓(MCP 复用 Claude/Cursor) |
| Agent 主动出题/批改 | × | × | 部分 | ✓ |
| Agent 读你的真实项目代码 | × | × | × | ✓(借力 MCP filesystem) |
| 学习内容沉淀成稳定 UI | 部分(笔记) | ×(卡片) | ✓(但需手写) | ✓(Agent 自动生成) |
| Agent 接得上你上次学到哪 | × | × | 部分 | ✓(通过 get_pages 读取完整历史 page) |
| 本地优先 | × | ✓ | ✓ | ✓ |
| 上手门槛 | 零(上传即用) | 中(卡片设计) | 高(配置插件) | 中(需 MCP 客户端) |

**MoeReview 的位置**:你已经用 MCP 客户端,想要 Agent 基于你的真实项目代码做讲解 + 出题,沉淀成稳定 UI,而不是散在聊天里。

<a id="示例场景"></a>
## ✦ 示例场景

[基于若依 Mapper 的实战概念巩固](./docs/scenarios/ruoyi-mapper-concept.md) — 你在写若依仓储模块,让 Agent 读你真实项目里的 `SysDeptMapper.java`,基于真实代码讲解 + 出题验证 + 沉淀可回看 page。第二天 Agent 通过 `get_pages` 接得上你上次学到哪。

<a id="它解决什么问题"></a>
## ✦ 它解决什么问题

如果你正在写若依仓储模块、读 React Fiber 源码、上手新框架——
你大概率会用 Claude / Cursor 问问题、要讲解、做题验证。

但所有内容都在聊天记录里:

- 关掉对话窗口,讲解没了
- 错题没法回看
- 进度没法追踪
- Agent 接不上你上次学到哪

MoeReview 让 Agent 把讲解、题目、批改、错题沉淀到一个稳定的浏览器工作台。
Agent 负责推理 + 读你的代码,浏览器负责记忆。重启 Agent 不丢学习状态。

> 不要让 Agent 的生命周期绑架学习界面的稳定性。

<a id="功能亮点"></a>
## ✦ 功能亮点

- 常驻 `MoeReview Hub`,Web 页面不依赖 Agent 启动(重启 Claude 不丢页面)
- 借力 Agent 已有能力:让 Agent 通过 MCP filesystem 读你的真实项目代码,讲解基于真实代码不是泛泛而谈
- 会话级历史:Agent 通过 `get_pages` 读取以往讲解完整内容,真正接得上你上次学到哪
- 临时 `MCP Agent Adapter`,只转发工具调用(零状态、可重启)
- 代码沙箱:Python(Pyodide WASM)+ C/Java 子进程(适合算法题验证)
- 测验闭环:出题 → 答题 → 批改 → 结果页 → 错题沉淀
- 右侧 `Guidance Panel` 展示临时状态、短建议和下一步,不用切回 Agent 聊天
- 无 Agent 时也能进入欢迎页和回看历史
- 默认本地存储,不需要账号或云服务

<a id="架构"></a>
## ⌁ 架构

```mermaid
flowchart LR
    Agent["✦ Agent"] <-->|stdio| Adapter["MCP Adapter"]
    Adapter <-->|HTTP| Hub["MoeReview Hub"]
    Hub <-->|HTTP / WebSocket| Web["Browser UI"]

    classDef pink fill:#fff0f8,stroke:#ff8fcf,color:#3b2633,stroke-width:2px;
    classDef mint fill:#ecfbf8,stroke:#43b3ae,color:#183b39,stroke-width:2px;
    classDef violet fill:#f3f0ff,stroke:#8b7cf6,color:#302a55,stroke-width:2px;
    classDef neutral fill:#f7f8fb,stroke:#9aa3b2,color:#252a33,stroke-width:2px;
    class Agent pink;
    class Adapter violet;
    class Hub mint;
    class Web neutral;
```

MoeReview 后端拆成两个角色:

- `MoeReview Hub`:常驻 HTTP/WebSocket 服务,负责网页、会话、历史、连接状态和事件路由。
- `MCP Agent Adapter`:临时 MCP stdio 服务,负责注册 Agent,并把工具调用转发到 Hub。

这样做的直接收益是:重启 Agent、切换 Agent、结束 Agent 对话,都不会导致网站不可访问。

<a id="目录结构"></a>
## ⌁ 目录结构

```text
.
+-- mcp-server/              # MoeReview Hub 和 MCP Agent Adapter
|   +-- src/hub.ts            # Hub 入口
|   +-- src/index.ts          # MCP Adapter 入口
|   +-- src/ws/server.ts      # HTTP / WebSocket / API / 路由
|   +-- src/tools/            # MCP 工具实现
+-- web/                     # React + Vite 前端
+-- skills/
|   +-- moereview-agent/      # 可选 Codex skill:约束 Agent 正确使用 MoeReview
+-- docs/                    # 设计文档
+-- scripts/                 # 本地快速启动与检查脚本
+-- start.cmd                # Windows 双击启动入口
+-- README.md                # 中文文档
+-- README.en.md             # 英文文档
```

<a id="环境要求"></a>
## ◇ 环境要求

- Node.js 20.19+,或 22.12+
- npm
- 一个支持 MCP 的 Agent / 客户端

当前项目优先服务本地单用户场景。账号系统、云同步、权限模型都还没引入。

<a id="agent-自动配置指南"></a>
<details>
<summary><strong>✦ Agent 自动配置指南</strong> · 环境探测、MCP 与 Skill 接入</summary>

> 本节专供 Agent 执行。MCP 的 `stdio` 接入方式可以跨客户端复用;Skill 并非统一行业标准,必须先探测当前 Agent 的能力,再选择安装、引用或规则降级方案。

### 执行约束

- 先定位仓库根目录,并把配置中的路径转换为绝对路径。
- 先读取官方客户端文档或已有配置,确认 MCP 与 Skill 的格式和位置;无法确认时停止修改并报告,不要猜测。
- 修改配置时只合并 MoeReview 条目,禁止覆盖其他 MCP Server、Skill、Rules 或用户设置。
- 不提交依赖目录、构建产物、密钥或用户级 Agent 配置。
- 不要启动第二个 Hub;如果 `http://127.0.0.1:3456/health` 已可访问,直接复用。

### 1. 探测环境与能力

开始前记录以下信息:

```text
OS 与版本、Shell、CPU 架构
node --version、npm --version
Agent/客户端名称与版本
是否支持 MCP stdio
是否原生支持 SKILL.md 或其他项目规则机制
```

完整项目要求 Node.js `^20.19.0` 或 `>=22.12.0`。如果版本不满足:

- 优先使用机器上已有的 Node 版本管理器升级到当前 LTS。
- 没有版本管理器时,使用该操作系统的官方/可信包管理器或 Node.js 官方安装方式。
- 涉及管理员权限、GUI 安装或改变全局运行时且当前 Agent 无权执行时,停止自动安装,向用户给出对应系统的最短操作步骤。

不要改用 pnpm、Yarn 或 Bun;本仓库提交了 npm lockfile。Windows 使用 PowerShell,macOS/Linux 使用当前 POSIX Shell 即可完成依赖与构建。

### 2. 安装并构建

所有平台均在仓库根目录执行:

```sh
node --version
npm --version
npm run setup
npm run build
```

任一命令失败时先报告实际错误,不要继续写入 MCP 配置。

### 3. 配置 MCP Adapter

以下是跨客户端不变的 MCP 契约:

```text
name: moereview
transport: stdio
command: node
args: [<repo-absolute-path>/mcp-server/dist/index.js]
```

Codex 用户将以下内容合并到 `$CODEX_HOME/config.toml`;未设置 `CODEX_HOME` 时使用 `~/.codex/config.toml`:

```toml
[mcp_servers.moereview]
command = "node"
args = ["<repo-absolute-path>/mcp-server/dist/index.js"]
```

将占位符替换为真实绝对路径。Windows TOML 路径建议使用 `/`,例如 `E:/WebProject/LearnBuddy/MoeReview/mcp-server/dist/index.js`。其他客户端必须根据其官方格式表达同一份契约;不要直接套用 Codex 的配置路径或字段名。

### 4. 按能力接入 Skill

Skill 源文件是 `<repo>/skills/moereview-agent/SKILL.md`。按当前 Agent 能力选择且只选择一种方案:

1. **原生支持 `SKILL.md`**:按该客户端官方方式安装整个 `skills/moereview-agent` 目录。Codex 安装到 `$CODEX_HOME/skills/moereview-agent`,默认位置为 `~/.codex/skills/moereview-agent`。
2. **支持 Rules/Instructions,但不支持 Skill**:读取 `SKILL.md` 及其直接引用的必要文件,将规则接入该客户端官方的项目级指令机制,并保留“仅在使用 MoeReview 时生效”的范围。
3. **两者都不支持**:不要伪造 Skill 安装。每次 MoeReview 会话开始前读取 `SKILL.md` 作为操作协议,并向用户说明该规则不会被客户端自动持久加载。

更新已有安装时只同步 `moereview-agent`,不得删除其他 Skill 或规则。原生安装后确认目标目录中的 `SKILL.md` 存在且可被客户端发现。

### 5. 启动 Hub

Hub 是独立常驻进程,必须在独立持久终端或受控后台进程中启动。

Windows:

```powershell
npm run start:no-open
```

macOS/Linux:

```sh
npm --prefix mcp-server run hub
```

`npm run build` 已生成 Hub 所需的 Web 与 Server 构建产物。若使用非默认端口(例如 `4567`),给 Hub 设置 `MOEREVIEW_HUB_PORT=4567`,并在 MCP Adapter 配置中设置 `MOEREVIEW_HUB_URL=http://127.0.0.1:4567`;环境变量字段名按客户端官方格式填写。

### 6. 验收与报告

重新加载 Agent 的 MCP/规则配置后依次验证:

1. `http://127.0.0.1:3456/health` 可访问。
2. MCP Server `moereview` 已连接且能列出工具。
3. 调用 `prepare_turn` 能返回绑定状态。
4. 原生 Skill 客户端能发现并调用 `moereview-agent`;Rules 方案确认规则已加载;临时读取方案明确记录其非持久性。

完成后向用户简要报告:OS、Node/npm 版本、构建结果、Hub 状态、MCP 配置位置、采用的 Skill 方案及四项验收结果。不得把“读取过 Skill”误报为“已原生安装 Skill”。

</details>

<a id="快速启动"></a>
## ◇ 快速启动

Windows 用户可以直接双击:

```text
start.cmd
```

或者在仓库根目录运行:

```powershell
npm run start
```

这会自动:

1. 检查 Node.js 和 npm。
2. 安装缺失的 `web` / `mcp-server` 依赖。
3. 构建前端和后端。
4. 检查 `3456` 端口。
5. 打开浏览器。
6. 启动 MoeReview Hub。

如果只想检查环境:

```powershell
npm run check
```

如果不想自动打开浏览器:

```powershell
npm run start:no-open
```

快速启动脚本不会自动 kill 端口占用者。如果 `3456` 被占用,请手动停止旧进程,或者使用:

```powershell
.\scripts\start.ps1 -Port 4567
```

<a id="安装与构建"></a>
## ◇ 安装与构建

安装依赖:

```powershell
cd mcp-server
npm install

cd ../web
npm install
```

构建前端:

```powershell
cd web
npm run build
```

构建 Hub / MCP Adapter:

```powershell
cd ../mcp-server
npm run build
```

如果你从仓库根目录开始,可以按这个顺序执行:

```powershell
cd web
npm run build
cd ../mcp-server
npm run build
```

<a id="启动-hub"></a>
## ◇ 启动 Hub

Hub 默认监听 `3456` 端口,并托管已经构建好的 `web/dist`。

```powershell
cd mcp-server
npm run hub
```

然后打开:

```text
http://localhost:3456
```

没有 Agent 连接时,MoeReview 仍然可以正常打开,进入欢迎页或回看历史会话。

如果要换端口:

```powershell
$env:MOEREVIEW_HUB_PORT="4567"
npm run hub
```

<a id="配置-mcp-adapter"></a>
## ⌁ 配置 MCP Adapter

构建 `mcp-server` 后,在你的 MCP 客户端里配置:

```text
node <repo>/mcp-server/dist/index.js
```

示例:

```json
{
  "mcpServers": {
    "moereview": {
      "command": "node",
      "args": ["<absolute-path-to-repo>/mcp-server/dist/index.js"]
    }
  }
}
```

把 `<absolute-path-to-repo>` 替换成你本地 clone 的仓库路径。

推荐启动顺序:

1. 构建 `web` 和 `mcp-server`。
2. 运行 `npm run hub` 启动 Hub。
3. 启动支持 MCP 的 Agent / 客户端。
4. 打开 `http://localhost:3456`。

<a id="可选-agent-skill"></a>
<details>
<summary><strong>✦ Agent Skill 使用契约</strong> · 工作区路由、性能与修正规范</summary>

仓库内提供了一个可选 Codex skill:

```text
skills/moereview-agent/
```

它不规定教学方法,不干涉讲解风格。它只约束 Agent 如何正确使用 MoeReview:

- 显式绑定会话。
- 每轮开始读取 pending messages。
- 真实地区分 `idle` / `waiting` / `working` / `disconnected`。
- 把讲解、总结、出题、批改和复习计划优先渲染到 MoeReview Web UI,而不是只写在 Agent 聊天里。
- 只有有长期回看价值的内容才创建 page。
- 临时状态和下一步建议放到侧边栏 guidance。

如果你的 Agent 支持显式 skill 调用,可以使用:

```text
Use $moereview-agent
```

或者直接指向:

```text
skills/moereview-agent/SKILL.md
```

如果你的 Agent 不会自动选择 skill,MoeReview 不能从 Hub 侧强制模型调用 MCP 工具。推荐在具体复习目录放一个 `AGENTS.md`,把 MoeReview 设成默认 Web-first 工作区,例如:

```markdown
# MoeReview Web-First Study Workspace

如果 MoeReview MCP 工具可用,复习、讲解、出题、批改、总结前必须使用 `$moereview-agent`。
实质学习内容写入 MoeReview pages / quiz / result / guidance,Agent 聊天只保留短状态和错误说明。
需要用户继续操作时使用 `enter_standby`,让用户留在 Web UI。
```

这类工作区默认指令能减少每次手动输入 `Use $moereview-agent` 的次数。

### 性能优化工具

为了减少 MCP 往返,Agent 应优先使用两个聚合工具:

- `prepare_turn`:一次返回绑定状态、pending Web 消息和轻量 session snapshot,替代常见的 `get_binding_status` + `get_pending_messages` + 小范围 `get_session_snapshot`。
- `update_workspace`:一次批量更新普通 pages、guidance、progress、toast、dashboard,替代多次 `show_card/create_pages` + `set_guidance_panel` + `set_progress`。

推荐普通学习轮次:

```text
prepare_turn
update_workspace
```

测验和批改仍然使用专用工具:

```text
show_quiz
enter_standby
show_result
```

### 结果页与修正工具

`show_result` 是 MoeReview 的专用结果页工具,不是普通文本页。Agent 必须传结构化逐题结果,Hub 会根据逐题字段自动计算正确率。

每题至少需要提供以下任一种判分信息:

- `correct: true | false`
- `verdict: "correct" | "partial" | "wrong" | "skipped"`
- `score` + `maxScore`

自然语言批改不要放进 `results` 数组;应放到 `summary.feedback` 或 `summary.grading_notes`。否则结果页无法可靠统计,也容易误导用户。

示例:

```json
{
  "results": [
    {
      "id": "q1",
      "verdict": "partial",
      "score": 0.5,
      "maxScore": 1,
      "user_answer": "用户答案",
      "correct_answer": "参考答案",
      "explanation": "方向正确,但关键步骤不完整。"
    }
  ],
  "summary": {
    "time_spent": 120,
    "feedback": "整体反馈",
    "grading_notes": "可选的自然语言批改说明"
  }
}
```

如果已经发布的结果页或学习页有实质错误:

- 用 `correct_result` 修正结果页。必须提供具体 `reason`,旧页会标记为 `superseded`,新页作为修订版追加。
- 用 `supersede_page` 作废严重错误、重复或误导性的页面。必须提供具体 `reason`。

这两个工具用于少数纠错场景,不用于普通措辞润色或无理由改写历史。

</details>

<a id="核心交互模型"></a>
## ✦ 核心交互模型

### Pages:长期学习记录

适合放进 page 的内容:

- 知识点讲解
- 结构化总结
- 测验题
- 测验结果
- 错题复盘
- 学习计划
- 重要修订

不适合放进 page 的内容:

- “好的”
- “我正在处理”
- 临时建议
- 工具状态
- 一句话提醒

### Guidance Panel:右侧临时引导

适合放到侧栏的内容:

- 当前状态
- 下一步建议
- 操作提示
- 等待用户输入的说明
- 轻量警告

目标是让用户不打开 Agent 聊天窗口,也知道当前该做什么。

### Agent 等待与唤醒

MCP 不能反向唤醒一个已经结束的 Agent turn。MoeReview 因此明确区分状态:

| 状态 | 含义 |
|---|---|
| `offline` | 当前会话没有 Agent |
| `idle` | Adapter 在线,但 Agent 没有主动等待 |
| `waiting` | Agent 正在 `wait_for_response` / `ask_choice` / `enter_standby` |
| `working` | Agent 正在处理或调用工具 |
| `disconnected` | Agent 心跳过期或连接断开 |

只有 `waiting` 可以被 Web 输入立即唤醒。  
`idle` 和 `working` 状态下,Web 消息会进入队列,等待 Agent 下一轮调用 `get_pending_messages`。

<a id="常用命令"></a>
## ◇ 常用命令

前端:

```powershell
cd web
npm run dev
npm run build
npm run lint
npm test
```

<a id="主题系统"></a>
## ✦ 主题系统

顶部栏的主题设置提供两种模式:

- **快速**:切换六套内置主题、明暗模式、强调色、三类字号、密度、内容宽度和动效。
- **实验室**:编辑完整 Token、组件变体和布局,也可使用 JSONC 源码与作用域 CSS。

实验室会先复制内置主题,不会直接修改预设。自定义主题支持撤销、重做、20 条快照、导入导出和恢复。主题损坏时可访问 `/?safe-theme=1`,或在启动时按住 `Shift` 进入安全模式。

新增主题及公开 Token/选择器说明见 [主题开发指南](./docs/theme/theme-authoring.md)。

后端:

```powershell
cd mcp-server
npm run build
npm run hub
npm run dev:hub
npm run start
```

注意:`npm run start` 启动的是 MCP Adapter,不是 Hub。

<a id="本地数据"></a>
## ⌁ 本地数据

MoeReview 默认把运行时数据放在用户目录:

```text
~/.examforge/
```

会话数据包括:

- `meta.json`
- `pages.json`
- `favorites.json`
- `wrong_answers.json`
- `qa_memory.json`
- `activity_log.json`
- `message_queue.json`
- `guidance.json`

这些数据不应该提交到 Git。

<a id="常见问题"></a>
## ※ 常见问题

### 3456 端口被占用

Hub 不会自动 kill 端口占用者。请手动停止旧进程,或者设置 `MOEREVIEW_HUB_PORT`。

### Hub 打开了,但不是完整 Web UI

通常是还没构建前端:

```powershell
cd web
npm run build
```

然后重启 Hub。

### MCP 工具提示 Hub 未启动

先启动 Hub,再启动 MCP Adapter:

```powershell
cd mcp-server
npm run hub
```

### 前端发消息后 Agent 没反应

看会话状态:

- `waiting`:应该能立即唤醒。
- `idle`:消息已入队,Agent 下一轮读取。
- `working`:消息已入队,等待 Agent 忙完。
- `disconnected`:需要重启 MCP Adapter。

<a id="开源前状态"></a>
## ◇ 开源前状态

MoeReview 仍在快速迭代中,API 和目录结构可能继续变化。当前最重要的设计原则是:

> Web 工作台必须独立于 Agent 生命周期稳定运行。

后续适合补:

- 一键启动脚本
- 连接诊断面板
- pending message 数量提示
- standby 取消 / 延长机制
- 自动生成 MCP 工具文档

<a id="license"></a>
## License

本项目使用 [GNU General Public License v3.0](./LICENSE)。

Maintenance

ActivitySlowing
ResponsivenessNo issues