From a0d742e83645b4474ca54f42bac3dc335e3d52a9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Mar 2026 21:20:21 +0000 Subject: [PATCH 1/2] Initial plan From 6a50c3bd1bb99efc4debb65fe845d96953fb83c3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Mar 2026 21:37:41 +0000 Subject: [PATCH 2/2] Sync upstream submodule to v2.1.77 and add --effort flag support Co-authored-by: KSemenenko <4385716+KSemenenko@users.noreply.github.com> --- .../Unit/ClaudeExecTests.cs | 74 +++++++++++++++++++ ClaudeCodeSharpSDK/Client/ClaudeThread.cs | 1 + ClaudeCodeSharpSDK/Client/ThreadOptions.cs | 10 +++ ClaudeCodeSharpSDK/Execution/ClaudeExec.cs | 7 ++ .../Execution/ClaudeExecArgs.cs | 2 + .../Internal/ClaudeCliValueExtensions.cs | 20 +++++ global.json | 2 +- submodules/anthropic-claude-code | 2 +- 8 files changed, 116 insertions(+), 2 deletions(-) diff --git a/ClaudeCodeSharpSDK.Tests/Unit/ClaudeExecTests.cs b/ClaudeCodeSharpSDK.Tests/Unit/ClaudeExecTests.cs index 5928fa3..7f35434 100644 --- a/ClaudeCodeSharpSDK.Tests/Unit/ClaudeExecTests.cs +++ b/ClaudeCodeSharpSDK.Tests/Unit/ClaudeExecTests.cs @@ -29,6 +29,11 @@ public class ClaudeExecTests private const string ExampleBaseUrl = "https://example.invalid"; private const string FeatureABeta = "feature-a"; private const string FeatureBBeta = "feature-b"; + private const string EffortFlag = "--effort"; + private const string EffortLow = "low"; + private const string EffortMedium = "medium"; + private const string EffortHigh = "high"; + private const string EffortAuto = "auto"; private const string FlagNotFoundMessagePrefix = "Flag '"; private const string FlagNotFoundMessageSuffix = "' was not found."; private const string HealthCheckInput = "Health check"; @@ -206,6 +211,75 @@ public async Task BuildCommandArgs_WithReservedAdditionalCliFlag_Throws() await Assert.That(exception!.Message).Contains(ReservedOutputFormatFlag); } + [Test] + public async Task BuildCommandArgs_WithEffortLow_SetsEffortFlag() + { + var exec = new ClaudeExec(executablePath: TestConstants.ClaudeExecutablePath); + + var commandArgs = exec.BuildCommandArgs(new ClaudeExecArgs + { + Input = SummarizeInput, + Effort = EffortLevel.Low, + }); + + await Assert.That(GetRequiredFlagValue(commandArgs, EffortFlag)).IsEqualTo(EffortLow); + } + + [Test] + public async Task BuildCommandArgs_WithEffortMedium_SetsEffortFlag() + { + var exec = new ClaudeExec(executablePath: TestConstants.ClaudeExecutablePath); + + var commandArgs = exec.BuildCommandArgs(new ClaudeExecArgs + { + Input = SummarizeInput, + Effort = EffortLevel.Medium, + }); + + await Assert.That(GetRequiredFlagValue(commandArgs, EffortFlag)).IsEqualTo(EffortMedium); + } + + [Test] + public async Task BuildCommandArgs_WithEffortHigh_SetsEffortFlag() + { + var exec = new ClaudeExec(executablePath: TestConstants.ClaudeExecutablePath); + + var commandArgs = exec.BuildCommandArgs(new ClaudeExecArgs + { + Input = SummarizeInput, + Effort = EffortLevel.High, + }); + + await Assert.That(GetRequiredFlagValue(commandArgs, EffortFlag)).IsEqualTo(EffortHigh); + } + + [Test] + public async Task BuildCommandArgs_WithEffortAuto_SetsEffortFlag() + { + var exec = new ClaudeExec(executablePath: TestConstants.ClaudeExecutablePath); + + var commandArgs = exec.BuildCommandArgs(new ClaudeExecArgs + { + Input = SummarizeInput, + Effort = EffortLevel.Auto, + }); + + await Assert.That(GetRequiredFlagValue(commandArgs, EffortFlag)).IsEqualTo(EffortAuto); + } + + [Test] + public async Task BuildCommandArgs_WithoutEffort_OmitsEffortFlag() + { + var exec = new ClaudeExec(executablePath: TestConstants.ClaudeExecutablePath); + + var commandArgs = exec.BuildCommandArgs(new ClaudeExecArgs + { + Input = SummarizeInput, + }); + + await Assert.That(commandArgs.Contains(EffortFlag)).IsFalse(); + } + private static JsonObject CreateBaseSettings() { return new JsonObject diff --git a/ClaudeCodeSharpSDK/Client/ClaudeThread.cs b/ClaudeCodeSharpSDK/Client/ClaudeThread.cs index c76b749..9c3bfd2 100644 --- a/ClaudeCodeSharpSDK/Client/ClaudeThread.cs +++ b/ClaudeCodeSharpSDK/Client/ClaudeThread.cs @@ -273,6 +273,7 @@ private async IAsyncEnumerable RunStreamedInternalAsync( BaseUrl = _options.BaseUrl, ApiKey = _options.ApiKey, Model = _threadOptions.Model, + Effort = _threadOptions.Effort, Agent = _threadOptions.Agent, FallbackModel = _threadOptions.FallbackModel, WorkingDirectory = _threadOptions.WorkingDirectory, diff --git a/ClaudeCodeSharpSDK/Client/ThreadOptions.cs b/ClaudeCodeSharpSDK/Client/ThreadOptions.cs index 214f35f..72fd1ae 100644 --- a/ClaudeCodeSharpSDK/Client/ThreadOptions.cs +++ b/ClaudeCodeSharpSDK/Client/ThreadOptions.cs @@ -2,6 +2,14 @@ namespace ManagedCode.ClaudeCodeSharpSDK.Client; +public enum EffortLevel +{ + Auto, + Low, + Medium, + High, +} + public enum PermissionMode { AcceptEdits, @@ -25,6 +33,8 @@ public sealed record ThreadOptions { public string? Model { get; init; } + public EffortLevel? Effort { get; init; } + public string? Agent { get; init; } public string? FallbackModel { get; init; } diff --git a/ClaudeCodeSharpSDK/Execution/ClaudeExec.cs b/ClaudeCodeSharpSDK/Execution/ClaudeExec.cs index 6ca9a81..1f77f6c 100644 --- a/ClaudeCodeSharpSDK/Execution/ClaudeExec.cs +++ b/ClaudeCodeSharpSDK/Execution/ClaudeExec.cs @@ -22,6 +22,7 @@ public sealed class ClaudeExec private const string IncludePartialMessagesFlag = "--include-partial-messages"; private const string ReplayUserMessagesFlag = "--replay-user-messages"; private const string ModelFlag = "--model"; + private const string EffortFlag = "--effort"; private const string AgentFlag = "--agent"; private const string FallbackModelFlag = "--fallback-model"; private const string PermissionModeFlag = "--permission-mode"; @@ -158,6 +159,12 @@ internal IReadOnlyList BuildCommandArgs(ClaudeExecArgs args) commandArgs.Add(args.Model); } + if (args.Effort.HasValue) + { + commandArgs.Add(EffortFlag); + commandArgs.Add(args.Effort.Value.ToCliValue()); + } + if (!string.IsNullOrWhiteSpace(args.Agent)) { commandArgs.Add(AgentFlag); diff --git a/ClaudeCodeSharpSDK/Execution/ClaudeExecArgs.cs b/ClaudeCodeSharpSDK/Execution/ClaudeExecArgs.cs index 700bdcf..d5ee4b8 100644 --- a/ClaudeCodeSharpSDK/Execution/ClaudeExecArgs.cs +++ b/ClaudeCodeSharpSDK/Execution/ClaudeExecArgs.cs @@ -13,6 +13,8 @@ public sealed record ClaudeExecArgs public string? Model { get; init; } + public EffortLevel? Effort { get; init; } + public string? Agent { get; init; } public string? FallbackModel { get; init; } diff --git a/ClaudeCodeSharpSDK/Internal/ClaudeCliValueExtensions.cs b/ClaudeCodeSharpSDK/Internal/ClaudeCliValueExtensions.cs index 3155bba..4dfe958 100644 --- a/ClaudeCodeSharpSDK/Internal/ClaudeCliValueExtensions.cs +++ b/ClaudeCodeSharpSDK/Internal/ClaudeCliValueExtensions.cs @@ -4,6 +4,14 @@ namespace ManagedCode.ClaudeCodeSharpSDK.Internal; internal static class ClaudeCliValueExtensions { + private static class EffortLevelValues + { + public const string Auto = "auto"; + public const string Low = "low"; + public const string Medium = "medium"; + public const string High = "high"; + } + private static class PermissionModeValues { public const string AcceptEdits = "acceptEdits"; @@ -21,6 +29,18 @@ private static class SettingSourceValues public const string Local = "local"; } + public static string ToCliValue(this EffortLevel effortLevel) + { + return effortLevel switch + { + EffortLevel.Auto => EffortLevelValues.Auto, + EffortLevel.Low => EffortLevelValues.Low, + EffortLevel.Medium => EffortLevelValues.Medium, + EffortLevel.High => EffortLevelValues.High, + _ => throw new ArgumentOutOfRangeException(nameof(effortLevel), effortLevel, null), + }; + } + public static string ToCliValue(this PermissionMode permissionMode) { return permissionMode switch diff --git a/global.json b/global.json index c335052..062772b 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "10.0.103", + "version": "10.0.102", "rollForward": "latestFeature" }, "test": { diff --git a/submodules/anthropic-claude-code b/submodules/anthropic-claude-code index da80366..079dc85 160000 --- a/submodules/anthropic-claude-code +++ b/submodules/anthropic-claude-code @@ -1 +1 @@ -Subproject commit da80366c484698e6370ad9e8abf121f33f8f79e0 +Subproject commit 079dc856c6c990de5be28e288939293905c154c1