first pass of merging in warp (doesn't build)
This commit is contained in:
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user