返回 DeepSeek-Reasonix
dependency_diagnostics.go
根目录 / internal / skill / dependency_diagnostics.go
1 package skill
2
3 import (
4 "fmt"
5 "strings"
6
7 "reasonix/internal/config"
8 )
9
10 // CheckMCPRequirements keeps dependency readiness separate from tool identity.
11 func CheckMCPRequirements(skills []Skill, plugins []config.PluginEntry, failed map[string]string) []ToolReferenceDiagnostic {
12 configured := map[string]bool{}
13 for _, p := range plugins {
14 configured[strings.TrimSpace(p.Name)] = true
15 }
16 var out []ToolReferenceDiagnostic
17 for _, sk := range skills {
18 if !strings.EqualFold(sk.AutoUse, "require") {
19 continue
20 }
21 for _, dep := range sk.Requires {
22 dep = strings.TrimSpace(dep)
23 server, ok := strings.CutPrefix(dep, "mcp-server:")
24 if !ok {
25 continue
26 }
27 code, message := "", ""
28 if !configured[server] {
29 code = "skill.mcp_dependency_missing"
30 message = fmt.Sprintf("skill %q requires %s but that MCP server is not configured", sk.Name, dep)
31 } else if reason := failed[server]; reason != "" {
32 code = "skill.mcp_dependency_failed"
33 message = fmt.Sprintf("skill %q requires %s which is host-failed: %s", sk.Name, dep, reason)
34 }
35 if code != "" {
36 out = append(out, ToolReferenceDiagnostic{sk.Name, dep, code, "warning", message})
37 }
38 }
39 }
40 return out
41 }
42
42 lines GO