auto-sync: 2026-05-28 00:23:03
This commit is contained in:
@@ -0,0 +1,802 @@
|
||||
# AI Native DevOps Platform 架构设计 v3.0
|
||||
|
||||
**版本**: v3.0(PRD 3.0 对齐 + 代码现状回溯)
|
||||
**基于**: PRD-v3.0 + architecture-v2.6 + 实际代码
|
||||
**作者**: 庞统(副军师)🐦
|
||||
**日期**: 2026-05-28
|
||||
**状态**: 初稿
|
||||
**准绳**: PRD-v3.0.md 是唯一准绳,设计矛盾以它为准
|
||||
|
||||
---
|
||||
|
||||
## 变更历史
|
||||
|
||||
| 版本 | 日期 | 变更 |
|
||||
|------|------|------|
|
||||
| v3.0 | 2026-05-28 | 基于 PRD-v3.0 + 代码现状,全面回溯。从 architecture-v2.6 继承并修正 |
|
||||
|
||||
---
|
||||
|
||||
## 实现状态标记
|
||||
|
||||
- ✅ **已实现** — 代码已落地
|
||||
- ⚠️ **部分实现** — 有代码但缺功能
|
||||
- ❌ **未实现** — 只有设计没有代码
|
||||
- 🔀 **矛盾** — 设计和代码/PRD不一致
|
||||
|
||||
---
|
||||
|
||||
## 1. 架构总览
|
||||
|
||||
### 1.1 系统定位
|
||||
|
||||
moziplus v2 是 AI Native 的多 Agent 协作 DevOps 平台。核心理念(PRD B1~B4):
|
||||
|
||||
| 信念 | PRD 编号 | 架构体现 |
|
||||
|------|----------|---------|
|
||||
| B1: AI 参与每个决策层 | PRD §2.1 | Agent 自主认领、审查、裁决;Daemon 只投递不决策 |
|
||||
| B2: 共享意识空间 | PRD §2.1 | SQLite 黑板 + 全量事件 + @mention + Handoff |
|
||||
| B3: 人机协同而非人机对抗 | PRD §2.1 | Checkpoint/escalated/waiting_human 三级人工介入 |
|
||||
| B4: 持续学习闭环 | PRD §2.1 | Experience 沉淀 + Skill 进化 |
|
||||
|
||||
### 1.2 系统架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 用户层 │
|
||||
│ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 前端(React)│ │ OpenClaw CLI │ │ Mail Tab │ │
|
||||
│ │ EdictBoard│ │ blackboard.py│ │ 三栏布局 │ │
|
||||
│ └─────┬─────┘ └──────┬───────┘ └──────┬───────┘ │
|
||||
│ │HTTP/SSE │HTTP │HTTP │
|
||||
├────────┼───────────────┼──────────────────┼──────────────────────────┤
|
||||
│ ▼ ▼ ▼ │
|
||||
│ ┌──────────────────────────────────────────────────┐ │
|
||||
│ │ API 层 (FastAPI, port 8083) │ │
|
||||
│ │ blackboard_routes / mail_routes / project_routes│ │
|
||||
│ │ daemon_routes / sse_routes / checkpoint_routes │ │
|
||||
│ └──────────────────────┬───────────────────────────┘ │
|
||||
│ │SQLite │
|
||||
├─────────────────────────┼───────────────────────────────────────────┤
|
||||
│ ▼ │
|
||||
│ ┌──────────────────────────────────────────────────┐ │
|
||||
│ │ Blackboard 层 │ │
|
||||
│ │ per-project blackboard.db (SQLite WAL) │ │
|
||||
│ │ tasks / comments / outputs / decisions / │ │
|
||||
│ │ observations / events / reviews / experiences / │ │
|
||||
│ │ agents / task_attempts / routing_decisions / │ │
|
||||
│ │ checkpoints │ │
|
||||
│ └──────────────────────┬───────────────────────────┘ │
|
||||
│ │ │
|
||||
├─────────────────────────┼───────────────────────────────────────────┤
|
||||
│ ▼ │
|
||||
│ ┌──────────────────────────────────────────────────┐ │
|
||||
│ │ Daemon 层 (PM2: sanguo-moziplus-v2) │ │
|
||||
│ │ │ │
|
||||
│ │ ┌─────────┐ ┌───────────┐ ┌──────────┐ │ │
|
||||
│ │ │ Ticker │ │ Dispatcher│ │ Spawner │ │ │
|
||||
│ │ │ 30s tick│ │ 任务调度 │ │ 进程管理 │ │ │
|
||||
│ │ └─────────┘ └───────────┘ └──────────┘ │ │
|
||||
│ │ ┌─────────┐ ┌───────────┐ ┌──────────┐ │ │
|
||||
│ │ │ Router │ │ Counter │ │ Inbox │ │ │
|
||||
│ │ │ 路由 │ │ 并发控制 │ │ JSONL事件│ │ │
|
||||
│ │ └─────────┘ └───────────┘ └──────────┘ │ │
|
||||
│ │ ┌──────────────┐ ┌──────────┐ ┌────────┐ │ │
|
||||
│ │ │ GuardrailEng │ │ ReviewPipe│ │ Health │ │ │
|
||||
│ │ │ 安全红线 │ │ 产出验证 │ │ 僵尸检测│ │ │
|
||||
│ │ └──────────────┘ └──────────┘ └────────┘ │ │
|
||||
│ │ ┌──────────────┐ ┌──────────┐ ┌────────┐ │ │
|
||||
│ │ │ BootstrapBld │ │ ExpStore │ │ SkillReg│ │ │
|
||||
│ │ │ 上下文构建 │ │ 经验沉淀 │ │ 技能注册│ │ │
|
||||
│ │ └──────────────┘ └──────────┘ └────────┘ │ │
|
||||
│ │ ┌──────────────┐ │ │
|
||||
│ │ │ SSEBroker │ │ │
|
||||
│ │ │ 实时推送 │ │ │
|
||||
│ │ └──────────────┘ │ │
|
||||
│ └──────────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ openclaw agent --agent <id> │
|
||||
│ ┌──────────────────────────────────────────────────┐ │
|
||||
│ │ Agent 层 (OpenClaw Gateway) │ │
|
||||
│ │ 张飞/关羽/赵云/姜维/司马懿/庞统 │ │
|
||||
│ │ 每个 Agent 独立 session,通过 API 读写黑板 │ │
|
||||
│ └──────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 数据模型
|
||||
|
||||
### 2.1 实际 DB Schema(代码现状)
|
||||
|
||||
✅ **已实现** — 14 张表
|
||||
|
||||
| 表名 | 代码位置 | 用途 |
|
||||
|------|----------|------|
|
||||
| `tasks` | db.py:239 | 核心任务表 |
|
||||
| `comments` | db.py:274 | 评论/讨论/@mention |
|
||||
| `outputs` | db.py:288 | Agent 产出物 |
|
||||
| `decisions` | db.py:303 | 决策记录 |
|
||||
| `observations` | db.py:315 | 风险/异常观察 |
|
||||
| `events` | db.py:327 | 事件日志 |
|
||||
| `agents` | db.py:339 | Agent 注册信息 |
|
||||
| `task_attempts` | db.py:349 | 任务尝试记录 |
|
||||
| `reviews` | db.py:365 | 评审结果 |
|
||||
| `experiences` | db.py:384 | 经验沉淀 |
|
||||
| `experience_tags` | db.py:402 | 经验标签 |
|
||||
| `routing_decisions` | db.py:410 | 路由决策记录 |
|
||||
| `checkpoints` | db.py:117,433 | Checkpoint 数据(两处定义) |
|
||||
| `tasks_v28` | db.py:70 | v2.8 迁移临时表 |
|
||||
| `registry` (全局) | registry.py | Project 注册表(独立 DB) |
|
||||
|
||||
**tasks 表字段(实际)**:
|
||||
|
||||
```sql
|
||||
id, title, description, status, assignee, assigned_by,
|
||||
depends_on, parent_task, priority, task_type,
|
||||
created_at, updated_at, claimed_at, started_at, completed_at,
|
||||
deadline, retry_count, max_retries, must_haves, risk_level,
|
||||
estimated_duration_minutes, escalated, -- ⚠️ 布尔字段,已被 escalated 状态取代
|
||||
current_agent, previous_agent, next_capability, -- v2.6.1 路由扩展
|
||||
stage, stages_json, -- v2.7 SubTask
|
||||
resumed_from, -- v3.1 暂停恢复
|
||||
archived, archived_at -- v2.8 归档(models.py 有,db.py DDL 无)
|
||||
```
|
||||
|
||||
**状态枚举(实际)**:
|
||||
|
||||
```
|
||||
pending, claimed, working, review, paused, escalated,
|
||||
waiting_human, done, failed, blocked, cancelled
|
||||
```
|
||||
|
||||
### 2.2 设计差异
|
||||
|
||||
| # | 差异 | PRD/设计 | 代码实际 | 标记 |
|
||||
|---|------|----------|---------|------|
|
||||
| D1 | archived 字段 | v2.8 设计要求 | models.py 有,db.py CREATE TABLE 无(需迁移脚本添加) | ⚠️ 部分 |
|
||||
| D2 | tasks_v28 临时表 | 不应存在于正式 schema | db.py:70 有 CREATE TABLE tasks_v28 | 🔀 遗留 |
|
||||
| D3 | checkpoints 表 | 两处定义 | db.py:117 和 db.py:433 重复定义 | ⚠️ 冗余 |
|
||||
| D4 | verification_commands | architecture-v2.6 §15.1 借鉴1 | tasks 表无此字段 | ❌ 未实现 |
|
||||
| D5 | max_ticks | architecture-v2.6 §15.1 借鉴3 Runaway Guard | tasks 表无此字段 | ❌ 未实现 |
|
||||
| D6 | scope_declaration | architecture-v2.6 §9.3 方案审查 | decisions 表可承载但无专门 schema | ⚠️ 部分 |
|
||||
| D7 | handoff schema | architecture-v2.6 §5.1 | comments 表无 handoff 类型校验 | ⚠️ 部分 |
|
||||
| D8 | parent_task 聚合 | v2.7 设计 §2.2 | ticker.py _refresh_parent_statuses 已实现 | ✅ |
|
||||
|
||||
### 2.3 Project Registry
|
||||
|
||||
✅ **已实现** — `ProjectRegistry`(registry.py)
|
||||
|
||||
- 独立 `registry.db`(全局,非 per-project)
|
||||
- 自动扫描 `~/.openclaw/sanguo_projects/sanguo_*`
|
||||
- CRUD + archive + discover + migrate_from_yaml
|
||||
|
||||
---
|
||||
|
||||
## 3. Daemon 设计
|
||||
|
||||
### 3.1 Ticker ✅ **已实现**
|
||||
|
||||
**文件**: `ticker.py`(40399 bytes)
|
||||
|
||||
**核心职责**:
|
||||
- 30s 周期 tick
|
||||
- 扫描任务状态 → 依赖推进 → 超时检测 → 调度 pending → 调度 review
|
||||
- 父 Task 状态聚合(`_refresh_parent_statuses`)
|
||||
- 广播认领(`_build_claim_prompt`)
|
||||
- 僵尸/超时处理(claimed 5min → pending,working 30min → failed)
|
||||
- Mail 检查回复(`_mail_check_reply`)
|
||||
|
||||
**设计差异**:
|
||||
|
||||
| # | 设计 | 代码实际 | 标记 |
|
||||
|---|------|---------|------|
|
||||
| T1 | Tick 30s + Inbox JSONL 加速 | 只实现 Tick,Inbox Watcher 已实现但未与 Ticker 集成加速 | ⚠️ |
|
||||
| T2 | 连续 N tick 无变更告警 | `_check_timeouts` 有但无全局逻辑健康自检 | ⚠️ |
|
||||
| T3 | Shadow Checkpoint(git commit) | 无 | ❌ |
|
||||
| T4 | 暂停任务不参与调度/聚合 | 已实现(paused 跳过) | ✅ |
|
||||
|
||||
### 3.2 Dispatcher ⚠️ **部分实现**
|
||||
|
||||
**文件**: `dispatcher.py`(27278 bytes)
|
||||
|
||||
**核心职责**:
|
||||
- 任务调度决策(`decide()` → 分配 agent + spawn message)
|
||||
- 支持 claim / retry / review / delegate / broadcast 五种模式
|
||||
- Mail 任务特殊处理(auto_working / auto_complete)
|
||||
|
||||
**设计差异**:
|
||||
|
||||
| # | 设计 | 代码实际 | 标记 |
|
||||
|---|------|---------|------|
|
||||
| D1 | "Agent 自主认领" | `_dispatch_pending` 仍走 Router 决定 → 强制 claimed → spawn | 🔀 v3.0-router-refactor.md 指出问题 |
|
||||
| D2 | 广播认领路径 | `_build_claim_prompt` 已存在但未被主路径调用 | ⚠️ |
|
||||
| D3 | 确定性交接路径 | next_capability / retry 已实现 | ✅ |
|
||||
| D4 | Mail inform 自动完成 | `_mail_auto_complete` 已实现 | ✅ |
|
||||
|
||||
### 3.3 Spawner ✅ **已实现**
|
||||
|
||||
**文件**: `spawner.py`(52812 bytes,最大文件)
|
||||
|
||||
**核心职责**:
|
||||
- spawn Full Agent(`openclaw agent --agent <id> --session-id <uuid>`)
|
||||
- 进程监控(stdout 解析 + 超时处理 + 退出分类)
|
||||
- Session 注册/清理
|
||||
- Counter 集成(并发控制)
|
||||
- 假死复活术(`_revive_session`)
|
||||
- spawn 前检查(`_check_session_state`)
|
||||
- 产出写入黑板(`_record_attempt`)
|
||||
|
||||
**设计差异**:
|
||||
|
||||
| # | 设计 | 代码实际 | 标记 |
|
||||
|---|------|---------|------|
|
||||
| S1 | Session 归档到 artifacts/{task}/archive | `_register_session` + `cleanup_session` 但归档逻辑简化 | ⚠️ |
|
||||
| S2 | per-task 重试上限 | retry_count + max_retries 已实现 | ✅ |
|
||||
| S3 | on_complete 回调 | 已实现(lambda 释放 counter) | ✅ |
|
||||
| S4 | stdout JSON 解析 | `_parse_stdout_json` 已实现 | ✅ |
|
||||
| S5 | 进程超时分类 | `_classify_outcome` 已实现 | ✅ |
|
||||
|
||||
### 3.4 Router ⚠️ **部分实现**
|
||||
|
||||
**文件**: `router.py`(7240 bytes)
|
||||
|
||||
**核心职责**:
|
||||
- Agent 路由决策(`route()` → 返回 agent_id + mode)
|
||||
- 能力匹配(`_resolve_by_capability`)
|
||||
- fallback 到庞统
|
||||
|
||||
**关键问题**(v3.0-router-refactor.md 已指出):
|
||||
- ~~`LLMDriver` 类用独立 OpenAI 客户端直连 API~~ **已移除**(config 注释 "v3.0: routing 配置已移除")
|
||||
- 仍使用 `_legacy_decide`(Router 决定分配)而非广播认领
|
||||
|
||||
### 3.5 Counter ✅ **已实现**
|
||||
|
||||
**文件**: `counter.py`(5668 bytes)
|
||||
|
||||
**核心职责**:
|
||||
- 三层并发控制(global / per-agent / per-session-key)
|
||||
- 冷却期(`is_cooling_down` / `set_cooldown`)
|
||||
- 信号量实现
|
||||
|
||||
**配置**:`max_global=5, max_per_session=1, max_concurrent_sessions=3`
|
||||
|
||||
### 3.6 Inbox ✅ **已实现**
|
||||
|
||||
**文件**: `inbox.py`(10696 bytes)
|
||||
|
||||
**核心职责**:
|
||||
- JSONL 文件事件监听(`InboxWatcher`)
|
||||
- 事件类型:agent_claim / agent_done / agent_spawned / output_written 等
|
||||
- 异步回调(`default_inbox_callback`)
|
||||
|
||||
**设计差异**:
|
||||
|
||||
| # | 设计 | 代码实际 | 标记 |
|
||||
|---|------|---------|------|
|
||||
| I1 | Inbox 加速 Ticker(即时 mini-tick) | InboxWatcher 已实现但未与 Ticker tick 集成 | ⚠️ |
|
||||
|
||||
### 3.7 Health ✅ **已实现**
|
||||
|
||||
**文件**: `health.py`(9590 bytes)
|
||||
|
||||
**核心职责**:
|
||||
- 僵尸任务检测(`zombie_threshold=20`)
|
||||
- 告警写入黑板(`_write_alert`)
|
||||
- 自动修复(`_write_resolution`)
|
||||
|
||||
### 3.8 SSE ✅ **已实现**
|
||||
|
||||
**文件**: `sse.py`(9205 bytes)
|
||||
|
||||
**核心职责**:
|
||||
- SSE 事件推送(`SSEBroker`)
|
||||
- pub/sub 模式
|
||||
- 前端 EventSource 对接
|
||||
|
||||
---
|
||||
|
||||
## 4. Agent 交互设计
|
||||
|
||||
### 4.1 三层执行模型 ✅ **已实现**
|
||||
|
||||
| 层级 | 方式 | 代码 | 用途 |
|
||||
|------|------|------|------|
|
||||
| L1 Daemon 直接操作 | SQLite/文件 | ticker/dispatcher | 状态更新、机械验证 |
|
||||
| L2 spawn sub | 隔离 session | spawner._spawn_sub | 轻量检查 |
|
||||
| L3 run agent | 完整参与者 | spawner.spawn_full_agent | 编码/审查/策略 |
|
||||
|
||||
### 4.2 Agent 工具集 ✅ **已实现**
|
||||
|
||||
**CLI**(`blackboard.py`):read / create / claim / output / comment / decide / observe / review
|
||||
|
||||
**API**(`blackboard_routes.py`):完整 CRUD + claim + status + archive + events + summary
|
||||
|
||||
### 4.3 Agent 交互流程 ⚠️ **部分实现**
|
||||
|
||||
**设计**(architecture-v2.6 §5.1 五步):
|
||||
1. ✅ 读黑板(API + CLI)
|
||||
2. ⚠️ 想自主决策 — 广播认领未完全启用
|
||||
3. ✅ 执行任务
|
||||
4. ✅ 写回黑板
|
||||
5. ⚠️ Handoff Comment — comments 表可承载但无 schema 校验
|
||||
|
||||
### 4.4 Handoff Comment ❌ **未实现**
|
||||
|
||||
**设计**:结构化交接评论,CLI 校验 `schemas/handoff.schema.json`。
|
||||
|
||||
**代码实际**:`schemas/` 目录不存在。comments 表有 `comment_type` 字段但无 handoff 专用校验。
|
||||
|
||||
---
|
||||
|
||||
## 5. 路由与调度
|
||||
|
||||
### 5.1 当前实现 ⚠️ **与设计有差距**
|
||||
|
||||
**v3.0-router-refactor.md 指出的问题**:
|
||||
1. ~~LLMDriver 已移除~~ ✅
|
||||
2. `_dispatch_pending` 绕过认领机制 — **仍存在**
|
||||
3. Daemon 替 Agent 做决策 — **仍存在**
|
||||
|
||||
**当前流程**:
|
||||
```
|
||||
pending → Router 决定 agent → 强制 claimed + spawn → Agent 被动执行
|
||||
```
|
||||
|
||||
**设计目标流程**(v3.0-router-refactor.md):
|
||||
```
|
||||
pending → 确定性路径?(retry/handoff/assignee) → 直接 spawn
|
||||
→ 否 → 广播认领 → Agent 自主 claim
|
||||
```
|
||||
|
||||
### 5.2 调度模式
|
||||
|
||||
| 模式 | 设计 | 代码 | 标记 |
|
||||
|------|------|------|------|
|
||||
| 确定性交接(retry/handoff) | ✅ 设计 | ✅ 实现 | ✅ |
|
||||
| 广播认领 | ✅ 设计 | ⚠️ `_build_claim_prompt` 存在但未被主路径调用 | ⚠️ |
|
||||
| 庞统兜底(delegate) | ✅ 设计 | ✅ 实现 | ✅ |
|
||||
| 无人认领→escalated | ✅ 设计 | ✅ retry_count >= 3 逻辑 | ✅ |
|
||||
| 用户介入链路 | ✅ 设计 | ✅ SSE + 前端按钮 | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 6. 质量门控/审查体系
|
||||
|
||||
### 6.1 分级审查流水线 ⚠️ **部分实现**
|
||||
|
||||
**设计**(architecture-v2.6 §9.2):
|
||||
|
||||
| 风险等级 | 流水线 | 实际 |
|
||||
|---------|--------|------|
|
||||
| high | 三阶段(方案+Guardrail+产出) | ❌ 无方案审查,ReviewPipeline 存在但简化 |
|
||||
| standard | 二阶段(方案+产出) | ⚠️ ReviewPipeline 存在,但无方案审查 |
|
||||
| low | 一阶段(Guardrail 自动) | ⚠️ ReviewPipeline 简化版 |
|
||||
| research | 一阶段(庞统确认) | ❌ 无专门处理 |
|
||||
|
||||
### 6.2 Review Pipeline ✅ **已实现(简化版)**
|
||||
|
||||
**文件**: `review.py`(10335 bytes)
|
||||
|
||||
**实际流程**:
|
||||
1. ✅ 产出物存在性检查(`_check_existence`)
|
||||
2. ✅ 格式合规检查(`_check_format`)
|
||||
3. ✅ 内容质量检查(`_check_quality`)
|
||||
4. ✅ Guardrail 门控(`_determine_gate`)
|
||||
5. ✅ 综合评分
|
||||
|
||||
**缺失**:
|
||||
- ❌ Investigation Protocol(五阶段)
|
||||
- ❌ 多视角矩阵
|
||||
- ❌ 对抗性指令
|
||||
|
||||
### 6.3 Rebuttal Manager ✅ **已实现**
|
||||
|
||||
**文件**: `review.py` `RebuttalManager`
|
||||
|
||||
- `submit_rebuttal()` — 反驳提交
|
||||
- 审查 → 反驳 → 再审查 流转
|
||||
|
||||
### 6.4 审查协议注册表 ❌ **未实现**
|
||||
|
||||
**设计**(architecture-v2.6 §9.4):
|
||||
- `review_protocols/` 目录(plan_review.yaml / output_review.yaml 等)
|
||||
- 四维定义(审查维度/方法/多视角/对抗性指令)
|
||||
|
||||
**代码实际**:`review_protocols/` 目录不存在。
|
||||
|
||||
### 6.5 反驳权 ⚠️ **部分实现**
|
||||
|
||||
**设计**:分级触发(critical/major → spawn 反驳;minor → 自然修改;approved → 跳过)。
|
||||
|
||||
**代码实际**:`RebuttalManager` 存在但跳过条件/触发条件的分级逻辑未完整。
|
||||
|
||||
---
|
||||
|
||||
## 7. 上下文管理
|
||||
|
||||
### 7.1 Bootstrap Builder ✅ **已实现**
|
||||
|
||||
**文件**: `bootstrap.py`(7631 bytes)
|
||||
|
||||
**实际 L2 层结构**:
|
||||
|
||||
| 层 | 设计 | 代码 | 标记 |
|
||||
|----|------|------|------|
|
||||
| L2a 操作规范 | role template | `_load_template(f"{role}.md")` | ⚠️ prompt_templates 目录不存在 |
|
||||
| L2b 项目背景 | project_context | `_format_project_context` | ✅ |
|
||||
| L2c 任务上下文 | task_context | `_format_task_context` | ✅ |
|
||||
| L2d 前序产出 | depends_on outputs | `_format_depends_on` | ✅ |
|
||||
| L2e Guardrail 规则 | guardrails.yaml | 代码有传入参数但调用方未注入 | ⚠️ |
|
||||
| L2f 审查协议 | review_protocols/ | 代码有传入参数但目录不存在 | ❌ |
|
||||
| L2g 经验注入 | experiences 表 | `_format_experiences` | ⚠️ 未接入自动沉淀 |
|
||||
| L3 Skill descriptions | skills/*.json | `_format_skills` | ⚠️ skills 目录为空 |
|
||||
|
||||
### 7.2 Context 预算
|
||||
|
||||
**设计**(architecture-v2.6 §11.3):总计 35K~60K tokens。
|
||||
|
||||
**代码实际**:`max_tokens=4096`(远小于设计预算)。
|
||||
|
||||
### 7.3 prompt_templates 目录 ❌ **未实现**
|
||||
|
||||
**设计**:每个 role 一个模板(executor.md / reviewer.md / planner.md / pangtong.md)。
|
||||
|
||||
**代码实际**:`prompt_templates/` 目录不存在。`_load_template` 返回 None。
|
||||
|
||||
### 7.4 Agent spawn 消息
|
||||
|
||||
**实际消息构建**:`spawner.build_spawn_message()` — 拼装黑板 API 信息 + Mail prompt。
|
||||
|
||||
**缺失**:未使用 `BootstrapBuilder.build()` 的完整四层构建。
|
||||
|
||||
---
|
||||
|
||||
## 8. 前端
|
||||
|
||||
### 8.1 已实现组件 ✅
|
||||
|
||||
| 组件 | 文件 | 状态 |
|
||||
|------|------|------|
|
||||
| EdictBoard(任务看板) | EdictBoard.tsx | ✅ |
|
||||
| TaskModal(任务详情) | TaskModal.tsx | ✅ |
|
||||
| MailPanel(飞鸽传书) | MailPanel.tsx | ✅ |
|
||||
| CourtCeremony(朝堂议政) | CourtCeremony.tsx | ✅ |
|
||||
| MonitorPanel(监控面板) | MonitorPanel.tsx | ✅ |
|
||||
| MorningPanel(晨会) | MorningPanel.tsx | ✅ |
|
||||
| NotificationCenter | NotificationCenter.tsx | ✅ |
|
||||
| GlobalSearch | GlobalSearch.tsx | ✅ |
|
||||
| Toaster | Toaster.tsx | ✅ |
|
||||
| SettingsPanel | SettingsPanel.tsx | ✅ |
|
||||
| SessionsPanel | SessionsPanel.tsx | ✅ |
|
||||
| SkillsConfig | SkillsConfig.tsx | ✅ |
|
||||
| ConfirmDialog | ConfirmDialog.tsx | ✅ |
|
||||
|
||||
### 8.2 已实现但代码已回滚的组件
|
||||
|
||||
| 组件 | 文件 | 状态 |
|
||||
|------|------|------|
|
||||
| ArtifactPanel | ArtifactPanel.tsx | ⚠️ 文件存在但 M3 未集成 |
|
||||
| CheckpointPanel | CheckpointPanel.tsx | ⚠️ 文件存在但 M3 未集成 |
|
||||
|
||||
### 8.3 前端架构
|
||||
|
||||
- React + TypeScript + Vite
|
||||
- Zustand 状态管理(store.ts)
|
||||
- Tailwind CSS
|
||||
- SSE 实时推送
|
||||
|
||||
### 8.4 v2.8 设计要求 vs 实际
|
||||
|
||||
| 设计要求 | 实际 | 标记 |
|
||||
|---------|------|------|
|
||||
| 筛选栏两行布局 | 部分实现 | ⚠️ |
|
||||
| 卡片快捷按钮 | 已实现 | ✅ |
|
||||
| 项目下拉移入筛选栏 | 已实现 | ✅ |
|
||||
| 状态筛选全覆盖(11 状态) | 已实现 | ✅ |
|
||||
| 归档机制 | 前端有,后端 DDL 缺字段 | ⚠️ |
|
||||
|
||||
---
|
||||
|
||||
## 9. Mail 系统
|
||||
|
||||
### 9.1 Mail Tab ✅ **已实现**
|
||||
|
||||
**后端**(`mail_routes.py`):
|
||||
- `GET ""` — 列表(支持 from/status/unread 过滤)
|
||||
- `GET /agents/list` — Agent 列表
|
||||
- `GET /summary` — 未读/总数
|
||||
- `GET /{mail_id}` — 详情
|
||||
- `POST ""` — 发送
|
||||
- `PATCH /{mail_id}` — 更新(标记已读等)
|
||||
|
||||
**前端**(`MailPanel.tsx`):三栏布局。
|
||||
|
||||
### 9.2 Mail 设计模式
|
||||
|
||||
- Mail = `_mail` 虚拟 Project
|
||||
- 每封 Mail = 一个 Task(`must_haves` JSON 存 from/type/is_read/conversation_id)
|
||||
- `inform` 类型自动标记 done
|
||||
|
||||
### 9.3 已知问题
|
||||
|
||||
| 问题 | 标记 |
|
||||
|------|------|
|
||||
| list_mail from 过滤在内存层(量大时性能) | ⚠️ OBS-22 |
|
||||
| send_mail from 字段冗余(assigned_by + must_haves.from) | ⚠️ OBS-25 |
|
||||
| polling 不刷新 Mail | ⚠️ OBS-26 |
|
||||
| inform 类型邮件超时重试 | ⚠️ MEMORY 记录 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 经验沉淀
|
||||
|
||||
### 10.1 Experience Store ✅ **已实现**
|
||||
|
||||
**文件**: `experience.py`(9590 bytes)
|
||||
|
||||
**功能**:
|
||||
- ✅ CRUD(add / get / list_all / search / delete / count)
|
||||
- ✅ 分类(ExperienceCategory)
|
||||
- ✅ 标签(experience_tags 表)
|
||||
- ✅ JSON 文件持久化
|
||||
|
||||
### 10.2 经验闭环 ⚠️ **部分实现**
|
||||
|
||||
**设计**(课题6 DISCOVER→DISTILL→APPLY→IMPROVE):
|
||||
|
||||
| 阶段 | 设计 | 代码 | 标记 |
|
||||
|------|------|------|------|
|
||||
| DISCOVER | 任务完成后自动提取经验 | ❌ 无自动触发 | ❌ |
|
||||
| DISTILL | 经验蒸馏(阈值触发) | ⚠️ Store 存在但无蒸馏逻辑 | ❌ |
|
||||
| APPLY | Bootstrap 注入经验 | ✅ `_format_experiences` | ⚠️ |
|
||||
| IMPROVE | Skill 升级 | ❌ | ❌ |
|
||||
|
||||
---
|
||||
|
||||
## 11. Guardrail 体系
|
||||
|
||||
### 11.1 Guardrail Engine ✅ **已实现**
|
||||
|
||||
**文件**: `guardrails.py`(5165 bytes)+ `guardrails.yaml`
|
||||
|
||||
**六条安全红线**:
|
||||
|
||||
| 规则 | 严重级别 | 动作 | 标记 |
|
||||
|------|---------|------|------|
|
||||
| 实盘交易拦截 | critical | block_and_notify | ✅ |
|
||||
| 数据删除拦截 | critical | block_and_notify | ✅ |
|
||||
| 系统配置变更拦截 | critical | block_and_notify | ✅ |
|
||||
| 大额 Token 消耗 | warning | pause_and_notify | ✅ |
|
||||
| Agent 不受控行为 | critical | terminate_and_escalate | ⚠️ TODO |
|
||||
| 连续失败 | warning | pause_and_escalate | ✅ |
|
||||
|
||||
**代码实现**:
|
||||
- ✅ `check_task()` — 任务级模式匹配
|
||||
- ✅ `check_token_usage()` — Token 阈值
|
||||
- ✅ `check_consecutive_failure()` — 连续失败
|
||||
|
||||
### 11.2 设计差异
|
||||
|
||||
| 设计 | 代码 | 标记 |
|
||||
|------|------|------|
|
||||
| L1 机械+脚本验证 | 只有基础存在性检查,无 verification_commands | ⚠️ |
|
||||
| L2 AI 轻量检查 | 无 subagent 检查 | ❌ |
|
||||
| L3 安全红线 | GuardrailEngine 已实现 | ✅ |
|
||||
| review_protocols/ YAML | 目录不存在 | ❌ |
|
||||
| 输出型 guardrails(per task_type) | guardrails.yaml 只有全局红线 | ⚠️ |
|
||||
|
||||
---
|
||||
|
||||
## 12. 事件驱动
|
||||
|
||||
### 12.1 Inbox JSONL ✅ **已实现**
|
||||
|
||||
**文件**: `inbox.py`
|
||||
|
||||
- ✅ 文件监听 + JSONL 格式
|
||||
- ✅ 多事件类型
|
||||
- ✅ 异步回调
|
||||
|
||||
### 12.2 事件类型 ✅ **已实现**
|
||||
|
||||
events 表记录所有状态变更。
|
||||
|
||||
SSE 推送实时通知前端。
|
||||
|
||||
### 12.3 设计 vs 实际
|
||||
|
||||
| 设计 | 实际 | 标记 |
|
||||
|------|------|------|
|
||||
| Inbox 加速 Ticker(mini-tick) | InboxWatcher 运行但未与 Ticker 集成 | ⚠️ |
|
||||
| 启动全量扫描 | Ticker 首次 tick 扫描所有任务 | ✅ |
|
||||
| NODE_AFTER_EXECUTE Hook | 不存在 Hook 机制 | ❌ |
|
||||
| Shadow Checkpoint Hook | 无 | ❌ |
|
||||
|
||||
---
|
||||
|
||||
## 13. 多项目支持
|
||||
|
||||
### 13.1 Project Registry ✅ **已实现**
|
||||
|
||||
- ✅ 自动扫描 `sanguo_*` 目录
|
||||
- ✅ per-project blackboard.db
|
||||
- ✅ registry.db 全局索引
|
||||
- ✅ CRUD + archive + discover
|
||||
|
||||
### 13.2 设计差异
|
||||
|
||||
| 设计(课题11) | 实际 | 标记 |
|
||||
|---------------|------|------|
|
||||
| per-project 线程并发 | Ticker 串行 tick 所有 project | ❌ |
|
||||
| 全局 LLM 信号量 | Counter 有全局限制但无信号量 | ⚠️ |
|
||||
| per-agent 互斥锁 | Counter per-agent 限制 | ✅ |
|
||||
| 跨项目 bootstrap 注入 | build_for_task 不支持跨项目 | ❌ |
|
||||
| Worktree 物理隔离 | 无 | ❌ |
|
||||
|
||||
---
|
||||
|
||||
## 14. 状态机
|
||||
|
||||
### 14.1 完整状态定义 ✅ **已实现**
|
||||
|
||||
11 个状态:`pending, claimed, working, review, paused, escalated, waiting_human, done, failed, blocked, cancelled`
|
||||
|
||||
### 14.2 状态转换矩阵
|
||||
|
||||
**代码实际**(`db.py VALID_TRANSITIONS`):
|
||||
|
||||
```python
|
||||
VALID_TRANSITIONS = {
|
||||
"pending": {"claimed", "cancelled"},
|
||||
"claimed": {"working", "paused", "pending", "cancelled"},
|
||||
"working": {"review", "blocked", "failed", "paused", "escalated", "waiting_human", "cancelled"},
|
||||
"paused": {"working", "cancelled"},
|
||||
"review": {"done", "pending", "failed", "escalated", "waiting_human", "cancelled"},
|
||||
"blocked": {"pending", "escalated", "cancelled"},
|
||||
"failed": {"pending", "escalated", "cancelled"},
|
||||
"escalated": {"working", "pending", "cancelled"},
|
||||
"waiting_human": {"working", "done", "cancelled"},
|
||||
"done": set(), # 终态
|
||||
"cancelled": set(), # 终态
|
||||
}
|
||||
```
|
||||
|
||||
### 14.3 差异
|
||||
|
||||
| 设计(v3.0-router-refactor §5.6) | 代码实际 | 标记 |
|
||||
|-----------------------------------|---------|------|
|
||||
| cancelled 可重启动(→pending) | cancelled 是终态,无出口 | 🔀 |
|
||||
| review 可暂停 | review 转换无 paused | ⚠️ |
|
||||
| paused 恢复到暂停前状态 | `resumed_from` 字段存在 | ⚠️ |
|
||||
|
||||
---
|
||||
|
||||
## 15. 待实现项汇总(原则 2/3)
|
||||
|
||||
### 15.1 原则 2:PRD ✅ + 代码 ❌ + 设计 ❌
|
||||
|
||||
| # | PRD 条目 | 说明 |
|
||||
|---|---------|------|
|
||||
| P2-1 | PRD §10.1 六条红线之"Agent 不受控行为" | guardrails.yaml 有定义但代码 TODO |
|
||||
| P2-2 | PRD B4 持续学习闭环 | 经验沉淀闭环四阶段只实现存储 |
|
||||
|
||||
### 15.2 原则 3:设计 ✅ + PRD ✅ + 代码 ❌
|
||||
|
||||
| # | 设计文档 | 功能 | 来源 |
|
||||
|---|---------|------|------|
|
||||
| P3-1 | v3.0-router-refactor | 广播认领路径替代 Daemon 决策 | §3 |
|
||||
| P3-2 | architecture-v2.6 §9.4 | 审查协议注册表(review_protocols/) | §9.4 |
|
||||
| P3-3 | architecture-v2.6 §15.1 | Verification Commands(L1 脚本验证) | 借鉴1 |
|
||||
| P3-4 | architecture-v2.6 §15.1 | Runaway Guard(max_ticks) | 借鉴3 |
|
||||
| P3-5 | architecture-v2.6 §15.1 | Shadow Checkpoint(产出 git commit) | 借鉴5 |
|
||||
| P3-6 | architecture-v2.6 §9.9 | 对抗辩论模式(high 风险任务) | §9.10 |
|
||||
| P3-7 | v2.7-subtask-model | 跨项目 bootstrap 注入 | §2.4 |
|
||||
| P3-8 | architecture-v2.6 §11 | SkillRouter 检索 | §12 待推进 |
|
||||
| P3-9 | architecture-v2.6 §12 | 课题11 多项目线程并发 | topic11 |
|
||||
| P3-10 | v2.8-executor-prompt-design | prompt_templates 四层注入 | 全文 |
|
||||
| P3-11 | v2.8-state-enhancement | Checkpoint 三种类型 | §4 |
|
||||
| P3-12 | v2.8-state-enhancement | Artifact 成果物面板 | §5 |
|
||||
| P3-13 | architecture-v2.6 §5.1 | Handoff Comment schema 校验 | §5.1 |
|
||||
| P3-14 | architecture-v2.6 §9.4 | Investigation Protocol 五阶段 | §9.4 |
|
||||
|
||||
---
|
||||
|
||||
## 16. PRD 新增建议(原则 4/5)
|
||||
|
||||
### 16.1 原则 4:调研有但 PRD 没有
|
||||
|
||||
| # | 调研来源 | 功能 | 建议 |
|
||||
|---|---------|------|------|
|
||||
| R4-1 | pipeline-architecture-research.md | Pipeline 多执行模式(parallel/loop/saga/interactive) | PRD 3.1 新增 Pipeline 执行模式条目 |
|
||||
| R4-2 | spawner-monitor-design.md | spawn 前检查 + 假死复活术 | PRD 3.1 补充进程管理策略 |
|
||||
| R4-3 | counter-lifecycle-fix v2.1 | per (agent, session) 粒度三层控制 | PRD 3.1 补充并发控制模型 |
|
||||
|
||||
### 16.2 原则 5:代码有但 PRD/设计没有
|
||||
|
||||
| # | 代码位置 | 功能 | 判断 |
|
||||
|---|---------|------|------|
|
||||
| G5-1 | mail_routes.py | Mail 系统(PRD §2.6 有"通信"但无 Mail 专属条目) | PRD 3.1 新增 Mail 条目 |
|
||||
| G5-2 | sse.py | SSE 实时推送 | 设计有(topic9),PRD 未明确 |
|
||||
| G5-3 | checkpoint_routes.py | Checkpoint API 路由 | 设计有(M3),PRD 未明确 |
|
||||
| G5-4 | task_attempts 表 | 任务尝试记录 | 设计无专门条目,补充 PRD |
|
||||
|
||||
---
|
||||
|
||||
## 17. 设计矛盾记录(原则 6)
|
||||
|
||||
### 6.1 广播认领 vs 强制分配
|
||||
|
||||
- **PRD B1**:"AI 参与每个决策层" → Agent 自主认领
|
||||
- **v3.0-router-refactor**:明确指出 `_dispatch_pending` 违背"Agent 决策"原则
|
||||
- **代码实际**:仍走 Router 决定 → 强制 claimed
|
||||
- **结论**:以 PRD 为准,v3.0 需实施广播认领
|
||||
|
||||
### 6.2 escalated 字段 vs 状态
|
||||
|
||||
- **v2.8-state-enhancement**:`escalated` 应为独立状态,废弃布尔字段
|
||||
- **代码实际**:tasks 表有 `escalated INTEGER DEFAULT 0`(布尔)+ `status='escalated'`(状态)共存
|
||||
- **结论**:以 v2.8 设计为准,布尔字段做向后兼容
|
||||
|
||||
### 6.3 Bootstrap 4096 vs 设计预算 35K~60K
|
||||
|
||||
- **设计**(§11.3):上下文预算 35K~60K tokens
|
||||
- **代码实际**:`max_tokens=4096`
|
||||
- **结论**:4096 偏小,需调大。但实际 BootstrapBuilder 未被主路径调用,差距暂无影响
|
||||
|
||||
### 6.4 cancelled 终态 vs 可重启
|
||||
|
||||
- **v3.0-router-refactor §5.6**:cancelled 可重启动(→pending)
|
||||
- **代码实际**:cancelled 是终态(`set()`)
|
||||
- **结论**:需确认 PRD 立场。当前代码 cancelled 不可逆
|
||||
|
||||
### 6.5 Mail 完全退役 vs Mail Tab 存在
|
||||
|
||||
- **architecture-v2.6 §8**:"Sanguo Mail: 退役"
|
||||
- **代码实际**:Mail Tab 完整实现(mail_routes.py + MailPanel.tsx)
|
||||
- **结论**:Mail 在 v2.7 后重新引入为"飞鸽传书"功能,与 v2.6 的"退役"不矛盾(v2.6 指的是旧版 Sanguo Mail 服务,新版是黑板内的 Mail Tab)
|
||||
|
||||
---
|
||||
|
||||
## 18. 技术选型
|
||||
|
||||
| 需求 | 方案 | 来源 |
|
||||
|------|------|------|
|
||||
| 共享状态 | SQLite WAL + per-project DB | Hermes / Network-AI |
|
||||
| 事件驱动 | Tick 30s + Inbox JSONL | open-multi-agent |
|
||||
| 上下文传递 | L0~L3 四层注入 | Claude Code / GSD |
|
||||
| 进程管理 | openclaw agent + subprocess.Popen | OpenClaw 原生 |
|
||||
| 并发控制 | Counter 三层信号量 | 自研 |
|
||||
| 前端 | React + TypeScript + Vite + Tailwind + Zustand | v1.0 技术栈 |
|
||||
| 实时推送 | SSE (EventSource) | v2.0 新增 |
|
||||
| 配置 | YAML (default.yaml + guardrails.yaml) | 简单可靠 |
|
||||
| 安全红线 | GuardrailEngine + YAML 规则 | PRD §10.1 |
|
||||
|
||||
---
|
||||
|
||||
## 19. 代码规模统计
|
||||
|
||||
| 模块 | 文件数 | 总行数(约) |
|
||||
|------|--------|------------|
|
||||
| daemon/ | 14 | ~2500 |
|
||||
| blackboard/ | 5 | ~1400 |
|
||||
| api/ | 6 | ~800 |
|
||||
| cli/ | 2 | ~500 |
|
||||
| frontend/src/ | ~28 | ~5000 |
|
||||
| config/ | 2 | ~120 |
|
||||
| **总计** | ~57 | **~10320** |
|
||||
|
||||
---
|
||||
|
||||
## 20. 关键决策记录
|
||||
|
||||
| 决策 | 结论 | 来源 |
|
||||
|------|------|------|
|
||||
| Card 层去留 | 回滚,用 Task 自引用 | v2.7-subtask-model |
|
||||
| SubTask 表 | 不建,复用 parent_task | v2.7-subtask-model |
|
||||
| 路由方式 | 广播认领(待实施) | v3.0-router-refactor |
|
||||
| LLMDriver | 已移除 | v3.0-router-refactor |
|
||||
| Mail | 重新引入为 Tab | v2.7-subtask-model |
|
||||
| Checkpoint | 设计完成,代码回滚待重新实施 | v2.8-state-enhancement |
|
||||
| Bootstrap | 四层构建器存在但未接入主路径 | v2.8-executor-prompt-design |
|
||||
Reference in New Issue
Block a user