From fffd28a53988aacec1abf73cf146ccd7c6815625 Mon Sep 17 00:00:00 2001 From: xabi Date: Mon, 12 Jan 2026 15:04:48 +0100 Subject: [PATCH] fix: make result field optional in ResultMessage The result field can be nil for error messages which contain an errors array instead. This change: - Removes result from @enforce_keys - Updates type spec to allow nil - Removes result from required_fields validation - Fixes String.Chars implementation to handle nil result - Displays errors when result is nil Fixes handling of error result messages from the CLI. --- lib/claude_code/message/result_message.ex | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/claude_code/message/result_message.ex b/lib/claude_code/message/result_message.ex index acfb69f..e7460e5 100644 --- a/lib/claude_code/message/result_message.ex +++ b/lib/claude_code/message/result_message.ex @@ -62,7 +62,6 @@ defmodule ClaudeCode.Message.ResultMessage do :duration_ms, :duration_api_ms, :num_turns, - :result, :session_id, :total_cost_usd, :usage @@ -92,7 +91,7 @@ defmodule ClaudeCode.Message.ResultMessage do duration_ms: float(), duration_api_ms: float(), num_turns: non_neg_integer(), - result: String.t(), + result: String.t() | nil, session_id: Types.session_id(), total_cost_usd: float(), usage: Types.usage(), @@ -122,7 +121,6 @@ defmodule ClaudeCode.Message.ResultMessage do "duration_ms", "duration_api_ms", "num_turns", - "result", "session_id", "total_cost_usd", "usage" @@ -233,6 +231,11 @@ defmodule ClaudeCode.Message.ResultMessage do defp parse_permission_denials(_), do: nil end -defimpl String.Chars, for: ClaudeCode.Message.Result do +defimpl String.Chars, for: ClaudeCode.Message.ResultMessage do + def to_string(%{result: nil, errors: errors}) when is_list(errors) do + "Error: " <> Enum.join(errors, ", ") + end + + def to_string(%{result: nil}), do: "" def to_string(%{result: result}), do: result end