auto-sync: 2026-05-16 12:08:04

This commit is contained in:
cfdaily
2026-05-16 12:08:04 +08:00
parent ee2380bb90
commit 3b8f1365b0
+167 -2
View File
@@ -1797,9 +1797,19 @@ moziplus 同此模式:一个 SQLite 黑板、一个 Daemon 进程、Tick 扫
| 课题10 | 上下文管理 | — | ⏸️ 暂缓 |
| 课题11 | 用户级多项目 | 参考优秀实践给方案提案 | 📋 待做 |
### 调研中
### 潜在课题(7项目调研衍生)
- 7 个新项目调研(Claude Squad / Superset Terminal / OpenCode / claude-goal / Cline / Aider / DeepSeek-TUI
| 课题 | 来源 | 内容 | 优先级 |
|------|------|------|--------|
| 节点级模型策略 | Aider architect/editor/weak 三层分工 | 审查节点用强模型、执行节点用快模型,成本与质量平衡 | P2 |
| 信任分级系统 | DeepSeek-TUI Plan/Agent/YOLO 三级 | Dashboard 按信任等级展示不同操作按钮 | P2 |
| Worktree 项目隔离 | Superset + Claude Squad | 课题11多项目时的物理隔离方案 | P1(与课题11一起设计) |
### 已完成调研
- ✅ 7 个新项目调研(Claude Squad / Superset Terminal / OpenCode / claude-goal / Cline / Aider / DeepSeek-TUI
- 综合报告:`docs/research/research-seven-projects-synthesis.md`
- 详细报告:`docs/research/research-batch{1,2,3}-*.md`
### 12.2 开发启动条件
@@ -1847,3 +1857,158 @@ moziplus 同此模式:一个 SQLite 黑板、一个 Daemon 进程、Tick 扫
| 黑板膨胀(大量评论/产出)| 低 | 定期 archive + agent 只读最近 N 条 |
| Agent 不知道该做什么 | 中 | Skill 指导 + 庞统 plan 评论 + daemon 消息含上下文 |
| Sanguo Mail 退役后的系统通知 | 低 | 黑板 system 类型任务替代 |
---
## 15. 7项目调研结论与设计借鉴
> **调研日期**: 2026-05-16
> **调研范围**: Claude Squad / Superset Terminal / OpenCode / claude-goal / Cline / Aider / DeepSeek-TUI
> **详细报告**: `docs/research/research-seven-projects-synthesis.md`
### 15.1 已纳入设计的借鉴点
#### 借鉴1Guardrail 验证脚本层(纳入课题3)
**来源**: Aider lint→test→commit 质量闭环
**当前设计**topic3 方案 阶段2):
```
L1 机械检查(文件存在、JSON格式)→ 不通过直接打回
L2 轻量 AI 检查(Schema校验)→ 不通过写 observation
L3 安全红线(tripwire)→ 立即中断
```
**增强后**L1 增加验证脚本层
```
L1 机械检查 + 验证脚本
├── 文件存在性检查(原有)
├── JSON 格式检查(原有)
└── 🆕 verification_commands 执行(新增)
├── 任务 Plan 中声明的验证命令(如 pytest, flake8, mypy
├── 命令 exit 0 = 通过,非 0 = 打回
└── stdout/stderr 附在打回原因中
```
**黑板 Schema 变更**tasks 表新增 `verification_commands` JSON 字段
```json
{
"verification_commands": [
{"cmd": "pytest tests/test_foo.py -x", "description": "单元测试必须通过"},
{"cmd": "flake8 src/", "description": "代码规范检查"}
]
}
```
**触发时机**Daemon 检测到 output 写入 → 执行 Guardrail → L1 验证脚本 → 脚本失败则自动打回。
> 参考实践:Aider 的 lint→test→commit 是原子操作——验证不通过就不 commit。我们的 Guardrail 也是原子门控——验证不通过就不进入 review。
#### 借鉴2:对抗性审计映射(纳入课题3)
**来源**: claude-goal 三种审计模式(none/adversarial/double
**映射到 Guardrail L1/L2/L3**
| claude-goal 模式 | moziplus Guardrail | 触发条件 | 行为 |
|-----------------|-------------------|---------|------|
| none(跳过审计) | L1 only(机械+脚本) | low 风险任务 | 自动检查通过即完成 |
| adversarial(对抗审计) | L1 + L2AI审查) | standard 风险任务 | 一轮 AI 审查,通过/打回 |
| double(双重审计) | L1 + L2 + 反驳权 | high 风险任务 | 双轮审查 + 执行者可反驳 + 最多5轮 |
> claude-goal 的完成审计 6 步流程(还原交付物→对照表→检查证据→找缺失→继续/完成)对 Output Guard 的 AI 审查层有参考价值,但不硬编码步骤——AI 审查者按 Skill 指导灵活执行。
#### 借鉴3:防偏离改进(纳入课题3+4)
**来源**: claude-goal Stop Hook + 完成审计
**v2.0 的防偏离三层防线**
| 防线 | claude-goal 机制 | moziplus v2.0 对应 | 实现方式 |
|------|-----------------|-------------------|---------|
| 每轮重新注入目标 | Stop Hook 注入 `<objective>` | L2 引擎注入任务上下文 | Daemon spawn 时注入 truths + acceptance_criteria |
| 不信任 Agent 自述 | 完成审计 6 步(查证据) | Output Guard + Scope Guard | L1 验证脚本 + L2 AI 审查(prompt→artifact 对照) |
| Runaway Guard | 500 次续杯上限 | ❌ 当前缺失 | 新增:每个任务最大 tick 上限(配置项 `max_ticks`,默认 100 |
**新增设计**tasks 表增加 `max_ticks` 字段(默认 100)。Daemon 每次 tick 处理某任务时递增 `tick_count`,超过 `max_ticks` 时:
1. 自动暂停任务
2. 写入 system observation:“任务超过最大 tick 上限,可能陷入循环”
3. 通知用户决定继续/取消
#### 借鉴4:双重 Hook 机制(纳入 Daemon 设计)
**来源**: claude-goal 的 Claude Code Stop Hook + mozi v1 的 HookRegistry
**v2.0 双重 Hook 架构**
```
┌─────────────────────────────────────────┐
│ Layer 1: OpenClaw Hook(系统级) │
│ • Heartbeat(定时轮询,读 HEARTBEAT.md
│ • Webhook(HTTP 入口,外部事件触发) │
│ • Cron(定时任务) │
│ → 触发 Agent session 内行为 │
└─────────────────────────────────────────┘
↓ 事件到达
┌─────────────────────────────────────────┐
│ Layer 2: moziplus Hook(编排级) │
│ • NODE_AFTER_EXECUTE → 触发 Guardrail │
│ • NODE_ON_SUCCESS → 触发经验沉淀 │
│ • TASK_AFTER_COMPLETE → 触发 Scope Guard │
│ • CONCLUSION_AFTER_PARSE → 写入黑板 │
│ → 触发编排层业务逻辑 │
└─────────────────────────────────────────┘
```
**mozi v1 已有 HookRegistry**(20 个 hook 点,覆盖任务/节点/结论/路由全生命周期),v2.0 继承并精简:
- v1 的 HookPoint 枚举 → v2 的 Daemon event handler
- v1 的 priority + stop_propagation → v2 保留(Hook 链可控)
- v1 的两级失败隔离(关键型暂停/辅助型跳过)→ v2 保留
- 新增:Guardrail 验证脚本作为 NODE_AFTER_EXECUTE 的默认 Hook
**与 claude-goal 的对比**
| 维度 | claude-goal | moziplus v2.0 |
|------|-----------|-------------|
| Hook 注册位置 | Claude Code settings.json | Daemon HookRegistry |
| Hook 触发点 | Agent Stop 事件 | 节点完成/任务完成/产出写入 |
| Hook 实现 | Python 脚本 | Daemon event handler + 可插拔 Hook |
| 防偏离手段 | 拦截停止+注入目标 | L2注入上下文+Guardrail验证+Runaway Guard |
#### 借鉴5Shadow Checkpoint(纳入课题6 经验沉淀)
**来源**: Cline Shadow Git Checkpoint
**设计**:每次 Agent 产出写入黑板时,Daemon 自动对产出目录做 git commit(带 agent_id + task_id + timestamp tag)。
- **与课题4的关系**:不依赖课题4。Shadow Checkpoint 是 Daemon 层行为(产出写入后触发),课题4是 Agent spawn 时的上下文注入。两者独立。
- **与课题6的关系**Shadow Checkpoint 的变更历史是经验蒸馏的输入(课题6 DISCOVER 阶段可以 diff 两个 checkpoint 看Agent改了什么)
- **回滚能力**:用户可以在 Dashboard 上选择任意 checkpoint 一键回滚
- **存储开销**:git commit 增量存储,开销可控
**实现**:在 `NODE_AFTER_EXECUTE` Hook 中增加 git checkpoint 逻辑。
### 15.2 经评估暂不纳入的借鉴点
#### Blackboard Map(按需触发,不预设)
**来源**: Aider Repo Map
**结论**:当前单个任务黑板信息 ~1000-1500 tokens(§11.1 测算),10 个任务全量注入 ~1-1.5 万 tokens,远小于 128K。**现阶段不需要 Blackboard Map**。
**触发条件**(达到以下任一时启动设计):
- 单个任务黑板信息超过 5000 tokens
- 并行任务数超过 15 个
- Agent spawn 时注入上下文超过 10K tokens
- 或者 L2 注入需要做精准裁剪(只取关联子图而非全量)
**预留设计**:当需要时,基于黑板 comments/outputs/decisions 的拓扑关系构建图索引,Agent 按任务 ID 只读关联子图。
### 15.3 技术选型更新
| 需求 | 原参考 | 新增参考 | 我们的方案 |
|------|--------|---------|----------|
| 质量门控 | Hermes 幻觉门控 | Aider lint→test→commit | L1 机械+脚本 → L2 AI → L3 红线 |
| 防偏离 | 无 | claude-goal Stop Hook + 完成审计 | L2 注入 + Guardrail + Runaway Guard |
| 产出追溯 | 无 | Cline Shadow Git | NODE_AFTER_EXECUTE Hook 自动 git commit |
| Hook 机制 | mozi v1 HookRegistry | claude-goal Stop Hook + OpenClaw Heartbeat/Webhook | 双重 Hook(系统级+编排级) |
| 多项目隔离 | 无 | Superset Worktree | 课题11 中设计(Worktree 物理隔离) |