Skip to content

Commit b98a4f5

Browse files
committed
working_dir usage more clear in add_extension
1 parent d8d9bb7 commit b98a4f5

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

crates/goose/src/agents/extension_manager.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -485,10 +485,6 @@ impl ExtensionManager {
485485
return Ok(());
486486
}
487487

488-
// Resolve working_dir: explicit > current_dir
489-
let effective_working_dir =
490-
working_dir.unwrap_or_else(|| std::env::current_dir().unwrap_or_default());
491-
492488
let mut temp_dir = None;
493489

494490
let client: Box<dyn McpClientTrait> = match &config {
@@ -553,6 +549,9 @@ impl ExtensionManager {
553549
})
554550
};
555551

552+
let effective_working_dir = working_dir
553+
.clone()
554+
.unwrap_or_else(|| std::env::current_dir().unwrap_or_default());
556555
let client = child_process_client(
557556
command,
558557
timeout,
@@ -589,6 +588,9 @@ impl ExtensionManager {
589588
.arg(&normalized_name);
590589
});
591590

591+
let effective_working_dir = working_dir
592+
.clone()
593+
.unwrap_or_else(|| std::env::current_dir().unwrap_or_default());
592594
let client = child_process_client(
593595
command,
594596
timeout,
@@ -599,6 +601,8 @@ impl ExtensionManager {
599601
.await?;
600602
Box::new(client)
601603
} else {
604+
// Non-containerized builtin runs in-process via duplex channels.
605+
// Working directory is passed per-request via call_tool metadata, not here.
602606
let (server_read, client_write) = tokio::io::duplex(65536);
603607
let (client_read, server_write) = tokio::io::duplex(65536);
604608
extension_fn(server_read, server_write);
@@ -643,6 +647,10 @@ impl ExtensionManager {
643647
command.arg("python").arg(file_path.to_str().unwrap());
644648
});
645649

650+
// Compute working_dir for InlinePython (runs as child process via uvx)
651+
let effective_working_dir = working_dir
652+
.clone()
653+
.unwrap_or_else(|| std::env::current_dir().unwrap_or_default());
646654
let client = child_process_client(
647655
command,
648656
timeout,

0 commit comments

Comments
 (0)