Packages
claude_code
0.36.3
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/message/tool_progress_message.ex
defmodule ClaudeCode.Message.ToolProgressMessage do
@moduledoc """
Represents a tool progress message from the Claude CLI.
Emitted periodically while a tool is executing to indicate progress.
Useful for showing elapsed time or progress indicators in UIs.
## Fields
- `:tool_use_id` - The tool use block ID
- `:tool_name` - Name of the executing tool
- `:parent_tool_use_id` - Parent tool use ID if in a subagent context
- `:elapsed_time_seconds` - Seconds since the tool started
- `:task_id` - Background task ID (optional)
- `:uuid` - Message UUID
- `:session_id` - Session identifier
## JSON Format
```json
{
"type": "tool_progress",
"tool_use_id": "toolu_abc123",
"tool_name": "Bash",
"parent_tool_use_id": null,
"elapsed_time_seconds": 5.2,
"uuid": "...",
"session_id": "..."
}
```
"""
use ClaudeCode.JSONEncoder
@enforce_keys [:type, :tool_use_id, :tool_name, :session_id]
defstruct [
:type,
:tool_use_id,
:tool_name,
:parent_tool_use_id,
:elapsed_time_seconds,
:task_id,
:uuid,
:session_id
]
@type t :: %__MODULE__{
type: :tool_progress,
tool_use_id: String.t(),
tool_name: String.t(),
parent_tool_use_id: String.t() | nil,
elapsed_time_seconds: number() | nil,
task_id: String.t() | nil,
uuid: String.t() | nil,
session_id: String.t()
}
@doc """
Creates a new ToolProgressMessage from JSON data.
## Examples
iex> ToolProgressMessage.new(%{
...> "type" => "tool_progress",
...> "tool_use_id" => "toolu_abc",
...> "tool_name" => "Bash",
...> "session_id" => "session-1"
...> })
{:ok, %ToolProgressMessage{type: :tool_progress, ...}}
iex> ToolProgressMessage.new(%{"type" => "assistant"})
{:error, :invalid_message_type}
"""
@spec new(map()) :: {:ok, t()} | {:error, atom()}
def new(
%{"type" => "tool_progress", "tool_use_id" => tool_use_id, "tool_name" => tool_name, "session_id" => session_id} =
json
) do
{:ok,
%__MODULE__{
type: :tool_progress,
tool_use_id: tool_use_id,
tool_name: tool_name,
parent_tool_use_id: json["parent_tool_use_id"],
elapsed_time_seconds: json["elapsed_time_seconds"],
task_id: json["task_id"],
uuid: json["uuid"],
session_id: session_id
}}
end
def new(%{"type" => "tool_progress"}), do: {:error, :missing_required_fields}
def new(_), do: {:error, :invalid_message_type}
end