Skip to content

Commit 50afd52

Browse files
committed
feat(ui,mem): enhance memory cards with pinning and date display
- Implement pin/unpin toggle with visual feedback - Show creation and update timestamps in card footer - Add pinned badge indicator for pinned memories - Include edit action button in memory controls - Style updates for pinned memory states
1 parent 328bb30 commit 50afd52

3 files changed

Lines changed: 26 additions & 5 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "opencode-mem",
3-
"version": "2.7.0",
3+
"version": "2.7.1",
44
"description": "OpenCode plugin that gives coding agents persistent memory using local vector database",
55
"type": "module",
66
"main": "dist/plugin.js",

src/services/client.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,11 @@ export class LocalMemoryClient {
210210
try {
211211
await this.initialize();
212212

213-
const { scope, hash } = extractScopeFromContainerTag(memoryId);
214-
const shards = shardManager.getAllShards(scope, hash);
213+
const userShards = shardManager.getAllShards("user", "");
214+
const projectShards = shardManager.getAllShards("project", "");
215+
const allShards = [...userShards, ...projectShards];
215216

216-
for (const shard of shards) {
217+
for (const shard of allShards) {
217218
const db = connectionManager.getConnection(shard.dbPath);
218219
const memory = vectorSearch.getMemoryById(db, memoryId);
219220

src/web/app.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ function groupMemories(items) {
170170
function renderCombinedCard(pair) {
171171
const { memory, prompt } = pair;
172172
const isSelected = state.selectedMemories.has(memory.id);
173+
const isPinned = memory.isPinned || false;
173174
const similarityHtml =
174175
memory.similarity !== undefined
175176
? `<span class="similarity-score">${Math.round(memory.similarity * 100)}%</span>`
@@ -180,8 +181,20 @@ function renderCombinedCard(pair) {
180181
? `<div class="tags-list">${memory.tags.map((t) => `<span class="tag-badge">${escapeHtml(t)}</span>`).join("")}</div>`
181182
: "";
182183

184+
const pinButton = isPinned
185+
? `<button class="btn-pin pinned" onclick="unpinMemory('${memory.id}')" title="Unpin"><i data-lucide="pin" class="icon icon-filled"></i></button>`
186+
: `<button class="btn-pin" onclick="pinMemory('${memory.id}')" title="Pin"><i data-lucide="pin" class="icon"></i></button>`;
187+
188+
const createdDate = formatDate(memory.createdAt);
189+
const updatedDate =
190+
memory.updatedAt && memory.updatedAt !== memory.createdAt ? formatDate(memory.updatedAt) : null;
191+
192+
const dateInfo = updatedDate
193+
? `<span>Created: ${createdDate}</span><span>Updated: ${updatedDate}</span>`
194+
: `<span>Created: ${createdDate}</span>`;
195+
183196
return `
184-
<div class="combined-card ${isSelected ? "selected" : ""}" data-id="${memory.id}">
197+
<div class="combined-card ${isSelected ? "selected" : ""} ${isPinned ? "pinned" : ""}" data-id="${memory.id}">
185198
<div class="combined-prompt-section">
186199
<div class="combined-header">
187200
<span class="badge badge-prompt">USER PROMPT</span>
@@ -201,16 +214,23 @@ function renderCombinedCard(pair) {
201214
<span class="badge badge-memory">MEMORY</span>
202215
${memory.memoryType ? `<span class="badge badge-type">${memory.memoryType}</span>` : ""}
203216
${similarityHtml}
217+
${isPinned ? '<span class="badge badge-pinned">PINNED</span>' : ""}
204218
<span class="memory-display-name">${escapeHtml(memory.displayName || memory.id)}</span>
205219
</div>
206220
<div class="memory-actions">
221+
${pinButton}
222+
<button class="btn-edit" onclick="editMemory('${memory.id}')"><i data-lucide="edit-3" class="icon"></i></button>
207223
<button class="btn-delete" onclick="deleteMemoryWithLink('${memory.id}', true)">
208224
<i data-lucide="trash-2" class="icon"></i> Delete Pair
209225
</button>
210226
</div>
211227
</div>
212228
${tagsHtml}
213229
<div class="memory-content markdown-content">${renderMarkdown(memory.content)}</div>
230+
<div class="memory-footer">
231+
${dateInfo}
232+
<span>ID: ${memory.id}</span>
233+
</div>
214234
</div>
215235
</div>
216236
`;

0 commit comments

Comments
 (0)