Initial public release of Warp.

Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
David Stern
2026-04-28 08:43:33 -05:00
commit 0dbd3d567a
4982 changed files with 1431549 additions and 0 deletions
+119
View File
@@ -0,0 +1,119 @@
use serde::{Deserialize, Serialize};
use crate::auth::AuthStateProvider;
use crate::features::FeatureFlag;
use crate::settings::AISettings;
use crate::ui_components::icons::Icon;
use crate::workspace::tab_settings::TabSettings;
use settings::Setting as _;
use warpui::{AppContext, SingletonEntity};
/// A configurable item in the vertical tabs header toolbar.
///
/// Each variant represents a panel toggle button that can be placed on either
/// the left or right side of the toolbar. The side determines which side of the
/// main content area the panel opens on.
#[derive(
Clone,
Debug,
Eq,
PartialEq,
Hash,
Serialize,
Deserialize,
schemars::JsonSchema,
settings_value::SettingsValue,
)]
#[schemars(rename_all = "snake_case")]
pub enum HeaderToolbarItemKind {
TabsPanel,
ToolsPanel,
AgentManagement,
CodeReview,
NotificationsMailbox,
}
impl HeaderToolbarItemKind {
pub fn display_label(&self) -> &'static str {
match self {
Self::TabsPanel => "Tabs Panel",
Self::ToolsPanel => "Tools Panel",
Self::AgentManagement => "Agent Management",
Self::CodeReview => "Code Review",
Self::NotificationsMailbox => "Notifications",
}
}
pub fn icon(&self) -> Icon {
match self {
Self::TabsPanel => Icon::Menu,
Self::ToolsPanel => Icon::Tool2,
Self::AgentManagement => Icon::Grid,
Self::CodeReview => Icon::Diff,
Self::NotificationsMailbox => Icon::Inbox,
}
}
/// Whether this item is supported on the current platform/configuration
/// (feature flags, compile-time features, AI enabled, auth state).
/// Does not check user show/hide preferences — use `is_available` for that.
pub fn is_supported(&self, app: &AppContext) -> bool {
match self {
Self::TabsPanel => {
FeatureFlag::VerticalTabs.is_enabled()
&& *TabSettings::as_ref(app).use_vertical_tabs
}
Self::ToolsPanel => true,
Self::AgentManagement => {
let is_web_anonymous_user = AuthStateProvider::as_ref(app)
.get()
.is_user_web_anonymous_user()
.unwrap_or_default();
AISettings::as_ref(app).is_any_ai_enabled(app)
&& FeatureFlag::AgentManagementView.is_enabled()
&& !is_web_anonymous_user
}
Self::CodeReview => cfg!(feature = "local_fs"),
Self::NotificationsMailbox => FeatureFlag::HOANotifications.is_enabled(),
}
}
/// Whether this item should be shown in the toolbar.
/// Checks both `is_supported` and user show/hide preferences.
pub fn is_available(&self, app: &AppContext) -> bool {
if !self.is_supported(app) {
return false;
}
match self {
Self::CodeReview => *TabSettings::as_ref(app).show_code_review_button.value(),
Self::NotificationsMailbox => *AISettings::as_ref(app).show_agent_notifications,
_ => true,
}
}
/// Whether this item opens a side panel (as opposed to replacing the content
/// area or opening a popover).
pub fn is_panel(&self) -> bool {
matches!(self, Self::TabsPanel | Self::ToolsPanel | Self::CodeReview)
}
pub fn default_left() -> Vec<Self> {
vec![Self::TabsPanel, Self::ToolsPanel, Self::AgentManagement]
}
pub fn default_right() -> Vec<Self> {
vec![Self::CodeReview, Self::NotificationsMailbox]
}
/// All toolbar item variants (availability filtering is done at the call site).
pub fn all_items() -> Vec<Self> {
vec![
Self::TabsPanel,
Self::ToolsPanel,
Self::AgentManagement,
Self::CodeReview,
Self::NotificationsMailbox,
]
}
}