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

  1. Use the non-streaming invoke path: send a plain message/send request instead of message/stream.
  2. Check the agent card / server capabilities before connecting and disable streaming for this agent.
  3. In your own executor, catch NotImplementedError from stream() and fall back to invoke(), emitting a single final event.
  4. 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

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.