Send isRetry flag to duo-workflow-service on chat retries
What does this MR do and why?
Follow-up to !237062 (merged) (which adds the manual retry button for Duo Agentic Chat responses). That MR resubmits the preceding user prompt as a fresh message — the server has no idea the new submission is a retry.
This MR plumbs an isRetry boolean from the Vue retry handler through
onSendChatPrompt → startWorkflow → buildStartRequest so it lands in
the WebSocket startRequest payload sent to the duo-workflow-service.
The duo-workflow-service consumes start_workflow_request.startRequest.isRetry
in ai-assist!5570
to swap the previous agent attempt rather than appending a new turn,
matching the retry semantics in the parent epic
&21289.
Behind the existing agentic_manual_retry_for_duo_chat_responses
feature flag — no new flag.
Screenshots
![]() |
![]() |
![]() |
References
Dependencies
- Soft dep on !237062 (merged) — this MR's source branch is stacked on that branch; rebase to master once !237062 (merged) merges.
- Backend handler: ai-assist!5570
must merge before the feature flag is flipped, otherwise the workflow
service will silently ignore the new
isRetryfield.
How to set up and validate locally
Feature.enable(:agentic_manual_retry_for_duo_chat_responses)- Open Duo Agentic Chat, send a prompt, wait for completion.
- Click the retry icon on the assistant response.
- In browser devtools → Network → WS, inspect the outbound
startRequestpayload — confirmisRetry: truefor the retry submission and absent /falsefor the original send.
Tests
yarn jest ee/spec/frontend/ai/duo_agentic_chat/websocket/workflow_utils_spec.js— 37 specsyarn jest ee/spec/frontend/ai/duo_agentic_chat/components/duo_agentic_chat_state_manager_spec.js— 264 specs
Both pass locally.
MR acceptance checklist
- I have evaluated the MR acceptance checklist for this MR.


