返回 DeepSeek-Reasonix
usecapability_skillargs.go
根目录 / internal / agent / usecapability_skillargs.go
1 package agent
2
3 import (
4 "encoding/json"
5 "fmt"
6 "strings"
7 )
8
9 func normalizeSkillCapabilityArgs(skillName string, args json.RawMessage) json.RawMessage {
10 raw := strings.TrimSpace(string(args))
11 if raw == "" || raw == "null" {
12 return marshalSkillPayload(map[string]any{"name": skillName})
13 }
14 var text string
15 if json.Unmarshal(args, &text) == nil {
16 return normalizeSkillCapabilityText(skillName, text)
17 }
18 var payload map[string]any
19 if json.Unmarshal(args, &payload) == nil {
20 return normalizeSkillCapabilityObject(skillName, payload)
21 }
22 return args
23 }
24
25 func normalizeSkillCapabilityText(skillName, text string) json.RawMessage {
26 trimmed := strings.TrimSpace(text)
27 if trimmed == "" {
28 return marshalSkillPayload(map[string]any{"name": skillName})
29 }
30 if strings.HasPrefix(trimmed, "{") {
31 var payload map[string]any
32 if json.Unmarshal([]byte(trimmed), &payload) == nil {
33 return normalizeSkillCapabilityObject(skillName, payload)
34 }
35 }
36 return marshalSkillPayload(map[string]any{"name": skillName, "arguments": trimmed})
37 }
38
39 func normalizeSkillCapabilityObject(skillName string, payload map[string]any) json.RawMessage {
40 if _, ok := payload["name"]; !ok {
41 payload["name"] = skillName
42 }
43 if _, ok := payload["arguments"]; !ok {
44 if task, hasTask := payload["task"]; hasTask {
45 payload["arguments"] = skillCapabilityTaskArgument(task)
46 }
47 }
48 return marshalSkillPayload(payload)
49 }
50
51 func skillCapabilityTaskArgument(task any) string {
52 if text, ok := task.(string); ok {
53 return strings.TrimSpace(text)
54 }
55 data, err := json.Marshal(task)
56 if err != nil {
57 return fmt.Sprint(task)
58 }
59 return string(data)
60 }
61
62 func marshalSkillPayload(payload map[string]any) json.RawMessage {
63 data, err := json.Marshal(payload)
64 if err != nil {
65 return json.RawMessage(`{}`)
66 }
67 return data
68 }
69
69 lines GO