Current section

Files

Jump to
claude_code lib claude_code message tool_use_summary_message.ex
Raw

lib/claude_code/message/tool_use_summary_message.ex

defmodule ClaudeCode.Message.ToolUseSummaryMessage do
@moduledoc """
Represents a tool use summary message from the Claude CLI.
Emitted as a summary of tool usage in a conversation, providing a
human-readable description of what one or more tools did.
## Fields
- `:summary` - Human-readable summary of the tool usage
- `:preceding_tool_use_ids` - List of tool use IDs this summary covers
- `:uuid` - Message UUID
- `:session_id` - Session identifier
## JSON Format
```json
{
"type": "tool_use_summary",
"summary": "Read 3 files and edited 1 file",
"preceding_tool_use_ids": ["toolu_abc", "toolu_def"],
"uuid": "...",
"session_id": "..."
}
```
"""
use ClaudeCode.JSONEncoder
@enforce_keys [:type, :summary, :session_id]
defstruct [
:type,
:summary,
:uuid,
:session_id,
preceding_tool_use_ids: []
]
@type t :: %__MODULE__{
type: :tool_use_summary,
summary: String.t(),
preceding_tool_use_ids: [String.t()],
uuid: String.t() | nil,
session_id: String.t()
}
@doc """
Creates a new ToolUseSummaryMessage from JSON data.
## Examples
iex> ToolUseSummaryMessage.new(%{
...> "type" => "tool_use_summary",
...> "summary" => "Read 3 files",
...> "session_id" => "session-1"
...> })
{:ok, %ToolUseSummaryMessage{type: :tool_use_summary, ...}}
iex> ToolUseSummaryMessage.new(%{"type" => "assistant"})
{:error, :invalid_message_type}
"""
@spec new(map()) :: {:ok, t()} | {:error, atom()}
def new(%{"type" => "tool_use_summary", "summary" => summary, "session_id" => session_id} = json) do
{:ok,
%__MODULE__{
type: :tool_use_summary,
summary: summary,
preceding_tool_use_ids: json["preceding_tool_use_ids"] || [],
uuid: json["uuid"],
session_id: session_id
}}
end
def new(%{"type" => "tool_use_summary"}), do: {:error, :missing_required_fields}
def new(_), do: {:error, :invalid_message_type}
end