Commit 49e795a7efcdf59fa7448031fc867a2cceb7205f

Authored by yibo
1 parent f1ece951

docs: add Agent Hiring Pipeline, template system, Company-scoped OKR to design doc 24

docs/system-design/24-company-layer-architecture.md
@@ -89,36 +89,33 @@ data/agents/ @@ -89,36 +89,33 @@ data/agents/
89 89
90 ``` 90 ```
91 data/ 91 data/
92 -├── agents/ ← 全局 Agent(Master + 跨公司工具类 Agent) 92 +├── agents/ ← 全局 Agent(Master + 跨公司基础设施 Agent)
93 │ ├── master/ 93 │ ├── master/
94 │ ├── agent-creator/ 94 │ ├── agent-creator/
95 │ └── innovator/ 95 │ └── innovator/
96 │ 96 │
97 -├── companies/ ← 📦 新增:公司实例目录  
98 -│ ├── wechat-media-co/ ← 公司实例 1  
99 -│ │ ├── company.json ← 公司元数据  
100 -│ │ ├── sop.md ← 公司 SOP(运营标准流程)  
101 -│ │ ├── agents/ ← 该公司的专属 Agent 池  
102 -│ │ │ ├── ceo/  
103 -│ │ │ ├── content-writer/  
104 -│ │ │ ├── editor/  
105 -│ │ │ ├── publisher/  
106 -│ │ │ └── data-analyst/  
107 -│ │ ├── goals/ ← 该公司的 OKR 树  
108 -│ │ │ └── G-001/  
109 -│ │ ├── pipelines/ ← 该公司的 SOP 流水线定义  
110 -│ │ │ └── daily-content.json  
111 -│ │ └── workspace/ ← 该公司的共享工作区  
112 -│ │ ├── content/  
113 -│ │ └── assets/  
114 -│ │  
115 -│ └── manga-studio/ ← 公司实例 2  
116 -│ ├── company.json  
117 -│ ├── agents/  
118 -│ ├── goals/  
119 -│ └── ... 97 +├── templates/ ← 📦 Agent 模板库(招聘时优先查找)
  98 +│ ├── ceo/ ← CEO 通用模板
  99 +│ ├── qa-judge/ ← 质量仲裁模板
  100 +│ ├── content-writer/ ← 内容写手模板
  101 +│ ├── editor/ ← 编辑模板
  102 +│ ├── video-editor/ ← 剪辑师模板
  103 +│ ├── hot-topic-hunter/ ← 热点搜索模板
  104 +│ └── data-analyst/ ← 数据分析师模板
120 │ 105 │
121 -└── goals/ ← 全局 OKR (跨公司的顶层战略目标) 106 +├── {company-id}/ ← 公司实例(顶层目录,扁平化)
  107 +│ ├── company.json ← 公司元数据 + 状态 + 配置
  108 +│ ├── sop.md ← 公司 SOP(运营标准流程)
  109 +│ ├── agents/ ← 该公司的专属 Agent 池
  110 +│ │ ├── ceo/
  111 +│ │ ├── content-writer/
  112 +│ │ ├── editor/
  113 +│ │ └── data-analyst/
  114 +│ ├── goals/ ← 该公司的 OKR 树(所有目标都在公司层级下)
  115 +│ ├── pipelines/ ← 该公司的 SOP 流水线定义
  116 +│ └── workspace/ ← 该公司的共享工作区(成品、品牌资产)
  117 +│
  118 +└── skills/ ← 全局 Skill(可被任何公司的 Agent 调用)
