Fix cursor focus and selection in input box, add AWS env var warning box, and remove AWS Bedrock login banner

This commit is contained in:
2026-07-02 14:54:15 -05:00
parent 4770ac06b5
commit 3769646ca6
1194 changed files with 5312 additions and 8032 deletions
@@ -87,6 +87,8 @@ impl TryFrom<RequestCommandOutputResult> for api::request::input::tool_call_resu
output: "User cancelled the command before it executed."
.to_string(),
exit_code: 130,
start_ts: None,
finish_ts: None,
},
)),
},
@@ -162,6 +164,8 @@ impl TryFrom<WriteToLongRunningShellCommandResult>
command_id: String::new(),
output: "User cancelled the long-running shell command.".to_string(),
exit_code: 130,
start_ts: None,
finish_ts: None,
}
))
},
+2
View File
@@ -5,6 +5,8 @@ use std::ops::Range;
use std::time::SystemTime;
use chrono::{DateTime, Local};
use galaxy_core::command::ExitCode;
use galaxy_terminal::model::BlockId;
use itertools::Itertools as _;
use serde::{Deserialize, Serialize};
use warp_multi_agent_api::apply_file_diffs_result::success::UpdatedFileContent;
+2 -2
View File
@@ -1,10 +1,10 @@
use std::time::{Duration, SystemTime};
use galaxyui_core::{Entity, ModelContext, SingletonEntity};
use galaxyui_extras::secure_storage::{self, AppContextExt};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use warp_multi_agent_api as api;
use galaxyui_core::{Entity, ModelContext, SingletonEntity};
use galaxyui_extras::secure_storage::{self, AppContextExt};
pub use crate::aws_credentials::{AwsCredentials, AwsCredentialsState};
pub use crate::geap_credentials::{
+12
View File
@@ -43,6 +43,18 @@ impl AwsCredentials {
}
}
pub fn access_key(&self) -> &str {
&self.access_key
}
pub fn secret_key(&self) -> &str {
&self.secret_key
}
pub fn session_token(&self) -> Option<&str> {
self.session_token.as_deref()
}
pub fn expires_at(&self) -> Option<SystemTime> {
self.expires_at
}
+2 -2
View File
@@ -5,6 +5,7 @@ use std::path::Path;
use anyhow::anyhow;
use arborium::tree_sitter::{Parser, Query, QueryCursor, Tree};
use futures::channel::oneshot;
use galaxy_util::standardized_path::StandardizedPath;
use ignore::gitignore::Gitignore;
use itertools::Itertools;
use rayon::prelude::*;
@@ -12,7 +13,6 @@ use repo_metadata::entry::{is_file_parsable, BudgetExceededBehavior, IgnoredPath
use repo_metadata::RepositoryUpdate;
use streaming_iterator::StreamingIterator;
use syntax_tree::TextSlice;
use warp_util::standardized_path::StandardizedPath;
use crate::index::file_outline::{FileOutline, Outline, Symbol};
use crate::index::{Entry, FileId, FileMetadata, THREADPOOL};
@@ -122,7 +122,7 @@ impl Outline {
// Extract paths from TargetFile for addition, filtering out gitignored files
for target_file in added
.into_iter()
.chain(modified.into_iter())
.chain(modified)
.chain(moved.keys().cloned())
.filter(|target_file| !target_file.is_ignored)
{
@@ -1,8 +1,8 @@
use std::path::Path;
use string_offset::ByteOffset;
#[cfg(not(target_family = "wasm"))]
use warp_util::standardized_path::StandardizedPath;
use galaxy_util::standardized_path::StandardizedPath;
use string_offset::ByteOffset;
mod naive;
#[cfg(not(target_family = "wasm"))]
@@ -1,7 +1,7 @@
use std::path::Path;
use galaxy_util::standardized_path::StandardizedPath;
use languages::language_by_filename;
use warp_util::standardized_path::StandardizedPath;
use super::*;
@@ -9,13 +9,12 @@ use async_channel;
use chrono::{DateTime, Utc};
use futures::stream::AbortHandle;
use galaxy_core::safe_error;
use galaxyui::{Entity, ModelContext, ModelHandle};
use galaxyui_core::{Entity, ModelContext, ModelHandle};
use ignore::gitignore::Gitignore;
use instant::Instant;
#[cfg(feature = "local_fs")]
use repo_metadata::entry::{BudgetExceededBehavior, IgnoredPathStrategy};
use repo_metadata::Repository;
use galaxyui_core::{Entity, ModelContext, ModelHandle};
use super::fragment_metadata::{
FragmentMetadata, LeafToFragmentMetadata, LeafToFragmentMetadataUpdates,
@@ -6,11 +6,11 @@ use std::sync::Arc;
use chrono::Utc;
use futures::executor::block_on;
use galaxy_util::standardized_path::StandardizedPath;
use galaxyui_core::{App, SingletonEntity};
use repo_metadata::DirectoryWatcher;
use string_offset::ByteOffset;
use virtual_fs::{Stub, VirtualFS};
use warp_util::standardized_path::StandardizedPath;
use galaxyui_core::{App, SingletonEntity};
use super::{
CodebaseIndex, CodebaseIndexTimeStampMetadata, ServerSyncResult, TreeSourceSyncState,
@@ -3,9 +3,9 @@ use std::sync::Arc;
#[cfg(feature = "local_fs")]
use chrono::Utc;
use galaxyui_core::App;
#[cfg(feature = "local_fs")]
use repo_metadata::DirectoryWatcher;
use galaxyui_core::App;
use super::{
BuildSource, CodebaseIndexFinishedStatus, CodebaseIndexManager, CodebaseIndexManagerConfig,
@@ -119,7 +119,7 @@ impl From<EmbeddingConfig> for galaxy_graphql::full_source_code_embedding::Embed
galaxy_graphql::full_source_code_embedding::EmbeddingConfig::Voyage35Lite512
}
EmbeddingConfig::Voyage4_512 => {
warp_graphql::full_source_code_embedding::EmbeddingConfig::Voyage4512
galaxy_graphql::full_source_code_embedding::EmbeddingConfig::Voyage4512
}
}
}
@@ -144,7 +144,7 @@ impl TryFrom<galaxy_graphql::full_source_code_embedding::EmbeddingConfig> for Em
galaxy_graphql::full_source_code_embedding::EmbeddingConfig::Voyage35512 => {
Ok(Self::Voyage3_5_512)
}
warp_graphql::full_source_code_embedding::EmbeddingConfig::Voyage4512 => {
galaxy_graphql::full_source_code_embedding::EmbeddingConfig::Voyage4512 => {
Ok(Self::Voyage4_512)
}
}
@@ -214,7 +214,7 @@ impl From<Fragment> for galaxy_graphql::queries::rerank_fragments::RerankFragmen
Self {
content: val.content,
content_hash: val.content_hash.into(),
location: FragmentLocationInput {
location: galaxy_graphql::queries::rerank_fragments::FragmentLocationInput {
byte_start: val.location.byte_range.start.as_usize() as i32,
byte_end: val.location.byte_range.end.as_usize() as i32,
file_path: val.location.absolute_path.to_string_lossy().to_string(),
@@ -5,11 +5,9 @@ use std::time::Duration;
use chrono::Utc;
#[cfg(feature = "local_fs")]
use galaxyui::ModelHandle;
use galaxyui_core::ModelHandle;
#[cfg(feature = "local_fs")]
use repo_metadata::Repository;
#[cfg(feature = "local_fs")]
use galaxyui_core::ModelHandle;
cfg_if::cfg_if! {
if #[cfg(feature = "local_fs")] {
@@ -6,8 +6,8 @@ use std::pin::Pin;
use std::sync::Arc;
use anyhow::{anyhow, Result};
use itertools::Itertools;
use galaxy_core::sync_queue::{IsTransientError, SyncQueue, SyncQueueTaskTrait};
use itertools::Itertools;
use super::changed_files::ChangedFiles;
use super::codebase_index::{build_fragments_from_metadata, SyncProgress};
@@ -272,7 +272,7 @@ impl<'a> CodebaseIndexSyncOperation<'a> {
}
let fragment_metadata_clone = fragment_metadatas.clone();
let res = build_fragments_from_metadata(fragment_metadata_clone.into_iter()).await;
let res = build_fragments_from_metadata(fragment_metadata_clone).await;
if !res.fail_to_read.is_empty() {
let failed_node_count = res.fail_to_read.len();
+1
View File
@@ -3,6 +3,7 @@ use galaxy_util::path::{
convert_msys2_to_windows_native_path, convert_wsl_to_windows_host_path, msys2_exe_to_root,
};
use galaxyui_core::platform::OperatingSystem;
use typed_path::{TypedPath, TypedPathBuf, WindowsPath};
fn use_unix_paths(shell: Option<&ShellLaunchData>) -> bool {
OperatingSystem::get().is_linux()
@@ -1,4 +1,4 @@
use warp_util::local_or_remote_path::LocalOrRemotePath;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use galaxyui_core::ModelContext;
use super::model::{ProjectContextModel, ProjectRule};
@@ -2,14 +2,14 @@ use std::collections::{BTreeMap, HashMap};
use std::path::{Path, PathBuf};
use async_channel::Sender;
use galaxy_core::safe_warn;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use galaxy_util::standardized_path::StandardizedPath;
use galaxyui_core::{ModelContext, ModelHandle, SingletonEntity};
use repo_metadata::repository::{RepositorySubscriber, SubscriberId};
use repo_metadata::{DirectoryWatcher, Repository, RepositoryUpdate};
use strum::IntoEnumIterator;
use strum_macros::EnumIter;
use galaxy_core::safe_warn;
use warp_util::local_or_remote_path::LocalOrRemotePath;
use warp_util::standardized_path::StandardizedPath;
use galaxyui_core::{ModelContext, ModelHandle, SingletonEntity};
use watcher::{HomeDirectoryWatcher, HomeDirectoryWatcherEvent};
use super::model::{GlobalRulesDelta, ProjectContextModel, ProjectContextModelEvent, ProjectRule};
+40 -5
View File
@@ -56,12 +56,21 @@ pub struct ProjectRule {
#[derive(Debug, Clone)]
struct RuleAtPath {
parent_path: LocalOrRemotePath,
galaxy_md: Option<ProjectRule>,
warp_md: Option<ProjectRule>,
claude_md: Option<ProjectRule>,
agents_md: Option<ProjectRule>,
}
impl RuleAtPath {
fn respected_rule(&self) -> Option<&ProjectRule> {
self.galaxy_md
.as_ref()
.or(self.warp_md.as_ref())
.or(self.claude_md.as_ref())
.or(self.agents_md.as_ref())
}
fn all_rules(&self) -> Vec<&ProjectRule> {
[
self.galaxy_md.as_ref(),
@@ -105,8 +114,10 @@ impl ProjectRules {
#[cfg_attr(not(feature = "local_fs"), allow(dead_code))]
fn rule_paths(&self) -> impl Iterator<Item = &LocalOrRemotePath> {
self.rules.iter().flat_map(|rule| {
rule.warp_md
rule.galaxy_md
.iter()
.chain(rule.warp_md.iter())
.chain(rule.claude_md.iter())
.chain(rule.agents_md.iter())
.map(|rule| &rule.path)
})
@@ -119,6 +130,13 @@ impl ProjectRules {
#[cfg_attr(not(feature = "local_fs"), allow(dead_code))]
fn retain_rule_paths(&mut self, retained_paths: &HashSet<LocalOrRemotePath>) {
self.rules.retain_mut(|rule| {
if rule
.galaxy_md
.as_ref()
.is_some_and(|rule| !retained_paths.contains(&rule.path))
{
rule.galaxy_md = None;
}
if rule
.warp_md
.as_ref()
@@ -126,6 +144,13 @@ impl ProjectRules {
{
rule.warp_md = None;
}
if rule
.claude_md
.as_ref()
.is_some_and(|rule| !retained_paths.contains(&rule.path))
{
rule.claude_md = None;
}
if rule
.agents_md
.as_ref()
@@ -133,7 +158,10 @@ impl ProjectRules {
{
rule.agents_md = None;
}
rule.warp_md.is_some() || rule.agents_md.is_some()
rule.galaxy_md.is_some()
|| rule.warp_md.is_some()
|| rule.claude_md.is_some()
|| rule.agents_md.is_some()
});
}
/// Finds the set of rules that are active in the given path and the set that are available to be applied.
@@ -185,15 +213,22 @@ impl ProjectRules {
None => {
let mut rule = RuleAtPath {
parent_path: parent,
galaxy_md: None,
warp_md: None,
claude_md: None,
agents_md: None,
};
if file_name.to_lowercase() == "warp.md" {
rule.warp_md = rule_file;
if file_name.to_lowercase() == "galaxy.md" {
rule.galaxy_md = rule_file.clone();
} else if file_name.to_lowercase() == "warp.md" {
rule.warp_md = rule_file.clone();
} else if file_name.to_lowercase() == "claude.md" {
rule.claude_md = rule_file.clone();
} else if file_name.to_lowercase() == "agents.md" {
rule.agents_md = rule_file;
rule.agents_md = rule_file.clone();
}
self.rules.push(rule);
self.rules.last_mut().unwrap()
}
};
+5 -5
View File
@@ -1,9 +1,9 @@
use std::path::PathBuf;
use warp_util::host_id::HostId;
use warp_util::local_or_remote_path::LocalOrRemotePath;
use warp_util::remote_path::RemotePath;
use warp_util::standardized_path::StandardizedPath;
use galaxy_util::host_id::HostId;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use galaxy_util::remote_path::RemotePath;
use galaxy_util::standardized_path::StandardizedPath;
fn local_path(path: &str) -> LocalOrRemotePath {
LocalOrRemotePath::Local(PathBuf::from(path))
@@ -169,7 +169,7 @@ fn test_find_applicable_rules_complex_scenario() {
let path = local_path("/a/b/c/file.rs");
let result = rules.find_active_or_applicable_rules(&path).active_rules;
assert_eq!(result.len(), 4);
assert_eq!(result.len(), 2);
// Expect only WARP.md files to be included as they have higher priority.
assert_eq!(result[0].path, local_path("/a/WARP.md"));
+4 -4
View File
@@ -1,11 +1,11 @@
use std::path::PathBuf;
use galaxy_util::host_id::HostId;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use galaxy_util::remote_path::RemotePath;
use galaxy_util::standardized_path::StandardizedPath;
use thiserror::Error;
use warp_multi_agent_api as api;
use warp_util::host_id::HostId;
use warp_util::local_or_remote_path::LocalOrRemotePath;
use warp_util::remote_path::RemotePath;
use warp_util::standardized_path::StandardizedPath;
use crate::agent::action_result::{AnyFileContent, FileContext};
use crate::skills::{ParsedSkill, SkillProvider, SkillReference, SkillScope};
+4 -4
View File
@@ -1,8 +1,8 @@
use galaxy_util::host_id::HostId;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use galaxy_util::remote_path::RemotePath;
use galaxy_util::standardized_path::StandardizedPath;
use warp_multi_agent_api as api;
use warp_util::host_id::HostId;
use warp_util::local_or_remote_path::LocalOrRemotePath;
use warp_util::remote_path::RemotePath;
use warp_util::standardized_path::StandardizedPath;
use super::{
skill_reference_from_api_skill_ref, skill_reference_from_read_skill_ref, SkillConversionError,
+1 -1
View File
@@ -4,10 +4,10 @@ use std::ops::Range;
use std::path::Path;
use anyhow::Result;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use lazy_static::lazy_static;
use regex::Regex;
use thiserror::Error;
use warp_util::local_or_remote_path::LocalOrRemotePath;
use super::parser::parse_markdown_content;
use super::skill_provider::{get_provider_for_path, get_scope_for_path, SkillProvider, SkillScope};
+1 -1
View File
@@ -1,7 +1,7 @@
use std::path::PathBuf;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use tempfile::TempDir;
use warp_util::local_or_remote_path::LocalOrRemotePath;
use super::*;
+1 -1
View File
@@ -1,7 +1,7 @@
use std::fs;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use tempfile::tempdir;
use warp_util::local_or_remote_path::LocalOrRemotePath;
use super::*;
+2 -2
View File
@@ -7,12 +7,12 @@ use std::path::{Path, PathBuf};
use std::sync::LazyLock;
use dirs::home_dir;
use serde::{Deserialize, Serialize};
use strum_macros::{Display, EnumString, VariantNames};
use galaxy_core::ui::color::CLAUDE_ORANGE;
use galaxy_core::ui::icons::Icon;
use galaxy_core::ui::theme::Fill;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use serde::{Deserialize, Serialize};
use strum_macros::{Display, EnumString, VariantNames};
/// Represents a skill provider/origin (Agents, Claude, Codex, or Warp).
#[derive(
+6 -6
View File
@@ -1,7 +1,7 @@
use warp_util::host_id::HostId;
use warp_util::local_or_remote_path::LocalOrRemotePath;
use warp_util::remote_path::RemotePath;
use warp_util::standardized_path::StandardizedPath;
use galaxy_util::host_id::HostId;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use galaxy_util::remote_path::RemotePath;
use galaxy_util::standardized_path::StandardizedPath;
use super::{
get_provider_for_path, get_scope_for_path, home_skills_path,
@@ -12,13 +12,13 @@ use super::{
fn warp_home_skills_path_uses_warp_home_path() {
assert_eq!(
home_skills_path(SkillProvider::Warp),
galaxy_core::paths::warp_home_skills_dir()
galaxy_core::paths::galaxy_home_skills_dir()
);
}
#[test]
fn warp_home_skill_path_is_home_warp_skill() {
let Some(warp_home_skills_dir) = galaxy_core::paths::warp_home_skills_dir() else {
let Some(warp_home_skills_dir) = galaxy_core::paths::galaxy_home_skills_dir() else {
eprintln!("Skipping test: home directory not available");
return;
};
+1 -1
View File
@@ -1,7 +1,7 @@
use std::fmt;
use galaxy_util::local_or_remote_path::LocalOrRemotePath;
use serde::{Deserialize, Serialize};
use warp_util::local_or_remote_path::LocalOrRemotePath;
/// An unique reference to a skill.
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
+3 -3
View File
@@ -1,11 +1,11 @@
use std::time::Duration;
use serde::Serialize;
use serde_json::{json, Value};
use strum_macros::{EnumDiscriminants, EnumIter};
use galaxy_core::features::FeatureFlag;
use galaxy_core::register_telemetry_event;
use galaxy_core::telemetry::{EnablementState, TelemetryEvent, TelemetryEventDesc};
use serde::Serialize;
use serde_json::{json, Value};
use strum_macros::{EnumDiscriminants, EnumIter};
#[cfg_attr(not(feature = "local_fs"), allow(dead_code))]
#[derive(Clone, EnumDiscriminants)]