fix(conpty): stop pinning --effort on hand-driven interactive sessions
Task, ad-hoc, planning, handoff and resume sessions now inherit the CLI default / the user's /effort setting. List-handler sessions keep their per-role effort.
This commit is contained in:
@@ -215,7 +215,7 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
var secondSpec = await svc.BuildForTaskAsync(taskId, CancellationToken.None);
|
||||
|
||||
Assert.Equal(_tempDir, secondSpec.Cwd);
|
||||
Assert.Equal(new[] { "--resume", firstSessionId }, ArgsAfterEffort(secondSpec));
|
||||
Assert.Equal(new[] { "--resume", firstSessionId }, HandDrivenArgs(secondSpec));
|
||||
|
||||
using var readCtx = _db.CreateContext();
|
||||
Assert.Null(await new WorktreeRepository(readCtx).GetByTaskIdAsync(taskId));
|
||||
@@ -352,7 +352,7 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
|
||||
Assert.Equal(_worktreeDir, spec.Cwd);
|
||||
Assert.Equal(_claudeStubPath, spec.Exe);
|
||||
Assert.Equal(new[] { "--resume", "sess-123" }, ArgsAfterEffort(spec));
|
||||
Assert.Equal(new[] { "--resume", "sess-123" }, HandDrivenArgs(spec));
|
||||
Assert.Equal(InteractiveLaunchSpecService.McpToolTimeoutMs, spec.Env["MCP_TOOL_TIMEOUT"]);
|
||||
}
|
||||
|
||||
@@ -368,7 +368,7 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
var svc = BuildService();
|
||||
var spec = await svc.BuildForTaskAsync(taskId, CancellationToken.None);
|
||||
|
||||
Assert.Equal(new[] { "--resume", "sess-kept" }, ArgsAfterEffort(spec));
|
||||
Assert.Equal(new[] { "--resume", "sess-kept" }, HandDrivenArgs(spec));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -427,7 +427,7 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
var svc = BuildService();
|
||||
var spec = await svc.BuildForTaskAsync(taskId, CancellationToken.None);
|
||||
|
||||
Assert.Equal(new[] { "--resume", "interactive-session-1" }, ArgsAfterEffort(spec));
|
||||
Assert.Equal(new[] { "--resume", "interactive-session-1" }, HandDrivenArgs(spec));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -447,7 +447,7 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
// start a new conversation.
|
||||
var secondSpec = await svc.BuildForTaskAsync(taskId, CancellationToken.None);
|
||||
|
||||
Assert.Equal(new[] { "--resume", firstSessionId }, ArgsAfterEffort(secondSpec));
|
||||
Assert.Equal(new[] { "--resume", firstSessionId }, HandDrivenArgs(secondSpec));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -544,7 +544,7 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
var spec = await svc.BuildForTaskAsync(taskId, CancellationToken.None);
|
||||
|
||||
// no brief -> no --add-dir, no positional arg -- but a session id is still pre-assigned
|
||||
var rest = ArgsAfterEffort(spec);
|
||||
var rest = HandDrivenArgs(spec);
|
||||
Assert.Equal("--session-id", rest[0]);
|
||||
Assert.Equal(rest[1], await ReadInteractiveSessionIdAsync(taskId));
|
||||
}
|
||||
@@ -582,7 +582,7 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
|
||||
Assert.Equal(_tempDir, spec.Cwd);
|
||||
Assert.Equal(_claudeStubPath, spec.Exe);
|
||||
Assert.Empty(ArgsAfterEffort(spec));
|
||||
Assert.Empty(HandDrivenArgs(spec));
|
||||
Assert.Equal(InteractiveLaunchSpecService.McpToolTimeoutMs, spec.Env["MCP_TOOL_TIMEOUT"]);
|
||||
Assert.Empty(_seeder.Calls);
|
||||
}
|
||||
@@ -761,33 +761,28 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
|
||||
// ── Merge helper ──
|
||||
|
||||
/// Every ConPTY spec now leads with `--effort <level>` from the per-model preset (the seeded
|
||||
/// settings row has no overrides, so the shipped default for the default model applies).
|
||||
/// Asserts that pair and returns the rest of the args for the test's own comparison.
|
||||
private static string[] ArgsAfterEffort(LaunchSpec spec)
|
||||
/// Hand-driven ConPTY specs never pass `--effort` -- the CLI's own default (or the user's
|
||||
/// /effort setting) applies. Asserts that and returns the args for the test's own comparison.
|
||||
private static string[] HandDrivenArgs(LaunchSpec spec)
|
||||
{
|
||||
var args = spec.Args.ToList();
|
||||
Assert.Equal("--effort", args[0]);
|
||||
Assert.Equal(ModelPresets.For(ModelPresets.Defaults, ModelRegistry.DefaultAlias).Effort, args[1]);
|
||||
return args.Skip(2).ToArray();
|
||||
Assert.DoesNotContain("--effort", spec.Args);
|
||||
return spec.Args.ToArray();
|
||||
}
|
||||
|
||||
/// A fresh (never-resumed) task with a title/description produces
|
||||
/// `--add-dir <sessionDir> --effort <level> --session-id <guid> <kickoff>` -- the brief
|
||||
/// `--add-dir <sessionDir> --session-id <guid> <kickoff>` -- the brief
|
||||
/// travels via the file at <sessionDir>/brief.md, never as a raw CLI argument. Asserts that
|
||||
/// exact shape and returns (sessionDir, briefPath, kickoff, sessionId) for the test's own
|
||||
/// checks. Cleanup happens via `_seededTaskIds` in Dispose (the session dir is keyed by task id).
|
||||
private static (string SessionDir, string BriefPath, string Kickoff, string SessionId) ParseFreshTaskArgs(LaunchSpec spec)
|
||||
{
|
||||
var args = spec.Args.ToList();
|
||||
Assert.Equal(7, args.Count);
|
||||
Assert.Equal(5, args.Count);
|
||||
Assert.Equal("--add-dir", args[0]);
|
||||
var sessionDir = args[1];
|
||||
Assert.Equal("--effort", args[2]);
|
||||
Assert.Equal(ModelPresets.For(ModelPresets.Defaults, ModelRegistry.DefaultAlias).Effort, args[3]);
|
||||
Assert.Equal("--session-id", args[4]);
|
||||
var sessionId = args[5];
|
||||
var kickoff = args[6];
|
||||
Assert.Equal("--session-id", args[2]);
|
||||
var sessionId = args[3];
|
||||
var kickoff = args[4];
|
||||
|
||||
var briefPath = Path.Combine(sessionDir, "brief.md");
|
||||
return (sessionDir, briefPath, kickoff, sessionId);
|
||||
@@ -1562,7 +1557,7 @@ public sealed class InteractiveLaunchSpecServiceTests : IDisposable
|
||||
|
||||
var spec = BuildService().BuildPlanningResume(ctx);
|
||||
|
||||
var args = ArgsAfterEffort(spec);
|
||||
var args = HandDrivenArgs(spec);
|
||||
Assert.Equal("--permission-mode", args[0]);
|
||||
Assert.Equal("default", args[1]);
|
||||
Assert.Equal("--allowedTools", args[2]);
|
||||
|
||||
Reference in New Issue
Block a user