-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Labels
a2aA2A protocol integrationA2A protocol integrationfeatureNew functionalityNew functionalitypriority/highHigh priorityHigh prioritysize/L
Description
Parent
Part of #581. Depends on LoopbackChannel issue.
Summary
Refactor TaskProcessor trait to support streaming and rewrite AgentTaskProcessor to route A2A requests through the full agent loop (skills, memory, tools, MCP) instead of direct provider.chat().
Scope
Files: crates/zeph-a2a/src/server/handlers.rs, crates/zeph-a2a/src/server/mod.rs, src/main.rs
TaskProcessor trait change
// Current
async fn process(&self, task_id: &str, message: Message) -> Result<ProcessResult>;
// New
async fn process(&self, task_id: &str, message: Message, event_tx: Sender<TaskEvent>) -> Result<()>;Processor emits events via event_tx:
TaskArtifactUpdateEvent { is_final: false }per token chunkTaskStatusUpdateEvent { state: Working }on status changesTaskStatusUpdateEvent { state: Completed, is_final: true }on completion
SSE handler update
Pipe event_tx → SSE stream directly. Remove current "process() then emit status" pattern.
AgentTaskProcessor rewrite
- Holds
LoopbackHandlefrom LoopbackChannel process(): sends user text viainput_tx, readsLoopbackEvents fromoutput_rx- Maps:
Chunk→ArtifactUpdate,Flush→StatusUpdate(Completed),Status→StatusUpdate(Working)
Acceptance Criteria
- A2A
message/sendreturns agent response with skills/memory/tools active (not bare LLM) - A2A
message/streamemits per-tokenArtifactUpdateSSE events - Existing A2A tests updated for new trait signature
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
a2aA2A protocol integrationA2A protocol integrationfeatureNew functionalityNew functionalitypriority/highHigh priorityHigh prioritysize/L