@@ -156,6 +156,72 @@ def test_parse_user_message_inside_subagent(self):
156156 assert isinstance (message , UserMessage )
157157 assert message .parent_tool_use_id == "toolu_01Xrwd5Y13sEHtzScxR77So8"
158158
159+ def test_parse_user_message_with_tool_use_result (self ):
160+ """Test parsing a user message with tool_use_result field.
161+
162+ The tool_use_result field contains metadata about tool execution results,
163+ including file edit details like oldString, newString, and structuredPatch.
164+ """
165+ tool_result_data = {
166+ "filePath" : "/path/to/file.py" ,
167+ "oldString" : "old code" ,
168+ "newString" : "new code" ,
169+ "originalFile" : "full file contents" ,
170+ "structuredPatch" : [
171+ {
172+ "oldStart" : 33 ,
173+ "oldLines" : 7 ,
174+ "newStart" : 33 ,
175+ "newLines" : 7 ,
176+ "lines" : [
177+ " # comment" ,
178+ "- old line" ,
179+ "+ new line" ,
180+ ],
181+ }
182+ ],
183+ "userModified" : False ,
184+ "replaceAll" : False ,
185+ }
186+ data = {
187+ "type" : "user" ,
188+ "message" : {
189+ "role" : "user" ,
190+ "content" : [
191+ {
192+ "tool_use_id" : "toolu_vrtx_01KXWexk3NJdwkjWzPMGQ2F1" ,
193+ "type" : "tool_result" ,
194+ "content" : "The file has been updated." ,
195+ }
196+ ],
197+ },
198+ "parent_tool_use_id" : None ,
199+ "session_id" : "84afb479-17ae-49af-8f2b-666ac2530c3a" ,
200+ "uuid" : "2ace3375-1879-48a0-a421-6bce25a9295a" ,
201+ "tool_use_result" : tool_result_data ,
202+ }
203+ message = parse_message (data )
204+ assert isinstance (message , UserMessage )
205+ assert message .tool_use_result == tool_result_data
206+ assert message .tool_use_result ["filePath" ] == "/path/to/file.py"
207+ assert message .tool_use_result ["oldString" ] == "old code"
208+ assert message .tool_use_result ["newString" ] == "new code"
209+ assert message .tool_use_result ["structuredPatch" ][0 ]["oldStart" ] == 33
210+ assert message .uuid == "2ace3375-1879-48a0-a421-6bce25a9295a"
211+
212+ def test_parse_user_message_with_string_content_and_tool_use_result (self ):
213+ """Test parsing a user message with string content and tool_use_result."""
214+ tool_result_data = {"filePath" : "/path/to/file.py" , "userModified" : True }
215+ data = {
216+ "type" : "user" ,
217+ "message" : {"content" : "Simple string content" },
218+ "tool_use_result" : tool_result_data ,
219+ }
220+ message = parse_message (data )
221+ assert isinstance (message , UserMessage )
222+ assert message .content == "Simple string content"
223+ assert message .tool_use_result == tool_result_data
224+
159225 def test_parse_valid_assistant_message (self ):
160226 """Test parsing a valid assistant message."""
161227 data = {
0 commit comments