first pass of merging in warp (doesn't build)

This commit is contained in:
Ryan Ward
2026-07-01 16:08:58 -05:00
parent 2f64909469
commit 4770ac06b5
3662 changed files with 414574 additions and 89772 deletions
@@ -1,16 +1,24 @@
#[cfg(not(target_family = "wasm"))]
use command::r#async::Command;
use std::path::PathBuf;
#[cfg(not(target_family = "wasm"))]
use std::process::Stdio;
use std::{path::PathBuf, sync::Arc, time::Duration};
use std::sync::Arc;
use std::time::Duration;
use chrono::Utc;
#[cfg(not(target_family = "wasm"))]
use command::r#async::Command;
use parking_lot::FairMutex;
use serde_json::json;
use galaxy_core::features::FeatureFlag;
use warpui::r#async::{FutureExt as AsyncFutureExt, SpawnedFutureHandle, Timer};
use warpui::{Entity, EntityId, ModelContext, ModelHandle, SingletonEntity};
use super::static_prompt_suggestions::static_suggested_query;
#[cfg(not(target_family = "wasm"))]
use crate::ai::agent::PassiveSuggestionTrigger;
use crate::ai::agent::{AIAgentExchangeId, CancellationReason};
use crate::ai::blocklist::controller::{
response_stream::ResponseStreamId, BlocklistAIController, BlocklistAIControllerEvent,
};
use crate::ai::blocklist::controller::response_stream::ResponseStreamId;
use crate::ai::blocklist::controller::{BlocklistAIController, BlocklistAIControllerEvent};
use crate::ai::blocklist::{
read_local_file_context, BlocklistAIHistoryModel, BlocklistAIPermissions,
};
@@ -26,17 +34,12 @@ use crate::server::telemetry::PromptSuggestionFallbackReason;
use crate::settings::AISettings;
use crate::terminal::event::{BlockType, UserBlockCompleted};
use crate::terminal::model::block::BlockId;
use crate::terminal::model::session::{active_session::ActiveSession, SessionType};
use crate::terminal::model::session::active_session::ActiveSession;
use crate::terminal::model::session::SessionType;
use crate::terminal::model::terminal_model::TerminalModel;
use crate::terminal::model_events::{ModelEvent, ModelEventDispatcher};
use crate::terminal::view::{AgentModePromptSuggestion, PromptSuggestion};
use crate::workspaces::user_workspaces::UserWorkspaces;
use chrono::Utc;
use galaxy_core::features::FeatureFlag;
use galaxyui::r#async::{FutureExt as AsyncFutureExt, SpawnedFutureHandle, Timer};
use galaxyui::{Entity, EntityId, ModelContext, ModelHandle, SingletonEntity};
use parking_lot::FairMutex;
use serde_json::json;
const NUM_TOP_BLOCK_LINES: usize = 100;
const NUM_BOTTOM_BLOCK_LINES: usize = 200;
@@ -87,10 +90,10 @@ impl PassiveSuggestionsModel {
terminal_view_id: EntityId,
ctx: &mut ModelContext<Self>,
) -> Self {
ctx.subscribe_to_model(model_event_dispatcher, |me, event, ctx| {
ctx.subscribe_to_model(model_event_dispatcher, |me, _, event, ctx| {
me.handle_model_event(event, ctx);
});
ctx.subscribe_to_model(&ai_controller, |me, event, _ctx| {
ctx.subscribe_to_model(&ai_controller, |me, _, event, _ctx| {
me.handle_controller_event(event, _ctx);
});
+29 -21
View File
@@ -2,13 +2,21 @@
use std::sync::Arc;
use ai::agent::action::{AIAgentActionType, FileEdit};
use ai::diff_validation::ParsedDiff;
use chrono::{DateTime, Utc};
use parking_lot::FairMutex;
use galaxy_core::features::FeatureFlag;
use warpui::r#async::SpawnedFutureHandle;
use warpui::{Entity, EntityId, ModelContext, ModelHandle, SingletonEntity};
use super::super::controller::{BlocklistAIController, BlocklistAIControllerEvent};
use crate::ai::agent::api::generate_multi_agent_output;
use crate::ai::agent::AIIdentifiers;
use crate::ai::agent::FileContext;
use crate::ai::agent::PassiveCodeDiffEntry;
use crate::ai::agent::PassiveSuggestionTrigger;
use crate::ai::agent::{conversation::AIConversationId, ShellCommandCompletedTrigger};
use crate::ai::agent::conversation::AIConversationId;
use crate::ai::agent::{
AIIdentifiers, FileContext, PassiveCodeDiffEntry, PassiveSuggestionTrigger,
ShellCommandCompletedTrigger,
};
use crate::ai::block_context::BlockContext;
use crate::ai::blocklist::inline_action::code_diff_view::FileDiff;
use crate::ai::blocklist::{
@@ -25,13 +33,6 @@ use crate::terminal::model::terminal_model::TerminalModel;
use crate::terminal::model_events::{ModelEvent, ModelEventDispatcher};
use crate::terminal::view::ambient_agent::AmbientAgentViewModel;
use crate::workspaces::user_workspaces::UserWorkspaces;
use ai::agent::action::{AIAgentActionType, FileEdit};
use ai::diff_validation::ParsedDiff;
use chrono::{DateTime, Utc};
use galaxy_core::features::FeatureFlag;
use galaxyui::r#async::SpawnedFutureHandle;
use galaxyui::{Entity, EntityId, ModelContext, ModelHandle, SingletonEntity};
use parking_lot::FairMutex;
cfg_if::cfg_if! {
if #[cfg(feature = "local_fs")] {
@@ -96,7 +97,7 @@ pub struct PassiveSuggestionsModel {
latest_request: Option<Request>,
pending_file_read_handle: Option<SpawnedFutureHandle>,
terminal_model: Arc<FairMutex<TerminalModel>>,
ambient_agent_view_model: ModelHandle<AmbientAgentViewModel>,
ambient_agent_view_model: Option<ModelHandle<AmbientAgentViewModel>>,
#[cfg_attr(not(feature = "local_fs"), allow(dead_code))]
terminal_view_id: EntityId,
@@ -110,14 +111,14 @@ impl PassiveSuggestionsModel {
terminal_model: Arc<FairMutex<TerminalModel>>,
ai_controller: ModelHandle<BlocklistAIController>,
model_event_dispatcher: &ModelHandle<ModelEventDispatcher>,
ambient_agent_view_model: ModelHandle<AmbientAgentViewModel>,
ambient_agent_view_model: Option<ModelHandle<AmbientAgentViewModel>>,
terminal_view_id: EntityId,
ctx: &mut ModelContext<Self>,
) -> Self {
ctx.subscribe_to_model(model_event_dispatcher, |me, event, ctx| {
ctx.subscribe_to_model(model_event_dispatcher, |me, _, event, ctx| {
me.handle_model_event(event, ctx);
});
ctx.subscribe_to_model(&ai_controller, |me, event, ctx| {
ctx.subscribe_to_model(&ai_controller, |me, _, event, ctx| {
me.handle_controller_event(event, ctx);
});
@@ -140,6 +141,12 @@ impl PassiveSuggestionsModel {
self.latest_request.take();
}
fn is_ambient_agent_session(&self, ctx: &ModelContext<Self>) -> bool {
self.ambient_agent_view_model
.as_ref()
.is_some_and(|model| model.as_ref(ctx).is_ambient_agent())
}
/// Sends a MAA request to generate passive suggestions.
///
/// As much as possible, this method avoids mutating the conversation data model;
@@ -239,7 +246,7 @@ impl PassiveSuggestionsModel {
}
// Suppress passive suggestions in cloud mode sessions.
if self.ambient_agent_view_model.as_ref(ctx).is_ambient_agent() {
if self.is_ambient_agent_session(ctx) {
return;
}
@@ -288,7 +295,7 @@ impl PassiveSuggestionsModel {
) {
self.abort_pending_requests(ctx);
// Suppress passive suggestions in cloud mode sessions.
if self.ambient_agent_view_model.as_ref(ctx).is_ambient_agent() {
if self.is_ambient_agent_session(ctx) {
return;
}
@@ -466,10 +473,11 @@ async fn extract_suggestion_from_stream(
ai::agent::convert::ConvertToAPITypeError,
>,
) -> Option<StreamExtractionResult> {
use crate::ai::agent::task::helper::MessageExt;
use futures_util::StreamExt;
use warp_multi_agent_api as api;
use crate::ai::agent::task::helper::MessageExt;
let Ok(mut stream) = stream_result else {
return None;
};
@@ -548,9 +556,9 @@ async fn extract_suggestion_from_stream(
fn coalesce_messages_from_client_actions(
client_actions: &[warp_multi_agent_api::ClientAction],
) -> Vec<warp_multi_agent_api::Message> {
use field_mask::FieldMaskOperation;
use std::collections::HashMap;
use warp_multi_agent_api as api;
use field_mask::FieldMaskOperation;
use warp_multi_agent_api::client_action::Action;
let mut messages_by_id: HashMap<String, api::Message> = HashMap::new();
@@ -2,8 +2,6 @@ mod legacy;
mod maa;
mod static_prompt_suggestions;
use galaxyui::ModelHandle;
pub use legacy::{
PassiveSuggestionsEvent as LegacyPassiveSuggestionsEvent,
PassiveSuggestionsModel as LegacyPassiveSuggestionsModel,
@@ -12,6 +10,7 @@ pub use maa::{
PassiveSuggestionsEvent as MaaPassiveSuggestionsEvent,
PassiveSuggestionsModel as MaaPassiveSuggestionsModel,
};
use warpui::ModelHandle;
#[derive(Clone)]
pub struct PassiveSuggestionsModels {
@@ -1,5 +1,6 @@
use regex::Regex;
use std::sync::LazyLock;
use regex::Regex;
use uuid::Uuid;
use crate::terminal::view::PromptSuggestion;