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 onSendChatPromptstartWorkflowbuildStartRequest 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

Screenshot_2026-06-17_at_18.08.13 Screenshot_2026-06-17_at_18.08.23 Screenshot_2026-06-17_at_18.08.57

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 isRetry field.

How to set up and validate locally

  1. Feature.enable(:agentic_manual_retry_for_duo_chat_responses)
  2. Open Duo Agentic Chat, send a prompt, wait for completion.
  3. Click the retry icon on the assistant response.
  4. In browser devtools → Network → WS, inspect the outbound startRequest payload — confirm isRetry: true for the retry submission and absent / false for the original send.

Tests

  • yarn jest ee/spec/frontend/ai/duo_agentic_chat/websocket/workflow_utils_spec.js — 37 specs
  • yarn jest ee/spec/frontend/ai/duo_agentic_chat/components/duo_agentic_chat_state_manager_spec.js — 264 specs

Both pass locally.

MR acceptance checklist

Edited by Tomas Bulva

Merge request reports

Loading