Fix cursor focus and selection in input box, add AWS env var warning box, and remove AWS Bedrock login banner

This commit is contained in:
2026-07-02 14:54:15 -05:00
parent 4770ac06b5
commit 3769646ca6
1194 changed files with 5312 additions and 8032 deletions
@@ -113,6 +113,7 @@ impl CanonicalRunState {
/// The canonical [`AgentIconFields`] for this state. `None` means no agent icon renders.
/// Editing an arm here is the deliberate way to evolve the cross-surface contract.
fn expected(&self) -> Option<AgentIconFields> {
use CanonicalRunState::*;
match self {
PlainTerminal => None,
LocalOzInProgress => Some(AgentIconFields {
@@ -170,6 +171,7 @@ impl CanonicalRunState {
/// Terminal-view inputs for this state. Every state has a terminal representation.
fn terminal_inputs(&self) -> TerminalIconInputs {
use CanonicalRunState::*;
match self {
PlainTerminal => TerminalIconInputs {
is_ambient: false,
@@ -259,6 +261,7 @@ impl CanonicalRunState {
/// Run-card inputs for this state, if it can surface as a run card.
/// Cards only exist for cloud/ambient runs; local states return `None`.
fn run_inputs(&self) -> Option<(Harness, ConversationStatus, bool)> {
use CanonicalRunState::*;
match self {
CloudOzInProgress => Some((Harness::Oz, ConversationStatus::InProgress, true)),
CloudClaudePreDispatch | CloudClaudeInProgress => {
+1 -1
View File
@@ -1,10 +1,10 @@
use pathfinder_geometry::vector::vec2f;
use galaxy_core::ui::external_product_icon::ExternalProductIcon;
use galaxy_core::ui::icons::Icon;
use galaxyui::elements::{
self, Align, Border, CacheOption, ChildAnchor, ConstrainedBox, Container, Element, Image,
OffsetPositioning, ParentAnchor, ParentElement, ParentOffsetBounds, Stack, Text,
};
use pathfinder_geometry::vector::vec2f;
use warpui::ui_components::components::{UiComponent, UiComponentStyles};
use super::red_notification_dot::RedNotificationDot;
+1 -1
View File
@@ -1,11 +1,11 @@
use std::fmt::Debug;
use itertools::{Itertools, Position};
use galaxyui::elements::{
CrossAxisAlignment, Flex, Hoverable, MainAxisSize, MouseStateHandle, ParentElement, Shrinkable,
};
use galaxyui::ui_components::components::{UiComponent, UiComponentStyles};
use galaxyui::{AppContext, Element, EventContext};
use itertools::{Itertools, Position};
use crate::appearance::Appearance;
+1 -1
View File
@@ -5,7 +5,7 @@ use warpui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
use super::icons::{Icon, ICON_DIMENSIONS};
use super::{blended_colors, BORDER_RADIUS};
use crate::appearance::Appearance;
use crate::themes::theme::{Fill, WarpTheme};
use crate::themes::theme::{Fill, GalaxyTheme};
const ICON_BUTTON_PADDING: f32 = 4.;
+16 -15
View File
@@ -11,6 +11,7 @@ use pathfinder_geometry::vector::vec2f;
use crate::ai::agent::conversation::{ConversationStatus, StatusColorStyle};
use crate::terminal::CLIAgent;
use crate::themes::theme::Fill as ThemeFill;
use crate::ui_components::icons::Icon as WarpIcon;
/// Background color used for the Oz agent's circle when it is running in an ambient (cloud)
/// run. Matches the Oz brand purple used in the cloud-mode design spec.
@@ -164,8 +165,8 @@ pub(crate) fn render_icon_with_status(
variant: IconWithStatusVariant,
total_size: f32,
overlay_extra_overhang_ratio: f32,
theme: &WarpTheme,
status_container_background: WarpThemeFill,
theme: &GalaxyTheme,
status_container_background: GalaxyThemeFill,
) -> Box<dyn Element> {
render_icon_with_status_with_badge_style(
variant,
@@ -184,8 +185,8 @@ pub(crate) fn render_icon_with_status_with_badge_style(
total_size: f32,
overlay_extra_overhang_ratio: f32,
badge_style: StatusBadgeStyle,
theme: &WarpTheme,
status_container_background: WarpThemeFill,
theme: &GalaxyTheme,
status_container_background: GalaxyThemeFill,
) -> Box<dyn Element> {
let sub_text = theme.sub_text_color(theme.background());
@@ -217,7 +218,7 @@ pub(crate) fn render_icon_with_status_with_badge_style(
// Cloud (ambient) runs use a black glyph on the light-purple background
// for consistency with the web app; local runs keep the theme text color.
let glyph_color = if is_ambient {
WarpThemeFill::Solid(ColorU::black())
ThemeFill::Solid(ColorU::black())
} else {
theme.main_text_color(theme.background())
};
@@ -289,7 +290,7 @@ pub(crate) fn render_icon_with_status_with_badge_style(
/// `attach_status_overlay` to occupy the full `total_size` footprint.
fn render_circle(
icon_element: Box<dyn Element>,
background: WarpThemeFill,
background: ThemeFill,
total_size: f32,
) -> Box<dyn Element> {
let icon = icon_size(total_size);
@@ -313,7 +314,7 @@ fn render_circle(
/// requested bounding box rather than shrinking to `circle_size(total)`.
fn render_neutral_circle(
icon_element: Box<dyn Element>,
background: WarpThemeFill,
background: ThemeFill,
total_size: f32,
) -> Box<dyn Element> {
let glyph = total_size * NEUTRAL_GLYPH_RATIO;
@@ -339,8 +340,8 @@ fn attach_status_overlay(
total_size: f32,
overlay_extra_overhang_ratio: f32,
badge_style: StatusBadgeStyle,
theme: &WarpTheme,
status_container_background: WarpThemeFill,
theme: &GalaxyTheme,
status_container_background: GalaxyThemeFill,
) -> Box<dyn Element> {
if is_ambient {
render_with_cloud_status_badge(
@@ -370,12 +371,12 @@ fn render_with_cloud_status_badge(
status: Option<&ConversationStatus>,
total_size: f32,
overlay_extra_overhang_ratio: f32,
theme: &WarpTheme,
theme: &GalaxyTheme,
) -> Box<dyn Element> {
let cloud_diameter = cloud_icon_size(total_size);
let cloud = ConstrainedBox::new(
WarpIcon::CloudFilled
.to_warpui_icon(theme.foreground())
.to_galaxyui_icon(theme.foreground())
.finish(),
)
.with_width(cloud_diameter)
@@ -387,7 +388,7 @@ fn render_with_cloud_status_badge(
let (icon, color) = status.status_icon_and_color(theme, StatusColorStyle::Cloud);
let inner = status_in_cloud_size(total_size);
let status_icon =
ConstrainedBox::new(icon.to_warpui_icon(WarpThemeFill::Solid(color)).finish())
ConstrainedBox::new(icon.to_galaxyui_icon(ThemeFill::Solid(color)).finish())
.with_width(inner)
.with_height(inner)
.finish();
@@ -439,8 +440,8 @@ fn render_with_optional_status_badge(
total_size: f32,
overlay_extra_overhang_ratio: f32,
badge_style: StatusBadgeStyle,
theme: &WarpTheme,
status_container_background: WarpThemeFill,
theme: &GalaxyTheme,
status_container_background: GalaxyThemeFill,
) -> Box<dyn Element> {
let Some(status) = status else {
// No status badge: still occupy the full `total_size` footprint so the agent
@@ -454,7 +455,7 @@ fn render_with_optional_status_badge(
let (icon, color) = status.status_icon_and_color(theme, StatusColorStyle::Standard);
let badge_icon_diameter = badge_icon_size(total_size, badge_style);
let pad = badge_padding(total_size, badge_style);
let badge_icon = ConstrainedBox::new(icon.to_galaxyui_icon(WarpThemeFill::Solid(color)).finish())
let badge_icon = ConstrainedBox::new(icon.to_galaxyui_icon(ThemeFill::Solid(color)).finish())
.with_width(badge_icon_diameter)
.with_height(badge_icon_diameter)
.finish();
+4
View File
@@ -1,6 +1,10 @@
use galaxy_core::ui::theme::color::internal_colors;
use galaxyui::elements::{CornerRadius, MouseState, Radius};
use galaxyui::Element;
use pathfinder_color::ColorU;
use crate::appearance::Appearance;
use crate::themes::theme::Fill;
use crate::ui_components::blended_colors;
use crate::ui_components::icons::Icon;
+1 -1
View File
@@ -7,10 +7,10 @@
use std::collections::HashMap;
use std::sync::Arc;
use pathfinder_color::ColorU;
use galaxy_core::ui::icons::Icon;
use galaxy_core::ui::theme::color::internal_colors;
use galaxy_core::ui::theme::WarpTheme;
use pathfinder_color::ColorU;
use warpui::elements::{
ConstrainedBox, CrossAxisAlignment, Empty, Flex, Hoverable, MainAxisSize, MouseStateHandle,
ParentElement, Shrinkable, Text,
+1 -1
View File
@@ -4,6 +4,7 @@
//! formatting, long-string detection, state management, and value rendering.
//! They do not exercise the element-construction layer (which requires a
//! running UI framework).
use crate::ai::agent::CallMCPToolResult;
use crate::ui_components::json_tree::{
format_array_annotation, format_number, format_object_annotation, is_long_string,
JsonTreeState, PathSegment, LONG_STRING_THRESHOLD,
@@ -306,7 +307,6 @@ fn multi_key_object_all_entries_preserved() {
#[test]
fn mcp_result_success_with_structured_content_returns_tree() {
use crate::ai::agent::CallMCPToolResult;
use crate::ai::blocklist::inline_action::requested_command::{
mcp_result_to_renderable, McpRenderable,
};
+1 -1
View File
@@ -1,4 +1,3 @@
use pathfinder_geometry::vector::{vec2f, Vector2F};
use galaxyui::elements::{
ChildAnchor, ChildView, MouseStateHandle, OffsetPositioning, ParentAnchor, ParentElement,
ParentOffsetBounds, Stack,
@@ -6,6 +5,7 @@ use galaxyui::elements::{
use galaxyui::platform::Cursor;
use galaxyui::ui_components::components::{UiComponent, UiComponentStyles};
use galaxyui::{AppContext, Element, EventContext, View, ViewHandle};
use pathfinder_geometry::vector::{vec2f, Vector2F};
use super::buttons::{highlight, icon_button};
use super::icons::Icon;
@@ -1,4 +1,3 @@
use pathfinder_geometry::vector::vec2f;
use galaxy_core::ui::theme::AnsiColorIdentifier;
use galaxyui::elements::{
ChildAnchor, ConstrainedBox, Container, CornerRadius, Empty, Fill, OffsetPositioning,
@@ -6,6 +5,7 @@ use galaxyui::elements::{
};
use galaxyui::ui_components::components::UiComponentStyles;
use galaxyui::Element;
use pathfinder_geometry::vector::vec2f;
use crate::appearance::Appearance;