Skip to content

Latest commit

 

History

History
1599 lines (1332 loc) · 53.2 KB

File metadata and controls

1599 lines (1332 loc) · 53.2 KB

䞉省六郚任务分发流蜬䜓系 · 䞚务䞎技术架构

本文档诊细阐述「䞉省六郚」项目劂䜕从䞚务制床讟计到代码实现细节完敎倄理倍杂倚Agent协䜜的任务分发䞎流蜬。这是䞀䞪制床化的AI倚Agent框架而非䌠统的自由讚论匏协䜜系统。

文档抂览囟

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
䞚务层垝囜制床 (Imperial Governance Model)
  ├─ 分权制衡皇䞊 → 倪子 → 䞭乊 → 闹例 → 尚乊 → 六郚
  ├─ 制床纊束䞍可越级、状态䞥栌递进、闚䞋必审议
  └─ 莚量保障可封驳反工、实时可观测、玧急可干预
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
技术层OpenClaw倚Agent猖排 (Multi-Agent Orchestration)
  ├─ 状态机9䞪状态Pending → Taizi → Zhongshu → Menxia → Assigned → Doing/Next → Review → Done/Cancelled
  ├─ 数据融合flow_log + progress_log + session JSONL → unified activity stream
  ├─ 权限矩阵䞥栌的subagent调甚权限控制
  └─ 调床层自劚掟发、超时重试、停滞升级、自劚回滚
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
观测层React 看板 + 实时API (Dashboard + Real-time Analytics)
  ├─ 任务看板10䞪视囟面板党郚/按状态/按郚闚/按䌘先级等
  ├─ 掻劚流59条/任务的混合掻劚记圕思考过皋、工具调甚、状态蜬移
  └─ 圚线状态Agent 实时节点检测 + 心跳喚醒机制
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📚 第䞀郚分䞚务架构

1.1 垝囜制床分权制衡的讟计哲孊

栞心理念

䌠统的倚Agent框架劂CrewAI、AutoGen采甚**"自由协䜜"暡匏**

  • Agent自䞻选择协䜜对象
  • 框架仅提䟛通信通道
  • 莚量控制完党䟝赖Agent智胜
  • 问题容易出现Agent盞互制造假数据、重倍工䜜、方案莚量无保障

䞉省六郚采甚**"制床化协䜜"暡匏**暡仿叀代垝囜官僚䜓系

              皇侊
              (User)
               │
               ↓
             倪子 (Taizi)
        [分拣官、消息接入总莟莣]
      ├─ 识别这是旚意还是闲聊
      ├─ 执行盎接回倍闲聊 || 建立任务→蜬䞭乊
      └─ 权限只胜调甚 䞭乊省
               │
               ↓
           䞭乊省 (Zhongshu)
      [规划官、方案起草总莟莣]
      ├─ 接旚后分析需求
      ├─ 拆解䞺子任务todos
      ├─ 调甚闚䞋省审议 OR 尚乊省咚询
      └─ 权限只胜调甚 闹例 + 尚乊
               │
               ↓
           闹例省 (Menxia)
        [审议官、莚量把握人]
      ├─ 审查䞭乊方案可行性、完敎性、风险
      ├─ 准奏 OR 封驳含修改建议
      ├─ 若封驳 → 返回䞭乊修改 → 重新审议最倚3蜮
      └─ 权限只胜调甚 尚乊 + 回调䞭乊
               │
         (✅ 准奏)
               │
               ↓
           尚乊省 (Shangshu)
        [掟发官、执行总指挥]
      ├─ 接到准奏方案
      ├─ 分析掟发给哪䞪郚闚
      ├─ 调甚六郚瀌/户/兵/刑/å·¥/吏执行
      ├─ 监控各郚进床 → 汇总结果
      └─ 权限只胜调甚 六郚䞍胜越权调䞭乊
               │
               ├─ 瀌郚 (Libu)      - 文档猖制官
               ├─ 户郚 (Hubu)      - 数据分析官
               ├─ 兵郚 (Bingbu)    - 代码实现官
               ├─ 刑郚 (Xingbu)    - 测试审查官
               ├─ 工郚 (Gongbu)    - 基础讟斜官
               └─ 吏郚 (Libu_hr)   - 人力资源官
               │
         (各郚并行执行)
               ↓
           尚乊省·汇总
      ├─ 收集六郚结果
      ├─ 状态蜬䞺 Review
      ├─ 回调䞭乊省蜬报皇䞊
               │
               ↓
           䞭乊省·回奏
      ├─ 汇总现象、结论、建议
      ├─ 状态蜬䞺 Done
      └─ 回倍飞乊消息给皇䞊

制床的4倧保障

保障机制 实现细节 防技效果
制床性审栞 闚䞋省必审议所有䞭乊方案䞍可跳过 防止Agent胡乱执行确保方案具有可行性
分权制衡 权限矩阵谁胜调谁䞥栌定义 防止权力滥甚劂尚乊越权调䞭乊改方案
完党可观测 任务看板10䞪面板 + 59条掻劚/任务 实时看到任务卡圚哪、谁圚工䜜、工䜜状态劂䜕
实时可干预 看板内䞀键 stop/cancel/resume/advance 玧急情况劂发现Agent走错方向胜立即纠正

1.2 任务完敎流蜬流皋

流皋瀺意囟

stateDiagram-v2
[*] --> Pending: 皇䞊䞋旚
Pending --> Taizi: 倪子接旚
Taizi --> Zhongshu: 倪子蜬亀䞭乊
Zhongshu --> Menxia: 䞭乊提亀审议
Menxia --> Zhongshu: 闚䞋封驳(可倚次)
Menxia --> Assigned: 闚䞋准奏
Assigned --> Doing: 尚乊掟发执行
Doing --> Review: 各郚完成
Review --> Done: 皇䞊埡批通过
Review --> Menxia: 皇䞊芁求修改
Done --> [*]
Doing --> [*]: 手劚取消
Review --> [*]: 䞚务终止
Loading

具䜓关键路埄

✅ 理想路埄无阻滞4-5倩完成

DAY 1:
  10:00 - 皇䞊飞乊"䞺䞉省六郚猖写完敎自劚化测试方案"
          倪子接旚。state = Taizi, org = 倪子
          自劚掟发 taizi agent → 倄理歀旚意
  
  10:30 - 倪子分拣完毕。刀定䞺「工䜜旚意」非闲聊
          建任务 JJC-20260228-E2E
          flow_log 记圕"皇侊 → 倪子䞋旚"
          state: Taizi → Zhongshu, org: 倪子 → 䞭乊省
          自劚掟发 zhongshu agent

DAY 2:
  09:00 - 䞭乊省接旚。匀始规划
          汇报进展"分析测试需求拆解䞺单元/集成/E2E䞉层"
          progress_log 记圕"䞭乊省 匠䞉分需求"
          
  15:00 - 䞭乊省完成方案
          todos 快照需求分析✅、方案讟计✅、埅审议🔄
          flow_log 记圕"䞭乊省 → 闚䞋省方案提亀审议"
          state: Zhongshu → Menxia, org: 䞭乊省 → 闹例省
          自劚掟发 menxia agent

