Skip to content

SSE event stream 404 on latest v1.91.1 — endpoint mismatch: client requests /a2a/events, Hub serves /a2a/events/stream #600

Description

@StackWanderer775

{
"title": "SSE event stream 404 on latest v1.91.1 — endpoint mismatch: client requests /a2a/events, Hub serves /a2a/events/stream",
"body": "# SSE stream never connects on latest v1.91.1 — endpoint path mismatch\n\n## Summary\n\nOn @evomap/evolver@1.91.1 (current npm latest), the Hub SSE event stream\nfails to connect on every attempt. Heartbeat works fine; SSE fails with\neventsource_not_available and re-exponentially-backs to a 120s interval,\nleaving the evolution loop completely stalled.\n\nRoot cause identified: evolver constructs the SSE URL as /a2a/events\n(or /a2a/stream), but the current Hub only exposes the SSE endpoint at\nGET /a2a/events/stream?node_id=....\n\n## Environment\n\n- evolver: 1.91.1 (npm view @evomap/evolver version → 1.91.1)\n- OS: Linux aarch64 (Raspberry Pi, 1.8GB RAM), Ubuntu 22.04\n- Node: 24.18.0\n- Hub: https://evomap.ai (default)\n- Node ID: 16-hex node_fb019fe4f7276a1b (format valid, 12–32 hex)\n\n## Expected behavior\n\nevolver --loop establishes a stable SSE connection to the Hub and\nreceives real-time evolution events (no sse_open_failed logs).\n\n## Actual behavior\n\nEvery SSE attempt fails and enters exponential backoff:\n\njson\n{\"ts\":\"2026-07-12T19:36:10.260Z\",\"type\":\"heartbeat_ok\",\"tick\":3,\"fpSent\":false,\"pendingEvents\":false}\n{\"ts\":\"2026-07-12T19:36:10.780Z\",\"type\":\"sse_open_failed\",\"error\":\"eventsource_not_available\",\"reconnectInMs\":120000}\n{\"ts\":\"2026-07-12T19:38:10.786Z\",\"type\":\"sse_open_failed\",\"error\":\"eventsource_not_available\",\"reconnectInMs\":120000}\n\n\nheartbeat_ok succeeds on every tick; SSE never recovers.\n\n## Reproduction\n\nbash\nexport A2A_HUB_URL=https://evomap.ai\nexport A2A_NODE_ID=<16-hex-node-id>\nexport A2A_NODE_SECRET=<secret>\nnode $(which evolver) --loop\n\n\nObserve evolver_loop.log: heartbeat ok, SSE eventsource_not_available\nevery 2 minutes forever.\n\n## Diagnosis (evidence)\n\n1. GET /a2a/events → HTTP 404\n2. GET /a2a/stream → HTTP 404\n3. Both 404 responses include a suggestions field listing the actual\n registered route:\n\njson\n{\"method\":\"GET\",\"path\":\"/a2a/events/stream\",\n \"description\":\"SSE event stream for real-time agent notifications (?node_id)\"}\n\n\n4. GET /a2a/events/stream?node_id=... → HTTP 200, SSE stream opens\n successfully (verified with curl).\n\n5. Heartbeat with same credentials works correctly:\n\njson\n{\"ok\":true,\"response\":{\"node_status\":\"active\",\"your_node_id\":\"node_fb019fe4f7276a1b\"}}\n\n\nSo node_id format, auth, and Hub reachability are all fine.\nThe SSE URL is simply pointing at a path that no longer exists.\n\n## Relevant prior issue\n\nGitHub Issue #380 describes the same SSE reconnect loop. Official response\n(autogame-17, 2026-04-18) noted that the SSE reconnect loop lives in the\nobfuscated src/gep/a2aProtocol.js and that the fix had shipped in\nv1.67.x–v1.69.1. However the problem persists unchanged in v1.91.1.\n\nThe v1.69.1 era fix apparently targeted a different SSE failure mode\n(connection drops / auth storms). The current failure is a plain 404\nendpoint mismatch — a stale hardcoded path in the SSE URL builder.\n\n## Request\n\n1. Please fix the SSE URL in src/gep/a2aProtocol.js (or whichever module\n constructs the stream URL) to use GET /a2a/events/stream?node_id=...\n matching the current Hub route.\n2. Confirm whether /a2a/events/poll is also still removed from the Hub,\n as EVOLVER_SSE_DISABLED=1 currently has no working poll fallback\n (GET /a2a/events/poll → 404).\n\nNo credentials are included in this report. No files were modified except\nlocal env vars for testing."
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions