feat(cli): display timestamp in /chat list (#4733)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
This commit is contained in:
parent
107ce8afa3
commit
b1e0fb157b
|
@ -131,11 +131,34 @@ describe('chatCommand', () => {
|
||||||
const content = result?.content ?? '';
|
const content = result?.content ?? '';
|
||||||
expect(result?.type).toBe('message');
|
expect(result?.type).toBe('message');
|
||||||
expect(content).toContain('List of saved conversations:');
|
expect(content).toContain('List of saved conversations:');
|
||||||
|
const isoDate = date
|
||||||
|
.toISOString()
|
||||||
|
.match(/(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})/);
|
||||||
|
const formattedDate = isoDate ? `${isoDate[1]} ${isoDate[2]}` : '';
|
||||||
|
expect(content).toContain(formattedDate);
|
||||||
const index1 = content.indexOf('- \u001b[36mtest1\u001b[0m');
|
const index1 = content.indexOf('- \u001b[36mtest1\u001b[0m');
|
||||||
const index2 = content.indexOf('- \u001b[36mtest2\u001b[0m');
|
const index2 = content.indexOf('- \u001b[36mtest2\u001b[0m');
|
||||||
expect(index1).toBeGreaterThanOrEqual(0);
|
expect(index1).toBeGreaterThanOrEqual(0);
|
||||||
expect(index2).toBeGreaterThan(index1);
|
expect(index2).toBeGreaterThan(index1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should handle invalid date formats gracefully', async () => {
|
||||||
|
const fakeFiles = ['checkpoint-baddate.json'];
|
||||||
|
const badDate = {
|
||||||
|
toISOString: () => 'an-invalid-date-string',
|
||||||
|
} as Date;
|
||||||
|
|
||||||
|
mockFs.readdir.mockResolvedValue(fakeFiles);
|
||||||
|
mockFs.stat.mockResolvedValue({ mtime: badDate } as Stats);
|
||||||
|
|
||||||
|
const result = (await listCommand?.action?.(
|
||||||
|
mockContext,
|
||||||
|
'',
|
||||||
|
)) as MessageActionReturn;
|
||||||
|
|
||||||
|
const content = result?.content ?? '';
|
||||||
|
expect(content).toContain('(saved on Invalid Date)');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
describe('save subcommand', () => {
|
describe('save subcommand', () => {
|
||||||
let saveCommand: SlashCommand;
|
let saveCommand: SlashCommand;
|
||||||
|
|
|
@ -70,9 +70,17 @@ const listCommand: SlashCommand = {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const maxNameLength = Math.max(
|
||||||
|
...chatDetails.map((chat) => chat.name.length),
|
||||||
|
);
|
||||||
|
|
||||||
let message = 'List of saved conversations:\n\n';
|
let message = 'List of saved conversations:\n\n';
|
||||||
for (const chat of chatDetails) {
|
for (const chat of chatDetails) {
|
||||||
message += ` - \u001b[36m${chat.name}\u001b[0m\n`;
|
const paddedName = chat.name.padEnd(maxNameLength, ' ');
|
||||||
|
const isoString = chat.mtime.toISOString();
|
||||||
|
const match = isoString.match(/(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})/);
|
||||||
|
const formattedDate = match ? `${match[1]} ${match[2]}` : 'Invalid Date';
|
||||||
|
message += ` - \u001b[36m${paddedName}\u001b[0m \u001b[90m(saved on ${formattedDate})\u001b[0m\n`;
|
||||||
}
|
}
|
||||||
message += `\n\u001b[90mNote: Newest last, oldest first\u001b[0m`;
|
message += `\n\u001b[90mNote: Newest last, oldest first\u001b[0m`;
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Reference in New Issue