function mergeAgentTools<TServerTools>(serverTools, clientTools): TServerTools;
Defined in: packages/ai/src/utilities/chat-params.ts:355
Merge a server-side tool array with the AG-UI client-declared tools
received in the request body.
Rules:
- Server tools win on name collision. The client's declaration is
ignored if the server already has a tool with that name. The client's
UI-side handler still fires when the streamed tool-result event comes
through (see chat-client.ts onToolCall), giving the
"after server execution the client also handles" semantic for free.
- Client-only tools (name not in serverTools) become no-execute
entries: the runtime's existing ClientToolRequest path handles
them — server emits a tool-call request, client executes via its
registered handler, client posts back the result.
Typing:
- Empty clientTools preserves the server tuple (closed name union).
- Non-empty clientTools returns a widened array that honestly includes
client stubs, so the merged array does not claim a closed server-only
name union.
TServerTools extends readonly AnyTool[]
TServerTools
The server's tool array (e.g. from
[myToolDef.server(...)]). Pass directly to chat({ tools }).
readonly []
The tools array received from
chatParamsFromRequest(...) / chatParamsFromRequestBody(...).
TServerTools
A merged array suitable for chat({ tools }).
function mergeAgentTools<TServerTools>(serverTools, clientTools): MergedAgentTools<TServerTools>;
Defined in: packages/ai/src/utilities/chat-params.ts:358
Merge a server-side tool array with the AG-UI client-declared tools
received in the request body.
Rules:
- Server tools win on name collision. The client's declaration is
ignored if the server already has a tool with that name. The client's
UI-side handler still fires when the streamed tool-result event comes
through (see chat-client.ts onToolCall), giving the
"after server execution the client also handles" semantic for free.
- Client-only tools (name not in serverTools) become no-execute
entries: the runtime's existing ClientToolRequest path handles
them — server emits a tool-call request, client executes via its
registered handler, client posts back the result.
Typing:
- Empty clientTools preserves the server tuple (closed name union).
- Non-empty clientTools returns a widened array that honestly includes
client stubs, so the merged array does not claim a closed server-only
name union.
TServerTools extends readonly AnyTool[]
TServerTools
The server's tool array (e.g. from
[myToolDef.server(...)]). Pass directly to chat({ tools }).
readonly object[]
The tools array received from
chatParamsFromRequest(...) / chatParamsFromRequestBody(...).
MergedAgentTools<TServerTools>
A merged array suitable for chat({ tools }).