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

Run process state with reducer-owned projection fields.

# `cost_totals`

```elixir
@type cost_totals() :: %{
  input_tokens: non_neg_integer(),
  output_tokens: non_neg_integer(),
  cost_usd: number()
}
```

# `status`

```elixir
@type status() :: :initializing | :running | :completed | :failed | :interrupted
```

# `t`

```elixir
@type t() :: %ASM.Run.State{
  approval_timeout_ms: pos_integer(),
  approval_timers: %{optional(String.t()) =&gt; reference()},
  backend: module() | nil,
  backend_info: ASM.ProviderBackend.Info.t() | nil,
  backend_opts: keyword(),
  backend_pid: pid() | nil,
  backend_ref: reference() | nil,
  backend_subscription_ref: reference() | nil,
  continuation: map() | nil,
  cost: cost_totals(),
  error: ASM.Error.t() | nil,
  events: [ASM.Event.t()],
  events_rev: [ASM.Event.t()],
  execution_config: ASM.Execution.Config.t() | nil,
  finished_at: DateTime.t() | nil,
  lane: :core | :sdk | nil,
  messages_acc: [term()],
  messages_rev: [term()],
  metadata: map(),
  pending_approvals: %{optional(String.t()) =&gt; term()},
  pipeline: [term()],
  pipeline_ctx: map(),
  prompt: String.t() | nil,
  provider: atom(),
  provider_opts: keyword(),
  result: ASM.Result.t() | nil,
  run_id: String.t(),
  sequence: non_neg_integer(),
  session_id: String.t(),
  session_pid: pid() | nil,
  started_at: DateTime.t(),
  status: status(),
  subscriber: pid() | nil,
  text_acc: String.t(),
  text_chunks_rev: [String.t()],
  tools: %{optional(String.t()) =&gt; term()}
}
```

# `materialize`

```elixir
@spec materialize(t()) :: t()
```

# `new`

```elixir
@spec new(keyword()) :: t()
```

---

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