# `Raxol.AgentClientProtocol.Ext.Schema.SteerRequest`
[🔗](https://github.com/DROOdotFOO/raxol-agent/blob/raxol_agent_client_protocol-v0.1.0/packages/raxol_agent_client_protocol/lib/raxol/agent_client_protocol/ext/schema.ex#L217)

`_raxol/session.steer` request: redirect a running turn with
new user input WITHOUT killing it, addressed by `sessionId`. A steer is the
sibling of interrupt (kill-now); it injects at the next turn boundary.

Fields:

  * `session_id` — the target session (routing key).
  * `text` — the steering text.
  * `expected_turn_id` — the turn ordinal the client believes is running; the
    compare-and-swap target. A JSON scalar (the turn `turnId` the client
    learned from the turn's start event); carried through opaquely.
  * `client_msg_id` — the client-supplied idempotency key, or `nil`.

`expected_turn_id` is grow-only opaque: this layer never interprets it, it
only round-trips the JSON value to the CAS decision core.

# `t`

```elixir
@type t() :: %Raxol.AgentClientProtocol.Ext.Schema.SteerRequest{
  client_msg_id: term() | nil,
  expected_turn_id: term(),
  session_id: String.t(),
  text: String.t() | nil
}
```

# `from_json`

```elixir
@spec from_json(map()) :: {:ok, t()} | {:error, term()}
```

# `new`

```elixir
@spec new(String.t(), String.t() | nil, term(), term() | nil) :: t()
```

# `to_json`

```elixir
@spec to_json(t()) :: map()
```

---

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