|  | @@ -19,61 +19,62 @@ class JSONReplaceTool(BuiltinTool):
 | 
	
		
			
				|  |  |          content = tool_parameters.get('content', '')
 | 
	
		
			
				|  |  |          if not content:
 | 
	
		
			
				|  |  |              return self.create_text_message('Invalid parameter content')
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          # get query
 | 
	
		
			
				|  |  |          query = tool_parameters.get('query', '')
 | 
	
		
			
				|  |  |          if not query:
 | 
	
		
			
				|  |  |              return self.create_text_message('Invalid parameter query')
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          # get replace value
 | 
	
		
			
				|  |  |          replace_value = tool_parameters.get('replace_value', '')
 | 
	
		
			
				|  |  |          if not replace_value:
 | 
	
		
			
				|  |  |              return self.create_text_message('Invalid parameter replace_value')
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          # get replace model
 | 
	
		
			
				|  |  |          replace_model = tool_parameters.get('replace_model', '')
 | 
	
		
			
				|  |  |          if not replace_model:
 | 
	
		
			
				|  |  |              return self.create_text_message('Invalid parameter replace_model')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        ensure_ascii = tool_parameters.get('ensure_ascii', True)
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              if replace_model == 'pattern':
 | 
	
		
			
				|  |  |                  # get replace pattern
 | 
	
		
			
				|  |  |                  replace_pattern = tool_parameters.get('replace_pattern', '')
 | 
	
		
			
				|  |  |                  if not replace_pattern:
 | 
	
		
			
				|  |  |                      return self.create_text_message('Invalid parameter replace_pattern')
 | 
	
		
			
				|  |  | -                result = self._replace_pattern(content, query, replace_pattern, replace_value)
 | 
	
		
			
				|  |  | +                result = self._replace_pattern(content, query, replace_pattern, replace_value, ensure_ascii)
 | 
	
		
			
				|  |  |              elif replace_model == 'key':
 | 
	
		
			
				|  |  | -                result = self._replace_key(content, query, replace_value)
 | 
	
		
			
				|  |  | +                result = self._replace_key(content, query, replace_value, ensure_ascii)
 | 
	
		
			
				|  |  |              elif replace_model == 'value':
 | 
	
		
			
				|  |  | -                result = self._replace_value(content, query, replace_value) 
 | 
	
		
			
				|  |  | +                result = self._replace_value(content, query, replace_value, ensure_ascii)
 | 
	
		
			
				|  |  |              return self.create_text_message(str(result))
 | 
	
		
			
				|  |  |          except Exception:
 | 
	
		
			
				|  |  |              return self.create_text_message('Failed to replace JSON content')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      # Replace pattern
 | 
	
		
			
				|  |  | -    def _replace_pattern(self, content: str, query: str, replace_pattern: str, replace_value: str) -> str:
 | 
	
		
			
				|  |  | +    def _replace_pattern(self, content: str, query: str, replace_pattern: str, replace_value: str, ensure_ascii: bool) -> str:
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              input_data = json.loads(content)
 | 
	
		
			
				|  |  |              expr = parse(query)
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              matches = expr.find(input_data)
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              for match in matches:
 | 
	
		
			
				|  |  |                  new_value = match.value.replace(replace_pattern, replace_value)
 | 
	
		
			
				|  |  |                  match.full_path.update(input_data, new_value)
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | -            return json.dumps(input_data, ensure_ascii=True)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return json.dumps(input_data, ensure_ascii=ensure_ascii)
 | 
	
		
			
				|  |  |          except Exception as e:
 | 
	
		
			
				|  |  |              return str(e)
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      # Replace key
 | 
	
		
			
				|  |  | -    def _replace_key(self, content: str, query: str, replace_value: str) -> str:
 | 
	
		
			
				|  |  | +    def _replace_key(self, content: str, query: str, replace_value: str, ensure_ascii: bool) -> str:
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              input_data = json.loads(content)
 | 
	
		
			
				|  |  |              expr = parse(query)
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              matches = expr.find(input_data)
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              for match in matches:
 | 
	
		
			
				|  |  |                  parent = match.context.value
 | 
	
		
			
				|  |  |                  if isinstance(parent, dict):
 | 
	
	
		
			
				|  | @@ -86,21 +87,21 @@ class JSONReplaceTool(BuiltinTool):
 | 
	
		
			
				|  |  |                          if isinstance(item, dict) and old_key in item:
 | 
	
		
			
				|  |  |                              value = item.pop(old_key)
 | 
	
		
			
				|  |  |                              item[replace_value] = value
 | 
	
		
			
				|  |  | -            return json.dumps(input_data, ensure_ascii=True)
 | 
	
		
			
				|  |  | +            return json.dumps(input_data, ensure_ascii=ensure_ascii)
 | 
	
		
			
				|  |  |          except Exception as e:
 | 
	
		
			
				|  |  |              return str(e)
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      # Replace value
 | 
	
		
			
				|  |  | -    def _replace_value(self, content: str, query: str, replace_value: str) -> str:
 | 
	
		
			
				|  |  | +    def _replace_value(self, content: str, query: str, replace_value: str, ensure_ascii: bool) -> str:
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              input_data = json.loads(content)
 | 
	
		
			
				|  |  |              expr = parse(query)
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              matches = expr.find(input_data)
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              for match in matches:
 | 
	
		
			
				|  |  |                  match.full_path.update(input_data, replace_value)
 | 
	
		
			
				|  |  | -                
 | 
	
		
			
				|  |  | -            return json.dumps(input_data, ensure_ascii=True)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return json.dumps(input_data, ensure_ascii=ensure_ascii)
 | 
	
		
			
				|  |  |          except Exception as e:
 | 
	
		
			
				|  |  | -            return str(e)
 | 
	
		
			
				|  |  | +            return str(e)
 |