summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src')
-rw-r--r--packages/cli/src/ui/commands/chatCommand.test.ts23
-rw-r--r--packages/cli/src/ui/commands/chatCommand.ts10
2 files changed, 32 insertions, 1 deletions
diff --git a/packages/cli/src/ui/commands/chatCommand.test.ts b/packages/cli/src/ui/commands/chatCommand.test.ts
index 5318c330..0c98239a 100644
--- a/packages/cli/src/ui/commands/chatCommand.test.ts
+++ b/packages/cli/src/ui/commands/chatCommand.test.ts
@@ -131,11 +131,34 @@ describe('chatCommand', () => {
const content = result?.content ?? '';
expect(result?.type).toBe('message');
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 index2 = content.indexOf('- \u001b[36mtest2\u001b[0m');
expect(index1).toBeGreaterThanOrEqual(0);
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', () => {
let saveCommand: SlashCommand;
diff --git a/packages/cli/src/ui/commands/chatCommand.ts b/packages/cli/src/ui/commands/chatCommand.ts
index 2f669481..739097e3 100644
--- a/packages/cli/src/ui/commands/chatCommand.ts
+++ b/packages/cli/src/ui/commands/chatCommand.ts
@@ -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';
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`;
return {