### 1 · SendStreamingMessage: deploy to staging POST /a2a/jsonrpc HTTP/1.1 Host: localhost:41243 Content-Type: application/json A2A-Version: 1.0 Authorization: Bearer dpl_test_7c1e4b Accept: text/event-stream { "jsonrpc": "2.0", "id": 1, "method": "SendStreamingMessage", "params": { "message": { "messageId": "6513270e-269e-4d37-b2a7-4de452e6b438", "role": "ROLE_USER", "parts": [ { "text": "Deploy build 2026.10.06-1 to staging" } ] } } } HTTP/1.1 200 OK Content-Type: text/event-stream data: {"jsonrpc": "2.0", "id": 1, "result": {"task": {"id": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "status": {"state": "TASK_STATE_SUBMITTED", "timestamp": "2026-10-06T09:00:00.250Z"}, "history": [{"messageId": "6513270e-269e-4d37-b2a7-4de452e6b438", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "role": "ROLE_USER", "parts": [{"text": "Deploy build 2026.10.06-1 to staging"}]}]}}} data: {"jsonrpc": "2.0", "id": 1, "result": {"statusUpdate": {"taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "status": {"state": "TASK_STATE_WORKING", "message": {"messageId": "b157c0f0-4506-4ee9-9e6b-bc0989b8ff63", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "role": "ROLE_AGENT", "parts": [{"text": "Preparing build 2026.10.06-1 for staging"}]}, "timestamp": "2026-10-06T09:00:00.500Z"}}}} data: {"jsonrpc": "2.0", "id": 1, "result": {"statusUpdate": {"taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "status": {"state": "TASK_STATE_AUTH_REQUIRED", "message": {"messageId": "e110a262-357c-4004-9776-14208a841017", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "role": "ROLE_AGENT", "parts": [{"text": "An operator must approve this deploy at http://localhost:41243/approve/ecf2dcb6-79c8-48f8-8868-24a0541781f4"}]}, "timestamp": "2026-10-06T09:00:00.750Z"}}}} # The stream stays open. An operator opens the approval link, outside A2A. ### 2 · operator approves POST /approve/ecf2dcb6-79c8-48f8-8868-24a0541781f4 HTTP/1.1 Host: localhost:41243 Content-Type: application/json {} HTTP/1.1 200 OK Content-Type: application/json { "approved": true, "taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4" } # The same stream continues. data: {"jsonrpc": "2.0", "id": 1, "result": {"statusUpdate": {"taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "status": {"state": "TASK_STATE_WORKING", "message": {"messageId": "4913547e-c3a1-4786-8c68-207b32cfb20d", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "role": "ROLE_AGENT", "parts": [{"text": "Approved by an operator. Rolling out to staging"}]}, "timestamp": "2026-10-06T09:00:01.000Z"}}}} data: {"jsonrpc": "2.0", "id": 1, "result": {"artifactUpdate": {"taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "artifact": {"artifactId": "deploy-report", "name": "deploy-report.json", "parts": [{"data": {"environment": "staging", "build": "2026.10.06-1", "url": "https://staging.example.com", "healthChecks": "3 of 3 passing"}, "mediaType": "application/json"}]}, "lastChunk": true}}} data: {"jsonrpc": "2.0", "id": 1, "result": {"statusUpdate": {"taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "status": {"state": "TASK_STATE_COMPLETED", "message": {"messageId": "2a617260-4bd3-4e34-b7fb-f0a81f4680fc", "contextId": "9e8e6bcf-b117-48b9-992a-67971cddcb1b", "taskId": "ecf2dcb6-79c8-48f8-8868-24a0541781f4", "role": "ROLE_AGENT", "parts": [{"text": "Build 2026.10.06-1 is live on staging"}]}, "timestamp": "2026-10-06T09:00:01.250Z"}}}}