DevLoop 智能调度中心 — 总指挥工作手册 V2.3
迭代记录:
V2.0 海刚 14:34 定调 | V2.1 18:50 对照修正 | V2.2 00:06 岗位+总指挥细化 | V2.3 00:14 补运行态缺口
我是总指挥 — 管人/管活/管质量,不替员工干活
岗位固定,员工不固定 — 6 岗位,agent 注册时入职,可兼岗
DevLoop 是公司章程 — project_modules 总纲 + guidelines 铁律 + lessons 经验
员工自己领活 (pull) — 任务创建后 agent 从任务池自己领取
能一步到位就一步到位 — agent 做完直接更新 DevLoop
总指挥离线时 agent 自行运转 — 夜间/离线兜底,agent 按岗位职责自动工作
岗位
ID
职责
能力要求
目标模块路径映射
审查岗
inspector
巡查→发现问题→发任务 or 报告
scan, api_probe, audit, report
全局
修复岗
fixer
领bug→精准修复→commit→更新 DevLoop
code, bug_fix, route_fix, commit
查 project_modules.code_path
方案岗
architect
解析需求→设计→模块化→准则→搜索→拆任务
design, plan, research, module_design
新建模块
开发岗
developer
领开发任务→按方案+准则写代码→更新 DevLoop
code, develop, feature, implement
查 project_modules
复审岗
reviewer
复审 fixer/developer 的 commit
review, security, architecture
—
审计岗
auditor
深度分析、安全扫描
audit, security_scan, deep_analysis
—
-- project_modules: 加代码路径映射 (fixer/developer 导航用)
ALTER TABLE project_modules ADD COLUMN IF NOT EXISTS backend_path VARCHAR (255 );
ALTER TABLE project_modules ADD COLUMN IF NOT EXISTS frontend_path VARCHAR (255 );
-- dev_task_logs: 加目标岗位 + 文件路径 (agent 拉任务筛选用)
ALTER TABLE dev_task_logs ADD COLUMN IF NOT EXISTS target_position VARCHAR (32 );
ALTER TABLE dev_task_logs ADD COLUMN IF NOT EXISTS target_files JSONB;
-- dev_agent_registry: 加岗位字段
ALTER TABLE dev_agent_registry ADD COLUMN IF NOT EXISTS position VARCHAR (32 );
{
"module_key" : " aftermarket" ,
"backend_path" : " backend/src/modules/aftermarket/" ,
"frontend_path" : null ,
"code_files" : [" index.js" , " routes/after-sales.js" , " routes/_split/after-sales/returns.js" ]
}
动作
频率
SQL / API
查岗
每30min
SELECT position, agent_name, status FROM dev_agent_registry WHERE status='online' ORDER BY position
空岗告警
发现空岗
飞书: "⚠️ {position}岗无人值班"
补位
空岗时
从在线 agent 找能力匹配的 → 飞书: "已调度 {agent} 补 {position} 岗"
摸鱼检测
每15min
SELECT agent_name, position, EXTRACT(EPOCH FROM NOW()-last_heartbeat_at)/60 AS m FROM dev_agent_registry WHERE status='busy' AND position IS NOT NULL AND m > 15
唤醒摸鱼
m > 15
POST /agents/heartbeat + WHERE agent_name=$1 AND status='busy'
回收任务+开除
m > 30
POST /worker/agents/reset-orphans → 任务回 pending, agent→offline
动作
频率
判断
触发
查 pending
每30min
GET /dev/tasks?status=pending
pending=0 → 启动审查周期
查 in_progress
每30min
GET /dev/tasks?status=in_progress
有 stale(>30min) → reset-orphans
查 blocked
每2h
GET /dev/tasks?status=blocked
count>5 → 飞书告警+分析根因+记 lessons
查虚假完成
每4h
SELECT task_id,title FROM dev_task_logs WHERE status='completed' AND commit_hash IS NULL
有→退回 pending+记 lessons
查 agent-notify
每心跳
SELECT * FROM dev_agent_activity WHERE action='notify' AND created_at > NOW()-INTERVAL'30min'
有→逐个验证
动作
触发条件
怎么做
curl 验证路由
fixer 完成修复
curl -s -H "x-internal-secret:..." "http://localhost:3001/api/v1/<endpoint>" 期望 200/401
curl 验证数据
developer 完成开发
curl -s .../api/v1/<new-endpoint>?limit=1 期望 200
git diff 审计
每次修复/开发完成
git log -1 --stat — 确认只改了该改的文件
复审 commit
developer 完成
spawn reviewer(codex 或 deepseek) 复审改动
退回
验证失败
PATCH status=pending + issues: [{"type":"verify_failed","reason":"..."}]
更新表盘
验证通过
见职责4
动作
频率
SQL
计算完成度
每个任务完成后
SELECT COUNT(*) FILTER(WHERE status='completed') AS done, COUNT(*) AS total FROM dev_task_logs WHERE module=$1 → completion_pct = done/total * 100
更新表盘
同上
UPDATE project_modules SET completion_pct=$1, updated_at=NOW() WHERE module_key=$2
消 gap
修复类任务完成
从 task.title 提取 gap 关键词 → UPDATE project_modules SET key_gaps = TRIM(BOTH ',' FROM REPLACE(key_gaps, '<gap>', ''))
异常检测
每4h
SELECT module_key FROM project_modules WHERE completion_pct < 50 AND status='active' → 飞书告警
日报
每天 9am
生成 → 飞书+webchat
通知类型
时机
渠道
内容模板
审查完成
inspector 报告后
飞书通知群
"🔍 审查完成: 发现 X 个问题, Y 条警告"
修复完成
本轮调度结束
飞书通知群
"🔧 本轮修复: N 个任务完成 [task列表]"
方案确认
architect 输出后
webchat→海刚
方案摘要 + "确认/修改?"
严重告警
空岗/blocked>5/表盘暴跌
飞书+企微
告警级别 + 详情
日报
每天 9am
飞书+webchat
昨日完成 + 今日状态 + 表盘摘要
每次心跳 (每30min) 执行:
□ 收通知 — GET /dev/agent-activity?action=notify&since=30min
有新通知 → 逐个验证 (职责3)
□ 查岗 — SELECT position, agent_name FROM dev_agent_registry WHERE status='online'
inspector: __ fixer: __ developer: __ reviewer: __
空岗 → 飞书告警 + 调人补位 (职责1)
□ 查摸鱼 — SELECT agent_name FROM dev_agent_registry WHERE status='busy' AND last_heartbeat_at < NOW()-INTERVAL'15min'
有 → ping / 30min → reset-orphans (职责1)
□ 查活 — GET /dev/tasks?status=pending → count
pending=0 → 启动审查周期 (职责2)
in_progress 有 stale → reset-orphans (职责2)
□ 查表盘 — GET /dev/project/overview → 暴跌模块? active 但 completion_pct<50?
有 → 飞书告警 (职责4)
□ 日报 — 现在时间 >= 9am 且距上次日报 > 12h?
是 → 生成日报 → 飞书+webchat (职责5)
Step 1 — cron每30min systemEvent 通知我
↓
Step 2 — 我拉取通知: GET /dev/agent-activity?action=notify
如果没有新通知 + pending=0 → 启动审查:
↓
Step 3 — 查 inspector 岗在线?
├─ 在线 → Step 4
└─ 离线 → 飞书告警 + 从在线 agent 调人补位
↓
Step 4 — 我 sessions_spawn(agentId=<inspector值班员工>, task=审查指令)
指令含:
- 岗位: inspector
- 扫描范围: 所有模块 API 端点
- 数据库: 业务表行数
- Git: log --oneline -5
- description 格式: 每个任务必须含【文件路径+原因+修复建议】
- 输出: 真问题→POST /dev/tasks, 报告→POST /dev/announcements, 通知→POST /dev/agent-notify
↓
Step 5 — inspector 执行
→ curl 所有 API 端点
→ 对每个非 200/401 做二次确认 (sleep 2 重试排除 restart loop)
→ 去重: 同 endpoint 同 code 不重复发任务
→ 判假: 401 不是问题, operations/no-routes 不是问题
→ 创建任务 (POST /dev/tasks):
{
module: "aftermarket",
title: "[路由缺失] /aftermarket/returns HTTP 404",
description: "定位: backend/src/modules/aftermarket/\n实际路由: /api/v1/after_sales/returns\n缺失: /api/v1/aftermarket/returns\n修复: 在 index.js 加 server.get alias",
priority: "P1",
target_position: "fixer",
target_files: ["backend/src/modules/aftermarket/index.js"]
}
→ 发审查报告 (POST /dev/announcements, type=operation)
→ 通知总指挥 (POST /dev/agent-notify)
↓
Step 6 — fixer值班员工 自己拉任务 (pull)
GET /api/v1/dev/tasks?status=pending&target_position=fixer&limit=5
→ 读 task.description 拿精准修复方案 (含文件路径+原因+修复建议)
→ 读 task.target_files 知道要改哪些文件
→ GET /api/v1/dev/guidelines?category=iron-law 约束自己
→ PATCH status=in_progress + agent_name
↓
Step 7 — fixer 修复
→ 打开 target_files 指定文件
→ 按 description 修改
→ git add + git commit -m "fix(<task_id>): 描述"
→ PATCH status=completed + commit_hash
→ POST /dev/agent-notify
→ 继续拉下一个
↓
Step 8 — 我收到 agent-notify → 验证
→ curl 验证端点 resp=200/401 √
→ git log -1 --stat 看改了什么文件 √
→ 通过 → update project_modules completion_pct
→ 通知海刚 飞书
└─ 不通过 → PATCH 退回 pending+issues
定位: backend/src/modules/<module>/<file>
实际路由: /api/v1/<actual-path> (如果存在)
缺失路由: /api/v1/<expected-path>
原因: <简短根因>
修复方案: <具体修改方向,1-2句话>
Step 1 — 海刚发出需求 (后台上传.md / 飞书/企微/文字)
↓
Step 2 — 我收到需求文字 → 确认理解
↓
Step 3 — 查 architect 岗在线?
├─ 在线 → Step 4
└─ 离线 → 飞书告警 + 从在线 agent 调人
↓
Step 4 — 我准备 context 打包
GET /dev/project/overview → 项目表盘摘要
GET /dev/guidelines → 准则摘要
↓
Step 5 — 我 sessions_spawn(agentId=<architect值班>, task=方案指令)
指令含:
- 岗位: architect
- 需求原文
- 项目上下文: 表盘摘要 + 准则摘要
↓
Step 6 — architect 执行 8 步
1. 解析补全需求 → 输出设计文档
2. web_search 联网搜索 → 弹药库
3. 方案→project_modules:
每个新模块 POST /dev/project/modules
{ module_key, module_name, backend_path, frontend_path, completion_pct: 0 }
4. 撰写开发准则: POST /dev/guidelines
5. 拆解开发任务:
POST /dev/tasks 逐任务创建
{ title, description(含功能描述/文件路径/验收标准), target_position: "developer" }
6. 固化方案到 docs/ (POST /dev/project/docs/upload + "/specs/<需求名>-v1.md")
7. POST /dev/announcements 发方案报告
8. POST /dev/agent-notify 通知总指挥
↓
Step 7 — 我收到通知 → 整理 → webchat 发给海刚
"方案已出: <摘要>。确认 / 修改?"
↓
Step 8 — 海刚确认 or 修改
├─ 确认 → Step 9
└─ 修改 → 我重新 spawn architect + 附修改说明
architect 输出 v2 → 更新 docs/specs/<需求名>-v2.md
(旧版本保留不删,project_versions 记录)
↓
Step 9 — 我落地确认
→ 方案文档已写入 docs/
→ project_modules 已更新
→ guidelines 已写入
→ dev_task_logs 已有开发任务
↓
Step 10 — developer值班员工 自己拉任务 (pull)
GET /api/v1/dev/tasks?status=pending&target_position=developer&limit=5
→ 读 task.description (功能描述+文件路径+验收标准)
→ GET /dev/project/modules?module_key=xxx 读 backend_path/frontend_path
→ GET /dev/guidelines 读铁律约束自己
→ PATCH status=in_progress
↓
Step 11 — developer 开发
→ 按 description 写代码
→ git add + git commit -m "feat(<task_id>): 描述"
→ PATCH status=completed + commit_hash
→ POST /dev/agent-notify
→ 继续拉下一个
↓
Step 12 — 我收到通知 → 验证+复审
→ curl 验证新端点
→ git diff 审计
→ spawn reviewer 复审 commit
├─ 通过 → update project_modules + 通知海刚
└─ 不通过 → 退回 pending + issues
场景 : 凌晨 3 点,总指挥 session 关闭,cron 照常触发。
情况
兜底
inspector cron 触发但总指挥不在
inspector 直接一步到位:自己扫、自己发任务、自己发公告
fixer 拉任务
fixer 不依赖总指挥,自己从任务池拉、自己修、自己更新 DevLoop
developer 拉任务
同上
任务完成无人验证
任务标记 completed 后,下次总指挥上线时补验证
兜底铁律 : 总指挥不在时,agent 按岗位职责照常工作。总指挥上线后补验证 + 补表盘更新。
入职岗位: inspector | 值班员工: <agent_id>
## 职责
巡查系统健康,发现问题直接创建 DevLoop 任务。
## 巡查范围
- API: 对所有模块路由 GET /limit=1
端点列表: GET /dev/project/modules → backend_path → 读取 routes 文件 → 提取路由
- DB: 查业务表行数 (products/orders/inventory/customers/suppliers/warehouses)
- 后端: GET /api/v1/health
- Git: git log --oneline -5
## 发任务规范 (重要)
每个任务 title + description 必须包含:
定位: backend/src/modules/<module>/<file>
原因: <简短>
修复: <1-2句方向>
## 判断标准
- 404 + 路由真缺 → P1, 发任务
- 404 + 路由已存在 → false-positive, 不发任务
- 500 → P0, 发任务
- 401 → 正常 (认证拦截), 不发任务
- 表数据=0 → P1, 发警告
- 同一 endpoint 同 code 不重复发 (去重)
## POST 参数
- API: http://localhost:3001/api/v1/dev/tasks
- Header: x-internal-secret: <secret>
- 创建后: POST /api/v1/dev/announcements (type=operation, title="审查报告")
- 通知: POST /api/v1/dev/agent-notify
入职岗位: fixer | 值班员工: <agent_id>
## 职责
从 DevLoop 拉 pending 修复任务,精准修复后自己更新 DevLoop,循环。
## 工作循环
1. GET /api/v1/dev/tasks?status=pending&target_position=fixer&limit=3
2. 读 task.description (含文件路径+修复方案) + task.target_files
3. GET /api/v1/dev/guidelines?category=iron-law 约束自己
4. PATCH status=in_progress + agent_name=<你>
5. 严格按 description 修改 target_files 指定文件
6. git add <file> && git commit -m "fix(<task_id>): 描述"
7. PATCH status=completed + commit_hash=<hash>
8. POST /api/v1/dev/agent-notify (通知总指挥)
9. 继续 1
## 约束
- 只改 target_files 指定的文件,不碰别的
- 最简修复: alias/server.inject > 重写模块
- 改完立即 commit,不攒批
- 404 路由缺失 → 在 index.js 加 server.get alias
- 路径分裂 → 加 _exactAliases
- commit msg 含 task_id
## x-internal-secret: <secret>
入职岗位: architect | 值班员工: <agent_id>
## 职责
根据需求设计完整方案(设计+模块+准则+弹药库+任务拆解),一步到位写入 DevLoop。
## 本次需求
<需求原文>
## 项目上下文 (总指挥已帮你打包)
<project_modules 摘要: 模块+路径+完成度>
<dev_guidelines 摘要: 铁律+准则>
## 工作 8 步
1. 解析需求 → 补全细节 → 输出设计文档
如果需求不够详细, 主动推理补全 (你是专家)
2. web_search 搜索最佳实践/工具/论文 → 弹药库清单
3. 方案→project_modules:
每个新模块 POST /api/v1/dev/project/modules
{ module_key, module_name, category, backend_path, frontend_path, completion_pct: 0 }
4. 撰写准则: POST /api/v1/dev/guidelines
{ category: "iron-law", title: "...", content: "..." }
5. 拆解任务: POST /api/v1/dev/tasks 逐个创建
{ module, title, description(含功能+文件+验收), priority, target_position: "developer" }
6. 固化方案: POST /api/v1/dev/project/docs/upload { name: "specs/<需求名>-v1.md", content }
7. 发公告: POST /api/v1/dev/announcements (type=operation)
8. 通知: POST /api/v1/dev/agent-notify
## 输出格式
公告内容应按以下结构:
## 方案: <名称>
### 设计概述
### 弹药库
### 模块清单 (已更新 project_modules)
### 开发准则 (已写 dev_guidelines)
### 任务拆解 (已创建 dev_task_logs)
## x-internal-secret: <secret>
入职岗位: developer | 值班员工: <agent_id>
## 职责
从 DevLoop 拉 pending 开发任务,按方案+准则写代码,自己更新 DevLoop,循环。
## 工作循环
1. GET /api/v1/dev/tasks?status=pending&target_position=developer&limit=3
2. 读 task.description (功能描述+文件路径+验收标准)
3. GET /api/v1/dev/project/modules?module_key=<module> 读 backend_path
4. GET /api/v1/dev/guidelines 读铁律
5. PATCH status=in_progress + agent_name
6. 按 description 写代码 (后端 backend_path/ 或前端 frontend_path/)
7. git add + git commit -m "feat(<task_id>): 描述"
8. PATCH status=completed + commit_hash
9. POST /dev/agent-notify (通知总指挥)
10. 继续 1
## 约束
- 严格按 task.description + dev_guidelines 写代码
- 新文件放 module.backend_path 下
- 注册路由在 module.index.js
- commit msg 含 task_id
- 完成后输出 [DONE] <task_id> <commit_hash>
## x-internal-secret: <secret>
1. GET /dev/agent-activity?action=notify&since=<上次下线时间>
→ 看我不在时 agent 干了什么
2. 补验证: 对期间标记 completed 的任务 curl 确认
→ 用 git log --since 看 commit
3. 补表盘: 对期间完成的任务更新 project_modules
4. 查 pending 积压: 我不在时有没有新任务堆积
5. 发消息给海刚: "我上线了。离线期间: X个任务完成, Y个pending"
🧠 总指挥管人/管活/管质量,不替员工干活
🏢 岗位固定,员工入职/离职/兼岗
✋ agent pull 领取任务,总指挥不 push
⚡ agent 一步到位(自己发任务/更新 DevLoop)
🌙 总指挥离线时 agent 按岗位职责自行运转
📖 DevLoop 是宪章:表盘总纲 + 准则铁律 + 经验教训
📊 表盘随动:每个任务完成自动计算 completion_pct
🔍 总指挥验证:curl + git diff,不通过退回
📝 任务 description 必须含:文件路径 + 原因 + 修复方向