Galaxy v1.0.0: Remove warp-channel-config, rebrand bins/icons/settings, remove teams from Drive

- Remove warp-channel-config dependency; all bin targets hardcode ChannelConfig inline
- Rename bin targets: galaxy-oss, galaxy-local, galaxy-stable, galaxy-dev, galaxy-preview
- Rename config dir from .galaxy-ai to .galaxy
- Add Galaxy app icon (512x512 rounded PNG + SVG logo)
- Replace settings gear icon with Stars (sparkle) icon
- Remove lightbulb/resource center button from header toolbar
- Add Galaxy logo SVG to Settings > About page
- Rename Galaxify -> Galaxyize across all UI strings
- Remove Create Team / Join Team sections from Galaxy Drive
- Fix missing => in OpenRichInput match arms
- Clean up unused imports and warnings
- Update Cargo.toml bundle metadata with Samsung branding
- Re-enable code review, project explorer, global search in settings
This commit is contained in:
Ryan Ward
2026-05-13 01:29:25 -05:00
parent ebafd9322d
commit 11152f2f40
41 changed files with 551 additions and 552 deletions
@@ -15,7 +15,6 @@ use crate::{
AIRequestUsageModel,
},
appearance::Appearance,
auth::{AuthManager, AuthStateProvider},
completer::SessionContext,
context_chips::{
self,
@@ -84,11 +83,10 @@ use tokio::fs;
use voice_input::{StartListeningError, VoiceSessionResult};
use galaxy_core::{
context_flag::ContextFlag,
report_if_error,
ui::{
color::{blend::Blend, contrast::MinimumAllowedContrast, ContrastingColor},
theme::{color::internal_colors, AnsiColorIdentifier, Fill},
theme::{color::internal_colors, Fill},
},
};
#[cfg(feature = "voice_input")]
@@ -127,9 +125,6 @@ const DISABLE_NLD_TOOLTIP: &str = "Disable terminal command autodetection";
const FAST_FORWARD_ON_TOOLTIP: &str = "Turn off auto-approve all agent actions";
const FAST_FORWARD_OFF_TOOLTIP: &str = "Auto-approve all agent actions for this task";
const START_REMOTE_CONTROL_TOOLTIP: &str = "Start remote control";
const START_REMOTE_CONTROL_LOGIN_REQUIRED_TOOLTIP: &str = "Log in to use /remote-control";
const CLOUD_MODE_V2_FOOTER_GAP: f32 = 4.;
/// Voice input state for the CLI agent footer. Unlike the editor-based voice
@@ -189,8 +184,6 @@ pub struct AgentInputFooter {
mic_button: ViewHandle<ActionButton>,
nld_button: ViewHandle<ActionButton>,
file_button: ViewHandle<ActionButton>,
start_remote_control_button: ViewHandle<ActionButton>,
stop_remote_control_button: ViewHandle<ActionButton>,
context_window_button: ViewHandle<ActionButton>,
model_selector: ViewHandle<ProfileModelSelector>,
ftu_callout_close_button: ViewHandle<ActionButton>,
@@ -547,29 +540,6 @@ impl AgentInputFooter {
},
);
let start_remote_control_button = ctx.add_typed_action_view(|_ctx| {
ActionButton::new("/remote-control", AgentInputButtonTheme)
.with_icon(Icon::Phone01)
.with_tooltip(START_REMOTE_CONTROL_TOOLTIP)
.with_size(cli_button_size)
.with_tooltip_alignment(TooltipAlignment::Left)
.on_click(|ctx| {
ctx.dispatch_typed_action(AgentInputFooterAction::StartRemoteControl);
})
});
let stop_remote_control_button = ctx.add_typed_action_view(|_ctx| {
ActionButton::new("Stop sharing", AgentInputButtonTheme)
.with_icon(Icon::StopFilled)
.with_icon_ansi_color(AnsiColorIdentifier::Red)
.with_tooltip("Stop sharing")
.with_size(cli_button_size)
.with_tooltip_alignment(TooltipAlignment::Left)
.on_click(|ctx| {
ctx.dispatch_typed_action(AgentInputFooterAction::StopRemoteControl);
})
});
let context_window_button = ctx.add_typed_action_view(|_ctx| {
ActionButton::new("", AgentInputButtonTheme)
.with_icon(Icon::ConversationContext0)
@@ -643,13 +613,6 @@ impl AgentInputFooter {
}
});
// Keep the remote-control chip in sync with login state so we can
// disable it and swap the tooltip when the user is anonymous or
// logged out.
ctx.subscribe_to_model(&AuthManager::handle(ctx), |me, _, _, ctx| {
me.sync_remote_control_button(ctx);
});
let prompt_for_session_settings = prompt.clone();
ctx.subscribe_to_model(
&SessionSettings::handle(ctx),
@@ -727,8 +690,6 @@ impl AgentInputFooter {
file_explorer_button,
rich_input_button,
settings_button,
start_remote_control_button,
stop_remote_control_button,
install_plugin_button,
plugin_instructions_button,
update_plugin_button,
@@ -762,7 +723,6 @@ impl AgentInputFooter {
v2_model_selector,
};
me.sync_fast_forward_button(ctx);
me.sync_remote_control_button(ctx);
me.update_context_window_button(ctx);
me.update_display_chips(&prompt, ctx);
me.update_ftu_callout_render_state(ctx);
@@ -1294,21 +1254,6 @@ impl AgentInputFooter {
#[cfg(not(feature = "voice_input"))]
None
}
AgentToolbarItemKind::ShareSession => {
let enabled = FeatureFlag::CreatingSharedSessions.is_enabled()
&& FeatureFlag::HOARemoteControl.is_enabled()
&& ContextFlag::CreateSharedSession.is_enabled();
if !enabled {
return None;
}
let button = if shared_status.is_sharer() {
&self.stop_remote_control_button
} else {
&self.start_remote_control_button
};
Some(ChildView::new(button).finish())
}
AgentToolbarItemKind::Settings => Some(ChildView::new(&self.settings_button).finish()),
// Handled by the available_in() guard above; included for exhaustiveness.
AgentToolbarItemKind::ModelSelector
@@ -1787,24 +1732,6 @@ impl AgentInputFooter {
});
}
/// Disable the start-remote-control chip and swap its tooltip when the
/// user is anonymous or logged out, since session sharing requires a
/// real account.
fn sync_remote_control_button(&self, ctx: &mut ViewContext<Self>) {
let login_required = AuthStateProvider::as_ref(ctx)
.get()
.is_anonymous_or_logged_out();
let tooltip = if login_required {
START_REMOTE_CONTROL_LOGIN_REQUIRED_TOOLTIP
} else {
START_REMOTE_CONTROL_TOOLTIP
};
self.start_remote_control_button.update(ctx, |button, ctx| {
button.set_disabled(login_required, ctx);
button.set_tooltip(Some(tooltip), ctx);
});
}
fn update_context_window_button(&mut self, ctx: &mut ViewContext<Self>) {
if let Some(conversation) =
BlocklistAIHistoryModel::as_ref(ctx).active_conversation(self.terminal_view_id)
@@ -1874,20 +1801,6 @@ impl AgentInputFooter {
.is_some();
has_conversation.then(|| ChildView::new(&self.context_window_button).finish())
}
AgentToolbarItemKind::ShareSession => {
let enabled = FeatureFlag::CreatingSharedSessions.is_enabled()
&& FeatureFlag::HOARemoteControl.is_enabled()
&& ContextFlag::CreateSharedSession.is_enabled();
if !enabled {
return None;
}
let button = if shared_status.is_sharer() {
&self.stop_remote_control_button
} else {
&self.start_remote_control_button
};
Some(ChildView::new(button).finish())
}
AgentToolbarItemKind::FastForwardToggle => FeatureFlag::FastForwardAutoexecuteButton
.is_enabled()
.then(|| ChildView::new(&self.fast_forward_button).finish()),
@@ -2144,8 +2057,6 @@ pub enum AgentInputFooterAction {
OpenPluginInstallInstructionsPane,
OpenPluginUpdateInstructionsPane,
DismissPluginChip,
StartRemoteControl,
StopRemoteControl,
OpenCodingAgentSettings,
ShowContextMenu {
position: Vector2F,
@@ -2330,12 +2241,6 @@ impl TypedActionView for AgentInputFooter {
}
ctx.notify();
}
AgentInputFooterAction::StartRemoteControl => {
ctx.emit(AgentInputFooterEvent::StartRemoteControl);
}
AgentInputFooterAction::StopRemoteControl => {
ctx.emit(AgentInputFooterEvent::StopRemoteControl);
}
AgentInputFooterAction::OpenCodingAgentSettings => {
#[cfg(not(target_family = "wasm"))]
ctx.dispatch_typed_action_deferred(WorkspaceAction::ScrollToSettingsWidget {
@@ -2361,8 +2266,6 @@ pub enum AgentInputFooterEvent {
InsertIntoCLIRichInput(String),
ToggleCodeReviewPane(CLIAgent),
ToggleFileExplorer(CLIAgent),
StartRemoteControl,
StopRemoteControl,
OpenRichInput,
HideRichInput,
ToggledChipMenu {
@@ -61,7 +61,6 @@ pub enum AgentToolbarItemKind {
// Renamed from ImageAttach; alias preserves existing user toolbar configs.
#[serde(alias = "ImageAttach")]
FileAttach,
ShareSession,
// CLI agent only opens settings to the Coding Agents section.
Settings,
@@ -73,7 +72,7 @@ pub enum AgentToolbarItemKind {
impl AgentToolbarItemKind {
pub fn available_in(&self) -> ToolbarAvailability {
match self {
Self::ContextChip(_) | Self::VoiceInput | Self::FileAttach | Self::ShareSession => {
Self::ContextChip(_) | Self::VoiceInput | Self::FileAttach => {
ToolbarAvailability::Both
}
Self::ModelSelector
@@ -95,7 +94,7 @@ impl AgentToolbarItemKind {
is_cloud_mode: bool,
) -> bool {
match self {
Self::Settings | Self::ShareSession | Self::FileExplorer => !status.is_viewer(),
Self::Settings | Self::FileExplorer => !status.is_viewer(),
Self::FileAttach => !status.is_viewer() || is_cloud_mode,
Self::FastForwardToggle => !status.is_viewer() || status.is_executor(),
Self::ContextChip(_)
@@ -117,7 +116,6 @@ impl AgentToolbarItemKind {
Self::ContextWindowUsage => "Context Usage",
Self::FileExplorer => "File Explorer",
Self::RichInput => "Rich Input",
Self::ShareSession => "/remote-control",
Self::Settings => "Settings",
Self::FastForwardToggle => "Fast Forward",
}
@@ -133,7 +131,6 @@ impl AgentToolbarItemKind {
Self::ContextWindowUsage => Some(Icon::ConversationContext0),
Self::FileExplorer => Some(Icon::FileCopy),
Self::RichInput => Some(Icon::TextInput),
Self::ShareSession => Some(Icon::Phone01),
Self::Settings => Some(Icon::Settings),
Self::FastForwardToggle => Some(Icon::FastForward),
}
@@ -172,11 +169,6 @@ impl AgentToolbarItemKind {
Self::ContextWindowUsage,
Self::ModelSelector,
];
if FeatureFlag::CreatingSharedSessions.is_enabled()
&& FeatureFlag::HOARemoteControl.is_enabled()
{
items.push(Self::ShareSession);
}
items.push(Self::VoiceInput);
items.push(Self::FileAttach);
items
@@ -198,11 +190,6 @@ impl AgentToolbarItemKind {
if FeatureFlag::FastForwardAutoexecuteButton.is_enabled() {
items.push(Self::FastForwardToggle);
}
if FeatureFlag::CreatingSharedSessions.is_enabled()
&& FeatureFlag::HOARemoteControl.is_enabled()
{
items.push(Self::ShareSession);
}
items
}
@@ -213,11 +200,6 @@ impl AgentToolbarItemKind {
Self::VoiceInput,
Self::ContextChip(ContextChipKind::GitDiffStats),
];
if FeatureFlag::CreatingSharedSessions.is_enabled()
&& FeatureFlag::HOARemoteControl.is_enabled()
{
items.push(Self::ShareSession);
}
items.push(Self::FileExplorer);
if FeatureFlag::CLIAgentRichInput.is_enabled() {
items.push(Self::RichInput);
@@ -247,11 +229,6 @@ impl AgentToolbarItemKind {
Self::VoiceInput,
Self::Settings,
]);
if FeatureFlag::CreatingSharedSessions.is_enabled()
&& FeatureFlag::HOARemoteControl.is_enabled()
{
items.push(Self::ShareSession);
}
items
}