Fix gateway bot Claude Code cwd so MCP tools are discovered
In gateway mode the bot's Claude Code CLI was spawned with cwd set to a nonexistent project subdirectory (gateway_config_dir/project_name). This meant it couldn't find .mcp.json and had no MCP tools available. Now the bot uses the gateway config directory as cwd in gateway mode, where the auto-generated .mcp.json points to the gateway's MCP proxy. Also fixes cargo fmt formatting. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -114,7 +114,10 @@ impl BotContext {
|
|||||||
match client.post(&url).json(&body).send().await {
|
match client.post(&url).json(&body).send().await {
|
||||||
Ok(resp) if resp.status().is_success() => {
|
Ok(resp) if resp.status().is_success() => {
|
||||||
match resp.json::<serde_json::Value>().await {
|
match resp.json::<serde_json::Value>().await {
|
||||||
Ok(json) => json.get("response").and_then(|v| v.as_str()).map(String::from),
|
Ok(json) => json
|
||||||
|
.get("response")
|
||||||
|
.and_then(|v| v.as_str())
|
||||||
|
.map(String::from),
|
||||||
Err(e) => Some(format!("Failed to parse response from project server: {e}")),
|
Err(e) => Some(format!("Failed to parse response from project server: {e}")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -207,8 +207,10 @@ pub(super) async fn on_room_message(
|
|||||||
&& (crate::chat::commands::commands()
|
&& (crate::chat::commands::commands()
|
||||||
.iter()
|
.iter()
|
||||||
.any(|c| c.name == cmd)
|
.any(|c| c.name == cmd)
|
||||||
|| ["assign", "start", "delete", "rebuild", "rmtree", "htop", "timer"]
|
|| [
|
||||||
.contains(&cmd.as_str()));
|
"assign", "start", "delete", "rebuild", "rmtree", "htop", "timer",
|
||||||
|
]
|
||||||
|
.contains(&cmd.as_str()));
|
||||||
|
|
||||||
if is_known_command {
|
if is_known_command {
|
||||||
// Proxy to the active project server.
|
// Proxy to the active project server.
|
||||||
@@ -643,12 +645,18 @@ pub(super) async fn handle_message(
|
|||||||
let sent_any_chunk = Arc::new(AtomicBool::new(false));
|
let sent_any_chunk = Arc::new(AtomicBool::new(false));
|
||||||
let sent_any_chunk_for_callback = Arc::clone(&sent_any_chunk);
|
let sent_any_chunk_for_callback = Arc::clone(&sent_any_chunk);
|
||||||
|
|
||||||
// In gateway mode, run Claude Code in the active project's directory.
|
// In gateway mode, run Claude Code in the gateway config directory so it
|
||||||
let project_root_str = ctx
|
// picks up the `.mcp.json` that points to the gateway's MCP proxy endpoint.
|
||||||
.effective_project_root()
|
// The gateway proxies tool calls to the active project automatically.
|
||||||
.await
|
// In standalone mode, use the project root directly.
|
||||||
.to_string_lossy()
|
let project_root_str = if ctx.is_gateway() {
|
||||||
.to_string();
|
ctx.project_root.to_string_lossy().to_string()
|
||||||
|
} else {
|
||||||
|
ctx.effective_project_root()
|
||||||
|
.await
|
||||||
|
.to_string_lossy()
|
||||||
|
.to_string()
|
||||||
|
};
|
||||||
let chat_fut = provider.chat_stream(
|
let chat_fut = provider.chat_stream(
|
||||||
&prompt,
|
&prompt,
|
||||||
&project_root_str,
|
&project_root_str,
|
||||||
|
|||||||
Reference in New Issue
Block a user