122 ``` 119 ```
123 120
124 ### 3.2 company.json 结构 121 ### 3.2 company.json 结构
@@ -132,20 +129,14 @@ data/ @@ -132,20 +129,14 @@ data/
132 "createdAt": "2026-03-25T17:00:00Z", 129 "createdAt": "2026-03-25T17:00:00Z",
133 "createdBy": "master", 130 "createdBy": "master",
134 131
135 - "ceo": "ceo-wechat", 132 + "ceo": "ceo",
136 133
137 "sop": { 134 "sop": {
138 "pipeline": "daily-content", 135 "pipeline": "daily-content",
139 "description": "选题 → 写稿 → 审核 → 排版 → 发布 → 数据回收" 136 "description": "选题 → 写稿 → 审核 → 排版 → 发布 → 数据回收"
140 }, 137 },
141 138
142 - "agents": [  
143 - "ceo-wechat",  
144 - "content-writer-01",  
145 - "editor-01",  
146 - "publisher-01",  
147 - "data-analyst-01"  
148 - ], 139 + "agents": ["ceo", "content-writer", "editor", "publisher", "data-analyst"],
149 140
150 "heartbeat": { 141 "heartbeat": {
151 "enabled": true, 142 "enabled": true,
@@ -165,37 +156,213 @@ data/ @@ -165,37 +156,213 @@ data/
165 156
166 --- 157 ---
167 158
168 -## 四、生命周期流程 159 +## 四、Agent 招聘系统 (Hiring Pipeline)
  160 +
  161 +> **核心理念**: 公司需要某个角色时,不是凭空创造,而是走一套完整的**招聘流程**——
  162 +> 先从人才市场(模板库)找现成的,找不到就培养一个新人,培训合格后才能上岗。
169 163
170 -### 4.1 公司创建流程 164 +### 4.1 招聘流程总览
  165 +
  166 +```mermaid
  167 +flowchart TD
  168 + A["CEO 需要一个角色<br>(如: 热点搜索员)"] --> B{"在 templates/ 中<br>查找匹配模板?"}
  169 +
  170 + B -->|"✅ 找到模板"| C["复制模板到<br>公司 agents/ 目录"]
  171 + C --> D["注入公司上下文<br>(改写 agent.md, soul.md, user.md)"]
  172 + D --> E["直接上岗 ✅"]
  173 +
  174 + B -->|"❌ 模板库无此角色"| F["调用 agent-creator<br>从零创建 Agent 骨架"]
  175 + F --> G["调用 innovator<br>进入 FDE 训练流水线"]
  176 + G --> H{"Benchmark<br>评分 ≥ 95?"}
  177 +
  178 + H -->|"❌ 不合格"| I["继续 Evolve 迭代<br>(自动重训)"]
  179 + I --> H
  180 +
  181 + H -->|"✅ 合格"| J["毕业 → 存入 templates/<br>(供未来复用)"]
  182 + J --> C
  183 +```
  184 +
  185 +### 4.2 招聘三阶段详解
  186 +
  187 +#### 阶段 A: 模板库查找 (Template Lookup)
  188 +
  189 +```javascript
  190 +// 伪代码: hire(roleName, companyId)
  191 +function hire(roleName, companyId) {
  192 + const templateDir = path.join(DATA_DIR, 'templates', roleName);
  193 +
  194 + if (fs.existsSync(templateDir)) {
  195 + // ✅ 模板存在 → 直接复制 + 定制
  196 + copyDir(templateDir, `data/${companyId}/agents/${roleName}/`);
  197 + injectCompanyContext(companyId, roleName);
  198 + return { status: 'hired_from_template', ready: true };
  199 + } else {
  200 + // ❌ 模板不存在 → 进入培养流程
  201 + return trainNewAgent(roleName, companyId);
  202 + }
  203 +}
  204 +```
  205 +
  206 +**模板库是不断扩充的人才市场**:
  207 +- 初始模板:`ceo`, `qa-judge`, `content-writer`, `editor` 等通用角色
  208 +- 每次从零培养的新角色,训练合格后**自动沉淀回 `templates/`**,下次招聘同类角色时就能直接使用
  209 +- 模板只保存骨架(agent.md, soul.md, skills/, config.json),不带记忆和工作区
  210 +
  211 +#### 阶段 B: 从零培养 (Create + Train)
  212 +
  213 +当模板库中没有对应角色时,进入培养流水线:
  214 +
  215 +```
  216 +Step 1: agent-creator 创建骨架
  217 + → 生成 agent.md, soul.md, identity.md, config.json
  218 + → 定义角色的核心职责和工具清单
  219 + → 此时 Agent 状态为 "training"(不可执行正式任务)
  220 +
  221 +Step 2: innovator 执行 FDE 训练
  222 + → F (Find): 调研该角色领域的最佳实践和行业知识
  223 + → D (Digest): 消化知识转化为 Agent 的技能定义 (SKILL.md)
  224 + → E (Evolve): 循环迭代优化,直到技能评分达标
  225 +
  226 +Step 3: Benchmark 评估
  227 + → 运行标准化的能力测试用例
  228 + → 评分维度:任务完成度、输出质量、工具使用准确性、响应时间
  229 + → 合格线:综合评分 ≥ 95 分
  230 +```
  231 +
  232 +#### 阶段 C: 合格上岗 + 模板沉淀
  233 +
  234 +```
  235 +训练合格后:
  236 + 1. Agent 状态从 "training" → "ready"
  237 + 2. 复制干净骨架到 templates/ (不含训练过程中的 memory 和 workspace)
  238 + 3. 注入公司上下文到公司实例
  239 + 4. 正式加入公司 agents/ 池
  240 + 5. 更新 company.json 的 agents 列表
  241 + 6. CEO 收到通知:"新员工 {roleName} 已入职"
  242 +```
  243 +
  244 +### 4.3 Agent 状态机
  245 +
  246 +```
  247 + ┌── training ──► ready ──► active
  248 + │ │
  249 + (从零培养) │ │ (公司暂停/开除)
  250 + │ ▼
  251 + │ suspended
  252 + │
  253 + (模板复制) └── ready ─────────────► active
  254 +```
  255 +
  256 +| 状态 | 含义 | 能否接任务 |
  257 +|------|------|-----------|
  258 +| `training` | 正在被 Innovator 训练中,Benchmark 尚未达标 | ❌ 不能 |
  259 +| `ready` | 训练完毕或模板复制完毕,等待上岗 | ❌ 等待分配 |
  260 +| `active` | 已加入公司,处于正式工作状态 | ✅ 能 |
  261 +| `suspended` | 被 CEO 暂停(表现不佳或公司调整) | ❌ 暂停 |
  262 +
  263 +### 4.4 模板库管理
  264 +
  265 +模板库 `data/templates/` 是一个**不断进化的人才市场**:
  266 +
  267 +```
  268 +data/templates/
  269 +├── ceo/ ← 通用 CEO 模板
  270 +│ ├── agent.md ← 通用的 CEO 职责(不含特定公司信息)
  271 +│ ├── soul.md ← CEO 通用思维模式
  272 +│ ├── identity.md
  273 +│ ├── config.json ← type: "cxo"
  274 +│ └── skills/ ← CEO 通用技能
  275 +│
  276 +├── content-writer/ ← 内容写手模板
  277 +├── video-editor/ ← 剪辑师模板
  278 +├── hot-topic-hunter/ ← 热点搜索员模板
  279 +├── data-analyst/ ← 数据分析师模板
  280 +├── qa-judge/ ← 质量仲裁模板
  281 +│
  282 +└── _registry.json ← 模板注册表(索引所有可用模板)
  283 +```
  284 +
  285 +**`_registry.json` 结构**:
  286 +```json
  287 +[
  288 + {
  289 + "id": "ceo",
  290 + "name": "CEO / 首席执行官",
  291 + "type": "cxo",
  292 + "description": "公司战略规划、团队管理、OKR 制定",
  293 + "benchmarkScore": 97,
  294 + "trainedAt": "2026-03-20",
  295 + "usedCount": 3
  296 + },
  297 + {
  298 + "id": "hot-topic-hunter",
  299 + "name": "热点搜索员",
  300 + "type": "specialist",
  301 + "description": "全网热点监控、选题建议、趋势分析",
  302 + "benchmarkScore": 96,
  303 + "trainedAt": "2026-03-25",
  304 + "usedCount": 0
  305 + }
  306 +]
  307 +```
  308 +
  309 +### 4.5 复制时的上下文注入
  310 +
  311 +从模板复制到公司后,必须改写以下文件:
  312 +
  313 +| 文件 | 注入内容 |
  314 +|------|---------|
  315 +| `agent.md` | 追加:所属公司名称、公司使命、公司特定的约束规则 |
  316 +| `soul.md` | 追加:公司文化和价值观(如"我们是一家注重数据驱动的自媒体") |
  317 +| `user.md` | 重写:上级是该公司的 CEO(而非 Master),写入 CEO 的偏好 |
  318 +| `config.json` | 添加 `companyId` 字段,更新 `parent_id` |
  319 +| `memory/memory.md` | 初始化为空白(新公司、新记忆,不继承模板记忆) |
  320 +
  321 +---
  322 +
  323 +## 五、生命周期流程
  324 +
  325 +### 5.1 公司创建 + 招聘全流程
171 326
172 ```mermaid 327 ```mermaid
173 sequenceDiagram 328 sequenceDiagram
174 participant User as 用户 329 participant User as 用户
175 participant Master as Master Agent 330 participant Master as Master Agent
176 participant System as 系统 API 331 participant System as 系统 API
  332 + participant AC as agent-creator
  333 + participant Inno as innovator
177 participant CEO as 新 CEO Agent 334 participant CEO as 新 CEO Agent
178 335
179 User->>Master: "帮我创建一家做公众号运营的公司" 336 User->>Master: "帮我创建一家做公众号运营的公司"
180 Master->>Master: 理解意图 → 确定公司定位和核心 SOP 337 Master->>Master: 理解意图 → 确定公司定位和核心 SOP
181 Master->>System: POST /api/company/create 338 Master->>System: POST /api/company/create
182 - Note over System: 1. mkdir data/companies/wechat-media-co/<br>2. 生成 company.json<br>3. 初始化 agents/, goals/, workspace/ 339 + Note over System: 1. mkdir data/wechat-media-co/<br>2. 生成 company.json<br>3. 初始化 agents/, goals/, workspace/
183 System-->>Master: ✅ 公司创建成功 340 System-->>Master: ✅ 公司创建成功
184 -  
185 - Master->>System: POST /api/company/:id/hire-ceo  
186 - Note over System: 1. 使用 agent-creator 创建 CEO Agent<br>2. CEO agent.md 写入公司使命<br>3. CEO user.md 写入:上级是 Master  
187 - System-->>Master: ✅ CEO 已上任  
188 - 341 +
  342 + Master->>System: POST /api/company/:id/hire { role: "ceo" }
  343 + Note over System: 在 templates/ 查找 "ceo" → ✅ 找到
  344 + System->>System: 复制 templates/ceo → wechat-media-co/agents/ceo/
  345 + System->>System: 注入公司上下文 (agent.md, user.md)
  346 + System-->>Master: ✅ CEO 已入职
  347 +
189 Master->>CEO: TaskDispatch: "你是这家公司的 CEO,请规划战略并组建团队" 348 Master->>CEO: TaskDispatch: "你是这家公司的 CEO,请规划战略并组建团队"
190 -  
191 - CEO->>CEO: 分析公司定位 → 设计内容流水线 SOP  
192 - CEO->>System: POST /api/company/:id/agents/create (批量创建)  
193 - Note over CEO: 创建: 内容策划、写手、编辑、发布、数据分析 349 +
  350 + CEO->>CEO: 分析公司定位 → 确定需要哪些角色
  351 + CEO->>System: POST /api/company/:id/hire { role: "content-writer" }
  352 + Note over System: templates/ 查找 → ✅ 找到 → 复制 + 注入
  353 + CEO->>System: POST /api/company/:id/hire { role: "hot-topic-hunter" }
  354 + Note over System: templates/ 查找 → ❌ 没有
  355 + System->>AC: 创建 "hot-topic-hunter" Agent 骨架
  356 + AC-->>System: 骨架已就绪
  357 + System->>Inno: 启动 FDE 训练 (hot-topic-hunter)
  358 + Inno->>Inno: Find → Digest → Evolve (循环至 ≥95)
  359 + Inno-->>System: ✅ Benchmark 97 分,训练合格
  360 + System->>System: 沉淀到 templates/hot-topic-hunter/
  361 + System->>System: 复制到 wechat-media-co/agents/ + 注入上下文
  362 + System-->>CEO: ✅ 热点搜索员已入职
  363 +
194 CEO->>System: POST /api/company/:id/goals/create 364 CEO->>System: POST /api/company/:id/goals/create
195 - Note over CEO: 创建: 公司 OKR(如:30天粉丝破万)  
196 CEO->>System: POST /api/company/:id/pipelines/create 365 CEO->>System: POST /api/company/:id/pipelines/create
197 - Note over CEO: 定义: 每日内容产出 SOP 流水线  
198 -  
199 CEO-->>Master: "团队组建完毕,流水线已就绪,开始自主运行" 366 CEO-->>Master: "团队组建完毕,流水线已就绪,开始自主运行"
200 ``` 367 ```
201 368
@@ -250,9 +417,9 @@ sequenceDiagram @@ -250,9 +417,9 @@ sequenceDiagram
250 417
251 --- 418 ---
252 419
253 -## 五、API 设计 420 +## 六、API 设计
254 421
255 -### 5.1 Company CRUD 422 +### 6.1 Company CRUD
256 423
257 | 方法 | 路径 | 说明 | 424 | 方法 | 路径 | 说明 |
258 |------|------|------| 425 |------|------|------|
@@ -262,22 +429,31 @@ sequenceDiagram @@ -262,22 +429,31 @@ sequenceDiagram
262 | `PUT` | `/api/company/:companyId` | 更新公司信息 | 429 | `PUT` | `/api/company/:companyId` | 更新公司信息 |
263 | `POST` | `/api/company/:companyId/shutdown` | 关停公司 | 430 | `POST` | `/api/company/:companyId/shutdown` | 关停公司 |
264 431
265 -### 5.2 Company 内部:Agent 管理 432 +### 6.2 招聘与 Agent 管理
266 433
267 | 方法 | 路径 | 说明 | 434 | 方法 | 路径 | 说明 |
268 |------|------|------| 435 |------|------|------|
269 -| `POST` | `/api/company/:companyId/agents/create` | 在公司内创建 Agent | 436 +| `POST` | `/api/company/:companyId/hire` | 招聘 Agent (模板优先 → 培养兜底) |
270 | `GET` | `/api/company/:companyId/agents` | 列出公司内所有 Agent | 437 | `GET` | `/api/company/:companyId/agents` | 列出公司内所有 Agent |
271 -| `POST` | `/api/company/:companyId/hire-ceo` | 为公司任命 CEO | 438 +| `POST` | `/api/company/:companyId/agent/:agentId/chat` | 与公司内 Agent 对话 |
  439 +| `POST` | `/api/company/:companyId/fire` | 解雇 Agent (suspend) |
272 440
273 -### 5.3 Company 内部:OKR 管理 441 +### 6.3 模板库
274 442
275 | 方法 | 路径 | 说明 | 443 | 方法 | 路径 | 说明 |
276 |------|------|------| 444 |------|------|------|
277 -| `POST` | `/api/company/:companyId/goals/create` | 创建公司级 OKR | 445 +| `GET` | `/api/templates` | 列出所有可用模板 |
  446 +| `GET` | `/api/templates/:templateId` | 查看模板详情 |
  447 +
  448 +### 6.4 Company 内部:OKR 管理
  449 +
  450 +| 方法 | 路径 | 说明 |
  451 +|------|------|------|
  452 +| `POST` | `/api/company/:companyId/goals/create` | 创建公司 OKR |
278 | `GET` | `/api/company/:companyId/goals` | 获取公司 OKR 列表 | 453 | `GET` | `/api/company/:companyId/goals` | 获取公司 OKR 列表 |
  454 +| `PUT` | `/api/company/:companyId/goals/:goalId` | 更新 OKR 节点 |
279 455
280 -### 5.4 Company 运营 456 +### 6.5 Company 运营
281 457
282 | 方法 | 路径 | 说明 | 458 | 方法 | 路径 | 说明 |
283 |------|------|------| 459 |------|------|------|
@@ -286,94 +462,102 @@ sequenceDiagram @@ -286,94 +462,102 @@ sequenceDiagram
286 462
287 --- 463 ---
288 464
289 -## 六、与现有系统的兼容设计 465 +## 七、与现有系统的兼容设计
290 466
291 -### 6.1 Agent 寻址变化 467 +### 7.1 Agent 寻址变化
292 468
293 当前系统的 Agent 通过 `agentId` 全局唯一寻址(如 `ceo`)。 469 当前系统的 Agent 通过 `agentId` 全局唯一寻址(如 `ceo`)。
294 引入 Company 后,Agent 的寻址变为 **Company 限定**: 470 引入 Company 后,Agent 的寻址变为 **Company 限定**:
295 471
296 ```javascript 472 ```javascript
297 -// 旧: 全局 Agent  
298 -const agentDir = path.join(DATA_DIR, agentId);  
299 -// 即: data/agents/ceo/ 473 +// 全局 Agent(不属于任何公司)
  474 +const agentDir = path.join(DATA_DIR, 'agents', agentId);
  475 +// 即: data/agents/master/
300 476
301 -// 新: 公司内 Agent  
302 -const agentDir = path.join(COMPANIES_DIR, companyId, 'agents', agentId);  
303 -// 即: data/companies/wechat-media-co/agents/ceo-wechat/  
304 -  
305 -// 新: 全局 Agent(不属于任何公司)  
306 -const agentDir = path.join(DATA_DIR, agentId);  
307 -// 即: data/agents/master/ ← 不变 477 +// 公司内 Agent
  478 +const agentDir = path.join(DATA_DIR, companyId, 'agents', agentId);
  479 +// 即: data/wechat-media-co/agents/ceo/
308 ``` 480 ```
309 481
310 **兼容策略**: 482 **兼容策略**:
311 - `config.json` 增加 `companyId` 字段(可选)。 483 - `config.json` 增加 `companyId` 字段(可选)。
312 -- **有 `companyId`** → 在 `data/companies/{companyId}/agents/` 下。 484 +- **有 `companyId`** → 在 `data/{companyId}/agents/` 下。
313 - **无 `companyId`** → 在 `data/agents/` 下(全局)。 485 - **无 `companyId`** → 在 `data/agents/` 下(全局)。
314 -- 路由层通过 resolveAgentDir(agentId) 统一封装,向上层透明化。 486 +- 路由层通过 `resolveAgentDir(companyId, agentId)` 统一封装,向上层透明化。
  487 +
  488 +### 7.2 OKR/Goals — 全部归属 Company
315 489
316 -### 6.2 OKR/Goals 隔离 490 +Goals/OKR 不再有全局作用域。**每个 Goal 都必须隶属于一个 Company**:
317 491
318 ``` 492 ```
319 -data/goals/ ← 全局大盘(跨公司的顶级战略目标)  
320 -data/companies/{co}/goals/ ← 公司内部的执行类 OKR 493 +data/wechat-media-co/goals/G-001/ ← 自媒体公司的 OKR
  494 +data/manga-studio/goals/G-001/ ← 漫剧公司的 OKR(ID 互不冲突)
321 ``` 495 ```
322 496
323 -GoalsService 增加一个 `scope` 参数:  
324 -- `scope = 'global'` → 读写 `data/goals/`  
325 -- `scope = companyId` → 读写 `data/companies/{companyId}/goals/` 497 +GoalsService 改造:
  498 +- 构造时必须传入 `companyId`:`new GoalsService(companyId)`
  499 +- 数据路径变为 `data/{companyId}/goals/`
  500 +- `_index.json` 也随之放在公司目录下
326 501
327 -### 6.3 Memory 隔离 502 +### 7.3 Memory 隔离
328 503
329 -Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下(`agents/{id}/memory/`)。  
330 -当公司内的 Agent 在 `data/companies/{co}/agents/{id}/memory/` 下时,自动与全局 Agent 的记忆完全隔离。无代码改动。 504 +Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下。
  505 +公司内的 Agent 在 `data/{companyId}/agents/{agentId}/memory/` 下,自动与其他公司和全局 Agent 的记忆完全隔离。无额外代码改动。
331 506
332 -### 6.4 Heartbeat 集成 507 +### 7.4 Heartbeat 集成
333 508
334 HeartbeatService 扩展扫描范围: 509 HeartbeatService 扩展扫描范围:
335 -- 遍历 `data/agents/` 下有 `heartbeat.enabled` 的全局 Agent。  
336 -- 遍历 `data/companies/*/agents/` 下有 `heartbeat.enabled` 的公司内 Agent。  
337 -- 可以在 `company.json` 层级设置整个公司的心跳开关。 510 +- 遍历 `data/agents/` 下有 `heartbeat.enabled` 的全局 Agent(如 master)。
  511 +- 遍历每个 `data/{companyId}/` 下,读取 `company.json` 的心跳配置。
  512 +- 若公司心跳开启,唤醒该公司的 CEO 作为入口(CEO 自行决定唤醒下属)。
338 513
339 --- 514 ---
340 515
341 -## 七、实现计划 — Todo List 516 +## 八、实现计划 — Todo List
  517 +
  518 +### Phase 1: 数据结构 + 模板库基础
  519 +
  520 +- [ ] **1.1** 创建 `data/templates/` 目录,迁移现有 Agent 为模板(ceo, qa-judge 等)
  521 +- [ ] **1.2** 实现 `company-service.js`:Company CRUD (create / get / list / shutdown)
  522 +- [ ] **1.3** 实现 `resolveAgentDir(companyId, agentId)` 统一寻址函数
  523 +- [ ] **1.4** 实现 `_registry.json` 模板注册表,记录模板的 benchmarkScore、usedCount
342 524
343 -### Phase 1: 数据结构基础 525 +### Phase 2: Agent 招聘系统 (Hiring Pipeline)
344 526
345 -- [ ] **1.1** 创建 `data/companies/` 目录和 `company-service.js`  
346 -- [ ] **1.2** 实现 Company CRUD:create / get / list / update / shutdown  
347 -- [ ] **1.3** 实现 `resolveAgentDir(agentId, companyId?)` 统一寻址函数  
348 -- [ ] **1.4** 修改 `agent-chat.js` 路由支持 `companyId` 上下文 527 +- [ ] **2.1** 实现 `POST /api/company/:id/hire` — 模板查找 → 复制 → 上下文注入
  528 +- [ ] **2.2** 招聘兜底:模板不存在时自动调用 `agent-creator` 创建 + `innovator` FDE 训练
  529 +- [ ] **2.3** Benchmark 质量门禁:评分 ≥ 95 才允许上岗,不合格自动 re-evolve
  530 +- [ ] **2.4** 训练合格后自动沉淀骨架到 `templates/`,更新 `_registry.json`
349 531
350 -### Phase 2: CEO 自动建制 532 +### Phase 3: CEO 自动建制 + OKR
351 533
352 -- [ ] **2.1** 实现 `POST /api/company/:id/hire-ceo`(调用 agent-creator 并自动填充上下文)  
353 -- [ ] **2.2** CEO 的 `agent.md` 模板:包含公司使命、员工创建权限、SOP 设计权限  
354 -- [ ] **2.3** CEO 首次运行后自动规划(通过 TaskDispatch 触发"规划战略并组建团队") 534 +- [ ] **3.1** 公司创建后自动招聘 CEO(从模板),CEO agent.md 注入公司使命
  535 +- [ ] **3.2** CEO 首次运行后自主规划:确定角色需求 → 批量调用 hire API → 创建 OKR
  536 +- [ ] **3.3** GoalsService 改造:所有 OKR 存储在 `data/{companyId}/goals/` 下
355 537
356 -### Phase 3: SOP 流水线 538 +### Phase 4: SOP 流水线
357 539
358 -- [ ] **3.1** 设计 Pipeline 数据结构(`pipelines/*.json`)  
359 -- [ ] **3.2** 实现 Pipeline 执行引擎(按步骤自动触发对应 Agent)  
360 -- [ ] **3.3** CEO 可以通过工具动态调整 Pipeline 540 +- [ ] **4.1** 设计 Pipeline 数据结构(`{companyId}/pipelines/*.json`)
  541 +- [ ] **4.2** 实现 Pipeline 执行引擎(按步骤自动触发公司内对应 Agent)
  542 +- [ ] **4.3** CEO 可以通过工具动态调整 Pipeline
361 543
362 -### Phase 4: 前端 Dashboard 544 +### Phase 5: 前端 Dashboard
363 545
364 -- [ ] **4.1** 公司列表页(展示所有公司卡片 + 运行状态)  
365 -- [ ] **4.2** 公司详情页(组织架构图 + OKR 大盘 + Agent 列表)  
366 -- [ ] **4.3** 公司日报/周报自动生成与展示 546 +- [ ] **5.1** 公司列表页(展示所有公司卡片 + 运行状态 + 员工数)
  547 +- [ ] **5.2** 公司详情页(组织架构图 + 公司 OKR 大盘 + Agent 列表 + 招聘状态)
  548 +- [ ] **5.3** 模板库页面(展示所有可用模板、评分、使用次数)
  549 +- [ ] **5.4** 公司日报/周报自动生成与展示
367 550
368 --- 551 ---
369 552
370 -## 八、关键技术决策 553 +## 九、关键技术决策
371 554
372 | # | 问题 | 决策 | 说明 | 555 | # | 问题 | 决策 | 说明 |
373 |---|------|------|------| 556 |---|------|------|------|
374 -| 1 | Agent ID 全局唯一还是公司内唯一? | **全局唯一** | 使用 `{role}-{companySlug}` 命名法,如 `ceo-wechat` |  
375 -| 2 | 原有的 `data/agents/ceo` 怎么处理? | **渐进迁移** | 旧的全局 Agent 保留不动,新建公司时在 companies 下创建 |  
376 -| 3 | Company 的 CEO 是新建还是复用? | **每家公司新建独立 CEO** | 避免记忆污染和注意力分散 | 557 +| 1 | Agent ID 全局唯一还是公司内唯一? | **公司内唯一** | 如 ceo 在每家公司内都叫 ceo,通过 companyId + agentId 联合定位 |
  558 +| 2 | 原有 `data/agents/` 里的 Agent | **迁移为模板** | ceo、qa-judge 等迁入 `data/templates/`,master/innovator 保留为全局 |
  559 +| 3 | 招聘时模板不存在怎么办? | **agent-creator 创建 + innovator 训练到 ≥95** | 训练合格后自动沉淀为新模板,下次复用 |
377 | 4 | Company 可以嵌套 Company 吗? | **v1.0 不支持** | 先做单层,未来有需求再做集团架构 | 560 | 4 | Company 可以嵌套 Company 吗? | **v1.0 不支持** | 先做单层,未来有需求再做集团架构 |
378 -| 5 | 跨公司 Agent 共享(如 innovator)| **全局 Agent 池** | `data/agents/` 下的 Agent 可以被任何公司调用 |  
379 -| 6 | 公司的"关停"语义 | **软关停** | 标记 status=shutdown,停止心跳,保留数据 | 561 +| 5 | 跨公司 Agent 共享(如 innovator) | **全局 Agent 池** | `data/agents/` 下的 Agent 可被任何公司调用 |
  562 +| 6 | 公司的"关停"语义 | **软关停** | status=shutdown,停止心跳,保留数据 |
  563 +| 7 | Goals/OKR 作用域 | **全部归属 Company** | 不设全局 OKR,每个目标都隶属于一个具体公司 |