Skip to content

feat: add agentteam MVP with fan-out/fan-in execution flow Refs #2#4

Open
gangcaiyoule wants to merge 17 commits into
leochame:masterfrom
gangcaiyoule:agent-team
Open

feat: add agentteam MVP with fan-out/fan-in execution flow Refs #2#4
gangcaiyoule wants to merge 17 commits into
leochame:masterfrom
gangcaiyoule:agent-team

Conversation

@gangcaiyoule

Copy link
Copy Markdown
Contributor

Pull Request 描述

本 PR 实现了 agentteam 第一版 MVP,目标是为 OpenManus-Java 增加一个可运行的多 agent 协作执行主链路。

当前版本已支持主 agent 对大任务进行拆解,并将无依赖子任务分发给多个 subagent 并行执行,最终由主 agent 汇总结果。实现范围聚焦在 fan-out / fan-in 的最小可运行闭环,暂不支持 DAG、角色系统、持久化和代码 worktree 隔离。

更改类型

请选择适用的选项:

  • Bug修复 (non-breaking change which fixes an issue)
  • 新功能 (non-breaking change which adds functionality)
  • 破坏性更改 (fix or feature that would cause existing functionality to not work as expected)
  • 文档更新 (documentation only changes)
  • 代码重构 (refactoring existing code without changing functionality)
  • 性能优化 (performance improvements)
  • 测试改进 (adding missing tests or correcting existing tests)

相关Issue

Refs #2

更改详情

请详细描述您的更改:

  • 添加了 agentteam 独立模块结构:
    • com.openmanus.agentteam.application
    • com.openmanus.agentteam.domain
    • com.openmanus.agentteam.infra
  • 添加了 AgentTeam 第一版主链路:
    • 主 agent 拆解任务
    • 创建 TaskGroup / SubTask
    • 子任务提交到内存任务池
    • 多个 subagent 短轮询领取任务并执行
    • 主 agent 轮询等待并聚合结果
  • 第一版仅支持无依赖并行子任务:
    • 支持 fan-out / fan-in
    • 不支持 DAG
    • 不支持角色系统
  • 添加了任务拆解能力:
    • 优先使用 LLM 进行结构化拆解
    • 当 LLM 拆解失败或结果不合法时,回退到规则拆解

测试

请描述您为验证更改而运行的测试。

  • 单元测试
  • 集成测试
  • 手动测试

测试配置:

  • Java版本:21
  • 操作系统:Windows
  • Docker版本(如果适用):本地已具备 Docker 环境,用于项目原有 sandbox 相关能力联调

补充说明:

  • 已执行 Maven 编译验证,BUILD SUCCESS
  • 已执行与 agentteam 相关的聚焦测试
  • 已进行前后端联调和断点调试,验证 workflow-stream -> agentteam -> task pool -> subagent -> aggregation 主链路

检查清单

  • 我的代码遵循了项目的代码风格指南
  • 我已经进行了自我审查
  • 我已经添加了注释,特别是在难以理解的部分
  • 我已经相应地更改了文档
  • 我的更改没有产生新的警告
  • 我已经添加了证明我的修复有效或我的功能有效的测试
  • 新的和现有的单元测试都通过了我的更改
  • 任何依赖的更改都已合并并发布

截图(如果适用)

额外的上下文

当前 PR 仅提交 AgentTeam 第一版 MVP,重点是先打通最小可运行链路。

当前明确未覆盖的能力包括:

  • DAG 调度
  • subagent 角色系统
  • agent 间深度消息协作
  • 持久化任务存储
  • 多 agent 并行改同一代码文件后的 worktree / git merge 管理

审查者注意事项

请特别注意以下方面:

  • 代码质量和可读性
  • 性能影响
  • 安全性考虑
  • 向后兼容性
  • 测试覆盖率

审查清单(审查者填写):

  • 代码审查完成
  • 测试通过
  • 文档审查(如果适用)
  • 性能评估(如果适用)
  • 安全审查(如果适用)

该 PR 为阶段性提交,后续会继续在 #2 下推进 AgentTeam 的后续能力。

@gangcaiyoule

Copy link
Copy Markdown
Contributor Author

背景
当前 agentteam 在执行链路里,Team MasterSubAgent 复用了较多默认单 Agent 能力,工具集和提示词边界不够清晰。这样会带来两个问题:

  1. Team MasterSubAgent 的职责不够隔离
  2. agentteam 容易和默认单 Agent 执行链路相互污染

