Appearance
ATM (Agent Task Manager) AI 任务调度系统架构与本地在行 Agent (Antigravity / SpecFlow / arkcli) 适配实战
在多 Agent 协同研发的实际场景中,开发团队往往需要在本地宿主机运行多种不同的 AI Agent CLI(如 Antigravity、SpecFlow SDD、Claude Code、arkcli 等)。为了解决任务下发受阻、缺少实时终端流输出、并发冲突以及无法响应交互质询的问题,ATM (Agent Task Manager) 搭建了 "Cloudflare Hub (云端大脑) + 本地守护进程 (Local Daemon)" 的混合云拓扑。
本文系统性归纳 ATM 的架构实现细节、关键攻坚突破以及针对本地在行 Agent 的专项适配方案。
🗺️ 一、 架构拓扑与全景通信流程
🛠️ 二、 核心功能增强与攻坚突破
1. 真实物理进程生命周期控制 (SIGTERM / SIGKILL / SIGSTOP / SIGCONT)
- 根因:原先调用
/cancel仅修改内存与数据库中的状态字段,未强杀底层childProcess句柄,易造成宿主机后台僵尸进程与 CPU 泄漏。 - 解决:在 [MultiToolAdapter](file:///Users/jinqicheng/Desktop/58work/79team/atm-monorepo/apps/atm-daemon/src/adapters/multi-tool.adapter.ts) 中建立
taskId ➔ ChildProcess映射表。killTask(taskId):优先发送SIGTERM优雅终止;若 1 秒内未退出,强制发送SIGKILL彻底强杀。pauseTask(taskId)/resumeTask(taskId):利用 POSIX 信号发送SIGSTOP/SIGCONT,实现任务的真正的挂起与恢复。
2. 双向 stdin 交互流管道注入 (SEND_INPUT)
- 场景:Agent CLI 运行中经常出现需要用户确认(
y/n)、选择编号或应答 SpecFlow 的 Grill-Me 质询。 - 解决:
- REST 端点:
POST /api/local/tasks/:id/stdin(接收 JSON{ input: "y" })。 - WebSocket 帧:
SEND_INPUT信令帧直接写入childProcess.stdin。 - 前端界面:在 Console 终端底部增加带有 Prompt 提示的
stdin指令注入条与发送按钮。
- REST 端点:
3. 本地优先级并发队列管理器 (LocalQueueManager)
- 场景:防止离线或并发连续派单时冲垮宿主机资源。
- 解决:
- 优先级权重排序:
urgent(权重4) >high(3) >normal(2) >low(1)。 - 并发数受控:设置
maxConcurrentTasks(默认 2),超额任务在内存队列中排队。 - 超时熔断:支持
timeoutSeconds,超时自动强杀子进程并挂载TaskStatus.FAILED。
- 优先级权重排序:
4. 任务交割产物 (Artifacts) 与 Git Diff 捕获
- 解决:任务退出时,适配器自动在执行工作区探查:
- 执行
git diff --stat捕获修改的代码切面与行数。 - 自动汇总 Markdown 产物(如 SpecFlow 的
.specify/<reqName>/契约文档或 Antigravity 的.agents/skills/技能文件),写入TaskResult.gitDiffSummary与artifacts数组。
- 执行
🤖 三、 适配本地在行 Agent 的专项方案
在 79team 的开发环境中,针对 3 类在行 Agent 实现了专门的适配器分流逻辑:
1. 🛸 Antigravity Adapter (antigravity.adapter.ts)
- 目标:适配 Google DeepMind Antigravity AI Pair-programming Agent。
- 逻辑:自动解析 Antigravity 执行指令,探查工作区下由对话生成的产物,并将关联修改的 Patch 总结在
TaskResult中。
2. 📐 SpecFlow SDD Adapter (specflow.adapter.ts)
- 目标:适配 58 业财 SDD 工具链 (
specflow sddx,specflow specify,specflow plan,specflow task,specflow review)。 - 逻辑:
- 自动在指令追加
--non-interactive标志防止盲目挂起。 - 自动抓取并格式化
.specify/<reqName>/目录下的规格与metrics.json审计评分报告。
- 自动在指令追加
3. 🌋 火山引擎 arkcli Adapter (arkcli.adapter.ts)
- 目标:适配火山引擎
arkcli命令(支持volc-codingplan与volc-agentplan)。 - 逻辑:自动绑定 Profile 凭证切面,处理 Responses API 的流式吐出。
🎯 四、 验证结果
经全套单元测试与工程构建验证:
pnpm -r build:TypeScript 编译 100% 通过。pnpm -r test:apps/atm-worker(2 个测试)与apps/atm-daemon(7 个测试,包含queue-and-adapters.test.ts)共 9 个测试用例全部通过。
💡 附:关于图形能力扩展 (Archify 生图技能) 的建议
针对您提出的 “基于 Archify 沉淀 79team 私有生图技能,或丰富到 /knowledge-base 让生成的文章具备图形能力” 的设想,给出如下落地建议:
- VitePress 原生渲染 (最轻量建议):
- 当前
/knowledge-base基于 VitePress 构建,系统已原生支持 Mermaid 语法(如本文开头的sequenceDiagram)。VitePress 会将其在前端直接渲染为矢量 SVG 图表,无额外生图脚本依赖。
- 当前
- 沉淀
79team-archify专属生图技能 (推荐扩展):- 可以在
.agents/skills/archify-diagrams/或~/.gemini/config/skills/中集成基于 Archify / Puppeteer / CLI 的架构图生成 Skill。 - 当 Agent 在编写知识库文章或设计 SpecFlow 架构时,可通过 Skill 输入 Markdown / 代码结构,自动导出高保真 png/svg 图片并存入
site/public/供文章引用。
- 可以在