claude-mem 13.34.2 → 13.36.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.
Files changed (40) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.qoder-plugin/plugin.json +15 -0
  5. package/README.md +5 -16
  6. package/dist/bug-report/index.js +68 -68
  7. package/dist/npx-cli/index.js +371 -336
  8. package/dist/opencode-plugin/index.js +43 -41
  9. package/dsh/package.json +1 -1
  10. package/openclaw/openclaw.plugin.json +1 -1
  11. package/package.json +4 -1
  12. package/plugin/.claude-plugin/plugin.json +1 -1
  13. package/plugin/.codex-plugin/plugin.json +1 -1
  14. package/plugin/.qoder-plugin/plugin.json +15 -0
  15. package/plugin/hooks/codex-hooks.json +1 -1
  16. package/plugin/hooks/hooks.json +1 -1
  17. package/plugin/hooks/qoder-hooks.json +97 -0
  18. package/plugin/hooks/qoder-repo-hooks.json +97 -0
  19. package/plugin/package.json +1 -1
  20. package/plugin/qoder.mcp.json +12 -0
  21. package/plugin/scripts/bun-runner.js +24 -5
  22. package/plugin/scripts/context-generator.cjs +59 -58
  23. package/plugin/scripts/context-generator.cjs.map +2 -2
  24. package/plugin/scripts/mcp-server.cjs +101 -57
  25. package/plugin/scripts/mcp-server.cjs.map +3 -3
  26. package/plugin/scripts/qoder-hook-launcher.cjs +114 -0
  27. package/plugin/scripts/server-service.cjs +197 -162
  28. package/plugin/scripts/server-service.cjs.map +3 -3
  29. package/plugin/scripts/transcript-watcher.cjs +27 -28
  30. package/plugin/scripts/transcript-watcher.cjs.map +3 -3
  31. package/plugin/scripts/worker-service.cjs +605 -534
  32. package/plugin/scripts/worker-service.cjs.map +3 -3
  33. package/plugin/skills/mem-search/SKILL.md +81 -128
  34. package/plugin/skills/screenpipe/SKILL.md +80 -0
  35. package/plugin/skills/screenpipe/screenpipe.mjs +157 -0
  36. package/plugin/sqlite/SessionStore.js +181 -176
  37. package/plugin/sqlite/SessionStore.js.map +3 -3
  38. package/plugin/sqlite/observations/files.js +7 -7
  39. package/plugin/sqlite/observations/files.js.map +2 -2
  40. package/plugin/ui/viewer-bundle.js +12 -12
package/dsh/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-mem/dsh",
3
- "version": "13.34.2",
3
+ "version": "13.36.0",
4
4
  "private": true,
5
5
  "description": "First-party DeepSeek Harness memory integration, based on Bleed00/dsh-claude-mem",
6
6
  "type": "module",
@@ -3,7 +3,7 @@
3
3
  "name": "Claude-Mem (Persistent Memory)",
4
4
  "description": "OpenClaw plugin for Claude-Mem. Records observations from embedded runner sessions and streams them to messaging channels.",
5
5
  "kind": "memory",
6
- "version": "13.34.2",
6
+ "version": "13.36.0",
7
7
  "license": "Apache-2.0",
8
8
  "author": "thedotmack",
9
9
  "homepage": "https://claude-mem.ai",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.34.2",
3
+ "version": "13.36.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "keywords": [
6
6
  "claude",
@@ -37,9 +37,12 @@
37
37
  ".agents/plugins/marketplace.json",
38
38
  ".claude-plugin",
39
39
  ".codex-plugin",
40
+ ".qoder-plugin",
40
41
  "plugin/.claude-plugin",
41
42
  "plugin/.codex-plugin",
43
+ "plugin/.qoder-plugin",
42
44
  "plugin/.mcp.json",
45
+ "plugin/qoder.mcp.json",
43
46
  "plugin/package.json",
44
47
  "plugin/bun.lock",
45
48
  "plugin/hooks",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.34.2",
3
+ "version": "13.36.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "author": {
6
6
  "name": "Alex Newman"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.34.2",
