Apply local updates and test/build fixes

This commit is contained in:
Ryan Ward
2026-05-13 15:56:40 -05:00
parent cee61e2af0
commit b61d6bcbce
36 changed files with 567 additions and 327 deletions
+127 -144
View File
@@ -21,26 +21,27 @@ mod wasm_view;
use self::vertical_tabs::telemetry::{VerticalTabsDisplayOption, VerticalTabsTelemetryEvent};
use self::vertical_tabs::{
render_detail_sidecar, render_settings_popup, VerticalTabsPanelState,
VERTICAL_TABS_SETTINGS_BUTTON_POSITION_ID,
VERTICAL_TABS_SETTINGS_BUTTON_POSITION_ID, VerticalTabsPanelState, render_detail_sidecar,
render_settings_popup,
};
pub(crate) use onboarding::OnboardingTutorial;
use crate::ai::AIRequestUsageModel;
use crate::ai::active_agent_views_model::ActiveAgentViewsModel;
use crate::ai::agent_conversations_model::AgentConversationsModel;
use crate::ai::agent_conversations_model::ConversationOrTask;
use crate::ai::agent_management::AgentManagementEvent;
use crate::ai::agent_management::notifications::NotificationFilter;
use crate::ai::agent_management::notifications::toast_stack::AgentNotificationToastStack;
use crate::ai::agent_management::notifications::view::{
NotificationMailboxView, NotificationMailboxViewEvent,
};
use crate::ai::agent_management::notifications::NotificationFilter;
use crate::ai::agent_management::telemetry::AgentManagementTelemetryEvent;
use crate::ai::agent_management::view::{AgentManagementView, AgentManagementViewEvent};
use crate::ai::agent_management::AgentManagementEvent;
use crate::ai::ambient_agents::telemetry::{CloudAgentTelemetryEvent, CloudModeEntryPoint};
use crate::ai::ambient_agents::AmbientAgentTaskId;
use crate::ai::blocklist::agent_view::agent_input_footer::editor::AgentToolbarEditorMode;
use crate::ai::ambient_agents::telemetry::{CloudAgentTelemetryEvent, CloudModeEntryPoint};
use crate::ai::blocklist::agent_view::AgentViewEntryOrigin;
use crate::ai::blocklist::agent_view::agent_input_footer::editor::AgentToolbarEditorMode;
use crate::ai::blocklist::history_model::load_conversation_from_server;
use crate::ai::blocklist::suggested_agent_mode_workflow_modal::SuggestedAgentModeWorkflowAndId;
use crate::ai::blocklist::suggested_rule_modal::{
@@ -50,17 +51,16 @@ use crate::ai::conversation_utils;
use crate::ai::document::ai_document_model::{AIDocumentId, AIDocumentModel};
use crate::ai::llms::LLMPreferences;
use crate::ai::persisted_workspace::PersistedWorkspace;
use crate::ai::AIRequestUsageModel;
use crate::ai::{
agent::{api::ServerConversationToken, conversation::AIConversationId, EntrypointType},
agent::{EntrypointType, api::ServerConversationToken, conversation::AIConversationId},
blocklist::{
SlashCommandRequest,
inline_action::code_diff_view::CodeDiffView,
suggested_agent_mode_workflow_modal::{
SuggestedAgentModeWorkflowModal, SuggestedAgentModeWorkflowModalEvent,
},
SlashCommandRequest,
},
facts::{view::AIFactPage, AIFactManager, AIFactView, AIFactViewEvent},
facts::{AIFactManager, AIFactView, AIFactViewEvent, view::AIFactPage},
};
use crate::ai_assistant::execution_context::WarpAiExecutionContext;
use crate::app_state::{
@@ -68,10 +68,10 @@ use crate::app_state::{
PaneNodeSnapshot, PaneUuid, RightPanelSnapshot, SettingsPaneSnapshot, TabSnapshot,
TerminalPaneSnapshot, WindowSnapshot, WorkflowPaneSnapshot,
};
use crate::code_review::diff_state::DiffStateModel;
#[cfg(feature = "local_fs")]
use crate::code_review::CodeReviewTelemetryEvent;
use crate::code_review::GlobalCodeReviewModel;
use crate::code_review::diff_state::DiffStateModel;
use crate::coding_panel_enablement_state::CodingPanelEnablementState;
use crate::default_terminal::DefaultTerminal;
use crate::notebooks::CloudNotebook;
@@ -108,12 +108,13 @@ use crate::util::file::external_editor::Editor;
use crate::util::file::external_editor::EditorSettings;
use crate::util::openable_file_type::FileTarget;
#[cfg(feature = "local_fs")]
use crate::util::openable_file_type::{resolve_file_target_with_editor_choice, EditorLayout};
use crate::util::openable_file_type::{EditorLayout, resolve_file_target_with_editor_choice};
use crate::ai::blocklist::history_model::CloudConversationData;
use crate::BlocklistAIHistoryModel;
use crate::ai::blocklist::FORK_PREFIX;
use crate::ai::blocklist::history_model::CloudConversationData;
#[cfg(not(target_family = "wasm"))]
use crate::terminal::cli_agent_sessions::plugin_manager::{plugin_manager_for, PluginModalKind};
use crate::terminal::cli_agent_sessions::plugin_manager::{PluginModalKind, plugin_manager_for};
use crate::terminal::cli_agent_sessions::{CLIAgentSessionsModel, CLIAgentSessionsModelEvent};
use crate::workspace::header_toolbar_editor::{HeaderToolbarEditorEvent, HeaderToolbarEditorModal};
use crate::workspace::header_toolbar_item::HeaderToolbarItemKind;
@@ -133,19 +134,18 @@ use crate::workspace::view::openwarp_launch_modal::{
OpenWarpLaunchModal, OpenWarpLaunchModalEvent,
};
use crate::workspace::{ForkFromExchange, ForkedConversationDestination};
use crate::BlocklistAIHistoryModel;
use ai::index::full_source_code_embedding::manager::CodebaseIndexManager;
use galaxyui::notification::NotificationSendError;
#[cfg(all(target_os = "macos", feature = "crash_reporting"))]
use sentry::protocol::{Attachment, AttachmentType};
use serde_json;
use super::WorkspaceRegistry;
use super::hoa_onboarding::{
mark_hoa_onboarding_completed, HoaOnboardingFlow, HoaOnboardingFlowEvent, HoaOnboardingStep,
HoaOnboardingFlow, HoaOnboardingFlowEvent, HoaOnboardingStep, mark_hoa_onboarding_completed,
};
use super::lightbox_view::{LightboxParams, LightboxView, LightboxViewEvent};
use super::util;
use super::WorkspaceRegistry;
use crate::ai::execution_profiles::editor::ExecutionProfileEditorManager;
use crate::ai::execution_profiles::profiles::{AIExecutionProfilesModel, ClientProfileId};
use crate::auth::auth_manager::{AuthManager, AuthManagerEvent};
@@ -211,15 +211,15 @@ use crate::wasm_nux_dialog::WasmNUXDialog;
use crate::drive::items::WarpDriveItemId;
use crate::drive::settings::WarpDriveSettingsChangedEvent;
use crate::env_vars::{
manager::{EnvVarCollectionManager, EnvVarCollectionSource},
CloudEnvVarCollection,
manager::{EnvVarCollectionManager, EnvVarCollectionSource},
};
use crate::settings::cloud_preferences::CloudPreferencesSettings;
use crate::appearance::{Appearance, AppearanceManager};
use crate::auth::AuthStateProvider;
use crate::autoupdate::{
is_incoming_version_past_current, AutoupdateState, AutoupdateStateEvent, RelaunchModel,
AutoupdateState, AutoupdateStateEvent, RelaunchModel, is_incoming_version_past_current,
};
use crate::banner::BannerState;
use crate::changelog_model::{ChangelogModel, ChangelogRequestType, Event as ChangelogEvent};
@@ -237,8 +237,8 @@ use crate::drive::{
};
use crate::experiments::{BlockOnboarding, Experiment};
use crate::menu::{
Event as MenuEvent, Menu, MenuItem, MenuItemFields, MenuSelectionSource,
DEFAULT_WIDTH as MENU_DEFAULT_WIDTH,
DEFAULT_WIDTH as MENU_DEFAULT_WIDTH, Event as MenuEvent, Menu, MenuItem, MenuItemFields,
MenuSelectionSource,
};
use crate::modal::{Modal, ModalEvent, ModalViewState};
use crate::network::{NetworkStatus, NetworkStatusEvent};
@@ -262,11 +262,11 @@ use crate::prompt::editor_modal::{
};
use crate::referral_theme_status::ReferralThemeEvent;
use crate::resource_center::{
mark_feature_used_and_write_to_user_defaults, skip_tips_and_write_to_user_defaults,
ResourceCenterEvent, ResourceCenterPage, ResourceCenterView, Tip, TipAction, TipsCompleted,
mark_feature_used_and_write_to_user_defaults, skip_tips_and_write_to_user_defaults,
};
use crate::reward_view::{RewardEvent, RewardKind, RewardView};
use crate::root_view::{quake_mode_window_id, NewWorkspaceSource, OpenLaunchConfigArg};
use crate::root_view::{NewWorkspaceSource, OpenLaunchConfigArg, quake_mode_window_id};
use crate::search::command_search::searcher::{
AcceptedHistoryItem, AcceptedWorkflow, CommandSearchItemAction,
};
@@ -284,10 +284,10 @@ use crate::server::telemetry::{
};
use crate::session_management::{SessionNavigationData, SessionSource};
use crate::settings::{
active_theme_kind, respect_system_theme, AccessibilitySettings, AliasExpansionSettings,
AppEditorSettings, BlockVisibilitySettings, ChangelogSettings, CursorBlink, DebugSettings,
FontSettings, GPUSettings, InputSettings, MonospaceFontSize, PaneSettings, PrivacySettings,
SelectionSettings, Settings, SshSettings, ThemeSettings,
AccessibilitySettings, AliasExpansionSettings, AppEditorSettings, BlockVisibilitySettings,
ChangelogSettings, CursorBlink, DebugSettings, FontSettings, GPUSettings, InputSettings,
MonospaceFontSize, PaneSettings, PrivacySettings, SelectionSettings, Settings, SshSettings,
ThemeSettings, active_theme_kind, respect_system_theme,
};
use crate::settings_view::flags;
use crate::settings_view::keybindings::{KeybindingChangedEvent, KeybindingChangedNotifier};
@@ -301,7 +301,7 @@ use crate::terminal::model::blockgrid::BlockGrid;
use crate::terminal::model::session::Session;
use crate::terminal::model::session::SessionId;
use crate::terminal::resizable_data::{
ModalSizes, ModalType, ResizableData, DEFAULT_LEFT_PANEL_WIDTH, DEFAULT_RIGHT_PANEL_WIDTH,
DEFAULT_LEFT_PANEL_WIDTH, DEFAULT_RIGHT_PANEL_WIDTH, ModalSizes, ModalType, ResizableData,
};
use crate::terminal::safe_mode_settings::SafeModeSettings;
use crate::terminal::session_settings::{
@@ -316,13 +316,13 @@ use crate::terminal::{self, SizeInfo, TerminalView};
#[cfg(target_os = "macos")]
use crate::workspace::cli_install;
use crate::workspaces::user_workspaces::UserWorkspaces;
use crate::{report_if_error, AgentNotificationsModel};
use crate::{AgentNotificationsModel, report_if_error};
use ::settings::{Setting, ToggleableSetting};
use galaxy_core::features::FeatureFlag;
use crate::search::{self, QueryFilter};
use crate::terminal::view::{
SyncEvent, SyncInputType, TerminalAction, NOTIFICATIONS_TROUBLESHOOT_URL,
NOTIFICATIONS_TROUBLESHOOT_URL, SyncEvent, SyncInputType, TerminalAction,
};
use crate::terminal::{BlockListSettings, TerminalModel};
use crate::themes::theme::{AnsiColorIdentifier, RespectSystemTheme, ThemeKind};
@@ -332,31 +332,31 @@ use crate::themes::theme_deletion_modal::{ThemeDeletionModal, ThemeDeletionModal
use crate::tips::{TipsEvent, TipsView};
use crate::ui_components::buttons::{combo_inner_button, icon_button_with_color};
use crate::undo_close::UndoCloseStack;
use crate::user_config::{WarpConfig, WarpConfigUpdateEvent};
#[cfg(feature = "local_fs")]
use crate::user_config::{
ensure_default_worktree_config, find_unused_tab_config_path, find_unused_toml_path,
find_unused_worktree_config_path, materialize_default_worktree_config, sanitize_toml_base_name,
tab_configs_dir,
};
use crate::user_config::{WarpConfig, WarpConfigUpdateEvent};
use crate::util::bindings::{
keybinding_name_to_display_string, keybinding_name_to_keystroke, trigger_to_keystroke,
};
use crate::util::links;
use crate::util::traffic_lights::{traffic_light_data, TrafficLightMouseStates, TrafficLightSide};
use crate::util::traffic_lights::{TrafficLightMouseStates, TrafficLightSide, traffic_light_data};
use crate::util::truncation::truncate_from_end;
#[cfg(target_family = "wasm")]
use crate::view_components::action_button::ActionButton;
use crate::view_components::callout_bubble::{
render_callout_bubble, CalloutArrowDirection, CalloutArrowPosition, CalloutBubbleConfig,
CalloutArrowDirection, CalloutArrowPosition, CalloutBubbleConfig, render_callout_bubble,
};
use crate::view_components::{
AgentToast, AgentToastStack, DismissibleToast, DismissibleToastStack, ToastLink,
};
use crate::window_settings::{WindowSettings, WindowSettingsChangedEvent, ZoomLevel};
use crate::workflows::{
manager::WorkflowOpenSource, AIWorkflowOrigin, CloudWorkflow, WorkflowSelectionSource,
WorkflowSource, WorkflowType, WorkflowViewMode,
AIWorkflowOrigin, CloudWorkflow, WorkflowSelectionSource, WorkflowSource, WorkflowType,
WorkflowViewMode, manager::WorkflowOpenSource,
};
use crate::workspace::action::CommandSearchOptions;
use crate::workspace::one_time_modal_model::OneTimeModalModel;
@@ -364,20 +364,20 @@ use crate::workspace::sync_inputs::SyncedInputState;
use crate::workspace::toast_stack::{
ToastStack as WorkspaceToastStack, ToastStackEvent as WorkspaceToastStackEvent,
};
use crate::{GlobalResourceHandles, send_telemetry_from_ctx};
use crate::{
ai_assistant::{
AI_ASSISTANT_FEATURE_NAME, AI_ASSISTANT_LOGO_COLOR, AskAIType,
panel::{AIAssistantPanelEvent, AIAssistantPanelView},
AskAIType, AI_ASSISTANT_FEATURE_NAME, AI_ASSISTANT_LOGO_COLOR,
},
settings,
ui_components::blended_colors,
};
use crate::{send_telemetry_from_ctx, GlobalResourceHandles};
use futures::Future;
use galaxy_core::context_flag::ContextFlag;
use galaxy_core::semantic_selection::SemanticSelection;
use galaxy_util::path::{user_friendly_path, LineAndColumnArg};
use galaxy_util::path::{LineAndColumnArg, user_friendly_path};
use galaxyui::fonts::Weight;
use galaxyui::modals::{AlertDialogWithCallbacks, AppModalCallback};
use galaxyui::windowing::{StateEvent, WindowManager};
@@ -454,22 +454,22 @@ use crate::tab_configs::{
NewWorktreeModal, NewWorktreeModalEvent, TabConfigParamsModal, TabConfigParamsModalEvent,
};
use crate::TelemetryEvent;
use crate::code::editor::{add_color, remove_color};
use crate::palette::PaletteMode;
use crate::search::command_palette::view::{Event as CommandPaletteEvent, View as CommandPalette};
use crate::server::telemetry::{NotificationsTurnedOnSource, PaletteSource, TabRenameEvent};
use crate::tab::{
tab_position_id, NewSessionMenuItem, PaneNameMenuTarget, SelectedTabColor, TabBarState,
TabComponent, TabData, TabTelemetryAction, TAB_BAR_BORDER_HEIGHT,
NewSessionMenuItem, PaneNameMenuTarget, SelectedTabColor, TAB_BAR_BORDER_HEIGHT, TabBarState,
TabComponent, TabData, TabTelemetryAction, tab_position_id,
};
use crate::terminal::view::ssh_file_upload::FileUploadId;
use crate::ui_components::icons;
use crate::TelemetryEvent;
use autoupdate::AutoupdateStage;
#[cfg(target_os = "macos")]
use command::blocking::Command;
use galaxy_core::ui::theme::{color::internal_colors, phenomenon::PhenomenonStyle, Fill};
use galaxy_core::ui::{color::coloru_with_opacity, Icon};
use galaxy_core::ui::theme::{Fill, color::internal_colors, phenomenon::PhenomenonStyle};
use galaxy_core::ui::{Icon, color::coloru_with_opacity};
use galaxy_editor::editor::NavigationKey;
use galaxyui::keymap::Context;
use galaxyui::notification::{RequestPermissionsOutcome, UserNotification};
@@ -479,6 +479,7 @@ use galaxyui::platform::{
use galaxyui::text_layout::ClipConfig;
use galaxyui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
use galaxyui::{
AppContext, Entity, TypedActionView, UpdateView, View, ViewContext, ViewHandle,
accessibility::{
AccessibilityContent, AccessibilityVerbosity, ActionAccessibilityContent, WarpA11yRole,
},
@@ -490,8 +491,7 @@ use galaxyui::{
PositionedElementAnchor, PositionedElementOffsetBounds, Radius, SavePosition, Shrinkable,
Stack, Text,
},
geometry::vector::{vec2f, Vector2F},
AppContext, Entity, TypedActionView, UpdateView, View, ViewContext, ViewHandle,
geometry::vector::{Vector2F, vec2f},
};
use galaxyui::{
EntityId, FocusContext, ModelHandle, SingletonEntity, UpdateModel, ViewAsRef, WeakViewHandle,
@@ -508,7 +508,7 @@ use std::path::Path;
use std::path::PathBuf;
#[cfg(target_os = "macos")]
use std::process;
use std::sync::{mpsc, Mutex};
use std::sync::{Mutex, mpsc};
use std::{cmp::Ordering, sync::Arc};
use crate::terminal::view::LeftPanelTargetView;
@@ -568,7 +568,6 @@ const VERTICAL_TABS_PANEL_POSITION_ID: &str = "workspace_view:vertical_tabs_pane
const TAB_CONTENT_POSITION_ID: &str = "workspace_view:tab_content";
const WELCOME_TIPS_POSITION_ID: &str = "welcome_tips_pill";
const ELLIPSE_SVG_PATH: &str = "bundled/svg/ellipse.svg";
const AI_ASSISTANT_BUTTON_ID: &str = "workspace_view:ai_assistant_button";
@@ -1920,12 +1919,16 @@ impl Workspace {
&& ai_settings.default_tab_config_path() == path.to_string_lossy();
if is_removed_default {
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.default_session_mode_internal
.set_value(DefaultSessionMode::Terminal, ctx));
report_if_error!(settings
.default_tab_config_path
.set_value(String::new(), ctx));
report_if_error!(
settings
.default_session_mode_internal
.set_value(DefaultSessionMode::Terminal, ctx)
);
report_if_error!(
settings
.default_tab_config_path
.set_value(String::new(), ctx)
);
});
}
if let Err(e) = std::fs::remove_file(path) {
@@ -5504,9 +5507,11 @@ impl Workspace {
right,
};
TabSettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.header_toolbar_chip_selection
.set_value(selection, ctx));
report_if_error!(
settings
.header_toolbar_chip_selection
.set_value(selection, ctx)
);
});
}
@@ -5554,9 +5559,11 @@ impl Workspace {
if !FeatureFlag::ConfigurableToolbar.is_enabled() {
return;
}
let items = vec![MenuItemFields::new("Re-arrange toolbar items")
.with_on_select_action(WorkspaceAction::OpenHeaderToolbarEditor)
.into_item()];
let items = vec![
MenuItemFields::new("Re-arrange toolbar items")
.with_on_select_action(WorkspaceAction::OpenHeaderToolbarEditor)
.into_item(),
];
self.header_toolbar_context_menu
.update(ctx, |menu, ctx| menu.set_items(items, ctx));
self.show_header_toolbar_context_menu = Some(position);
@@ -7609,17 +7616,21 @@ impl Workspace {
fn toggle_recording_mode(&self, ctx: &mut ViewContext<Self>) {
DebugSettings::handle(ctx).update(ctx, |debug_settings, settings_ctx| {
report_if_error!(debug_settings
.recording_mode
.toggle_and_save_value(settings_ctx));
report_if_error!(
debug_settings
.recording_mode
.toggle_and_save_value(settings_ctx)
);
});
}
fn toggle_in_band_generators(&self, ctx: &mut ViewContext<Self>) {
DebugSettings::handle(ctx).update(ctx, |debug_settings, settings_ctx| {
report_if_error!(debug_settings
.are_in_band_generators_for_all_sessions_enabled
.toggle_and_save_value(settings_ctx));
report_if_error!(
debug_settings
.are_in_band_generators_for_all_sessions_enabled
.toggle_and_save_value(settings_ctx)
);
});
}
@@ -7782,9 +7793,11 @@ impl Workspace {
// Mark that we've done the one-time auto-open
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.has_auto_opened_conversation_list
.set_value(true, ctx));
report_if_error!(
settings
.has_auto_opened_conversation_list
.set_value(true, ctx)
);
});
}
@@ -9697,9 +9710,11 @@ impl Workspace {
pub fn toggle_block_snackbar(&mut self, ctx: &mut ViewContext<Self>) {
BlockListSettings::handle(ctx).update(ctx, |blocklist_settings, ctx| {
report_if_error!(blocklist_settings
.snackbar_enabled
.toggle_and_save_value(ctx));
report_if_error!(
blocklist_settings
.snackbar_enabled
.toggle_and_save_value(ctx)
);
});
}
@@ -9711,9 +9726,11 @@ impl Workspace {
pub fn toggle_syntax_highlighting(&mut self, ctx: &mut ViewContext<Self>) {
InputSettings::handle(ctx).update(ctx, |input_settings, ctx| {
report_if_error!(input_settings
.syntax_highlighting
.toggle_and_save_value(ctx));
report_if_error!(
input_settings
.syntax_highlighting
.toggle_and_save_value(ctx)
);
});
}
@@ -9728,9 +9745,11 @@ impl Workspace {
ctx: &mut ViewContext<Self>,
) {
AccessibilitySettings::handle(ctx).update(ctx, |accessibility_settings, ctx| {
report_if_error!(accessibility_settings
.a11y_verbosity
.set_value(verbosity, ctx));
report_if_error!(
accessibility_settings
.a11y_verbosity
.set_value(verbosity, ctx)
);
});
}
@@ -15550,9 +15569,11 @@ impl Workspace {
fn reset_zoom(&mut self, ctx: &mut ViewContext<Self>) {
WindowSettings::handle(ctx).update(ctx, |window_settings, ctx| {
report_if_error!(window_settings
.zoom_level
.set_value(ZoomLevel::default_value(), ctx));
report_if_error!(
window_settings
.zoom_level
.set_value(ZoomLevel::default_value(), ctx)
);
});
}
@@ -15572,9 +15593,11 @@ impl Workspace {
};
WindowSettings::handle(ctx).update(ctx, |window_settings, ctx| {
report_if_error!(window_settings
.zoom_level
.set_value(crate::window_settings::ZoomLevel::VALUES[next_index], ctx));
report_if_error!(
window_settings
.zoom_level
.set_value(crate::window_settings::ZoomLevel::VALUES[next_index], ctx)
);
});
}
@@ -15587,9 +15610,11 @@ impl Workspace {
fn set_terminal_font_size(&mut self, new_font_size: f32, ctx: &mut ViewContext<Self>) {
FontSettings::handle(ctx).update(ctx, |font_settings, ctx| {
report_if_error!(font_settings
.monospace_font_size
.set_value(new_font_size, ctx));
report_if_error!(
font_settings
.monospace_font_size
.set_value(new_font_size, ctx)
);
});
}
@@ -15839,8 +15864,8 @@ impl Workspace {
}
fn handle_codex_modal_event(&mut self, event: &CodexModalEvent, ctx: &mut ViewContext<Self>) {
use crate::ai::blocklist::agent_view::AgentViewEntryOrigin;
use crate::AIExecutionProfilesModel;
use crate::ai::blocklist::agent_view::AgentViewEntryOrigin;
match event {
CodexModalEvent::Close => {
@@ -17720,54 +17745,6 @@ impl Workspace {
SavePosition::new(Align::new(button).finish(), USER_AVATAR_BUTTON_POSITION_ID).finish()
}
fn render_resource_center_button(
&self,
appearance: &Appearance,
ctx: &AppContext,
) -> Box<dyn Element> {
// only show the unread indicator if the tips are NOT completed
let should_show_unread_indicator = !self.tips_completed.as_ref(ctx).skipped_or_completed;
let mut button = self
.render_tab_bar_icon_button(
appearance,
icons::Icon::Lightbulb,
&self.mouse_states.resource_center_icon,
WorkspaceAction::ToggleResourceCenter,
"Warp Essentials".to_string(),
self.cached_keybindings[TOGGLE_RESOURCE_CENTER_KEYBINDING_NAME].clone(),
false,
false,
)
.finish();
if should_show_unread_indicator {
const INDICATOR_DIAMETER: f32 = 6.;
let indicator = Container::new(
ConstrainedBox::new(
WarpUiIcon::new(ELLIPSE_SVG_PATH, appearance.theme().accent()).finish(),
)
.with_height(INDICATOR_DIAMETER)
.with_width(INDICATOR_DIAMETER)
.finish(),
)
.finish();
let mut stack = Stack::new();
stack.add_child(button);
stack.add_positioned_child(
indicator,
OffsetPositioning::offset_from_parent(
Vector2F::zero(),
ParentOffsetBounds::WindowByPosition,
ParentAnchor::TopRight,
ChildAnchor::TopRight,
),
);
button = stack.finish();
}
Align::new(button).finish()
}
fn render_settings_button(&self, appearance: &Appearance) -> Box<dyn Element> {
Align::new(
self.render_tab_bar_icon_button(
@@ -19677,12 +19654,16 @@ impl TypedActionView for Workspace {
} else {
// Config missing or deleted — clear and fall through to Terminal.
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.default_session_mode_internal
.set_value(DefaultSessionMode::Terminal, ctx));
report_if_error!(settings
.default_tab_config_path
.set_value(String::new(), ctx));
report_if_error!(
settings
.default_session_mode_internal
.set_value(DefaultSessionMode::Terminal, ctx)
);
report_if_error!(
settings
.default_tab_config_path
.set_value(String::new(), ctx)
);
});
self.add_terminal_tab(false, ctx);
}
@@ -19802,9 +19783,11 @@ impl TypedActionView for Workspace {
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings.default_session_mode_internal.set_value(*mode, ctx));
if let Some(path) = tab_config_path {
report_if_error!(settings
.default_tab_config_path
.set_value(path.to_string_lossy().into_owned(), ctx));
report_if_error!(
settings
.default_tab_config_path
.set_value(path.to_string_lossy().into_owned(), ctx)
);
}
});
#[cfg(feature = "local_tty")]
@@ -25,8 +25,8 @@ use pathfinder_color::ColorU;
use pathfinder_geometry::vector::vec2f;
use thousands::Separable;
use crate::send_telemetry_from_ctx;
use crate::TelemetryEvent;
use crate::send_telemetry_from_ctx;
const MODAL_WIDTH: f32 = 360.;
const MODAL_HEIGHT: f32 = 532.;
@@ -1,12 +1,12 @@
use crate::ai::active_agent_views_model::ActiveAgentViewsModel;
use crate::ai::active_agent_views_model::ConversationOrTaskId;
use crate::ai::agent_conversations_model::ConversationOrTask;
use crate::ai::conversation_status_ui::{render_status_element, STATUS_ELEMENT_PADDING};
use crate::ai::conversation_status_ui::{STATUS_ELEMENT_PADDING, render_status_element};
use crate::appearance::Appearance;
use crate::drive::sharing::dialog::SharingDialog;
use crate::menu::Menu;
use crate::ui_components::icons::Icon;
use crate::ui_components::menu_button::{icon_button_with_context_menu, MenuDirection};
use crate::ui_components::menu_button::{MenuDirection, icon_button_with_context_menu};
use crate::util::time_format::format_approx_duration_from_now_utc;
use crate::util::truncation::truncate_from_end;
use crate::workspace::view::conversation_list::view::ConversationListViewAction;
@@ -10,25 +10,25 @@ use crate::ai::agent_conversations_model::{AgentConversationsModel, Conversation
use crate::ai::agent_management::telemetry::{AgentManagementTelemetryEvent, OpenedFrom};
use crate::ai::blocklist::history_model::BlocklistAIHistoryModel;
use crate::appearance::Appearance;
use crate::drive::sharing::dialog::SharingDialog;
use crate::drive::sharing::ShareableObject;
use crate::drive::sharing::dialog::SharingDialog;
use crate::editor::{
EditorView, Event as EditorEvent, PropagateAndNoOpNavigationKeys,
PropagateHorizontalNavigationKeys, SingleLineEditorOptions, TextOptions,
};
use crate::menu::{Event as MenuEvent, Menu, MenuItem, MenuItemFields};
use crate::server::telemetry::SharingDialogSource;
use crate::view_components::action_button::{ActionButton, ButtonSize, SecondaryTheme};
use crate::view_components::DismissibleToast;
use crate::view_components::action_button::{ActionButton, ButtonSize, SecondaryTheme};
use crate::workspace::ToastStack;
use crate::workspace::WorkspaceAction;
use crate::workspace::global_actions::ForkedConversationDestination;
use crate::workspace::header_toolbar_item::HeaderToolbarItemKind;
use crate::workspace::tab_settings::TabSettings;
use crate::workspace::view::conversation_list::item::{
render_item, render_static_item, ItemProps, ItemState, OverflowMenuDisplay, StaticItemProps,
STATIC_ITEM_MIN_HEIGHT,
ItemProps, ItemState, OverflowMenuDisplay, STATIC_ITEM_MIN_HEIGHT, StaticItemProps,
render_item, render_static_item,
};
use crate::workspace::ToastStack;
use crate::workspace::WorkspaceAction;
use galaxy_core::features::FeatureFlag;
use galaxy_core::send_telemetry_from_ctx;
use galaxy_core::ui::Icon;
@@ -43,8 +43,8 @@ use galaxyui::elements::{
ScrollbarWidth, Shrinkable, Stack, Text, UniformList, UniformListState,
};
use galaxyui::fonts::{Properties, Weight};
use galaxyui::keymap::macros::*;
use galaxyui::keymap::FixedBinding;
use galaxyui::keymap::macros::*;
use galaxyui::platform::Cursor;
use galaxyui::text_layout::TextAlignment;
use galaxyui::{
@@ -1,10 +1,10 @@
use crate::TelemetryEvent;
use crate::ai::{AIRequestUsageModel, AIRequestUsageModelEvent};
use crate::auth::AuthStateProvider;
use crate::pricing::{PricingInfoModel, PricingInfoModelEvent};
use crate::ui_components::blended_colors;
use crate::ui_components::icons::Icon;
use crate::workspaces::user_workspaces::UserWorkspaces;
use crate::TelemetryEvent;
use asset_macro::bundled_or_fetched_asset;
use galaxy_core::send_telemetry_from_ctx;
use galaxy_core::ui::appearance::Appearance;
@@ -1,5 +1,5 @@
use crate::workspace::view::global_search::view::GlobalSearchEvent;
use crate::workspace::view::global_search::SearchConfig;
use crate::workspace::view::global_search::view::GlobalSearchEvent;
use anyhow::Result;
use futures::StreamExt as _;
use galaxy_ripgrep::search::{Match as RipgrepMatch, Submatch};
@@ -1,7 +1,7 @@
use std::path::PathBuf;
use crate::workspace::view::global_search::view::GlobalSearchEvent;
use crate::workspace::view::global_search::SearchConfig;
use crate::workspace::view::global_search::view::GlobalSearchEvent;
use galaxyui::{Entity, ModelContext};
pub struct GlobalSearch {}
+4 -4
View File
@@ -13,6 +13,7 @@ use galaxy_ripgrep::search::{Match as RipgrepMatch, Submatch};
use pathfinder_geometry::vector::vec2f;
use string_offset::{ByteOffset, CharCounter};
use crate::TelemetryEvent;
use crate::code::icon_from_file_path;
use crate::debounce::debounce;
use crate::editor::{
@@ -23,16 +24,15 @@ use crate::search::ItemHighlightState as SearchHighlightState;
use crate::ui_components::blended_colors;
use crate::ui_components::icons::Icon as UiIcon;
use crate::ui_components::item_highlight::{ImageOrIcon, ItemHighlightState};
use crate::ui_components::render_file_search_row::{render_file_search_row, FileSearchRowOptions};
use crate::ui_components::render_file_search_row::{FileSearchRowOptions, render_file_search_row};
use crate::view_components::action_button::{ActionButton, ButtonSize, NakedTheme};
use crate::workspace::view::global_search::model::GlobalSearch;
use crate::workspace::view::global_search::SearchConfig;
use crate::TelemetryEvent;
use crate::workspace::view::global_search::model::GlobalSearch;
use galaxy_core::send_telemetry_from_ctx;
use galaxy_core::ui::Icon;
use galaxy_core::ui::appearance::Appearance;
use galaxy_core::ui::theme::color::internal_colors;
use galaxy_core::ui::theme::{AnsiColorIdentifier, Fill as ThemeFill};
use galaxy_core::ui::Icon;
use galaxyui::elements::{
Border, ChildAnchor, ChildView, Clipped, ConstrainedBox, Container, CornerRadius,
CrossAxisAlignment, DispatchEventResult, Empty, EventHandler, Fill, Flex, FormattedTextElement,
+1 -1
View File
@@ -28,7 +28,7 @@ use galaxyui::ui_components::components::UiComponent;
use galaxyui::{
AppContext, Element, Entity, SingletonEntity, TypedActionView, View, ViewContext, ViewHandle,
};
use markdown_parser::{parse_markdown, FormattedText, FormattedTextLine};
use markdown_parser::{FormattedText, FormattedTextLine, parse_markdown};
use pathfinder_color::ColorU;
use std::collections::HashMap;
+8 -8
View File
@@ -5,15 +5,15 @@ use galaxy_core::ui::theme::color::internal_colors;
use galaxy_core::{send_telemetry_from_ctx, ui::Icon};
use galaxy_util::path::LineAndColumnArg;
use galaxyui::{
AppContext, Entity, FocusContext, ModelHandle, SingletonEntity, TypedActionView, View,
ViewContext, ViewHandle, WeakViewHandle,
elements::{
resizable_state_handle, ChildView, ConstrainedBox, Container, CrossAxisAlignment,
DragBarSide, Element, Empty, Flex, MainAxisAlignment, MainAxisSize, MouseStateHandle,
ParentElement, Resizable, ResizableStateHandle, Shrinkable,
ChildView, ConstrainedBox, Container, CrossAxisAlignment, DragBarSide, Element, Empty,
Flex, MainAxisAlignment, MainAxisSize, MouseStateHandle, ParentElement, Resizable,
ResizableStateHandle, Shrinkable, resizable_state_handle,
},
platform::Cursor,
ui_components::components::{Coords, UiComponent, UiComponentStyles},
AppContext, Entity, FocusContext, ModelHandle, SingletonEntity, TypedActionView, View,
ViewContext, ViewHandle, WeakViewHandle,
};
use crate::ai::agent::conversation::AIConversationId;
@@ -30,9 +30,9 @@ use crate::server::telemetry::{FileTreeSource, WarpDriveSource};
use crate::settings_view::keybindings::{KeybindingChangedEvent, KeybindingChangedNotifier};
#[cfg(feature = "local_fs")]
use crate::util::file::external_editor::EditorSettings;
use crate::util::openable_file_type::FileTarget;
#[cfg(feature = "local_fs")]
use crate::util::openable_file_type::resolve_file_target_with_editor_choice;
use crate::util::openable_file_type::FileTarget;
use crate::workspace::view::conversation_list::view::{
ConversationListView, Event as ConversationListViewEvent,
};
@@ -46,10 +46,11 @@ use crate::workspace::view::{
TOGGLE_PROJECT_EXPLORER_BINDING_NAME, TOGGLE_WARP_DRIVE_BINDING_NAME,
};
use crate::{
TelemetryEvent,
appearance::Appearance,
code::file_tree::FileTreeView,
drive::panel::{MAX_SIDEBAR_WIDTH_RATIO, MIN_SIDEBAR_WIDTH},
pane_group::pane::view::header::{components::HEADER_EDGE_PADDING, PANE_HEADER_HEIGHT},
pane_group::pane::view::header::{PANE_HEADER_HEIGHT, components::HEADER_EDGE_PADDING},
pane_group::{self},
terminal::resizable_data::{ModalType, ResizableData},
ui_components::{
@@ -58,7 +59,6 @@ use crate::{
},
util::bindings::keybinding_name_to_display_string,
workspace::WorkspaceAction,
TelemetryEvent,
};
#[derive(Default)]
+1 -1
View File
@@ -1,3 +1,4 @@
use crate::FeatureFlag;
use crate::pane_group::{NewTerminalOptions, PanesLayout};
use crate::settings::AISettings;
use crate::terminal;
@@ -5,7 +6,6 @@ use crate::terminal::view::{
AgentOnboardingVersion, OnboardingIntention, OnboardingVersion, TerminalAction,
};
use crate::workspace::Workspace;
use crate::FeatureFlag;
use galaxyui::{SingletonEntity as _, ViewContext};
use onboarding::{ProjectOnboardingSettings, SelectedSettings};
use std::collections::HashMap;
@@ -1,3 +1,3 @@
mod view;
pub use view::{init, OpenWarpLaunchModal, OpenWarpLaunchModalEvent};
pub use view::{OpenWarpLaunchModal, OpenWarpLaunchModalEvent, init};
@@ -1,4 +1,4 @@
use galaxy_core::ui::theme::{phenomenon::PhenomenonStyle, Fill};
use galaxy_core::ui::theme::{Fill, phenomenon::PhenomenonStyle};
use galaxyui::assets::asset_cache::AssetSource;
use galaxyui::elements::{
Align, CacheOption, ChildAnchor, ChildView, ConstrainedBox, Container, CornerRadius,
+14 -11
View File
@@ -3,27 +3,27 @@ use crate::code_review::code_review_header::HEADER_BUTTON_PADDING;
#[cfg(feature = "local_fs")]
use crate::code_review::code_review_view::CodeReviewAction;
use crate::code_review::code_review_view::{
render_file_navigation_button, CodeReviewView, CONTENT_LEFT_MARGIN, CONTENT_RIGHT_MARGIN,
CONTENT_LEFT_MARGIN, CONTENT_RIGHT_MARGIN, CodeReviewView, render_file_navigation_button,
};
use crate::code_review::code_review_view::{CodeReviewCommentDebugState, CodeReviewViewEvent};
use crate::code_review::telemetry_event::CodeReviewContextDestination;
use crate::pane_group::pane::view::header::{components::HEADER_EDGE_PADDING, PANE_HEADER_HEIGHT};
use crate::pane_group::WorkingDirectoriesEvent;
use crate::pane_group::pane::view::header::{PANE_HEADER_HEIGHT, components::HEADER_EDGE_PADDING};
use crate::pane_group::{Event as PaneGroupEvent, PaneGroup, WorkingDirectoriesModel};
use crate::settings::{AISettings, AISettingsChangedEvent};
use crate::terminal::CLIAgent;
use crate::terminal::cli_agent_sessions::CLIAgentSessionsModel;
use crate::terminal::input::MenuPositioning;
use crate::terminal::CLIAgent;
use crate::ui_components::{buttons::icon_button_with_color, icons};
use crate::util::bindings::{keybinding_name_to_display_string, CustomAction};
use crate::util::bindings::{CustomAction, keybinding_name_to_display_string};
#[cfg(feature = "local_fs")]
use crate::util::openable_file_type::FileTarget;
use crate::view_components::action_button::{ActionButton, PaneHeaderTheme};
#[cfg(feature = "local_fs")]
use crate::view_components::action_button::{NakedTheme, TooltipAlignment};
use crate::view_components::{Dropdown, DropdownItem};
use crate::workspace::view::TOGGLE_RIGHT_PANEL_BINDING_NAME;
use crate::workspace::WorkspaceAction;
use crate::workspace::view::TOGGLE_RIGHT_PANEL_BINDING_NAME;
use crate::{
appearance::Appearance,
drive::panel::{MAX_SIDEBAR_WIDTH_RATIO, MIN_SIDEBAR_WIDTH},
@@ -34,16 +34,16 @@ use dunce::canonicalize;
use galaxy_core::features::FeatureFlag;
use galaxy_core::ui::Icon;
use galaxy_util::path::LineAndColumnArg;
use galaxyui::EntityId;
use galaxyui::elements::{ChildAnchor, Empty, PositionedElementAnchor};
use galaxyui::keymap::EditableBinding;
use galaxyui::EntityId;
use galaxyui::{
elements::{
resizable_state_handle, Container, DragBarSide, Element, MainAxisSize, MouseStateHandle,
Resizable, ResizableStateHandle,
},
AppContext, Entity, ModelHandle, SingletonEntity, TypedActionView, View, ViewContext,
ViewHandle, WeakViewHandle,
elements::{
Container, DragBarSide, Element, MainAxisSize, MouseStateHandle, Resizable,
ResizableStateHandle, resizable_state_handle,
},
};
use galaxyui::{
elements::{
@@ -1440,7 +1440,10 @@ impl RightPanelView {
terminal_status.is_available(),
Self::format_optional_path(terminal_status.active_session_path.as_deref()),
Self::format_optional_path(terminal_status.current_repo_path.as_deref()),
terminal_status.active_cli_agent.as_deref().unwrap_or("<none>"),
terminal_status
.active_cli_agent
.as_deref()
.unwrap_or("<none>"),
terminal_status.is_executing,
terminal_status.is_input_box_visible,
unavailable_reasons,
+1 -1
View File
@@ -1,11 +1,11 @@
//! Logic to determine the working directory for new terminal sessions.
use super::Workspace;
use crate::terminal::ShellLaunchData;
use crate::terminal::available_shells::AvailableShell;
#[cfg(feature = "local_tty")]
use crate::terminal::available_shells::AvailableShells;
use crate::terminal::session_settings::{NewSessionSource, SessionSettings};
use crate::terminal::ShellLaunchData;
use galaxyui::SingletonEntity;
use galaxyui::{AppContext, ViewContext, WindowId};
use std::path::PathBuf;
+18 -18
View File
@@ -1,22 +1,22 @@
pub mod telemetry;
use crate::FeatureFlag;
use crate::ai::agent::conversation::ConversationStatus;
use crate::ai::agent_management::AgentNotificationsModel;
use crate::code::editor::{add_color, remove_color};
use crate::code::icon_from_file_path;
use crate::safe_triangle::SafeTriangle;
use crate::send_telemetry_from_app_ctx;
use crate::terminal::cli_agent_sessions::listener::agent_supports_rich_status;
use crate::terminal::cli_agent_sessions::CLIAgentSessionsModel;
use crate::terminal::view::TerminalViewState;
use crate::terminal::CLIAgent;
use crate::terminal::cli_agent_sessions::CLIAgentSessionsModel;
use crate::terminal::cli_agent_sessions::listener::agent_supports_rich_status;
use crate::terminal::view::TerminalViewState;
use crate::ui_components::icon_with_status::{
render_icon_with_status, IconWithStatusSizing, IconWithStatusVariant,
IconWithStatusSizing, IconWithStatusVariant, render_icon_with_status,
};
use crate::workspace::view::vertical_tabs::telemetry::{
VerticalTabsChipEntrypoint, VerticalTabsTelemetryEvent,
};
use crate::FeatureFlag;
use std::cell::RefCell;
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
@@ -24,16 +24,16 @@ use std::sync::{Arc, Mutex};
use crate::appearance::Appearance;
use crate::context_chips::display_chip::GitLineChanges;
use crate::context_chips::github_pr_display_text_from_url;
use crate::drive::{cloud_object_styling::warp_drive_icon_color, DriveObjectType};
use crate::drive::{DriveObjectType, cloud_object_styling::warp_drive_icon_color};
use crate::editor::EditorView;
use crate::pane_group::pane::IPaneType;
use crate::pane_group::TerminalPane;
use crate::pane_group::pane::IPaneType;
use crate::pane_group::{
CodePane, NotebookPane, PaneGroup, PaneId, TabBarHoverIndex, WorkflowPane,
};
use crate::tab::{tab_position_id, SelectedTabColor, TabData};
use crate::terminal::session_settings::SessionSettings;
use crate::tab::{SelectedTabColor, TabData, tab_position_id};
use crate::terminal::TerminalView;
use crate::terminal::session_settings::SessionSettings;
use crate::themes::theme::Fill as ThemeFill;
use crate::ui_components::buttons::combo_inner_button;
use crate::ui_components::icons::Icon as UiIcon;
@@ -53,20 +53,20 @@ use languages::language_by_filename;
use galaxy_core::context_flag::ContextFlag;
use galaxy_core::telemetry::TelemetryEvent as _;
use galaxy_core::ui::Icon as WarpIcon;
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::{AnsiColorIdentifier, Fill as WarpThemeFill, WarpTheme};
use galaxy_core::ui::Icon as WarpIcon;
use galaxyui::elements::DispatchEventResult;
use galaxyui::elements::{
resizable_state_handle, Border, ChildAnchor, Clipped, ClippedScrollStateHandle,
ClippedScrollable, ConstrainedBox, Container, CornerRadius, CrossAxisAlignment, DragAxis,
DragBarSide, Draggable, DropShadow, DropTarget, Element, Empty, EventHandler, Expanded,
Fill as ElementFill, Flex, Hoverable, MainAxisSize, MouseStateHandle, OffsetPositioning,
Padding, ParentAnchor, ParentElement, ParentOffsetBounds, PositionedElementAnchor,
PositionedElementOffsetBounds, Radius, Resizable, ResizableStateHandle, SavePosition,
ScrollTarget, ScrollToPositionMode, ScrollbarWidth, Shrinkable, Stack, Text,
Border, ChildAnchor, Clipped, ClippedScrollStateHandle, ClippedScrollable, ConstrainedBox,
Container, CornerRadius, CrossAxisAlignment, DragAxis, DragBarSide, Draggable, DropShadow,
DropTarget, Element, Empty, EventHandler, Expanded, Fill as ElementFill, Flex, Hoverable,
MainAxisSize, MouseStateHandle, OffsetPositioning, Padding, ParentAnchor, ParentElement,
ParentOffsetBounds, PositionedElementAnchor, PositionedElementOffsetBounds, Radius, Resizable,
ResizableStateHandle, SavePosition, ScrollTarget, ScrollToPositionMode, ScrollbarWidth,
Shrinkable, Stack, Text, resizable_state_handle,
};
use galaxyui::fonts::{Properties, Weight};
use galaxyui::platform::Cursor;
@@ -77,7 +77,7 @@ use galaxyui::ui_components::text_input::TextInput;
use galaxyui::{AppContext, EntityId, SingletonEntity, ViewHandle, WindowId};
use pathfinder_color::ColorU;
use pathfinder_geometry::rect::RectF;
use pathfinder_geometry::vector::{vec2f, Vector2F};
use pathfinder_geometry::vector::{Vector2F, vec2f};
use settings::Setting as _;
use std::path::{Path, PathBuf};
@@ -1,6 +1,6 @@
use galaxy_core::features::FeatureFlag;
use galaxy_core::telemetry::{EnablementState, TelemetryEvent, TelemetryEventDesc};
use serde_json::{json, Value};
use serde_json::{Value, json};
use strum_macros::{EnumDiscriminants, EnumIter};
use crate::workspace::tab_settings::{
@@ -4,13 +4,16 @@ use crate::pane_group::{PaneId, TerminalPaneId};
use crate::safe_triangle::SafeTriangle;
use crate::terminal::CLIAgent;
use crate::workspace::tab_settings::VerticalTabsDisplayGranularity;
use galaxyui::elements::PositionedElementOffsetBounds;
use galaxyui::EntityId;
use galaxyui::elements::PositionedElementOffsetBounds;
use pathfinder_geometry::rect::RectF;
use pathfinder_geometry::vector::Vector2F;
use std::path::PathBuf;
use super::{
AgentTabTextPreference, SummaryPaneKind, SummaryPaneKindIcons, TerminalAgentText,
TerminalPrimaryLineData, TerminalPrimaryLineFont, VerticalTabsDetailTarget,
VerticalTabsDetailTargetKind, VerticalTabsSummaryBranchEntry, VerticalTabsSummaryData,
branch_label_display, coalesce_summary_branch_entries, code_detail_kind_label,
compact_branch_subtitle_display, detail_sidecar_width_and_bounds,
detail_target_for_hovered_row, format_summary_primary_labels,
@@ -20,9 +23,7 @@ use super::{
summary_overflow_count, summary_search_text_fragments, terminal_kind_badge_label,
terminal_primary_line_data, terminal_pull_request_badge_label, terminal_search_text_fragments,
terminal_title_fallback_font, uses_outer_group_container, visible_pane_ids_for_detail_target,
vtab_diff_stats_text, AgentTabTextPreference, SummaryPaneKind, SummaryPaneKindIcons,
TerminalAgentText, TerminalPrimaryLineData, TerminalPrimaryLineFont, VerticalTabsDetailTarget,
VerticalTabsDetailTargetKind, VerticalTabsSummaryBranchEntry, VerticalTabsSummaryData,
vtab_diff_stats_text,
};
fn pane_id() -> PaneId {
+1 -1
View File
@@ -9,6 +9,7 @@ use crate::uri::browser_url_handler::parse_current_url;
use super::PanelPosition;
use crate::BlocklistAIHistoryModel;
use crate::ai::agent_conversations_model::AgentConversationsModel;
use crate::ai::conversation_details_panel::{
ConversationDetailsData, ConversationDetailsPanel, ConversationDetailsPanelEvent,
@@ -21,7 +22,6 @@ use crate::view_components::action_button::{
use crate::wasm_nux_dialog::{WasmNUXDialog, WasmNUXDialogEvent};
use crate::workspace::action::WorkspaceAction;
use crate::workspace::view::{NotebookSource, OpenWarpDriveObjectSettings, Workspace};
use crate::BlocklistAIHistoryModel;
const TRANSCRIPT_PANEL_WIDTH: f32 = 280.0;
+67 -42
View File
@@ -1,4 +1,5 @@
use super::*;
use crate::ai::AIRequestUsageModel;
use crate::ai::blocklist::{BlocklistAIHistoryModel, BlocklistAIPermissions};
use crate::ai::document::ai_document_model::AIDocumentModel;
use crate::ai::execution_profiles::profiles::AIExecutionProfilesModel;
@@ -8,7 +9,6 @@ use crate::ai::outline::RepoOutlines;
use crate::ai::persisted_workspace::PersistedWorkspace;
use crate::ai::restored_conversations::RestoredAgentConversations;
use crate::ai::skills::SkillManager;
use crate::ai::AIRequestUsageModel;
use crate::cloud_object::model::persistence::CloudModel;
use crate::cloud_object::model::view::CloudViewModel;
use crate::context_chips::prompt::Prompt;
@@ -22,12 +22,12 @@ use crate::pricing::PricingInfoModel;
use crate::suggestions::ignored_suggestions_model::IgnoredSuggestionsModel;
#[cfg(feature = "local_fs")]
use crate::user_config::tab_configs_dir;
use repo_metadata::repositories::DetectedRepositories;
use repo_metadata::watcher::DirectoryWatcher;
#[cfg(feature = "local_fs")]
use repo_metadata::CanonicalizedPath;
#[cfg(feature = "local_fs")]
use repo_metadata::RepoMetadataModel;
use repo_metadata::repositories::DetectedRepositories;
use repo_metadata::watcher::DirectoryWatcher;
use session_sharing_protocol::sharer::SessionSourceType;
use std::collections::HashMap;
#[cfg(feature = "local_fs")]
@@ -41,8 +41,8 @@ use crate::server::sync_queue::SyncQueue;
use crate::server::telemetry::context_provider::AppTelemetryContextProvider;
use crate::settings::PrivacySettings;
use crate::settings_view::keybindings::KeybindingChangedNotifier;
use crate::settings_view::DisplayCount;
use crate::settings_view::keybindings::KeybindingChangedNotifier;
use crate::system::SystemStats;
use crate::tab_configs::tab_config::{TabConfigPaneNode, TabConfigPaneType};
use crate::terminal::history::History;
@@ -61,8 +61,8 @@ use crate::ai::active_agent_views_model::ActiveAgentViewsModel;
use crate::ai::agent_conversations_model::AgentConversationsModel;
use crate::ai::ambient_agents::github_auth_notifier::GitHubAuthNotifier;
use crate::ai::mcp::{
gallery::MCPGalleryManager, templatable_manager::TemplatableMCPServerManager,
FileBasedMCPManager, FileMCPWatcher,
FileBasedMCPManager, FileMCPWatcher, gallery::MCPGalleryManager,
templatable_manager::TemplatableMCPServerManager,
};
use crate::resource_center::Tip;
use crate::terminal::cli_agent_sessions::CLIAgentSessionsModel;
@@ -70,15 +70,15 @@ use crate::test_util::settings::initialize_settings_for_tests;
use crate::undo_close::UndoCloseSettings;
use crate::warp_managed_paths_watcher::WarpManagedPathsWatcher;
use crate::workflows::local_workflows::LocalWorkflows;
use crate::{experiments, workspace, GlobalResourceHandlesProvider};
use crate::{AgentNotificationsModel, ObjectActions};
use crate::{GlobalResourceHandlesProvider, experiments, workspace};
use crate::settings::cloud_preferences_syncer::CloudPreferencesSyncer;
use ai::index::full_source_code_embedding::manager::CodebaseIndexManager;
use ai::project_context::model::ProjectContextModel;
use galaxy_editor::editor::NavigationKey;
use galaxyui::AddSingletonModel;
use galaxyui::{platform::WindowStyle, App, ViewHandle};
use galaxyui::{App, ViewHandle, platform::WindowStyle};
use pane_group::{NotebookPane, PaneState, SplitPaneState, TerminalPaneId};
use session_sharing_protocol::common::SessionId;
use terminal::shared_session::permissions_manager::SessionPermissionsManager;
@@ -879,9 +879,11 @@ fn test_workspace_sessions_retrieves_tabs() {
.map(|tab| tab.read(ctx, |tab, _ctx| tab.pane_id_by_index(0).unwrap()))
.expect("WindowId was not retrieved.");
assert!(workspace
.workspace_sessions(ctx.window_id(), ctx)
.any(|x| { x.pane_view_locator().pane_id == pane_id }));
assert!(
workspace
.workspace_sessions(ctx.window_id(), ctx)
.any(|x| { x.pane_view_locator().pane_id == pane_id })
);
// Add a tab and check if workspace_sessions finds the second session from the new tab.
workspace.add_terminal_tab(false, ctx);
@@ -890,9 +892,11 @@ fn test_workspace_sessions_retrieves_tabs() {
.map(|tab| tab.read(ctx, |tab, _ctx| tab.pane_id_by_index(0).unwrap()))
.expect("WindowId was not retrieved.");
assert!(workspace
.workspace_sessions(ctx.window_id(), ctx)
.any(|x| { x.pane_view_locator().pane_id == new_pane_id }));
assert!(
workspace
.workspace_sessions(ctx.window_id(), ctx)
.any(|x| { x.pane_view_locator().pane_id == new_pane_id })
);
});
});
}
@@ -917,9 +921,11 @@ fn test_workspace_sessions_retrieves_panes() {
.get_pane_group_view(0)
.map(|tab| tab.read(ctx, |tab, _ctx| tab.pane_id_by_index(1).unwrap()))
.expect("WindowId was not retrieved.");
assert!(workspace
.workspace_sessions(ctx.window_id(), ctx)
.any(|x| { x.pane_view_locator().pane_id == new_pane_id }));
assert!(
workspace
.workspace_sessions(ctx.window_id(), ctx)
.any(|x| { x.pane_view_locator().pane_id == new_pane_id })
);
});
});
}
@@ -1661,8 +1667,11 @@ fn test_tab_context_menu_share_session_items() {
// for sharing are "Stop sharing" and "Stop sharing all".
workspace.read(&app, |workspace, ctx| {
let items = workspace.tabs[1].menu_items(1, 3, ctx);
assert!(items[0]
.is_approximately_same_item_as(&MenuItemFields::new("Stop sharing").into_item()));
assert!(
items[0].is_approximately_same_item_as(
&MenuItemFields::new("Stop sharing").into_item()
)
);
assert!(items[1].is_approximately_same_item_as(
&MenuItemFields::new("Stop sharing all").into_item()
));
@@ -1682,8 +1691,11 @@ fn test_tab_context_menu_share_session_items() {
// for sharing are "Share session" and "Stop sharing all".
workspace.read(&app, |workspace, ctx| {
let items = workspace.tabs[1].menu_items(1, 3, ctx);
assert!(items[0]
.is_approximately_same_item_as(&MenuItemFields::new("Share session").into_item()));
assert!(
items[0].is_approximately_same_item_as(
&MenuItemFields::new("Share session").into_item()
)
);
assert!(items[1].is_approximately_same_item_as(
&MenuItemFields::new("Stop sharing all").into_item()
));
@@ -1698,8 +1710,11 @@ fn test_tab_context_menu_share_session_items() {
// When there's no shared sessions in a tab, the only option is "Share session".
workspace.read(&app, |workspace, ctx| {
let items = workspace.tabs[1].menu_items(1, 3, ctx);
assert!(items[0]
.is_approximately_same_item_as(&MenuItemFields::new("Share session").into_item()));
assert!(
items[0].is_approximately_same_item_as(
&MenuItemFields::new("Share session").into_item()
)
);
assert!(items[1].is_approximately_same_item_as(&MenuItem::Separator));
});
});
@@ -2676,11 +2691,13 @@ fn test_worktree_sidecar_search_editor_proxies_navigation_and_escape() {
assert!(workspace.show_new_session_dropdown_menu.is_none());
assert!(!workspace.show_new_session_sidecar);
assert!(workspace.worktree_sidecar_search_query.is_empty());
assert!(workspace
.worktree_sidecar_search_editor
.as_ref(ctx)
.buffer_text(ctx)
.is_empty());
assert!(
workspace
.worktree_sidecar_search_editor
.as_ref(ctx)
.buffer_text(ctx)
.is_empty()
);
});
});
}
@@ -2780,9 +2797,11 @@ fn test_vertical_tabs_context_menu_does_not_show_hover_only_tab_bar() {
workspace.update(&mut app, |workspace, ctx| {
TabSettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.workspace_decoration_visibility
.set_value(WorkspaceDecorationVisibility::OnHover, ctx));
report_if_error!(
settings
.workspace_decoration_visibility
.set_value(WorkspaceDecorationVisibility::OnHover, ctx)
);
report_if_error!(settings.use_vertical_tabs.set_value(true, ctx));
});
workspace.should_show_ai_assistant_warm_welcome = false;
@@ -2807,9 +2826,11 @@ fn test_standard_tab_context_menu_shows_hover_only_tab_bar() {
workspace.update(&mut app, |workspace, ctx| {
TabSettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.workspace_decoration_visibility
.set_value(WorkspaceDecorationVisibility::OnHover, ctx));
report_if_error!(
settings
.workspace_decoration_visibility
.set_value(WorkspaceDecorationVisibility::OnHover, ctx)
);
});
workspace.should_show_ai_assistant_warm_welcome = false;
@@ -2843,10 +2864,12 @@ fn test_open_cloud_agent_setup_guide_action_opens_management_view_and_is_idempot
.current_workspace_state
.is_agent_management_view_open
);
assert!(workspace
.agent_management_view
.as_ref(ctx)
.is_showing_setup_guide());
assert!(
workspace
.agent_management_view
.as_ref(ctx)
.is_showing_setup_guide()
);
workspace.handle_action(&WorkspaceAction::OpenCloudAgentSetupGuide, ctx);
assert!(
@@ -2854,10 +2877,12 @@ fn test_open_cloud_agent_setup_guide_action_opens_management_view_and_is_idempot
.current_workspace_state
.is_agent_management_view_open
);
assert!(workspace
.agent_management_view
.as_ref(ctx)
.is_showing_setup_guide());
assert!(
workspace
.agent_management_view
.as_ref(ctx)
.is_showing_setup_guide()
);
});
});
}