import * as React from 'react' import { Box, Text } from '@anthropic/ink' import { isShutdownApproved, isShutdownRejected, isShutdownRequest, type ShutdownRejectedMessage, type ShutdownRequestMessage, } from '../../utils/teammateMailbox.js' type ShutdownRequestProps = { request: ShutdownRequestMessage } /** * Renders a shutdown request with a warning-colored border. */ export function ShutdownRequestDisplay({ request, }: ShutdownRequestProps): React.ReactNode { return ( Shutdown request from {request.from} {request.reason && ( Reason: {request.reason} )} ) } type ShutdownRejectedProps = { response: ShutdownRejectedMessage } /** * Renders a shutdown rejected message with a subtle (grey) border. */ export function ShutdownRejectedDisplay({ response, }: ShutdownRejectedProps): React.ReactNode { return ( Shutdown rejected by {response.from} Reason: {response.reason} Teammate is continuing to work. You may request shutdown again later. ) } /** * Try to parse and render a shutdown message from raw content. * Returns the rendered component if it's a shutdown message, null otherwise. */ export function tryRenderShutdownMessage( content: string, ): React.ReactNode | null { const request = isShutdownRequest(content) if (request) { return } // Shutdown approved is handled inline by the caller — skip it here if (isShutdownApproved(content)) { return null } const rejected = isShutdownRejected(content) if (rejected) { return } return null } /** * Get a brief summary text for a shutdown message. * Used in places like the inbox queue where we want a short description. * Returns null if the content is not a shutdown message. */ export function getShutdownMessageSummary(content: string): string | null { const request = isShutdownRequest(content) if (request) { return `[Shutdown Request from ${request.from}]${request.reason ? ` ${request.reason}` : ''}` } const approved = isShutdownApproved(content) if (approved) { return `[Shutdown Approved] ${approved.from} is now exiting` } const rejected = isShutdownRejected(content) if (rejected) { return `[Shutdown Rejected] ${rejected.from}: ${rejected.reason}` } return null }