Class: ClaudeAgentSDK::MessageParser
- Inherits:
-
Object
- Object
- ClaudeAgentSDK::MessageParser
- Defined in:
- lib/claude_agent_sdk/message_parser.rb
Overview
Parse message from CLI output into typed Message objects
Class Method Summary collapse
- .parse(data) ⇒ Object
- .parse_assistant_message(data) ⇒ Object
- .parse_content_block(block) ⇒ Object
- .parse_result_message(data) ⇒ Object
- .parse_stream_event(data) ⇒ Object
- .parse_system_message(data) ⇒ Object
- .parse_user_message(data) ⇒ Object
Class Method Details
.parse(data) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/claude_agent_sdk/message_parser.rb', line 9 def self.parse(data) raise MessageParseError.new("Invalid message data type", data: data) unless data.is_a?(Hash) = data[:type] raise MessageParseError.new("Message missing 'type' field", data: data) unless case when 'user' (data) when 'assistant' (data) when 'system' (data) when 'result' (data) when 'stream_event' parse_stream_event(data) else raise MessageParseError.new("Unknown message type: #{}", data: data) end rescue KeyError => e raise MessageParseError.new("Missing required field: #{e.}", data: data) end |
.parse_assistant_message(data) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/claude_agent_sdk/message_parser.rb', line 49 def self.(data) content = data.dig(:message, :content) raise MessageParseError.new("Missing content in assistant message", data: data) unless content content_blocks = content.map { |block| parse_content_block(block) } AssistantMessage.new( content: content_blocks, model: data.dig(:message, :model), parent_tool_use_id: data[:parent_tool_use_id] ) end |
.parse_content_block(block) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/claude_agent_sdk/message_parser.rb', line 91 def self.parse_content_block(block) case block[:type] when 'text' TextBlock.new(text: block[:text]) when 'thinking' ThinkingBlock.new(thinking: block[:thinking], signature: block[:signature]) when 'tool_use' ToolUseBlock.new(id: block[:id], name: block[:name], input: block[:input]) when 'tool_result' ToolResultBlock.new( tool_use_id: block[:tool_use_id], content: block[:content], is_error: block[:is_error] ) else raise MessageParseError.new("Unknown content block type: #{block[:type]}") end end |
.parse_result_message(data) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/claude_agent_sdk/message_parser.rb', line 68 def self.(data) ResultMessage.new( subtype: data[:subtype], duration_ms: data[:duration_ms], duration_api_ms: data[:duration_api_ms], is_error: data[:is_error], num_turns: data[:num_turns], session_id: data[:session_id], total_cost_usd: data[:total_cost_usd], usage: data[:usage], result: data[:result] ) end |
.parse_stream_event(data) ⇒ Object
82 83 84 85 86 87 88 89 |
# File 'lib/claude_agent_sdk/message_parser.rb', line 82 def self.parse_stream_event(data) StreamEvent.new( uuid: data[:uuid], session_id: data[:session_id], event: data[:event], parent_tool_use_id: data[:parent_tool_use_id] ) end |
.parse_system_message(data) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/claude_agent_sdk/message_parser.rb', line 61 def self.(data) SystemMessage.new( subtype: data[:subtype], data: data ) end |
.parse_user_message(data) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/claude_agent_sdk/message_parser.rb', line 33 def self.(data) parent_tool_use_id = data[:parent_tool_use_id] = data[:message] raise MessageParseError.new("Missing message field in user message", data: data) unless content = [:content] raise MessageParseError.new("Missing content in user message", data: data) unless content if content.is_a?(Array) content_blocks = content.map { |block| parse_content_block(block) } UserMessage.new(content: content_blocks, parent_tool_use_id: parent_tool_use_id) else UserMessage.new(content: content, parent_tool_use_id: parent_tool_use_id) end end |