Packages
claude_code
0.26.0
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/prompt_suggestion_message.ex
defmodule ClaudeCode.Message.PromptSuggestionMessage do
@moduledoc """
Represents a prompt suggestion message from the Claude CLI.
Emitted after each turn when the `promptSuggestions` option is enabled.
Contains a predicted next user prompt that can be shown as a suggestion
in UI applications.
## Fields
- `:suggestion` - The suggested next prompt
- `:uuid` - Message UUID
- `:session_id` - Session identifier
## JSON Format
```json
{
"type": "prompt_suggestion",
"suggestion": "Now add tests for the new function",
"uuid": "...",
"session_id": "..."
}
```
"""
@enforce_keys [:type, :suggestion, :session_id]
defstruct [
:type,
:suggestion,
:uuid,
:session_id
]
@type t :: %__MODULE__{
type: :prompt_suggestion,
suggestion: String.t(),
uuid: String.t() | nil,
session_id: String.t()
}
@doc """
Creates a new PromptSuggestionMessage from JSON data.
## Examples
iex> PromptSuggestionMessage.new(%{
...> "type" => "prompt_suggestion",
...> "suggestion" => "Add tests for the new module",
...> "session_id" => "session-1"
...> })
{:ok, %PromptSuggestionMessage{type: :prompt_suggestion, ...}}
iex> PromptSuggestionMessage.new(%{"type" => "assistant"})
{:error, :invalid_message_type}
"""
@spec new(map()) :: {:ok, t()} | {:error, atom()}
def new(%{"type" => "prompt_suggestion", "suggestion" => suggestion, "session_id" => session_id} = json) do
{:ok,
%__MODULE__{
type: :prompt_suggestion,
suggestion: suggestion,
uuid: json["uuid"],
session_id: session_id
}}
end
def new(%{"type" => "prompt_suggestion"}), do: {:error, :missing_required_fields}
def new(_), do: {:error, :invalid_message_type}
@doc """
Type guard to check if a value is a PromptSuggestionMessage.
"""
@spec prompt_suggestion_message?(any()) :: boolean()
def prompt_suggestion_message?(%__MODULE__{type: :prompt_suggestion}), do: true
def prompt_suggestion_message?(_), do: false
end
defimpl Jason.Encoder, for: ClaudeCode.Message.PromptSuggestionMessage do
def encode(message, opts) do
message
|> ClaudeCode.JSONEncoder.to_encodable()
|> Jason.Encoder.Map.encode(opts)
end
end
defimpl JSON.Encoder, for: ClaudeCode.Message.PromptSuggestionMessage do
def encode(message, encoder) do
message
|> ClaudeCode.JSONEncoder.to_encodable()
|> JSON.Encoder.Map.encode(encoder)
end
end