FoundationAgents/OpenManus · error · NotImplementedError
Streaming is not supported by Manus yet.
Error message
Streaming is not supported by Manus yet.
What it means
Raised by A2AManus.stream() because the Manus agent only implements non-streaming invocation. The A2A protocol surface expects an async iterable of events for streaming requests, but this implementation deliberately raises NotImplementedError to signal that capability is absent.
Source
Thrown at protocol/a2a/app/agent.py:23
from app.agent.manus import Manus
class ResponseFormat(BaseModel):
"""Respond to the user in this format."""
status: Literal["input_required", "completed", "error"] = "input_required"
message: str
class A2AManus(Manus):
async def invoke(self, query, sessionId) -> str:
config = {"configurable": {"thread_id": sessionId}}
response = await self.run(query)
return self.get_agent_response(config, response)
async def stream(self, query: str) -> AsyncIterable[Dict[str, Any]]:
"""Streaming is not supported by Manus."""
raise NotImplementedError("Streaming is not supported by Manus yet.")
def get_agent_response(self, config, agent_response):
return {
"is_task_complete": True,
"require_user_input": False,
"content": agent_response,
}
SUPPORTED_CONTENT_TYPES: ClassVar[List[str]] = ["text", "text/plain"]
View on GitHub (pinned to 52a13f2a57)
Solutions
- Use the non-streaming invoke path: send a plain message/send request instead of message/stream.
- Check the agent card / server capabilities before connecting and disable streaming for this agent.
- In your own executor, catch NotImplementedError from stream() and fall back to invoke(), emitting a single final event.
- If streaming is required, implement stream() to yield at least one event (e.g. wrap the invoke result).
Example fix
# before
async for event in agent.stream(query): # raises NotImplementedError
print(event)
# after
result = await agent.invoke(query, session_id) # non-streaming path is supported
print(result) Defensive patterns
Strategy: fallback
Validate before calling
capabilities = await fetch_agent_card(url) # check streaming support before connecting use_streaming = getattr(capabilities, 'streaming', False)
Type guard
def supports_streaming(agent) -> bool:
try:
return agent.stream is not None and not getattr(agent.stream, '_is_not_implemented', False)
except AttributeError:
return False Try / catch
try:
async for event in agent.stream(query):
handle(event)
except NotImplementedError:
result = await agent.invoke(query, session_id) # fall back to non-streaming
handle(result) Prevention
- Consult the agent card capabilities before enabling streaming on the client.
- Default to message/send for agents whose streaming support is unverified.
- Wrap streaming calls in a NotImplementedError fallback so one agent's limitation does not break the pipeline.
When it happens
Trigger: An A2A client sends a message/stream (SSE streaming) request instead of a non-streaming message request to the Manus agent endpoint; or code calls agent.stream(query) directly. The invoke() path works; only the streaming path fails.
Common situations: A2A clients that default to streaming; protocol gateways or test harnesses that probe both streaming and non-streaming modes; upgrading a client to use streaming without checking server capabilities (the agent card should be consulted).
Related errors
AI-assisted analysis of FoundationAgents/OpenManus@52a13f2a57 (2026-08-15).
Data as JSON: /api/errors/d4c8a7f54ae78d05.
Report an issue: GitHub.