feat(usage): PowerUse-Zeitfenster + Handoff-Schwellwert als Settings
Drei neue app_settings-Spalten (Migration AddPowerUseWindow): power_use_window_start/end (HH:mm, lokal, nullable) und power_use_handoff_pct (NOT NULL DEFAULT 95, geclampt 50-99). Die Fensterlogik liegt als reine Funktion in PowerUseWindow (Contains/Normalize/IsOpen): beide Grenzen leer oder nur eine gesetzt = rund um die Uhr, Ende vor Start wrappt ueber Mitternacht, Grenzen halboffen. Geprueft wird in ComposeHandlerPromptAsync, also pro Phase zum Zeitpunkt des Prompt-Baus - die Uhr ist per Func<DateTime> injizierbar. Bedienung im Usage-Monitor neben dem PowerUse-Toggle (Commit auf Blur/Enter, ein Write fuer alle vier Felder); in Settings->General unsichtbar, aber load->save durchgereicht. Nebenbefund, gleicher Pfad: AppSettingsRepository.UpdateAsync kopiert Feld fuer Feld und hat ModelPresets, PowerUseEnabled und ListHandlerMaxHandoffs nie geschrieben - jeder Save dieser drei war still wirkungslos. Mit ergaenzt und per Round-trip-Test gepinnt.
This commit is contained in:
@@ -69,6 +69,17 @@ public sealed class AppSettingsEntity
|
||||
// run unattended. Composition lives in InteractiveLaunchSpecService.
|
||||
public bool PowerUseEnabled { get; set; }
|
||||
|
||||
// Optional local-time window (both `HH:mm`) narrowing when PowerUse applies, checked per phase
|
||||
// at prompt-build time. Both null (the default) = round the clock, byte-identical to the
|
||||
// pre-window behaviour; only one set counts as unset too. End before start wraps over midnight.
|
||||
// Semantics live in PowerUseWindow.
|
||||
public string? PowerUseWindowStart { get; set; }
|
||||
public string? PowerUseWindowEnd { get; set; }
|
||||
|
||||
// Percentage of the 5h usage window at which a PowerUse handler session is told to hand off
|
||||
// rather than start more work. Stored and displayed here; the consumer is the handoff prompt.
|
||||
public int PowerUseHandoffPct { get; set; } = 95;
|
||||
|
||||
// Server-side cap on a list-handler run's wait<->merge handoff chain (HandoffRoundTracker).
|
||||
// 4 = two full wait/merge cycles, the long-standing default. Raise it for a run meant to keep
|
||||
// going for hours. It exists to bound runaway handoff loops, so it must stay >= 1.
|
||||
|
||||
Reference in New Issue
Block a user