nat.plugins.a2a.server.agent_executor_adapter#

Adapter to bridge NAT workflows with A2A AgentExecutor interface.

This module implements a message-only A2A agent for Phase 1, providing stateless request/response interactions without task lifecycle management.

Attributes#

Classes#

NATWorkflowAgentExecutor

Adapts NAT workflows to A2A AgentExecutor interface as a message-only agent.

Module Contents#

logger#
class NATWorkflowAgentExecutor(
session_manager: nat.runtime.session.SessionManager,
)#

Bases: a2a.server.agent_execution.AgentExecutor

Adapts NAT workflows to A2A AgentExecutor interface as a message-only agent.

This adapter implements Phase 1 support for A2A integration, providing stateless message-based interactions. Each request is handled independently without maintaining conversation state or task lifecycle.

Key characteristics: - Stateless: Each message is processed independently - Synchronous: Returns immediate responses (no long-running tasks) - Message-only: Returns Message objects, not Task objects - Concurrent: Uses SessionManager’s semaphore for concurrency control

Note: Multi-turn conversations and task-based interactions are deferred to Phase 5.

Initialize the adapter with a NAT SessionManager.

Args:
session_manager: The SessionManager for handling workflow execution

with concurrency control via semaphore

session_manager#
async execute(
context: a2a.server.agent_execution.RequestContext,
event_queue: a2a.server.events.EventQueue,
) None#

Execute the NAT workflow and return a message response.

This is a message-only implementation (Phase 1): 1. Extracts the user query from the A2A message 2. Runs the NAT workflow (stateless, no conversation history) 3. Returns the result as a Message object (not a Task)

For Phase 1, each message is handled independently with no state preservation between requests. The context_id and task_id from the A2A protocol are mapped to NAT’s conversation_id and user_message_id for tracing purposes only.

Args:

context: The A2A request context containing the user message event_queue: Queue for sending the response message back to the client

Raises:

ServerError: If validation fails or workflow execution errors occur

_validate_request(
context: a2a.server.agent_execution.RequestContext,
) bool#

Validate the incoming request context.

Args:

context: The request context to validate

Returns:

True if validation fails, False if validation succeeds

async cancel(
_context: a2a.server.agent_execution.RequestContext,
_event_queue: a2a.server.events.EventQueue,
) None#

Handle task cancellation requests.

Not applicable for message-only agents in Phase 1. Cancellation is a task-based feature that will be implemented in Phase 5 along with long-running task support.

Args:

_context: The request context (unused in Phase 1) _event_queue: Event queue for sending updates (unused in Phase 1)

Raises:

ServerError: Always raises UnsupportedOperationError