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
+6 -6
View File
@@ -20,7 +20,7 @@ use galaxyui::elements::{ChildAnchor, OffsetPositioning, Radius, SavePosition, S
use galaxyui::keymap::EditableBinding;
use galaxyui::ui_components::components::UiComponent;
pub use galaxyui::{
accessibility::{AccessibilityContent, WarpA11yRole},
accessibility::{AccessibilityContent, GalaxyA11yRole},
elements::{ParentElement as _, Stack},
geometry::vector::vec2f,
AppContext,
@@ -378,10 +378,10 @@ impl CodeEditorFind {
self.searcher.as_ref(ctx).match_count()
),
"Use enter and shift-enter to navigate between matches. Escape to quit.",
WarpA11yRole::UserAction,
GalaxyA11yRole::UserAction,
)
} else {
AccessibilityContent::new_without_help("No results.", WarpA11yRole::UserAction)
AccessibilityContent::new_without_help("No results.", GalaxyA11yRole::UserAction)
};
ctx.emit_a11y_content(content);
}
@@ -396,12 +396,12 @@ impl CodeEditorFind {
"Successfully replaced match. Selected match is {match_index} of {remaining_matches}"
),
"Continue pressing Enter to replace more matches, or use up/down arrows to navigate.",
WarpA11yRole::UserAction,
GalaxyA11yRole::UserAction,
)
} else {
AccessibilityContent::new_without_help(
"Successfully replaced the last match.",
WarpA11yRole::UserAction,
GalaxyA11yRole::UserAction,
)
};
ctx.emit_a11y_content(content);
@@ -946,7 +946,7 @@ impl View for CodeEditorFind {
Some(AccessibilityContent::new(
description,
help_text,
WarpA11yRole::TextareaRole,
GalaxyA11yRole::TextareaRole,
))
}
+1 -1
View File
@@ -116,7 +116,7 @@ pub enum CodeSource {
},
/// Opened from an active AI agent conversation.
AIAction { id: AIAgentActionId },
/// Opened from project rules (WARP.md) file.
/// Opened from project rules (GALAXY.md) file.
ProjectRules { path: PathBuf },
/// Opened from file tree.
FileTree { path: PathBuf },
+2 -2
View File
@@ -6,7 +6,7 @@
use std::{collections::HashMap, path::PathBuf};
use galaxy_core::ui::{
appearance::Appearance, icons::Icon as WarpIcon, theme::color::internal_colors,
appearance::Appearance, icons::Icon as GalaxyIcon, theme::color::internal_colors,
};
use galaxy_files::FileModel;
use galaxyui::{
@@ -520,7 +520,7 @@ fn render_header(
let icon_color = theme.sub_text_color(theme.background());
let close_button = Hoverable::new(back_mouse_state, move |state| {
let close_icon = ConstrainedBox::new(
galaxyui::elements::Icon::new(WarpIcon::X.into(), icon_color).finish(),
galaxyui::elements::Icon::new(GalaxyIcon::X.into(), icon_color).finish(),
)
.with_width(16.)
.with_height(16.)
+5 -5
View File
@@ -10,7 +10,7 @@ use lsp::{
use crate::code::lsp_telemetry::{LspControlActionType, LspEnablementSource, LspTelemetryEvent};
use galaxy_core::ui::theme::color::internal_colors;
use galaxy_core::ui::theme::{Fill as ThemeFill, WarpTheme};
use galaxy_core::ui::theme::{Fill as ThemeFill, GalaxyTheme};
use galaxy_core::ui::{appearance::Appearance, Icon};
use galaxyui::elements::{
ChildAnchor, ChildView, Dismiss, Empty, Hoverable, MainAxisSize, MouseStateHandle,
@@ -167,7 +167,7 @@ enum LSPServerRenderStatus {
}
impl LSPServerRenderStatus {
fn to_icon_color(&self, theme: &WarpTheme) -> ColorU {
fn to_icon_color(&self, theme: &GalaxyTheme) -> ColorU {
match self {
LSPServerRenderStatus::Available => AnsiColorIdentifier::Green
.to_ansi_color(&theme.terminal_colors().normal)
@@ -285,7 +285,7 @@ impl CodeFooterView {
})
}
fn render_tab_config_info_icon(theme: &WarpTheme) -> Box<dyn Element> {
fn render_tab_config_info_icon(theme: &GalaxyTheme) -> Box<dyn Element> {
Container::new(
ConstrainedBox::new(
Icon::Info
@@ -1376,7 +1376,7 @@ impl CodeFooterView {
/// Computes the aggregate indicator color across all tracked servers.
/// Priority: Failed > Busy > Stopped > Available.
fn aggregate_indicator_color(&self, theme: &WarpTheme, app: &AppContext) -> ColorU {
fn aggregate_indicator_color(&self, theme: &GalaxyTheme, app: &AppContext) -> ColorU {
if self.lsp_servers.is_empty() {
return LSPServerRenderStatus::Stopped.to_icon_color(theme);
}
@@ -1449,7 +1449,7 @@ impl CodeFooterView {
}
fn render_status_text(
theme: &WarpTheme,
theme: &GalaxyTheme,
appearance: &Appearance,
message: String,
) -> Box<dyn Element> {
+2 -2
View File
@@ -1,6 +1,6 @@
use galaxy_core::ui::{
appearance::Appearance,
theme::{color::internal_colors, WarpTheme},
theme::{color::internal_colors, GalaxyTheme},
};
use galaxy_editor::{
content::buffer::InitialBufferState,
@@ -575,7 +575,7 @@ impl LocalCodeEditorView {
}
/// Render a separator line between hover card sections.
fn render_separator(theme: &WarpTheme) -> Box<dyn Element> {
fn render_separator(theme: &GalaxyTheme) -> Box<dyn Element> {
Container::new(
ConstrainedBox::new(
Rect::new()