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

Rust ag-ui-core: ThreadId/RunId/MessageId reject non-UUID string IDs

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

Descripción

## Summary

In the Rust `ag-ui-core`, the ID newtypes (`ThreadId`, `RunId`, `MessageId`, `AgentId`) are strict `Uuid` wrappers: both `FromStr` and the derived `Deserialize` hard-fail on any string that isn't a syntactically valid UUID. But the AG-UI protocol (and the TypeScript `@ag-ui/core`) treat these IDs as **plain strings**. So any agent/server whose thread/run/message IDs are not bare UUIDs cannot interoperate through the Rust SDK.

## Reproduction (verified against `ag-ui-core = "0.1.0"`)

Parsing a non-UUID ID as a `ThreadId` fails both ways:

```rust
use ag_ui_core::types::ids::ThreadId;
use std::str::FromStr;

// LangGraph-style run id, or any composite id
ThreadId::from_str("lc_run--1234"); // Err(uuid::Error)
serde_json::from_str::("\"mytool:host:9c1b...\""); // Err: "UUID parsing failed: invalid length"
```

## Impact

Any server that emits non-UUID thread/run IDs — LangGraph (`lc_run--…`), or tools that use composite/namespaced IDs — cannot round-trip `RUN_STARTED`/`RUN_FINISHED`/`TEXT_MESSAGE_*` events through the Rust SDK, because every such event carries a typed `ThreadId`/`MessageId`. The TS SDK has no such restriction.

## Note

A fix authored by @MikeSchirtzinger already exists on the server-crate branch (#972), but it's entangled in that large, unmerged PR. I'm opening a **focused, standalone PR** that extracts just the `ids.rs` fix (round-trip fidelity for arbitrary strings) rebased onto current `main`, so it can land independently. Credit for the fix is Mike's; the PR only decouples it.

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.