3
+ "version": "13.36.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "author": {
6
6
  "name": "Alex Newman",
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "claude-mem",
3
+ "version": "13.36.0",
4
+ "description": "Persistent memory and context compression for Qoder sessions.",
5
+ "author": {
6
+ "name": "Alex Newman",
7
+ "url": "https://github.com/thedotmack"
8
+ },
9
+ "homepage": "https://github.com/thedotmack/claude-mem#readme",
10
+ "repository": "https://github.com/thedotmack/claude-mem",
11
+ "license": "Apache-2.0",
12
+ "skills": "./skills/",
13
+ "mcpServers": "./qoder.mcp.json",
14
+ "hooks": "./hooks/qoder-hooks.json"
15
+ }
@@ -27,7 +27,7 @@
27
27
  ],
28
28
  "PreToolUse": [
29
29
  {
30
- "matcher": "^Bash$|^mcp__.+__(read|view|cat)(_file|_files)?$",
30
+ "matcher": "^Bash$|^mcp__.+__(read|view|cat)(_file|_files)?$|^Grep$|^Glob$|^memory_search$|^memory$|^mcp__.+__memory_search$",
31
31
  "hooks": [
32
32
  {
33
33
  "type": "command",
@@ -81,7 +81,7 @@
81
81
  ],
82
82
  "PreToolUse": [
83
83
  {
84
- "matcher": "Read",
84
+ "matcher": "Read|^Bash$|^Grep$|^Glob$|^memory_search$|^memory$|^mcp__.+__memory_search$",
85
85
  "hooks": [
86
86
  {
87
87
  "type": "command",
@@ -0,0 +1,97 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "startup|resume|clear|compact|new",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "node",
10
+ "args": [
11
+ "${QODER_PLUGIN_ROOT}/scripts/qoder-hook-launcher.cjs",
12
+ "context"
13
+ ],
14
+ "env": {
15
+ "CLAUDE_MEM_CODEX_HOOK": "1"
16
+ },
17
+ "timeout": 180,
18
+ "statusMessage": "Loading claude-mem context"
19
+ }
20
+ ]
21
+ }
22
+ ],
23
+ "UserPromptSubmit": [
24
+ {
25
+ "hooks": [
26
+ {
27
+ "type": "command",
28
+ "command": "node",
29
+ "args": [
30
+ "${QODER_PLUGIN_ROOT}/scripts/qoder-hook-launcher.cjs",
31
+ "session-init"
32
+ ],
33
+ "env": {
34
+ "CLAUDE_MEM_CODEX_HOOK": "1"
35
+ },
36
+ "timeout": 15
37
+ }
38
+ ]
39
+ }
40
+ ],
41
+ "PreToolUse": [
42
+ {
43
+ "matcher": "Bash|Read|Glob|Grep|memory_search|memory|mcp__.+__(read|view|cat)(_file|_files)?|mcp__.+__memory_search",
44
+ "hooks": [
45
+ {
46
+ "type": "command",
47
+ "command": "node",
48
+ "args": [
49
+ "${QODER_PLUGIN_ROOT}/scripts/qoder-hook-launcher.cjs",
50
+ "file-context"
51
+ ],
52
+ "env": {
53
+ "CLAUDE_MEM_CODEX_HOOK": "1"
54
+ },
55
+ "timeout": 15
56
+ }
57
+ ]
58
+ }
59
+ ],
60
+ "PostToolUse": [
61
+ {
62
+ "hooks": [
63
+ {
64
+ "type": "command",
65
+ "command": "node",
66
+ "args": [
67
+ "${QODER_PLUGIN_ROOT}/scripts/qoder-hook-launcher.cjs",
68
+ "observation"
69
+ ],
70
+ "env": {
71
+ "CLAUDE_MEM_CODEX_HOOK": "1"
72
+ },
73
+ "timeout": 15
74
+ }
75
+ ]
76
+ }
77
+ ],
78
+ "Stop": [
79
+ {
80
+ "hooks": [
81
+ {
82
+ "type": "command",
83
+ "command": "node",
84
+ "args": [
85
+ "${QODER_PLUGIN_ROOT}/scripts/qoder-hook-launcher.cjs",
86
+ "summarize"
87
+ ],
88
+ "env": {
89
+ "CLAUDE_MEM_CODEX_HOOK": "1"
90
+ },
91
+ "timeout": 30
92
+ }
93
+ ]
94
+ }
95
+ ]
96
+ }
97
+ }
@@ -0,0 +1,97 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "startup|resume|clear|compact|new",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "node",
10
+ "args": [
11
+ "${QODER_PLUGIN_ROOT}/plugin/scripts/qoder-hook-launcher.cjs",
12
+ "context"
13
+ ],
14
+ "env": {
15
+ "CLAUDE_MEM_CODEX_HOOK": "1"
16
+ },
17
+ "timeout": 180,
18
+ "statusMessage": "Loading claude-mem context"
19
+ }
20
+ ]
21
+ }
22
+ ],
23
+ "UserPromptSubmit": [
24
+ {
25
+ "hooks": [
26
+ {
27
+ "type": "command",
28
+ "command": "node",
29
+ "args": [
30
+ "${QODER_PLUGIN_ROOT}/plugin/scripts/qoder-hook-launcher.cjs",
31
+ "session-init"
32
+ ],
33
+ "env": {
34
+ "CLAUDE_MEM_CODEX_HOOK": "1"
35
+ },
36
+ "timeout": 15
37
+ }
38
+ ]
39
+ }
40
+ ],
41
+ "PreToolUse": [
42
+ {
43
+ "matcher": "Bash|Read|Glob|Grep|memory_search|memory|mcp__.+__(read|view|cat)(_file|_files)?|mcp__.+__memory_search",
44
+ "hooks": [
45
+ {
46
+ "type": "command",
47
+ "command": "node",
48
+ "args": [
49
+ "${QODER_PLUGIN_ROOT}/plugin/scripts/qoder-hook-launcher.cjs",
50
+ "file-context"
51
+ ],
52
+ "env": {
53
+ "CLAUDE_MEM_CODEX_HOOK": "1"
54
+ },
55
+ "timeout": 15
56
+ }
57
+ ]
58
+ }
59
+ ],
60
+ "PostToolUse": [
61
+ {
62
+ "hooks": [
63
+ {
64
+ "type": "command",
65
+ "command": "node",
66
+ "args": [
67
+ "${QODER_PLUGIN_ROOT}/plugin/scripts/qoder-hook-launcher.cjs",
68
+ "observation"
69
+ ],
70
+ "env": {
71
+ "CLAUDE_MEM_CODEX_HOOK": "1"
72
+ },
73
+ "timeout": 15
74
+ }
75
+ ]
76
+ }
77
+ ],
78
+ "Stop": [
79
+ {
80
+ "hooks": [
81
+ {
82
+ "type": "command",
83
+ "command": "node",
84
+ "args": [
85
+ "${QODER_PLUGIN_ROOT}/plugin/scripts/qoder-hook-launcher.cjs",
86
+ "summarize"
87
+ ],
88
+ "env": {
89
+ "CLAUDE_MEM_CODEX_HOOK": "1"
90
+ },
91
+ "timeout": 30
92
+ }
93
+ ]
94
+ }
95
+ ]
96
+ }
97
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem-plugin",
3
- "version": "13.34.2",
3
+ "version": "13.36.0",
4
4
  "private": true,
