From 2975f90f9dd13967d432665a24b81e7563136a16 Mon Sep 17 00:00:00 2001 From: mika kuns Date: Wed, 5 Aug 2026 20:21:05 +0200 Subject: [PATCH] feat(settings): make max-turns ceiling editable in General tab --- src/ClaudeDo.Localization/locales/de.json | 3 +++ src/ClaudeDo.Localization/locales/en.json | 3 +++ .../Modals/Settings/GeneralSettingsTabViewModel.cs | 7 ++++--- src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml | 8 ++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/ClaudeDo.Localization/locales/de.json b/src/ClaudeDo.Localization/locales/de.json index 2504b9f3..4d27956e 100644 --- a/src/ClaudeDo.Localization/locales/de.json +++ b/src/ClaudeDo.Localization/locales/de.json @@ -18,6 +18,9 @@ "effort": "Effort", "modelPresets": "Vorgaben pro Modell", "modelPresetsHint": "Effort und Durchlauf-Budget, mit denen eine Sitzung unter diesem Modell läuft. Overrides auf Listen- und Aufgabenebene gewinnen weiterhin.", + "maxTurnsCeiling": "Max. Durchläufe – Obergrenze", + "maxTurnsCeilingHint": "Harte Obergrenze, auf die jeder aufgelöste Max-Durchläufe-Wert geklemmt wird — Task-, Listen- und Modell-Einstellungen können sie nicht überschreiten.", + "maxTurnsCeilingInvalid": "Die Obergrenze für Max. Durchläufe muss mindestens 1 sein.", "permission": "Berechtigung", "maxParallelExecutions": "Max. parallele Ausführungen", "maxParallelExecutionsHint": "Wie viele Aufgaben aus der Warteschlange der Worker gleichzeitig ausführt.", diff --git a/src/ClaudeDo.Localization/locales/en.json b/src/ClaudeDo.Localization/locales/en.json index 3c9a44e1..7c196f97 100644 --- a/src/ClaudeDo.Localization/locales/en.json +++ b/src/ClaudeDo.Localization/locales/en.json @@ -18,6 +18,9 @@ "effort": "Effort", "modelPresets": "Per-model defaults", "modelPresetsHint": "Reasoning effort and turn budget used when a session runs under that model. List- and task-level max-turn overrides still win.", + "maxTurnsCeiling": "Max turns ceiling", + "maxTurnsCeilingHint": "Hard cap every resolved max-turns value is clamped to — task, list, and per-model settings can't exceed this.", + "maxTurnsCeilingInvalid": "Max turns ceiling must be at least 1.", "permission": "Permission", "maxParallelExecutions": "Max parallel executions", "maxParallelExecutionsHint": "How many queued tasks the worker runs at once.", diff --git a/src/ClaudeDo.Ui/ViewModels/Modals/Settings/GeneralSettingsTabViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Modals/Settings/GeneralSettingsTabViewModel.cs index 5b02d1f6..7eec2ecf 100644 --- a/src/ClaudeDo.Ui/ViewModels/Modals/Settings/GeneralSettingsTabViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Modals/Settings/GeneralSettingsTabViewModel.cs @@ -17,9 +17,8 @@ public sealed partial class GeneralSettingsTabViewModel : ViewModelBase [ObservableProperty] private string _defaultClaudeInstructions = ""; [ObservableProperty] private string _defaultModel = ModelRegistry.DefaultAlias; [ObservableProperty] private int _defaultMaxTurns = 40; - // Hard ceiling every resolved max-turns value is clamped to before a run starts. Not directly - // editable here yet — loaded and echoed back on save so it round-trips, and drives the clamp - // hints on the preset rows below and on AgentConfigEditorViewModel. + // Hard ceiling every resolved max-turns value is clamped to before a run starts. Drives the + // clamp hints on the preset rows below and on AgentConfigEditorViewModel. [ObservableProperty] private int _maxTurnsCeiling = 80; [ObservableProperty] private string _defaultPermissionMode = PermissionModeRegistry.DefaultMode; [ObservableProperty] private int _maxParallelExecutions = 1; @@ -97,6 +96,8 @@ public sealed partial class GeneralSettingsTabViewModel : ViewModelBase public string? Validate() { + if (MaxTurnsCeiling < 1) + return Loc.T("settings.general.maxTurnsCeilingInvalid"); if (MaxParallelExecutions < 1 || MaxParallelExecutions > 20) return "Max parallel executions must be between 1 and 20."; if (UsageGateFiveHourPct < 0 || UsageGateFiveHourPct > 100) diff --git a/src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml b/src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml index 3038bc66..2c58afc7 100644 --- a/src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml +++ b/src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml @@ -145,6 +145,14 @@ + + + + +