feat: surface memory file last-modified timestamps in MemoryBrowserPanel (#230)

Extends MemoryFileInfo with last_modified (Unix timestamp) populated via
fs::metadata on native platforms, and displays a formatted date in the
file list as secondary text.
This commit is contained in:
2026-03-20 10:19:27 -07:00
committed by Naomi Carrigan
parent 3f248f7ffa
commit 6945ebc998
2 changed files with 51 additions and 5 deletions
+34 -2
View File
@@ -14,6 +14,7 @@
interface MemoryFileInfo {
path: string;
heading: string | null;
last_modified?: string; // Unix timestamp in seconds as a string, optional for backwards compat
}
interface MemoryFilesResponse {
@@ -65,6 +66,16 @@
return file.heading ?? getFileName(file.path);
}
function formatLastModified(ts: string | undefined): string {
if (!ts) return "";
const date = new Date(Number(ts) * 1000);
return date.toLocaleDateString(undefined, {
year: "numeric",
month: "short",
day: "numeric",
});
}
async function sendMemoryCommand() {
const conversationId = get(claudeStore.activeConversationId);
if (!conversationId) return;
@@ -205,7 +216,12 @@
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
/>
</svg>
<span class="file-name">{getDisplayName(file)}</span>
<div class="file-info">
<span class="file-name">{getDisplayName(file)}</span>
{#if file.last_modified}
<span class="file-date">{formatLastModified(file.last_modified)}</span>
{/if}
</div>
</button>
{/each}
</div>
@@ -416,7 +432,7 @@
.file-item {
display: flex;
align-items: center;
align-items: flex-start;
gap: 0.75rem;
padding: 0.75rem 1rem;
background: var(--bg-secondary);
@@ -445,6 +461,13 @@
flex-shrink: 0;
}
.file-info {
display: flex;
flex-direction: column;
gap: 0.125rem;
overflow: hidden;
}
.file-name {
font-size: 0.875rem;
font-weight: 500;
@@ -453,6 +476,15 @@
white-space: nowrap;
}
.file-date {
font-size: 0.75rem;
color: var(--text-secondary);
}
.file-item.active .file-date {
color: rgba(255, 255, 255, 0.75);
}
.file-viewer {
display: flex;
flex-direction: column;