Rebrand to Galaxy, major improvements to Bedrock support, still needs some TLC though

This commit is contained in:
Ryan Ward
2026-05-07 11:29:34 -05:00
parent f4e2475c60
commit a41cbd8cc7
2433 changed files with 14208 additions and 9409 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
use std::{collections::HashMap, ffi::OsString};
use warpui::{EntityId, SingletonEntity, ViewContext, ViewHandle};
use galaxyui::{EntityId, SingletonEntity, ViewContext, ViewHandle};
use crate::ai::agent::conversation::{AIConversationId, ConversationStatus};
use crate::ai::blocklist::agent_view::AgentViewEntryOrigin;
+1 -1
View File
@@ -1,6 +1,6 @@
use super::pane::{PaneId, TerminalPaneId};
use super::{PaneState, SplitPaneState};
use warpui::{AppContext, Entity, ModelContext, ModelHandle};
use galaxyui::{AppContext, Entity, ModelContext, ModelHandle};
/// Centralized focus state for a pane group.
/// This model tracks which pane is focused, which session is active,
+14 -14
View File
@@ -53,7 +53,7 @@ use crate::uri::browser_url_handler::update_browser_url;
use crate::util::openable_file_type::FileTarget;
use crate::view_components::ToastFlavor;
use crate::workflows::workflow::Workflow;
use warp_terminal::shell::{ShellName, ShellType};
use galaxy_terminal::shell::{ShellName, ShellType};
use std::any::Any;
use std::cell::RefCell;
@@ -78,26 +78,26 @@ use tree::DEFAULT_FLEX_VALUE;
use typed_path::TypedPath;
use url::Url;
use uuid::Uuid;
use warp_cli::agent::Harness;
use warp_core::command::ExitCode;
use warp_core::context_flag::ContextFlag;
use warp_core::HostId;
use warp_util::path::convert_wsl_to_windows_host_path;
use galaxy_cli::agent::Harness;
use galaxy_core::command::ExitCode;
use galaxy_core::context_flag::ContextFlag;
use galaxy_core::HostId;
use galaxy_util::path::convert_wsl_to_windows_host_path;
#[cfg(feature = "local_fs")]
use warp_util::path::LineAndColumnArg;
use warpui::elements::{
use galaxy_util::path::LineAndColumnArg;
use galaxyui::elements::{
Clipped, CrossAxisAlignment, DispatchEventResult, EventHandler, Flex, MainAxisSize, Shrinkable,
Stack,
};
use warpui::keymap::{Context, EditableBinding, FixedBinding};
use warpui::notification::NotificationSendError;
use galaxyui::keymap::{Context, EditableBinding, FixedBinding};
use galaxyui::notification::NotificationSendError;
use warpui::windowing::WindowManager;
use warpui::{
use galaxyui::windowing::WindowManager;
use galaxyui::{
elements::{ChildView, Element, ParentElement},
AppContext, Entity, EntityId, ModelHandle, TypedActionView, View, ViewHandle, WindowId,
};
use warpui::{SingletonEntity, ViewContext};
use galaxyui::{SingletonEntity, ViewContext};
use crate::ai::blocklist::SerializedBlockListItem;
use crate::ai_assistant::AskAIType;
@@ -297,7 +297,7 @@ enum PaneRemovalReason {
}
pub fn init(app: &mut AppContext) {
use warpui::keymap::macros::*;
use galaxyui::keymap::macros::*;
app.register_binding_validator::<PaneGroup>(is_binding_pty_compliant);
self::pane::init(app);
+2 -2
View File
@@ -74,8 +74,8 @@ use ai::{
};
use pathfinder_geometry::rect::RectF;
use shared_session::permissions_manager::SessionPermissionsManager;
use warpui::windowing::{state::ApplicationStage, WindowManager};
use warpui::{
use galaxyui::windowing::{state::ApplicationStage, WindowManager};
use galaxyui::{
platform::{WindowBounds, WindowStyle},
App, ModelHandle,
};
+1 -1
View File
@@ -1,4 +1,4 @@
use warpui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use crate::{
ai::ai_document_view::{AIDocumentEvent, AIDocumentView},
+1 -1
View File
@@ -1,4 +1,4 @@
use warpui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
use crate::{
ai::facts::{AIFactManager, AIFactView, AIFactViewEvent},
+1 -1
View File
@@ -1,4 +1,4 @@
use warpui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use crate::{
ai::blocklist::inline_action::code_diff_view::{CodeDiffView, CodeDiffViewEvent},
@@ -1,4 +1,4 @@
use warpui::{Entity, ModelContext, ViewHandle};
use galaxyui::{Entity, ModelContext, ViewHandle};
use crate::ai::blocklist::inline_action::code_diff_view::{CodeDiffView, CodeDiffViewEvent};
+2 -2
View File
@@ -1,5 +1,5 @@
use warp_util::path::LineAndColumnArg;
use warpui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
use galaxy_util::path::LineAndColumnArg;
use galaxyui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
use crate::{
app_state::{CodePaneSnapShot, CodePaneTabSnapshot, LeafContents},
@@ -1,5 +1,5 @@
use anyhow::Context;
use warpui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use crate::{
app_state::{EnvVarCollectionPaneSnapshot, LeafContents},
@@ -1,4 +1,4 @@
use warpui::{AppContext, ModelHandle, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, ViewContext, ViewHandle};
use crate::{
app_state::{EnvironmentManagementPaneSnapshot, LeafContents},
@@ -9,7 +9,7 @@ use crate::{
ai::execution_profiles::profiles::ClientProfileId,
app_state::LeafContents,
};
use warpui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
pub struct ExecutionProfileEditorPane {
view: ViewHandle<PaneView<ExecutionProfileEditorView>>,
+1 -1
View File
@@ -1,6 +1,6 @@
use std::{path::PathBuf, sync::Arc};
use warpui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
#[cfg(feature = "local_fs")]
use crate::code::editor_management::CodeSource;
+1 -1
View File
@@ -1,4 +1,4 @@
use warpui::{AppContext, ModelHandle, View, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, View, ViewContext, ViewHandle};
use crate::{
app_state::LeafContents,
+5 -5
View File
@@ -1,6 +1,6 @@
use pathfinder_geometry::vector::vec2f;
use warp_core::ui::{self, appearance::Appearance, color::blend::Blend as _};
use warpui::{
use galaxy_core::ui::{self, appearance::Appearance, color::blend::Blend as _};
use galaxyui::{
elements::{
Align, ChildView, ConstrainedBox, Container, CornerRadius, CrossAxisAlignment, Flex, Icon,
MainAxisAlignment, MainAxisSize, MouseStateHandle, ParentElement as _, Radius,
@@ -34,7 +34,7 @@ use crate::{
};
pub fn init(app: &mut AppContext) {
use warpui::keymap::macros::*;
use galaxyui::keymap::macros::*;
app.register_editable_bindings([EditableBinding::new(
"workspace:new_tab",
@@ -229,7 +229,7 @@ impl GetStartedView {
.finish(),
appearance
.ui_builder()
.paragraph("Welcome to Warp")
.paragraph("Welcome to Galaxy AI")
.with_style(UiComponentStyles {
font_size: Some(20.),
..Default::default()
@@ -286,7 +286,7 @@ impl GetStartedView {
keybinding_name_to_display_string("workspace:new_tab", app)
.unwrap_or_default()
),
ui::Icon::Terminal.to_warpui_icon(theme.foreground()),
ui::Icon::Terminal.to_galaxyui_icon(theme.foreground()),
MainAxisSize::Min,
MainAxisAlignment::Center,
vec2f(16., 16.),
@@ -2,8 +2,8 @@ use std::{collections::HashMap, ffi::OsString, path::PathBuf, sync::Arc};
use shell_words::quote as shell_quote;
use uuid::Uuid;
use warp_cli::agent::Harness;
use warp_managed_secrets::ManagedSecretValue;
use galaxy_cli::agent::Harness;
use galaxy_managed_secrets::ManagedSecretValue;
use crate::ai::{
agent_sdk::{
@@ -1,4 +1,4 @@
use warp_cli::agent::Harness;
use galaxy_cli::agent::Harness;
use super::{
build_local_claude_child_command, build_local_opencode_child_command,
+6 -6
View File
@@ -55,8 +55,8 @@ use crate::{
};
use serde::{Deserialize, Serialize};
use url::Url;
use warp_core::HostId;
use warpui::{
use galaxy_core::HostId;
use galaxyui::{
elements::{DispatchEventResult, EventHandler, MouseInBehavior},
presenter::ChildView,
Action, AppContext, Element, Entity, EntityId, ModelContext, ModelHandle, SingletonEntity,
@@ -381,7 +381,7 @@ impl PaneId {
pub(super) fn deferred_placeholder_pane_id() -> Self {
Self(IPaneId {
pane_type: IPaneType::DeferredPlaceholder,
pane_view_id: warpui::EntityId::new(),
pane_view_id: galaxyui::EntityId::new(),
})
}
@@ -390,7 +390,7 @@ impl PaneId {
pub fn dummy_pane_id() -> Self {
Self(IPaneId {
pane_type: IPaneType::Dummy,
pane_view_id: warpui::EntityId::new(),
pane_view_id: galaxyui::EntityId::new(),
})
}
@@ -495,9 +495,9 @@ impl PaneId {
IPaneType::Welcome => {
ChildView::<PaneView<WelcomeView>>::with_id(self.0.pane_view_id).finish()
}
IPaneType::DeferredPlaceholder => warpui::elements::Empty::new().finish(),
IPaneType::DeferredPlaceholder => galaxyui::elements::Empty::new().finish(),
#[cfg(test)]
IPaneType::Dummy => warpui::elements::Empty::new().finish(),
IPaneType::Dummy => galaxyui::elements::Empty::new().finish(),
};
if *PaneSettings::as_ref(app).focus_panes_on_hover {
element = EventHandler::new(element)
+1 -1
View File
@@ -1,4 +1,4 @@
use warpui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle};
use crate::app_state::LeafContents;
use crate::server::network_log_pane_manager::NetworkLogPaneManager;
+1 -1
View File
@@ -2,7 +2,7 @@ use anyhow::Context;
use std::sync::Arc;
use url::Url;
use warpui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use crate::{
app_state::{LeafContents, NotebookPaneSnapshot},
+1 -1
View File
@@ -1,4 +1,4 @@
use warpui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle, WindowId};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, View, ViewContext, ViewHandle, WindowId};
use crate::{
app_state::{LeafContents, SettingsPaneSnapshot},
+3 -3
View File
@@ -5,10 +5,10 @@ use std::{collections::HashMap, sync::mpsc::SyncSender};
use base64::{engine::general_purpose::STANDARD as BASE64_STANDARD, Engine as _};
use url::Url;
use warp_cli::agent::Harness;
use galaxy_cli::agent::Harness;
use warp_multi_agent_api as multi_agent_api;
use warpui::{
use galaxyui::{
AppContext, EntityId, ModelHandle, SingletonEntity, ViewContext, ViewHandle, WindowId,
};
@@ -58,7 +58,7 @@ use crate::ai::blocklist::BlocklistAIHistoryEvent;
#[cfg(not(target_family = "wasm"))]
use crate::server::server_api::ServerApiProvider;
use warp_core::execution_mode::AppExecutionMode;
use galaxy_core::execution_mode::AppExecutionMode;
#[cfg(not(target_family = "wasm"))]
use super::local_harness_launch::{prepare_local_harness_child_launch, PreparedLocalHarnessLaunch};
@@ -5,16 +5,16 @@ use crate::ui_components::icons::Icon;
use super::super::header_content::HeaderRenderContext;
use super::{ActionPayload, PaneHeaderAction};
use warp_core::ui::icons::ICON_DIMENSIONS;
use warp_core::ui::theme::Fill;
use warpui::elements::{
use galaxy_core::ui::icons::ICON_DIMENSIONS;
use galaxy_core::ui::theme::Fill;
use galaxyui::elements::{
Align, Clipped, ConstrainedBox, Container, CrossAxisAlignment, Flex, Hoverable,
MainAxisAlignment, MainAxisSize, MouseStateHandle, ParentElement, SavePosition, Shrinkable,
Text,
};
use warpui::text_layout::ClipConfig;
use warpui::ui_components::components::UiComponent;
use warpui::Element;
use galaxyui::text_layout::ClipConfig;
use galaxyui::ui_components::components::UiComponent;
use galaxyui::Element;
/// Horizontal padding applied inside each edge column of the three-column header.
pub const HEADER_EDGE_PADDING: f32 = 4.;
+3 -3
View File
@@ -29,8 +29,8 @@ use pathfinder_geometry::{
rect::RectF,
vector::{vec2f, Vector2F},
};
use warp_core::{features::FeatureFlag, settings::Setting};
use warpui::{
use galaxy_core::{features::FeatureFlag, settings::Setting};
use galaxyui::{
elements::{
AcceptedByDropTarget, Align, Border, ChildAnchor, Clipped, ConstrainedBox, Container,
CornerRadius, CrossAxisAlignment, Dismiss, Draggable, DraggableState, Empty, Flex,
@@ -766,7 +766,7 @@ impl<P: BackingView> View for PaneHeader<P> {
let element = match header_content {
HeaderContent::Standard(mut header) => {
// On mobile devices, always show icons since hover effects don't work with touch
if warpui::platform::is_mobile_device() {
if galaxyui::platform::is_mobile_device() {
header.options.always_show_icons = true;
}
self.render_standard_header(header, app)
@@ -1,6 +1,6 @@
use std::sync::Arc;
use warp_core::ui::appearance::Appearance;
use warpui::{
use galaxy_core::ui::appearance::Appearance;
use galaxyui::{
elements::Empty, platform::WindowStyle, App, AppContext, Element, Entity, TypedActionView,
View, ViewContext,
};
@@ -3,16 +3,16 @@
//! This is tightly coupled to the pane header so that different overlays (context menus, the
//! sharing dialog, and so on) are correctly displayed.
use warp_core::{features::FeatureFlag, ui::appearance::Appearance};
use warpui::{
use galaxy_core::{features::FeatureFlag, ui::appearance::Appearance};
use galaxyui::{
elements::{MouseStateHandle, ParentElement},
platform::Cursor,
ui_components::components::UiComponent,
AppContext, Element, ViewContext, ViewHandle,
};
use warp_core::ui::theme::Fill;
use warpui::elements::ConstrainedBox;
use galaxy_core::ui::theme::Fill;
use galaxyui::elements::ConstrainedBox;
use crate::{
drive::sharing::{
@@ -74,17 +74,17 @@ impl<P: BackingView> PaneHeader<P> {
&self.shared_content.sharing_dialog
}
pub fn has_shareable_object<C: warpui::ViewAsRef>(&self, ctx: &C) -> bool {
pub fn has_shareable_object<C: galaxyui::ViewAsRef>(&self, ctx: &C) -> bool {
self.sharing_dialog().as_ref(ctx).has_target()
}
pub fn has_shareable_shared_session<C: warpui::ViewAsRef>(&self, ctx: &C) -> bool {
pub fn has_shareable_shared_session<C: galaxyui::ViewAsRef>(&self, ctx: &C) -> bool {
self.sharing_dialog()
.as_ref(ctx)
.has_shared_session_target()
}
pub fn is_sharing_dialog_enabled<C: warpui::ViewAsRef>(&self, ctx: &C) -> bool {
pub fn is_sharing_dialog_enabled<C: galaxyui::ViewAsRef>(&self, ctx: &C) -> bool {
let sharing_enabled = self.has_shareable_object(ctx);
if self.has_shareable_shared_session(ctx) {
sharing_enabled && FeatureFlag::SessionSharingAcls.is_enabled()
@@ -3,8 +3,8 @@
//! This module provides the infrastructure for backing views to declaratively
//! specify their header content without worrying about draggable behavior.
use warp_core::ui::theme::Fill;
use warpui::{
use galaxy_core::ui::theme::Fill;
use galaxyui::{
elements::{DraggableState, MouseStateHandle},
fonts::Properties,
text_layout::ClipConfig,
+3 -3
View File
@@ -15,7 +15,7 @@ use super::{
};
use header::PaneHeader;
use warpui::{
use galaxyui::{
elements::{
Border, Container, DropTarget, DropTargetData, Flex, MainAxisSize, ParentElement,
SavePosition, Shrinkable,
@@ -37,7 +37,7 @@ pub use header_content::{
const HAS_SHARED_OBJECT_CONTEXT_KEY: &str = "PaneView_HasSharedObject";
pub fn init(app: &mut AppContext) {
use warpui::keymap::macros::*;
use galaxyui::keymap::macros::*;
app.register_editable_bindings([EditableBinding::new(
"pane:share_pane_contents",
@@ -425,7 +425,7 @@ impl<P: BackingView> View for PaneView<P> {
.finish()
}
fn keymap_context(&self, ctx: &AppContext) -> warpui::keymap::Context {
fn keymap_context(&self, ctx: &AppContext) -> galaxyui::keymap::Context {
let mut keymap_context = Self::default_keymap_context();
if self.header.as_ref(ctx).is_sharing_dialog_enabled(ctx) {
keymap_context.set.insert(HAS_SHARED_OBJECT_CONTEXT_KEY);
+4 -4
View File
@@ -1,6 +1,6 @@
use std::path::PathBuf;
use warpui::{AppContext, ModelHandle, View, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, View, ViewContext, ViewHandle};
use crate::{
app_state::LeafContents,
@@ -58,7 +58,7 @@ impl PaneContent for WelcomePane {
&self,
_group: &PaneGroup,
_detach_type: super::DetachType,
ctx: &mut warpui::ViewContext<PaneGroup>,
ctx: &mut galaxyui::ViewContext<PaneGroup>,
) {
let child = self.view.as_ref(ctx).child(ctx);
ctx.unsubscribe_to_view(&child);
@@ -76,11 +76,11 @@ impl PaneContent for WelcomePane {
}
}
fn has_application_focus(&self, ctx: &mut warpui::ViewContext<PaneGroup>) -> bool {
fn has_application_focus(&self, ctx: &mut galaxyui::ViewContext<PaneGroup>) -> bool {
self.view.is_self_or_child_focused(ctx)
}
fn focus(&self, ctx: &mut warpui::ViewContext<PaneGroup>) {
fn focus(&self, ctx: &mut galaxyui::ViewContext<PaneGroup>) {
self.view
.as_ref(ctx)
.child(ctx)
+8 -8
View File
@@ -3,15 +3,15 @@ use std::path::PathBuf;
use std::sync::Arc;
use itertools::Itertools as _;
use warp_core::context_flag::ContextFlag;
use warp_core::ui::appearance::Appearance;
use warpui::elements::{
use galaxy_core::context_flag::ContextFlag;
use galaxy_core::ui::appearance::Appearance;
use galaxyui::elements::{
Align, ChildView, ConstrainedBox, Container, CrossAxisAlignment, Flex, Icon, ParentElement,
};
use warpui::keymap::EditableBinding;
use warpui::platform::FilePickerConfiguration;
use warpui::ViewHandle;
use warpui::{
use galaxyui::keymap::EditableBinding;
use galaxyui::platform::FilePickerConfiguration;
use galaxyui::ViewHandle;
use galaxyui::{
AppContext, Element, Entity, ModelHandle, SingletonEntity as _, TypedActionView, View,
ViewContext, WindowId,
};
@@ -30,7 +30,7 @@ use crate::view_components::DismissibleToast;
use crate::workspace::{ToastStack, Workspace};
pub fn init(app: &mut AppContext) {
use warpui::keymap::macros::*;
use galaxyui::keymap::macros::*;
app.register_editable_bindings([
EditableBinding::new(
+1 -1
View File
@@ -16,7 +16,7 @@ use crate::{
use anyhow::Context;
use std::{collections::HashMap, sync::Arc};
use url::Url;
use warpui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
use galaxyui::{AppContext, ModelHandle, SingletonEntity, ViewContext, ViewHandle};
pub struct WorkflowPane {
view: ViewHandle<PaneView<WorkflowView>>,
+4 -4
View File
@@ -3,13 +3,13 @@ use pathfinder_geometry::rect::RectF;
use pathfinder_geometry::vector::Vector2F;
use std::collections::HashSet;
use std::{fmt, iter, mem};
use warpui::elements::{
use galaxyui::elements::{
ChildAnchor, Container, DispatchEventResult, Empty, OffsetPositioning, ParentAnchor,
ParentOffsetBounds, PositionedElementAnchor, PositionedElementOffsetBounds, SavePosition,
Stack,
};
use warpui::AppContext;
use warpui::{
use galaxyui::AppContext;
use galaxyui::{
elements::{
ConstrainedBox, Element, EventHandler, Flex, Hoverable, MouseStateHandle, ParentElement,
Rect, Shrinkable,
@@ -21,7 +21,7 @@ use warpui::{
use super::{ActivationReason, PaneGroup, PaneId};
use crate::pane_group::{get_minimum_pane_size, DraggedBorder, PaneGroupAction};
use crate::themes::theme::WarpTheme;
use warp_core::features::FeatureFlag;
use galaxy_core::features::FeatureFlag;
#[cfg(test)]
#[path = "tree_tests.rs"]
+3 -3
View File
@@ -7,9 +7,9 @@ use std::collections::HashMap;
use std::collections::HashSet;
use std::path::{Path, PathBuf};
#[cfg(feature = "local_fs")]
use warpui::{AppContext, SingletonEntity as _};
use warpui::{Entity, EntityId, ModelContext};
use warpui::{ModelHandle, ViewHandle};
use galaxyui::{AppContext, SingletonEntity as _};
use galaxyui::{Entity, EntityId, ModelContext};
use galaxyui::{ModelHandle, ViewHandle};
#[cfg(feature = "local_fs")]
use crate::code::file_tree::FileTreeView;
@@ -5,7 +5,7 @@ use std::fs;
use std::path::PathBuf;
use repo_metadata::repositories::DetectedRepositories;
use warpui::{App, EntityId};
use galaxyui::{App, EntityId};
use crate::pane_group::WorkingDirectoriesModel;
@@ -21,14 +21,14 @@ fn refresh_working_directories_collapses_subroots_to_nearest_repo_root() {
fs::create_dir_all(&repo_a).expect("create repo/a");
fs::create_dir_all(&repo_b).expect("create repo/b");
// Use dunce::canonicalize to match the behavior of warp_util::standardized_path::StandardizedPath and normalize_cwd,
// Use dunce::canonicalize to match the behavior of galaxy_util::standardized_path::StandardizedPath and normalize_cwd,
// which strip the Windows extended-length path prefix (\\?\) for consistent comparison.
let canonical_repo_root = dunce::canonicalize(&repo_root).expect("canonical repo root");
// Seed DetectedRepositories so get_root_for_path resolves to this repo.
detected_repos_handle.update(&mut app, |repos, _ctx| {
let canonical =
warp_util::standardized_path::StandardizedPath::from_local_canonicalized(
galaxy_util::standardized_path::StandardizedPath::from_local_canonicalized(
canonical_repo_root.as_path(),
)
.expect("canonicalized path");