# `ReqManagedAgents.Stream`
[🔗](https://github.com/cash-mckeeman/req_managed_agents/blob/v0.12.0/req_managed_agents/lib/req_managed_agents/stream.ex#L1)

Long-lived SSE consumer for `GET /v1/sessions/{id}/events/stream`.

Uses `Req` with `into: :self` over an **injectable Finch pool** (default
`ReqManagedAgents.StreamFinch`) so minutes-long streams don't stall the default
pool. Blocks for the life of the connection — run it inside a `Task` owned by
your session process.

Messages sent to `subscriber`, tagged with the caller-supplied `ref`:

    {:managed_agents, ref, :connected}   # sent once, when the stream attaches, before any event
    {:managed_agents, ref, {:event, decoded_map}}
    {:managed_agents, ref, :done}
    {:managed_agents, ref, {:error, reason}}

# `stream`

```elixir
@spec stream(ReqManagedAgents.Client.t(), String.t(), pid(), keyword()) :: :ok
```

Open the stream for `session_id` and forward events to `subscriber`.

Options: `:ref` (term tagging each message; default `make_ref()`),
`:finch` (Finch pool name; default `ReqManagedAgents.StreamFinch`),
`:receive_timeout` (staleness guard; default 30 minutes).

---

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