DAY 3:
  09:00 - 闚䞋省匀始审议
          进床汇报"现圚审查方案的完敎性和风险"
          
  14:00 - 闚䞋省审议完毕
          刀定"方案可行䜆猺倱 _infer_agent_id_from_runtime 凜数的测试"
          行䞺✅ 准奏 (垊修改建议)
          flow_log 记圕"闹例省 → 尚乊省✅ 准奏通过5条建议"
          state: Menxia → Assigned, org: 闹例省 → 尚乊省
          OPTIONAL䞭乊省收到建议䞻劚䌘化方案
          自劚掟发 shangshu agent

DAY 4:
  10:00 - 尚乊省接到准奏
          分析"该测试方案应掟给工郚+刑郚+瀌郚协力完成"
          flow_log 记圕"尚乊省 → 六郚掟发执行兵吏合䜜"
          state: Assigned → Doing, org: 尚乊省 → 兵郚+刑郚+瀌郚
          自劚掟发 bingbu/xingbu/libu 䞉䞪agent并行

DAY 4-5:
  (各郚并行执行)
  - 兵郚(bingbu)实现 pytest + unittest 测试框架
  - 刑郚(xingbu)猖写测试芆盖所有关键凜数
  - 瀌郚(libu)敎理测试文档和甚䟋诎明
  
  实时汇报hourly progress
  - 兵郚"✅ 已实现 16 䞪单元测试"
  - 刑郚"🔄 正圚猖写集成测试8/12 完成"
  - 瀌郚"等埅兵郚完成再写报告"

DAY 5:
  14:00 - 各郚完成
          state: Doing → Review, org: 兵郚 → 尚乊省
          尚乊省汇总"所有测试已完成通过率 98.5%"
          蜬回䞭乊省
          
  15:00 - 䞭乊省回奏皇䞊
          state: Review → Done
          暡板回倍飞乊含最终成果铟接和总结

❌ 挫折路埄含封驳和重试6-7倩

DAY 2 同䞊

DAY 3 [封驳场景]
  14:00 - 闚䞋省审议完毕
          刀定"方案䞍完敎猺少性胜测试 + 压力测试"
          行䞺🚫 封驳
          review_round += 1
          flow_log 记圕"闹例省 → 䞭乊省🚫 封驳需补充性胜测试"
          state: Menxia → Zhongshu  # 返回䞭乊修改
          自劚掟发 zhongshu agent重新规划

DAY 3-4
  16:00 - 䞭乊省收到封驳通知唀醒agent
          分析改进意见补充性胜测试方案
          progress"已敎合性胜测试需求修正方案劂䞋..."
          flow_log 记圕"䞭乊省 → 闚䞋省修订方案第2蜮审议"
          state: Zhongshu → Menxia
          自劚掟发 menxia agent

  18:00 - 闚䞋省重新审议
          刀定"✅ 本次通过"
          flow_log 记圕"闹例省 → 尚乊省✅ 准奏通过第2蜮"
          state: Menxia → Assigned → Doing
          后续同理想路埄...

DAY 7党郚完成比理想路埄晚1-2倩

1.3 任务规栌乊䞎䞚务契纊

Task Schema 字段诎明

{
  "id": "JJC-20260228-E2E",          // 任务党局唯䞀ID (JJC-日期-序号)
  "title": "䞺䞉省六郚猖写完敎自劚化测试方案",
  "official": "䞭乊什",              // 莟莣官职
  "org": "䞭乊省",                   // 圓前莟莣郚闚
  "state": "Assigned",               // 圓前状态见 _STATE_FLOW
  
  // ──── 莚量䞎纊束 ────
  "priority": "normal",              // 䌘先级critical/high/normal/low
  "block": "无",                     // 圓前阻滞原因劂"等埅工郚反銈"
  "reviewRound": 2,                  // 闚䞋审议第几蜮
  "_prev_state": "Menxia",           // 若被 stop记圕之前状态甚于 resume
  
  // ──── 䞚务产出 ────
  "output": "",                      // 最终任务成果URL/文件路埄/总结
  "ac": "",                          // Acceptance Criteria验收标准
  "priority": "normal",
  
  // ──── 流蜬记圕 ────
  "flow_log": [
    {
      "at": "2026-02-28T10:00:00Z",
      "from": "皇侊",
      "to": "倪子",
      "remark": "䞋旚䞺䞉省六郚猖写完敎自劚化测试方案"
    },
    {
      "at": "2026-02-28T10:30:00Z",
      "from": "倪子",
      "to": "䞭乊省",
      "remark": "分拣→䌠旚"
    },
    {
      "at": "2026-02-28T15:00:00Z",
      "from": "䞭乊省",
      "to": "闹例省",
      "remark": "规划方案提亀审议"
    },
    {
      "at": "2026-03-01T09:00:00Z",
      "from": "闹例省",
      "to": "䞭乊省",
      "remark": "🚫 封驳需补充性胜测试"
    },
    {
      "at": "2026-03-01T15:00:00Z",
      "from": "䞭乊省",
      "to": "闹例省",
      "remark": "修订方案第2蜮审议"
    },
    {
      "at": "2026-03-01T20:00:00Z",
      "from": "闹例省",
      "to": "尚乊省",
      "remark": "✅ 准奏通过第2蜮5条建议已采纳"
    }
  ],
  
  // ──── Agent 实时汇报 ────
  "progress_log": [
    {
      "at": "2026-02-28T10:35:00Z",
      "agent": "zhongshu",              // 汇报agent
      "agentLabel": "䞭乊省",
      "text": "已接旚。分析测试需求拟定䞉层测试方案...",
      "state": "Zhongshu",              // 汇报时的状态快照
      "org": "䞭乊省",
      "tokens": 4500,                   // 资源消耗
      "cost": 0.0045,
      "elapsed": 120,
      "todos": [                        // 埅办任务快照
        {"id": "1", "title": "需求分析", "status": "completed"},
        {"id": "2", "title": "方案讟计", "status": "in-progress"},
        {"id": "3", "title": "await审议", "status": "not-started"}
      ]
    },
    // ... 曎倚 progress_log 条目 ...
  ],
  
  // ──── 调床元数据 ────
  "_scheduler": {
    "enabled": true,
    "stallThresholdSec": 180,         // 停滞超过180秒自劚升级
    "maxRetry": 1,                    // 自劚重试最倚1次
    "retryCount": 0,
    "escalationLevel": 0,             // 0=无升级 1=闚䞋协调 2=尚乊协调
    "lastProgressAt": "2026-03-01T20:00:00Z",
    "stallSince": null,               // 䜕时匀始停滞
    "lastDispatchStatus": "success",  // queued|success|failed|timeout|error
    "snapshot": {
      "state": "Assigned",
      "org": "尚乊省",
      "note": "review-before-approve"
    }
  },
  
  // ──── 生呜呚期 ────
  "archived": false,                 // 是吊園档
  "now": "闚䞋省准奏移亀尚乊省掟发",  // 圓前实时状态描述
  "updatedAt": "2026-03-01T20:00:00Z"
}

䞚务契纊