5
5
  "description": "Runtime dependencies for claude-mem bundled hooks",
6
6
  "type": "module",
@@ -0,0 +1,12 @@
1
+ {
2
+ "mcpServers": {
3
+ "mcp-search": {
4
+ "type": "stdio",
5
+ "command": "node",
6
+ "args": [
7
+ "-e",
8
+ "const f=require('fs'),p=require('path');const e=process.env.QODER_PLUGIN_ROOT||process.cwd();const r=f.existsSync(p.join(e,'plugin','scripts','mcp-server.cjs'))?p.join(e,'plugin'):e;const s=p.join(r,'scripts','mcp-server.cjs');if(!f.existsSync(s)){process.stderr.write('claude-mem: Qoder MCP server not found\\n');process.exit(1)}require(s)"
9
+ ]
10
+ }
11
+ }
12
+ }
@@ -2,7 +2,7 @@
2
2
  import { spawnSync, spawn } from 'child_process';
3
3
  import { existsSync, readFileSync, mkdirSync, appendFileSync, writeFileSync } from 'fs';
4
4
  import { join, dirname, resolve } from 'path';
5
- import { homedir } from 'os';
5
+ import { homedir, tmpdir } from 'os';
6
6
  import { fileURLToPath } from 'url';
7
7
 
8
8
  const IS_WINDOWS = process.platform === 'win32';
