# `Codex.Config.Overrides`
[🔗](https://github.com/nshkrdotcom/codex_sdk/blob/v0.16.1/lib/codex/config/overrides.ex#L1)

Config override serialization, nested map flattening, and TOML value validation.

# `config_override`

```elixir
@type config_override() :: String.t() | {String.t(), config_override_value()}
```

# `config_override_scalar`

```elixir
@type config_override_scalar() :: String.t() | boolean() | integer() | float()
```

# `config_override_value`

```elixir
@type config_override_value() ::
  config_override_scalar()
  | [config_override_value()]
  | %{optional(String.t() | atom()) =&gt; config_override_value()}
```

# `cli_args`

```elixir
@spec cli_args([Codex.Thread.Options.config_override()]) :: [String.t()]
```

# `derived_overrides`

```elixir
@spec derived_overrides(Codex.Options.t(), Codex.Thread.Options.t() | nil) :: [
  {String.t(), term()}
]
```

# `flatten_config_map`

```elixir
@spec flatten_config_map(map() | nil) :: [{String.t(), term()}]
```

Flattens a nested map into a list of `{dotted_key, value}` tuples.

Nested maps are recursively traversed and their keys are joined with dots.
Non-map leaf values are kept as-is.

## Examples

    iex> Codex.Config.Overrides.flatten_config_map(%{"model" => %{"personality" => "friendly"}})
    [{"model.personality", "friendly"}]

    iex> Codex.Config.Overrides.flatten_config_map(%{"timeout" => 5000})
    [{"timeout", 5000}]

# `merge_config`

```elixir
@spec merge_config(map() | nil, Codex.Options.t(), Codex.Thread.Options.t()) ::
  map() | nil
```

# `normalize_config_overrides`

```elixir
@spec normalize_config_overrides(term()) ::
  {:ok, [config_override()]} | {:error, term()}
```

---

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