Port upstream UI polish and refresh dependencies

Bring over selected Warp UI improvements: selectable Thought text, message
timestamps, animated theme backgrounds, editable New Window shortcuts,
safer tab renaming and restoration, and text/font/discard crash fixes.

Match upstream orchestration pill geometry and tooltips, and replace expanded
subagent previews with compact links that retain live status and conversation
navigation for launches and follow-up messages.

Include the pending Cargo.lock dependency refresh.

Adapted upstream PRs: #15948, #15884, #15691, #14618, #15772, #15705,
#15605, #14895, #15996, #15771, #14893, and #14603.
This commit is contained in:
2026-09-17 23:44:47 -05:00
parent f084548b34
commit a29ee94d84
46 changed files with 2529 additions and 1479 deletions
+11 -9
View File
@@ -7655,15 +7655,17 @@ impl TypedActionView for CodeReviewView {
ctx,
);
}
} else {
let file_path = self.discard_dialog_state.discard_file_paths[0].clone();
if let Some(standardized_path) = self.to_standardized_path(&file_path) {
self.discard_file(
standardized_path,
self.discard_dialog_state.stash_changes_enabled,
ctx,
);
}
} else if let Some(standardized_path) = self
.discard_dialog_state
.discard_file_paths
.first()
.and_then(|file_path| self.to_standardized_path(file_path))
{
self.discard_file(
standardized_path,
self.discard_dialog_state.stash_changes_enabled,
ctx,
);
}
self.discard_dialog_state.show_discard_confirm_dialog = false;
self.discard_dialog_state.discard_file_paths.clear();
@@ -852,6 +852,24 @@ fn test_setup_dropdown_without_branches_only_has_uncommitted_changes() {
});
}
#[test]
fn test_duplicate_single_file_discard_confirmation_is_ignored() {
App::test((), |mut app| async move {
let ctx = TestContext::new(&mut app, "test.txt", "line 1\nline 2\nline 3");
ctx.code_review_view.update(&mut app, |view, view_ctx| {
view.discard_dialog_state.operation_type = DiscardOperationType::FileUncommittedChanges;
view.discard_dialog_state.show_discard_confirm_dialog = false;
view.discard_dialog_state.discard_file_paths.clear();
view.handle_action(&CodeReviewAction::ConfirmDiscardFile, view_ctx);
assert!(!view.discard_dialog_state.show_discard_confirm_dialog);
assert!(view.discard_dialog_state.discard_file_paths.is_empty());
});
});
}
#[test]
fn test_on_close_then_on_open_reinitializes_repo_state() {
App::test((), |mut app| async move {