Packages
claude_code
0.13.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
46 Versions
Jump to
Current section
46 Versions
Compare versions
4
files changed
+21
additions
-14
deletions
| @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| 7 7 | |
| 8 8 | ## [Unreleased] |
| 9 9 | |
| 10 | + ## [0.13.3] - 2026-01-14 |
| 11 | + |
| 12 | + ### Changed |
| 13 | + - **`ResultMessage` optional fields use sensible defaults** - `model_usage` defaults to `%{}` and `permission_denials` defaults to `[]` instead of `nil` ([cda582b]) |
| 14 | + |
| 15 | + ### Fixed |
| 16 | + - **`ResultMessage.result` is now optional** - Error messages from the CLI may contain an `errors` array instead of a `result` field. The field no longer crashes when nil and displays errors appropriately ([c06e825]) |
| 17 | + |
| 10 18 | ## [0.13.2] - 2026-01-08 |
| 11 19 | |
| 12 20 | ### Fixed |
| @@ -3,7 +3,7 @@ | |
| 3 3 | <<"https://github.com/guess/claude_code/blob/main/CHANGELOG.md">>}, |
| 4 4 | {<<"GitHub">>,<<"https://github.com/guess/claude_code">>}]}. |
| 5 5 | {<<"name">>,<<"claude_code">>}. |
| 6 | - {<<"version">>,<<"0.13.2">>}. |
| 6 | + {<<"version">>,<<"0.13.3">>}. |
| 7 7 | {<<"description">>, |
| 8 8 | <<"The Elixir SDK for building AI agents with Claude Code">>}. |
| 9 9 | {<<"elixir">>,<<"~> 1.18">>}. |
| @@ -62,7 +62,6 @@ defmodule ClaudeCode.Message.ResultMessage do | |
| 62 62 | :duration_ms, |
| 63 63 | :duration_api_ms, |
| 64 64 | :num_turns, |
| 65 | - :result, |
| 66 65 | :session_id, |
| 67 66 | :total_cost_usd, |
| 68 67 | :usage |
| @@ -92,13 +91,13 @@ defmodule ClaudeCode.Message.ResultMessage do | |
| 92 91 | duration_ms: float(), |
| 93 92 | duration_api_ms: float(), |
| 94 93 | num_turns: non_neg_integer(), |
| 95 | - result: String.t(), |
| 94 | + result: String.t() | nil, |
| 96 95 | session_id: Types.session_id(), |
| 97 96 | total_cost_usd: float(), |
| 98 97 | usage: Types.usage(), |
| 99 98 | uuid: String.t() | nil, |
| 100 | - model_usage: %{String.t() => Types.model_usage()} | nil, |
| 101 | - permission_denials: [Types.permission_denial()] | nil, |
| 99 | + model_usage: %{String.t() => Types.model_usage()}, |
| 100 | + permission_denials: [Types.permission_denial()], |
| 102 101 | structured_output: any() | nil, |
| 103 102 | errors: [String.t()] | nil |
| 104 103 | } |
| @@ -122,7 +121,6 @@ defmodule ClaudeCode.Message.ResultMessage do | |
| 122 121 | "duration_ms", |
| 123 122 | "duration_api_ms", |
| 124 123 | "num_turns", |
| 125 | - "result", |
| 126 124 | "session_id", |
| 127 125 | "total_cost_usd", |
| 128 126 | "usage" |
| @@ -197,15 +195,13 @@ defmodule ClaudeCode.Message.ResultMessage do | |
| 197 195 | defp parse_server_tool_use(%{"web_search_requests" => count}), do: %{web_search_requests: count} |
| 198 196 | defp parse_server_tool_use(_), do: %{web_search_requests: 0} |
| 199 197 | |
| 200 | - defp parse_model_usage(nil), do: nil |
| 201 | - |
| 202 198 | defp parse_model_usage(model_usage) when is_map(model_usage) do |
| 203 199 | Map.new(model_usage, fn {model, usage_data} -> |
| 204 200 | {model, parse_single_model_usage(usage_data)} |
| 205 201 | end) |
| 206 202 | end |
| 207 203 | |
| 208 | - defp parse_model_usage(_), do: nil |
| 204 | + defp parse_model_usage(_), do: %{} |
| 209 205 | |
| 210 206 | defp parse_single_model_usage(usage_data) when is_map(usage_data) do |
| 211 207 | %{ |
| @@ -218,8 +214,6 @@ defmodule ClaudeCode.Message.ResultMessage do | |
| 218 214 | |
| 219 215 | defp parse_single_model_usage(_), do: nil |
| 220 216 | |
| 221 | - defp parse_permission_denials(nil), do: nil |
| 222 | - |
| 223 217 | defp parse_permission_denials(denials) when is_list(denials) do |
| 224 218 | Enum.map(denials, fn denial -> |
| 225 219 | %{ |
| @@ -230,9 +224,14 @@ defmodule ClaudeCode.Message.ResultMessage do | |
| 230 224 | end) |
| 231 225 | end |
| 232 226 | |
| 233 | - defp parse_permission_denials(_), do: nil |
| 227 | + defp parse_permission_denials(_), do: [] |
| 234 228 | end |
| 235 229 | |
| 236 | - defimpl String.Chars, for: ClaudeCode.Message.Result do |
| 230 | + defimpl String.Chars, for: ClaudeCode.Message.ResultMessage do |
| 231 | + def to_string(%{result: nil, errors: errors}) when is_list(errors) do |
| 232 | + "Error: " <> Enum.join(errors, ", ") |
| 233 | + end |
| 234 | + |
| 235 | + def to_string(%{result: nil}), do: "" |
| 237 236 | def to_string(%{result: result}), do: result |
| 238 237 | end |
| @@ -1,7 +1,7 @@ | |
| 1 1 | defmodule ClaudeCode.MixProject do |
| 2 2 | use Mix.Project |
| 3 3 | |
| 4 | - @version "0.13.2" |
| 4 | + @version "0.13.3" |
| 5 5 | @source_url "https://github.com/guess/claude_code" |
| 6 6 | |
| 7 7 | def project do |