smart_agent 0.2.9 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/smart_agent/agent.rb +18 -27
- data/lib/smart_agent/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dffe825327912ea1a49ffba0cc2630a7e0078edbd9e2ac14b587b983c54ff7cd
|
|
4
|
+
data.tar.gz: e8efe4bb5e25e2f5b933b6c74dce6aa05249f5ef09967ee4e4d86abdd94611f2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f6f921ece654b0352aef2dc0a215231d17a367dc4129969a5ec58b22e98d4d06f0ed6c72392b2a1d9f9d103989db119647e6e154d7e8f6d79deea61e7cd22c48
|
|
7
|
+
data.tar.gz: 9efad024502c4024b1f866a63b768b73d2529910de4f2cbb5c69e0a45b11ed5be7624c0abb08942fbdb28afabfdc8249626a690126808862b3d0d72427da690f
|
data/lib/smart_agent/agent.rb
CHANGED
|
@@ -109,41 +109,32 @@ module SmartAgent
|
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
def safe_parse(input)
|
|
112
|
-
|
|
113
|
-
original_input = input.dup
|
|
112
|
+
return input unless input.is_a?(String)
|
|
114
113
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if cleaned.start_with?('"') && cleaned.end_with?('"')
|
|
120
|
-
cleaned = cleaned[1...-1]
|
|
114
|
+
begin
|
|
115
|
+
return JSON.parse(input)
|
|
116
|
+
rescue JSON::ParserError
|
|
117
|
+
nil
|
|
121
118
|
end
|
|
122
119
|
|
|
123
|
-
|
|
124
|
-
#
|
|
125
|
-
cleaned = cleaned
|
|
126
|
-
.gsub(/\\"/, '"') # 反转义引号
|
|
127
|
-
.gsub(/\\\\/, '\\') # 反转义反斜杠
|
|
128
|
-
# 不反转义\n, \t, \r等,因为它们是JSON合法的转义序列
|
|
129
|
-
|
|
130
|
-
# 步骤4: 尝试解析
|
|
131
|
-
begin
|
|
132
|
-
return JSON.parse(cleaned)
|
|
133
|
-
rescue JSON::ParserError => e
|
|
134
|
-
# 如果清理后失败,尝试原始输入
|
|
120
|
+
stripped = input.strip
|
|
121
|
+
if stripped.start_with?('"') && stripped.end_with?('"') # 双重编码: "{\"command\":\"ls\"}"
|
|
135
122
|
begin
|
|
136
|
-
|
|
123
|
+
inner = JSON.parse(stripped)
|
|
124
|
+
return JSON.parse(inner) if inner.is_a?(String)
|
|
137
125
|
rescue JSON::ParserError
|
|
138
|
-
|
|
139
|
-
puts "Original: #{original_input}"
|
|
140
|
-
puts "Cleaned: #{cleaned}"
|
|
141
|
-
# 返回原始字符串以便后续处理
|
|
142
|
-
return original_input
|
|
126
|
+
nil
|
|
143
127
|
end
|
|
144
128
|
end
|
|
145
|
-
end
|
|
146
129
|
|
|
130
|
+
begin
|
|
131
|
+
JSON.parse(stripped.gsub(/\\"/, '"')) # 只做引号级清理,不碰反斜杠
|
|
132
|
+
rescue JSON::ParserError => e
|
|
133
|
+
SmartAgent.logger&.warn("safe_parse failed: #{e.class}: #{e.message} input=#{input[0, 200].inspect}")
|
|
134
|
+
input
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
147
138
|
def call_tools(result, calls: nil)
|
|
148
139
|
@agent.processor(:tool).call({ :status => :start }) if @agent.processor(:tool)
|
|
149
140
|
SmartAgent.logger.info("call tools: " + result.to_s)
|
data/lib/smart_agent/version.rb
CHANGED