Add Ask-User-Question autonomy speedbump#10433
Conversation
|
I'm starting a first review of this pull request. You can view the conversation on Warp. I completed the review and no human review was requested for this pull request. Comment Powered by Oz |
There was a problem hiding this comment.
Overview
This PR adds an inline Ask-User-Question autonomy speedbump footer, a local one-shot setting, telemetry, and overlay event routing changes.
Concerns
- Selecting a dropdown option does not clear the installed
AskUserQuestionViewfooter; clearing onlyAIBlock.autonomy_setting_speedbumpleaves the footer visible even though the spec says the current card should hide it immediately. - This is a user-visible UI/behavior change, but the PR description’s screenshots/video section is empty. Manual testing is required for changes that can be manually tested. Please include screenshots or a screen recording that show it working end to end, or justify why manual testing is not possible.
Verdict
Found: 0 critical, 2 important, 0 suggestions
Request changes
Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).
Powered by Oz
Show a one-shot dropdown footer on the first Ask-User-Question card that lets the user adjust the active execution profile's ask_user_question permission without leaving the conversation. - New local-only setting to track one-shot display state - New AutonomySettingSpeedbump variant with lazy dropdown creation - Footer renders as attached bottom strip on completed/collapsed cards - Dropdown updates active profile and emits telemetry - Default permission changed from AskExceptInAutoApprove to AlwaysAsk - Overlay event routing fixes for dropdown interactivity in block list - Unit tests for permission mapping, action ID detection, setting defaults Co-Authored-By: Oz <oz-agent@warp.dev>
6570a5c to
ad14a54
Compare
| && is_agent_mode_autonomy_allowed(ctx) | ||
| && *AISettings::as_ref(ctx).should_show_agent_mode_ask_user_question_speedbump | ||
| { | ||
| if let Some(action_id) = first_ask_user_question_action_id(output) { |
There was a problem hiding this comment.
nit: why not just check this in the loop above (under the same surrounding conditions)?
| /// Kept on the block so the dropdown's event subscription survives re-renders. | ||
| ask_user_question_speedbump_dropdown: Option<ViewHandle<Dropdown<AIBlockAction>>>, |
There was a problem hiding this comment.
I don't quite understand why it needs to live here
| #[default] | ||
| AskExceptInAutoApprove, | ||
| /// Always pause and wait for the user to answer before continuing, even in auto-approve mode. | ||
| #[default] |
There was a problem hiding this comment.
What's the backwards compatibility story here? Will this change the default for existing users who haven't changed their setting explicitly? Seems fine, just want to make sure I understand the implication
There was a problem hiding this comment.
Good question! Existing users who had no stored value (or were default-constructed) will receive AlwaysAsk since it is #[default]. This matches the prior behavior — before this PR the setting did not exist, so every AQU action prompted the user. AlwaysAsk as the default preserves backwards compat perfectly.
Edit: AI Posted this 💀
Description
Add a one-shot dropdown-based speedbump footer on Ask-User-Question cards that lets users adjust the
ask_user_questiondefault permission (Never / Ask except in auto-approve / Always ask) without leaving the conversation. The footer includes a link to the full autonomy settings page and fires telemetry when the permission is changed.Key changes:
AskUserQuestionPermissionenum andlabel()method in execution profilesShouldShowForAskUserQuestionvariant inAutonomySettingSpeedbumpAskUserQuestionSpeedbumpFooterstruct with dropdown and settings linkAIBlockshould_show_agent_mode_ask_user_question_speedbumpAI setting (one-shot flag)BlockListElementanddismiss.rsWarp conversation
Demo
Linked Issue
ready-to-specorready-to-implement.Screenshots / Videos
Testing
./script/presubmit) passescargo checkcompiles cleanlyAskUserQuestionPermission::label()coverageAgent Mode