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

Method parseInterruptConfig

pkg/middleware/hitl.go:119–167  ·  view source on GitHub ↗

parseInterruptConfig 解析审核配置

(toolName string, cfg any)

Source from the content-addressed store, hash-verified

117
118// parseInterruptConfig 解析审核配置
119func (m *HumanInTheLoopMiddleware) parseInterruptConfig(toolName string, cfg any) *InterruptConfig {
120 switch v := cfg.(type) {
121 case bool:
122 if !v {
123 return nil // 禁用审核
124 }
125 // 启用默认审核配置
126 return &InterruptConfig{
127 Enabled: true,
128 AllowedDecisions: m.defaultAllowedDecisions,
129 Message: fmt.Sprintf("Tool '%s' requires approval before execution", toolName),
130 }
131
132 case map[string]any:
133 // 自定义配置
134 interruptCfg := &InterruptConfig{
135 Enabled: true,
136 }
137
138 // 解析 allowed_decisions
139 if decisions, ok := v["allowed_decisions"].([]any); ok {
140 interruptCfg.AllowedDecisions = make([]DecisionType, 0, len(decisions))
141 for _, d := range decisions {
142 if ds, ok := d.(string); ok {
143 interruptCfg.AllowedDecisions = append(interruptCfg.AllowedDecisions, DecisionType(ds))
144 }
145 }
146 }
147 if len(interruptCfg.AllowedDecisions) == 0 {
148 interruptCfg.AllowedDecisions = m.defaultAllowedDecisions
149 }
150
151 // 解析 message
152 if msg, ok := v["message"].(string); ok {
153 interruptCfg.Message = msg
154 } else {
155 interruptCfg.Message = fmt.Sprintf("Tool '%s' requires approval before execution", toolName)
156 }
157
158 return interruptCfg
159
160 case *InterruptConfig:
161 return v
162
163 default:
164 hitlLog.Warn(context.Background(), "invalid interrupt config", map[string]any{"tool": toolName, "type": fmt.Sprintf("%T", cfg)})
165 return nil
166 }
167}
168
169// WrapToolCall 拦截工具调用,请求人工审核
170func (m *HumanInTheLoopMiddleware) WrapToolCall(ctx context.Context, req *ToolCallRequest, handler ToolCallHandler) (*ToolCallResponse, error) {

Callers 1

Calls 2

DecisionTypeTypeAlias · 0.70
WarnMethod · 0.65

Tested by

no test coverage detected