- 7 capabilities: agent-registry, task-router, receipt-protocol, forgejo-integration, matrix-chatops, agent-adapter, orchestrator-core - Tech stack: Rust + axum + zigbuild (single binary) - Forgejo as task source of truth - Matrix as real-time ChatOps layer - Adapter pattern for multi-agent type support
2.9 KiB
2.9 KiB
ADDED Requirements
Requirement: Forgejo webhook event ingestion
Orchestrator SHALL 监听 Forgejo webhook 事件(Issue 创建/更新/标签变更、PR 创建/更新/合并、Push 等),解析为内部任务事件。
Scenario: New issue with agent label
- WHEN Forgejo 上创建了新 Issue,带有
agent:code标签 - THEN Orchestrator SHALL 接收到
issueswebhook 事件,解析为task.created事件,提取 Issue 编号、标题、描述、标签、仓库信息
Scenario: Issue label changed to trigger assignment
- WHEN Issue 的标签从
agent:code变更为agent:review - THEN Orchestrator SHALL 生成
task.reroute事件,重新匹配具备review能力的 Agent
Requirement: Task parsing from Issue
Orchestrator SHALL 将 Issue 解析为结构化任务:task_id、source(forgejo issue URL)、type(由标签推断)、priority(由 label/milestone 推断)、requirements(Issue body)、labels。
Scenario: Issue with priority label
- WHEN Issue 带有
priority:high标签和agent:code标签 - THEN 解析出的任务 SHALL 包含
priority: "high"和type: "code"
Requirement: Agent matching and assignment
Task Router SHALL 根据任务类型、所需能力、Agent 负载和在线状态,将任务分配给最合适的 Agent。
Scenario: Match by capability and load
- WHEN 一个
code:typescript+review类型的任务需要分配 - THEN Task Router SHALL 选择声明了对应能力、当前并发任务数未达上限、且状态为
online的 Agent
Scenario: No matching agent available
- WHEN 没有在线 Agent 满足任务所需能力
- THEN 任务 SHALL 进入
queued状态,Task Router SHALL 通过 Matrix 通知人工介入
Requirement: Task lifecycle management
任务 SHALL 具有明确的生命周期状态:created → assigned → running → completed / failed / agent_lost。
Scenario: Task completes successfully
- WHEN Agent 通过 receipt 协议报告任务完成
- THEN 任务状态 SHALL 变更为
completed,Issue 标签 SHALL 更新为status:done
Scenario: Task fails with error
- WHEN Agent 报告任务失败,附带错误信息
- THEN 任务状态 SHALL 变更为
failed,Issue comment SHALL 写入错误摘要,Task Router SHALL 根据策略决定重试或升级
Requirement: Manual task assignment
人类 SHALL 能通过 Matrix slash command 或 Forgejo Issue comment 手动指定任务分配给特定 Agent。
Scenario: Manual assignment via Matrix
- WHEN 人类在 Matrix 发送
/assign @worker-03 issue#42 - THEN Task Router SHALL 将 Issue #42 分配给 agent_id 为
worker-03的 Agent,无论自动匹配结果
Scenario: Manual assignment via Issue comment
- WHEN 人类在 Issue #42 评论
/assign worker-03 - THEN 效果同上