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:
Ryan Ward
2026-05-21 11:59:37 -05:00
co-authored by Claude Opus 4.6
parent eaa2ddc75e
commit 6f54e2cb30
229 changed files with 2506 additions and 2634 deletions
+3 -3
View File
@@ -2059,7 +2059,7 @@ pub enum AISettingsPageAction {
RemoveDirectoryFromCodeReadAllowlist(PathBuf),
ToggleRules,
ToggleRuleSuggestions,
ToggleWarpDriveContext,
ToggleGalaxyDriveContext,
SetApplyCodeDiffs(ActionPermission),
SetReadFiles(ActionPermission),
SetExecuteCommands(ActionPermission),
@@ -2618,7 +2618,7 @@ impl TypedActionView for AISettingsPageView {
});
ctx.notify();
}
AISettingsPageAction::ToggleWarpDriveContext => {
AISettingsPageAction::ToggleGalaxyDriveContext => {
AISettings::handle(ctx).update(ctx, |settings, ctx| {
let _ = settings
.warp_drive_context_enabled
@@ -5094,7 +5094,7 @@ impl AIFactWidget {
) -> Box<dyn Element> {
let toggle = render_ai_setting_toggle::<WarpDriveContextEnabled>(
"Galaxy Drive as agent context",
AISettingsPageAction::ToggleWarpDriveContext,
AISettingsPageAction::ToggleGalaxyDriveContext,
*ai_settings.warp_drive_context_enabled,
ai_settings.is_any_ai_enabled(app),
self.warp_drive_context_toggle.clone(),
+3 -3
View File
@@ -45,8 +45,8 @@ use crate::terminal::settings::{
};
use crate::terminal::{BlockListSettings, ShowBlockDividers};
use crate::terminal::{ShowJumpToBottomOfBlockButton, SizeInfo};
use crate::themes::theme::{self, RespectSystemTheme, SelectedSystemThemes, ThemeKind, WarpTheme};
use crate::user_config::WarpConfig;
use crate::themes::theme::{self, RespectSystemTheme, SelectedSystemThemes, ThemeKind, GalaxyTheme};
use crate::user_config::GalaxyConfig;
use crate::util::bindings;
use crate::window_settings::{
BackgroundBlurRadius, BackgroundBlurTexture, BackgroundOpacity, LeftPanelVisibilityAcrossTabs,
@@ -2734,7 +2734,7 @@ impl ThemeSelectWidget {
is_selected: bool,
app: &AppContext,
) -> Box<dyn Element> {
let theme: WarpTheme = WarpConfig::as_ref(app).theme_config().theme(&theme_kind);
let theme: GalaxyTheme = GalaxyConfig::as_ref(app).theme_config().theme(&theme_kind);
let mode_ui_label = match theme_chooser_mode {
ThemeChooserMode::SystemLight => "Light",
ThemeChooserMode::SystemDark => "Dark",
+1 -1
View File
@@ -2016,7 +2016,7 @@ impl CodePageWidget {
&self,
server_model: Option<&galaxyui::ModelHandle<LspServerModel>>,
app: &AppContext,
theme: &galaxy_core::ui::theme::WarpTheme,
theme: &galaxy_core::ui::theme::GalaxyTheme,
) -> (ColorU, &'static str) {
match server_model {
Some(model) => {
+4 -4
View File
@@ -77,7 +77,7 @@ use crate::terminal::settings::{
};
use crate::terminal::{BlockListSettings, SnackbarEnabled};
use crate::undo_close::UndoCloseSettings;
use crate::user_config::{WarpConfig, WarpConfigUpdateEvent};
use crate::user_config::{GalaxyConfig, GalaxyConfigUpdateEvent};
use crate::util::bindings::{
keybinding_name_to_display_string, reset_keybinding_to_default, set_custom_keybinding,
};
@@ -2141,8 +2141,8 @@ impl FeaturesPageView {
let default_session_mode_dropdown = ctx.add_typed_action_view(FilterableDropdown::new);
Self::update_default_session_mode_dropdown(default_session_mode_dropdown.clone(), ctx);
ctx.subscribe_to_model(&WarpConfig::handle(ctx), |me, _, event, ctx| {
if matches!(event, WarpConfigUpdateEvent::TabConfigs) {
ctx.subscribe_to_model(&GalaxyConfig::handle(ctx), |me, _, event, ctx| {
if matches!(event, GalaxyConfigUpdateEvent::TabConfigs) {
Self::update_default_session_mode_dropdown(
me.default_session_mode_dropdown.clone(),
ctx,
@@ -3339,7 +3339,7 @@ impl FeaturesPageView {
.collect();
// Append each loaded tab config
let tab_configs = WarpConfig::as_ref(ctx).tab_configs().to_vec();
let tab_configs = GalaxyConfig::as_ref(ctx).tab_configs().to_vec();
for config in &tab_configs {
if let Some(path) = &config.source_path {
items.push(DropdownItem::new(
+1 -1
View File
@@ -160,7 +160,7 @@ impl From<&MainPageAction> for LoginGatedFeature {
pub enum MainSettingsPageEvent {
CheckForUpdate,
#[allow(dead_code)]
OpenWarpDrive,
OpenGalaxyDrive,
SignupAnonymousUser,
}
@@ -1555,7 +1555,7 @@ impl MCPServersListPageView {
// If the path is the Warp data directory (e.g. ~/.warp or ~/.warp_dev), set the text to
// "global". The Warp provider stores its data directory as the root path rather than the
// home directory, unlike other providers that store the home directory directly.
if root_path == &crate::warp_managed_paths_watcher::warp_data_dir() {
if root_path == &crate::galaxy_managed_paths_watcher::galaxy_data_dir() {
return Some("global".to_string());
}
+2 -2
View File
@@ -159,7 +159,7 @@ pub enum SettingsViewEvent {
StartResize,
CheckForUpdate,
LaunchNetworkLogging,
OpenWarpDrive,
OpenGalaxyDrive,
SignupAnonymousUser,
ShowToast {
message: String,
@@ -989,7 +989,7 @@ pub struct SettingsView {
/// Mirrored from `Workspace` via [`set_settings_error_state`].
settings_error_banner_dismissed: bool,
/// Mouse state handles for the nav-rail footer buttons. Constructed once
/// per `SettingsView` per `WARP.md`'s guidance that inline
/// per `SettingsView` per `GALAXY.md`'s guidance that inline
/// `MouseStateHandle::default()` breaks hover/click tracking.
footer_mouse_states: SettingsFooterMouseStates,
}
+2 -2
View File
@@ -13,7 +13,7 @@ use galaxy_core::context_flag::ContextFlag;
use regex::Regex;
use settings::Setting as _;
use galaxy_core::ui::theme::WarpTheme;
use galaxy_core::ui::theme::GalaxyTheme;
use galaxyui::elements::{
Align, ChildAnchor, ChildView, ConstrainedBox, Container, CornerRadius, CrossAxisAlignment,
Empty, Expanded, Flex, Hoverable, MainAxisAlignment, MainAxisSize, MouseStateHandle,
@@ -1751,6 +1751,6 @@ mod styles {
pub const DESCRIPTION_LINE_MARGIN_BOTTOM: f32 = 6.;
}
fn description_text_color(theme: &WarpTheme) -> galaxy_core::ui::theme::Fill {
fn description_text_color(theme: &GalaxyTheme) -> galaxy_core::ui::theme::Fill {
theme.sub_text_color(theme.surface_2())
}
+4 -4
View File
@@ -189,7 +189,7 @@ pub enum TeamsPageAction {
SendEmailInvites {
team_uid: ServerId,
},
OpenWarpDrive,
OpenGalaxyDrive,
GenerateUpgradeLink {
team_uid: ServerId,
},
@@ -298,7 +298,7 @@ impl TryFrom<&TeamsPageAction> for TelemetryEvent {
#[derive(Clone)]
pub enum TeamsPageViewEvent {
TeamsChanged,
OpenWarpDrive,
OpenGalaxyDrive,
ShowToast {
message: String,
flavor: ToastFlavor,
@@ -492,7 +492,7 @@ impl TypedActionView for TeamsPageView {
self.send_email_invites(*team_uid, ctx);
ctx.notify();
}
TeamsPageAction::OpenWarpDrive => ctx.emit(TeamsPageViewEvent::OpenWarpDrive),
TeamsPageAction::OpenGalaxyDrive => ctx.emit(TeamsPageViewEvent::OpenGalaxyDrive),
TeamsPageAction::ShowLeaveTeamConfirmationDialog => {
self.delete_or_leave_team_confirmation_dialog
.update(ctx, |dialog, ctx| {
@@ -1365,7 +1365,7 @@ impl TeamsPageView {
ctx,
);
});
ctx.dispatch_typed_action(&WorkspaceAction::OpenWarpDrive);
ctx.dispatch_typed_action(&WorkspaceAction::OpenGalaxyDrive);
}
fn set_team_member_role(