Create new queued prompts list UI#11439
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 |
5428969 to
332c4c9
Compare
There was a problem hiding this comment.
Overview
This PR adds a terminal-owned queued prompt model and a new queued-prompts panel, then routes /queue and auto-queue submissions through it while leaving Cloud Mode and compact placeholders on the legacy pending-user-query UI.
Concerns
- Two active-AI-block lookup paths no longer skip legacy pending-user-query rich content, so Cloud Mode/compact placeholders can hide the real active AI block from downstream logic.
- The new test modules call
QueuedQuery::into_text(), but the PR only definestext(), so the test build will fail.
Verdict
Found: 0 critical, 4 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
| .find(|rc| !rc.is_usage_footer() && !rc.is_pending_user_query()); | ||
| .find(|rc| !rc.is_usage_footer()); | ||
|
|
||
| candidate.and_then(|rich_content| { |
There was a problem hiding this comment.
active_ai_block() returns None instead of the prior AI block; keep the pending-query filter while those flows remain on the legacy UI.
| candidate.and_then(|rich_content| { | |
| .find(|rc| !rc.is_usage_footer() && !rc.is_pending_user_query()); |
| .find(|rc| !rc.is_usage_footer() && !rc.is_pending_user_query()) | ||
| .find(|rc| !rc.is_usage_footer()) | ||
| .and_then(|rich_content| rich_content.ai_block_metadata()) | ||
| .map(|ai_metadata| ai_metadata.ai_block_handle.clone()) |
There was a problem hiding this comment.
| .map(|ai_metadata| ai_metadata.ai_block_handle.clone()) | |
| .find(|rc| !rc.is_usage_footer() && !rc.is_pending_user_query()) |
| let _id_c = append_user(&model, &mut app, conv, "third"); | ||
|
|
||
| let removed = model.update(&mut app, |m, ctx| m.remove_by_id(conv, id_a, ctx)); | ||
| assert_eq!(removed.map(|r| r.into_text()), Some("first".to_owned())); |
There was a problem hiding this comment.
QueuedQuery does not define into_text() in this PR, so this new test module will not compile.
| assert_eq!(removed.map(|r| r.into_text()), Some("first".to_owned())); | |
| assert_eq!(removed.map(|r| r.text().to_owned()), Some("first".to_owned())); |
|
|
||
| // Error: input is empty, pop "first" and restore to input. | ||
| let popped = model.update(&mut app, |m, ctx| m.pop_front(conv, ctx)); | ||
| assert_eq!(popped.map(|q| q.into_text()), Some("first".to_owned())); |
There was a problem hiding this comment.
QueuedQuery::into_text() call, so the new terminal-view queue tests will fail to compile too.
| assert_eq!(popped.map(|q| q.into_text()), Some("first".to_owned())); | |
| assert_eq!(popped.map(|q| q.text().to_owned()), Some("first".to_owned())); |

Description
This PR adds a new queued prompt panel, which allows for multiple queued prompts at a time, queued prompt editing, queued prompt re-arranging, and allows you to collapse your queued prompts when you don't want to look at them.
In this PR, I only update it so that direct prompt queueing uses this new UI, keeping cloud conversation setup using the old queued prompt UI. I think cloud conversation setup should use the new UI, but that's a separate workstream (that should maybe be feature flagged), so I think it deserves its own PR.
As is, the new UI is not feature flagged, as queued prompts as a whole are still in dogfood.
This is a pretty large PR, but I go into solid detail about the architecture and product decisions in the tech and product specs.
Implements APP-4563
Testing
./script/runScreenshots / Videos
https://www.loom.com/share/2689f5f8e12d4acabd14e6c3fa70c73e
Agent Mode