/**
* SummaryRenderer - Renders the summary section at the end of context
*
* Handles rendering of the most recent session summary fields.
*/
import type { ContextConfig, Observation, SessionSummary } from '../types.js';
import { colors } from '../types.js';
import * as Markdown from '../formatters/MarkdownFormatter.js';
import * as Color from '../formatters/ColorFormatter.js';
/**
* Check if summary should be displayed
*/
export function shouldShowSummary(
config: ContextConfig,
mostRecentSummary: SessionSummary | undefined,
mostRecentObservation: Observation | undefined
): boolean {
if (!config.showLastSummary || !mostRecentSummary) {
return false;
}
const hasContent = !!(
mostRecentSummary.investigated ||
mostRecentSummary.learned ||
mostRecentSummary.completed ||
mostRecentSummary.next_steps
);
if (!hasContent) {
return false;
}
// Only show if summary is more recent than observations
if (mostRecentObservation && mostRecentSummary.created_at_epoch <= mostRecentObservation.created_at_epoch) {
return false;
}
return true;
}
/**
* Render summary fields
*/
export function renderSummaryFields(
summary: SessionSummary,
useColors: boolean
): string[] {
const output: string[] = [];
if (useColors) {
output.push(...Color.renderColorSummaryField('Investigated', summary.investigated, colors.blue));
output.push(...Color.renderColorSummaryField('Learned', summary.learned, colors.yellow));
output.push(...Color.renderColorSummaryField('Completed', summary.completed, colors.green));
output.push(...Color.renderColorSummaryField('Next Steps', summary.next_steps, colors.magenta));
} else {
output.push(...Markdown.renderMarkdownSummaryField('Investigated', summary.investigated));
output.push(...Markdown.renderMarkdownSummaryField('Learned', summary.learned));
output.push(...Markdown.renderMarkdownSummaryField('Completed', summary.completed));
output.push(...Markdown.renderMarkdownSummaryField('Next Steps', summary.next_steps));
}
return output;
}