这次改动的目标,是在尽量不影响现有单 Agent 行为的前提下,为 agentteam 建立独立的角色执行入口、工具策略和提示词装配方式。

本次改动

  1. agentteam 引入角色维度执行抽象

    • 新增 AgentTeamRole
    • 新增 AgentTeamRoleExecutionPort
    • 新增 AgentTeamRoleExecutionService
    • SubAgentExecutionService 不再直接走默认 AgentExecutionPort,而是改为按角色执行
  2. 实现工具隔离

    • 新增 LocalAgentToolRegistry 作为本地工具统一来源
    • 新增 AgentTeamToolPolicy
    • 新增 TeamMasterToolPolicy
    • 新增 SubAgentToolPolicy
    • AgentTeamCoordinatorFactory 中按角色过滤并组装最终可用工具集
  3. 实现提示词隔离

    • 扩展 AgentTeamPromptProvider
    • 新增 ClasspathAgentTeamPromptProvider
    • 增加角色专属 prompt:
      • team-master-system.prompt.md
      • subagent-system.prompt.md
    • 更新 subagent-execution.prompt.md
  4. 完善 agentteam 专属执行链路

    • MasterAgentOrchestrator 语义明确为 Team Master 调度者
    • SubAgent 通过 AgentTeamCoordinatorFactory 获取角色定制后的协调器
    • AgentCoordinator 支持外部传入自定义 system prompt,而不影响默认单 Agent 行为
  5. 增加回归测试与隔离测试

    • AgentTeamPromptProviderTest
    • SubAgentToolPolicyTest
    • TeamMasterToolPolicyTest
    • SubAgentExecutionIsolationTest
    • SingleAgentRegressionTest
    • 同步更新相关 orchestrator / decomposition 测试

设计说明
这次实现有几个刻意保持克制的点:

  • 没有修改全局 AgentExecutionPort 契约,避免把 agentteam 的实验性角色语义扩散到整个系统
  • agentteam 的工具隔离放在本模块内部完成,不反向侵入默认单 Agent 路径
  • Team Master 仍然以 Java 侧 orchestrator 为主,没有一次性演进成完整的 LLM ReAct 调度器,先保证最小可运行链路和边界清晰

当前行为

  • 请求是否进入 agentteam,由入口层参数和配置共同决定
  • 进入 agentteam 后,MasterAgentOrchestrator 会先做任务分解
  • 如果任务不适合并行拆分,会在 agentteam 内部回退到单 Agent 执行
  • 如果适合并行拆分,才会真正进入多子任务执行流程

测试
已执行测试:

mvn "-Dcheckstyle.skip=true" "-Dtest=AgentTeamPromptProviderTest,SubAgentToolPolicyTest,TeamMasterToolPolicyTest,SubAgentExecutionIsolationTest,TaskDecompositionServiceTest,MasterAgentOrchestratorTest,SingleAgentRegressionTest" test

结果:BUILD SUCCESS

风险与后续

  • 当前“是否走 agentteam”仍主要由请求参数控制,后续可以考虑增加自动判定策略
  • Team Master 当前仍偏流程编排,后续可逐步增强为更强的智能调度角色
  • 工具策略目前是静态白名单/过滤逻辑,后续可以继续细化到任务类型级别

gangcaiyoule and others added 14 commits May 28, 2026 17:35
… to .gitignore

These worktree artifacts were created during local multi-agent coding tests.
They were committed as gitlinks (mode 160000), which caused GitHub to report
"Can't automatically merge" when creating PRs.

- Removed 3 gitlink entries from .agentteam/worktrees/
- Added .agentteam/ to .gitignore to prevent future accidental commits

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ack for coding tasks

- HostModeExecutionGateway.resolveWorkspacePath() now resolves relative paths
  against session-registered worktree root instead of user.dir
- ParallelCodingOrchestrator throws ParallelCodingException instead of
  silently falling back to Docker sandbox
- Added WORKTREE_UNAVAILABLE and PLAN_NOT_PARALLELIZABLE error codes

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Adapted AgentTeamExecutionContext to include worktreePath field
- Migrated SubAgentCodingExecutionService to new context-based API
- Merged ExecutionErrorCodes from both branches
- Updated tests to use new AgentTeamRoleExecutionPort interface

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Changed fallback test to expect ParallelCodingException instead of silent Docker fallback
- Fixed lambda signatures to match new AgentTeamRoleExecutionPort interface

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
基于 Git Worktree 的并行多 Agent 代码生成
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant