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

Public facade for the ASM session runtime.

# `session_info`

```elixir
@type session_info() :: %{
  session_id: String.t(),
  provider: ASM.Provider.provider_name(),
  options: keyword(),
  status: atom()
}
```

# `session_ref`

```elixir
@type session_ref() :: GenServer.server()
```

# `approve`

```elixir
@spec approve(session_ref(), String.t(), :allow | :deny) ::
  :ok | {:error, ASM.Error.t()}
```

# `checkpoint`

```elixir
@spec checkpoint(session_ref()) :: {:ok, map() | nil} | {:error, ASM.Error.t()}
```

# `cost`

```elixir
@spec cost(session_ref()) :: map()
```

# `health`

```elixir
@spec health(session_ref()) :: :healthy | :degraded | {:unhealthy, term()}
```

# `interrupt`

```elixir
@spec interrupt(session_ref(), String.t()) :: :ok | {:error, ASM.Error.t()}
```

# `intervene`

```elixir
@spec intervene(session_ref(), String.t(), String.t(), keyword()) ::
  {:ok, String.t(), pid() | :queued} | {:error, ASM.Error.t()}
```

# `list_provider_sessions`

```elixir
@spec list_provider_sessions(
  session_ref() | atom(),
  keyword()
) :: {:ok, [ASM.SessionControl.Entry.t()]} | {:error, ASM.Error.t()}
```

# `pause`

```elixir
@spec pause(session_ref(), String.t()) :: :ok | {:error, ASM.Error.t()}
```

# `query`

```elixir
@spec query(session_ref() | atom(), String.t(), keyword()) ::
  {:ok, ASM.Result.t()} | {:error, ASM.Error.t()}
```

# `resume_run`

```elixir
@spec resume_run(session_ref(), String.t(), keyword()) ::
  {:ok, String.t(), pid() | :queued} | {:error, ASM.Error.t()}
```

# `session_id`

```elixir
@spec session_id(session_ref()) :: String.t() | nil
```

# `session_info`

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

# `start_link`

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

# `start_session`

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

# `stop_session`

```elixir
@spec stop_session(String.t() | pid()) :: :ok | {:error, :not_found}
```

# `stream`

```elixir
@spec stream(session_ref(), String.t(), keyword()) :: Enumerable.t()
```

---

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