Next camp refactor live (#5706)

This commit is contained in:
Zane
2025-11-21 14:10:34 -07:00
committed by GitHub
parent c1c772b267
commit d54a06afda
35 changed files with 1105 additions and 2601 deletions
-2
View File
@@ -805,9 +805,7 @@ impl Agent {
} else {
SessionManager::add_message(&session_config.id, &user_message).await?;
}
let session = SessionManager::get_session(&session_config.id, true).await?;
let conversation = session
.conversation
.clone()
+8 -6
View File
@@ -71,12 +71,14 @@ impl Agent {
}
});
let confirmation = Message::user().with_tool_confirmation_request(
request.id.clone(),
tool_call.name.to_string().clone(),
tool_call.arguments.clone().unwrap_or_default(),
security_message,
);
let confirmation = Message::assistant()
.with_tool_confirmation_request(
request.id.clone(),
tool_call.name.to_string().clone(),
tool_call.arguments.clone().unwrap_or_default(),
security_message,
)
.user_only();
yield confirmation;
let mut rx = self.confirmation_rx.lock().await;
@@ -307,6 +307,20 @@ impl SessionManager {
Self::instance().await?.import_session(json).await
}
pub async fn copy_session(session_id: &str, new_name: String) -> Result<Session> {
Self::instance()
.await?
.copy_session(session_id, new_name)
.await
}
pub async fn truncate_conversation(session_id: &str, timestamp: i64) -> Result<()> {
Self::instance()
.await?
.truncate_conversation(session_id, timestamp)
.await
}
pub async fn maybe_update_name(id: &str, provider: Arc<dyn Provider>) -> Result<()> {
let session = Self::get_session(id, true).await?;
@@ -1214,6 +1228,43 @@ impl SessionStorage {
self.get_session(&session.id, true).await
}
async fn copy_session(&self, session_id: &str, new_name: String) -> Result<Session> {
let original_session = self.get_session(session_id, true).await?;
let new_session = self
.create_session(
original_session.working_dir.clone(),
new_name,
original_session.session_type,
)
.await?;
let builder = SessionUpdateBuilder::new(new_session.id.clone())
.extension_data(original_session.extension_data)
.schedule_id(original_session.schedule_id)
.recipe(original_session.recipe)
.user_recipe_values(original_session.user_recipe_values);
self.apply_update(builder).await?;
if let Some(conversation) = original_session.conversation {
self.replace_conversation(&new_session.id, &conversation)
.await?;
}
self.get_session(&new_session.id, true).await
}
async fn truncate_conversation(&self, session_id: &str, timestamp: i64) -> Result<()> {
sqlx::query("DELETE FROM messages WHERE session_id = ? AND created_timestamp >= ?")
.bind(session_id)
.bind(timestamp)
.execute(&self.pool)
.await?;
Ok(())
}
async fn search_chat_history(
&self,
query: &str,