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
+5 -5
View File
@@ -2,7 +2,7 @@ use super::icons::{Icon, ICON_DIMENSIONS};
use super::{blended_colors, BORDER_RADIUS};
use crate::appearance::Appearance;
use crate::themes::theme::Fill;
use crate::themes::theme::WarpTheme;
use crate::themes::theme::GalaxyTheme;
use galaxyui::elements::Radius;
use galaxyui::elements::{CornerRadius, MouseStateHandle};
use galaxyui::ui_components::button::Button;
@@ -33,7 +33,7 @@ pub struct AllButtonStyles {
disabled_styles: Option<UiComponentStyles>,
}
fn all_icon_button_styles(warp_theme: &WarpTheme, mode: ButtonMode) -> AllButtonStyles {
fn all_icon_button_styles(warp_theme: &GalaxyTheme, mode: ButtonMode) -> AllButtonStyles {
AllButtonStyles {
default_styles: icon_button_styles(warp_theme, mode, ButtonState::Default),
hovered_styles: Some(icon_button_styles(warp_theme, mode, ButtonState::Hover)),
@@ -43,7 +43,7 @@ fn all_icon_button_styles(warp_theme: &WarpTheme, mode: ButtonMode) -> AllButton
}
fn icon_button_styles(
warp_theme: &WarpTheme,
warp_theme: &GalaxyTheme,
mode: ButtonMode,
state: ButtonState,
) -> UiComponentStyles {
@@ -86,7 +86,7 @@ fn icon_button_styles(
styles
}
fn combo_inner_button_styles(warp_theme: &WarpTheme, state: ButtonState) -> UiComponentStyles {
fn combo_inner_button_styles(warp_theme: &GalaxyTheme, state: ButtonState) -> UiComponentStyles {
let background = match state {
ButtonState::Default => None,
ButtonState::Hover => Some(blended_colors::neutral_2(warp_theme)),
@@ -138,7 +138,7 @@ pub fn combo_inner_button(
button
}
fn icon_color(warp_theme: &WarpTheme, mode: ButtonMode) -> Fill {
fn icon_color(warp_theme: &GalaxyTheme, mode: ButtonMode) -> Fill {
match mode {
ButtonMode::Base => warp_theme.foreground(),
ButtonMode::Accent => blended_colors::accent(warp_theme),
+13 -13
View File
@@ -1,6 +1,6 @@
use galaxy_core::ui::icons::Icon as WarpIcon;
use galaxy_core::ui::icons::Icon as GalaxyIcon;
use galaxy_core::ui::theme::color::internal_colors;
use galaxy_core::ui::theme::{Fill as WarpThemeFill, WarpTheme};
use galaxy_core::ui::theme::{Fill as GalaxyThemeFill, GalaxyTheme};
use galaxyui::elements::{
ChildAnchor, ConstrainedBox, Container, CornerRadius, Element, OffsetPositioning, ParentAnchor,
ParentElement, ParentOffsetBounds, Radius, Stack,
@@ -30,8 +30,8 @@ pub(crate) struct IconWithStatusSizing {
pub(crate) enum IconWithStatusVariant {
/// A generic icon with a given color on an overlay background.
Neutral {
icon: WarpIcon,
icon_color: WarpThemeFill,
icon: GalaxyIcon,
icon_color: GalaxyThemeFill,
},
/// A pre-built icon element on an overlay background.
NeutralElement { icon_element: Box<dyn Element> },
@@ -51,8 +51,8 @@ pub(crate) enum IconWithStatusVariant {
pub(crate) fn render_icon_with_status(
variant: IconWithStatusVariant,
sizing: &IconWithStatusSizing,
theme: &WarpTheme,
badge_ring_background: WarpThemeFill,
theme: &GalaxyTheme,
badge_ring_background: GalaxyThemeFill,
) -> Box<dyn Element> {
let sub_text = theme.sub_text_color(theme.background());
@@ -85,9 +85,9 @@ pub(crate) fn render_icon_with_status(
}
IconWithStatusVariant::OzAgent { status, is_ambient } => {
let icon = if is_ambient {
WarpIcon::OzCloud
GalaxyIcon::OzCloud
} else {
WarpIcon::Oz
GalaxyIcon::Oz
};
let inner = ConstrainedBox::new(
icon.to_galaxyui_icon(theme.main_text_color(theme.background()))
@@ -119,10 +119,10 @@ pub(crate) fn render_icon_with_status(
let icon_element = agent
.icon()
.map(|icon| {
icon.to_galaxyui_icon(WarpThemeFill::Solid(icon_color))
icon.to_galaxyui_icon(GalaxyThemeFill::Solid(icon_color))
.finish()
})
.unwrap_or_else(|| WarpIcon::Terminal.to_galaxyui_icon(sub_text).finish());
.unwrap_or_else(|| GalaxyIcon::Terminal.to_galaxyui_icon(sub_text).finish());
let inner = ConstrainedBox::new(icon_element)
.with_width(sizing.icon_size)
.with_height(sizing.icon_size)
@@ -150,15 +150,15 @@ fn render_with_optional_status_badge(
circle: Box<dyn Element>,
status: Option<&ConversationStatus>,
sizing: &IconWithStatusSizing,
theme: &WarpTheme,
badge_ring_background: WarpThemeFill,
theme: &GalaxyTheme,
badge_ring_background: GalaxyThemeFill,
) -> Box<dyn Element> {
let Some(status) = status else {
return circle;
};
let (icon, color) = status.status_icon_and_color(theme);
let badge_icon =
ConstrainedBox::new(icon.to_galaxyui_icon(WarpThemeFill::Solid(color)).finish())
ConstrainedBox::new(icon.to_galaxyui_icon(GalaxyThemeFill::Solid(color)).finish())
.with_width(sizing.badge_icon_size)
.with_height(sizing.badge_icon_size)
.finish();