SIGN IN SIGN UP

fix(deepagents): forward subagent results as text (#608)

## Summary

A deep agent that delegates to a subagent 400s when that subagent uses
an Anthropic server-side tool (web search, web fetch, code execution,
MCP). The subagent's final-message content blocks e.g.
server_tool_use/..._tool_result were forwarded verbatim as the task
ToolMessage content. On the parent agent's next request they serialize
into a tool_result, which Anthropic rejects:

`400 invalid_request_error
messages.N.content.0.tool_result.content.0: Input tag 'server_tool_use'
found using 'type'
does not match any of the expected tags:
'document','image','search_result','text','tool_reference'`

## Solution

Now matches the Python impl: forward only the subagent's text answer.
returnCommandWithStateUpdate now walks back to the last AIMessage with
non-empty text and uses that text (a string) as the ToolMessage content.

- Confirmed the Python deepagents impl is not affected (it forwards
.text); this aligns JS with Python.
- Reproduced the 400 across {web_search, code_execution, web_fetch} ×
{claude-haiku-4-5, claude-sonnet-4-6} on the latest published packages;
all green after the fix.

## Tests
- New: subagent server-tool blocks are filtered from forwarded content.
- New: walk-back uses the last non-empty AIMessage, skipping a trailing
empty message.
- Updated the #239/#245 tests to assert the (now string) ToolMessage
content.
- No regressions in subagent-related tests in the evals suite

---------

Signed-off-by: Alexander Olsen <aolsenjazz@gmail.com>
Co-authored-by: Christian Bromann <git@bromann.dev>
A
Alexander Olsen committed
d7ecab2d9f9d41321a043eed6edc3366a1381a67
Parent: 42f34b6
Committed by GitHub <noreply@github.com> on 6/22/2026, 3:43:03 PM