Files
codex/codex-rs/app-server/src/startup_warnings.rs
T
Dmitriy Kovalenko 2d3de37834 Surface automatic marketplace update failures as startup warnings (#57166)
## Why

Automatic marketplace update failures were only logged, leaving users without a visible startup warning.

## What changed

Send marketplace update errors and task startup failures through app-server warning notifications. Queue background warnings until a client initializes in both standalone and in-process servers, and centralize startup configuration warning delivery.

## Testing

Add a TUI integration test and snapshot covering two marketplace name mismatch failures, the warning count, and navigation between their details with `F2` and the arrow keys.

GitOrigin-RevId: af55a5555affd9d89ac15a546163daeaafd3b3e8
2026-10-26 17:56:43 +00:00

40 lines
1.2 KiB
Rust

//! Delivers configuration and background task warnings after a client initializes.
//! The runtime event loop owns the receiver and consumes background warnings once.
use codex_app_server_protocol::ConfigWarningNotification;
use codex_app_server_protocol::ServerNotification;
use codex_app_server_protocol::WarningNotification;
use crate::outgoing_message::ConnectionId;
use crate::outgoing_message::OutgoingMessageSender;
pub(crate) struct StartupWarnings {
pub(crate) config: Vec<ConfigWarningNotification>,
}
impl StartupWarnings {
pub(crate) async fn send_config_to_connections(
&self,
outgoing: &OutgoingMessageSender,
connection_ids: &[ConnectionId],
) {
for notification in self.config.iter().cloned() {
outgoing
.send_server_notification_to_connections(
connection_ids,
ServerNotification::ConfigWarning(notification),
)
.await;
}
}
}
pub(crate) async fn send_warning(outgoing: &OutgoingMessageSender, message: String) {
outgoing
.send_server_notification(ServerNotification::Warning(WarningNotification {
thread_id: None,
message,
}))
.await;
}