Module: ClaudeAgentServer::Services::MessageSerializer

Defined in:
lib/claude_agent_server/services/message_serializer.rb

Class Method Summary collapse

Class Method Details

.serialize(message) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/claude_agent_server/services/message_serializer.rb', line 10

def serialize(message)
  case message
  when ClaudeAgentSDK::UserMessage
    serialize_user_message(message)
  when ClaudeAgentSDK::AssistantMessage
    serialize_assistant_message(message)
  when ClaudeAgentSDK::ResultMessage
    serialize_result_message(message)
  when ClaudeAgentSDK::TaskStartedMessage
    serialize_task_started_message(message)
  when ClaudeAgentSDK::TaskProgressMessage
    serialize_task_progress_message(message)
  when ClaudeAgentSDK::TaskNotificationMessage
    serialize_task_notification_message(message)
  when ClaudeAgentSDK::SystemMessage
    serialize_system_message(message)
  when ClaudeAgentSDK::StreamEvent
    serialize_stream_event(message)
  when ClaudeAgentSDK::RateLimitEvent
    serialize_rate_limit_event(message)
  else
    { type: 'unknown', data: message.to_s }
  end
end

.serialize_assistant_message(msg) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/claude_agent_server/services/message_serializer.rb', line 44

def serialize_assistant_message(msg)
  {
    type: 'assistant',
    content: serialize_content(msg.content),
    model: msg.model,
    parentToolUseId: msg.parent_tool_use_id,
    error: msg.error
  }.compact
end

.serialize_content(content) ⇒ Object



138
139
140
141
142
# File 'lib/claude_agent_server/services/message_serializer.rb', line 138

def serialize_content(content)
  return content.map { |block| serialize_content_block(block) } if content.is_a?(Array)

  content
end

.serialize_content_block(block) ⇒ Object



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/claude_agent_server/services/message_serializer.rb', line 144

def serialize_content_block(block)
  case block
  when ClaudeAgentSDK::TextBlock
    { type: 'text', text: block.text }
  when ClaudeAgentSDK::ThinkingBlock
    { type: 'thinking', thinking: block.thinking, signature: block.signature }
  when ClaudeAgentSDK::ToolUseBlock
    { type: 'tool_use', id: block.id, name: block.name, input: block.input }
  when ClaudeAgentSDK::ToolResultBlock
    result = { type: 'tool_result', toolUseId: block.tool_use_id }
    result[:content] = block.content if block.content
    result[:isError] = block.is_error unless block.is_error.nil?
    result
  when ClaudeAgentSDK::UnknownBlock
    block.data
  else
    block
  end
end

.serialize_rate_limit_event(msg) ⇒ Object



131
132
133
134
135
136
# File 'lib/claude_agent_server/services/message_serializer.rb', line 131

def serialize_rate_limit_event(msg)
  {
    type: 'rate_limit_event',
    data: msg.data
  }.compact
end

.serialize_result_message(msg) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/claude_agent_server/services/message_serializer.rb', line 54

def serialize_result_message(msg)
  {
    type: 'result',
    subtype: msg.subtype,
    durationMs: msg.duration_ms,
    durationApiMs: msg.duration_api_ms,
    isError: msg.is_error,
    numTurns: msg.num_turns,
    sessionId: msg.session_id,
    stopReason: msg.stop_reason,
    totalCostUsd: msg.total_cost_usd,
    usage: msg.usage,
    result: msg.result,
    structuredOutput: msg.structured_output
  }.compact
end

.serialize_stream_event(msg) ⇒ Object



121
122
123
124
125
126
127
128
129
# File 'lib/claude_agent_server/services/message_serializer.rb', line 121

def serialize_stream_event(msg)
  {
    type: 'stream_event',
    uuid: msg.uuid,
    sessionId: msg.session_id,
    event: msg.event,
    parentToolUseId: msg.parent_tool_use_id
  }.compact
end

.serialize_system_message(msg) ⇒ Object



113
114
115
116
117
118
119
# File 'lib/claude_agent_server/services/message_serializer.rb', line 113

def serialize_system_message(msg)
  {
    type: 'system',
    subtype: msg.subtype,
    data: msg.data
  }.compact
end

.serialize_task_notification_message(msg) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/claude_agent_server/services/message_serializer.rb', line 98

def serialize_task_notification_message(msg)
  {
    type: 'system',
    subtype: 'task_notification',
    taskId: msg.task_id,
    status: msg.status,
    outputFile: msg.output_file,
    summary: msg.summary,
    uuid: msg.uuid,
    sessionId: msg.session_id,
    toolUseId: msg.tool_use_id,
    usage: msg.usage
  }.compact
end

.serialize_task_progress_message(msg) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/claude_agent_server/services/message_serializer.rb', line 84

def serialize_task_progress_message(msg)
  {
    type: 'system',
    subtype: 'task_progress',
    taskId: msg.task_id,
    description: msg.description,
    usage: msg.usage,
    uuid: msg.uuid,
    sessionId: msg.session_id,
    toolUseId: msg.tool_use_id,
    lastToolName: msg.last_tool_name
  }.compact
end

.serialize_task_started_message(msg) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/claude_agent_server/services/message_serializer.rb', line 71

def serialize_task_started_message(msg)
  {
    type: 'system',
    subtype: 'task_started',
    taskId: msg.task_id,
    description: msg.description,
    uuid: msg.uuid,
    sessionId: msg.session_id,
    toolUseId: msg.tool_use_id,
    taskType: msg.task_type
  }.compact
end

.serialize_user_message(msg) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/claude_agent_server/services/message_serializer.rb', line 35

def serialize_user_message(msg)
  {
    type: 'user',
    content: serialize_content(msg.content),
    uuid: msg.uuid,
    parentToolUseId: msg.parent_tool_use_id
  }.compact
end