Repository navigation
Conversation
Preserve the application reducer, durable history, protected write flows, and native client defaults. Add focused regression coverage and an evaluation including live Foundry verification. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f0757936-2562-4fe8-9414-8e987c148e1f
Replace stale agent contexts without remounting the app shell, reject cross-conversation retries, and map incomplete AG-UI responses to recoverable workspace failures. Add mounted-component and transport retry regressions and update the evaluation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f0757936-2562-4fe8-9414-8e987c148e1f
Share domain timeline rendering through Blazor templates and EventCallback parameters. Remove duplicate web wrappers, the history event bus, and overlapping tests. Use only the AG-UI protocol dependency on the API and retain the context reset needed by the experimental library. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f0757936-2562-4fe8-9414-8e987c148e1f
Record post-simplification inference, history, recovery, layout, and remaining coach/transcript findings. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f0757936-2562-4fe8-9414-8e987c148e1f
Review summary: appropriate scenario, but request changes on the current integrationReviewed commit The coach is a legitimate use case for AG-UI and Blazor AI components. The concern is not that SentenceStudio lacks an agentic UI; it is that this implementation introduces regressions and has not yet established a net improvement over the existing integration. Scope and architectural conclusions
Implementation findings
Relevant integration points: transport, workspace adapter, component boundary, and original composer/fallback. Additional hardening observations: streamed What the evaluation establishes, and what it does notThe buffering is an application integration choice, not a limitation of AG-UI or Blazor AI. The existing agent runner awaits a complete typed The request contract remains application-specific. The AG-UI outer request carries the actual command in The evaluation appropriately disclaims token-latency improvement, production verification, and broad model-quality sign-off. Those disclaimers should remain. However, successful integration demonstrates feasibility, not comparative superiority: the added context resets, history projection, remounting, and retry synchronization need to be weighed against responsibilities actually removed. Future extensibility is a reasonable motivation, but not evidence of an already improved user experience. The observed language-quality/grounding failures should not be attributed to this transport change without a baseline comparison. Where AG-UI is appropriate across the API
Recommended dispositionRequest changes before merge, rather than reject the technology choice. Fix the demonstrated recovery and text-loss bugs, preserve the existing composer behavior (or retain the custom composer initially), and add committed regression coverage for these cases. Evaluate transport, rendering/lifecycle, and composer replacement independently. Revise the evaluation to distinguish standards-based framing from generic-client interoperability, and integration feasibility from demonstrated maintenance or UX gains. Review evidence included existing API/client regressions, an authenticated API probe, SDK fault probes, and a 45-case UI/workspace selection containing two mounted adversarial probes. Those probes passed by asserting the defects described above; they do not mean the defects are fixed. The probes were session-only, not committed. No additional browser/live-model verification was performed by this review; the PR's reported live checks are separate evidence. |
Summary
Migrate the web learning coach to AG-UI turn transport and the experimental Blazor AI components, without changing MAUI client defaults.
UIAgent,AgentContext,MessageList,MessageInput, and typed domain block rendering. A thin boundary owns the context lifetime to clear stale preview-library retry state without remounting the application shell.RenderFragmentand ordinaryEventCallback/parameter flow. Remove duplicate web message/input wrappers, the transcript-action record, and the history event bus. The API references onlyAGUI.Abstractionsand uses ASP.NET Core's SSE result.docs/agui-blazor-ai-evaluation.md.Also fix the coach host's YouTube handler dependency to use the registered interface, and release fixture-specific SQLite pools before deleting temporary test databases on Windows.
Validation
90 focused regression cases passed: 79 UI/workspace/client cases, four AG-UI client cases, and seven API cases. Overlapping tests were consolidated into mounted tests of the real transcript/composer composition. Recovery regressions exercise conversation switching, deletion, external recovery, stale error removal, subsequent submission, and incomplete-stream retry. API/web builds used existing SDKs with mobile targets disabled; no MAUI workloads were installed.
A broader rendering selection passed 226 cases and encountered 47 existing fixture failures: several fixtures omit the
NavigationManagerrequired byCoachVocabularySetCard, which the transcript already rendered onmain. Those fixtures are unchanged by this PR.Browser checks covered submission, intentional repeated questions, refresh/restored history, response-report controls, conversation switching, and a narrow viewport.
Live verification used an approved existing Foundry
gpt-5-minideployment and the Azure CLI identity, with real local HTTP web/API hosts and the production cookie-to-JWT forwarding path. Three learner turns made four successful inference HTTP requests; history survived full refresh. Only disposable local data was used, and temporary resources were cleaned up.Repeated browser/live verification after simplification at
7418226e: seven persisted learner turns across two conversations made eight successful inference requests. Library retry and workspace retry recovered deliberately truncated responses with identical operation handles, no duplicate learner turns, and no extra inference calls. Injected HTTP failures verified cross-conversation error isolation and external dismissal; subsequent live submissions and refreshed history worked. Also rechecked report-panel cancellation/focus, 390-pixel layout, and browser console errors. Disposable hosts, databases, container, and generated sign-in artifacts were cleaned up.Limitations and findings
Validated answers remain buffered until the reducer completes; this is not model-token streaming. Blazor AI is experimental, has composer-customization gaps, and currently requires remounting only the message list after canonical history replacement.
The live checks exposed an evidence-window validation rejection (
EvidenceWindow:window_length) and an incorrect Korean grammatical-form explanation. The relevant coach instructions and validation were not changed by this migration, so these appear to be existing coach/model issues; an unmodified-baseline reproduction has not been performed. They are documented rather than fixed here.The post-simplification recheck reproduced the empty-vocabulary validation rejection, but the model correctly explained the grammatical form this time. A minor transcript UX limitation was also observed: an abandoned local question remained visible after dismissal and the next successful turn until refresh; it was not saved and had no actionable retry. Whether that behavior predates the migration has not been established.
Local live verification is not a deployed-environment check, a production database/key-storage check, a latency benchmark, or a broad model-quality sign-off.