# `MingaAgent.Message`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_agent/message.ex#L1)

Conversation message types for the agent chat.

Each message represents one entry in the conversation history:
a user prompt, an assistant response, a tool call, or a thinking block.

# `image_attachment`

```elixir
@type image_attachment() :: %{filename: String.t(), size_kb: non_neg_integer()}
```

Image attachment metadata for display in chat.

# `system_level`

```elixir
@type system_level() :: :info | :error
```

System message severity level.

# `t`

```elixir
@type t() ::
  {:user, String.t()}
  | {:user, String.t(), [image_attachment()]}
  | {:assistant, String.t()}
  | {:thinking, String.t(), boolean()}
  | {:tool_call, MingaAgent.ToolCall.t()}
  | {:system, String.t(), system_level()}
  | {:usage, MingaAgent.TurnUsage.t()}
```

A single conversation message.

# `tool_call`

```elixir
@type tool_call() :: MingaAgent.ToolCall.t()
```

Deprecated: use `MingaAgent.ToolCall.t()` directly.

# `tool_status`

```elixir
@type tool_status() :: MingaAgent.ToolCall.status()
```

Deprecated: use `MingaAgent.ToolCall.status()` directly.

# `turn_usage`

```elixir
@type turn_usage() :: MingaAgent.TurnUsage.t()
```

Deprecated: use `MingaAgent.TurnUsage.t()` directly.

# `assistant`

```elixir
@spec assistant(String.t()) :: t()
```

Creates a new assistant message (initially empty).

# `system`

```elixir
@spec system(String.t(), system_level()) :: t()
```

Creates a system message (session events, status changes).

# `text`

```elixir
@spec text(t()) :: String.t()
```

Extracts the plain text content of a message for clipboard copy.

# `thinking`

```elixir
@spec thinking(String.t(), boolean()) :: t()
```

Creates a new thinking message (initially empty, expanded).

# `tool_call`

```elixir
@spec tool_call(String.t(), String.t(), map()) :: t()
```

Creates a new tool call message.

# `usage`

```elixir
@spec usage(MingaAgent.TurnUsage.t()) :: t()
```

Creates a per-turn usage message.

# `user`

```elixir
@spec user(String.t()) :: t()
```

Creates a new user message.

# `user`

```elixir
@spec user(String.t(), [image_attachment()]) :: t()
```

Creates a new user message with image attachments.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
