# `ASM.Options`
[🔗](https://github.com/nshkrdotcom/agent_session_manager/blob/v0.10.0/lib/asm/options.ex#L1)

Shared runtime options validation and normalization.

# `preflight_error`

```elixir
@type preflight_error() ::
  ASM.Options.UnsupportedOptionError.t()
  | ASM.Options.ProviderMismatchError.t()
  | ASM.Options.ProviderNativeOptionError.t()
  | ASM.Options.PartialFeatureUnsupportedError.t()
  | ASM.Options.UnsupportedExecutionSurfaceError.t()
```

# `preflight_mode`

```elixir
@type preflight_mode() :: :strict_common | :compat
```

# `preflight_result`

```elixir
@type preflight_result() :: %{
  provider: atom(),
  mode: preflight_mode(),
  common: map(),
  session: map(),
  partial: map(),
  provider_native_legacy: map(),
  rejected: list(),
  warnings: [ASM.Options.Warning.t()]
}
```

# `t`

```elixir
@type t() :: keyword()
```

# `attach_model_payload`

```elixir
@spec attach_model_payload(
  keyword(),
  map()
) :: keyword()
```

# `ensure_positional_provider`

```elixir
@spec ensure_positional_provider(
  ASM.Provider.provider_name(),
  keyword()
) :: :ok | {:error, ASM.Options.ProviderMismatchError.t()}
```

# `finalize_provider_opts`

```elixir
@spec finalize_provider_opts(atom(), keyword(), keyword()) ::
  {:ok, keyword()} | {:error, ASM.Error.t()}
```

# `merge_provider_schema`

```elixir
@spec merge_provider_schema(keyword()) :: {:ok, keyword()} | {:error, ASM.Error.t()}
```

# `preflight`

```elixir
@spec preflight(
  ASM.Provider.provider_name(),
  keyword()
) :: {:ok, preflight_result()} | {:error, preflight_error() | ASM.Error.t()}
```

# `preflight`

```elixir
@spec preflight(ASM.Provider.provider_name(), keyword(), keyword()) ::
  {:ok, preflight_result()} | {:error, preflight_error() | ASM.Error.t()}
```

# `resolve_model_payload`

```elixir
@spec resolve_model_payload(
  atom(),
  keyword()
) ::
  {:ok, CliSubprocessCore.ModelRegistry.selection()} | {:error, ASM.Error.t()}
```

# `schema`

```elixir
@spec schema() :: keyword()
```

# `validate`

```elixir
@spec validate(keyword(), keyword()) :: {:ok, t()} | {:error, ASM.Error.t()}
```

# `validate!`

```elixir
@spec validate!(keyword(), keyword()) :: t()
```

# `validate_model_payload`

---

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