ag-ui-protocol / ag-ui-protocol/ag-ui

HttpAgent forces new instance per run when using dynamic headers (e.g. auth token) Description

Abierto
#1,113 1 comentario 2 reacciones 0 asignados Ver en GitHub
enhancement SDK
Lenguaje dominante
Python
Estrellas
15.9k
Forks
1.4k
Merge medio
1 d 17 h
PR fusionados (30 d)
163

Descripción

# HttpAgent requires new instance per run when using dynamic headers (e.g. auth token)

## Summary

When integrating `@ag-ui/client`'s `HttpAgent` in a React app, we need different headers on each run (e.g. fresh auth token, or per-request headers from the UI). The current API only allows setting `url` and `headers` at construction time, and `run()` accepts only `RunAgentInput`. So we have to instantiate a new `HttpAgent` on every run, which feels wrong and prevents reusing a single agent instance.

## Current behaviour

We need to do something like this on **every** run:

```ts
// Inside each run():
const token = await getAuthToken();
const headers = { ...defaultHeaders, ...options?.headers, Authorization: `Bearer ${token}` };
const agent = new HttpAgent({ url, headers });
const events$ = agent.run(params);
```

So we **create a new `HttpAgent` every time**. That feels wrong because the agent is effectively stateless for our use case; we only need different headers per request. We’d prefer to construct one agent (e.g. in a provider) and reuse it, and only vary headers per run.

## Root cause

- `HttpAgent` only accepts `url` and `headers` in the **constructor**.
- `run(input: RunAgentInput)` only takes `RunAgentInput`; there is no way to pass request-specific headers (or a request options object) into `run()`.
- So the only way to get different headers per run is to construct a new `HttpAgent` each time.

## Proposed improvement

A way to use **one** `HttpAgent` instance with **per-run (or per-request) headers**. For example:

**Option A — extend `run()`:**
`run(input: RunAgentInput, options?: { headers?: Record })`
and have the agent merge those with constructor headers when building the request (e.g. in `requestInit()`).

**Option B:**
Another supported pattern (e.g. a factory that takes headers per run) that doesn’t require instantiating `HttpAgent` on every run.

That would let us construct the agent once and reuse it while still sending a fresh auth token and per-run headers on each run.

## Environment

- **Package:** `@ag-ui/client` (e.g. 0.0.44)
- **Use case:** Browser/React app calling an AGUI backend with Bearer token and optional per-request headers.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.