feat(settings): default permission mode to auto and surface it in UI

Replaces "bypassPermissions" with "auto" as the default for new installs
and adds "auto" as the first option in the settings dropdown. Existing
rows keep their stored value; ClaudeArgsBuilder still maps the legacy
"bypassPermissions" -> "auto" at dispatch time.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-04-25 10:11:02 +02:00
parent 7f96ae9508
commit 14cc9fb891
3 changed files with 6 additions and 6 deletions

View File

@@ -9,7 +9,7 @@ public sealed class AppSettingsEntity
public string DefaultClaudeInstructions { get; set; } = string.Empty; public string DefaultClaudeInstructions { get; set; } = string.Empty;
public string DefaultModel { get; set; } = "sonnet"; public string DefaultModel { get; set; } = "sonnet";
public int DefaultMaxTurns { get; set; } = 100; public int DefaultMaxTurns { get; set; } = 100;
public string DefaultPermissionMode { get; set; } = "bypassPermissions"; public string DefaultPermissionMode { get; set; } = "auto";
public string WorktreeStrategy { get; set; } = "sibling"; public string WorktreeStrategy { get; set; } = "sibling";
public string? CentralWorktreeRoot { get; set; } public string? CentralWorktreeRoot { get; set; }

View File

@@ -36,7 +36,7 @@ public sealed class AppSettingsRepository
row.DefaultModel = string.IsNullOrWhiteSpace(updated.DefaultModel) ? "sonnet" : updated.DefaultModel; row.DefaultModel = string.IsNullOrWhiteSpace(updated.DefaultModel) ? "sonnet" : updated.DefaultModel;
row.DefaultMaxTurns = updated.DefaultMaxTurns; row.DefaultMaxTurns = updated.DefaultMaxTurns;
row.DefaultPermissionMode = string.IsNullOrWhiteSpace(updated.DefaultPermissionMode) row.DefaultPermissionMode = string.IsNullOrWhiteSpace(updated.DefaultPermissionMode)
? "bypassPermissions" : updated.DefaultPermissionMode; ? "auto" : updated.DefaultPermissionMode;
row.WorktreeStrategy = string.IsNullOrWhiteSpace(updated.WorktreeStrategy) ? "sibling" : updated.WorktreeStrategy; row.WorktreeStrategy = string.IsNullOrWhiteSpace(updated.WorktreeStrategy) ? "sibling" : updated.WorktreeStrategy;
row.CentralWorktreeRoot = string.IsNullOrWhiteSpace(updated.CentralWorktreeRoot) row.CentralWorktreeRoot = string.IsNullOrWhiteSpace(updated.CentralWorktreeRoot)
? null : updated.CentralWorktreeRoot; ? null : updated.CentralWorktreeRoot;

View File

@@ -15,7 +15,7 @@ public sealed partial class SettingsModalViewModel : ViewModelBase
[ObservableProperty] private string _defaultClaudeInstructions = ""; [ObservableProperty] private string _defaultClaudeInstructions = "";
[ObservableProperty] private string _defaultModel = "sonnet"; [ObservableProperty] private string _defaultModel = "sonnet";
[ObservableProperty] private int _defaultMaxTurns = 100; [ObservableProperty] private int _defaultMaxTurns = 100;
[ObservableProperty] private string _defaultPermissionMode = "bypassPermissions"; [ObservableProperty] private string _defaultPermissionMode = "auto";
[ObservableProperty] private string _worktreeStrategy = "sibling"; [ObservableProperty] private string _worktreeStrategy = "sibling";
[ObservableProperty] private string? _centralWorktreeRoot; [ObservableProperty] private string? _centralWorktreeRoot;
[ObservableProperty] private bool _worktreeAutoCleanupEnabled; [ObservableProperty] private bool _worktreeAutoCleanupEnabled;
@@ -28,7 +28,7 @@ public sealed partial class SettingsModalViewModel : ViewModelBase
public IReadOnlyList<string> Models { get; } = new[] { "opus", "sonnet", "haiku" }; public IReadOnlyList<string> Models { get; } = new[] { "opus", "sonnet", "haiku" };
public IReadOnlyList<string> PermissionModes { get; } = new[] public IReadOnlyList<string> PermissionModes { get; } = new[]
{ "bypassPermissions", "acceptEdits", "plan", "default" }; { "auto", "bypassPermissions", "acceptEdits", "plan", "default" };
public IReadOnlyList<string> WorktreeStrategies { get; } = new[] { "sibling", "central" }; public IReadOnlyList<string> WorktreeStrategies { get; } = new[] { "sibling", "central" };
public string AppVersion { get; } = public string AppVersion { get; } =
@@ -60,7 +60,7 @@ public sealed partial class SettingsModalViewModel : ViewModelBase
DefaultClaudeInstructions = dto.DefaultClaudeInstructions ?? ""; DefaultClaudeInstructions = dto.DefaultClaudeInstructions ?? "";
DefaultModel = dto.DefaultModel ?? "sonnet"; DefaultModel = dto.DefaultModel ?? "sonnet";
DefaultMaxTurns = dto.DefaultMaxTurns; DefaultMaxTurns = dto.DefaultMaxTurns;
DefaultPermissionMode = dto.DefaultPermissionMode ?? "bypassPermissions"; DefaultPermissionMode = dto.DefaultPermissionMode ?? "auto";
WorktreeStrategy = dto.WorktreeStrategy ?? "sibling"; WorktreeStrategy = dto.WorktreeStrategy ?? "sibling";
CentralWorktreeRoot = dto.CentralWorktreeRoot; CentralWorktreeRoot = dto.CentralWorktreeRoot;
WorktreeAutoCleanupEnabled = dto.WorktreeAutoCleanupEnabled; WorktreeAutoCleanupEnabled = dto.WorktreeAutoCleanupEnabled;
@@ -107,7 +107,7 @@ public sealed partial class SettingsModalViewModel : ViewModelBase
DefaultClaudeInstructions ?? "", DefaultClaudeInstructions ?? "",
DefaultModel ?? "sonnet", DefaultModel ?? "sonnet",
DefaultMaxTurns, DefaultMaxTurns,
DefaultPermissionMode ?? "bypassPermissions", DefaultPermissionMode ?? "auto",
WorktreeStrategy ?? "sibling", WorktreeStrategy ?? "sibling",
string.IsNullOrWhiteSpace(CentralWorktreeRoot) ? null : CentralWorktreeRoot, string.IsNullOrWhiteSpace(CentralWorktreeRoot) ? null : CentralWorktreeRoot,
WorktreeAutoCleanupEnabled, WorktreeAutoCleanupEnabled,