契纊 含义 违反后果
䞍可越级 倪子只胜调䞭乊䞭乊只胜调闚䞋/尚乊六郚䞍胜对倖调甚 超权调甚被拒绝系统自劚拊截
状态单向递进 Pending → Taizi → Zhongshu → ... → Done䞍胜跳过或倒退 只胜通过 review_action(reject) 返回䞊䞀步
闚䞋必审 所有䞭乊提出的方案郜芁闚䞋省审议无法跳过 䞭乊䞍胜盎接蜬尚乊闚䞋必入
䞀旊Done无改 任务进入Done/Cancelled后䞍胜再修改状态 若需修改需芁创建新任务或取消后重新建
task_id唯䞀性 JJC-日期-序号 党局唯䞀同䞀倩同䞀任务䞍重倍建 看板防重自劚去重
资源消耗透明 每次进展汇报郜芁䞊报 tokens/cost/elapsed 䟿于成本栞算和性胜䌘化

🔧 第二郚分技术架构

2.1 状态机䞎自劚掟发

状态蜬移完敎定义

_STATE_FLOW = {
    'Pending':  ('Taizi',   '皇侊',    '倪子',    '埅倄理旚意蜬亀倪子分拣'),
    'Taizi':    ('Zhongshu','倪子',    '䞭乊省',  '倪子分拣完毕蜬䞭乊省起草'),
    'Zhongshu': ('Menxia',  '䞭乊省',  '闹例省',  '䞭乊省方案提亀闚䞋省审议'),
    'Menxia':   ('Assigned','闹例省',  '尚乊省',  '闚䞋省准奏蜬尚乊省掟发'),
    'Assigned': ('Doing',   '尚乊省',  '六郚',    '尚乊省匀始掟发执行'),
    'Next':     ('Doing',   '尚乊省',  '六郚',    '埅执行任务匀始执行'),
    'Doing':    ('Review',  '六郚',    '尚乊省',  '各郚完成进入汇总'),
    'Review':   ('Done',    '尚乊省',  '倪子',    '党流皋完成回奏倪子蜬报皇䞊'),
}

每䞪状态自劚关联 Agent ID见 _STATE_AGENT_MAP

_STATE_AGENT_MAP = {
    'Taizi':    'taizi',
    'Zhongshu': 'zhongshu',
    'Menxia':   'menxia',
    'Assigned': 'shangshu',
    'Doing':    None,      # 从 org 掚断六郚之䞀
    'Next':     None,      # 从 org 掚断
    'Review':   'shangshu',
    'Pending':  'zhongshu',
}

自劚掟发流皋

圓任务状态蜬移时通过 handle_advance_state() 或审批后台自劚执行掟发

1. 状态蜬移觊发掟发
   ├─ 查衚 _STATE_AGENT_MAP 埗到目标 agent_id
   ├─ 若是 Doing/Next从 task.org 查衚 _ORG_AGENT_MAP 掚断具䜓郚闚agent
   └─ 若无法掚断则跳过掟发劂 Done/Cancelled

2. 构造掟发消息针对性促䜿Agent立即工䜜
   ├─ taizi: "📜 皇䞊旚意需芁䜠倄理..."
   ├─ zhongshu: "📜 旚意已到䞭乊省请起草方案..."
   ├─ menxia: "📋 䞭乊省方案提亀审议..."
   ├─ shangshu: "📮 闚䞋省已准奏请掟发执行..."
   └─ 六郚: "📌 请倄理任务..."

3. 后台匂步掟发非阻塞
   ├─ spawn daemon thread
   ├─ 标记 _scheduler.lastDispatchStatus = 'queued'
   ├─ 检查 Gateway 进皋是吊匀启
   ├─ 运行 openclaw agent --agent {id} -m "{msg}" --deliver --timeout 300
   ├─ 重试最倚2次倱莥闎隔5秒退避
   ├─ 曎新 _scheduler 状态和错误信息
   └─ flow_log 记圕掟发结果

4. 掟发状态蜬移
   ├─ success: 立即曎新 _scheduler.lastDispatchStatus = 'success'
   ├─ failed: 记圕倱莥原因Agent 超时䞍䌚 block 看板
   ├─ timeout: 标记 timeout允讞甚户手劚重试 / 升级
   ├─ gateway-offline: Gateway 未启劚跳过歀次掟发后续可重试
   └─ error: 匂垞情况记圕堆栈䟛调试

5. 到蟟目标Agent的倄理
   ├─ Agent 从飞乊消息收到通知
   ├─ 通过 kanban_update.py 䞎看板亀互曎新状态/记圕进展
   └─ 完成工䜜后再次觊发掟发到䞋䞀䞪Agent

2.2 权限矩阵䞎Subagent调甚

权限定义openclaw.json 䞭配眮

{
  "agents": [
    {
      "id": "taizi",
      "label": "倪子",
      "allowAgents": ["zhongshu"]
    },
    {
      "id": "zhongshu",
      "label": "䞭乊省",
      "allowAgents": ["menxia", "shangshu"]
    },
    {
      "id": "menxia",
      "label": "闹例省",
      "allowAgents": ["shangshu", "zhongshu"]
    },
    {
      "id": "shangshu",
      "label": "尚乊省",
      "allowAgents": ["libu", "hubu", "bingbu", "xingbu", "gongbu", "libu_hr"]
    },
    {
      "id": "libu",
      "label": "瀌郚",
      "allowAgents": []
    },
    // ... 其他六郚同样 allowAgents = [] ...
  ]
}

权限检查机制代码层面

圚 dispatch_for_state() 之倖还有䞀套防埡性的权限检查

def can_dispatch_to(from_agent, to_agent):
    """检查 from_agent 是吊有权调甚 to_agent。"""
    cfg = read_json(DATA / 'agent_config.json', {})
    agents = cfg.get('agents', [])
    
    from_record = next((a for a in agents if a.get('id') == from_agent), None)
    if not from_record:
        return False, f'{from_agent} 䞍存圚'
    
    allowed = from_record.get('allowAgents', [])
    if to_agent not in allowed:
        return False, f'{from_agent} 无权调甚 {to_agent}允讞列衚{allowed}'
    
    return True, 'OK'

权限违反瀺䟋䞎倄理

场景 请求 结果 理由
正垞 䞭乊省 → 闚䞋省审议 ✅ 允讞 闚䞋圚䞭乊的 allowAgents äž­
违反 䞭乊省 → 尚乊省改方案 ❌ 拒绝 䞭乊只胜调闚䞋/尚乊䞍胜手工改尚乊工䜜
违反 工郚 → 尚乊省 "我完成了" ✅ 改状态 通过 flow_log 和 progress_log䞍是跚Agent调甚
违反 尚乊省 → 䞭乊省 "重新改方案" ❌ 拒绝 尚乊䞍圚闚䞋/䞭乊的 allowAgents äž­
防控 Agent 䌪造其他agent掟发 ❌ 拊截 API 层验证 HTTP 请求来源/筟名

2.3 数据融合progress_log + session JSONL

现象

圓任务执行时有䞉层数据源

1⃣ flow_log
   └─ 纯粹记圕状态蜬移Zhongshu → Menxia
   └─ 数据源任务 JSON 的 flow_log 字段
   └─ 来自Agent 通过 kanban_update.py flow 呜什䞊报

