@remem-ai/remem 0.5.97 → 0.5.104

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.
package/README.md CHANGED
@@ -23,5 +23,8 @@ Environment variables:
23
23
  - `REMEM_NPM_SKIP_DOWNLOAD=1`: skip binary download during npm install
24
24
  - `REMEM_NPM_BINARY=/path/to/remem`: run an explicit existing binary
25
25
 
26
- See the main project README for Claude Code and OpenAI Codex setup details:
27
- https://github.com/majiayu000/remem
26
+ See the product site and main project README for Claude Code, OpenAI Codex,
27
+ Codex CLI, and MCP setup details:
28
+
29
+ - https://majiayu000.github.io/remem/
30
+ - https://github.com/majiayu000/remem
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remem-ai/remem",
3
- "version": "0.5.97",
4
- "description": "Persistent memory for Claude Code and OpenAI Codex coding agents",
3
+ "version": "0.5.104",
4
+ "description": "Local-first coding agent memory for Claude Code and OpenAI Codex",
5
5
  "license": "MIT",
6
6
  "homepage": "https://majiayu000.github.io/remem/",
7
7
  "repository": {
@@ -32,15 +32,20 @@
32
32
  ],
33
33
  "keywords": [
34
34
  "claude-code",
35
- "openai-codex",
36
35
  "codex",
36
+ "codex-cli",
37
+ "claude-code-memory",
38
+ "codex-memory",
39
+ "openai-codex",
37
40
  "memory",
38
41
  "agent-memory",
39
- "coding-agents",
42
+ "coding-agent-memory",
43
+ "persistent-memory",
40
44
  "mcp",
41
45
  "mcp-server",
46
+ "coding-agent",
42
47
  "rust-cli",
43
- "ai"
48
+ "developer-tools"
44
49
  ],
45
50
  "publishConfig": {
46
51
  "access": "public"
@@ -94,12 +94,28 @@ function sha256(file) {
94
94
  return hash.digest("hex");
95
95
  }
96
96
 
97
+ function expectedAssetFile(key) {
98
+ if (!/^(darwin|linux)-(arm64|x64)$/.test(key)) {
99
+ throw new Error(`Unsupported release asset platform key: ${key}`);
100
+ }
101
+ return `remem-${key}.tar.gz`;
102
+ }
103
+
104
+ function validateAssetFile(file, key) {
105
+ const expected = expectedAssetFile(key);
106
+ if (file !== expected) {
107
+ throw new Error(`Release manifest asset ${key} has unsafe file name: ${file}`);
108
+ }
109
+ return file;
110
+ }
111
+
97
112
  function resolveAsset(manifest, version, key) {
98
113
  const release = manifest?.versions?.[version];
99
114
  const asset = release?.assets?.[key];
100
115
  if (!asset || typeof asset.file !== "string") {
101
116
  throw new Error(`Release manifest for remem ${version} is missing asset ${key}`);
102
117
  }
118
+ const file = validateAssetFile(asset.file, key);
103
119
  if (!/^[0-9a-f]{64}$/i.test(asset.sha256 || "")) {
104
120
  throw new Error(`Release manifest asset ${key} is missing a valid sha256`);
105
121
  }
@@ -107,9 +123,9 @@ function resolveAsset(manifest, version, key) {
107
123
  ? release.base_url.replace(/\/$/, "")
108
124
  : BASE_URL;
109
125
  return {
110
- file: asset.file,
126
+ file,
111
127
  sha256: asset.sha256.toLowerCase(),
112
- url: `${baseUrl}/${asset.file}`,
128
+ url: `${baseUrl}/${file}`,
113
129
  };
114
130
  }
115
131
 
@@ -135,7 +151,7 @@ async function main() {
135
151
  const manifestUrl = `${BASE_URL}/remem-releases.json`;
136
152
  const manifest = await fetchJson(manifestUrl);
137
153
  const asset = resolveAsset(manifest, VERSION, key);
138
- const archive = path.join(tmpDir, asset.file);
154
+ const archive = path.join(tmpDir, "remem-release.tar.gz");
139
155
 
140
156
  console.log(`Downloading remem ${VERSION} for ${key}`);
141
157
  await download(asset.url, archive);