feat(portal): render ask_user prompts on mobile chat#1572
Merged
Conversation
Mobile chat had no ask_user render path, so a mobile user blocked on an ask_user prompt saw nothing. Move the AskUserPrompt component into the shared BlazorClient.Core project (same namespace, desktop unaffected) and render it as a bottom-sheet on mobile Chat.razor when the active conversation has a pending prompt. Responses route through the same RespondToAskUserAsync interaction the desktop uses, so free-form, single-choice, and multi-choice prompts all submit identically across surfaces. Closes #1491
This was referenced Jun 23, 2026
Contributor
Author
CI Health Check -- PR #1572
Branch: Actions taken:
Blockers for Jon:
Farnsworth (automated CI monitor) -- BotNexus -- Last updated: 2026-06-23 11:20 UTC |
This was referenced Jun 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1491
Changes
Mobile chat had no
ask_userrender path — a mobile user blocked on anask_userprompt saw nothing (the shared prompt was rendered only by desktopChatPanel.razor). This adds the mobile render + submit path.AskUserPrompt.razorinto the sharedBlazorClient.Coreproject (Components/AskUserPrompt.razor). Both Core and the desktop project share the sameRootNamespace(BotNexus.Extensions.Channels.SignalR.BlazorClient), so the component keeps its exact namespace...Components— desktopChatPanel.razorand the desktop bUnit tests are unchanged and still resolve it via their existing@using ...Components. The component was genuinely desktop-only before (mobile references only Core), which is why it could not be reused as-is._Imports.razorto Core with the standard Blazor component usings (Microsoft.AspNetCore.Components.Web, etc.). Core had none, so the moved component's@onchangeevent binding would not compile there without it.Pages/Chat.razoras a bottom-sheet above the input bar (ask-user-sheet) whenever the active conversation has a pending prompt (Store.GetPendingAskUser). Responses route through the sameIAgentInteractionService.RespondToAskUserAsyncinteraction the desktop uses — the submit/timeout/summary handlers mirror desktopChatPanelexactly, so behaviour is identical across surfaces.wwwroot/css/mobile.cssmatching the mobile dark theme.Tests
MobileAskUserPromptTests(bUnit, 7 tests): renders when a pending prompt exists; does not render otherwise (normal input remains); single-choice renders radios; multiple-choice renders checkboxes; free-form submit routes throughRespondToAskUserAsync+ clears the prompt; cancel routes a cancelled submission.AskUserPromptTests(IRenderedComponent<AskUserPrompt>) and all 606 desktop client tests stay green with the component in its new Core home.test-impacted.ps1: All impacted tests passed (Architecture + Scenarios safety nets + Mobile.Tests 63/63 + BlazorClient.Tests 606/606 + Gateway / Gateway.Conversations).Acceptance criteria (#1491)
AskUserPromptwhen a conversation has a pendingask_user.RespondToAskUserAsyncinteraction.Merge Notes
File-disjoint from the other open PRs (#1563/#1567/#1568/#1569/#1570/#1571 are all gateway/memory/cron/tools — none touch the Blazor clients), so this can merge in any order relative to them. The blocker named in the issue (#1480 mobile
Chat.razorordering) is already merged, and no open PR touches mobileChat.razor. Part of the #1482 ask_user durability epic, but this step is independent of the Step 5 (#1487) resolution-model decision — it only renders/submits whatever pending prompt the client store already holds.