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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.qoder-plugin/plugin.json +15 -0
- package/README.md +5 -16
- package/dist/bug-report/index.js +68 -68
- package/dist/npx-cli/index.js +371 -336
- package/dist/opencode-plugin/index.js +43 -41
- package/dsh/package.json +1 -1
- package/openclaw/openclaw.plugin.json +1 -1
- package/package.json +4 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.qoder-plugin/plugin.json +15 -0
- package/plugin/hooks/codex-hooks.json +1 -1
- package/plugin/hooks/hooks.json +1 -1
- package/plugin/hooks/qoder-hooks.json +97 -0
- package/plugin/hooks/qoder-repo-hooks.json +97 -0
- package/plugin/package.json +1 -1
- package/plugin/qoder.mcp.json +12 -0
- package/plugin/scripts/bun-runner.js +24 -5
- package/plugin/scripts/context-generator.cjs +59 -58
- package/plugin/scripts/context-generator.cjs.map +2 -2
- package/plugin/scripts/mcp-server.cjs +101 -57
- package/plugin/scripts/mcp-server.cjs.map +3 -3
- package/plugin/scripts/qoder-hook-launcher.cjs +114 -0
- package/plugin/scripts/server-service.cjs +197 -162
- package/plugin/scripts/server-service.cjs.map +3 -3
- package/plugin/scripts/transcript-watcher.cjs +27 -28
- package/plugin/scripts/transcript-watcher.cjs.map +3 -3
- package/plugin/scripts/worker-service.cjs +605 -534
- package/plugin/scripts/worker-service.cjs.map +3 -3
- package/plugin/skills/mem-search/SKILL.md +81 -128
- package/plugin/skills/screenpipe/SKILL.md +80 -0
- package/plugin/skills/screenpipe/screenpipe.mjs +157 -0
- package/plugin/sqlite/SessionStore.js +181 -176
- package/plugin/sqlite/SessionStore.js.map +3 -3
- package/plugin/sqlite/observations/files.js +7 -7
- package/plugin/sqlite/observations/files.js.map +2 -2
- package/plugin/ui/viewer-bundle.js +12 -12
package/dsh/package.json
CHANGED
|
@@ -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.
|
|
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.
|
|
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",
|
|
@@ -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",
|
package/plugin/hooks/hooks.json
CHANGED
|
@@ -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
|
+
}
|
package/plugin/package.json
CHANGED
|
@@ -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
|
-
|
|
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 =
|
|
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;
|