多智能体角色与会话派生
Swarm 角色与会话生成
相关源文件
本章引用的主要源码文件:
src/protocol_tests.rssrc/server/client_actions.rssrc/server/client_comm.rssrc/server/client_lifecycle.rssrc/server/client_session.rssrc/server/client_state.rssrc/server/comm_control.rssrc/server/comm_control_tests.rssrc/server/comm_control_tests/assign_blocked.rssrc/server/comm_control_tests/assign_less_loaded.rssrc/server/comm_control_tests/assign_ready_agent.rssrc/server/comm_control_tests/assign_task.rssrc/server/comm_control_tests/await_any.rssrc/server/comm_control_tests/await_disconnect.rssrc/server/comm_control_tests/await_late_joiners.rssrc/server/comm_control_tests/await_reload_deadline.rssrc/server/comm_control_tests/await_reload_final.rssrc/server/comm_plan.rssrc/server/comm_session.rssrc/server/comm_sync.rssrc/server/debug_session_admin.rssrc/server/headless.rssrc/server/swarm.rssrc/tool/bash_tests.rssrc/tool/communicate.rssrc/tui/backend.rs
本文档描述了 jcode 集群系统的协调层。内容涵盖:代理如何被分类为不同角色、集群成员的生命周期、有头(UI)和无头(后台)会话的生成机制,以及集群中维护的共享状态。
集群角色
集群基于协调器和代理之间的主要区分来运作。这种层级结构确保计划生成和高级编排是集中式的,而执行则是分布式的。
| 角色 | 职责 |
|---|---|
| 协调器 | 管理 VersionedPlan 的权威会话。它是唯一允许调用 handle_comm_spawn 来创建新代理的角色 src/server/comm_session.rs:27-52。 |
| 代理 | 执行单元,接收来自协调器的任务分配。代理通过 update_member_status 向集群报告状态变更 src/server/comm_control.rs:14-15,并可以通过黑板共享上下文 src/server/client_comm.rs:5-7。 |
SwarmMember 状态机
集群中的每个参与者都通过 SwarmMember 结构体进行跟踪 src/server/client_lifecycle.rs:41-44。status 字段控制代理的可用性,并通过 broadcast_swarm_status 广播给所有成员 src/server/comm_session.rs:8-9。
| 状态 | 描述 |
|---|---|
spawned | 会话已初始化,但客户端进程(TUI 或无头)尚未连接 src/server/comm_session.rs:217-220。 |
ready | 会话已连接且空闲,等待任务 src/server/comm_control.rs:42-43。 |
running | 代理正在处理提示或执行工具 src/server/comm_session.rs:179-180。 |
blocked | 代理正在等待依赖项(例如,另一个代理的输出或计划更新)src/server/comm_control.rs:172-173。 |
completed | 分配的任务已成功完成 src/server/comm_control.rs:42-43。 |
failed | 代理在执行过程中遇到不可恢复的错误 src/server/comm_session.rs:12-13。 |
stopped | 会话通过 handle_comm_stop 手动终止 src/server/comm_session.rs:27。 |
crashed | 会话心跳超时或进程意外退出 src/server/client_session.rs:90-93。 |
来源:src/server/client_lifecycle.rs:41-44, src/server/comm_session.rs:27-220, src/server/comm_control.rs:31-45, src/server/swarm.rs:146-153
会话生成
会话生成由 handle_comm_spawn 处理 src/server/comm_session.rs:27。它通过 SwarmSpawnMode 枚举支持两种不同的模式:有头(可见的 TUI 窗口)和无头(后台代理运行时)src/server/client_lifecycle.rs:67-88。
有头会话(可见)
有头会话通过启动一个新的终端窗口来生成,该窗口以 resume 模式运行 jcode 二进制文件 src/server/comm_session.rs:107-113。
- 准备:
prepare_visible_spawn_session创建一个新的Session对象,设置工作目录,并将其保存到磁盘src/server/comm_session.rs:171-211。 - 启动:系统使用
spawn_visible_session_window通过spawn_resume_in_new_terminal_with_provider调用平台特定的终端模拟器src/server/comm_session.rs:89-114。 - 启动注入:如果提供了
startup_message,则通过persist_headed_startup_message保存src/server/comm_session.rs:146-152。TUI 客户端在启动时从client-input-文件中读取此消息。
无头会话(后台)
无头会话完全在服务器进程内运行,没有 TUI。
- 创建:
create_headless_session在内存中初始化一个Agentsrc/server/comm_session.rs:9。 - 执行:服务器直接调用
process_message_streaming_mpsc,绕过 Unix 套接字协议进行内部消息传递src/server/comm_session.rs:1。 - 通信:无头代理使用内部 MPSC 通道(
event_tx)向集群的其他部分发送ServerEvent通知src/server/comm_session.rs:217-230。
会话生成流程
以下图表将新代理的自然语言请求与负责生命周期的代码实体连接起来。
标题:集群生成逻辑流程
来源:src/server/comm_session.rs:1-230, src/server/client_lifecycle.rs:41-88
共享上下文与 VersionedPlan
集群维护一个共享状态,以防止重复工作并确保一致性。
VersionedPlan
VersionedPlan 结构体是集群目标的权威来源,在 swarm_plans 注册表中进行跟踪 src/server/comm_control.rs:58-59。
- 参与者:一个
HashSet,包含当前计划中涉及的session_idsrc/server/comm_control.rs:91-115。 - 项:一个
PlanItem列表,每个项通过assigned_to分配给特定代理,并通过SwarmTaskProgress进行跟踪src/server/comm_control.rs:95-106。 - 同步:对计划的任何修改都会触发
broadcast_swarm_plan,该操作将完整的更新状态发送给所有参与者src/server/comm_control.rs:11-12。
共享上下文(黑板)
shared_context 是一个键值存储,按 swarm_id 进行分区 src/server/client_lifecycle.rs:41。
- 共享:代理使用
handle_comm_share将发现或文件内容发布到黑板src/server/client_comm.rs:6-7。 - 读取:代理使用
handle_comm_read检索特定键,或使用handle_comm_read_context获取整个上下文历史src/server/client_comm.rs:6-7,src/server/comm_sync.rs:29-31。 - 访问控制:协调器和
worktree_manager角色具有读取完整上下文的更高权限src/server/comm_sync.rs:100-114。
标题:共享状态数据流
来源:src/server/client_comm.rs:1-9, src/server/comm_control.rs:58-115, src/server/client_lifecycle.rs:41-61
生命周期与清理
当会话结束或服务器重新加载时,集群必须协调其状态。
- 会话清除:
handle_clear_session从集群和计划参与者中移除旧的session_id,并用一个新的代理替换它,同时保留调试标志和集群成员身份src/server/client_session.rs:123-146。 - 冲突跟踪:服务器跟踪
files_touched_by_session,以检测多个代理是否正在编辑同一个文件src/server/client_lifecycle.rs:138。 - 过期任务清理:
refresh_swarm_task_staleness监控SwarmTaskProgress的心跳。如果代理在JCODE_SWARM_TASK_STALE_AFTER_SECS内未能签到,其任务状态将被移至running_stalesrc/server/swarm.rs:165-187。 - 强制停止:协调器可以使用带有
force: true参数的handle_comm_stop来终止工作会话并移除其中断队列src/server/comm_session.rs:142-155。
来源:src/server/client_session.rs:123-197, src/server/comm_session.rs:142-205, src/server/swarm.rs:165-187