Commit cabfef8f47a353d2333213cbee2adf105f914c37

Authored by yibo
1 parent 0361d10f

docs(claude-md): rewrite to reflect dual server entrypoints + LemonBoss/ArenaSK split

- Fix port to 3010 (was 3000); both server/index.js and server/agent-server.js
  default to 3010 per config.js
- Document the two server entrypoints: index.js (full ArenaSK, run via npm run dev)
  vs agent-server.js (Agent Chat only, run via start.sh)
- Correct counts: 15 routes (not 11), 26 services (not 16), 10 views (not 21)
- Remove false 'skills/' top-level dir reference; document actual data/skills/
- Add full test/example/log npm scripts; auto-dev CLI bin; packages list
- Add note on body-sanitizer middleware (the source of the JSON warning)
- Add brand history note (ArenaSK → LemonBoss)
- Keep existing Agentic Self-Correction Loop Prevention warning verbatim

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Showing 1 changed file with 81 additions and 49 deletions
CLAUDE.md
... ... @@ -4,95 +4,127 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
4 4  
5 5 ## 项目概述
6 6  
7   -ArenaSK — AI Skill 竞技平台 + 多智能体自主开发系统。使用 Node.js + Claude CLI 实现 Skill 的创建、评测、进化和管理。
  7 +LemonBoss / ArenaSK — 多智能体自主开发系统 + AI Skill 竞技平台。Node.js + Claude CLI 驱动,提供 Agent 协作(公司 / OKR / 招聘 / Pipeline / Task Timeline)与 Skill 市场 / Arena 评测两套能力。
  8 +
  9 +> 品牌历史:项目早期叫 ArenaSK(Skill 竞技场),现演进为 LemonBoss(多 Agent 公司体)。两个名称在代码中并存属正常现象。
8 10  
9 11 ## 快速启动
10 12  
11 13 ```bash
12   -# 安装
13   -npm install && cd server && npm install && cd ../web && npm install
  14 +# 一次性安装 + 拷贝 .env.example
  15 +npm run setup
14 16  
15   -# 开发模式 (前后端分离)
16   -npm run dev
17   -# 后端: localhost:3000 | 前端: localhost:5173
  17 +# 开发模式(前后端分离,跑完整 ArenaSK + LemonBoss)
  18 +npm run dev # 后端 server/index.js:3010 + 前端 vite:5173
18 19  
19   -# 生产启动
20   -bash start.sh
  20 +# 仅 Agent Chat 子系统(轻量,不依赖 Skill DB)
  21 +bash start.sh # server/agent-server.js:3010 + vite:5173
21 22 ```
22 23  
  24 +> 端口默认 **3010**(`server/config.js`),不是 3000。`start.sh` 会先 kill 占用 3010 / 5173 的进程。
  25 +
23 26 ## 常用命令
24 27  
25 28 ```bash
26   -npm run dev # 启动后端 + 前端 (开发)
27   -npm run server:dev # 仅后端 (localhost:3000)
28   -npm run web # 仅前端 (localhost:5173, proxy→3000)
29   -npm run web:build # 编译前端 → web/dist/
30   -npm test # 运行 vitest
31   -npm run skills:sync # 同步 Skill 到 CLI 配置目录
  29 +# 启动
  30 +npm run dev # 后端 + 前端
  31 +npm run server / server:dev # 仅后端 (start / --watch)
  32 +npm run web / web:build # 前端开发 / 构建到 web/dist/
  33 +
  34 +# 测试
  35 +npm test # vitest watch
  36 +npm run test:unit # vitest run (CI 用)
  37 +npm run test:multi-cli # multi-CLI 集成测试
  38 +npm run test:browser-logger
  39 +npm run test:design-validator
  40 +
  41 +# CLI / 工具
  42 +npm run example # 单次 auto-dev:实现斐波那契
  43 +npm run example-bmi # 单次 auto-dev:BMI 程序
  44 +npm run logs / analyze / parse # 查看 / 分析 / 解析 Agent 运行日志
  45 +npm run skills:sync # 同步 Skill 到 Claude CLI 配置目录
  46 +auto-dev "<task>" # bin 入口 → server/src/cli/auto-dev.js
32 47 ```
33 48  
34 49 ## 架构
35 50  
36 51 ### 技术栈
37   -- **后端**: Node.js + Express + WebSocket + SQLite (better-sqlite3)
38   -- **前端**: Vue 3 + Vite + vue-router + vue-i18n (6 语言)
39   -- **数据**: SQLite FTS5 全文搜索, 无 PostgreSQL
40   -- **AI**: Claude CLI (本地进程)
41   -- **包管理**: pnpm workspace (monorepo)
  52 +- **后端**:Node.js (≥18) + Express + WebSocket + SQLite(better-sqlite3, FTS5)
  53 +- **前端**:Vue 3 + Vite + vue-router + vue-i18n
  54 +- **AI**:Claude CLI(本地子进程,`--dangerously-skip-permissions` 自动批准)
  55 +- **包管理**:pnpm workspace(monorepo),`package.json` 含 `module-alias: { "@server": "server" }`
  56 +
  57 +### 两个 Server 入口(重要)
  58 +
  59 +| 入口 | 端口 | 启动方式 | 挂载路由 |
  60 +|------|------|----------|----------|
  61 +| `server/index.js` | 3010 | `npm run dev`, `npm run server` | 全量:`/api/claude-chat` `/api/config` `/api/evolution` `/api/innovator` `/api/master` `/api/open` `/api/arena` `/api/auth` `/api/users` `/api/whatsapp` `/api/agent` `/api/goals` `/api/company` `/api/tasks`,WS `/ws/claude`,`NODE_ENV=production` 时托管 `web/dist/` 静态文件 |
  62 +| `server/agent-server.js` | 3010 | `bash start.sh` | 仅 LemonBoss 子集:`/api/agent` `/api/company` `/api/goals` `/api/tasks` |
42 63  
43   -### 目录结构
  64 +两者**不要同时启动**(端口冲突)。需要 Skill / Arena / Master Agent 时跑 `index.js`;只调通 Agent Chat / Company / OKR 时跑 `agent-server.js`。
  65 +
  66 +### 目录速查
44 67  
45 68 | 目录 | 说明 |
46 69 |------|------|
47   -| `server/index.js` | Express 入口 (API + WS + Plugin) |
48   -| `server/routes/` | 11 个 API 路由模块 |
49   -| `server/services/` | 16 个业务服务 (skill-db, job-manager 等) |
50   -| `server/src/core/` | 核心引擎 (orchestrator, master-session, agent-manager) |
51   -| `server/src/plugins/` | 插件系统 (PluginManager, channel monitor) |
52   -| `web/src/views/` | 21 个 Vue 页面组件 |
53   -| `skills/` | 系统级 Skill 定义 (19 个) |
54   -| `scripts/` | 运维脚本 |
55   -| `packages/` | 子包 (acp-core, evolution 等) |
  70 +| `server/index.js` | 完整 ArenaSK 服务(API + WS + 插件 + 前端托管) |
  71 +| `server/agent-server.js` | 独立 Agent Chat 服务(LemonBoss 子集) |
  72 +| `server/routes/` | 15 个 API 路由 |
  73 +| `server/services/` | 26 个业务服务(skill-db, benchmark-runner, company-service, heartbeat, pipeline-service, retrain-pipeline, …) |
  74 +| `server/src/core/` | Agent 引擎核心(orchestrator, master-session, agent-manager, scheduler, session-pool, prompt-builder, runtime-resolver, …) |
  75 +| `server/src/engine/` | 进程层(command-queue, idle-timer, process-guard, run-registry, failover-error) |
  76 +| `server/src/plugins/` | 插件系统(plugin-manager, agent-bridge, config-bridge, bootstrap) |
  77 +| `server/src/tools/` | Master Agent 可调用的工具(call-agent, marketplace, orchestrate, train-skill, …) |
  78 +| `web/src/views/` | 10 个页面:AgentChat, AgentList, CompanyDashboard, JobsPanel, OkrDashboard, PipelineEditor, QuotaMonitor, SkillsMarket, TaskTimeline, TemplateAgents |
  79 +| `packages/` | `acp-core`, `agent-core`, `evolution`, `plugin-bootstrap` |
  80 +| `data/skills/` | Skill 仓库(代码外部目录,路径由 `config.skillsDataDir` 控制) |
  81 +| `scripts/` | 运维脚本(含 `sync-skills.js`) |
  82 +| `docs/` | 设计文档(`LEMONBOSS-SYSTEM-DESIGN.md`, `architecture-v5.md`, `open-api-manual.md`, `system-design/`, `user-guides/` …) |
