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:
@@ -3,9 +3,9 @@
|
||||
//! Uses the shared [`ChipConfigurator`] with `LeftRightZones` layout to let users
|
||||
//! drag/drop chips between left, right, and unused banks.
|
||||
|
||||
use settings::Setting as _;
|
||||
use galaxyui::keymap::FixedBinding;
|
||||
use galaxyui::{AppContext, Element, Entity, SingletonEntity, TypedActionView, View, ViewContext};
|
||||
use settings::Setting as _;
|
||||
|
||||
use super::toolbar_item::AgentToolbarItemKind;
|
||||
use crate::appearance::AppearanceEvent;
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::vec2f;
|
||||
use settings::Setting;
|
||||
use galaxy_core::send_telemetry_from_ctx;
|
||||
use galaxy_core::ui::color::blend::Blend;
|
||||
use galaxy_core::ui::theme::Fill;
|
||||
@@ -14,6 +11,9 @@ use galaxyui::{
|
||||
AppContext, Element, Entity, ModelHandle, SingletonEntity, TypedActionView, View, ViewContext,
|
||||
ViewHandle,
|
||||
};
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::vec2f;
|
||||
use settings::Setting;
|
||||
|
||||
use super::{AgentInputButtonTheme, AmbientAgentViewModel};
|
||||
use crate::ai::ambient_agents::telemetry::CloudAgentTelemetryEvent;
|
||||
|
||||
@@ -13,17 +13,6 @@ use std::time::Duration;
|
||||
|
||||
use ai::document::{AIDocumentId, AIDocumentVersion};
|
||||
use chrono::{DateTime, Local};
|
||||
use parking_lot::FairMutex;
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::{vec2f, Vector2F};
|
||||
#[cfg(feature = "voice_input")]
|
||||
use settings::Setting;
|
||||
use settings::ToggleableSetting;
|
||||
#[cfg(not(target_family = "wasm"))]
|
||||
use tokio::fs;
|
||||
use toolbar_item::AgentToolbarItemKind;
|
||||
#[cfg(feature = "voice_input")]
|
||||
use voice_input::{StartListeningError, VoiceSessionResult};
|
||||
use galaxy_cli::agent::Harness;
|
||||
use galaxy_core::context_flag::ContextFlag;
|
||||
use galaxy_core::report_if_error;
|
||||
@@ -43,6 +32,17 @@ use galaxyui::{
|
||||
AppContext, Entity, EntityId, ModelHandle, SingletonEntity, TypedActionView, View, ViewContext,
|
||||
ViewHandle,
|
||||
};
|
||||
use parking_lot::FairMutex;
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::{vec2f, Vector2F};
|
||||
#[cfg(feature = "voice_input")]
|
||||
use settings::Setting;
|
||||
use settings::ToggleableSetting;
|
||||
#[cfg(not(target_family = "wasm"))]
|
||||
use tokio::fs;
|
||||
use toolbar_item::AgentToolbarItemKind;
|
||||
#[cfg(feature = "voice_input")]
|
||||
use voice_input::{StartListeningError, VoiceSessionResult};
|
||||
|
||||
#[cfg(feature = "local_fs")]
|
||||
pub(crate) use self::environment_selector::sort_environments_by_recency;
|
||||
@@ -233,6 +233,9 @@ pub struct AgentInputFooter {
|
||||
// `Workspace::start_local_to_cloud_handoff`.
|
||||
handoff_to_cloud_button: ViewHandle<ActionButton>,
|
||||
|
||||
start_remote_control_button: ViewHandle<ActionButton>,
|
||||
stop_remote_control_button: ViewHandle<ActionButton>,
|
||||
|
||||
// CLI agent voice input state (self-contained, bypasses editor voice flow).
|
||||
#[cfg(feature = "voice_input")]
|
||||
cli_voice_input_state: CLIVoiceInputState,
|
||||
@@ -579,7 +582,7 @@ impl AgentInputFooter {
|
||||
let start_remote_control_button = ctx.add_typed_action_view(|_ctx| {
|
||||
ActionButton::new("/remote-control", RemoteControlButtonTheme)
|
||||
.with_icon(Icon::Phone01)
|
||||
.with_tooltip(START_REMOTE_CONTROL_TOOLTIP)
|
||||
.with_tooltip("Start remote control")
|
||||
.with_size(cli_button_size)
|
||||
.with_tooltip_alignment(TooltipAlignment::Left)
|
||||
.on_click(|ctx| {
|
||||
@@ -845,6 +848,8 @@ impl AgentInputFooter {
|
||||
display_chip_config,
|
||||
fast_forward_button,
|
||||
handoff_to_cloud_button,
|
||||
start_remote_control_button,
|
||||
stop_remote_control_button,
|
||||
#[cfg(feature = "voice_input")]
|
||||
cli_voice_input_state: CLIVoiceInputState::default(),
|
||||
#[cfg(feature = "voice_input")]
|
||||
@@ -2299,6 +2304,8 @@ pub enum AgentInputFooterAction {
|
||||
ShowContextMenu {
|
||||
position: Vector2F,
|
||||
},
|
||||
StartRemoteControl,
|
||||
StopRemoteControl,
|
||||
}
|
||||
|
||||
impl TypedActionView for AgentInputFooter {
|
||||
@@ -2497,6 +2504,12 @@ impl TypedActionView for AgentInputFooter {
|
||||
position: *position,
|
||||
});
|
||||
}
|
||||
AgentInputFooterAction::StartRemoteControl => {
|
||||
ctx.emit(AgentInputFooterEvent::StartRemoteControl);
|
||||
}
|
||||
AgentInputFooterAction::StopRemoteControl => {
|
||||
ctx.emit(AgentInputFooterEvent::StopRemoteControl);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2541,6 +2554,8 @@ pub enum AgentInputFooterEvent {
|
||||
/// source conversation with content) or activates `&` compose mode
|
||||
/// (preserving any in-flight prompt).
|
||||
HandoffChipClicked,
|
||||
StartRemoteControl,
|
||||
StopRemoteControl,
|
||||
}
|
||||
|
||||
impl Entity for AgentInputFooter {
|
||||
|
||||
@@ -71,6 +71,9 @@ pub enum AgentToolbarItemKind {
|
||||
|
||||
// Agent view only – "Hand off to cloud" chip.
|
||||
HandoffToCloud,
|
||||
|
||||
// Agent view only – "Share session" button.
|
||||
ShareSession,
|
||||
}
|
||||
|
||||
impl AgentToolbarItemKind {
|
||||
@@ -81,7 +84,8 @@ impl AgentToolbarItemKind {
|
||||
| Self::NLDToggle
|
||||
| Self::ContextWindowUsage
|
||||
| Self::FastForwardToggle
|
||||
| Self::HandoffToCloud => ToolbarAvailability::AgentViewOnly,
|
||||
| Self::HandoffToCloud
|
||||
| Self::ShareSession => ToolbarAvailability::AgentViewOnly,
|
||||
Self::FileExplorer | Self::RichInput | Self::Settings => {
|
||||
ToolbarAvailability::CLIAgentOnly
|
||||
}
|
||||
@@ -102,6 +106,7 @@ impl AgentToolbarItemKind {
|
||||
Self::FastForwardToggle => !status.is_viewer() || status.is_executor(),
|
||||
// Handoff is host-initiated; viewers cannot hand off another user's conversation.
|
||||
Self::HandoffToCloud => !status.is_viewer(),
|
||||
Self::ShareSession => !status.is_viewer(),
|
||||
Self::ContextChip(_)
|
||||
| Self::ModelSelector
|
||||
| Self::NLDToggle
|
||||
@@ -124,6 +129,7 @@ impl AgentToolbarItemKind {
|
||||
Self::Settings => "Settings",
|
||||
Self::FastForwardToggle => "Fast Forward",
|
||||
Self::HandoffToCloud => "Hand off to cloud",
|
||||
Self::ShareSession => "Share Session",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,6 +148,7 @@ impl AgentToolbarItemKind {
|
||||
// The bundled `upload-cloud-01.svg` (cloud-with-upward-arrow) is the
|
||||
// closest fit among the existing icons for V0; design may swap it later.
|
||||
Self::HandoffToCloud => Some(Icon::UploadCloud),
|
||||
Self::ShareSession => Some(Icon::Share),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,11 +7,10 @@ use galaxyui::assets::asset_cache::AssetSource;
|
||||
use galaxyui::elements::{Container, Element, Empty, MouseStateHandle};
|
||||
use galaxyui::keymap::Keystroke;
|
||||
use galaxyui::platform::OperatingSystem;
|
||||
use galaxyui::{AppContext, Entity, ModelHandle, SingletonEntity, View, ViewContext};
|
||||
use parking_lot::FairMutex;
|
||||
use galaxyui::{
|
||||
AppContext, Entity, ModelHandle, SingletonEntity, TypedActionView, View, ViewContext,
|
||||
};
|
||||
use parking_lot::FairMutex;
|
||||
|
||||
use super::{AgentViewState, EphemeralMessageModel, EphemeralMessageModelEvent};
|
||||
use crate::ai::agent::conversation::AIConversation;
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::Vector2F;
|
||||
use settings::Setting;
|
||||
use galaxy_core::ui::appearance::Appearance;
|
||||
use galaxy_core::ui::Icon;
|
||||
use galaxyui::elements::{
|
||||
@@ -16,6 +13,9 @@ use galaxyui::{
|
||||
AppContext, Element, Entity, EntityId, EventContext, ModelHandle, SingletonEntity,
|
||||
TypedActionView, View, ViewContext,
|
||||
};
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::Vector2F;
|
||||
use settings::Setting;
|
||||
|
||||
use super::{AgentViewController, AgentViewEntryOrigin};
|
||||
use crate::ai::active_agent_views_model::ActiveAgentViewsModel;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
use instant::Instant;
|
||||
use parking_lot::FairMutex;
|
||||
use galaxy_core::ui::appearance::Appearance;
|
||||
use galaxyui::keymap::Keystroke;
|
||||
use galaxyui::r#async::SpawnedFutureHandle;
|
||||
use galaxyui::{AppContext, Entity, EntityId, ModelContext, ModelHandle, SingletonEntity};
|
||||
use instant::Instant;
|
||||
use parking_lot::FairMutex;
|
||||
|
||||
use super::{DismissalStrategy, EphemeralMessage, EphemeralMessageModel};
|
||||
use crate::ai::agent::conversation::AIConversationId;
|
||||
@@ -1021,7 +1021,6 @@ fn exit_confirmation_message(
|
||||
) -> Message {
|
||||
use galaxyui::SingletonEntity;
|
||||
|
||||
|
||||
let appearance = Appearance::handle(app).as_ref(app);
|
||||
|
||||
let (keystroke, text) = match trigger {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use ai::agent::action::{AIAgentActionType, ShellCommandDelay};
|
||||
use parking_lot::FairMutex;
|
||||
use galaxy_core::ui::appearance::Appearance;
|
||||
use galaxyui::elements::{CornerRadius, Radius};
|
||||
use galaxyui::{
|
||||
AppContext, Element, Entity, EntityId, ModelHandle, SingletonEntity, View, ViewContext,
|
||||
};
|
||||
use parking_lot::FairMutex;
|
||||
|
||||
use crate::ai::agent::icons;
|
||||
use crate::ai::blocklist::block::cli_controller::LongRunningCommandControlState;
|
||||
|
||||
@@ -22,15 +22,15 @@ pub use agent_view_block::*;
|
||||
pub use controller::*;
|
||||
pub(crate) use conversation_selection::AgentViewConversationSelection;
|
||||
pub use ephemeral_message_model::*;
|
||||
use galaxyui::fonts::Properties;
|
||||
pub use inline_agent_view_header::*;
|
||||
pub use orchestration_pill_bar::{render_orchestration_breadcrumbs, OrchestrationPillBar};
|
||||
use pathfinder_color::ColorU;
|
||||
use galaxy_core::ui::appearance::Appearance;
|
||||
use galaxy_core::ui::color::blend::Blend;
|
||||
use galaxy_core::ui::theme::Fill;
|
||||
use galaxyui::fonts::Properties;
|
||||
use galaxyui::keymap::Keystroke;
|
||||
use galaxyui::{AppContext, SingletonEntity};
|
||||
pub use inline_agent_view_header::*;
|
||||
pub use orchestration_pill_bar::{render_orchestration_breadcrumbs, OrchestrationPillBar};
|
||||
use pathfinder_color::ColorU;
|
||||
pub use zero_state_block::*;
|
||||
|
||||
use crate::terminal::model::TerminalModel;
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::Vector2F;
|
||||
use galaxy_core::ui::appearance::Appearance;
|
||||
use galaxy_core::ui::theme::Fill;
|
||||
use galaxyui::elements::{
|
||||
@@ -11,6 +9,8 @@ use galaxyui::fonts::Weight::Bold;
|
||||
use galaxyui::platform::Cursor;
|
||||
use galaxyui::text_layout::ClipConfig;
|
||||
use galaxyui::{AppContext, Element, EntityId, EventContext, SingletonEntity};
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::Vector2F;
|
||||
|
||||
use crate::ai::agent::api::ServerConversationToken;
|
||||
use crate::ai::agent::conversation::{AIConversation, AIConversationId};
|
||||
|
||||
@@ -7,9 +7,6 @@ use std::collections::hash_map::DefaultHasher;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::hash::{Hash, Hasher};
|
||||
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::vec2f;
|
||||
use warp_cli::agent::Harness;
|
||||
use galaxy_core::channel::ChannelState;
|
||||
use galaxy_core::send_telemetry_from_ctx;
|
||||
use galaxy_core::ui::appearance::Appearance;
|
||||
@@ -17,6 +14,9 @@ use galaxy_core::ui::color::blend::Blend;
|
||||
use galaxy_core::ui::color::coloru_with_opacity;
|
||||
use galaxy_core::ui::theme::color::internal_colors;
|
||||
use galaxy_core::ui::theme::{Fill, WarpTheme};
|
||||
use pathfinder_color::ColorU;
|
||||
use pathfinder_geometry::vector::vec2f;
|
||||
use warp_cli::agent::Harness;
|
||||
use warpui::elements::new_scrollable::{NewScrollable, ScrollableAppearance, SingleAxisConfig};
|
||||
use warpui::elements::{
|
||||
Align, AnchorPair, ChildAnchor, ChildView, ClippedScrollStateHandle, ConstrainedBox, Container,
|
||||
|
||||
@@ -55,6 +55,7 @@ fn pill_bar_data_layer_finds_restored_children_before_pane_creation() {
|
||||
autoexecute_override: None,
|
||||
last_event_sequence: None,
|
||||
pinned: false,
|
||||
..Default::default()
|
||||
})
|
||||
.expect("child conversation data should serialize"),
|
||||
last_modified_at: now,
|
||||
@@ -105,6 +106,7 @@ fn pill_bar_data_layer_finds_restored_children_before_pane_creation() {
|
||||
autoexecute_override: None,
|
||||
last_event_sequence: None,
|
||||
pinned: false,
|
||||
..Default::default()
|
||||
})
|
||||
.expect("parent conversation data should serialize"),
|
||||
last_modified_at: now - chrono::Duration::seconds(1),
|
||||
|
||||
@@ -2,13 +2,13 @@ mod model;
|
||||
|
||||
use std::borrow::Cow;
|
||||
|
||||
pub use model::*;
|
||||
use pathfinder_color::ColorU;
|
||||
use galaxy_core::features::FeatureFlag;
|
||||
use galaxy_core::ui::appearance::Appearance;
|
||||
use galaxyui::elements::{
|
||||
Border, Container, CrossAxisAlignment, Expanded, Flex, ParentElement, Text,
|
||||
};
|
||||
pub use model::*;
|
||||
use pathfinder_color::ColorU;
|
||||
use warpui::keymap::Keystroke;
|
||||
use warpui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
|
||||
use warpui::{AppContext, Element, SingletonEntity};
|
||||
@@ -259,6 +259,7 @@ pub fn render_agent_shortcuts_view(
|
||||
}
|
||||
|
||||
pub mod styles {
|
||||
use super::Appearance;
|
||||
|
||||
pub fn keystroke_size(appearance: &Appearance) -> f32 {
|
||||
font_size(appearance) + 2.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
//! Inline subagent panel rendered within the parent agent's chat flow.
|
||||
//!
|
||||
//! Shows a collapsible panel with the subagent's status, a mini-transcript of
|
||||
@@ -11,7 +13,7 @@ use galaxyui::{AppContext, SingletonEntity};
|
||||
use pathfinder_color::ColorU;
|
||||
use warp_multi_agent_api as api;
|
||||
|
||||
use crate::ai::agent::conversation::{AIConversationId, ConversationStatus};
|
||||
use crate::ai::agent::conversation::{AIConversationId, ConversationStatus, StatusColorStyle};
|
||||
use crate::ai::agent::AIAgentActionId;
|
||||
use crate::ai::blocklist::block::AIBlockAction;
|
||||
use crate::ai::blocklist::inline_action::inline_action_header::{
|
||||
@@ -127,7 +129,7 @@ fn render_panel_header(
|
||||
// Left: status icon + agent name + status text
|
||||
let mut left_side = Flex::row().with_cross_axis_alignment(CrossAxisAlignment::Center);
|
||||
|
||||
let (icon, icon_color) = status.status_icon_and_color(theme);
|
||||
let (icon, icon_color) = status.status_icon_and_color(theme, StatusColorStyle::Standard);
|
||||
let status_icon_element =
|
||||
ConstrainedBox::new(galaxyui::elements::Icon::new(icon.into(), icon_color).finish())
|
||||
.with_width(icon_size(app))
|
||||
@@ -151,8 +153,10 @@ fn render_panel_header(
|
||||
ConversationStatus::InProgress => "Working...",
|
||||
ConversationStatus::Success => "Complete",
|
||||
ConversationStatus::Error => "Error",
|
||||
ConversationStatus::TransientError => "Retrying...",
|
||||
ConversationStatus::Cancelled => "Cancelled",
|
||||
ConversationStatus::Blocked { .. } => "Blocked",
|
||||
ConversationStatus::WaitingForEvents => "Waiting...",
|
||||
};
|
||||
let status_text_color = blended_colors::text_disabled(theme, surface);
|
||||
left_side.add_child(
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::cmp::Reverse;
|
||||
use std::path::Path;
|
||||
use std::sync::Arc;
|
||||
|
||||
use itertools::Itertools as _;
|
||||
use markdown_parser::{parse_markdown, FormattedText, FormattedTextFragment, FormattedTextLine};
|
||||
use parking_lot::FairMutex;
|
||||
use settings::Setting;
|
||||
use galaxy_core::features::FeatureFlag;
|
||||
use galaxy_core::report_if_error;
|
||||
use galaxy_core::ui::Icon;
|
||||
@@ -25,7 +23,9 @@ use galaxyui::{
|
||||
Action, AppContext, Element, Entity, ModelHandle, SingletonEntity, TypedActionView, View,
|
||||
ViewContext,
|
||||
};
|
||||
use std::{borrow::Cow, cmp::Reverse, path::Path, sync::Arc};
|
||||
use itertools::Itertools as _;
|
||||
use markdown_parser::{parse_markdown, FormattedText, FormattedTextFragment, FormattedTextLine};
|
||||
use parking_lot::FairMutex;
|
||||
|
||||
use crate::ai::active_agent_views_model::{ActiveAgentViewsModel, ConversationOrTaskId};
|
||||
use crate::ai::agent::conversation::AIConversationId;
|
||||
|
||||
Reference in New Issue
Block a user