// Package orchestration 实现 Cyrene v2 运行时的子代理编排层 // (DevDocs/design/04-运行时.md §2 与 DevDocs/design/05-子代理.md)。 // // 当前台会话(agent 循环)判定任务复杂时,它会热切换到编排模式,并派发后台 // 子代理并发运行,不阻塞前台会话。每个子代理都是绑定「角色 + 行为模式」的 agent // 实例,在隔离上下文中执行,并持有自己的工作记忆。进度与状态经 agent 间总线回流 // 前台会话;全部子代理结束后,它们的结果被合并交给前台会话。 // // # 生命周期 // // Scheduler 由 New 创建一次,并注入其依赖(一个循环模板、总线、可选的 comm 探针、 // 记忆/sink、tracer、代审者)。子代理由 Spawn 创建:它登记子代理、发布一条 // 「已派发」进度事件,并在后台启动其执行。执行受 MaxParallel 约束,同时至多这么 // 多个子代理在跑,超出的排队等待。每次运行受 PerAgentTimeout 约束。子代理状态从 // pending -> running -> {done, failed, aborted} 之一流转,每次终结态转移都会写入 // 一份摘要并发布一条进度事件。Abort 与 CancelAll 分别停掉单个子代理或全部子代理 // (防失控)。 // // # 结果合并 // // Join 等待每个已派发的子代理进入终结态(或 ctx 被取消),返回一个 MergedResult, // 汇总每个子代理的摘要与循环结果。 // // # 隔离 // // 子代理的上下文与工作记忆在构造上即隔离:Spawn 把 Spec.Context 深拷贝进 // SubAgent.Context,并为每个子代理创建全新的 WorkingMemory,因此子代理从不共享 // 前台会话的上下文。 // // # 治理 // // 敏感操作经注入的 *audit.Approver 审计(见 Approve):策略判断属于上层,调度器 // 只触发审计记录。任务记忆落库经 SinkMemory 提供,它委托给注入的 *memory.Store, // 因此作用域归类(user/persona/project)留在调用点。 package orchestration