Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions crates/goose-cli/src/commands/web.rs
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,14 @@ async fn process_message_streaming(
}

let provider = provider.unwrap();
session::persist_messages(&session_file, &messages, Some(provider.clone())).await?;
let working_dir = Some(std::env::current_dir()?);
session::persist_messages(
&session_file,
&messages,
Some(provider.clone()),
working_dir.clone(),
)
.await?;

// Create a session config
let session_config = SessionConfig {
Expand Down Expand Up @@ -503,7 +510,13 @@ async fn process_message_streaming(
let session_msgs = session_messages.lock().await;
session_msgs.clone()
};
session::persist_messages(&session_file, &current_messages, None).await?;
session::persist_messages(
&session_file,
&current_messages,
None,
working_dir.clone(),
)
.await?;
// Handle different message content types
for content in &message.content {
match content {
Expand Down
23 changes: 23 additions & 0 deletions crates/goose-cli/src/session/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -369,11 +369,16 @@ impl Session {

// Persist messages with provider for automatic description generation
if let Some(session_file) = &self.session_file {
let working_dir = Some(
std::env::current_dir().expect("failed to get current session working directory"),
);

session::persist_messages_with_schedule_id(
session_file,
&self.messages,
Some(provider),
self.scheduled_job_id.clone(),
working_dir,
)
.await?;
}
Expand Down Expand Up @@ -491,11 +496,17 @@ impl Session {

// Persist messages with provider for automatic description generation
if let Some(session_file) = &self.session_file {
let working_dir = Some(
std::env::current_dir()
.expect("failed to get current session working directory"),
);

session::persist_messages_with_schedule_id(
session_file,
&self.messages,
Some(provider),
self.scheduled_job_id.clone(),
working_dir,
)
.await?;
}
Expand Down Expand Up @@ -707,11 +718,13 @@ impl Session {

// Persist the summarized messages
if let Some(session_file) = &self.session_file {
let working_dir = std::env::current_dir().ok();
session::persist_messages_with_schedule_id(
session_file,
&self.messages,
Some(provider),
self.scheduled_job_id.clone(),
working_dir,
)
.await?;
}
Expand Down Expand Up @@ -891,11 +904,13 @@ impl Session {
));
push_message(&mut self.messages, response_message);
if let Some(session_file) = &self.session_file {
let working_dir = std::env::current_dir().ok();
session::persist_messages_with_schedule_id(
session_file,
&self.messages,
None,
self.scheduled_job_id.clone(),
working_dir,
)
.await?;
}
Expand Down Expand Up @@ -990,11 +1005,13 @@ impl Session {

// No need to update description on assistant messages
if let Some(session_file) = &self.session_file {
let working_dir = std::env::current_dir().ok();
session::persist_messages_with_schedule_id(
session_file,
&self.messages,
None,
self.scheduled_job_id.clone(),
working_dir,
)
.await?;
}
Expand Down Expand Up @@ -1207,11 +1224,13 @@ impl Session {

// No need for description update here
if let Some(session_file) = &self.session_file {
let working_dir = std::env::current_dir().ok();
session::persist_messages_with_schedule_id(
session_file,
&self.messages,
None,
self.scheduled_job_id.clone(),
working_dir,
)
.await?;
}
Expand All @@ -1224,11 +1243,13 @@ impl Session {

// No need for description update here
if let Some(session_file) = &self.session_file {
let working_dir = std::env::current_dir().ok();
session::persist_messages_with_schedule_id(
session_file,
&self.messages,
None,
self.scheduled_job_id.clone(),
working_dir,
)
.await?;
}
Expand All @@ -1246,11 +1267,13 @@ impl Session {

// No need for description update here
if let Some(session_file) = &self.session_file {
let working_dir = std::env::current_dir().ok();
session::persist_messages_with_schedule_id(
session_file,
&self.messages,
None,
self.scheduled_job_id.clone(),
working_dir,
)
.await?;
}
Expand Down
27 changes: 19 additions & 8 deletions crates/goose-server/src/routes/reply.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ async fn handler(
let stream = ReceiverStream::new(rx);

let messages = request.messages;
let session_working_dir = request.session_working_dir;
let session_working_dir = request.session_working_dir.clone();

let session_id = request
.session_id
Expand Down Expand Up @@ -181,7 +181,7 @@ async fn handler(
&messages,
Some(SessionConfig {
id: session::Identifier::Name(session_id.clone()),
working_dir: PathBuf::from(session_working_dir),
working_dir: PathBuf::from(&session_working_dir),
schedule_id: request.scheduled_job_id.clone(),
execution_mode: None,
max_turns: None,
Expand Down Expand Up @@ -297,8 +297,13 @@ async fn handler(
if all_messages.len() > saved_message_count {
let provider = Arc::clone(provider.as_ref().unwrap());
tokio::spawn(async move {
if let Err(e) =
session::persist_messages(&session_path, &all_messages, Some(provider)).await
if let Err(e) = session::persist_messages(
&session_path,
&all_messages,
Some(provider),
Some(PathBuf::from(&session_working_dir)),
)
.await
{
tracing::error!("Failed to store session history: {:?}", e);
}
Expand Down Expand Up @@ -337,7 +342,7 @@ async fn ask_handler(
) -> Result<Json<AskResponse>, StatusCode> {
verify_secret_key(&headers, &state)?;

let session_working_dir = request.session_working_dir;
let session_working_dir = request.session_working_dir.clone();

let session_id = request
.session_id
Expand All @@ -358,7 +363,7 @@ async fn ask_handler(
&messages,
Some(SessionConfig {
id: session::Identifier::Name(session_id.clone()),
working_dir: PathBuf::from(session_working_dir),
working_dir: PathBuf::from(&session_working_dir),
schedule_id: request.scheduled_job_id.clone(),
execution_mode: None,
max_turns: None,
Expand Down Expand Up @@ -420,9 +425,15 @@ async fn ask_handler(
let session_path_clone = session_path.clone();
let messages = all_messages.clone();
let provider = Arc::clone(provider.as_ref().unwrap());
let session_working_dir_clone = session_working_dir.clone();
tokio::spawn(async move {
if let Err(e) =
session::persist_messages(&session_path_clone, &messages, Some(provider)).await
if let Err(e) = session::persist_messages(
&session_path_clone,
&messages,
Some(provider),
Some(PathBuf::from(session_working_dir_clone)),
)
.await
{
tracing::error!("Failed to store session history: {:?}", e);
}
Expand Down
Loading
Loading