Settings cleanup: remove Cloud Platform, Teams, Shared Blocks, Referrals from nav; disable autoupdate; stub Oz settings; rename Warpify to Galaxify

This commit is contained in:
Ryan Ward
2026-05-12 08:42:54 -05:00
parent 140da74f99
commit 2c651f2085
12 changed files with 62 additions and 182 deletions
@@ -208,17 +208,7 @@ impl AgentViewZeroStateBlock {
}
}
});
ctx.subscribe_to_model(&AISettings::handle(ctx), |me, _, event, ctx| {
let should_rerender_for_oz_updates_visibility = !me.origin.is_cloud_agent()
&& matches!(
event,
AISettingsChangedEvent::ShouldShowOzUpdatesInZeroState { .. }
)
&& FeatureFlag::OzChangelogUpdates.is_enabled()
&& !ChangelogModel::as_ref(ctx).oz_updates.is_empty();
if should_rerender_for_oz_updates_visibility {
ctx.notify();
}
ctx.subscribe_to_model(&AISettings::handle(ctx), |_me, _, _event, _ctx| {
});
let mut state_handles = StateHandles::default();
@@ -253,8 +243,7 @@ impl AgentViewZeroStateBlock {
should_show_init_callout,
has_parent_terminal,
state_handles,
is_oz_updates_expanded: !origin.is_cloud_agent()
&& *AISettings::handle(ctx).as_ref(ctx).should_expand_oz_updates,
is_oz_updates_expanded: false,
}
}
@@ -384,9 +373,9 @@ impl View for AgentViewZeroStateBlock {
let header_props = if self.origin.is_cloud_agent() {
HeaderProps {
title: "New Oz cloud agent conversation".into(),
title: "New Galaxy agent conversation".into(),
description: AgentViewDescription::CloudModeWithDocsLink,
icon: Icon::OzCloud,
icon: Icon::Warp,
}
} else {
let mut local_description =
@@ -400,9 +389,9 @@ impl View for AgentViewZeroStateBlock {
}
HeaderProps {
title: "New Oz agent conversation".into(),
title: "New Galaxy agent conversation".into(),
description: AgentViewDescription::PlainText(vec![local_description.into()]),
icon: Icon::Oz,
icon: Icon::Warp,
}
};
@@ -410,21 +399,6 @@ impl View for AgentViewZeroStateBlock {
.with_main_axis_size(MainAxisSize::Min)
.with_children(render_title_and_description(header_props, app));
if !self.origin.is_cloud_agent() {
if let Some(oz_updates_section) = render_oz_updates(
OzUpdatesProps {
is_expanded: self.is_oz_updates_expanded,
state_handles: &self.state_handles,
},
app,
) {
content.add_children([Container::new(oz_updates_section)
.with_margin_top(8.)
.with_margin_bottom(16.)
.finish()]);
}
}
let active_session = self.active_session(app);
let body = render_body(
ZeroStateBodyProps {
@@ -492,16 +466,7 @@ impl TypedActionView for AgentViewZeroStateBlock {
AgentViewZeroStateAction::ClickedInitCallout => {
ctx.emit(AgentViewZeroStateEvent::ClickedInitCallout);
}
AgentViewZeroStateAction::ToggleOzUpdates => {
let is_expanded = self.is_oz_updates_expanded;
self.is_oz_updates_expanded = !is_expanded;
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.should_expand_oz_updates
.set_value(!is_expanded, ctx));
});
}
AgentViewZeroStateAction::ToggleOzUpdates => {}
AgentViewZeroStateAction::OpenConversation { conversation_id } => {
ctx.emit(AgentViewZeroStateEvent::OpenConversation {
conversation_id: *conversation_id,
@@ -965,9 +930,7 @@ fn should_render_oz_updates_section(
fn render_oz_updates(props: OzUpdatesProps<'_>, app: &AppContext) -> Option<Box<dyn Element>> {
let changelog_model = ChangelogModel::as_ref(app);
let should_show_oz_updates = *AISettings::as_ref(app)
.should_show_oz_updates_in_zero_state
.value();
let should_show_oz_updates = false;
if !should_render_oz_updates_section(
FeatureFlag::OzChangelogUpdates.is_enabled(),
should_show_oz_updates,
+1 -1
View File
@@ -151,7 +151,7 @@ impl ComputerUsePermission {
let autonomy_setting = UserWorkspaces::as_ref(ctx)
.ai_autonomy_settings()
.computer_use_setting;
let user_preference = *AISettings::as_ref(ctx).cloud_agent_computer_use_enabled;
let user_preference = false;
match autonomy_setting {
Some(ComputerUsePermission::Never) => CloudAgentComputerUseState {
+1 -16
View File
@@ -139,22 +139,7 @@ impl AutoupdateState {
/// Check if there are any requests in the queue. Return the next one, but only if there isn't
/// already a request in-flight.
fn get_next_request(&mut self, ctx: &mut ModelContext<Self>) -> Option<RequestType> {
if !self.should_start_update_check() {
return None;
}
while let Some(request) = self.request_queue.pop_front() {
match request {
RequestType::ManualCheck => return Some(request),
RequestType::Poll | RequestType::DailyCheck => {
if AppExecutionMode::as_ref(ctx).can_autoupdate() {
return Some(request);
}
}
}
}
fn get_next_request(&mut self, _ctx: &mut ModelContext<Self>) -> Option<RequestType> {
None
}
+1 -1
View File
@@ -2542,7 +2542,7 @@ impl PaneGroup {
if let Some(pane) = self.focused_pane_content(ctx) {
pane.focus(ctx);
}
ctx.emit(Event::OpenSettings(SettingsSection::Teams));
ctx.emit(Event::OpenSettings(SettingsSection::Appearance));
ctx.notify();
send_telemetry_from_ctx!(TelemetryEvent::SharedSessionModalUpgradePressed, ctx);
+6 -29
View File
@@ -42,8 +42,7 @@ use crate::settings::QuakeModeSettings;
use crate::settings::ThemeSettings;
use crate::settings_view::flags;
use crate::settings_view::mcp_servers_page::MCPServersSettingsPage;
use crate::settings_view::OpenTeamsSettingsModalArgs;
use crate::settings_view::SettingsSection;
use crate::settings_view::{OpenTeamsSettingsModalArgs, SettingsSection};
use crate::terminal::available_shells::AvailableShell;
use crate::terminal::general_settings::GeneralSettings;
use crate::terminal::keys_settings::KeysSettings;
@@ -1042,23 +1041,9 @@ fn create_environment_and_run(arg: &CreateEnvironmentArg, ctx: &mut AppContext)
ctx.windows().show_window_and_focus_app(window_id);
}
fn open_team_settings_with_email_invite_in_new_window(
arg: &OpenTeamsSettingsModalArgs,
ctx: &mut AppContext,
_arg: &OpenTeamsSettingsModalArgs,
_ctx: &mut AppContext,
) {
let root_handle = open_new_window_get_handles(None, ctx).1;
root_handle.update(ctx, |root_view, ctx| {
if let AuthOnboardingState::Terminal(workspace_view_handle) =
&root_view.auth_onboarding_state
{
let initial_load_complete = UpdateManager::as_ref(ctx).initial_load_complete();
let email_invite = arg.invite_email.clone();
workspace_view_handle.update(ctx, |_, ctx| {
let _ = ctx.spawn(initial_load_complete, move |workspace, _, ctx| {
workspace.show_team_settings_page_with_email_invite(email_invite.as_ref(), ctx)
});
});
}
});
}
fn open_settings_page_in_new_window(section: &SettingsSection, ctx: &mut AppContext) {
@@ -2584,17 +2569,9 @@ impl RootView {
pub fn open_team_settings_with_email_invite_in_existing_window(
&mut self,
arg: &OpenTeamsSettingsModalArgs,
ctx: &mut ViewContext<Self>,
_arg: &OpenTeamsSettingsModalArgs,
_ctx: &mut ViewContext<Self>,
) -> bool {
if let AuthOnboardingState::Terminal(handle) = &self.auth_onboarding_state {
handle.update(ctx, |workspace, ctx| {
workspace.show_team_settings_page_with_email_invite(arg.invite_email.as_ref(), ctx)
});
return true;
} else {
log::warn!("Auth not complete before trying to open settings pane");
}
false
}
@@ -2883,7 +2860,7 @@ impl RootView {
ctx.dispatch_typed_action_for_view(
window_id,
handle.id(),
&WorkspaceAction::ShowSettingsPage(SettingsSection::Teams),
&WorkspaceAction::ShowSettingsPage(SettingsSection::Appearance),
);
ctx.windows().show_window_and_focus_app(window_id);
} else {
+1 -49
View File
@@ -1284,27 +1284,7 @@ define_settings_group!(AISettings, settings: [
private: true,
}
// Used to determine whether the "What's new in Oz" section of the agent view
// zero state is expanded or collapsed by default.
should_expand_oz_updates: ShouldExpandOzUpdates {
type: bool,
default: false,
supported_platforms: SupportedPlatforms::ALL,
sync_to_cloud: SyncToCloud::Never,
private: true,
}
// Used to determine whether the "What's new in Oz" section of the agent view
// zero state is shown or hidden.
should_show_oz_updates_in_zero_state: ShouldShowOzUpdatesInZeroState {
type: bool,
default: true,
supported_platforms: SupportedPlatforms::ALL,
sync_to_cloud: SyncToCloud::Globally(RespectUserSyncSetting::Yes),
private: false,
toml_path: "agents.warp_agent.other.should_show_oz_updates_in_zero_state",
description: "Whether the \"What's new\" section is shown in the agent view.",
}
// Whether or not the user has enabled the ability to use Warp credits even when providing
// their own LLM provider API key.
@@ -1459,32 +1439,6 @@ define_settings_group!(AISettings, settings: [
toml_path: "general.default_tab_config_path",
}
// Whether computer use is enabled for cloud agent conversations started from the Warp app.
// This setting is only used when the AI autonomy setting is AlwaysAsk or not set.
cloud_agent_computer_use_enabled: CloudAgentComputerUseEnabled {
type: bool,
default: galaxy_core::channel::ChannelState::channel().is_dogfood(),
supported_platforms: SupportedPlatforms::DESKTOP,
sync_to_cloud: SyncToCloud::Globally(RespectUserSyncSetting::Yes),
private: false,
toml_path: "agents.warp_agent.other.cloud_agent_computer_use_enabled",
description: "Whether computer use is enabled for cloud agent conversations.",
}
// Whether multi-agent orchestration is enabled. When enabled, the agent can
// spawn and coordinate parallel sub-agents via StartAgent / SendMessageToAgent
// tools. This setting is only effective when FeatureFlag::Orchestration is also
// enabled.
orchestration_enabled: OrchestrationEnabled {
type: bool,
default: true,
supported_platforms: SupportedPlatforms::DESKTOP,
sync_to_cloud: SyncToCloud::Globally(RespectUserSyncSetting::Yes),
private: false,
toml_path: "agents.warp_agent.other.orchestration_enabled",
description: "Whether multi-agent orchestration is enabled.",
feature_flag: FeatureFlag::Orchestration,
}
// Whether file-based MCP servers from third-party AI tools (e.g. Claude, Codex) should
// be automatically detected and spawned. Warp-native config files (.warp-core/.mcp.json) are
@@ -1751,9 +1705,7 @@ impl AISettings {
}
pub fn is_orchestration_enabled(&self, app: &galaxyui::AppContext) -> bool {
FeatureFlag::Orchestration.is_enabled()
&& self.is_any_ai_enabled(app)
&& *self.orchestration_enabled
FeatureFlag::Orchestration.is_enabled() && self.is_any_ai_enabled(app)
}
/// Determines whether a quota reset banner should be displayed to the user.
+1 -1
View File
@@ -5824,7 +5824,7 @@ impl SettingsWidget for AgentAttributionWidget {
)
.with_child(toggle_row)
.with_child(render_ai_setting_description(
"Oz can add attribution to commit messages and pull requests it creates",
"Galaxy can add attribution to commit messages and pull requests it creates",
!state.is_disabled,
app,
))
+24 -1
View File
@@ -95,6 +95,7 @@ mod privacy;
mod privacy_page;
mod settings_file_footer;
pub(crate) mod settings_page;
mod show_blocks_view;
mod tab_menu;
mod teams_page;
mod telemetry;
@@ -211,6 +212,17 @@ pub enum SettingsSection {
// ── Code umbrella subpages ──
CodeIndexing,
EditorAndCodeReview,
// Dead variants — pages removed from nav but files still reference these
#[allow(dead_code)]
CloudEnvironments,
#[allow(dead_code)]
OzCloudAPIKeys,
#[allow(dead_code)]
Teams,
#[allow(dead_code)]
SharedBlocks,
#[allow(dead_code)]
Referrals,
}
use crate::util::bindings::custom_tag_to_keystroke;
@@ -229,6 +241,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::CodeIndexing => write!(f, "Indexing and projects"),
SettingsSection::EditorAndCodeReview => write!(f, "Editor and Code Review"),
_ => write!(f, "{self:?}"),
@@ -307,7 +320,7 @@ impl FromStr for SettingsSection {
"Features" => Ok(Self::Features),
"Keyboard shortcuts" => Ok(Self::Keybindings),
"Privacy" => Ok(Self::Privacy),
"Warpify" => Ok(Self::Warpify),
"Warpify" | "Galaxify" => 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),
@@ -318,6 +331,11 @@ impl FromStr for SettingsSection {
"AWS Bedrock" | "Bedrock" => Ok(Self::Bedrock),
"Indexing and projects" | "CodeIndexing" => Ok(Self::CodeIndexing),
"Editor and Code Review" | "EditorAndCodeReview" => Ok(Self::EditorAndCodeReview),
"CloudEnvironments" | "Environments" => Ok(Self::CloudEnvironments),
"OzCloudAPIKeys" => Ok(Self::OzCloudAPIKeys),
"Teams" => Ok(Self::Teams),
"SharedBlocks" | "Shared Blocks" => Ok(Self::SharedBlocks),
"Referrals" => Ok(Self::Referrals),
_ => Err(()),
}
}
@@ -938,6 +956,10 @@ macro_rules! update_page {
SettingsPageViewHandle::BillingAndUsage(handle) => $ctx.update_view(handle, $update),
SettingsPageViewHandle::MCPServers(handle) => $ctx.update_view(handle, $update),
SettingsPageViewHandle::WarpDrive(handle) => $ctx.update_view(handle, $update),
SettingsPageViewHandle::CloudEnvironments(handle) => $ctx.update_view(handle, $update),
SettingsPageViewHandle::OzCloudAPIKeys(handle) => $ctx.update_view(handle, $update),
SettingsPageViewHandle::Teams(handle) => $ctx.update_view(handle, $update),
SettingsPageViewHandle::SharedBlocks(handle) => $ctx.update_view(handle, $update),
}
};
}
@@ -1826,6 +1848,7 @@ impl SettingsView {
SettingsPageViewHandle::MCPServers(v) => v.as_ref(app).should_render(app),
SettingsPageViewHandle::Code(v) => v.as_ref(app).should_render(app),
SettingsPageViewHandle::WarpDrive(v) => v.as_ref(app).should_render(app),
_ => true,
}
}
+10
View File
@@ -11,11 +11,13 @@ use super::{
appearance_page::AppearanceSettingsPageView,
billing_and_usage_page::BillingAndUsagePageView,
code_page::CodeSettingsPageView,
environments_page::EnvironmentsPageView,
features_page::FeaturesPageView,
keybindings::KeybindingsView,
main_page::MainSettingsPageView,
mcp_servers_page::MCPServersSettingsPageView,
privacy_page::PrivacyPageView,
show_blocks_view::ShowBlocksView,
warp_drive_page::WarpDriveSettingsPageView,
warpify_page::WarpifyPageView,
SettingsSection,
@@ -111,6 +113,10 @@ pub enum SettingsPageViewHandle {
BillingAndUsage(ViewHandle<BillingAndUsagePageView>),
MCPServers(ViewHandle<MCPServersSettingsPageView>),
WarpDrive(ViewHandle<WarpDriveSettingsPageView>),
CloudEnvironments(ViewHandle<EnvironmentsPageView>),
OzCloudAPIKeys(ViewHandle<super::platform_page::PlatformPageView>),
Teams(ViewHandle<super::teams_page::TeamsPageView>),
SharedBlocks(ViewHandle<ShowBlocksView>),
}
impl SettingsPageViewHandle {
@@ -129,6 +135,10 @@ impl SettingsPageViewHandle {
BillingAndUsage(view_handle) => ChildView::new(view_handle).finish(),
MCPServers(view_handle) => ChildView::new(view_handle).finish(),
WarpDrive(view_handle) => ChildView::new(view_handle).finish(),
CloudEnvironments(view_handle) => ChildView::new(view_handle).finish(),
OzCloudAPIKeys(view_handle) => ChildView::new(view_handle).finish(),
Teams(view_handle) => ChildView::new(view_handle).finish(),
SharedBlocks(view_handle) => ChildView::new(view_handle).finish(),
}
}
}
@@ -93,7 +93,6 @@ impl SlashCommandDataSource {
if matches!(
event,
AISettingsChangedEvent::IsAnyAIEnabled { .. }
| AISettingsChangedEvent::OrchestrationEnabled { .. }
) {
me.recompute_active_commands(ctx);
}
+5 -13
View File
@@ -20,7 +20,7 @@ use crate::{drive::OpenWarpDriveObjectArgs, view_components::DismissibleToast};
use crate::{features::FeatureFlag, workspace::active_terminal_in_window};
use crate::ai::ambient_agents::github_auth_notifier::GitHubAuthNotifier;
use crate::settings_view::{OpenTeamsSettingsModalArgs, SettingsSection};
use crate::settings_view::SettingsSection;
use crate::user_config::load_launch_configs;
use crate::{
quake_mode_window_id, quake_mode_window_is_open, safe_info, send_telemetry_from_app_ctx,
@@ -334,15 +334,7 @@ impl UriHost {
if let Some(settings_sub_page) = settings_sub_page {
match settings_sub_page.as_str() {
"teams" => {
let invite_email = query_string.get("invite").map(|s| s.to_string());
let args = OpenTeamsSettingsModalArgs { invite_email };
dispatch_action_in_new_or_existing_window(
primary_window_id,
"root_view:open_team_settings_with_email_invite_in_existing_window",
"root_view:open_team_settings_with_email_invite_in_new_window",
&args,
ctx,
);
// Teams feature removed
}
"billing_and_usage" => {
dispatch_action_in_new_or_existing_window(
@@ -368,7 +360,7 @@ impl UriHost {
primary_window_id,
"root_view:open_settings_page_in_existing_window",
"root_view:open_settings_page_in_new_window",
&SettingsSection::CloudEnvironments,
&SettingsSection::Appearance,
ctx,
);
}
@@ -392,7 +384,7 @@ impl UriHost {
primary_window_id,
"root_view:open_settings_page_in_existing_window",
"root_view:open_settings_page_in_new_window",
&SettingsSection::OzCloudAPIKeys,
&SettingsSection::Appearance,
ctx,
);
}
@@ -902,7 +894,7 @@ impl Action {
primary_window_id,
"root_view:open_settings_page_in_existing_window",
"root_view:open_settings_page_in_new_window",
&SettingsSection::CloudEnvironments,
&SettingsSection::Appearance,
ctx,
);
}
+4 -25
View File
@@ -6072,19 +6072,7 @@ impl Workspace {
}
}
// 3. Cloud Oz (if flags enabled)
if is_any_ai_enabled
&& FeatureFlag::AgentView.is_enabled()
&& FeatureFlag::CloudMode.is_enabled()
{
let mut cloud_item = MenuItemFields::new("Cloud Oz")
.with_on_select_action(WorkspaceAction::AddAmbientAgentTab)
.with_icon(icons::Icon::LayoutAlt01);
if effective_default == DefaultSessionMode::CloudAgent {
cloud_item = cloud_item.with_key_shortcut_label(shortcut_label.clone());
}
menu_items.push(cloud_item.into_item());
}
// 3. Cloud Oz (removed — Bedrock-only, no cloud agent)
// 3b. Local Docker Sandbox
if FeatureFlag::LocalDockerSandbox.is_enabled() {
@@ -15453,14 +15441,9 @@ impl Workspace {
/// settings with the intent of inviting a user.
pub fn show_team_settings_page_with_email_invite(
&mut self,
email_invite: Option<&String>,
ctx: &mut ViewContext<Self>,
_email_invite: Option<&String>,
_ctx: &mut ViewContext<Self>,
) {
self.show_settings_with_section(Some(SettingsSection::Teams), ctx);
self.settings_pane.update(ctx, |view, ctx| {
view.open_teams_page_email_invite(email_invite, ctx);
});
}
/// Opens the MCP servers settings page, optionally triggering auto-install of a gallery MCP.
@@ -19312,11 +19295,7 @@ impl Workspace {
.insert(flags::SHARED_BLOCK_TITLE_GENERATION_FLAG);
}
if *ai_settings.should_show_oz_updates_in_zero_state.value() {
context
.set
.insert(flags::SHOW_OZ_UPDATES_IN_ZERO_STATE_FLAG);
}
if *ai_settings
.should_render_use_agent_footer_for_user_commands