fix(frontend): replace invalid "context" select field with "metadata" in threads.search (#2053)

* fix(frontend): replace invalid "context" select field with "metadata" in threads.search

The LangGraph API server does not support "context" as a select field for
threads/search, causing a 422 Unprocessable Entity error introduced by
commit 60e0abf (#1771).

- Replace "context" with "metadata" in the default select list
- Persist agent_name into thread metadata on creation so search results
  carry the agent identity
- Update pathOfThread() to fall back to metadata.agent_name when
  context is unavailable from search results
- Add regression tests for metadata-based agent routing

Fixes #2037

Made-with: Cursor

* fix: apply Copilot suggestions

* style: fix the lint error
This commit is contained in:
yangzheli
2026-04-10 08:35:07 +08:00
committed by GitHub
parent 6572fa5b75
commit f88970985a
3 changed files with 42 additions and 6 deletions
+13 -5
View File
@@ -4,10 +4,10 @@ import type { AgentThread, AgentThreadContext } from "./types";
type ThreadRouteTarget =
| string
| Pick<AgentThread, "thread_id" | "context">
| {
thread_id: string;
context?: Pick<AgentThreadContext, "agent_name"> | null;
metadata?: Record<string, unknown> | null;
};
export function pathOfThread(
@@ -15,10 +15,18 @@ export function pathOfThread(
context?: Pick<AgentThreadContext, "agent_name"> | null,
) {
const threadId = typeof thread === "string" ? thread : thread.thread_id;
const agentName =
typeof thread === "string"
? context?.agent_name
: thread.context?.agent_name;
let agentName: string | undefined;
if (typeof thread === "string") {
agentName = context?.agent_name;
} else {
agentName = thread.context?.agent_name;
if (!agentName) {
const metaAgent = thread.metadata?.agent_name;
if (typeof metaAgent === "string") {
agentName = metaAgent;
}
}
}
return agentName
? `/workspace/agents/${encodeURIComponent(agentName)}/chats/${threadId}`