feat(frontend): Surface parked connect prompts in an interaction dock - #5521
feat(frontend): Surface parked connect prompts in an interaction dock#5521ashrafchowdury wants to merge 2 commits into
Conversation
- Added InteractionDock component to manage parked client-tool interactions, mirroring ApprovalDock's functionality. - Introduced WaitingForInput component to indicate when the agent is waiting for user input. - Updated AgentConversation to integrate InteractionDock and display waiting states appropriately. - Enhanced QueuedMessages to reflect held messages when the interaction is pending. - Refactored ConnectToolWidget to utilize useConnectFlow for managing connection states and actions. - Added useConnectFlow hook to centralize connection logic for both InteractionDock and inline components. - Updated state management to include isPendingClientToolInteraction for better handling of client-tool interactions.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
10bb97f to
4b9e0e4
Compare
Railway Preview Environment
|
Context
When the runner parks a
request_connectioncall, the stream genuinely ends.useChatreportsready, so nothing busy-derived (working dots, the stop button) signals that the run is paused on you. Meanwhile the message queue quietly holds every send.The result: the turn looked finished, anything you typed disappeared into a queue with no explanation, and a parked connection had no way to say no, so the conversation stayed frozen.
Changes
InteractionDocksits in the composer region, between the transcript and the input, so a paused run cannot scroll out of reach. It follows the same contract asApprovalDock. The dock owns the actions and the inline transcript row is only a marker. It also adds the escape hatch a parked connection lacked: "Not now" settles the call as a structured decline, so the run resumes and the conversation unfreezes.Three smaller pieces make the pause legible:
WorkingDotsanimates because the agent is working. This one is deliberately static, because here it is your move.ConnectToolWidgetdrops about 280 lines. The OAuth flow moved into a newuseConnectFlowhook so the dock and the inline chip share one implementation instead of two that could both settle the same call. The hook settles on every terminal path, so a run cannot hang:It settles with a reference, never a secret. The runner re-resolves the credential from the project vault on resume.
Scope is the connect interaction only. Elicitation stays inline, since it is a form the user fills in the transcript and it already carries its own decline and dismiss actions. The composer waiting state covers its visibility.
Tests / notes
tsc --noEmitonweb/osspasses with 0 errors, satisfying the type-regression gate added in [chore] Zero out web tsc errors and fail builds on type regressions #5464.pnpm lint-fixis clean and changed no files.release/v0.105.6and had diverged from its own remote, which was built onbig-agents. The commits were cherry-picked onto a fresh branch off the release instead.What to QA
ApprovalDockas before, and an ordinary tool-using turn shows no interaction dock and does not auto-resend.Previews
Before:


After: