generated from nhcarrigan/template
chore: CLI v2.1.75–v2.1.80 audit and support (#223–#232) #233
@@ -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)]
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user