Dashboard: admin-only Close session / Kill worker

Add IDashboardSessionAdminService (Admin-role gate, friendly errors,
audit logging) wrapping a new ISessionManager.KillWorkerAsync that
skips graceful shutdown and cleans up registry/metrics. Sessions,
Workers, and SessionDetails pages render Close / Kill buttons only
when CanManage; the service re-checks the role on every call so
forged clicks return Unauthenticated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Joseph Doherty
2026-05-24 07:10:32 -04:00
parent 8a0c59d7e8
commit c5e7479ee4
15 changed files with 750 additions and 1 deletions
@@ -49,6 +49,19 @@ public interface ISessionManager
string sessionId,
CancellationToken cancellationToken);
/// <summary>
/// Forcefully terminates a session's worker without attempting graceful shutdown,
/// transitions the session to Closed, and removes it from the registry.
/// </summary>
/// <param name="sessionId">Identifier of the session whose worker to kill.</param>
/// <param name="reason">Reason for killing the worker (recorded in logs/audit).</param>
/// <param name="cancellationToken">Token to cancel the asynchronous operation.</param>
/// <returns>The result of closing the session.</returns>
Task<SessionCloseResult> KillWorkerAsync(
string sessionId,
string reason,
CancellationToken cancellationToken);
/// <summary>Closes all sessions with expired leases at the specified time.</summary>
/// <param name="now">The current time to evaluate expiration against.</param>
/// <param name="cancellationToken">Token to cancel the asynchronous operation.</param>