🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

memoir-cli

Package Overview
Dependencies
Maintainers
1
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

memoir-cli - npm Package Compare versions

Comparing version
3.10.0
to
3.10.1
+1
-1
package.json
{
"name": "memoir-cli",
"version": "3.10.0",
"version": "3.10.1",
"mcpName": "io.github.camgitt/memoir",

@@ -5,0 +5,0 @@ "description": "Private, portable AI memory: synced across every coding tool and machine, end-to-end encrypted, free. One memory for Claude Code, Cursor, Copilot, Gemini + more — MCP-native, zero-knowledge, open source.",

@@ -336,2 +336,23 @@ // Session state: the canonical source of truth for "what are we working on"

}
// A tombstone is STICKY: once any machine marks an entry hidden, the merged
// result stays hidden, whatever the dates say.
//
// Without this, `hidden` is just another field on whichever copy has the
// newer date — so a machine that hasn't pulled the tombstone yet, holding an
// older un-hidden copy of the same text, resurrects it on its next
// merge/push. (The cleanup script sets `hidden` without touching `date`, so
// the tombstoned copy doesn't even win the date comparison.) Suppression has
// to be monotonic or it isn't suppression — you'd be re-hiding the same junk
// on every machine forever.
for (const [key, winner] of byText) {
if (winner.hidden) continue;
const tombstone = [...a, ...b].find(
(i) => i && i.text && i.text.trim().toLowerCase() === key && i.hidden
);
if (tombstone) {
byText.set(key, { ...winner, hidden: true, hidden_at: tombstone.hidden_at });
}
}
return Array.from(byText.values())

@@ -338,0 +359,0 @@ .sort((x, y) => new Date(y[dateField] || 0) - new Date(x[dateField] || 0))