chore: CLI v2.1.75–v2.1.80 audit and support (#223–#232) #233

Merged
naomi merged 10 commits from chore/cli into main 2026-03-23 14:28:09 -07:00
9 changed files with 69 additions and 0 deletions
Showing only changes of commit 3c892b95cf - Show all commits
+3
View File
@@ -51,6 +51,9 @@ pub struct ClaudeStartOptions {
#[serde(default)]
pub model_overrides: Option<HashMap<String, String>>,
#[serde(default)]
pub session_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
+56
View File
@@ -287,6 +287,13 @@ impl WslBridge {
}
}
// Pass session name to Claude Code if specified
if let Some(ref name) = options.session_name {
if !name.is_empty() {
cmd.args(["--name", name]);
}
}
// Add worktree flag if requested
if options.use_worktree {
cmd.arg("--worktree");
@@ -466,6 +473,14 @@ impl WslBridge {
}
}
// Pass session name to Claude Code if specified
if let Some(ref name) = options.session_name {
if !name.is_empty() {
let escaped = name.replace('\'', "'\\''");
claude_cmd.push_str(&format!(" --name '{}'", escaped));
}
}
// Add worktree flag if requested
if options.use_worktree {
claude_cmd.push_str(" --worktree");
@@ -3577,4 +3592,45 @@ mod tests {
"Session stopped due to an unknown API error"
);
}
/// Build the --name argument string without executing a command (for testing)
#[cfg(test)]
fn build_session_name_arg(name: &str) -> Option<(String, String)> {
if name.is_empty() {
return None;
}
Some(("--name".to_string(), name.to_string()))
}
#[test]
fn test_e2e_session_name_passed_when_set() {
let name = "Sakura";
let result = build_session_name_arg(name);
assert!(result.is_some());
let (flag, value) = result.unwrap();
assert_eq!(flag, "--name");
assert_eq!(value, "Sakura");
}
#[test]
fn test_e2e_session_name_not_passed_when_none() {
let options = ClaudeStartOptions {
session_name: None,
..Default::default()
};
// When session_name is None, no --name arg should be produced
let has_name = options.session_name.as_deref().map(|n| !n.is_empty()).unwrap_or(false);
assert!(!has_name);
}
#[test]
fn test_e2e_session_name_not_passed_when_empty() {
let options = ClaudeStartOptions {
session_name: Some(String::new()),
..Default::default()
};
// When session_name is Some(""), no --name arg should be produced
let has_name = options.session_name.as_deref().map(|n| !n.is_empty()).unwrap_or(false);
assert!(!has_name);
}
}
+2
View File
@@ -71,6 +71,7 @@ async function changeDirectory(path: string): Promise<void> {
enable_claudeai_mcp_servers: config.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: config.auto_memory_directory || null,
model_overrides: config.model_overrides || null,
session_name: null,
},
});
@@ -152,6 +153,7 @@ async function startNewConversation(): Promise<void> {
enable_claudeai_mcp_servers: config.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: config.auto_memory_directory || null,
model_overrides: config.model_overrides || null,
session_name: null,
},
});
@@ -72,6 +72,7 @@
enable_claudeai_mcp_servers: config.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: config.auto_memory_directory || null,
model_overrides: config.model_overrides || null,
session_name: null,
},
});
+1
View File
@@ -406,6 +406,7 @@ User: ${formattedMessage}`;
enable_claudeai_mcp_servers: config.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: config.auto_memory_directory || null,
model_overrides: config.model_overrides || null,
session_name: null,
},
});
@@ -93,6 +93,7 @@
enable_claudeai_mcp_servers: config.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: config.auto_memory_directory || null,
model_overrides: config.model_overrides || null,
session_name: null,
},
});
+3
View File
@@ -160,6 +160,7 @@
if (!conversationId) {
throw new Error("No active conversation");
}
const activeConversationForName = get(conversationsStore.activeConversation);
await invoke("start_claude", {
conversationId,
options: {
@@ -177,6 +178,7 @@
enable_claudeai_mcp_servers: currentConfig.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: currentConfig.auto_memory_directory || null,
model_overrides: currentConfig.model_overrides || null,
session_name: activeConversationForName?.name || null,
},
});
@@ -338,6 +340,7 @@
enable_claudeai_mcp_servers: currentConfig.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: currentConfig.auto_memory_directory || null,
model_overrides: currentConfig.model_overrides || null,
session_name: null,
},
});
+1
View File
@@ -222,6 +222,7 @@
enable_claudeai_mcp_servers: cfg.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: cfg.auto_memory_directory || null,
model_overrides: cfg.model_overrides || null,
session_name: null,
},
});
} catch (error) {
@@ -112,6 +112,7 @@
enable_claudeai_mcp_servers: config.enable_claudeai_mcp_servers ?? true,
auto_memory_directory: config.auto_memory_directory || null,
model_overrides: config.model_overrides || null,
session_name: null,
},
});