/** * @license * Copyright 2025 Vybestack LLC * SPDX-License-Identifier: Apache-2.0 */ import type React from 'react'; import { Box, Text } from 'ink'; import { theme } from '../semantic-colors.js'; import { StatsDisplay } from './StatsDisplay.js'; interface SessionSummaryDisplayProps { duration: string; /** Canonical final snapshot cloned at quit time */ totalApiRequests?: number; totalTokens?: number; completeTokensPerMinute?: number; totalToolCalls?: number; } function hasSummaryData(props: SessionSummaryDisplayProps): boolean { return ( props.totalApiRequests !== undefined || props.totalTokens !== undefined || props.completeTokensPerMinute !== undefined || props.totalToolCalls !== undefined ); } export const SessionSummaryDisplay: React.FC = ( props, ) => { const { duration, totalApiRequests, totalTokens, completeTokensPerMinute, totalToolCalls, } = props; return ( <> {hasSummaryData(props) && ( Final Session Summary {totalApiRequests !== undefined && ( API Requests: {totalApiRequests.toLocaleString()} )} {totalTokens !== undefined && ( Total Tokens: {totalTokens.toLocaleString()} )} {completeTokensPerMinute !== undefined && ( Completed TPM:{' '} {Number.isFinite(completeTokensPerMinute) ? completeTokensPerMinute.toFixed(2) : '—'} )} {totalToolCalls !== undefined && ( Tool Calls: {totalToolCalls.toLocaleString()} )} )} ); };