app_settings bekommt power_use_enabled (Master-Schalter, wird im Usage-Monitor gesetzt) und list_handler_max_handoffs (Default 4 = zwei Merge-Runden). list_config bekommt power_use_allowed als Opt-in pro Liste. Ein Handler-Run laeuft nur unbeaufsichtigt, wenn BEIDE Schalter gesetzt sind. Damit kann der globale Schalter ueber Nacht an bleiben, ohne dass der Handler einer nicht zugestimmten Liste sein Verhalten aendert. UpdateListConfigDto.PowerUseAllowed ist bewusst bool? (tri-state, null = gespeicherten Wert behalten), analog zu TicketProjectId: SetConfigAsync kopiert verbatim, ein non-nullable bool haette jedem fremden Writer erlaubt, das Opt-in per Auslassung zu widerrufen. Der Test dazu nagelt genau das fest. Migration ist drei reine ALTER TABLE ADD COLUMN, kein Table-Rebuild.
29 lines
1.3 KiB
C#
29 lines
1.3 KiB
C#
namespace ClaudeDo.Data.Models;
|
|
|
|
public sealed class ListConfigEntity
|
|
{
|
|
public required string ListId { get; init; }
|
|
public string? Model { get; set; }
|
|
public string? SystemPrompt { get; set; }
|
|
public string? AgentPath { get; set; }
|
|
public int? MaxTurns { get; set; }
|
|
public string? SessionSkills { get; set; }
|
|
public string? VerifyCommand { get; set; }
|
|
// Null = inherit AppSettingsEntity.DefaultPermissionMode. One of PermissionModeRegistry.Modes.
|
|
public string? PermissionMode { get; set; }
|
|
|
|
// Id des Projekts im externen Ticketsystem, aus dem diese Liste Tickets importiert.
|
|
// Null = nicht verknüpft. ⚠️ SetConfigAsync kopiert verbatim — jeder Writer muss dieses
|
|
// Feld mitführen, sonst setzt es sich still zurück.
|
|
public int? TicketProjectId { get; set; }
|
|
|
|
// Per-Liste-Opt-in für PowerUse. Ein Handler-Run läuft nur unattended, wenn BEIDES gesetzt ist:
|
|
// dieses Flag und AppSettingsEntity.PowerUseEnabled. Der globale Toggle bleibt damit gefahrlos
|
|
// an — eine Liste, die hier nicht zugestimmt hat, behält das interaktive Verhalten. Default
|
|
// false, also opt-in. ⚠️ Gleiche Falle wie TicketProjectId: SetConfigAsync kopiert verbatim.
|
|
public bool PowerUseAllowed { get; set; }
|
|
|
|
// Navigation property
|
|
public ListEntity List { get; set; } = null!;
|
|
}
|