BuildSubAgentMiddlewareStack 构建子代理的中间件栈 根据子代理规格决定是否继承父代理中间件
(spec SubAgentSpec, parentMiddlewares []Middleware)
| 556 | // BuildSubAgentMiddlewareStack 构建子代理的中间件栈 |
| 557 | // 根据子代理规格决定是否继承父代理中间件 |
| 558 | func BuildSubAgentMiddlewareStack(spec SubAgentSpec, parentMiddlewares []Middleware) []Middleware { |
| 559 | if !spec.InheritMiddlewares { |
| 560 | // 不继承,只使用子代理专用中间件 |
| 561 | return spec.MiddlewareOverrides |
| 562 | } |
| 563 | |
| 564 | // 继承父代理中间件 |
| 565 | stack := make([]Middleware, 0, len(parentMiddlewares)+len(spec.MiddlewareOverrides)) |
| 566 | |
| 567 | // 1. 首先添加父代理中间件 |
| 568 | stack = append(stack, parentMiddlewares...) |
| 569 | |
| 570 | // 2. 然后添加子代理专用中间件(覆盖或追加) |
| 571 | if len(spec.MiddlewareOverrides) > 0 { |
| 572 | // 创建名称映射用于覆盖检测 |
| 573 | nameMap := make(map[string]int) |
| 574 | for i, m := range stack { |
| 575 | nameMap[m.Name()] = i |
| 576 | } |
| 577 | |
| 578 | // 处理覆盖和追加 |
| 579 | for _, override := range spec.MiddlewareOverrides { |
| 580 | if idx, exists := nameMap[override.Name()]; exists { |
| 581 | // 覆盖同名中间件 |
| 582 | stack[idx] = override |
| 583 | saLog.Debug(context.Background(), "override middleware", map[string]any{"name": override.Name()}) |
| 584 | } else { |
| 585 | // 追加新中间件 |
| 586 | stack = append(stack, override) |
| 587 | saLog.Debug(context.Background(), "append middleware", map[string]any{"name": override.Name()}) |
| 588 | } |
| 589 | } |
| 590 | } |
| 591 | |
| 592 | return stack |
| 593 | } |
| 594 | |
| 595 | // GetMiddlewareForSubAgent 获取子代理应该使用的中间件栈 |
| 596 | // 这是一个辅助函数,供 SubAgentFactory 实现使用 |