# `Jido.Chat.Capabilities`
[🔗](https://github.com/agentjido/jido_chat/blob/v1.0.0/lib/jido/chat/capabilities.ex#L1)

Capabilities negotiation for adapters and participants.

Provides functions to check and filter inbound content blocks and outbound
post payloads based on channel capabilities.

# `capabilities`

```elixir
@type capabilities() :: [capability()]
```

# `capability`

```elixir
@type capability() ::
  :text
  | :image
  | :audio
  | :video
  | :file
  | :multi_file
  | :markdown
  | :cards
  | :modals
  | :ephemeral
  | :tool_use
  | :streaming
  | :reactions
  | :threads
  | :typing
  | :presence
  | :read_receipts
  | :assistant_events
```

# `all`

```elixir
@spec all() :: capabilities()
```

Returns all supported capability atoms.

# `can_deliver?`

```elixir
@spec can_deliver?(
  capabilities(),
  Jido.Chat.Postable.t() | Jido.Chat.PostPayload.t() | map()
) ::
  boolean()
@spec can_deliver?(
  capabilities(),
  struct()
) :: boolean()
```

Checks if a channel can deliver the given outbound postable payload.

# `channel_capabilities`

```elixir
@spec channel_capabilities(module()) :: capabilities()
```

Returns the delivery-focused capability list for an adapter module.

# `content_requires`

```elixir
@spec content_requires(struct()) :: capabilities()
```

Returns the list of capabilities required for an inbound content block.

# `filter_content`

```elixir
@spec filter_content([term()], capabilities()) :: [term()]
```

Filters a list of content or outbound payloads to only what the channel supports.

# `supports?`

```elixir
@spec supports?(capabilities(), capability()) :: boolean()
```

Checks if a capability is in the list of capabilities.

# `unsupported_content`

```elixir
@spec unsupported_content([term()], capabilities()) :: [term()]
```

Returns a list of content or outbound payloads that the channel cannot deliver.

---

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