Add HTTP client timeout in Workhorse for Duo Workflow http calls
## Problem In the agentic chat (Web Chat), all tools use the HTTP action and are executed in Workhorse. Unlike the IDE executors (LSP/duo-cli), there is no shell command execution — every tool call goes through an HTTP request made by Workhorse. Currently, Workhorse relies on [Rack Timeout](https://github.com/zombocom/rack-timeout) on the Rails side to handle slow or hanging HTTP requests, rather than having its own HTTP client timeout. This was confirmed through testing: - A `sleep` was added to the Rails issues endpoint - Duo was asked to fetch issues - Rails logged: `source=rack-timeout id=01KNP3CSTX86NM56G60TGBRVGH timeout=60000ms service=60002ms state=timed_out at=error` - Rails returned a 500 - Duo Workflow Service (DWS) forwarded the 500 to the LLM - The LLM responded with: _"The GitLab instance appears to be having server issues. Please wait a moment and try again."_ While the tool call did not hang indefinitely in this case (thanks to Rack Timeout), relying on the server-side timeout is fragile. It would be better to have a dedicated HTTP client timeout in Workhorse so that: 1. Workhorse proactively terminates slow requests rather than waiting for the server to time out 2. The timeout behaviour is controlled on the client side and is not dependent on Rails/Rack configuration 3. A meaningful error can be returned to DWS and forwarded to the LLM This is related to the broader issue of workflow sessions hanging when tools run indefinitely: https://gitlab.com/gitlab-org/gitlab/-/work_items/571932 ## Proposal Add an HTTP client timeout to the Workhorse HTTP client used for Duo Workflow agentic chat tool calls (HTTP actions). - Configure a sensible default timeout for outbound HTTP requests made by Workhorse on behalf of DAP tool calls - On timeout, return an appropriate `ActionResponse` error to DWS so the LLM can handle it gracefully ## References - Parent issue: https://gitlab.com/gitlab-org/gitlab/-/work_items/571932 - Workhorse runner code: https://gitlab.com/gitlab-org/gitlab/-/blob/master/workhorse/internal/ai_assist/duoworkflow/runner.go - Discussion: https://gitlab.com/gitlab-org/gitlab/-/work_items/571932#note_3228631966
issue