claude-mem-lite 3.19.0 → 3.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,7 @@
10
10
  "plugins": [
11
11
  {
12
12
  "name": "claude-mem-lite",
13
- "version": "3.19.0",
13
+ "version": "3.20.0",
14
14
  "source": "./",
15
15
  "description": "Persistent long-term memory for Claude Code via MCP — captures coding decisions, bugfixes, and context across sessions. Hybrid FTS5 + TF-IDF search with episode batching. Single SQLite DB, no external services. A lighter, lower-cost alternative to claude-mem (episode batching + a smaller model; cost savings are an internal estimate, not a measured benchmark)."
16
16
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem-lite",
3
- "version": "3.19.0",
3
+ "version": "3.20.0",
4
4
  "description": "Persistent long-term memory for Claude Code via MCP — captures coding decisions, bugfixes, and context across sessions. Hybrid FTS5 + TF-IDF search with episode batching. Single SQLite DB, no external services. A lighter, lower-cost alternative to claude-mem (episode batching + a smaller model; cost savings are an internal estimate, not a measured benchmark).",
5
5
  "author": {
6
6
  "name": "sdsrss"
package/hook-update.mjs CHANGED
@@ -387,18 +387,20 @@ export function validateExtractedTarball(sourceDir, expectedVersion, expectedNam
387
387
  }
388
388
 
389
389
  // ── Release signature verification (P1 supply-chain hardening) ──────────────
390
- // Embedded Ed25519 PUBLIC key (SPKI PEM). EMPTY = unconfigured verification is
391
- // INERT and auto-update behaves exactly as before. Activating it is a one-time
392
- // ops step (no private key ever ships in the repo):
393
- // 1. Generate a keypair (writes the PRIVATE key to a local file, prints PUBLIC):
394
- // node -e "const c=require('crypto');const{publicKey,privateKey}=c.generateKeyPairSync('ed25519');process.stdout.write(publicKey.export({type:'spki',format:'pem'}));require('fs').writeFileSync('release-signing-key.pem',privateKey.export({type:'pkcs8',format:'pem'}))"
395
- // 2. Paste the printed PUBLIC key between the backticks below.
396
- // 3. Add the PRIVATE key (release-signing-key.pem contents) as the GitHub
397
- // Actions secret RELEASE_SIGNING_KEY, then delete the local file.
398
- // NEVER commit the private key.
399
- // Once a signed release exists, clients verify it; unsigned/older releases still
400
- // install (opportunistic). Signer: scripts/sign-release.mjs. Core: lib/release-digest.mjs.
401
- const RELEASE_PUBLIC_KEY = '';
390
+ // Embedded Ed25519 PUBLIC key (SPKI PEM). ACTIVE since v3.20.0 auto-update now
391
+ // FAILS CLOSED: a release missing valid signature assets is refused (the matching
392
+ // private key is the GitHub Actions secret RELEASE_SIGNING_KEY; signer:
393
+ // scripts/sign-release.mjs; verifier core: lib/release-digest.mjs). The signature
394
+ // over v3.19.0's published manifest was verified against this key end-to-end
395
+ // before activation. The CLAUDE_MEM_SKIP_SIG_VERIFY env escape hatch still forces a
396
+ // skip. To ROTATE: generate a new keypair, set the new private key as the secret
397
+ // and ship one signed release with it BEFORE replacing the key below — embedding a
398
+ // key whose releases are not yet signed bricks auto-update (fail-closed on unsigned).
399
+ // Setting this back to '' reverts to opportunistic (install-unsigned) behavior.
400
+ const RELEASE_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
401
+ MCowBQYDK2VwAyEAau5x65mqsYxJU2cO2ORteueK71EuB4aphVZds8FOZKk=
402
+ -----END PUBLIC KEY-----
403
+ `;
402
404
  const MANIFEST_ASSET_NAME = 'release-manifest.json';
403
405
  const SIGNATURE_ASSET_NAME = 'release-manifest.json.sig';
404
406
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem-lite",
3
- "version": "3.19.0",
3
+ "version": "3.20.0",
4
4
  "description": "Persistent long-term memory for Claude Code via MCP — captures coding decisions, bugfixes, and context across sessions. Hybrid FTS5 + TF-IDF search with episode batching. Single SQLite DB, no external services. A lighter, lower-cost alternative to claude-mem (episode batching + a smaller model; cost savings are an internal estimate, not a measured benchmark).",
5
5
  "type": "module",
6
6
  "packageManager": "npm@10.9.2",