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:
@@ -290,7 +290,7 @@ static DEFAULT_TIPS: LazyLock<Vec<AgentTip>> = LazyLock::new(|| {
|
||||
kind: AgentTipKind::Context,
|
||||
},
|
||||
AgentTip {
|
||||
description: "Galaxify a remote SSH session to enable the agent inside that environment.".to_string(),
|
||||
description: "Galaxyize a remote SSH session to enable the agent inside that environment.".to_string(),
|
||||
link: Some("https://docs.warp.dev/terminal/warpify".to_string()),
|
||||
binding_name: None,
|
||||
action: None,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -51,8 +51,8 @@ const SHOW_BOOTSTRAP_BLOCK_MENU_ITEM_NAME: &str = "Show Initialization Block";
|
||||
const HIDE_BOOTSTRAP_BLOCK_MENU_ITEM_NAME: &str = "Hide Initialization Block";
|
||||
const SHOW_IN_BAND_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Show In-band Command Blocks";
|
||||
const HIDE_IN_BAND_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Hide In-band Command Blocks";
|
||||
const SHOW_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Show Warpified SSH Blocks";
|
||||
const HIDE_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Hide Warpified SSH Blocks";
|
||||
const SHOW_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Show Enhanced SSH Blocks";
|
||||
const HIDE_SSH_COMMAND_BLOCKS_MENU_ITEM_NAME: &str = "Hide Enhanced SSH Blocks";
|
||||
const EXPORT_DEFAULT_SETTINGS_CSV_MENU_ITEM_NAME: &str =
|
||||
"Export Default Settings as CSV to home dir";
|
||||
|
||||
@@ -208,7 +208,7 @@ fn make_new_app_menu(ctx: &AppContext) -> Menu {
|
||||
menu_items.push(MenuItem::Standard(StandardAction::ShowAllApps));
|
||||
menu_items.push(MenuItem::Separator);
|
||||
menu_items.push(MenuItem::Custom(CustomMenuItem::new(
|
||||
"Set Warp as Default Terminal",
|
||||
"Set Galaxy as Default Terminal",
|
||||
move |ctx| {
|
||||
DefaultTerminal::handle(ctx).update(ctx, |default_terminal, ctx| {
|
||||
default_terminal.make_warp_default(ctx)
|
||||
@@ -299,7 +299,7 @@ fn make_new_edit_menu(ctx: &AppContext) -> Menu {
|
||||
];
|
||||
let group_5 = vec![
|
||||
MenuItem::Custom(CustomMenuItem::new(
|
||||
"Use Warp's Prompt",
|
||||
"Use Galaxy's Prompt",
|
||||
move |ctx| ctx.dispatch_global_action("app:toggle_user_ps1", &()),
|
||||
move |_props, ctx| MenuItemPropertyChanges {
|
||||
checked: Some(
|
||||
@@ -924,9 +924,9 @@ fn make_new_help_menu() -> Menu {
|
||||
"Help",
|
||||
vec![
|
||||
feedback_menu_item(),
|
||||
link_menu_item("Warp Documentation...", links::USER_DOCS_URL.into()),
|
||||
link_menu_item("Galaxy Documentation...", links::USER_DOCS_URL.into()),
|
||||
link_menu_item("GitHub Issues...", links::GITHUB_ISSUES_URL.into()),
|
||||
link_menu_item("Warp Slack Community...", links::SLACK_URL.into()),
|
||||
link_menu_item("Galaxy Slack Community...", links::SLACK_URL.into()),
|
||||
],
|
||||
)
|
||||
}
|
||||
|
||||
@@ -732,11 +732,11 @@ fn dmg_name(channel: Channel) -> String {
|
||||
|
||||
fn app_name_prefix(channel: Channel) -> &'static str {
|
||||
match channel {
|
||||
Channel::Stable => "GalaxyAI",
|
||||
Channel::Preview => "GalaxyAIPreview",
|
||||
Channel::Stable => "Galaxy",
|
||||
Channel::Preview => "GalaxyPreview",
|
||||
Channel::Local => "galaxy-ai",
|
||||
Channel::Integration => "integration",
|
||||
Channel::Dev => "GalaxyAIDev",
|
||||
Channel::Dev => "GalaxyDev",
|
||||
Channel::Oss => "galaxy-ai-oss",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,11 +254,11 @@ fn installer_file_name() -> Result<String> {
|
||||
|
||||
fn app_name_prefix(channel: Channel) -> &'static str {
|
||||
match channel {
|
||||
Channel::Stable => "GalaxyAI",
|
||||
Channel::Preview => "GalaxyAIPreview",
|
||||
Channel::Stable => "Galaxy",
|
||||
Channel::Preview => "GalaxyPreview",
|
||||
Channel::Local => "galaxy-ai",
|
||||
Channel::Integration => "integration",
|
||||
Channel::Dev => "GalaxyAIDev",
|
||||
Channel::Dev => "GalaxyDev",
|
||||
Channel::Oss => "galaxy-ai-oss",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
//! Tools for loading a [`ChannelConfig`] from the external config generator binary.
|
||||
//!
|
||||
//! For non-bundled builds, the generator is invoked at runtime. For bundled builds, the config
|
||||
//! is embedded at compile time via the build script.
|
||||
use galaxy_core::channel::ChannelConfig;
|
||||
|
||||
/// The name of the config generator binary, expected to be on PATH.
|
||||
const CONFIG_BIN_NAME: &str = "warp-channel-config";
|
||||
|
||||
#[macro_export]
|
||||
#[cfg(windows)]
|
||||
macro_rules! path_concat {
|
||||
($path:expr, $file:expr) => {
|
||||
concat!($path, "\\", $file)
|
||||
};
|
||||
}
|
||||
#[macro_export]
|
||||
#[cfg(not(windows))]
|
||||
macro_rules! path_concat {
|
||||
($path:expr, $file:expr) => {
|
||||
concat!($path, "/", $file)
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! load_config {
|
||||
($channel:expr) => {{
|
||||
#[cfg(feature = "release_bundle")]
|
||||
{
|
||||
channel_config::load_config_from_embedded(include_str!($crate::path_concat!(
|
||||
env!("OUT_DIR"),
|
||||
concat!($channel, "_config.json")
|
||||
)))
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "release_bundle"))]
|
||||
{
|
||||
channel_config::load_config_from_generator($channel)
|
||||
}
|
||||
}};
|
||||
}
|
||||
pub use load_config;
|
||||
|
||||
/// Invokes the config generator binary at runtime and deserializes its JSON output into a
|
||||
/// [`ChannelConfig`].
|
||||
#[cfg_attr(feature = "release_bundle", expect(dead_code))]
|
||||
pub fn load_config_from_generator(channel: &str) -> ChannelConfig {
|
||||
let target_family = if cfg!(target_family = "wasm") {
|
||||
"wasm"
|
||||
} else {
|
||||
"native"
|
||||
};
|
||||
|
||||
let target_os = if cfg!(target_os = "macos") {
|
||||
"macos"
|
||||
} else if cfg!(target_os = "windows") {
|
||||
"windows"
|
||||
} else {
|
||||
"linux"
|
||||
};
|
||||
|
||||
let output = command::blocking::Command::new(CONFIG_BIN_NAME)
|
||||
.arg("--channel")
|
||||
.arg(channel)
|
||||
.arg("--target-family")
|
||||
.arg(target_family)
|
||||
.arg("--target-os")
|
||||
.arg(target_os)
|
||||
.output()
|
||||
.unwrap_or_else(|err| {
|
||||
if err.kind() == std::io::ErrorKind::NotFound {
|
||||
panic!(
|
||||
"\n\n'{CONFIG_BIN_NAME}' was not found on PATH.\n\n\
|
||||
To build internal channels, run:\n\
|
||||
\n\
|
||||
\x20 ./script/install_channel_config\n\n"
|
||||
)
|
||||
}
|
||||
panic!("Failed to execute '{CONFIG_BIN_NAME}': {err}")
|
||||
});
|
||||
|
||||
if !output.status.success() {
|
||||
let stderr = String::from_utf8_lossy(&output.stderr);
|
||||
panic!("Config generator failed for channel '{channel}':\n{stderr}");
|
||||
}
|
||||
|
||||
serde_json::from_slice(&output.stdout).unwrap_or_else(|err| {
|
||||
let stdout = String::from_utf8_lossy(&output.stdout);
|
||||
panic!("Failed to parse config generator output for channel '{channel}': {err}\nOutput:\n{stdout}")
|
||||
})
|
||||
}
|
||||
|
||||
/// Deserializes a [`ChannelConfig`] from a JSON string embedded at compile time.
|
||||
///
|
||||
/// This is used to load the channel configuration in release bundles, where configuration
|
||||
/// is embedded at compile time instead of being generated at runtime.
|
||||
#[cfg_attr(not(feature = "release_bundle"), expect(dead_code))]
|
||||
pub fn load_config_from_embedded(json: &str) -> ChannelConfig {
|
||||
serde_json::from_str(json)
|
||||
.unwrap_or_else(|err| panic!("Failed to parse embedded channel config: {err}"))
|
||||
}
|
||||
+18
-10
@@ -2,22 +2,30 @@
|
||||
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
||||
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
||||
|
||||
#[path = "channel_config.rs"]
|
||||
mod channel_config;
|
||||
|
||||
use anyhow::Result;
|
||||
use galaxy_core::{
|
||||
channel::{Channel, ChannelState},
|
||||
features,
|
||||
channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig},
|
||||
features, AppId,
|
||||
};
|
||||
|
||||
// Simple wrapper around galaxy::run() for dev channel builds.
|
||||
fn main() -> Result<()> {
|
||||
ChannelState::set(
|
||||
ChannelState::new(Channel::Dev, channel_config::load_config!("dev"))
|
||||
.with_additional_features(features::DEBUG_FLAGS)
|
||||
.with_additional_features(features::DOGFOOD_FLAGS)
|
||||
.with_additional_features(features::PREVIEW_FLAGS),
|
||||
ChannelState::new(
|
||||
Channel::Dev,
|
||||
ChannelConfig {
|
||||
app_id: AppId::new("com", "samsung", "Galaxy-Dev"),
|
||||
logfile_name: "galaxy.log".into(),
|
||||
server_config: WarpServerConfig::production(),
|
||||
oz_config: OzConfig::production(),
|
||||
telemetry_config: None,
|
||||
crash_reporting_config: None,
|
||||
autoupdate_config: None,
|
||||
mcp_static_config: None,
|
||||
},
|
||||
)
|
||||
.with_additional_features(features::DEBUG_FLAGS)
|
||||
.with_additional_features(features::DOGFOOD_FLAGS)
|
||||
.with_additional_features(features::PREVIEW_FLAGS),
|
||||
);
|
||||
|
||||
galaxy::run()
|
||||
|
||||
+20
-13
@@ -1,19 +1,26 @@
|
||||
#[path = "channel_config.rs"]
|
||||
mod channel_config;
|
||||
|
||||
use anyhow::Result;
|
||||
use galaxy_core::{
|
||||
channel::{Channel, ChannelState},
|
||||
features,
|
||||
channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig},
|
||||
features, AppId,
|
||||
};
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let config = channel_config::load_config!("local");
|
||||
|
||||
let mut state = ChannelState::new(Channel::Local, config)
|
||||
.with_additional_features(features::DEBUG_FLAGS)
|
||||
.with_additional_features(features::DOGFOOD_FLAGS)
|
||||
.with_additional_features(features::PREVIEW_FLAGS);
|
||||
let mut state = ChannelState::new(
|
||||
Channel::Local,
|
||||
ChannelConfig {
|
||||
app_id: AppId::new("com", "samsung", "Galaxy-Local"),
|
||||
logfile_name: "galaxy.log".into(),
|
||||
server_config: WarpServerConfig::production(),
|
||||
oz_config: OzConfig::production(),
|
||||
telemetry_config: None,
|
||||
crash_reporting_config: None,
|
||||
autoupdate_config: None,
|
||||
mcp_static_config: None,
|
||||
},
|
||||
)
|
||||
.with_additional_features(features::DEBUG_FLAGS)
|
||||
.with_additional_features(features::DOGFOOD_FLAGS)
|
||||
.with_additional_features(features::PREVIEW_FLAGS);
|
||||
|
||||
// Enable sandbox telemetry feature flag if the env var is set.
|
||||
if std::env::var("WITH_SANDBOX_TELEMETRY").is_ok() {
|
||||
@@ -37,9 +44,9 @@ embed_plist::embed_info_plist_bytes!(r#"
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Galaxy</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>galaxy-ai</string>
|
||||
<string>galaxy-local</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.samsung.GalaxyAI-Local</string>
|
||||
<string>com.samsung.Galaxy-Local</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
|
||||
+4
-4
@@ -12,8 +12,8 @@ fn main() -> Result<()> {
|
||||
let mut state = ChannelState::new(
|
||||
Channel::Oss,
|
||||
ChannelConfig {
|
||||
app_id: AppId::new("com", "samsung", "GalaxyAI"),
|
||||
logfile_name: "galaxy-ai.log".into(),
|
||||
app_id: AppId::new("com", "samsung", "Galaxy"),
|
||||
logfile_name: "galaxy.log".into(),
|
||||
server_config: WarpServerConfig::production(),
|
||||
oz_config: OzConfig::production(),
|
||||
telemetry_config: None,
|
||||
@@ -41,9 +41,9 @@ embed_plist::embed_info_plist_bytes!(r#"
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Galaxy</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>galaxy-ai-oss</string>
|
||||
<string>galaxy-oss</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.samsung.GalaxyAI</string>
|
||||
<string>com.samsung.Galaxy</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
|
||||
+16
-9
@@ -2,21 +2,28 @@
|
||||
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
||||
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
||||
|
||||
#[path = "channel_config.rs"]
|
||||
mod channel_config;
|
||||
|
||||
use anyhow::Result;
|
||||
use galaxy_core::{
|
||||
channel::{Channel, ChannelState},
|
||||
features,
|
||||
channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig},
|
||||
features, AppId,
|
||||
};
|
||||
|
||||
// Simple wrapper around galaxy::run() for feature preview channel builds.
|
||||
fn main() -> Result<()> {
|
||||
ChannelState::set(
|
||||
ChannelState::new(Channel::Preview, channel_config::load_config!("preview"))
|
||||
.with_additional_features(features::PREVIEW_FLAGS)
|
||||
.with_additional_features(&[features::FeatureFlag::ForceLogin]),
|
||||
ChannelState::new(
|
||||
Channel::Preview,
|
||||
ChannelConfig {
|
||||
app_id: AppId::new("com", "samsung", "Galaxy-Preview"),
|
||||
logfile_name: "galaxy.log".into(),
|
||||
server_config: WarpServerConfig::production(),
|
||||
oz_config: OzConfig::production(),
|
||||
telemetry_config: None,
|
||||
crash_reporting_config: None,
|
||||
autoupdate_config: None,
|
||||
mcp_static_config: None,
|
||||
},
|
||||
)
|
||||
.with_additional_features(features::PREVIEW_FLAGS),
|
||||
);
|
||||
|
||||
galaxy::run()
|
||||
|
||||
+14
-6
@@ -2,17 +2,25 @@
|
||||
// builds. See https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute.
|
||||
#![cfg_attr(feature = "release_bundle", windows_subsystem = "windows")]
|
||||
|
||||
#[path = "channel_config.rs"]
|
||||
mod channel_config;
|
||||
|
||||
use anyhow::Result;
|
||||
use galaxy_core::channel::{Channel, ChannelState};
|
||||
use galaxy_core::{
|
||||
channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig},
|
||||
AppId,
|
||||
};
|
||||
|
||||
// Simple wrapper around galaxy::run() for stable channel builds.
|
||||
fn main() -> Result<()> {
|
||||
ChannelState::set(ChannelState::new(
|
||||
Channel::Stable,
|
||||
channel_config::load_config!("stable"),
|
||||
ChannelConfig {
|
||||
app_id: AppId::new("com", "samsung", "Galaxy"),
|
||||
logfile_name: "galaxy.log".into(),
|
||||
server_config: WarpServerConfig::production(),
|
||||
oz_config: OzConfig::production(),
|
||||
telemetry_config: None,
|
||||
crash_reporting_config: None,
|
||||
autoupdate_config: None,
|
||||
mcp_static_config: None,
|
||||
},
|
||||
));
|
||||
|
||||
galaxy::run()
|
||||
|
||||
+1
-12
@@ -654,18 +654,7 @@ impl DriveIndex {
|
||||
.map(|space| DriveIndexSection::Space(*space))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
if !user_workspaces.as_ref(ctx).has_teams() {
|
||||
if user_workspaces
|
||||
.as_ref(ctx)
|
||||
.total_teammates_in_joinable_teams()
|
||||
> 0
|
||||
{
|
||||
sections.insert(0, DriveIndexSection::JoinTeam);
|
||||
sections.insert(1, DriveIndexSection::CreateATeam);
|
||||
} else {
|
||||
sections.insert(0, DriveIndexSection::CreateATeam);
|
||||
}
|
||||
}
|
||||
// Team creation/joining removed — Galaxy operates without Warp's team API.
|
||||
|
||||
// Item UI state is attached by index, not by id, so this is re-initialized whenever there's any type of change
|
||||
let item_mouse_states = num_cloud_objects_per_space
|
||||
|
||||
@@ -378,15 +378,6 @@ pub const USAGE: StaticCommand = StaticCommand {
|
||||
argument: None,
|
||||
};
|
||||
|
||||
pub const REMOTE_CONTROL: StaticCommand = StaticCommand {
|
||||
name: "/remote-control",
|
||||
description: "Start remote control for this session",
|
||||
icon_path: "bundled/svg/phone-01.svg",
|
||||
availability: Availability::AI_ENABLED,
|
||||
auto_enter_ai_mode: false,
|
||||
argument: None,
|
||||
};
|
||||
|
||||
pub const COST: StaticCommand = StaticCommand {
|
||||
name: "/cost",
|
||||
description: "Toggle credit usage details",
|
||||
@@ -536,12 +527,6 @@ fn all_commands() -> Vec<StaticCommand> {
|
||||
commands.push(CREATE_DOCKER_SANDBOX);
|
||||
}
|
||||
|
||||
if FeatureFlag::CreatingSharedSessions.is_enabled()
|
||||
&& FeatureFlag::HOARemoteControl.is_enabled()
|
||||
{
|
||||
commands.push(REMOTE_CONTROL);
|
||||
}
|
||||
|
||||
if FeatureFlag::Changelog.is_enabled() {
|
||||
commands.push(CHANGELOG);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ use super::{
|
||||
SettingsSection,
|
||||
};
|
||||
use crate::{
|
||||
appearance::Appearance, channel::ChannelState, themes::theme::ColorScheme,
|
||||
appearance::Appearance, channel::ChannelState,
|
||||
workspace::WorkspaceAction,
|
||||
};
|
||||
use galaxyui::{
|
||||
@@ -66,11 +66,7 @@ impl SettingsWidget for AboutPageWidget {
|
||||
let theme = appearance.theme();
|
||||
let ui_builder = appearance.ui_builder();
|
||||
|
||||
let image_path = if theme.inferred_color_scheme() == ColorScheme::LightOnDark {
|
||||
"bundled/svg/bedrock.svg"
|
||||
} else {
|
||||
"bundled/svg/bedrock.svg"
|
||||
};
|
||||
let image_path = "bundled/svg/galaxy-logo.svg";
|
||||
|
||||
let version = ChannelState::app_version()
|
||||
.unwrap_or(concat!("v", env!("CARGO_PKG_VERSION")));
|
||||
|
||||
@@ -239,7 +239,7 @@ impl Display for SettingsSection {
|
||||
SettingsSection::Knowledge => write!(f, "Knowledge"),
|
||||
SettingsSection::ThirdPartyCLIAgents => write!(f, "Third party CLI agents"),
|
||||
SettingsSection::Bedrock => write!(f, "AWS Bedrock"),
|
||||
SettingsSection::Warpify => write!(f, "Galaxify"),
|
||||
SettingsSection::Warpify => write!(f, "Galaxyize"),
|
||||
SettingsSection::CodeIndexing => write!(f, "Indexing and projects"),
|
||||
SettingsSection::EditorAndCodeReview => write!(f, "Editor and Code Review"),
|
||||
_ => write!(f, "{self:?}"),
|
||||
@@ -318,7 +318,7 @@ impl FromStr for SettingsSection {
|
||||
"Features" => Ok(Self::Features),
|
||||
"Keyboard shortcuts" => Ok(Self::Keybindings),
|
||||
"Privacy" => Ok(Self::Privacy),
|
||||
"Warpify" | "Galaxify" => Ok(Self::Warpify),
|
||||
"Warpify" | "Galaxyize" => Ok(Self::Warpify),
|
||||
"WarpDrive" | "Warp Drive" | "Galaxy Drive" => Ok(Self::WarpDrive),
|
||||
// This page was called "Oz" at one point, keep for backward compatibility.
|
||||
"Oz" | "Warp Agent" | "Galaxy Agent" => Ok(Self::WarpAgent),
|
||||
|
||||
@@ -185,7 +185,7 @@ impl WarpifyPageView {
|
||||
{
|
||||
categories.push(
|
||||
Category::new("SSH", vec![Box::new(SSHWidget::default())])
|
||||
.with_subtitle("Galaxify your interactive SSH sessions."),
|
||||
.with_subtitle("Galaxyize your interactive SSH sessions."),
|
||||
);
|
||||
}
|
||||
PageType::new_categorized(categories, None)
|
||||
@@ -532,7 +532,7 @@ impl TitleWidget {
|
||||
fn render_top_of_page(&self, appearance: &Appearance, _app: &AppContext) -> Box<dyn Element> {
|
||||
let warpify_description = vec![
|
||||
FormattedTextFragment::plain_text(
|
||||
"Configure whether Galaxy attempts to \u{201c}Galaxify\u{201d} (add support for blocks, \
|
||||
"Configure whether Galaxy attempts to \u{201c}Galaxyize\u{201d} (add support for blocks, \
|
||||
input modes, etc) certain shells. ",
|
||||
),
|
||||
FormattedTextFragment::hyperlink(
|
||||
@@ -556,7 +556,7 @@ impl TitleWidget {
|
||||
.finish();
|
||||
|
||||
Flex::column()
|
||||
.with_child(render_page_title("Galaxify", HEADER_FONT_SIZE, appearance))
|
||||
.with_child(render_page_title("Galaxyize", HEADER_FONT_SIZE, appearance))
|
||||
.with_child(warpify_description)
|
||||
.finish()
|
||||
}
|
||||
@@ -682,7 +682,7 @@ impl SettingsWidget for SSHWidget {
|
||||
&WarpifySettings::as_ref(app).enable_ssh_warpification,
|
||||
move || {
|
||||
render_body_item::<WarpifyPageAction>(
|
||||
"Galaxify SSH Sessions".into(),
|
||||
"Galaxyize SSH Sessions".into(),
|
||||
None,
|
||||
LocalOnlyIconState::for_setting(
|
||||
EnableSshWarpification::storage_key(),
|
||||
|
||||
@@ -2201,10 +2201,6 @@ impl Input {
|
||||
AgentInputFooterEvent::OpenRichInput | AgentInputFooterEvent::HideRichInput => {
|
||||
ctx.emit(Event::Escape);
|
||||
}
|
||||
AgentInputFooterEvent::StartRemoteControl
|
||||
| AgentInputFooterEvent::StopRemoteControl => {
|
||||
// Handled by UseAgentToolbar's subscription, not here.
|
||||
}
|
||||
// WriteToPty, InsertIntoCLIRichInput, ToggleCodeReviewPane, and ToggleFileExplorer
|
||||
// are handled by UseAgentToolbar's subscription, not here.
|
||||
AgentInputFooterEvent::WriteToPty(_)
|
||||
|
||||
@@ -674,23 +674,6 @@ impl Input {
|
||||
_usage if command.name == commands::USAGE.name => {
|
||||
ctx.dispatch_typed_action(&TerminalAction::OpenBillingAndUsagePane);
|
||||
}
|
||||
_remote_control if command.name == commands::REMOTE_CONTROL.name => {
|
||||
if !FeatureFlag::CreatingSharedSessions.is_enabled()
|
||||
|| !FeatureFlag::HOARemoteControl.is_enabled()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if self
|
||||
.model
|
||||
.lock()
|
||||
.shared_session_status()
|
||||
.is_sharer_or_viewer()
|
||||
{
|
||||
show_error_toast("Session is already being shared".to_owned(), ctx);
|
||||
return true;
|
||||
}
|
||||
ctx.emit(Event::StartRemoteControl);
|
||||
}
|
||||
_cost if command.name == commands::COST.name => {
|
||||
let history = BlocklistAIHistoryModel::handle(ctx);
|
||||
let conversation = history
|
||||
|
||||
@@ -35,7 +35,7 @@ const UNSUPPORTED_TMUX_VERSION_ERROR: &str =
|
||||
"The tmux version available on the remote machine is below 3.0. Please install tmux 3.0 or greater using a different method and try again.";
|
||||
const TMUX_FAILED_ERROR: &str =
|
||||
"tmux failed to execute on the remote machine. Please re-install tmux and try again.";
|
||||
const WARPIFY_TIMEOUT_ERROR: &str = "Galaxifying the session hit a timeout.";
|
||||
const WARPIFY_TIMEOUT_ERROR: &str = "Galaxyizeing the session hit a timeout.";
|
||||
const UNSUPPORTED_SHELL_ERROR: &str =
|
||||
"Unsupported shell. Please set bash, zsh, or fish as your default shell and try again.";
|
||||
const TMUX_INSTALL_FAILED_ERROR: &str =
|
||||
@@ -258,7 +258,7 @@ impl View for SshErrorBlock {
|
||||
ButtonVariant::Accent,
|
||||
self.warpify_without_tmux_button_mouse_state.clone(),
|
||||
)
|
||||
.with_centered_text_label("Galaxify without TMUX".into())
|
||||
.with_centered_text_label("Galaxyize without TMUX".into())
|
||||
.with_style(UiComponentStyles {
|
||||
font_size: Some(appearance.monospace_font_size()),
|
||||
..Default::default()
|
||||
|
||||
@@ -67,7 +67,7 @@ impl Entity for SshWarpifyBlock {
|
||||
impl SshWarpifyBlock {
|
||||
fn render_title_ui(&self, theme: &WarpTheme, appearance: &Appearance) -> Box<dyn Element> {
|
||||
let icon = Icon::new(UiIcon::Warp.into(), theme.active_ui_detail());
|
||||
warpify::render::header_row("Galaxifying SSH Session...", icon, theme, appearance)
|
||||
warpify::render::header_row("Galaxyizeing SSH Session...", icon, theme, appearance)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -97,8 +97,8 @@ impl WarpifyBannerState {
|
||||
|
||||
pub fn title(&self) -> &str {
|
||||
match &self.mode {
|
||||
WarpificationMode::Ssh { .. } => "Galaxify SSH session",
|
||||
WarpificationMode::Subshell { .. } => "Galaxify subshell",
|
||||
WarpificationMode::Ssh { .. } => "Galaxyize SSH session",
|
||||
WarpificationMode::Subshell { .. } => "Galaxyize subshell",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -341,7 +341,7 @@ pub fn init(app: &mut AppContext) {
|
||||
),
|
||||
EditableBinding::new(
|
||||
"terminal:warpify_subshell",
|
||||
"Galaxify subshell",
|
||||
"Galaxyize subshell",
|
||||
TerminalAction::TriggerSubshellBootstrap,
|
||||
)
|
||||
.with_key_binding("ctrl-i")
|
||||
@@ -350,7 +350,7 @@ pub fn init(app: &mut AppContext) {
|
||||
),
|
||||
EditableBinding::new(
|
||||
"terminal:warpify_ssh_session",
|
||||
"Galaxify ssh session",
|
||||
"Galaxyize ssh session",
|
||||
TerminalAction::WarpifySSHSession,
|
||||
)
|
||||
.with_key_binding("ctrl-i")
|
||||
|
||||
@@ -9,9 +9,7 @@ use crate::ai::blocklist::agent_view::agent_input_footer::{
|
||||
AgentInputFooter, AgentInputFooterEvent,
|
||||
};
|
||||
use crate::terminal::cli_agent_sessions::{CLIAgentInputEntrypoint, CLIAgentSessionsModel};
|
||||
use crate::terminal::shared_session::{SharedSessionActionSource, SharedSessionScrollbackType};
|
||||
use base64::Engine;
|
||||
use session_sharing_protocol::sharer::SessionSourceType;
|
||||
use galaxyui::clipboard::{ClipboardContent, ImageData};
|
||||
mod warpify_footer;
|
||||
|
||||
@@ -231,21 +229,6 @@ impl TerminalView {
|
||||
UseAgentToolbarEvent::ToggleFileExplorer(cli_agent) => {
|
||||
self.toggle_file_tree(Some((*cli_agent).into()), ctx);
|
||||
}
|
||||
UseAgentToolbarEvent::StartRemoteControl { scrollback_type } => {
|
||||
self.auto_stop_sharing_on_cli_end =
|
||||
*scrollback_type == SharedSessionScrollbackType::None;
|
||||
self.attempt_to_share_session(
|
||||
*scrollback_type,
|
||||
Some(SharedSessionActionSource::FooterChip),
|
||||
SessionSourceType::default(),
|
||||
true,
|
||||
ctx,
|
||||
);
|
||||
}
|
||||
UseAgentToolbarEvent::StopRemoteControl => {
|
||||
self.auto_stop_sharing_on_cli_end = false;
|
||||
self.stop_sharing_session(SharedSessionActionSource::FooterChip, ctx);
|
||||
}
|
||||
UseAgentToolbarEvent::OpenRichInput => {
|
||||
if self.has_active_cli_agent_input_session(ctx) {
|
||||
self.close_cli_agent_rich_input_and_disable_auto_toggle(ctx);
|
||||
@@ -1074,17 +1057,6 @@ impl UseAgentToolbar {
|
||||
AgentInputFooterEvent::ToggleFileExplorer(agent) => {
|
||||
ctx.emit(UseAgentToolbarEvent::ToggleFileExplorer(*agent));
|
||||
}
|
||||
AgentInputFooterEvent::StartRemoteControl => {
|
||||
let scrollback_type = if self.cli_agent(ctx).is_some() {
|
||||
SharedSessionScrollbackType::None
|
||||
} else {
|
||||
SharedSessionScrollbackType::All
|
||||
};
|
||||
ctx.emit(UseAgentToolbarEvent::StartRemoteControl { scrollback_type });
|
||||
}
|
||||
AgentInputFooterEvent::StopRemoteControl => {
|
||||
ctx.emit(UseAgentToolbarEvent::StopRemoteControl);
|
||||
}
|
||||
AgentInputFooterEvent::OpenRichInput => {
|
||||
ctx.emit(UseAgentToolbarEvent::OpenRichInput);
|
||||
}
|
||||
@@ -1182,12 +1154,6 @@ pub enum UseAgentToolbarEvent {
|
||||
ToggleCodeReviewPane(CLIAgent),
|
||||
/// Toggle the file explorer (from CLI agent view).
|
||||
ToggleFileExplorer(CLIAgent),
|
||||
/// Start remote control (one-click share without modal).
|
||||
StartRemoteControl {
|
||||
scrollback_type: SharedSessionScrollbackType,
|
||||
},
|
||||
/// Stop remote control (stop the active shared session).
|
||||
StopRemoteControl,
|
||||
/// Open the rich input editor for composing a prompt.
|
||||
OpenRichInput,
|
||||
/// Hide the rich input editor (same as Escape).
|
||||
|
||||
@@ -33,7 +33,7 @@ impl WarpifyFooterView {
|
||||
let button_size = ButtonSize::XSmall;
|
||||
|
||||
let warpify_button = ctx.add_typed_action_view(|_ctx| {
|
||||
ActionButton::new("Galaxify subshell", AgentFooterButtonTheme::new(None))
|
||||
ActionButton::new("Galaxyize subshell", AgentFooterButtonTheme::new(None))
|
||||
.with_icon(Icon::Warp)
|
||||
.with_size(button_size)
|
||||
.with_tooltip("Enable Galaxy shell integration in this session")
|
||||
@@ -76,9 +76,9 @@ impl WarpifyFooterView {
|
||||
pub fn set_mode(&mut self, mode: WarpificationMode, ctx: &mut ViewContext<Self>) {
|
||||
let (label, binding_name) = match mode {
|
||||
WarpificationMode::Ssh { .. } => {
|
||||
("Galaxify SSH session", "terminal:warpify_ssh_session")
|
||||
("Galaxyize SSH session", "terminal:warpify_ssh_session")
|
||||
}
|
||||
WarpificationMode::Subshell { .. } => ("Galaxify subshell", "terminal:warpify_subshell"),
|
||||
WarpificationMode::Subshell { .. } => ("Galaxyize subshell", "terminal:warpify_subshell"),
|
||||
};
|
||||
self.warpify_button.update(ctx, |button, ctx| {
|
||||
button.set_label(label, ctx);
|
||||
|
||||
@@ -17327,37 +17327,11 @@ impl Workspace {
|
||||
);
|
||||
}
|
||||
|
||||
if FeatureFlag::AvatarInTabBar.is_enabled() {
|
||||
let resource_center_closed = !self.current_workspace_state.is_resource_center_open;
|
||||
if resource_center_closed && ContextFlag::WarpEssentials.is_enabled() {
|
||||
target.add_child(
|
||||
Container::new(self.render_resource_center_button(appearance, ctx))
|
||||
.with_margin_left(TAB_BAR_PADDING_LEFT)
|
||||
.finish(),
|
||||
);
|
||||
}
|
||||
|
||||
target.add_child(
|
||||
Container::new(self.render_settings_button(appearance))
|
||||
.with_margin_left(TAB_BAR_PADDING_LEFT)
|
||||
.finish(),
|
||||
);
|
||||
} else {
|
||||
let resource_center_closed = !self.current_workspace_state.is_resource_center_open;
|
||||
if resource_center_closed && ContextFlag::WarpEssentials.is_enabled() {
|
||||
target.add_child(
|
||||
Container::new(self.render_resource_center_button(appearance, ctx))
|
||||
.with_margin_left(TAB_BAR_PADDING_LEFT)
|
||||
.finish(),
|
||||
);
|
||||
}
|
||||
|
||||
target.add_child(
|
||||
Container::new(self.render_settings_button(appearance))
|
||||
.with_margin_left(TAB_BAR_PADDING_LEFT)
|
||||
.finish(),
|
||||
);
|
||||
}
|
||||
target.add_child(
|
||||
Container::new(self.render_settings_button(appearance))
|
||||
.with_margin_left(TAB_BAR_PADDING_LEFT)
|
||||
.finish(),
|
||||
);
|
||||
|
||||
if self.auth_state.is_anonymous_or_logged_out()
|
||||
&& !FeatureFlag::OpenWarpNewSettingsModes.is_enabled()
|
||||
@@ -17798,7 +17772,7 @@ impl Workspace {
|
||||
Align::new(
|
||||
self.render_tab_bar_icon_button(
|
||||
appearance,
|
||||
icons::Icon::Gear,
|
||||
icons::Icon::Stars,
|
||||
&self.mouse_states.settings_icon,
|
||||
WorkspaceAction::ShowSettings,
|
||||
"Settings".to_string(),
|
||||
|
||||
Reference in New Issue
Block a user