56 83  
57 84 ### 关键 API 路由
58 85  
59 86 | 路径 | 说明 |
60 87 |------|------|
61   -| `/api/open/skills` | Open API: Skill 搜索/下载 |
62   -| `/api/open/arena/leaderboard` | Arena 排行榜 |
63   -| `/api/innovator/skills` | Skill 管理 (Admin) |
64   -| `/api/master/chat` | Master Agent 对话 (SSE) |
65   -| `/api/auth/*` | 认证 (JWT + GitHub OAuth) |
66   -| `/ws/claude` | Claude 对话 (WebSocket) |
67   -
68   -### 数据存储
69   -
70   -- `data/skills/` — 27,000+ Skill 目录
71   -- `data/skills.sqlite` — Skill 主数据库 (FTS5)
  88 +| `/api/open/skills` | Open API: Skill 搜索 / 下载(FTS5) |
  89 +| `/api/open/arena/leaderboard` | Arena ELO 排行榜 |
  90 +| `/api/innovator/skills` | Skill 管理(Admin) |
  91 +| `/api/master/chat` | Master Agent 对话(SSE) |
  92 +| `/api/agent/*` | LemonBoss Agent Chat |
  93 +| `/api/company/*` `/api/goals/*` `/api/tasks/*` | 公司 / OKR / Task 管理 |
  94 +| `/api/auth/*` | JWT + GitHub OAuth |
  95 +| `/ws/claude` | Claude 实时对话(仅 `index.js`) |
  96 +| `/api/health` `/api/plugins` | 健康检查 / 插件状态 |
  97 +
  98 +### 数据存储(SQLite,无需 PostgreSQL)
  99 +
  100 +- `data/skills/` — Skill 目录(数万条)
  101 +- `data/skills.sqlite` — Skill 主库 + FTS5
72 102 - `data/benchmark.sqlite` — Benchmark 运行数据
73 103 - `data/users.sqlite` — 用户数据
  104 +- `data/trained_skills/` — 用户训练产物(按 userId 隔离)
  105 +- `server/conversations/` — 会话持久化
74 106  
75 107 ### 配置文件
76 108  
77 109 | 文件 | 说明 |
78 110 |------|------|
79   -| `.env` | 环境变量 (密钥、目录、CORS) |
80   -| `server/config.js` | 服务器配置 |
  111 +| `.env` | 端口、CORS、`OPEN_API_KEYS`、各类目录覆盖;由 `npm run setup` 从 `.env.example` 生成 |
  112 +| `server/config.js` | 端口(默认 3010)、CORS、Skill / Conversations 路径 |
81 113 | `server/config/taxonomy.js` | 三维标签分类 |
82 114  
83 115 ## 注意事项
84 116  
85   -- 数据库使用 SQLite (better-sqlite3),无需 PostgreSQL
86   -- 生产环境 Express 同时提供 API 和 `web/dist/` 静态文件
87   -- `start.sh` 一键启动: 同步 Skill → 编译前端 → 启动 Server → 启动 Bot
88   -- Claude CLI 使用 `--dangerously-skip-permissions` 自动批准模式
89   -- Skill 目录在 `data/skills/`(代码仓库外部),通过 `config.skillsDataDir` 配置
  117 +- 生产环境只跑 `server/index.js`:它会同时托管 API + `web/dist/` 静态文件(`NODE_ENV=production`)。
  118 +- `start.sh` **只**做:kill 端口 → 起 `agent-server.js` → 起 `vite`。**不**会自动 `skills:sync` / `web:build` / 起 bot —— 那些要单独跑。
  119 +- `server/index.js` 与 `agent-server.js` 都内置了 **body-sanitizer 中间件**:在 `express.json()` 之前清掉 `\x00-\x1F` 控制字符,避免外部 Agent 通过 `curl` 传未转义换行/制表符导致的 `Bad control character` 报错。修改请求体解析链路前先看这两段。
  120 +- 模块别名 `@server` → `server/`(`module-alias` 注册),跨子包 require 时可用。
  121 +- Claude CLI 进程默认带 `--dangerously-skip-permissions`,写入受限路径前自己评估风险。
90 122  
91 123 > [!WARNING] (Agentic Self-Correction Loop Prevention)
92 124 > **Master Agent 必读**: 你目前存在一个已知的底层 Tool Calling JSON 解析缺陷。当你试图在 `Bash` tool 中使用带有多重双引号的复杂命令(例如 `curl -d '{"id":"lemonv", "name":"Lemonv"}'`)时,你的 JSON 转义会崩溃并导致你陷入"修复格式"的无限死循环,最终进程会被强制终止退出 (code=143)。
93   -> **解决方案**:
  125 +> **解决方案**:
94 126 > 任何需要提交复杂 Payload (如 JSON) 的操作,**绝对禁止**直接在 `Bash` 的 command 参数里写 inline JSON 字符串。
95 127 > 如果你要创建公司或执行类似 API 请求,**必须先通过写入简单的 shell 脚本将 JSON 写入一个 /tmp/ 目录下的 `.json` 文件(确保你的 JSON 是单行紧凑格式/严格转义换行符,不要包含真回车换行 `\n`,以免引起 SyntaxError: Bad control character 崩溃),然后再通过 `curl -d @/tmp/payload.json` 发送。**
96   ->
  128 +>
97 129 > 【创建公司/招聘的正确方式示例】
98 130 > 创建 /tmp/lemonv.json,然后执行 `Bash`: `curl -X POST http://localhost:3000/api/company/create -H "Content-Type: application/json" -d @/tmp/lemonv.json`
... ...