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 89  
90 90 ```
91 91 data/
92   -├── agents/ ← 全局 Agent(Master + 跨公司工具类 Agent)
  92 +├── agents/ ← 全局 Agent(Master + 跨公司基础设施 Agent)
93 93 │ ├── master/
94 94 │ ├── agent-creator/
95 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 121 ### 3.2 company.json 结构
... ... @@ -132,20 +129,14 @@ data/
132 129 "createdAt": "2026-03-25T17:00:00Z",
133 130 "createdBy": "master",
134 131  
135   - "ceo": "ceo-wechat",
  132 + "ceo": "ceo",
136 133  
137 134 "sop": {
138 135 "pipeline": "daily-content",
139 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 141 "heartbeat": {
151 142 "enabled": true,
... ... @@ -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 327 ```mermaid
173 328 sequenceDiagram
174 329 participant User as 用户
175 330 participant Master as Master Agent
176 331 participant System as 系统 API
  332 + participant AC as agent-creator
  333 + participant Inno as innovator
177 334 participant CEO as 新 CEO Agent
178 335  
179 336 User->>Master: "帮我创建一家做公众号运营的公司"
180 337 Master->>Master: 理解意图 → 确定公司定位和核心 SOP
181 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 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 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 364 CEO->>System: POST /api/company/:id/goals/create
195   - Note over CEO: 创建: 公司 OKR(如:30天粉丝破万)
196 365 CEO->>System: POST /api/company/:id/pipelines/create
197   - Note over CEO: 定义: 每日内容产出 SOP 流水线
198   -
199 366 CEO-->>Master: "团队组建完毕,流水线已就绪,开始自主运行"
200 367 ```
201 368  
... ... @@ -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 429 | `PUT` | `/api/company/:companyId` | 更新公司信息 |
263 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 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 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 462  
287 463 ---
288 464  
289   -## 六、与现有系统的兼容设计
  465 +## 七、与现有系统的兼容设计
290 466  
291   -### 6.1 Agent 寻址变化
  467 +### 7.1 Agent 寻址变化
292 468  
293 469 当前系统的 Agent 通过 `agentId` 全局唯一寻址(如 `ceo`)。
294 470 引入 Company 后,Agent 的寻址变为 **Company 限定**:
295 471  
296 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 483 - `config.json` 增加 `companyId` 字段(可选)。
312   -- **有 `companyId`** → 在 `data/companies/{companyId}/agents/` 下。
  484 +- **有 `companyId`** → 在 `data/{companyId}/agents/` 下。
313 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 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 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,每个目标都隶属于一个具体公司 |
... ...