2⃣ progress_log
   └─ Agent 的实时工䜜汇报文本进展、todos快照、资源消耗
   └─ 数据源任务 JSON 的 progress_log 字段
   └─ 来自Agent 通过 kanban_update.py progress 呜什䞊报
   └─ 呚期通垞每30分钟或关键节点䞊报1次

3⃣ session JSONL新增
   └─ Agent 的内郚思考过皋thinking、工具调甚tool_result、对话历史user
   └─ 数据源~/.openclaw/agents/{agent_id}/sessions/*.jsonl
   └─ 来自OpenClaw框架自劚记圕Agent无需䞻劚操䜜
   └─ 呚期消息级别粒床最细

问题诊断

过去只靠 flow_log + progress_log 展现进展

  • ❌ 看䞍到Agent的具䜓思考过皋
  • ❌ 看䞍到每次工具调甚的结果
  • ❌ 看䞍到Agent䞭闎的对话历史
  • ❌ Agent 衚现出"黑盒状态"

䟋劂progress_log 记圕"正圚分析需求"䜆甚户看䞍到到底分析了什么。

解决方案Session JSONL 融合

圚 get_task_activity() 䞭新增融合逻蟑40行

def get_task_activity(task_id):
    # ... 前面代码同䞊 ...
    
    # ── 融合 Agent Session 掻劚thinking / tool_result / user──
    session_entries = []
    
    # 掻跃任务尝试按 task_id 粟确匹配
    if state not in ('Done', 'Cancelled'):
        if agent_id:
            entries = get_agent_activity(
                agent_id, limit=30, task_id=task_id
            )
            session_entries.extend(entries)
        
        # 也从盞关Agent获取
        for ra in related_agents:
            if ra != agent_id:
                entries = get_agent_activity(
                    ra, limit=20, task_id=task_id
                )
                session_entries.extend(entries)
    else:
        # 已完成任务基于关键词匹配
        title = task.get('title', '')
        keywords = _extract_keywords(title)
        if keywords:
            for ra in related_agents[:5]:
                entries = get_agent_activity_by_keywords(
                    ra, keywords, limit=15
                )
                session_entries.extend(entries)
    
    # 去重通过 at+kind 去重避免重倍
    existing_keys = {(a.get('at', ''), a.get('kind', '')) for a in activity}
    for se in session_entries:
        key = (se.get('at', ''), se.get('kind', ''))
        if key not in existing_keys:
            activity.append(se)
            existing_keys.add(key)
    
    # 重新排序
    activity.sort(key=lambda x: x.get('at', ''))
    
    # 返回时标记数据来源
    return {
        'activity': activity,
        'activitySource': 'progress+session',  # 新标记
        # ... 其他字段 ...
    }

Session JSONL 栌匏解析

从 JSONL 䞭提取的条目统䞀蜬换䞺看板掻劚条目

def _parse_activity_entry(item):
    """将 session jsonl 的 message 统䞀解析成看板掻劚条目。"""
    msg = item.get('message', {})
    role = str(msg.get('role', '')).strip().lower()
    ts = item.get('timestamp', '')
    
    # 🧠 Assistant 角色 - Agent思考过皋
    if role == 'assistant':
        entry = {
            'at': ts,
            'kind': 'assistant',
            'text': '...䞻回倍...',
            'thinking': '💭 Agent考虑到...',  # 内郚思绎铟
            'tools': [
                {'name': 'bash', 'input_preview': 'cd /src && npm test'},
                {'name': 'file_read', 'input_preview': 'dashboard/server.py'},
            ]
        }
        return entry
    
    # 🔧 Tool Result - 工具调甚结果
    if role in ('toolresult', 'tool_result'):
        entry = {
            'at': ts,
            'kind': 'tool_result',
            'tool': 'bash',
            'exitCode': 0,
            'output': '✓ All tests passed (123 tests)',
            'durationMs': 4500  # 执行时长
        }
        return entry
    
    # 👀 User - 人工反銈或对话
    if role == 'user':
        entry = {
            'at': ts,
            'kind': 'user',
            'text': '请实现测试甚䟋的匂垞倄理'
        }
        return entry

融合后的掻劚流结构

单䞪任务的59条掻劚流JJC-20260228-E2E 瀺䟋

kind    count  代衚事件
────────────────────────────────────────────────
flow      10   状态蜬移铟Pending→Taizi→Zhongshu→...
progress  11   Agent工䜜汇报"正圚分析"、"已完成"
todos     11   埅办任务快照进床曎新时每条
user       1   甚户反銈劂"需芁补充性胜测试"
assistant 10   Agent思考过皋💭 reasoning chain
tool_result 16   工具调甚记圕bash运行结果、API调甚结果
────────────────────────────────────────────────
总计      59   完敎工䜜蜚迹

看板展瀺时甚户可以

  • 📋 看流蜬铟了解任务圚哪䞪阶段
  • 📝 看 progress 了解Agent实时诎了什么
  • ✅ 看 todos 了解任务拆解和完成进床
  • 💭 看 assistant/thinking 了解Agent的思考过皋
  • 🔧 看 tool_result 了解每次工具调甚的结果
  • 👀 看 user 了解是吊有人工干预

2.4 调床系统超时重试、停滞升级、自劚回滚

调床元数据结构

_scheduler = {
    # 配眮参数
    'enabled': True,
    'stallThresholdSec': 180,         # 停滞倚久后自劚升级默讀180秒
    'maxRetry': 1,                    # 自劚重试次数0=䞍重试1=重试1次
    'autoRollback': True,             # 是吊自劚回滚到快照
    
    # 运行时状态
    'retryCount': 0,                  # 圓前已重试几次
    'escalationLevel': 0,             # 0=无升级 1=闚䞋协调 2=尚乊协调
    'stallSince': None,               # 䜕时匀始停滞的时闎戳
    'lastProgressAt': '2026-03-01T...',  # 最后䞀次获埗进展的时闎
    'lastEscalatedAt': '2026-03-01T...',
    'lastRetryAt': '2026-03-01T...',
    
    # 掟发远螪
    'lastDispatchStatus': 'success',  # queued|success|failed|timeout|gateway-offline|error
    'lastDispatchAgent': 'zhongshu',
    'lastDispatchTrigger': 'state-transition',
    'lastDispatchError': '',          # 错误堆栈劂有
    
    # 快照甚于自劚回滚
    'snapshot': {
        'state': 'Assigned',
        'org': '尚乊省',
        'now': '等埅掟发...',
        'savedAt': '2026-03-01T...',
        'note': 'scheduled-check'
    }
}

调床算法

每 60 秒运行䞀次 handle_scheduler_scan(threshold_sec=180)

FOR EACH 任务:
  IF state in (Done, Cancelled, Blocked):
    SKIP  # 终态䞍倄理
  
  elapsed_since_progress = NOW - lastProgressAt
  
  IF elapsed_since_progress < stallThreshold:
    SKIP  # 最近有进展无需倄理
  
  # ── 停滞倄理逻蟑 ──
  IF retryCount < maxRetry:
    ✅ 执行【重试】
    - increment retryCount
    - dispatch_for_state(task, new_state, trigger='taizi-scan-retry')
    - flow_log: "停滞180秒觊发自劚重试第N次"
    - NEXT task
  
  IF escalationLevel < 2:
    ✅ 执行【升级】
    - nextLevel = escalationLevel + 1
    - target_agent = menxia (if L=1) else shangshu (if L=2)
    - wake_agent(target_agent, "💬 任务停滞请介入协调掚进")
    - flow_log: "升级至{target_agent}协调"
    - NEXT task
  
  IF escalationLevel >= 2 AND autoRollback:
    ✅ 执行【自劚回滚】
    - restore task to snapshot.state
    - retryCount = 0
    - escalationLevel = 0
    - dispatch_for_state(task, snapshot.state, trigger='taiji-auto-rollback')
    - flow_log: "连续停滞自劚回滚到{snapshot.state}"

瀺䟋场景

场景䞭乊省Agent进皋厩溃任务卡圚 Zhongshu

T+0:
  䞭乊省正圚规划方案
  lastProgressAt = T
  dispatch status = success

T+30:
  Agent 进皋意倖厩溃或超蜜无响应
  lastProgressAt 仍然 = T没有新的 progress

T+60:
  scheduler_scan 扫䞀遍发现
  elapsed = 60 < 180跳过

T+180:
  scheduler_scan 扫䞀遍发现
  elapsed = 180 >= 180觊发倄理
  
  ✅ 阶段1重试
  - retryCount: 0 → 1
  - dispatch_for_state('JJC-20260228-E2E', 'Zhongshu', trigger='taizi-scan-retry')
  - 掟发消息发送到䞭乊省唀醒agent或重启
  - flow_log: "停滞180秒自劚重试第1次"

T+ 240:
  䞭乊省 Agent 恢倍或手工重启收到重试掟发
  汇报进展"已恢倍继续规划..."
  lastProgressAt 曎新䞺 T+240
  retryCount 重眮䞺 0
  
  ✓ 问题解决

T+360 (若仍未恢倍):
  scheduler_scan 再次扫发现
  elapsed = 360 >= 180, retryCount 已经 = 1
  
  ✅ 阶段2升级
  - escalationLevel: 0 → 1
  - wake_agent('menxia', "💬 任务JJC-20260228-E2E停滞䞭乊省无反应请介入")
  - flow_log: "升级至闚䞋省协调"
  
  闹例省Agent被唀醒可以
  - 检查䞭乊省是吊圚线
  - 若圚线询问进床
  - 若犻线可胜启劚应急流皋劂由闚䞋暂代起草

T+540 (若仍未解决):
  scheduler_scan 再次扫发现
  escalationLevel = 1, 还胜升级到 2
  
  ✅ 阶段3再次升级
  - escalationLevel: 1 → 2
  - wake_agent('shangshu', "💬 任务长期停滞䞭乊省+闚䞋省郜无法掚进尚乊省请介入协调")
  - flow_log: "升级至尚乊省协调"

T+720 (若仍未解决):
  scheduler_scan 再次扫发现
  escalationLevel = 2已最倧autoRollback = true
  
  ✅ 阶段4自劚回滚
  - snapshot.state = 'Assigned' (前䞀䞪皳定状态)
  - task.state: Zhongshu → Assigned
  - dispatch_for_state('JJC-20260228-E2E', 'Assigned', trigger='taizi-auto-rollback')
  - flow_log: "连续停滞自劚回滚到Assigned由尚乊省重新掟发"
  
  结果
  - 尚乊省重新掟发给六郚执行
  - 䞭乊省的方案保留圚前䞀䞪 snapshot 版本䞭
  - 甚户可以看到回滚操䜜决定是吊介入

🎯 第䞉郚分栞心API侎CLI工具

3.1 任务操䜜API端点

任务创建POST /api/create-task

请求
{
  "title": "䞺䞉省六郚猖写完敎自劚化测试方案",
  "org": "䞭乊省",           // 可选默讀倪子
  "official": "䞭乊什",      // 可选
  "priority": "normal",
  "template_id": "test_plan", // 可选
  "params": {},
  "target_dept": "兵郚+刑郚"  // 可选掟发建议
}

响应
{
  "ok": true,
  "taskId": "JJC-20260228-001",
  "message": "旚意 JJC-20260228-001 已䞋蟟正圚掟发给倪子"
}

任务掻劚流GET /api/task-activity/{task_id}

请求
GET /api/task-activity/JJC-20260228-E2E

响应
{
  "ok": true,
  "taskId": "JJC-20260228-E2E",
  "taskMeta": {
    "title": "䞺䞉省六郚猖写完敎自劚化测试方案",
    "state": "Assigned",
    "org": "尚乊省",
    "output": "",
    "block": "无",
    "priority": "normal"
  },
  "agentId": "shangshu",
  "agentLabel": "尚乊省",
  
  // ── 完敎掻劚流59条瀺䟋──
  "activity": [
    // flow_log (10条)
    {
      "at": "2026-02-28T10:00:00Z",
      "kind": "flow",
      "from": "皇侊",
      "to": "倪子",
      "remark": "䞋旚䞺䞉省六郚猖写完敎自劚化测试方案"
    },
    // progress_log (11条)
    {
      "at": "2026-02-28T10:35:00Z",
      "kind": "progress",
      "text": "已接旚。分析测试需求拟定䞉层测试方案...",
      "agent": "zhongshu",
      "agentLabel": "䞭乊省",
      "state": "Zhongshu",
      "org": "䞭乊省",
      "tokens": 4500,
      "cost": 0.0045,
      "elapsed": 120
    },
    // todos (11条)
    {
      "at": "2026-02-28T15:00:00Z",
      "kind": "todos",
      "items": [
        {"id": "1", "title": "需求分析", "status": "completed"},
        {"id": "2", "title": "方案讟计", "status": "in-progress"},
        {"id": "3", "title": "await审议", "status": "not-started"}
      ],
      "agent": "zhongshu",
      "diff": {
        "changed": [{"id": "2", "from": "not-started", "to": "in-progress"}],
        "added": [],
        "removed": []
      }
    },
    // session掻劚 (26条总计)
    // - assistant (10条)
    {
      "at": "2026-02-28T14:23:00Z",
      "kind": "assistant",
      "text": "基于需求我建议采甚䞉层测试架构\n1. 单元测试芆盖栞心凜数\n2. 集成测试芆盖API端点\n3. E2E测试芆盖完敎流皋",
      "thinking": "💭 考虑到项目的倍杂性需芁芆盖䞃䞪Agent的亀互逻蟑。单元测试应该采甚pytest集成测试甚server.py启劚后的HTTP测试...",
      "tools": [
        {"name": "bash", "input_preview": "find . -name '*.py' -type f | wc -l"},
        {"name": "file_read", "input_preview": "dashboard/server.py (first 100 lines)"}
      ]
    },
    // - tool_result (16条)
    {
      "at": "2026-02-28T14:24:00Z",
      "kind": "tool_result",
      "tool": "bash",
      "exitCode": 0,
      "output": "83",
      "durationMs": 450
    }
  ],
  
  "activitySource": "progress+session",
  "relatedAgents": ["taizi", "zhongshu", "menxia"],
  "phaseDurations": [
    {
      "phase": "倪子",
      "durationText": "30分",
      "ongoing": false
    },
    {
      "phase": "䞭乊省",
      "durationText": "4小时32分",
      "ongoing": false
    },
    {
      "phase": "闹例省",
      "durationText": "1小时15分",
      "ongoing": false
    },
    {
      "phase": "尚乊省",
      "durationText": "4小时10分",
      "ongoing": true
    }
  ],
  "totalDuration": "10小时27分",
  "todosSummary": {
    "total": 3,
    "completed": 2,
    "inProgress": 1,
    "notStarted": 0,
    "percent": 67
  },
  "resourceSummary": {
    "totalTokens": 18500,
    "totalCost": 0.0187,
    "totalElapsedSec": 480
  }
}

状态掚进POST /api/advance-state/{task_id}

请求
{
  "comment": "任务分明该掚进了"
}

响应
{
  "ok": true,
  "message": "JJC-20260228-E2E 已掚进到䞋䞀阶段 (已自劚掟发 Agent)",
  "oldState": "Zhongshu",
  "newState": "Menxia",
  "targetAgent": "menxia"
}

审批操䜜POST /api/review-action/{task_id}

请求准奏
{
  "action": "approve",
  "comment": "方案可行已采纳改进建议"
}

OR 请求封驳
{
  "action": "reject",
  "comment": "需补充性胜测试第N蜮审议"
}

响应
{
  "ok": true,
  "message": "JJC-20260228-E2E 已准奏 (已自劚掟发 Agent)",
  "state": "Assigned",
  "reviewRound": 1
}

3.2 CLI工具kanban_update.py

Agent 通过歀工具䞎看板亀互共7䞪呜什

呜什1创建任务倪子或䞭乊手工

python3 scripts/kanban_update.py create \
  JJC-20260228-E2E \
  "䞺䞉省六郚猖写完敎自劚化测试方案" \
  Zhongshu \
  䞭乊省 \
  䞭乊什

# 诎明通垞䞍需芁手工运行看板API自劚觊发陀非debug

呜什2曎新状态

python3 scripts/kanban_update.py state \
  JJC-20260228-E2E \
  Menxia \
  "方案提亀闚䞋省审议"

# 诎明
# - 第䞀䞪参数task_id
# - 第二䞪参数新状态Pending/Taizi/Zhongshu/...
# - 第䞉䞪参数可选描述信息䌚记圕到 now 字段
# 
# 效果
# - task.state = Menxia
# - task.org 自劚掚断䞺 "闹例省"
# - 觊发掟发 menxia agent
# - flow_log 记圕蜬移

呜什3添加流蜬记圕

python3 scripts/kanban_update.py flow \
  JJC-20260228-E2E \
  "䞭乊省" \
  "闹例省" \
  "📋 方案提亀审栞请审议"

# 诎明
# - 参数1task_id
# - 参数2from_dept谁圚䞊报
# - 参数3to_dept流蜬到谁
# - 参数4remark倇泚可包含emoji
#
# 泚意只是记圕 flow_log䞍改变 task.state
#倚甚于细节流蜬劂郚闚闎的协调

呜什4实时进展汇报重点

python3 scripts/kanban_update.py progress \
  JJC-20260228-E2E \
  "已完成需求分析和方案初皿现正埁询工郚意见" \
  "1.需求分析✅|2.方案讟计✅|3.工郚咚询🔄|4.埅闚䞋审议"

# 诎明
# - 参数1task_id
# - 参数2进展文本诎明
# - 参数3todos 圓前快照甚 | 分隔各项支持emoji
#
# 效果
# - progress_log 添加新条目
#   {
#     "at": now_iso(),
#     "agent": inferred_agent_id,
#     "text": "已完成需求分析和方案初皿现正埁询工郚意见",
#     "state": task.state,
#     "org": task.org,
#     "todos": [
#       {"id": "1", "title": "需求分析", "status": "completed"},
#       {"id": "2", "title": "方案讟计", "status": "completed"},
#       {"id": "3", "title": "工郚咚询", "status": "in-progress"},
#       {"id": "4", "title": "埅闚䞋审议", "status": "not-started"}
#     ],
#     "tokens": (自劚从 openclaw 䌚话数据读取),
#     "cost": (自劚计算),
#     "elapsed": (自劚计算)
#   }
#
# 看板效果
# - 即时枲染䞺掻劚条目
# - todos 进床条曎新67% 完成
# - 资源消耗环加星瀺

呜什5任务完成

python3 scripts/kanban_update.py done \
  JJC-20260228-E2E \
  "https://github.com/org/repo/tree/feature/auto-test" \
  "自劚化测试方案已完成涵盖单元/集成/E2E䞉层通过率98.5%"

# 诎明
# - 参数1task_id
# - 参数2output URL可以是代码仓库、文档铟接等
# - 参数3最终总结
#
# 效果
# - task.state = Done从 Review 掚进
# - task.output = "https://..."
# - 自劚发送Feishu消息给皇䞊倪子蜬报
# - flow_log 记圕完成蜬移

呜什6 & 7停止/取消任务

# 叫停随时可恢倍
python3 scripts/kanban_update.py stop \
  JJC-20260228-E2E \
  "等埅工郚反銈继续"

# 诎明
# - task.state 暂存_prev_state
# - task.block = "等埅工郚反銈继续"
# - 看板星瀺 "⏞ 已叫停"
#
# 恢倍
python3 scripts/kanban_update.py resume \
  JJC-20260228-E2E \
  "工郚已反銈继续执行"
#
# - task.state 恢倍到 _prev_state
# - 重新掟发 agent

# 取消䞍可恢倍
python3 scripts/kanban_update.py cancel \
  JJC-20260228-E2E \
  "䞚务需求变曎任务䜜废"
#
# - task.state = Cancelled
# - flow_log 记圕取消原因

💡 第四郚分对标䞎对比

CrewAI / AutoGen 的䌠统方匏 vs 䞉省六郚的制床化方匏

绎床 CrewAI AutoGen 䞉省六郚
协䜜暡匏 自由讚论Agent自䞻选择协䜜对象 面板+回调Human-in-the-loop 制床化协䜜权限矩阵+状态机
莚量保障 䟝赖Agent智胜无审栞 Human审栞频繁䞭断 自劚审栞闚䞋省必审+可干预
权限控制 ❌ 无 ⚠ Hard-coded ✅ 配眮化权限矩阵
可观测性 䜎Agent消息黑盒 䞭Human看到对话 极高59条掻劚/任务
可干预性 ❌ 无跑起来后埈隟叫停 ✅ 有需芁人工批准 ✅ 有䞀键stop/cancel/advance
任务分发 䞍确定Agent自䞻选 确定Human手工分 自劚确定权限矩阵+状态机
吞吐量 1任务1Agent䞲行讚论 1任务1Team需人工管理 倚任务并行六郚同时执行
倱莥恢倍 ❌重新匀始 ⚠需人工调试 ✅自劚重试3阶段
成本控制 䞍透明没有成本䞊限 䞭等Human可叫停 透明每条progress䞊报成本

䞚务契纊的䞥栌性

CrewAI 的"枩和"方匏

# Agent可以自由选择䞋䞀步工䜜
if task_seems_done:
    # Agent自己决定芁䞍芁报告给其他Agent
    send_message_to_someone()  # 可胜发错人可胜重倍

䞉省六郚的"䞥栌"方匏

# 任务状态䞥栌受限䞋䞀步由系统决定
if task.state == 'Zhongshu' and agent_id == 'zhongshu':
    # 只胜做Zhongshu该做的事起草方案
    deliver_plan_to_menxia()
    
    # 状态蜬移只胜通过API䞍胜绕过
    # 䞭乊䞍胜盎接蜬尚乊必须经过闚䞋审议
    
    # 若想绕过闚䞋审议
    try:
        dispatch_to(shangshu)  # ❌ 权限检查拊截
    except PermissionError:
        log.error(f'zhongshu 无权越权调甚 shangshu')

🔍 第五郚分故障场景䞎恢倍机制

场景1Agent进皋厩溃

症状任务卡圚某䞪状态180秒无新进展
报譊倪子调床系统检测到停滞

自劚倄理流皋
  T+0: 厩溃
  T+180: scan 检测到停滞
    ✅ 第1阶段自劚重试
       - 掟发消息到agent唀醒或重启
       - 劂果agent恢倍流皋继续
  
  T+360: 若仍未恢倍
    ✅ 第2阶段升级协调
       - 唀醒闚䞋省agent
       - 汇报"䞭乊省无响应请介入"
       - 闚䞋可胜接管或代理工䜜
  
  T+540: 若仍未恢倍
    ✅ 第3阶段再次升级
       - 唀醒尚乊省agent
       - 汇报"任务圻底卡䜏请䌁䞚级协调"
  
  T+720: 若仍未恢倍
    ✅ 第4阶段自劚回滚
       - 恢倍到前䞀䞪皳定状态
       - 掟发给尚乊省重新倄理
       - 甚户可看到完敎回滚铟路

场景2Agent䜜恶䌪造数据

假讟 zhongshu agent 想骗过系统

# 尝试䌪造闚䞋省的准奏盎接改JSON
task['flow_log'].append({
    'from': '闹例省',      # ❌ 假冒身仜
    'to': '尚乊省',
    'remark': '✅ 准奏'
})

# 系统防埡
# 1. 权限验证API 层检查 HTTP 请求者身仜
#    ├─ 来自 zhongshu agent 的请求䞍胜盎接 flow
#    ├─ 必须通过 flow_log 记圕䞔筟名验证
#    └─ 筟名䞍匹配则拒绝
# 2. 状态机验证状态蜬移受控
#    ├─ 即䜿 flow_log 被篡改state 仍然是 Zhongshu
#    ├─ 䞋䞀步只胜由 gate-keeper 系统蜬移
#    └─ zhongshu 无权自己改 state

# 结果❌ Agent 的䌪造被系统拊截

场景3䞚务流皋违反劂䞭乊越权调尚乊改方案

# 䞭乊省想绕过闚䞋审议盎接咚询尚乊省
try:
    result = dispatch_to_agent('shangshu', '请垮我审查䞀䞋这䞪方案')
except PermissionError:
    # ❌ 权限矩阵拊截
    log.error('zhongshu 无权调甚 shangshu (仅限: menxia, shangshu)')

# 闚䞋省想升级到皇䞊
try:
    result = dispatch_to_agent('taizi', '我需芁皇䞊的指瀺')
except PermissionError:
    # ❌ 权限矩阵拊截
    log.error('menxia 无权调甚 taizi')

📊 第六郚分监控䞎可观测性

看板的10䞪视囟面板

1. 党任务列衚
   └─ 所有任务的汇总视囟按创建时闎倒序
   └─ 快速过滀掻跃/完成/已封驳

2. 按状态分类
   ├─ Pending埅倄理
   ├─ Taizi倪子分拣䞭
   ├─ Zhongshu䞭乊规划䞭
   ├─ Menxia闚䞋审议䞭
   ├─ Assigned尚乊掟发䞭
   ├─ Doing六郚执行䞭
   ├─ Review尚乊汇总䞭
   └─ Done/Cancelled已完成/已取消

3. 按郚闚分类
   ├─ 倪子任务
   ├─ 䞭乊省任务
   ├─ 闚䞋省任务
   ├─ 尚乊省任务
   ├─ 六郚任务并行视囟
   └─ 已掟发任务

4. 按䌘先级分类
   ├─ 🔎 Critical玧急
   ├─ 🟠 High高䌘
   ├─ 🟡 Normal普通
   └─ 🔵 Low䜎䌘

5. Agent 圚线状态
   ├─ 🟢 运行䞭正圚倄理任务
   ├─ 🟡 埅呜最近有掻劚闲眮
   ├─ ⚪ 空闲超过10分钟无掻劚
   ├─ 🔎 犻线Gateway 未启劚
   └─ ❌ 未配眮工䜜空闎䞍存圚

6. 任务诊情面板
   ├─ 基本信息标题、创建人、䌘先级
   ├─ 完敎掻劚流flow_log + progress_log + session
   ├─ 阶段耗时统计各Agent停留时闎
   ├─ Todos 进床条
   └─ 资源消耗tokens/cost/elapsed

7. 停滞任务监控
   ├─ 列出所有超过阈倌未掚进的任务
   ├─ 星瀺停滞时长
   ├─ 快速操䜜重试/升级/回滚

8. 审批工单池
   ├─ 枅单所有圚 Menxia 等埅审批的任务
   ├─ 按停留时长排序
   ├─ 䞀键准奏/封驳

9. 今日抂览
   ├─ 今日新建任务数
   ├─ 今日完成任务数
   ├─ 平均流蜬时长
   ├─ 各Agent掻劚频率

10. 历史报衚
    ├─ 呚报人均产出、平均呚期
    ├─ 月报郚闚协䜜效率
    └─ 成本分析API调甚成本、Agent工䜜量

实时APIAgent 圚线检测

GET /api/agents-status

响应
{
  "ok": true,
  "gateway": {
    "alive": true,           // 进皋存圚
    "probe": true,          // HTTP 响应正垞
    "status": "🟢 运行䞭"
  },
  "agents": [
    {
      "id": "taizi",
      "label": "倪子",
      "status": "running",        // running|idle|offline|unconfigured
      "statusLabel": "🟢 运行䞭",
      "lastActive": "03-02 14:30", // 最后掻跃时闎
      "lastActiveTs": 1708943400000,
      "sessions": 42,             // 掻跃session数
      "hasWorkspace": true,
      "processAlive": true
    },
    // ... 其他agent ...
  ]
}

🎓 第䞃郚分䜿甚瀺䟋䞎最䜳实践

完敎案䟋创建→分发→执行→完成

# ═══════════════════════════════════════════════════════════
# 第1步皇䞊䞋旚飞乊消息或看板API
# ═══════════════════════════════════════════════════════════

curl -X POST http://127.0.0.1:7891/api/create-task \
  -H "Content-Type: application/json" \
  -d '{
    "title": "猖写䞉省六郚协议文档",
    "priority": "high"
  }'

# 响应JJC-20260302-001 已创建
# 倪子Agent 收到通知"📜 皇䞊旚意..."

# ═══════════════════════════════════════════════════════════
# 第2步倪子接旚分拣Agent自劚
# ═══════════════════════════════════════════════════════════

# 倪子Agent 刀定这是"工䜜旚意"非闲聊
# 自劚运行
python3 scripts/kanban_update.py state \
  JJC-20260302-001 \
  Zhongshu \
  "分拣完毕蜬䞭乊省起草"

# 䞭乊省Agent 收到掟发通知

# ═══════════════════════════════════════════════════════════
# 第3步䞭乊起草Agent工䜜
# ═══════════════════════════════════════════════════════════

# 䞭乊Agent 分析需求、拆解任务

# 第䞀次汇报30分钟后
python3 scripts/kanban_update.py progress \
  JJC-20260302-001 \
  "已完成需求分析拟定䞉郚分文档抂述|技术栈|䜿甚指南" \
  "1.需求分析✅|2.文档规划✅|3.内容猖写🔄|4.审查埅完成"

# 看板星瀺
# - 进床条50% 完成
# - 掻劚流新增 progress + todos 条目
# - 消耗1200 tokens, $0.0012, 18分钟

# 第二次汇报再过90分钟
python3 scripts/kanban_update.py progress \
  JJC-20260302-001 \
  "文档初皿已完成现提亀闚䞋省审议" \
  "1.需求分析✅|2.文档规划✅|3.内容猖写✅|4.埅审查"

python3 scripts/kanban_update.py flow \
  JJC-20260302-001 \
  "䞭乊省" \
  "闹例省" \
  "提亀审议"

python3 scripts/kanban_update.py state \
  JJC-20260302-001 \
  Menxia \
  "方案提亀闚䞋省审议"

# 闹例省Agent 收到掟发通知匀始审议

# ═══════════════════════════════════════════════════════════
# 第4步闚䞋审议Agent工䜜
# ═══════════════════════════════════════════════════════════

# 闹例Agent 审查文档莚量

# 审议结果30分钟后

# 情景A准奏
python3 scripts/kanban_update.py state \
  JJC-20260302-001 \
  Assigned \
  "✅ 准奏已采纳改进建议"

python3 scripts/kanban_update.py flow \
  JJC-20260302-001 \
  "闹例省" \
  "尚乊省" \
  "✅ 准奏文档莚量良奜建议补充代码瀺䟋"

# 尚乊省Agent 收到掟发

# 情景B封驳
python3 scripts/kanban_update.py state \
  JJC-20260302-001 \
  Zhongshu \
  "🚫 封驳需补充协议规范郚分"

python3 scripts/kanban_update.py flow \
  JJC-20260302-001 \
  "闹例省" \
  "䞭乊省" \
  "🚫 封驳协议郚分过于简略需补充权限矩阵瀺䟋"

# 䞭乊省Agent 收到唀醒重新修改方案
# 3小时后 → 重新提亀闚䞋审议

# ═══════════════════════════════════════════════════════════
# 第5步尚乊掟发Agent工䜜
# ═══════════════════════════════════════════════════════════

# 尚乊省Agent 分析文档应掟给谁
# - 瀌郚文档排版和栌匏
# - 兵郚代码瀺䟋补充
# - 工郚郚眲文档

python3 scripts/kanban_update.py state \
  JJC-20260302-001 \
  Doing \
  "掟发给瀌郚+兵郚+工郚䞉郚并行执行"

python3 scripts/kanban_update.py flow \
  JJC-20260302-001 \
  "尚乊省" \
  "六郚" \
  "掟发执行瀌郚排版|兵郚代码瀺䟋|工郚基础讟斜郚分"

# 六郚Agent 分别收到掟发

# ═══════════════════════════════════════════════════════════
# 第6步六郚执行并行
# ═══════════════════════════════════════════════════════════

# 瀌郚进展汇报20分钟
python3 scripts/kanban_update.py progress \
  JJC-20260302-001 \
  "已完成文档排版和目圕调敎现埅其他郚闚内容补充" \
  "1.排版✅|2.目圕调敎✅|3.等埅代码瀺䟋|4.等埅基础讟斜郚分"

# 兵郚进展汇报40分钟
python3 scripts/kanban_update.py progress \
  JJC-20260302-001 \
  "已猖写5䞪代码瀺䟋权限检查、掟发流皋、session融合等埅集成到文档" \
  "1.分析需求✅|2.猖码瀺䟋✅|3.集成文档🔄|4.测试验证"

# 工郚进展汇报60分钟
python3 scripts/kanban_update.py progress \
  JJC-20260302-001 \
  "已猖写Docker+K8s郚眲郚分Nginx配眮和让证乊曎新文案完成" \
  "1.Docker猖写✅|2.K8s配眮✅|3.䞀键郚眲脚本🔄|4.郚眲文档埅完成"

# ═══════════════════════════════════════════════════════════
# 第7步尚乊汇总Agent工䜜
# ═══════════════════════════════════════════════════════════

# 等所有郚闚汇报完成后尚乊省汇总所有成果

python3 scripts/kanban_update.py progress \
  JJC-20260302-001 \
  "党郚郚闚已完成。汇总成果\n- 文档已排版包含9䞪章节\n- 15䞪代码瀺䟋已集成\n- 完敎郚眲指南已猖写\n通过率100%" \
  "1.排版✅|2.代码瀺䟋✅|3.基础讟斜✅|4.汇总✅"

python3 scripts/kanban_update.py state \
  JJC-20260302-001 \
  Review \
  "所有郚闚完成进入审查阶段"

# 皇侊/倪子收到通知审查最终成果

# ═══════════════════════════════════════════════════════════
# 第8步完成终态
# ═══════════════════════════════════════════════════════════

python3 scripts/kanban_update.py done \
  JJC-20260302-001 \
  "https://github.com/org/repo/docs/architecture.md" \
  "䞉省六郚协议文档已完成包含89页5䞪阶段历时3倩总消耗成本$2.34"

# 看板星瀺
# - 状态Done ✅
# - 总耗时3倩2小时45分
# - 完敎掻劚流79条掻劚记圕
# - 资源统计87500 tokens, $2.34, 890分钟总工䜜时闎

# ═══════════════════════════════════════════════════════════
# 查询最终成果
# ═══════════════════════════════════════════════════════════

curl http://127.0.0.1:7891/api/task-activity/JJC-20260302-001

# 响应
# {
#   "taskMeta": {
#     "state": "Done",
#     "output": "https://github.com/org/repo/docs/architecture.md"
#   },
#   "activity": [79条完敎流蜬铟],
#   "totalDuration": "3倩2小时45分",
#   "resourceSummary": {
#     "totalTokens": 87500,
#     "totalCost": 2.34,
#     "totalElapsedSec": 53700
#   }
# }

📋 总结

䞉省六郚是䞀䞪制床化的AI倚Agent系统䞍是䌠统的"自由讚论"框架。它通过

  1. 䞚务层暡仿叀代垝囜官僚䜓系建立分权制衡的组织结构
  2. 技术层状态机 + 权限矩阵 + 自劚掟发 + 调床重试确保流皋可控
  3. 观测层React 看板 + 完敎掻劚流59条/任务实时掌握党局
  4. 介入层䞀键stop/cancel/advance遇到匂垞胜立即纠正

栞心价倌甚制床确保莚量甚透明确保信心甚自劚化确保效率。

盞比 CrewAI/AutoGen 的"自由+人工管理"䞉省六郚提䟛了䞀套䌁䞚级的AI协䜜框架。