);
// Stopping or restarting the box tears down the SAME per-user container that a
// running agent thread job executes in, so both actions are destructive and get
// a confirmation step. Start is safe and stays a plain button.
const ConfirmLifecycleButton = ({
icon,
label,
busy,
title,
description,
confirmLabel,
onConfirm,
}: {
icon: ReactNode;
label: string;
busy: boolean;
title: string;
description: string;
confirmLabel: string;
onConfirm: () => void;
}) => (
{title}{description}Cancel
{confirmLabel}
);
export const BoxStatusCard = ({
status,
pendingAction,
onAction,
}: {
status: BoxStatus | null | undefined;
pendingAction: LifecycleAction | null;
onAction: (action: LifecycleAction) => void;
}) => {
const loading = status === undefined;
const running = Boolean(status?.running);
const busy = pendingAction !== null;
return (
My Machine
{loading ? (
Checking…
) : running ? (
Running
) : (
Stopped
)}
{running ? (
<>
) : (
)
}
title='Stop this machine?'
description='Stopping the machine shuts down the container it runs in. Any agent thread job currently running in this machine will be interrupted and lose its in-progress work.'
confirmLabel='Stop machine'
onConfirm={() => onAction('stop')}
/>
) : (
)
}
title='Restart this machine?'
description='Restarting the machine recreates the container it runs in. Any agent thread job currently running in this machine will be interrupted and lose its in-progress work.'
confirmLabel='Restart machine'
onConfirm={() => onAction('restart')}
/>
>
) : (
)}