v1.4.0: Auto-compact streaming, Bedrock summarization support, subagent orchestration, and Galaxy rebrand continuation
Major features: - Auto-compact: triggers conversation summarization when context window >= 85%, compacts Bedrock message history to a summary pair, and tracks live context tokens - Bedrock summarization: plumbs `is_summarization` flag through translator/client/response pipeline, handles SummarizeConversation input type, and marks `summarized` in metadata - Session restore: rebuilds bedrock_message_history from persisted task messages via newly-public `convert_proto_message`, preventing empty history on reconnect - Subagent orchestration: adds SubagentQuestion/Answer/CompletionSummary event types, parent-child question routing with depth limits, retry counting, and drain methods - Summarization UI: inline SummarizationView in AI blocks with progress/finished states Refactors: - Rename WarpTheme → GalaxyTheme across ~100 files (rebrand continuation) - Rename warp_home_config_dir → galaxy_home_config_dir and related path functions - Predefined rules: replace "System Defined Rule #N" with descriptive names (e.g. "Correctness Over Speed", "Never Guess") and add lookup helpers - Usage view: replace cumulative input/output token display with live context tokens, cache hit rate calculation, and separate cache read/write stats - Telemetry: remove verbose doc comments, simplify trait definitions - Facts view: simplify delete permission check (always allow local deletion) - Remove warp_managed_paths_watcher.rs (dead code) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
eaa2ddc75e
commit
6f54e2cb30
@@ -254,11 +254,11 @@ pub enum WorkspaceAction {
|
||||
/// In Code Mode V2 this toggles the left panel which contains both the project explorer and
|
||||
/// Warp Drive. This happens as explicit action from the user.
|
||||
ToggleLeftPanel,
|
||||
/// Toggles directly to the Warp Drive tab of the left panel in Code Mode V2
|
||||
ToggleWarpDrive,
|
||||
/// Unconditionally opens Warp Drive. This is used in the case of user lifecycle
|
||||
/// Toggles directly to the Galaxy Drive tab of the left panel in Code Mode V2
|
||||
ToggleGalaxyDrive,
|
||||
/// Unconditionally opens Galaxy Drive. This is used in the case of user lifecycle
|
||||
/// events like new user onboarding or when the user joins a team.
|
||||
OpenWarpDrive,
|
||||
OpenGalaxyDrive,
|
||||
/// Toggles the right panel. This happens as an explicit action from the user.
|
||||
ToggleRightPanel,
|
||||
/// Opens the code review panel (right panel) without toggling. If already open,
|
||||
@@ -825,8 +825,8 @@ impl WorkspaceAction {
|
||||
| StartTabDrag
|
||||
| FinalizeDropTab
|
||||
| ToggleLeftPanel
|
||||
| ToggleWarpDrive
|
||||
| OpenWarpDrive
|
||||
| ToggleGalaxyDrive
|
||||
| OpenGalaxyDrive
|
||||
| ClosePanel
|
||||
| ToggleRightPanel
|
||||
| OpenCodeReviewPanel(..)
|
||||
|
||||
@@ -714,7 +714,7 @@ pub fn init(app: &mut AppContext) {
|
||||
WorkspaceAction::ToggleLeftPanel,
|
||||
)
|
||||
.with_context_predicate(id!("Workspace"))
|
||||
.with_custom_action(CustomAction::ToggleWarpDrive),
|
||||
.with_custom_action(CustomAction::ToggleGalaxyDrive),
|
||||
EditableBinding::new(
|
||||
TOGGLE_RIGHT_PANEL_BINDING_NAME,
|
||||
BindingDescription::new("Toggle code review")
|
||||
@@ -764,7 +764,7 @@ pub fn init(app: &mut AppContext) {
|
||||
EditableBinding::new(
|
||||
LEFT_PANEL_WARP_DRIVE_BINDING_NAME,
|
||||
BindingDescription::new("Left Panel: Galaxy Drive"),
|
||||
WorkspaceAction::ToggleWarpDrive,
|
||||
WorkspaceAction::ToggleGalaxyDrive,
|
||||
)
|
||||
.with_group(bindings::BindingGroup::Navigation.as_str())
|
||||
.with_context_predicate(id!("Workspace") & id!(flags::ENABLE_WARP_DRIVE))
|
||||
@@ -791,7 +791,7 @@ pub fn init(app: &mut AppContext) {
|
||||
TOGGLE_WARP_DRIVE_BINDING_NAME,
|
||||
BindingDescription::new("Toggle Galaxy Drive")
|
||||
.with_custom_description(bindings::MAC_MENUS_CONTEXT, "Galaxy Drive"),
|
||||
WorkspaceAction::ToggleWarpDrive,
|
||||
WorkspaceAction::ToggleGalaxyDrive,
|
||||
)
|
||||
.with_context_predicate(id!("Workspace") & id!(flags::ENABLE_WARP_DRIVE)),
|
||||
EditableBinding::new(
|
||||
@@ -1401,7 +1401,7 @@ fn add_open_setting_pages_as_editable_binding(app: &mut AppContext) {
|
||||
)
|
||||
.with_group(bindings::BindingGroup::Settings.as_str())
|
||||
.with_context_predicate(id!("Workspace"))
|
||||
.with_custom_action(CustomAction::ShowAboutWarp),
|
||||
.with_custom_action(CustomAction::ShowAboutGalaxy),
|
||||
EditableBinding::new(
|
||||
"workspace:show_settings_teams_page",
|
||||
BindingDescription::new("Open Settings: Teams")
|
||||
|
||||
+47
-47
@@ -233,7 +233,7 @@ use crate::drive::import::modal::{ImportModal, ImportModalEvent};
|
||||
use crate::drive::workflows::arguments::ArgumentsState;
|
||||
use crate::drive::workflows::modal::{WorkflowModal, WorkflowModalEvent};
|
||||
use crate::drive::{
|
||||
CloudObjectTypeAndId, DriveObjectType, DrivePanel, DrivePanelEvent, OpenWarpDriveObjectSettings,
|
||||
CloudObjectTypeAndId, DriveObjectType, DrivePanel, DrivePanelEvent, OpenGalaxyDriveObjectSettings,
|
||||
};
|
||||
use crate::experiments::{BlockOnboarding, Experiment};
|
||||
use crate::menu::{
|
||||
@@ -338,7 +338,7 @@ use crate::user_config::{
|
||||
find_unused_worktree_config_path, materialize_default_worktree_config, sanitize_toml_base_name,
|
||||
tab_configs_dir,
|
||||
};
|
||||
use crate::user_config::{WarpConfig, WarpConfigUpdateEvent};
|
||||
use crate::user_config::{GalaxyConfig, GalaxyConfigUpdateEvent};
|
||||
use crate::util::bindings::{
|
||||
keybinding_name_to_display_string, keybinding_name_to_keystroke, trigger_to_keystroke,
|
||||
};
|
||||
@@ -480,7 +480,7 @@ use galaxyui::text_layout::ClipConfig;
|
||||
use galaxyui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
|
||||
use galaxyui::{
|
||||
accessibility::{
|
||||
AccessibilityContent, AccessibilityVerbosity, ActionAccessibilityContent, WarpA11yRole,
|
||||
AccessibilityContent, AccessibilityVerbosity, ActionAccessibilityContent, GalaxyA11yRole,
|
||||
},
|
||||
elements::{
|
||||
Align, Border, ChildAnchor, ChildView, Clipped, ConstrainedBox, Container, CornerRadius,
|
||||
@@ -1372,7 +1372,7 @@ impl Workspace {
|
||||
if let Some(id) = id_to_force_expand {
|
||||
self.open_notebook(
|
||||
&NotebookSource::Existing(id),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
);
|
||||
@@ -1388,7 +1388,7 @@ impl Workspace {
|
||||
if let Some(id) = id_to_force_expand {
|
||||
self.open_workflow_with_existing(
|
||||
id,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
);
|
||||
CloudModel::handle(ctx).update(ctx, |cloud_model, ctx| {
|
||||
@@ -1936,7 +1936,7 @@ impl Workspace {
|
||||
);
|
||||
});
|
||||
} else {
|
||||
WarpConfig::handle(ctx).update(ctx, |warp_config, ctx| {
|
||||
GalaxyConfig::handle(ctx).update(ctx, |warp_config, ctx| {
|
||||
warp_config.remove_tab_config_by_path(path, ctx);
|
||||
});
|
||||
}
|
||||
@@ -2404,7 +2404,7 @@ impl Workspace {
|
||||
);
|
||||
}
|
||||
|
||||
/// Subscribes to `WarpConfigUpdateEvent::TabConfigErrors` and shows a persistent
|
||||
/// Subscribes to `GalaxyConfigUpdateEvent::TabConfigErrors` and shows a persistent
|
||||
/// error toast for each tab config file that failed to parse. Uses `object_id`
|
||||
/// keyed by file path so that re-saving the same file auto-dismisses the stale
|
||||
/// toast.
|
||||
@@ -2412,9 +2412,9 @@ impl Workspace {
|
||||
toast_stack: ViewHandle<DismissibleToastStack<WorkspaceAction>>,
|
||||
ctx: &mut ViewContext<Self>,
|
||||
) {
|
||||
ctx.subscribe_to_model(&WarpConfig::handle(ctx), move |_me, _, event, ctx| {
|
||||
ctx.subscribe_to_model(&GalaxyConfig::handle(ctx), move |_me, _, event, ctx| {
|
||||
match event {
|
||||
WarpConfigUpdateEvent::TabConfigs => {
|
||||
GalaxyConfigUpdateEvent::TabConfigs => {
|
||||
// On every tab config reload, dismiss error toasts for
|
||||
// files that now parse successfully. The model has already
|
||||
// been updated with the current error set before this event
|
||||
@@ -2429,7 +2429,7 @@ impl Workspace {
|
||||
toast_stack.dismiss_toasts_by_prefix("tab_config_error:", ctx);
|
||||
});
|
||||
}
|
||||
WarpConfigUpdateEvent::TabConfigErrors(errors) => {
|
||||
GalaxyConfigUpdateEvent::TabConfigErrors(errors) => {
|
||||
let home_dir = dirs::home_dir();
|
||||
for error in errors {
|
||||
let object_id = format!("tab_config_error:{}", error.file_path.display());
|
||||
@@ -2463,17 +2463,17 @@ impl Workspace {
|
||||
});
|
||||
}
|
||||
|
||||
/// Subscribes to `WarpConfigUpdateEvent::SettingsErrors` and
|
||||
/// Subscribes to `GalaxyConfigUpdateEvent::SettingsErrors` and
|
||||
/// `SettingsErrorsCleared` to update the workspace settings-error banner
|
||||
/// and mirror the state into the settings pane for its nav-rail footer.
|
||||
fn subscribe_to_settings_errors(ctx: &mut ViewContext<Self>) {
|
||||
ctx.subscribe_to_model(&WarpConfig::handle(ctx), |me, _, event, ctx| match event {
|
||||
WarpConfigUpdateEvent::SettingsErrors(error) => {
|
||||
ctx.subscribe_to_model(&GalaxyConfig::handle(ctx), |me, _, event, ctx| match event {
|
||||
GalaxyConfigUpdateEvent::SettingsErrors(error) => {
|
||||
me.settings_file_error = Some(error.clone());
|
||||
me.sync_settings_error_state_into_settings_pane(ctx);
|
||||
ctx.notify();
|
||||
}
|
||||
WarpConfigUpdateEvent::SettingsErrorsCleared => {
|
||||
GalaxyConfigUpdateEvent::SettingsErrorsCleared => {
|
||||
me.settings_file_error = None;
|
||||
me.sync_settings_error_state_into_settings_pane(ctx);
|
||||
ctx.notify();
|
||||
@@ -5635,7 +5635,7 @@ impl Workspace {
|
||||
AgentManagementViewEvent::OpenPlanNotebook { notebook_uid } => {
|
||||
self.open_notebook(
|
||||
&NotebookSource::Existing((*notebook_uid).into()),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
false,
|
||||
);
|
||||
@@ -6086,7 +6086,7 @@ impl Workspace {
|
||||
|
||||
// 4. User tab configs
|
||||
if FeatureFlag::TabConfigs.is_enabled() {
|
||||
let tab_configs = WarpConfig::as_ref(ctx).tab_configs().to_vec();
|
||||
let tab_configs = GalaxyConfig::as_ref(ctx).tab_configs().to_vec();
|
||||
|
||||
// Count occurrences of each config name so we can disambiguate
|
||||
// duplicates in the menu (e.g. "My Tab Config", "My Tab Config (1)").
|
||||
@@ -6780,7 +6780,7 @@ impl Workspace {
|
||||
ObjectType::Notebook => {
|
||||
self.open_notebook(
|
||||
&NotebookSource::Existing(sync_id),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
);
|
||||
@@ -6788,7 +6788,7 @@ impl Workspace {
|
||||
ObjectType::Workflow => {
|
||||
self.open_workflow_in_pane(
|
||||
&WorkflowOpenSource::Existing(sync_id),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
WorkflowViewMode::View,
|
||||
ctx,
|
||||
);
|
||||
@@ -6817,7 +6817,7 @@ impl Workspace {
|
||||
pub fn open_notebook(
|
||||
&mut self,
|
||||
source: &NotebookSource,
|
||||
settings: &OpenWarpDriveObjectSettings,
|
||||
settings: &OpenGalaxyDriveObjectSettings,
|
||||
ctx: &mut ViewContext<Self>,
|
||||
default_to_new_pane: bool,
|
||||
) {
|
||||
@@ -6900,7 +6900,7 @@ impl Workspace {
|
||||
pub fn open_workflow_from_intent(
|
||||
&mut self,
|
||||
workflow_id: SyncId,
|
||||
settings: &OpenWarpDriveObjectSettings,
|
||||
settings: &OpenGalaxyDriveObjectSettings,
|
||||
ctx: &mut ViewContext<Self>,
|
||||
) {
|
||||
// If running workflows is supported, do so. Otherwise, or if the workflow isn't in memory,
|
||||
@@ -6942,7 +6942,7 @@ impl Workspace {
|
||||
pub fn open_workflow_in_pane(
|
||||
&mut self,
|
||||
source: &WorkflowOpenSource,
|
||||
settings: &OpenWarpDriveObjectSettings,
|
||||
settings: &OpenGalaxyDriveObjectSettings,
|
||||
mode: WorkflowViewMode,
|
||||
ctx: &mut ViewContext<Self>,
|
||||
) {
|
||||
@@ -7697,7 +7697,7 @@ impl Workspace {
|
||||
);
|
||||
self.tips_completed.update(ctx, |tips_completed, ctx| {
|
||||
mark_feature_used_and_write_to_user_defaults(
|
||||
Tip::Action(TipAction::OpenWarpDrive),
|
||||
Tip::Action(TipAction::OpenGalaxyDrive),
|
||||
tips_completed,
|
||||
ctx,
|
||||
);
|
||||
@@ -8860,7 +8860,7 @@ impl Workspace {
|
||||
ctx.notify();
|
||||
}
|
||||
LaunchConfigModalEvent::SuccessfullySavedConfig(launch_config) => {
|
||||
ctx.update_model(&WarpConfig::handle(ctx), move |warp_config, ctx| {
|
||||
ctx.update_model(&GalaxyConfig::handle(ctx), move |warp_config, ctx| {
|
||||
warp_config.append_launch_config(launch_config, ctx);
|
||||
});
|
||||
ctx.notify();
|
||||
@@ -10843,7 +10843,7 @@ impl Workspace {
|
||||
pub fn add_tab_for_cloud_notebook(
|
||||
&mut self,
|
||||
notebook_id: SyncId,
|
||||
settings: &OpenWarpDriveObjectSettings,
|
||||
settings: &OpenGalaxyDriveObjectSettings,
|
||||
ctx: &mut ViewContext<Self>,
|
||||
) {
|
||||
// TODO: We should validate that this notebook exists and fallback if it doesn't
|
||||
@@ -10861,7 +10861,7 @@ impl Workspace {
|
||||
fn add_tab_for_cloud_workflow(
|
||||
&mut self,
|
||||
workflow_id: SyncId,
|
||||
settings: &OpenWarpDriveObjectSettings,
|
||||
settings: &OpenGalaxyDriveObjectSettings,
|
||||
ctx: &mut ViewContext<Self>,
|
||||
) {
|
||||
let panes_layout = PanesLayout::Snapshot(Box::new(PaneNodeSnapshot::Leaf(LeafSnapshot {
|
||||
@@ -12449,7 +12449,7 @@ impl Workspace {
|
||||
}
|
||||
CommandPaletteEvent::OpenNotebook { id } => self.open_notebook(
|
||||
&NotebookSource::Existing(*id),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
),
|
||||
@@ -12732,7 +12732,7 @@ impl Workspace {
|
||||
SettingsViewEvent::LaunchNetworkLogging => {
|
||||
self.open_network_log_pane(ctx);
|
||||
}
|
||||
SettingsViewEvent::OpenWarpDrive => {
|
||||
SettingsViewEvent::OpenGalaxyDrive => {
|
||||
self.close_all_overlays(ctx);
|
||||
self.open_or_toggle_warp_drive(
|
||||
false, /* toggle */
|
||||
@@ -13032,7 +13032,7 @@ impl Workspace {
|
||||
pane_group::Event::OpenCloudWorkflowForEdit(workflow_id) => self
|
||||
.open_workflow_with_existing(
|
||||
*workflow_id,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
),
|
||||
pane_group::Event::OpenWorkflowModalWithTemporary(workflow) => {
|
||||
@@ -13094,7 +13094,7 @@ impl Workspace {
|
||||
} => {
|
||||
self.move_to_drive_space(*cloud_object_type_and_id, *space, ctx);
|
||||
}
|
||||
pane_group::Event::OpenWarpDriveLink {
|
||||
pane_group::Event::OpenGalaxyDriveLink {
|
||||
open_warp_drive_args,
|
||||
} => {
|
||||
let object_found = CloudModel::as_ref(ctx)
|
||||
@@ -13674,7 +13674,7 @@ impl Workspace {
|
||||
ctx.notify();
|
||||
}
|
||||
pane_group::Event::ClearHoveredTabIndex => self.hovered_tab_index = None,
|
||||
pane_group::Event::OpenWarpDriveObjectInPane(uid) => {
|
||||
pane_group::Event::OpenGalaxyDriveObjectInPane(uid) => {
|
||||
self.open_warp_drive_object_in_new_pane(uid, ctx);
|
||||
}
|
||||
pane_group::Event::OpenSuggestedAgentModeWorkflowModal { workflow_and_id } => {
|
||||
@@ -14414,7 +14414,7 @@ impl Workspace {
|
||||
DrivePanelEvent::OpenWorkflowModalWithCloudWorkflow(workflow_id) => {
|
||||
self.open_workflow_with_existing(
|
||||
*workflow_id,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
);
|
||||
}
|
||||
@@ -14427,14 +14427,14 @@ impl Workspace {
|
||||
);
|
||||
}
|
||||
DrivePanelEvent::OpenNotebook(source) => {
|
||||
self.open_notebook(source, &OpenWarpDriveObjectSettings::default(), ctx, true)
|
||||
self.open_notebook(source, &OpenGalaxyDriveObjectSettings::default(), ctx, true)
|
||||
}
|
||||
DrivePanelEvent::OpenEnvVarCollection(source) => {
|
||||
self.open_env_var_collection(source, false, ctx)
|
||||
}
|
||||
DrivePanelEvent::OpenWorkflowInPane(source, mode) => self.open_workflow_in_pane(
|
||||
source,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
*mode,
|
||||
ctx,
|
||||
),
|
||||
@@ -14878,7 +14878,7 @@ impl Workspace {
|
||||
AcceptNotebook(sync_id) => {
|
||||
self.open_notebook(
|
||||
&NotebookSource::Existing(*sync_id),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
);
|
||||
@@ -16348,7 +16348,7 @@ impl Workspace {
|
||||
fn open_workflow_with_existing(
|
||||
&mut self,
|
||||
workflow_id: SyncId,
|
||||
settings: &OpenWarpDriveObjectSettings,
|
||||
settings: &OpenGalaxyDriveObjectSettings,
|
||||
ctx: &mut ViewContext<Self>,
|
||||
) {
|
||||
let source = WorkflowOpenSource::Existing(workflow_id);
|
||||
@@ -16368,7 +16368,7 @@ impl Workspace {
|
||||
};
|
||||
self.open_workflow_in_pane(
|
||||
&source,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
WorkflowViewMode::Create,
|
||||
ctx,
|
||||
);
|
||||
@@ -16389,7 +16389,7 @@ impl Workspace {
|
||||
};
|
||||
self.open_workflow_in_pane(
|
||||
&source,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
WorkflowViewMode::Create,
|
||||
ctx,
|
||||
);
|
||||
@@ -19556,7 +19556,7 @@ impl TypedActionView for Workspace {
|
||||
WorkspaceAction::SetA11yVerbosityLevel(verbosity) => {
|
||||
ActionAccessibilityContent::Custom(AccessibilityContent::new_without_help(
|
||||
format!("{verbosity:?} accessibility announcements set"),
|
||||
WarpA11yRole::UserAction,
|
||||
GalaxyA11yRole::UserAction,
|
||||
))
|
||||
}
|
||||
_ => ActionAccessibilityContent::from_debug(),
|
||||
@@ -19987,7 +19987,7 @@ impl TypedActionView for Workspace {
|
||||
owner: personal_drive,
|
||||
initial_folder_id: None,
|
||||
},
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
);
|
||||
@@ -20049,7 +20049,7 @@ impl TypedActionView for Workspace {
|
||||
};
|
||||
self.open_workflow_in_pane(
|
||||
&source,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
WorkflowViewMode::Create,
|
||||
ctx,
|
||||
);
|
||||
@@ -20067,7 +20067,7 @@ impl TypedActionView for Workspace {
|
||||
};
|
||||
self.open_workflow_in_pane(
|
||||
&source,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
WorkflowViewMode::Create,
|
||||
ctx,
|
||||
);
|
||||
@@ -20108,7 +20108,7 @@ impl TypedActionView for Workspace {
|
||||
self.finish_tab_rename(ctx);
|
||||
self.current_workspace_state.is_tab_being_dragged = true;
|
||||
}
|
||||
OpenWarpDrive => {
|
||||
OpenGalaxyDrive => {
|
||||
if WarpDriveSettings::is_warp_drive_enabled(ctx) {
|
||||
self.open_left_panel_view(&LeftPanelAction::WarpDrive, ctx);
|
||||
}
|
||||
@@ -20618,7 +20618,7 @@ impl TypedActionView for Workspace {
|
||||
});
|
||||
self.open_workflow_with_existing(
|
||||
*workflow_id,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
);
|
||||
}
|
||||
@@ -20938,7 +20938,7 @@ impl TypedActionView for Workspace {
|
||||
}
|
||||
OpenNotebook { id } => self.open_notebook(
|
||||
&NotebookSource::Existing(*id),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
),
|
||||
@@ -21096,7 +21096,7 @@ impl TypedActionView for Workspace {
|
||||
};
|
||||
self.open_workflow_in_pane(
|
||||
&source,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
WorkflowViewMode::Create,
|
||||
ctx,
|
||||
);
|
||||
@@ -21114,7 +21114,7 @@ impl TypedActionView for Workspace {
|
||||
};
|
||||
self.open_workflow_in_pane(
|
||||
&source,
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
WorkflowViewMode::Create,
|
||||
ctx,
|
||||
);
|
||||
@@ -21352,7 +21352,7 @@ impl TypedActionView for Workspace {
|
||||
self.toggle_left_panel_view(&LeftPanelAction::ProjectExplorer, is_showing, ctx);
|
||||
}
|
||||
}
|
||||
ToggleWarpDrive => {
|
||||
ToggleGalaxyDrive => {
|
||||
if WarpDriveSettings::is_warp_drive_enabled(ctx) {
|
||||
let is_showing =
|
||||
self.left_panel_view.as_ref(ctx).active_view() == ToolPanelView::WarpDrive;
|
||||
|
||||
@@ -8,7 +8,7 @@ use crate::TelemetryEvent;
|
||||
use asset_macro::bundled_or_fetched_asset;
|
||||
use galaxy_core::send_telemetry_from_ctx;
|
||||
use galaxy_core::ui::appearance::Appearance;
|
||||
use galaxy_core::ui::theme::{Fill, WarpTheme};
|
||||
use galaxy_core::ui::theme::{Fill, GalaxyTheme};
|
||||
use galaxy_graphql::billing::{PlanPricing, StripeSubscriptionPlan};
|
||||
use galaxyui::elements::{
|
||||
Align, Border, CacheOption, ChildAnchor, ConstrainedBox, Container, CornerRadius,
|
||||
@@ -97,7 +97,7 @@ impl FreeTierLimitHitModal {
|
||||
fn render_checklist_item_dynamic(
|
||||
text: String,
|
||||
appearance: &Appearance,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
let formatted_text = FormattedText::new([FormattedTextLine::Line(vec![
|
||||
FormattedTextFragment::plain_text(text),
|
||||
|
||||
@@ -1074,7 +1074,7 @@ impl GlobalSearchView {
|
||||
directory_path: &Path,
|
||||
matched_path: &MatchedPath,
|
||||
appearance: &Appearance,
|
||||
theme: &galaxy_core::ui::theme::WarpTheme,
|
||||
theme: &galaxy_core::ui::theme::GalaxyTheme,
|
||||
app: &AppContext,
|
||||
) -> Box<dyn Element> {
|
||||
let is_selected = self.is_row_at_index_selected(index);
|
||||
@@ -1249,7 +1249,7 @@ impl GlobalSearchView {
|
||||
matched: &Match,
|
||||
match_index: usize,
|
||||
appearance: &Appearance,
|
||||
theme: &galaxy_core::ui::theme::WarpTheme,
|
||||
theme: &galaxy_core::ui::theme::GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
let is_selected = self.is_row_at_index_selected(index);
|
||||
let line_number = matched.line_number;
|
||||
@@ -1853,7 +1853,7 @@ impl GlobalSearchView {
|
||||
index: usize,
|
||||
dir_entry: &DirectoryEntry,
|
||||
appearance: &Appearance,
|
||||
theme: &galaxy_core::ui::theme::WarpTheme,
|
||||
theme: &galaxy_core::ui::theme::GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
let is_selected = self.is_row_at_index_selected(index);
|
||||
let mouse_state = dir_entry.mouse_state.clone();
|
||||
|
||||
@@ -52,12 +52,11 @@ use crate::workspace::{
|
||||
use languages::language_by_filename;
|
||||
|
||||
use galaxy_core::context_flag::ContextFlag;
|
||||
use galaxy_core::telemetry::TelemetryEvent as _;
|
||||
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 galaxy_core::ui::theme::{AnsiColorIdentifier, Fill as GalaxyThemeFill, GalaxyTheme};
|
||||
use galaxy_core::ui::Icon as GalaxyIcon;
|
||||
use galaxyui::elements::DispatchEventResult;
|
||||
use galaxyui::elements::{
|
||||
resizable_state_handle, Border, ChildAnchor, Clipped, ClippedScrollStateHandle,
|
||||
@@ -254,13 +253,13 @@ enum TerminalPrimaryLineFont {
|
||||
Monospace,
|
||||
}
|
||||
|
||||
fn oz_icon_fill(theme: &WarpTheme) -> WarpThemeFill {
|
||||
fn oz_icon_fill(theme: &GalaxyTheme) -> GalaxyThemeFill {
|
||||
theme.main_text_color(theme.background())
|
||||
}
|
||||
|
||||
fn render_pane_icon_with_status(
|
||||
variant: IconWithStatusVariant,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
let sizing = match &variant {
|
||||
IconWithStatusVariant::OzAgent { .. } => &VERTICAL_TABS_AGENT_SIZING,
|
||||
@@ -286,7 +285,7 @@ fn pane_row_background(
|
||||
is_selected: bool,
|
||||
is_hovered: bool,
|
||||
is_being_dragged: bool,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Option<ThemeFill> {
|
||||
if let Some(color) = pane_color {
|
||||
let opacity = if is_selected || is_hovered {
|
||||
@@ -309,7 +308,7 @@ fn render_pane_row_element(
|
||||
padding: Padding,
|
||||
defer_events_to_children: bool,
|
||||
content: Box<dyn Element>,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
let detail_target = supports_vertical_tabs_detail_sidecar(&props.typed).then(|| {
|
||||
detail_target_for_hovered_row(
|
||||
@@ -1087,7 +1086,7 @@ fn vertical_tabs_tab_bar_location(insert_index: usize, tab_count: usize) -> TabB
|
||||
}
|
||||
}
|
||||
|
||||
fn render_vertical_tab_hover_indicator(theme: &WarpTheme) -> Box<dyn Element> {
|
||||
fn render_vertical_tab_hover_indicator(theme: &GalaxyTheme) -> Box<dyn Element> {
|
||||
ConstrainedBox::new(
|
||||
Container::new(Empty::new().finish())
|
||||
.with_background(ThemeFill::Solid(theme.accent().into()))
|
||||
@@ -1118,7 +1117,7 @@ fn render_vertical_tab_insertion_target(
|
||||
insert_index: usize,
|
||||
tab_count: usize,
|
||||
is_drag_target: bool,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
let content = if is_drag_target {
|
||||
render_vertical_tab_hover_indicator(theme)
|
||||
@@ -1143,7 +1142,7 @@ fn add_vertical_tab_insertion_target_overlay(
|
||||
is_drag_target: bool,
|
||||
parent_anchor: ParentAnchor,
|
||||
child_anchor: ChildAnchor,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) {
|
||||
stack.add_positioned_overlay_child(
|
||||
render_vertical_tab_insertion_target(insert_index, tab_count, is_drag_target, theme),
|
||||
@@ -1166,7 +1165,7 @@ fn render_control_bar(
|
||||
let theme = appearance.theme();
|
||||
let sub_text = theme.sub_text_color(theme.background());
|
||||
|
||||
let search_icon = ConstrainedBox::new(WarpIcon::Search.to_galaxyui_icon(sub_text).finish())
|
||||
let search_icon = ConstrainedBox::new(GalaxyIcon::Search.to_galaxyui_icon(sub_text).finish())
|
||||
.with_width(SEARCH_ICON_SIZE)
|
||||
.with_height(SEARCH_ICON_SIZE)
|
||||
.finish();
|
||||
@@ -1226,35 +1225,35 @@ fn render_detail_kind_badge_icon(
|
||||
if let Some(icon) = cli_agent_session.and_then(|session| session.agent.icon()) {
|
||||
let color = cli_agent_session
|
||||
.and_then(|session| session.agent.brand_color())
|
||||
.map(WarpThemeFill::Solid)
|
||||
.map(GalaxyThemeFill::Solid)
|
||||
.unwrap_or_else(|| theme.accent());
|
||||
return icon.to_galaxyui_icon(color).finish();
|
||||
}
|
||||
|
||||
let icon = if terminal_view.is_ambient_agent_session(app) {
|
||||
WarpIcon::OzCloud
|
||||
GalaxyIcon::OzCloud
|
||||
} else if terminal_view
|
||||
.selected_conversation_display_title(app)
|
||||
.is_some()
|
||||
{
|
||||
WarpIcon::Oz
|
||||
GalaxyIcon::Oz
|
||||
} else {
|
||||
WarpIcon::Terminal
|
||||
GalaxyIcon::Terminal
|
||||
};
|
||||
let color = match icon {
|
||||
WarpIcon::Oz | WarpIcon::OzCloud => oz_icon_fill(theme),
|
||||
WarpIcon::Terminal => disabled_text,
|
||||
GalaxyIcon::Oz | GalaxyIcon::OzCloud => oz_icon_fill(theme),
|
||||
GalaxyIcon::Terminal => disabled_text,
|
||||
_ => sub_text,
|
||||
};
|
||||
icon.to_galaxyui_icon(color).finish()
|
||||
}
|
||||
TypedPane::Code(_) => icon_from_file_path(&props.title, appearance)
|
||||
.unwrap_or_else(|| WarpIcon::Code2.to_galaxyui_icon(sub_text).finish()),
|
||||
.unwrap_or_else(|| GalaxyIcon::Code2.to_galaxyui_icon(sub_text).finish()),
|
||||
typed => {
|
||||
let fill = typed
|
||||
.warp_drive_object_type()
|
||||
.map(|object_type| {
|
||||
WarpThemeFill::Solid(warp_drive_icon_color(appearance, object_type))
|
||||
GalaxyThemeFill::Solid(warp_drive_icon_color(appearance, object_type))
|
||||
})
|
||||
.unwrap_or(sub_text);
|
||||
typed.icon().to_galaxyui_icon(fill).finish()
|
||||
@@ -1276,7 +1275,7 @@ fn render_settings_button(
|
||||
state.settings_button_mouse_state.clone(),
|
||||
move |hover_state| {
|
||||
let icon = ConstrainedBox::new(
|
||||
WarpIcon::Settings
|
||||
GalaxyIcon::Settings
|
||||
.to_galaxyui_icon(if is_popup_open { main_text } else { sub_text })
|
||||
.finish(),
|
||||
)
|
||||
@@ -2084,13 +2083,13 @@ fn render_group_action_buttons(
|
||||
action_buttons_mouse_state: MouseStateHandle,
|
||||
kebab_mouse_state: MouseStateHandle,
|
||||
close_mouse_state: MouseStateHandle,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
let meta_color = theme.sub_text_color(theme.background());
|
||||
|
||||
let kebab_button = Hoverable::new(kebab_mouse_state, move |button_state| {
|
||||
let mut container = Container::new(
|
||||
ConstrainedBox::new(WarpIcon::DotsVertical.to_galaxyui_icon(meta_color).finish())
|
||||
ConstrainedBox::new(GalaxyIcon::DotsVertical.to_galaxyui_icon(meta_color).finish())
|
||||
.with_width(GROUP_ACTION_BUTTON_ICON_SIZE)
|
||||
.with_height(GROUP_ACTION_BUTTON_ICON_SIZE)
|
||||
.finish(),
|
||||
@@ -2113,7 +2112,7 @@ fn render_group_action_buttons(
|
||||
|
||||
let close_button = Hoverable::new(close_mouse_state, move |button_state| {
|
||||
let mut container = Container::new(
|
||||
ConstrainedBox::new(WarpIcon::X.to_galaxyui_icon(meta_color).finish())
|
||||
ConstrainedBox::new(GalaxyIcon::X.to_galaxyui_icon(meta_color).finish())
|
||||
.with_width(GROUP_ACTION_BUTTON_ICON_SIZE)
|
||||
.with_height(GROUP_ACTION_BUTTON_ICON_SIZE)
|
||||
.finish(),
|
||||
@@ -2231,8 +2230,8 @@ fn resolve_icon_with_status_variant(
|
||||
let main_text = theme.main_text_color(theme.background());
|
||||
let sub_text = theme.sub_text_color(theme.background());
|
||||
|
||||
let drive_color = |object_type: DriveObjectType| -> WarpThemeFill {
|
||||
WarpThemeFill::Solid(warp_drive_icon_color(appearance, object_type))
|
||||
let drive_color = |object_type: DriveObjectType| -> GalaxyThemeFill {
|
||||
GalaxyThemeFill::Solid(warp_drive_icon_color(appearance, object_type))
|
||||
};
|
||||
|
||||
match typed {
|
||||
@@ -2275,7 +2274,7 @@ fn resolve_icon_with_status_variant(
|
||||
} else {
|
||||
// Plain terminal: use foreground color per design spec
|
||||
IconWithStatusVariant::Neutral {
|
||||
icon: WarpIcon::Terminal,
|
||||
icon: GalaxyIcon::Terminal,
|
||||
icon_color: main_text,
|
||||
}
|
||||
}
|
||||
@@ -2285,7 +2284,7 @@ fn resolve_icon_with_status_variant(
|
||||
IconWithStatusVariant::NeutralElement { icon_element }
|
||||
} else {
|
||||
IconWithStatusVariant::Neutral {
|
||||
icon: WarpIcon::Code2,
|
||||
icon: GalaxyIcon::Code2,
|
||||
icon_color: sub_text,
|
||||
}
|
||||
}
|
||||
@@ -2341,9 +2340,9 @@ fn has_unread_activity(typed: &TypedPane<'_>, app: &AppContext) -> bool {
|
||||
|
||||
const INDICATOR_DOT_SIZE: f32 = 8.;
|
||||
|
||||
fn render_title_indicator(theme: &WarpTheme) -> Box<dyn Element> {
|
||||
fn render_title_indicator(theme: &GalaxyTheme) -> Box<dyn Element> {
|
||||
ConstrainedBox::new(
|
||||
WarpIcon::CircleFilled
|
||||
GalaxyIcon::CircleFilled
|
||||
.to_galaxyui_icon(theme.accent())
|
||||
.finish(),
|
||||
)
|
||||
@@ -2555,24 +2554,24 @@ impl TypedPane<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
fn icon(&self) -> WarpIcon {
|
||||
fn icon(&self) -> GalaxyIcon {
|
||||
match self {
|
||||
TypedPane::Terminal(_) => WarpIcon::Terminal,
|
||||
TypedPane::Code(_) => WarpIcon::Code2,
|
||||
TypedPane::CodeDiff => WarpIcon::Diff,
|
||||
TypedPane::File => WarpIcon::File,
|
||||
TypedPane::Notebook { is_plan: true } => WarpIcon::Compass,
|
||||
TypedPane::Notebook { is_plan: false } => WarpIcon::Notebook,
|
||||
TypedPane::Workflow { is_ai_prompt: true } => WarpIcon::Prompt,
|
||||
TypedPane::Terminal(_) => GalaxyIcon::Terminal,
|
||||
TypedPane::Code(_) => GalaxyIcon::Code2,
|
||||
TypedPane::CodeDiff => GalaxyIcon::Diff,
|
||||
TypedPane::File => GalaxyIcon::File,
|
||||
TypedPane::Notebook { is_plan: true } => GalaxyIcon::Compass,
|
||||
TypedPane::Notebook { is_plan: false } => GalaxyIcon::Notebook,
|
||||
TypedPane::Workflow { is_ai_prompt: true } => GalaxyIcon::Prompt,
|
||||
TypedPane::Workflow {
|
||||
is_ai_prompt: false,
|
||||
} => WarpIcon::Workflow,
|
||||
TypedPane::Settings | TypedPane::EnvironmentManagement => WarpIcon::Gear,
|
||||
TypedPane::EnvVarCollection => WarpIcon::EnvVarCollection,
|
||||
TypedPane::AIFact => WarpIcon::BookOpen,
|
||||
TypedPane::AIDocument => WarpIcon::Compass,
|
||||
TypedPane::ExecutionProfileEditor => WarpIcon::Lightning,
|
||||
TypedPane::Other => WarpIcon::File,
|
||||
} => GalaxyIcon::Workflow,
|
||||
TypedPane::Settings | TypedPane::EnvironmentManagement => GalaxyIcon::Gear,
|
||||
TypedPane::EnvVarCollection => GalaxyIcon::EnvVarCollection,
|
||||
TypedPane::AIFact => GalaxyIcon::BookOpen,
|
||||
TypedPane::AIDocument => GalaxyIcon::Compass,
|
||||
TypedPane::ExecutionProfileEditor => GalaxyIcon::Lightning,
|
||||
TypedPane::Other => GalaxyIcon::File,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3333,7 +3332,7 @@ fn compact_branch_subtitle_display(
|
||||
|
||||
fn render_git_branch_text(
|
||||
branch: &str,
|
||||
text_color: WarpThemeFill,
|
||||
text_color: GalaxyThemeFill,
|
||||
font_size: f32,
|
||||
appearance: &Appearance,
|
||||
) -> Box<dyn Element> {
|
||||
@@ -3366,7 +3365,7 @@ enum MetadataLeftContent {
|
||||
|
||||
fn render_text_line(
|
||||
text: &str,
|
||||
text_color: WarpThemeFill,
|
||||
text_color: GalaxyThemeFill,
|
||||
clip: ClipConfig,
|
||||
appearance: &Appearance,
|
||||
) -> Box<dyn Element> {
|
||||
@@ -3399,7 +3398,7 @@ fn render_inline_tab_rename_editor(
|
||||
fn render_title_override(
|
||||
props: &PaneProps<'_>,
|
||||
font_size: f32,
|
||||
text_color: WarpThemeFill,
|
||||
text_color: GalaxyThemeFill,
|
||||
clip: ClipConfig,
|
||||
appearance: &Appearance,
|
||||
app: &AppContext,
|
||||
@@ -3433,7 +3432,7 @@ fn render_pane_title_slot(
|
||||
props: &PaneProps<'_>,
|
||||
generated_title: impl FnOnce() -> Box<dyn Element>,
|
||||
font_size: f32,
|
||||
text_color: WarpThemeFill,
|
||||
text_color: GalaxyThemeFill,
|
||||
clip: ClipConfig,
|
||||
appearance: &Appearance,
|
||||
app: &AppContext,
|
||||
@@ -3629,9 +3628,9 @@ fn render_summary_pane_kind_icon_circle(
|
||||
let (icon_element, background): (Box<dyn Element>, ElementFill) = match kind {
|
||||
SummaryPaneKind::OzAgent { is_ambient } => {
|
||||
let icon = if is_ambient {
|
||||
WarpIcon::OzCloud
|
||||
GalaxyIcon::OzCloud
|
||||
} else {
|
||||
WarpIcon::Oz
|
||||
GalaxyIcon::Oz
|
||||
};
|
||||
(
|
||||
icon.to_galaxyui_icon(oz_icon_fill(theme)).finish(),
|
||||
@@ -3643,11 +3642,11 @@ fn render_summary_pane_kind_icon_circle(
|
||||
let icon_element = agent
|
||||
.icon()
|
||||
.map(|icon| {
|
||||
icon.to_galaxyui_icon(WarpThemeFill::Solid(icon_color))
|
||||
icon.to_galaxyui_icon(GalaxyThemeFill::Solid(icon_color))
|
||||
.finish()
|
||||
})
|
||||
.unwrap_or_else(|| {
|
||||
WarpIcon::Terminal
|
||||
GalaxyIcon::Terminal
|
||||
.to_galaxyui_icon(theme.sub_text_color(theme.background()))
|
||||
.finish()
|
||||
});
|
||||
@@ -3663,7 +3662,7 @@ fn render_summary_pane_kind_icon_circle(
|
||||
}
|
||||
SummaryPaneKind::Code { title } => (
|
||||
icon_from_file_path(&title, appearance).unwrap_or_else(|| {
|
||||
WarpIcon::Code2
|
||||
GalaxyIcon::Code2
|
||||
.to_galaxyui_icon(theme.sub_text_color(theme.background()))
|
||||
.finish()
|
||||
}),
|
||||
@@ -3705,36 +3704,36 @@ fn render_summary_pane_kind_icon_circle(
|
||||
fn summary_pane_kind_icon(
|
||||
kind: SummaryPaneKind,
|
||||
appearance: &Appearance,
|
||||
) -> (WarpIcon, WarpThemeFill) {
|
||||
) -> (GalaxyIcon, GalaxyThemeFill) {
|
||||
let theme = appearance.theme();
|
||||
let main_text = theme.main_text_color(theme.background());
|
||||
let sub_text = theme.sub_text_color(theme.background());
|
||||
let drive_color = |object_type: DriveObjectType| -> WarpThemeFill {
|
||||
WarpThemeFill::Solid(warp_drive_icon_color(appearance, object_type))
|
||||
let drive_color = |object_type: DriveObjectType| -> GalaxyThemeFill {
|
||||
GalaxyThemeFill::Solid(warp_drive_icon_color(appearance, object_type))
|
||||
};
|
||||
|
||||
match kind {
|
||||
SummaryPaneKind::Terminal => (WarpIcon::Terminal, main_text),
|
||||
SummaryPaneKind::Terminal => (GalaxyIcon::Terminal, main_text),
|
||||
SummaryPaneKind::OzAgent { is_ambient } => (
|
||||
if is_ambient {
|
||||
WarpIcon::OzCloud
|
||||
GalaxyIcon::OzCloud
|
||||
} else {
|
||||
WarpIcon::Oz
|
||||
GalaxyIcon::Oz
|
||||
},
|
||||
main_text,
|
||||
),
|
||||
SummaryPaneKind::CLIAgent { agent } => (
|
||||
agent.icon().unwrap_or(WarpIcon::Terminal),
|
||||
WarpThemeFill::Solid(agent.brand_icon_color()),
|
||||
agent.icon().unwrap_or(GalaxyIcon::Terminal),
|
||||
GalaxyThemeFill::Solid(agent.brand_icon_color()),
|
||||
),
|
||||
SummaryPaneKind::Code { .. } => (WarpIcon::Code2, sub_text),
|
||||
SummaryPaneKind::CodeDiff => (WarpIcon::Diff, sub_text),
|
||||
SummaryPaneKind::File => (WarpIcon::File, sub_text),
|
||||
SummaryPaneKind::Code { .. } => (GalaxyIcon::Code2, sub_text),
|
||||
SummaryPaneKind::CodeDiff => (GalaxyIcon::Diff, sub_text),
|
||||
SummaryPaneKind::File => (GalaxyIcon::File, sub_text),
|
||||
SummaryPaneKind::Notebook { is_plan } => (
|
||||
if is_plan {
|
||||
WarpIcon::Compass
|
||||
GalaxyIcon::Compass
|
||||
} else {
|
||||
WarpIcon::Notebook
|
||||
GalaxyIcon::Notebook
|
||||
},
|
||||
drive_color(DriveObjectType::Notebook {
|
||||
is_ai_document: is_plan,
|
||||
@@ -3742,9 +3741,9 @@ fn summary_pane_kind_icon(
|
||||
),
|
||||
SummaryPaneKind::Workflow { is_ai_prompt } => (
|
||||
if is_ai_prompt {
|
||||
WarpIcon::Prompt
|
||||
GalaxyIcon::Prompt
|
||||
} else {
|
||||
WarpIcon::Workflow
|
||||
GalaxyIcon::Workflow
|
||||
},
|
||||
if is_ai_prompt {
|
||||
drive_color(DriveObjectType::AgentModeWorkflow)
|
||||
@@ -3753,16 +3752,16 @@ fn summary_pane_kind_icon(
|
||||
},
|
||||
),
|
||||
SummaryPaneKind::Settings | SummaryPaneKind::EnvironmentManagement => {
|
||||
(WarpIcon::Gear, main_text)
|
||||
(GalaxyIcon::Gear, main_text)
|
||||
}
|
||||
SummaryPaneKind::EnvVarCollection => (
|
||||
WarpIcon::EnvVarCollection,
|
||||
GalaxyIcon::EnvVarCollection,
|
||||
drive_color(DriveObjectType::EnvVarCollection),
|
||||
),
|
||||
SummaryPaneKind::AIFact => (WarpIcon::BookOpen, drive_color(DriveObjectType::AIFact)),
|
||||
SummaryPaneKind::AIDocument => (WarpIcon::Compass, sub_text),
|
||||
SummaryPaneKind::ExecutionProfileEditor => (WarpIcon::Lightning, sub_text),
|
||||
SummaryPaneKind::Other => (WarpIcon::File, sub_text),
|
||||
SummaryPaneKind::AIFact => (GalaxyIcon::BookOpen, drive_color(DriveObjectType::AIFact)),
|
||||
SummaryPaneKind::AIDocument => (GalaxyIcon::Compass, sub_text),
|
||||
SummaryPaneKind::ExecutionProfileEditor => (GalaxyIcon::Lightning, sub_text),
|
||||
SummaryPaneKind::Other => (GalaxyIcon::File, sub_text),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3817,7 +3816,7 @@ fn render_summary_branch_line(
|
||||
fn render_terminal_primary_line_for_view(
|
||||
terminal_view: &TerminalView,
|
||||
appearance: &Appearance,
|
||||
text_color: WarpThemeFill,
|
||||
text_color: GalaxyThemeFill,
|
||||
app: &AppContext,
|
||||
) -> Box<dyn Element> {
|
||||
let title_text = terminal_view.terminal_title_from_shell();
|
||||
@@ -3853,7 +3852,7 @@ fn render_terminal_primary_line(
|
||||
primary_line: TerminalPrimaryLineData,
|
||||
terminal_view: &TerminalView,
|
||||
appearance: &Appearance,
|
||||
text_color: WarpThemeFill,
|
||||
text_color: GalaxyThemeFill,
|
||||
) -> Box<dyn Element> {
|
||||
let theme = appearance.theme();
|
||||
|
||||
@@ -4171,7 +4170,7 @@ fn compute_tab_group_color_mode(
|
||||
tab: &TabData,
|
||||
pane_group: &PaneGroup,
|
||||
visible_pane_ids: &[PaneId],
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
app: &AppContext,
|
||||
) -> TabGroupColorMode {
|
||||
// Manual override applies to the whole group.
|
||||
@@ -4466,7 +4465,7 @@ pub(super) fn render_settings_popup(
|
||||
Expanded::new(
|
||||
1.,
|
||||
render_popup_segment(
|
||||
WarpIcon::Menu01,
|
||||
GalaxyIcon::Menu01,
|
||||
matches!(current_mode, VerticalTabsViewMode::Compact),
|
||||
state.compact_segment_mouse_state.clone(),
|
||||
VerticalTabsViewMode::Compact,
|
||||
@@ -4480,7 +4479,7 @@ pub(super) fn render_settings_popup(
|
||||
Expanded::new(
|
||||
1.,
|
||||
render_popup_segment(
|
||||
WarpIcon::Grid,
|
||||
GalaxyIcon::Grid,
|
||||
matches!(current_mode, VerticalTabsViewMode::Expanded),
|
||||
state.expanded_segment_mouse_state.clone(),
|
||||
VerticalTabsViewMode::Expanded,
|
||||
@@ -4505,7 +4504,7 @@ pub(super) fn render_settings_popup(
|
||||
.finish();
|
||||
|
||||
// Divider between toggle and "Pane title as" section
|
||||
let make_divider = |theme: &WarpTheme| {
|
||||
let make_divider = |theme: &GalaxyTheme| {
|
||||
Container::new(
|
||||
ConstrainedBox::new(
|
||||
Container::new(Empty::new().finish())
|
||||
@@ -4706,7 +4705,7 @@ fn render_compact_subtitle_option(
|
||||
mouse_state: MouseStateHandle,
|
||||
value: VerticalTabsCompactSubtitle,
|
||||
appearance: &Appearance,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
const ICON_SIZE: f32 = 16.;
|
||||
const FONT_SIZE: f32 = 12.;
|
||||
@@ -4716,7 +4715,7 @@ fn render_compact_subtitle_option(
|
||||
let main_text = theme.main_text_color(theme.background());
|
||||
Hoverable::new(mouse_state, move |hover_state| {
|
||||
let check_icon: Box<dyn Element> = if is_selected {
|
||||
ConstrainedBox::new(WarpIcon::Check.to_galaxyui_icon(main_text).finish())
|
||||
ConstrainedBox::new(GalaxyIcon::Check.to_galaxyui_icon(main_text).finish())
|
||||
.with_width(ICON_SIZE)
|
||||
.with_height(ICON_SIZE)
|
||||
.finish()
|
||||
@@ -4759,7 +4758,7 @@ fn render_tab_item_mode_option(
|
||||
mouse_state: MouseStateHandle,
|
||||
value: VerticalTabsTabItemMode,
|
||||
appearance: &Appearance,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
const ICON_SIZE: f32 = 16.;
|
||||
const FONT_SIZE: f32 = 12.;
|
||||
@@ -4769,7 +4768,7 @@ fn render_tab_item_mode_option(
|
||||
let main_text = theme.main_text_color(theme.background());
|
||||
Hoverable::new(mouse_state, move |hover_state| {
|
||||
let check_icon: Box<dyn Element> = if is_selected {
|
||||
ConstrainedBox::new(WarpIcon::Check.to_galaxyui_icon(main_text).finish())
|
||||
ConstrainedBox::new(GalaxyIcon::Check.to_galaxyui_icon(main_text).finish())
|
||||
.with_width(ICON_SIZE)
|
||||
.with_height(ICON_SIZE)
|
||||
.finish()
|
||||
@@ -4812,7 +4811,7 @@ fn render_primary_info_option(
|
||||
mouse_state: MouseStateHandle,
|
||||
value: VerticalTabsPrimaryInfo,
|
||||
appearance: &Appearance,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
const ICON_SIZE: f32 = 16.;
|
||||
const FONT_SIZE: f32 = 12.;
|
||||
@@ -4822,7 +4821,7 @@ fn render_primary_info_option(
|
||||
let main_text = theme.main_text_color(theme.background());
|
||||
Hoverable::new(mouse_state, move |hover_state| {
|
||||
let check_icon: Box<dyn Element> = if is_selected {
|
||||
ConstrainedBox::new(WarpIcon::Check.to_galaxyui_icon(main_text).finish())
|
||||
ConstrainedBox::new(GalaxyIcon::Check.to_galaxyui_icon(main_text).finish())
|
||||
.with_width(ICON_SIZE)
|
||||
.with_height(ICON_SIZE)
|
||||
.finish()
|
||||
@@ -4871,7 +4870,7 @@ fn render_show_toggle_option(
|
||||
action: WorkspaceAction,
|
||||
info_tooltip: Option<ShowToggleInfoTooltip>,
|
||||
appearance: &Appearance,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
const ICON_SIZE: f32 = 16.;
|
||||
const FONT_SIZE: f32 = 12.;
|
||||
@@ -4889,7 +4888,7 @@ fn render_show_toggle_option(
|
||||
|
||||
Hoverable::new(mouse_state, move |hover_state| {
|
||||
let check_icon: Box<dyn Element> = if is_enabled {
|
||||
ConstrainedBox::new(WarpIcon::Check.to_galaxyui_icon(main_text).finish())
|
||||
ConstrainedBox::new(GalaxyIcon::Check.to_galaxyui_icon(main_text).finish())
|
||||
.with_width(ICON_SIZE)
|
||||
.with_height(ICON_SIZE)
|
||||
.finish()
|
||||
@@ -4959,12 +4958,12 @@ fn render_show_toggle_option(
|
||||
}
|
||||
|
||||
fn render_popup_segment(
|
||||
icon: WarpIcon,
|
||||
icon: GalaxyIcon,
|
||||
is_selected: bool,
|
||||
mouse_state: MouseStateHandle,
|
||||
mode: VerticalTabsViewMode,
|
||||
theme: &WarpTheme,
|
||||
icon_color: WarpThemeFill,
|
||||
theme: &GalaxyTheme,
|
||||
icon_color: GalaxyThemeFill,
|
||||
) -> Box<dyn Element> {
|
||||
Hoverable::new(mouse_state, move |hover_state| {
|
||||
let background = if is_selected {
|
||||
@@ -5002,7 +5001,7 @@ fn render_popup_text_segment(
|
||||
mouse_state: MouseStateHandle,
|
||||
granularity: VerticalTabsDisplayGranularity,
|
||||
appearance: &Appearance,
|
||||
theme: &WarpTheme,
|
||||
theme: &GalaxyTheme,
|
||||
) -> Box<dyn Element> {
|
||||
let label = label.to_string();
|
||||
let main_text = theme.main_text_color(theme.background());
|
||||
@@ -5170,25 +5169,25 @@ fn detail_sidecar_width_and_bounds(available_width: f32) -> (f32, PositionedElem
|
||||
}
|
||||
|
||||
struct DetailSidecarTextColors {
|
||||
main: WarpThemeFill,
|
||||
sub: WarpThemeFill,
|
||||
disabled: WarpThemeFill,
|
||||
main: GalaxyThemeFill,
|
||||
sub: GalaxyThemeFill,
|
||||
disabled: GalaxyThemeFill,
|
||||
}
|
||||
|
||||
fn detail_sidecar_background(theme: &WarpTheme) -> ColorU {
|
||||
fn detail_sidecar_background(theme: &GalaxyTheme) -> ColorU {
|
||||
theme
|
||||
.background()
|
||||
.blend(&internal_colors::fg_overlay_2(theme))
|
||||
.into_solid()
|
||||
}
|
||||
|
||||
fn detail_sidecar_border_fill(theme: &WarpTheme) -> ThemeFill {
|
||||
fn detail_sidecar_border_fill(theme: &GalaxyTheme) -> ThemeFill {
|
||||
theme
|
||||
.background()
|
||||
.blend(&internal_colors::fg_overlay_4(theme))
|
||||
}
|
||||
|
||||
fn detail_sidecar_text_colors(theme: &WarpTheme) -> DetailSidecarTextColors {
|
||||
fn detail_sidecar_text_colors(theme: &GalaxyTheme) -> DetailSidecarTextColors {
|
||||
let bg = ThemeFill::Solid(detail_sidecar_background(theme));
|
||||
DetailSidecarTextColors {
|
||||
main: theme.main_text_color(bg),
|
||||
@@ -5201,7 +5200,7 @@ fn render_detail_badge(
|
||||
label: impl Into<String>,
|
||||
icon: Option<Box<dyn Element>>,
|
||||
background: Option<ThemeFill>,
|
||||
text_color: WarpThemeFill,
|
||||
text_color: GalaxyThemeFill,
|
||||
appearance: &Appearance,
|
||||
) -> Box<dyn Element> {
|
||||
let mut content = Flex::row()
|
||||
@@ -5244,14 +5243,14 @@ fn render_detail_status_pill(
|
||||
.with_cross_axis_alignment(CrossAxisAlignment::Center)
|
||||
.with_spacing(4.)
|
||||
.with_child(
|
||||
ConstrainedBox::new(icon.to_galaxyui_icon(WarpThemeFill::Solid(color)).finish())
|
||||
ConstrainedBox::new(icon.to_galaxyui_icon(GalaxyThemeFill::Solid(color)).finish())
|
||||
.with_width(12.)
|
||||
.with_height(12.)
|
||||
.finish(),
|
||||
)
|
||||
.with_child(
|
||||
Text::new_inline(status.to_string(), appearance.ui_font_family(), 10.)
|
||||
.with_color(WarpThemeFill::Solid(color).into())
|
||||
.with_color(GalaxyThemeFill::Solid(color).into())
|
||||
.finish(),
|
||||
)
|
||||
.finish(),
|
||||
@@ -5265,7 +5264,7 @@ fn render_detail_status_pill(
|
||||
fn render_detail_wrapping_text(
|
||||
text: impl Into<String>,
|
||||
font_size: f32,
|
||||
color: WarpThemeFill,
|
||||
color: GalaxyThemeFill,
|
||||
style: Option<Properties>,
|
||||
appearance: &Appearance,
|
||||
) -> Box<dyn Element> {
|
||||
@@ -5280,7 +5279,7 @@ fn render_detail_wrapping_text(
|
||||
|
||||
fn render_terminal_detail_primary_line(
|
||||
primary_line: &TerminalPrimaryLineData,
|
||||
color: WarpThemeFill,
|
||||
color: GalaxyThemeFill,
|
||||
appearance: &Appearance,
|
||||
) -> Box<dyn Element> {
|
||||
let font_family = match primary_line {
|
||||
|
||||
@@ -20,7 +20,7 @@ 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::workspace::view::{NotebookSource, OpenGalaxyDriveObjectSettings, Workspace};
|
||||
use crate::BlocklistAIHistoryModel;
|
||||
|
||||
const TRANSCRIPT_PANEL_WIDTH: f32 = 280.0;
|
||||
@@ -101,7 +101,7 @@ impl Workspace {
|
||||
ConversationDetailsPanelEvent::OpenPlanNotebook { notebook_uid } => {
|
||||
me.open_notebook(
|
||||
&NotebookSource::Existing((*notebook_uid).into()),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
);
|
||||
|
||||
@@ -68,7 +68,7 @@ use crate::resource_center::Tip;
|
||||
use crate::terminal::cli_agent_sessions::CLIAgentSessionsModel;
|
||||
use crate::test_util::settings::initialize_settings_for_tests;
|
||||
use crate::undo_close::UndoCloseSettings;
|
||||
use crate::warp_managed_paths_watcher::WarpManagedPathsWatcher;
|
||||
use crate::galaxy_managed_paths_watcher::GalaxyManagedPathsWatcher;
|
||||
use crate::workflows::local_workflows::LocalWorkflows;
|
||||
use crate::{experiments, workspace, GlobalResourceHandlesProvider};
|
||||
use crate::{AgentNotificationsModel, ObjectActions};
|
||||
@@ -147,7 +147,7 @@ fn initialize_app(app: &mut App) {
|
||||
app.add_singleton_model(|_| DetectedRepositories::default());
|
||||
app.add_singleton_model(HomeDirectoryWatcher::new_for_test);
|
||||
app.add_singleton_model(DirectoryWatcher::new);
|
||||
app.add_singleton_model(WarpManagedPathsWatcher::new_for_testing);
|
||||
app.add_singleton_model(GalaxyManagedPathsWatcher::new_for_testing);
|
||||
app.add_singleton_model(FileMCPWatcher::new);
|
||||
app.add_singleton_model(|_| FileBasedMCPManager::default());
|
||||
|
||||
@@ -208,7 +208,7 @@ fn initialize_app(app: &mut App) {
|
||||
// binding descriptions eagerly, and `workspace:send_feedback`'s dynamic
|
||||
// label calls `is_feedback_skill_available`, which reads `SkillManager`.
|
||||
// Registered after `HomeDirectoryWatcher`, `DirectoryWatcher`,
|
||||
// `WarpManagedPathsWatcher`, `DetectedRepositories`, and `RepoMetadataModel`
|
||||
// `GalaxyManagedPathsWatcher`, `DetectedRepositories`, and `RepoMetadataModel`
|
||||
// because `SkillWatcher::new` subscribes to all of them.
|
||||
app.add_singleton_model(SkillManager::new);
|
||||
|
||||
@@ -1307,7 +1307,7 @@ fn test_notebook_pane_tracking() {
|
||||
owner: Owner::mock_current_user(),
|
||||
initial_folder_id: None,
|
||||
},
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
);
|
||||
@@ -1347,7 +1347,7 @@ fn test_notebook_pane_tracking() {
|
||||
// Re-opening the notebook should not create a new view.
|
||||
workspace.open_notebook(
|
||||
&NotebookSource::Existing(notebook_id),
|
||||
&OpenWarpDriveObjectSettings::default(),
|
||||
&OpenGalaxyDriveObjectSettings::default(),
|
||||
ctx,
|
||||
true,
|
||||
);
|
||||
@@ -1479,7 +1479,7 @@ fn test_open_or_toggle_warp_drive() {
|
||||
.tips_completed
|
||||
.as_ref(ctx)
|
||||
.features_used
|
||||
.contains(&Tip::Action(TipAction::OpenWarpDrive)),
|
||||
.contains(&Tip::Action(TipAction::OpenGalaxyDrive)),
|
||||
"Warp drive welcome tip should not be completed"
|
||||
);
|
||||
|
||||
@@ -1498,7 +1498,7 @@ fn test_open_or_toggle_warp_drive() {
|
||||
.tips_completed
|
||||
.as_ref(ctx)
|
||||
.features_used
|
||||
.contains(&Tip::Action(TipAction::OpenWarpDrive)),
|
||||
.contains(&Tip::Action(TipAction::OpenGalaxyDrive)),
|
||||
"Warp drive welcome tip should not be completed"
|
||||
);
|
||||
|
||||
@@ -1517,7 +1517,7 @@ fn test_open_or_toggle_warp_drive() {
|
||||
.tips_completed
|
||||
.as_ref(ctx)
|
||||
.features_used
|
||||
.contains(&Tip::Action(TipAction::OpenWarpDrive)),
|
||||
.contains(&Tip::Action(TipAction::OpenGalaxyDrive)),
|
||||
"Warp drive welcome tip should not be completed"
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user