MCPcopy Create free account
hub / github.com/astercloud/aster / BuildSubAgentMiddlewareStack

Function BuildSubAgentMiddlewareStack

pkg/middleware/subagent.go:558–593  ·  view source on GitHub ↗

BuildSubAgentMiddlewareStack 构建子代理的中间件栈 根据子代理规格决定是否继承父代理中间件

(spec SubAgentSpec, parentMiddlewares []Middleware)

Source from the content-addressed store, hash-verified

556// BuildSubAgentMiddlewareStack 构建子代理的中间件栈
557// 根据子代理规格决定是否继承父代理中间件
558func 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 实现使用

Callers 2

Calls 2

NameMethod · 0.65
DebugMethod · 0.65

Tested by 1