# `ASM.Extensions.Routing`
[🔗](https://github.com/nshkrdotcom/agent_session_manager/blob/v0.9.2/lib/asm/extensions/routing.ex#L1)

Public routing extension API.

This domain provides deterministic provider selection with
health-aware failover, fully owned by extension processes.

# `health_snapshot`

```elixir
@spec health_snapshot(pid()) ::
  {:ok,
   %{
     required(ASM.Extensions.Routing.Router.provider_id()) =&gt;
       ASM.Extensions.Routing.Router.health_status()
   }}
```

# `provider_health`

```elixir
@spec provider_health(pid(), ASM.Extensions.Routing.Router.provider_id()) ::
  {:ok, ASM.Extensions.Routing.Router.health_status()} | {:error, ASM.Error.t()}
```

# `report_failure`

```elixir
@spec report_failure(
  pid(),
  ASM.Extensions.Routing.Router.selection()
  | ASM.Extensions.Routing.Router.provider_id(),
  term()
) :: :ok | {:error, ASM.Error.t()}
```

# `report_result`

```elixir
@spec report_result(
  pid(),
  ASM.Extensions.Routing.Router.selection()
  | ASM.Extensions.Routing.Router.provider_id(),
  term()
) :: :ok | {:error, ASM.Error.t()}
```

# `report_success`

```elixir
@spec report_success(
  pid(),
  ASM.Extensions.Routing.Router.selection()
  | ASM.Extensions.Routing.Router.provider_id()
) :: :ok | {:error, ASM.Error.t()}
```

# `select_provider`

```elixir
@spec select_provider(
  pid(),
  keyword()
) :: {:ok, ASM.Extensions.Routing.Router.selection()} | {:error, ASM.Error.t()}
```

# `start_router`

```elixir
@spec start_router(keyword()) :: GenServer.on_start()
```

---

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