/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import React from 'react'; import { Box, Text } from 'ink'; import Gradient from 'ink-gradient'; import { Colors } from '../colors.js'; import { formatDuration } from '../utils/formatters.js'; import { useSessionStats } from '../contexts/SessionContext.js'; import { computeSessionStats } from '../utils/computeStats.js'; import { FormattedStats, StatRow, StatsColumn } from './Stats.js'; // --- Prop and Data Structures --- interface SessionSummaryDisplayProps { duration: string; } // --- Main Component --- export const SessionSummaryDisplay: React.FC = ({ duration, }) => { const { stats } = useSessionStats(); const { metrics } = stats; const computed = computeSessionStats(metrics); const cumulativeFormatted: FormattedStats = { inputTokens: Object.values(metrics.models).reduce( (acc, model) => acc + model.tokens.prompt, 0, ), outputTokens: Object.values(metrics.models).reduce( (acc, model) => acc + model.tokens.candidates, 0, ), toolUseTokens: Object.values(metrics.models).reduce( (acc, model) => acc + model.tokens.tool, 0, ), thoughtsTokens: Object.values(metrics.models).reduce( (acc, model) => acc + model.tokens.thoughts, 0, ), cachedTokens: Object.values(metrics.models).reduce( (acc, model) => acc + model.tokens.cached, 0, ), totalTokens: Object.values(metrics.models).reduce( (acc, model) => acc + model.tokens.total, 0, ), }; const totalRequests = Object.values(metrics.models).reduce( (acc, model) => acc + model.api.totalRequests, 0, ); const title = 'Agent powering down. Goodbye!'; return ( {Colors.GradientColors ? ( {title} ) : ( {title} )} ); };