feat: expand Galaxy agent and remote tooling

Add Wormhole remote helpers, provider and agent improvements, filesystem diagnostics, model metadata support, and schema-aware settings IntelliSense.
This commit is contained in:
2026-08-23 13:55:47 -05:00
parent f17642fc62
commit 7c106eecd5
147 changed files with 2208 additions and 1514 deletions
@@ -1,14 +1,14 @@
//! Inline block view that asks the user whether they want to install
//! Warp's SSH extension on the remote host the shell just connected to,
//! Wormhole's remote helper on the host the shell just connected to,
//! or continue without installing (falling back to the existing
//! ControlMaster warpification path).
//! ControlMaster wormholing path).
//!
//! Designed from frame 6050:2448 of the Figma file
//! [Remote session initialization](https://www.figma.com/design/r0BO9cTZCK6pDE6qerg2K0/Remote-session-initialization).
//!
//! The view owns:
//! - a child [`KeyboardNavigableButtons`] handle for the two selectable
//! cards ("Install Warp's SSH extension" / "Continue without installing"),
//! cards ("Install Wormhole helper" / "Continue without installing"),
//! - the [`SessionId`] this prompt is scoped to (used for event forwarding),
//! - the current "Don't ask me this again" checked state (purely local to
//! this prompt instance; persisted to `ssh_extension_install_mode` only
@@ -37,7 +37,7 @@ use crate::ai::blocklist::inline_action::inline_action_header::{
};
use crate::server::telemetry::TelemetryEvent;
use crate::terminal::model::session::SessionId;
use crate::terminal::warpify::settings::{SshExtensionInstallMode, WarpifySettings};
use crate::terminal::wormhole::settings::{SshExtensionInstallMode, WormholeSettings};
use crate::ui_components::blended_colors;
use crate::{send_telemetry_from_ctx, Appearance};
@@ -48,14 +48,14 @@ pub enum SshRemoteServerChoiceViewAction {
Install,
Skip,
ToggleDoNotAskAgain,
OpenWarpifySettings,
OpenWormholeSettings,
}
#[derive(Clone, Debug)]
pub enum SshRemoteServerChoiceViewEvent {
Install,
Skip,
OpenWarpifySettings,
OpenWormholeSettings,
}
/// Choice block prompting the user to install the remote-server binary on the remote host or skip.
@@ -74,7 +74,7 @@ impl SshRemoteServerChoiceView {
let buttons = ctx.add_typed_action_view(|_| {
KeyboardNavigableButtons::new(vec![
rich_navigation_button(
"Install Galaxy's SSH extension".to_string(),
"Install Wormhole helper".to_string(),
Some(
"Install Galaxy's extension to enable agent features like file browsing, \
code review, and intelligent command completions in this session."
@@ -171,14 +171,16 @@ impl SshRemoteServerChoiceView {
.with_child(Container::new(checkbox_label).with_margin_left(4.).finish())
.finish();
// Right: "Manage Warpify settings" link.
// Right: "Manage Wormhole settings" link.
let manage_settings_link = appearance
.ui_builder()
.link(
"Manage Wormhole settings".into(),
None,
Some(Box::new(|ctx| {
ctx.dispatch_typed_action(SshRemoteServerChoiceViewAction::OpenWarpifySettings);
ctx.dispatch_typed_action(
SshRemoteServerChoiceViewAction::OpenWormholeSettings,
);
})),
self.manage_settings_mouse_state.clone(),
)
@@ -264,7 +266,7 @@ impl TypedActionView for SshRemoteServerChoiceView {
SshRemoteServerChoiceViewAction::Install => {
if self.do_not_ask_again {
let mode = SshExtensionInstallMode::AlwaysInstall;
WarpifySettings::handle(ctx).update(ctx, |settings, ctx| {
WormholeSettings::handle(ctx).update(ctx, |settings, ctx| {
if let Err(e) = settings.ssh_extension_install_mode.set_value(mode, ctx) {
log::error!("Failed to persist ssh_extension_install_mode: {e}");
}
@@ -281,7 +283,7 @@ impl TypedActionView for SshRemoteServerChoiceView {
SshRemoteServerChoiceViewAction::Skip => {
if self.do_not_ask_again {
let mode = SshExtensionInstallMode::NeverInstall;
WarpifySettings::handle(ctx).update(ctx, |settings, ctx| {
WormholeSettings::handle(ctx).update(ctx, |settings, ctx| {
if let Err(e) = settings.ssh_extension_install_mode.set_value(mode, ctx) {
log::error!("Failed to persist ssh_extension_install_mode: {e}");
}
@@ -305,8 +307,8 @@ impl TypedActionView for SshRemoteServerChoiceView {
);
ctx.notify();
}
SshRemoteServerChoiceViewAction::OpenWarpifySettings => {
ctx.emit(SshRemoteServerChoiceViewEvent::OpenWarpifySettings);
SshRemoteServerChoiceViewAction::OpenWormholeSettings => {
ctx.emit(SshRemoteServerChoiceViewEvent::OpenWormholeSettings);
}
}
}