@@ -34,7 +34,15 @@ function findBun() {
34
34
 
35
35
  if (pathCheck.status === 0 && pathCheck.stdout.trim()) {
36
36
  if (IS_WINDOWS) {
37
- const bunPaths = pathCheck.stdout.split(/\r?\n/).map(line => line.trim()).filter(Boolean);
37
+ // where.exe writes the console's active code page (e.g. cp949 on ko-KR,
38
+ // cp932 on ja-JP) but the `encoding: 'utf-8'` above decodes those bytes
39
+ // as UTF-8, so a non-ASCII profile folder name arrives as U+FFFD and the
40
+ // reported path does not exist (#4694, #3865). Keep only the lines that
41
+ // resolve on disk and thread this filtered list through EVERY return
42
+ // below — re-reading the raw stdout would hand the garbled path back
43
+ // even after the list was filtered.
44
+ const bunPaths = pathCheck.stdout.split(/\r?\n/).map(line => line.trim()).filter(Boolean)
45
+ .filter(line => existsSync(line));
38
46
  const firstBunPath = bunPaths.find(line => {
39
47
  const lowerPath = line.toLowerCase();
40
48
  return lowerPath.endsWith('bun.exe') || lowerPath.endsWith('bun.cmd');
@@ -55,12 +63,16 @@ function findBun() {
55
63
  // the resolved absolute path instead of falling through to the bare
56
64
  // name: resolving a bare `bun` later relies on the child's PATH, which
57
65
  // cmd.exe drops entirely when it exceeds ~8191 chars (issue #3196).
58
- const firstWherePath = pathCheck.stdout.split(/\r?\n/).map(line => line.trim()).find(Boolean);
66
+ const firstWherePath = bunPaths.find(Boolean);
59
67
  if (firstWherePath) {
60
68
  return firstWherePath;
61
69
  }
70
+ // Every where hit was garbled or stale (#4694): fall through to the
71
+ // explicit overrides and well-known install homes below instead of
72
+ // returning a path that can only fail with ENOENT.
73
+ } else {
74
+ return 'bun';
62
75
  }
63
- return 'bun';
64
76
  }
65
77
 
66
78
  const bunInstall = typeof process.env.BUN_INSTALL === 'string' ? process.env.BUN_INSTALL.trim() : '';
@@ -130,6 +142,8 @@ if (args.length === 0) {
130
142
  }
131
143
 
132
144
  args[0] = fixBrokenScriptPath(args[0]);
145
+ // Resolve a relative script path against the launch directory before the child starts in tmpdir() (#4628)
146
+ args[0] = resolve(process.cwd(), args[0]);
133
147
 
134
148
  const bunPath = findBun();
135
149
 
@@ -165,10 +179,15 @@ function collectStdin() {
165
179
 
166
180
  const stdinData = await collectStdin();
167
181
 
182
+ // Bun reads tsconfig.json from its working directory and prints any warnings
183
+ // about it to stderr, which hosts show as hook errors (#4628). Start it in a
184
+ // neutral directory and hand it the launch directory; the hook entry point
185
+ // (src/cli/hook-original-cwd.ts) moves back there before adapters run.
168
186
  const spawnOptions = {
169
187
  stdio: ['pipe', 'inherit', 'inherit'],
170
188
  windowsHide: true,
171
- env: process.env
189
+ env: Object.assign({}, process.env, { CLAUDE_MEM_HOOK_ORIGINAL_CWD: process.cwd() }),
190
+ cwd: tmpdir()
172
191
  };
173
192
 
174
193
  let spawnCmd = bunPath;