Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x | /**
* Session-status display mapping. Sessions use a different status vocabulary than
* tasks (running / stopped / suspended / idle / hibernating / ...), so this maps
* a session status to a theme CSS-variable name and a human label. Shared by
* `SessionNode` (card accent + label) and `CoordinationGraph` (MiniMap color) so
* the two stay consistent.
*
* @module
*/
/** Capitalize the first letter of a status string for display. */
export function capitalize(value: string): string {
return value.length > 0 ? value.charAt(0).toUpperCase() + value.slice(1) : value;
}
/** A session-status visual: a theme CSS-variable name plus a display label. */
export interface SessionStatusStyle {
/** Theme CSS variable name, e.g. `--accent-green`. */
varName: string;
/** Human-readable status label. */
label: string;
}
/** Theme CSS-variable names this mapping can produce (for batch color resolution). */
export const SESSION_STATUS_VAR_NAMES: readonly string[] = [
"--accent-green",
"--accent-yellow",
"--accent-red",
"--text-tertiary",
];
/** Map a session status (and external flag) to its visual style. */
export function sessionStatusStyle(status: string, external: boolean): SessionStatusStyle {
if (external) {
return { varName: "--text-tertiary", label: "External" };
}
switch (status) {
case "running":
return { varName: "--accent-green", label: "Running" };
case "idle":
case "suspended":
case "hibernating":
return { varName: "--accent-yellow", label: capitalize(status) };
case "failed":
case "interrupted":
return { varName: "--accent-red", label: capitalize(status) };
default:
// stopped, completed, unknown, etc.
return {
varName: "--text-tertiary",
label: status.length > 0 ? capitalize(status) : "Unknown",
};
}
}
|