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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d47b79a77d34353e5bc8edf2b872e2fc86f33a86e89ad4b27071829ea5f50621
4
- data.tar.gz: 43bbcf0ae440c94fd9ff2aa8f1e4cd28acd7d984850ae7d63c3dcbc1173c78e3
3
+ metadata.gz: dffe825327912ea1a49ffba0cc2630a7e0078edbd9e2ac14b587b983c54ff7cd
4
+ data.tar.gz: e8efe4bb5e25e2f5b933b6c74dce6aa05249f5ef09967ee4e4d86abdd94611f2
5
5
  SHA512:
6
- metadata.gz: 67269ed3772754ca359b5eecfe4fadfdeb6cbd6d836c6421a39ae0e458d0bee0135ec669bf2894fd13f99557bedbceb6dfe12508cfa58b7f7e02bdb7601ab8aa
7
- data.tar.gz: 002b98eef6bf175add168a8cc3b3af9d21234e135a6f7b7d7f2ba0dd715192883072de261520075112dc3d22be9cbd3c81788f7b3f637250bcbde0f512183068
6
+ metadata.gz: f6f921ece654b0352aef2dc0a215231d17a367dc4129969a5ec58b22e98d4d06f0ed6c72392b2a1d9f9d103989db119647e6e154d7e8f6d79deea61e7cd22c48
7
+ data.tar.gz: 9efad024502c4024b1f866a63b768b73d2529910de4f2cbb5c69e0a45b11ed5be7624c0abb08942fbdb28afabfdc8249626a690126808862b3d0d72427da690f
@@ -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
- # 步骤1: 清理输入
116
- cleaned = input.strip
117
-
118
- # 步骤2: 处理外层引号(如果存在)
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
- # 步骤3: 反转义双重转义字符
124
- # 关键:只处理需要反转义的字符,保持JSON合法性
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
- return JSON.parse(original_input)
123
+ inner = JSON.parse(stripped)
124
+ return JSON.parse(inner) if inner.is_a?(String)
137
125
  rescue JSON::ParserError
138
- puts "Failed to parse JSON: #{e.message}"
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)
@@ -1,3 +1,3 @@
1
1
  module SmartAgent
2
- VERSION = "0.2.9"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zhuang Biaowei