Affected area
Gateway (agent-gateway / Go)
Version or commit
main@1de9b452
Environment
- Desktop: macOS
- Deployment: LiveAgent desktop connected to agent-gateway
- Feature: public Web Tunnel exposing a local HTTP page
Steps to reproduce
- Enable Web Tunnel and expose a local page through the public /t/{slug}/ path.
- Let multiple users open the same public page at approximately the same time.
- Allow the page to load its HTML, JavaScript, CSS, images, API requests, or WebSocket connections until more than 20 tunnel streams are active.
- Observe one or more resource requests fail.
Expected behavior
Multiple users can load the tunneled page without an application-level fixed limit rejecting the 21st concurrent HTTP request or WebSocket connection.
Actual behavior
The gateway counts every HTTP request and WebSocket as an independent tunnel stream. Each tunnel has a hard-coded maximum of 20 active streams, so the 21st stream receives HTTP 429 with the following response body:
tunnel connection limit exceeded
This is request-level concurrency rather than visitor-level concurrency, so a small number of users can exhaust the limit while loading a normal page. Long-lived WebSocket, SSE, and slow requests make it easier to reproduce.
Logs / screenshots
No screenshot. The gateway response is HTTP 429 with body:
tunnel connection limit exceeded
The behavior is covered by the existing tunnel lifecycle and error-mapping tests.
Pre-submit checklist
Affected area
Gateway (agent-gateway / Go)
Version or commit
main@1de9b452
Environment
Steps to reproduce
Expected behavior
Multiple users can load the tunneled page without an application-level fixed limit rejecting the 21st concurrent HTTP request or WebSocket connection.
Actual behavior
The gateway counts every HTTP request and WebSocket as an independent tunnel stream. Each tunnel has a hard-coded maximum of 20 active streams, so the 21st stream receives HTTP 429 with the following response body:
This is request-level concurrency rather than visitor-level concurrency, so a small number of users can exhaust the limit while loading a normal page. Long-lived WebSocket, SSE, and slow requests make it easier to reproduce.
Logs / screenshots
No screenshot. The gateway response is HTTP 429 with body:
The behavior is covered by the existing tunnel lifecycle and error-mapping tests.
Pre-submit checklist