Skip to content
Draft
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
29 changes: 29 additions & 0 deletions ClaudeCodeSharpSDK.Tests/Unit/ClaudeExecTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ public class ClaudeExecTests
private const string TmpDirectory = "/tmp";
private const string UserProjectSettingSources = "user,project";
private const string VerboseFlag = "--verbose";
private const string NameFlag = "--name";
private const string SessionDisplayName = "My review session";
private const string WriteToolName = "Write";
private static readonly string[] AdditionalDirectories = [RepoDirectory, TmpDirectory];
private static readonly string[] AllowedTools = [ReadToolName, WriteToolName];
Expand Down Expand Up @@ -159,6 +161,33 @@ public async Task BuildCommandArgs_RepeatsVarArgFlagsWithoutCommaPacking()
await Assert.That(GetAllFlagValues(commandArgs, BetasFlag)).IsEquivalentTo(BetaFlags);
}

[Test]
public async Task BuildCommandArgs_WithSessionName_IncludesNameFlag()
{
var exec = new ClaudeExec(executablePath: TestConstants.ClaudeExecutablePath);

var commandArgs = exec.BuildCommandArgs(new ClaudeExecArgs
{
Input = SummarizeInput,
SessionName = SessionDisplayName,
});

await Assert.That(GetRequiredFlagValue(commandArgs, NameFlag)).IsEqualTo(SessionDisplayName);
}

[Test]
public async Task BuildCommandArgs_WithoutSessionName_OmitsNameFlag()
{
var exec = new ClaudeExec(executablePath: TestConstants.ClaudeExecutablePath);

var commandArgs = exec.BuildCommandArgs(new ClaudeExecArgs
{
Input = SummarizeInput,
});

await Assert.That(commandArgs.Contains(NameFlag)).IsFalse();
}

[Test]
public async Task BuildEnvironment_IncludesAnthropicOverrides()
{
Expand Down
7 changes: 7 additions & 0 deletions ClaudeCodeSharpSDK/Execution/ClaudeExec.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public sealed class ClaudeExec
private const string BetasFlag = "--betas";
private const string AgentsFlag = "--agents";
private const string VerboseFlag = "--verbose";
private const string NameFlag = "--name";

private const string StreamJsonFormat = "stream-json";
private const string TextFormat = "text";
Expand Down Expand Up @@ -284,6 +285,12 @@ internal IReadOnlyList<string> BuildCommandArgs(ClaudeExecArgs args)
commandArgs.Add(JsonSerializer.Serialize(inlineAgents, ClaudeJsonSerializerContext.Default.DictionaryStringInlineAgentDefinition));
}

if (!string.IsNullOrWhiteSpace(args.SessionName))
{
commandArgs.Add(NameFlag);
commandArgs.Add(args.SessionName);
}

if (args.AdditionalCliArguments is not null)
{
foreach (var argument in args.AdditionalCliArguments)
Expand Down
2 changes: 2 additions & 0 deletions ClaudeCodeSharpSDK/Execution/ClaudeExecArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public sealed record ClaudeExecArgs

public bool ReplayUserMessages { get; init; }

public string? SessionName { get; init; }

public IReadOnlyList<string>? AdditionalCliArguments { get; init; }

public CancellationToken CancellationToken { get; init; } = CancellationToken.None;
Expand Down