Files
smartchat/ts_cli/components.message.ts
T

49 lines
1.3 KiB
TypeScript
Raw Normal View History

import { React, h, Box, Text } from './plugins.js';
export interface IChatMessage {
role: 'user' | 'assistant' | 'tool';
content: string;
toolName?: string;
toolInput?: string;
}
interface IMessageProps {
message: IChatMessage;
}
function truncate(text: string, maxLen: number): string {
if (text.length <= maxLen) return text;
return text.substring(0, maxLen) + '...';
}
export function Message({ message }: IMessageProps): React.ReactElement | null {
switch (message.role) {
case 'user':
return h(Box, { marginY: 0 },
h(Text, { bold: true, color: 'blue' }, 'You: '),
h(Text, null, message.content),
);
case 'assistant':
return h(Box, { marginY: 0 },
h(Text, { bold: true, color: 'green' }, 'Assistant: '),
h(Text, null, message.content),
);
case 'tool':
return h(Box, { marginY: 0, marginLeft: 2, flexDirection: 'column' as const },
h(Text, { dimColor: true },
`tool: ${message.toolName}${message.toolInput ? ` (${message.toolInput})` : ''}`,
),
message.content
? h(Box, { marginLeft: 2 },
h(Text, { dimColor: true }, truncate(message.content, 200)),
)
: null,
);
default:
return null;
}
}