@bjlee2024/claude-mem 13.4.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/.agents/plugins/marketplace.json +20 -0
- package/.codex-plugin/plugin.json +46 -0
- package/LICENSE +202 -0
- package/README.md +419 -0
- package/dist/npx-cli/index.js +10001 -0
- package/dist/opencode-plugin/index.js +67 -0
- package/openclaw/Dockerfile.e2e +46 -0
- package/openclaw/SKILL.md +462 -0
- package/openclaw/TESTING.md +279 -0
- package/openclaw/dist/index.js +15 -0
- package/openclaw/e2e-verify.sh +222 -0
- package/openclaw/install.sh +1653 -0
- package/openclaw/openclaw.plugin.json +98 -0
- package/openclaw/package.json +21 -0
- package/openclaw/src/index.test.ts +1124 -0
- package/openclaw/src/index.ts +1092 -0
- package/openclaw/test-e2e.sh +40 -0
- package/openclaw/test-install.sh +2086 -0
- package/openclaw/test-sse-consumer.js +98 -0
- package/openclaw/tsconfig.json +26 -0
- package/package.json +211 -0
- package/plugin/.claude-plugin/plugin.json +24 -0
- package/plugin/.codex-plugin/plugin.json +46 -0
- package/plugin/.mcp.json +12 -0
- package/plugin/hooks/bugfixes-2026-01-10.md +92 -0
- package/plugin/hooks/codex-hooks.json +74 -0
- package/plugin/hooks/hooks.json +87 -0
- package/plugin/modes/code--ar.json +24 -0
- package/plugin/modes/code--bn.json +24 -0
- package/plugin/modes/code--chill.json +8 -0
- package/plugin/modes/code--cs.json +24 -0
- package/plugin/modes/code--da.json +24 -0
- package/plugin/modes/code--de.json +24 -0
- package/plugin/modes/code--el.json +24 -0
- package/plugin/modes/code--es.json +24 -0
- package/plugin/modes/code--fi.json +24 -0
- package/plugin/modes/code--fr.json +24 -0
- package/plugin/modes/code--he.json +24 -0
- package/plugin/modes/code--hi.json +24 -0
- package/plugin/modes/code--hu.json +24 -0
- package/plugin/modes/code--id.json +24 -0
- package/plugin/modes/code--it.json +24 -0
- package/plugin/modes/code--ja.json +24 -0
- package/plugin/modes/code--ko.json +24 -0
- package/plugin/modes/code--nl.json +24 -0
- package/plugin/modes/code--no.json +24 -0
- package/plugin/modes/code--pl.json +24 -0
- package/plugin/modes/code--pt-br.json +24 -0
- package/plugin/modes/code--ro.json +24 -0
- package/plugin/modes/code--ru.json +24 -0
- package/plugin/modes/code--sv.json +24 -0
- package/plugin/modes/code--th.json +24 -0
- package/plugin/modes/code--tr.json +24 -0
- package/plugin/modes/code--uk.json +24 -0
- package/plugin/modes/code--ur.json +25 -0
- package/plugin/modes/code--vi.json +24 -0
- package/plugin/modes/code--zh.json +24 -0
- package/plugin/modes/code.json +139 -0
- package/plugin/modes/email-investigation.json +120 -0
- package/plugin/modes/law-study--chill.json +7 -0
- package/plugin/modes/law-study-CLAUDE.md +85 -0
- package/plugin/modes/law-study.json +120 -0
- package/plugin/modes/meme-tokens.json +125 -0
- package/plugin/package.json +46 -0
- package/plugin/scripts/bun-runner.js +216 -0
- package/plugin/scripts/context-generator.cjs +795 -0
- package/plugin/scripts/mcp-server.cjs +239 -0
- package/plugin/scripts/server-beta-service.cjs +9856 -0
- package/plugin/scripts/statusline-counts.js +40 -0
- package/plugin/scripts/version-check.js +69 -0
- package/plugin/scripts/worker-cli.js +19 -0
- package/plugin/scripts/worker-service.cjs +2368 -0
- package/plugin/scripts/worker-wrapper.cjs +2 -0
- package/plugin/skills/babysit/SKILL.md +87 -0
- package/plugin/skills/design-is/SKILL.md +312 -0
- package/plugin/skills/do/SKILL.md +45 -0
- package/plugin/skills/how-it-works/SKILL.md +22 -0
- package/plugin/skills/how-it-works/onboarding-explainer.md +17 -0
- package/plugin/skills/knowledge-agent/SKILL.md +80 -0
- package/plugin/skills/learn-codebase/SKILL.md +21 -0
- package/plugin/skills/make-plan/SKILL.md +67 -0
- package/plugin/skills/mem-search/SKILL.md +131 -0
- package/plugin/skills/oh-my-issues/SKILL.md +226 -0
- package/plugin/skills/pathfinder/SKILL.md +111 -0
- package/plugin/skills/smart-explore/SKILL.md +190 -0
- package/plugin/skills/timeline-report/SKILL.md +211 -0
- package/plugin/skills/version-bump/SKILL.md +68 -0
- package/plugin/skills/version-bump/scripts/generate_changelog.js +34 -0
- package/plugin/skills/weekly-digests/SKILL.md +262 -0
- package/plugin/skills/wowerpoint/SKILL.md +205 -0
- package/plugin/ui/assets/fonts/monaspace-radon-var.woff +0 -0
- package/plugin/ui/assets/fonts/monaspace-radon-var.woff2 +0 -0
- package/plugin/ui/claude-mem-logo-for-dark-mode.webp +0 -0
- package/plugin/ui/claude-mem-logo-stylized.png +0 -0
- package/plugin/ui/claude-mem-logomark.webp +0 -0
- package/plugin/ui/icon-thick-completed.svg +8 -0
- package/plugin/ui/icon-thick-investigated.svg +8 -0
- package/plugin/ui/icon-thick-learned.svg +12 -0
- package/plugin/ui/icon-thick-next-steps.svg +8 -0
- package/plugin/ui/viewer-bundle.js +65 -0
- package/plugin/ui/viewer.html +3145 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
|
|
2
|
+
import claudeMemPlugin from "./dist/index.js";
|
|
3
|
+
|
|
4
|
+
let registeredService = null;
|
|
5
|
+
const registeredCommands = new Map();
|
|
6
|
+
const eventHandlers = new Map();
|
|
7
|
+
const logs = [];
|
|
8
|
+
|
|
9
|
+
const mockApi = {
|
|
10
|
+
id: "claude-mem",
|
|
11
|
+
name: "Claude-Mem (Persistent Memory)",
|
|
12
|
+
version: "1.0.0",
|
|
13
|
+
source: "/test/extensions/claude-mem/dist/index.js",
|
|
14
|
+
config: {},
|
|
15
|
+
pluginConfig: {},
|
|
16
|
+
logger: {
|
|
17
|
+
info: (message) => { logs.push(message); },
|
|
18
|
+
warn: (message) => { logs.push(message); },
|
|
19
|
+
error: (message) => { logs.push(message); },
|
|
20
|
+
debug: (message) => { logs.push(message); },
|
|
21
|
+
},
|
|
22
|
+
registerService: (service) => {
|
|
23
|
+
registeredService = service;
|
|
24
|
+
},
|
|
25
|
+
registerCommand: (command) => {
|
|
26
|
+
registeredCommands.set(command.name, command);
|
|
27
|
+
},
|
|
28
|
+
on: (event, callback) => {
|
|
29
|
+
if (!eventHandlers.has(event)) {
|
|
30
|
+
eventHandlers.set(event, []);
|
|
31
|
+
}
|
|
32
|
+
eventHandlers.get(event).push(callback);
|
|
33
|
+
},
|
|
34
|
+
runtime: {
|
|
35
|
+
channel: {
|
|
36
|
+
telegram: { sendMessageTelegram: async () => {} },
|
|
37
|
+
discord: { sendMessageDiscord: async () => {} },
|
|
38
|
+
signal: { sendMessageSignal: async () => {} },
|
|
39
|
+
slack: { sendMessageSlack: async () => {} },
|
|
40
|
+
whatsapp: { sendMessageWhatsApp: async () => {} },
|
|
41
|
+
line: { sendMessageLine: async () => {} },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
claudeMemPlugin(mockApi);
|
|
47
|
+
|
|
48
|
+
let failures = 0;
|
|
49
|
+
|
|
50
|
+
if (!registeredService) {
|
|
51
|
+
console.error("FAIL: No service was registered");
|
|
52
|
+
failures++;
|
|
53
|
+
} else if (registeredService.id !== "claude-mem-observation-feed") {
|
|
54
|
+
console.error(
|
|
55
|
+
`FAIL: Service ID is "${registeredService.id}", expected "claude-mem-observation-feed"`
|
|
56
|
+
);
|
|
57
|
+
failures++;
|
|
58
|
+
} else {
|
|
59
|
+
console.log("OK: Service registered with id 'claude-mem-observation-feed'");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (!registeredCommands.has("claude-mem-feed")) {
|
|
63
|
+
console.error("FAIL: No 'claude-mem-feed' command registered");
|
|
64
|
+
failures++;
|
|
65
|
+
} else {
|
|
66
|
+
console.log("OK: Command registered with name 'claude-mem-feed'");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!registeredCommands.has("claude-mem-status")) {
|
|
70
|
+
console.error("FAIL: No 'claude-mem-status' command registered");
|
|
71
|
+
failures++;
|
|
72
|
+
} else {
|
|
73
|
+
console.log("OK: Command registered with name 'claude-mem-status'");
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const expectedEvents = ["before_agent_start", "tool_result_persist", "agent_end", "gateway_start"];
|
|
77
|
+
for (const event of expectedEvents) {
|
|
78
|
+
if (!eventHandlers.has(event) || eventHandlers.get(event).length === 0) {
|
|
79
|
+
console.error(`FAIL: No handler registered for '${event}'`);
|
|
80
|
+
failures++;
|
|
81
|
+
} else {
|
|
82
|
+
console.log(`OK: Event handler registered for '${event}'`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (!logs.some((l) => l.includes("plugin loaded"))) {
|
|
87
|
+
console.error("FAIL: Plugin did not log a load message");
|
|
88
|
+
failures++;
|
|
89
|
+
} else {
|
|
90
|
+
console.log("OK: Plugin logged load message");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (failures > 0) {
|
|
94
|
+
console.error(`\nFAIL: ${failures} check(s) failed`);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
} else {
|
|
97
|
+
console.log("\nPASS: Plugin registers service, commands, and event handlers correctly");
|
|
98
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"lib": ["ES2022", "DOM"],
|
|
7
|
+
"outDir": "./dist",
|
|
8
|
+
"rootDir": "./src",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"resolveJsonModule": true,
|
|
14
|
+
"declaration": true,
|
|
15
|
+
"declarationMap": true,
|
|
16
|
+
"sourceMap": true,
|
|
17
|
+
"allowSyntheticDefaultImports": true
|
|
18
|
+
},
|
|
19
|
+
"include": [
|
|
20
|
+
"src/**/*"
|
|
21
|
+
],
|
|
22
|
+
"exclude": [
|
|
23
|
+
"node_modules",
|
|
24
|
+
"dist"
|
|
25
|
+
]
|
|
26
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bjlee2024/claude-mem",
|
|
3
|
+
"version": "13.4.0",
|
|
4
|
+
"description": "Memory compression system for Claude Code - persist context across sessions",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude",
|
|
7
|
+
"claude-code",
|
|
8
|
+
"claude-agent-sdk",
|
|
9
|
+
"mcp",
|
|
10
|
+
"plugin",
|
|
11
|
+
"memory",
|
|
12
|
+
"compression",
|
|
13
|
+
"knowledge-graph",
|
|
14
|
+
"transcript",
|
|
15
|
+
"typescript",
|
|
16
|
+
"nodejs"
|
|
17
|
+
],
|
|
18
|
+
"author": "Alex Newman",
|
|
19
|
+
"license": "Apache-2.0",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/bjlee2024/claude-mem.git"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/bjlee2024/claude-mem#readme",
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/bjlee2024/claude-mem/issues"
|
|
27
|
+
},
|
|
28
|
+
"type": "module",
|
|
29
|
+
"bin": {
|
|
30
|
+
"claude-mem": "./dist/npx-cli/index.js"
|
|
31
|
+
},
|
|
32
|
+
"exports": {
|
|
33
|
+
".": {
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"import": "./dist/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./sdk": {
|
|
38
|
+
"types": "./dist/sdk/index.d.ts",
|
|
39
|
+
"import": "./dist/sdk/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./modes/*": "./plugin/modes/*"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"dist",
|
|
45
|
+
".agents/plugins/marketplace.json",
|
|
46
|
+
".codex-plugin",
|
|
47
|
+
"plugin/.claude-plugin",
|
|
48
|
+
"plugin/.codex-plugin",
|
|
49
|
+
"plugin/.mcp.json",
|
|
50
|
+
"plugin/package.json",
|
|
51
|
+
"plugin/hooks",
|
|
52
|
+
"plugin/modes",
|
|
53
|
+
"plugin/scripts/*.js",
|
|
54
|
+
"plugin/scripts/*.cjs",
|
|
55
|
+
"plugin/skills",
|
|
56
|
+
"plugin/ui",
|
|
57
|
+
"openclaw"
|
|
58
|
+
],
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=20.0.0",
|
|
61
|
+
"bun": ">=1.0.0"
|
|
62
|
+
},
|
|
63
|
+
"scripts": {
|
|
64
|
+
"dev": "npm run build-and-sync",
|
|
65
|
+
"build": "node scripts/sync-plugin-manifests.js && node scripts/build-hooks.js",
|
|
66
|
+
"build-and-sync": "npm run build && npm run sync-marketplace && sleep 1 && (cd ~/.claude/plugins/marketplaces/bjlee2024 && npm run worker:restart)",
|
|
67
|
+
"sync-marketplace": "node scripts/sync-marketplace.cjs",
|
|
68
|
+
"sync-marketplace:force": "node scripts/sync-marketplace.cjs --force",
|
|
69
|
+
"build:binaries": "node scripts/build-worker-binary.js",
|
|
70
|
+
"build:cli-binary": "bun build --compile --minify ./src/services/worker-service.ts --outfile plugin/scripts/claude-mem",
|
|
71
|
+
"worker:logs": "tail -n 50 ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log",
|
|
72
|
+
"worker:tail": "tail -f 50 ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log",
|
|
73
|
+
"changelog:generate": "node scripts/generate-changelog.js",
|
|
74
|
+
"discord:notify": "node scripts/discord-release-notify.js",
|
|
75
|
+
"worker:start": "bun plugin/scripts/worker-service.cjs start",
|
|
76
|
+
"worker:stop": "bun plugin/scripts/worker-service.cjs stop",
|
|
77
|
+
"worker:restart": "bun plugin/scripts/worker-service.cjs restart",
|
|
78
|
+
"worker:status": "bun plugin/scripts/worker-service.cjs status",
|
|
79
|
+
"queue": "bun scripts/check-pending-queue.ts",
|
|
80
|
+
"queue:process": "bun scripts/check-pending-queue.ts --process",
|
|
81
|
+
"queue:clear:pending": "bun scripts/clear-pending-queue.ts --all --force",
|
|
82
|
+
"pr:status": "bun scripts/pr-babysit-status.ts",
|
|
83
|
+
"claude-md:regenerate": "bun scripts/regenerate-claude-md.ts",
|
|
84
|
+
"claude-md:dry-run": "bun scripts/regenerate-claude-md.ts --dry-run",
|
|
85
|
+
"strip-comments": "bun scripts/strip-comments.ts",
|
|
86
|
+
"strip-comments:check": "bun scripts/strip-comments.ts --check",
|
|
87
|
+
"strip-comments:dry-run": "bun scripts/strip-comments.ts --dry-run",
|
|
88
|
+
"translate-readme": "bun scripts/translate-readme/cli.ts -v -o docs/i18n README.md",
|
|
89
|
+
"translate:tier1": "npm run translate-readme -- zh zh-tw ja pt-br ko es de fr",
|
|
90
|
+
"translate:tier2": "npm run translate-readme -- he ar ru pl cs nl tr uk",
|
|
91
|
+
"translate:tier3": "npm run translate-readme -- vi id th hi bn ro sv",
|
|
92
|
+
"translate:tier4": "npm run translate-readme -- it el hu fi da no",
|
|
93
|
+
"translate:all": "npm run translate:tier1 & npm run translate:tier2 & npm run translate:tier3 & npm run translate:tier4 & wait",
|
|
94
|
+
"bug-report": "npx tsx scripts/bug-report/cli.ts",
|
|
95
|
+
"cursor:install": "bun plugin/scripts/worker-service.cjs cursor install",
|
|
96
|
+
"cursor:uninstall": "bun plugin/scripts/worker-service.cjs cursor uninstall",
|
|
97
|
+
"cursor:status": "bun plugin/scripts/worker-service.cjs cursor status",
|
|
98
|
+
"cursor:setup": "bun plugin/scripts/worker-service.cjs cursor setup",
|
|
99
|
+
"lint:hook-io": "node scripts/check-hook-io-discipline.cjs",
|
|
100
|
+
"lint:spawn-env": "node scripts/check-spawn-env-discipline.cjs",
|
|
101
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p src/ui/viewer/tsconfig.json",
|
|
102
|
+
"typecheck:root": "tsc --noEmit",
|
|
103
|
+
"typecheck:viewer": "tsc --noEmit -p src/ui/viewer/tsconfig.json",
|
|
104
|
+
"test": "bun test",
|
|
105
|
+
"test:sqlite": "bun test tests/sqlite/",
|
|
106
|
+
"test:agents": "bun test tests/worker/agents/",
|
|
107
|
+
"test:search": "bun test tests/worker/search/",
|
|
108
|
+
"test:context": "bun test tests/context/",
|
|
109
|
+
"test:infra": "bun test tests/infrastructure/",
|
|
110
|
+
"test:server": "bun test tests/server/",
|
|
111
|
+
"e2e:server-beta:docker": "bash scripts/e2e-server-beta-docker.sh",
|
|
112
|
+
"check:postinstall-allowlist": "node scripts/check-postinstall-allowlist.js",
|
|
113
|
+
"prepublishOnly": "npm run build && node scripts/check-postinstall-allowlist.js",
|
|
114
|
+
"release": "np",
|
|
115
|
+
"release:patch": "np patch --no-cleanup",
|
|
116
|
+
"release:minor": "np minor --no-cleanup",
|
|
117
|
+
"release:major": "np major --no-cleanup"
|
|
118
|
+
},
|
|
119
|
+
"np": {
|
|
120
|
+
"yarn": false,
|
|
121
|
+
"contents": ".",
|
|
122
|
+
"testScript": "test",
|
|
123
|
+
"2fa": false
|
|
124
|
+
},
|
|
125
|
+
"dependencies": {
|
|
126
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.138",
|
|
127
|
+
"@better-auth/api-key": "^1.6.9",
|
|
128
|
+
"@clack/prompts": "^1.3.0",
|
|
129
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
130
|
+
"ansi-to-html": "^0.7.2",
|
|
131
|
+
"better-auth": "^1.6.9",
|
|
132
|
+
"bullmq": "^5.76.6",
|
|
133
|
+
"cors": "^2.8.6",
|
|
134
|
+
"dompurify": "^3.4.2",
|
|
135
|
+
"express": "^5.2.1",
|
|
136
|
+
"glob": "^13.0.6",
|
|
137
|
+
"handlebars": "^4.7.9",
|
|
138
|
+
"ioredis": "^5.10.1",
|
|
139
|
+
"pg": "^8.20.0",
|
|
140
|
+
"picocolors": "^1.1.1",
|
|
141
|
+
"react": "^19.2.6",
|
|
142
|
+
"react-dom": "^19.2.6",
|
|
143
|
+
"shell-quote": "^1.8.3",
|
|
144
|
+
"yaml": "^2.8.4",
|
|
145
|
+
"zod": "^4.4.3",
|
|
146
|
+
"zod-to-json-schema": "^3.25.2"
|
|
147
|
+
},
|
|
148
|
+
"devDependencies": {
|
|
149
|
+
"@derekstride/tree-sitter-sql": "^0.3.11",
|
|
150
|
+
"@tree-sitter-grammars/tree-sitter-lua": "^0.4.1",
|
|
151
|
+
"@tree-sitter-grammars/tree-sitter-markdown": "^0.3.2",
|
|
152
|
+
"@tree-sitter-grammars/tree-sitter-toml": "^0.7.0",
|
|
153
|
+
"@tree-sitter-grammars/tree-sitter-yaml": "^0.7.1",
|
|
154
|
+
"@tree-sitter-grammars/tree-sitter-zig": "^1.1.2",
|
|
155
|
+
"@types/bun": "^1.3.13",
|
|
156
|
+
"@types/cors": "^2.8.19",
|
|
157
|
+
"@types/dompurify": "^3.2.0",
|
|
158
|
+
"@types/express": "^5.0.6",
|
|
159
|
+
"@types/node": "^25.6.2",
|
|
160
|
+
"@types/pg": "^8.20.0",
|
|
161
|
+
"@types/react": "^19.2.14",
|
|
162
|
+
"@types/react-dom": "^19.2.3",
|
|
163
|
+
"esbuild": "^0.28.0",
|
|
164
|
+
"jimp": "^1.6.1",
|
|
165
|
+
"np": "^11.2.0",
|
|
166
|
+
"parse5": "^8.0.1",
|
|
167
|
+
"postcss": "^8.5.14",
|
|
168
|
+
"remark-mdx": "^3.1.1",
|
|
169
|
+
"remark-parse": "^11.0.0",
|
|
170
|
+
"tree-sitter-bash": "^0.25.1",
|
|
171
|
+
"tree-sitter-c": "^0.24.1",
|
|
172
|
+
"tree-sitter-cli": "^0.26.8",
|
|
173
|
+
"tree-sitter-cpp": "^0.23.4",
|
|
174
|
+
"tree-sitter-css": "^0.25.0",
|
|
175
|
+
"tree-sitter-elixir": "^0.3.5",
|
|
176
|
+
"tree-sitter-go": "^0.25.0",
|
|
177
|
+
"tree-sitter-haskell": "^0.23.1",
|
|
178
|
+
"tree-sitter-java": "^0.23.5",
|
|
179
|
+
"tree-sitter-javascript": "^0.25.0",
|
|
180
|
+
"tree-sitter-kotlin": "^0.3.8",
|
|
181
|
+
"tree-sitter-php": "^0.24.2",
|
|
182
|
+
"tree-sitter-python": "^0.25.0",
|
|
183
|
+
"tree-sitter-ruby": "^0.23.1",
|
|
184
|
+
"tree-sitter-rust": "^0.24.0",
|
|
185
|
+
"tree-sitter-scala": "^0.24.0",
|
|
186
|
+
"tree-sitter-scss": "^1.0.0",
|
|
187
|
+
"tree-sitter-swift": "^0.7.1",
|
|
188
|
+
"tree-sitter-typescript": "^0.23.2",
|
|
189
|
+
"ts-prune": "^0.10.3",
|
|
190
|
+
"tsx": "^4.21.0",
|
|
191
|
+
"typescript": "^6.0.3",
|
|
192
|
+
"unified": "^11.0.5",
|
|
193
|
+
"unist-util-visit": "^5.1.0"
|
|
194
|
+
},
|
|
195
|
+
"optionalDependencies": {
|
|
196
|
+
"tree-kill": "^1.2.2"
|
|
197
|
+
},
|
|
198
|
+
"trustedDependencies": [
|
|
199
|
+
"esbuild",
|
|
200
|
+
"tree-sitter-c",
|
|
201
|
+
"tree-sitter-cli",
|
|
202
|
+
"tree-sitter-cpp",
|
|
203
|
+
"tree-sitter-go",
|
|
204
|
+
"tree-sitter-java",
|
|
205
|
+
"tree-sitter-javascript",
|
|
206
|
+
"tree-sitter-python",
|
|
207
|
+
"tree-sitter-ruby",
|
|
208
|
+
"tree-sitter-rust",
|
|
209
|
+
"tree-sitter-typescript"
|
|
210
|
+
]
|
|
211
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bjlee2024/claude-mem",
|
|
3
|
+
"version": "13.4.0",
|
|
4
|
+
"description": "Memory compression system for Claude Code - persist context across sessions",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Alex Newman"
|
|
7
|
+
},
|
|
8
|
+
"repository": "https://github.com/bjlee2024/claude-mem",
|
|
9
|
+
"license": "Apache-2.0",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"claude",
|
|
12
|
+
"claude-code",
|
|
13
|
+
"claude-agent-sdk",
|
|
14
|
+
"mcp",
|
|
15
|
+
"plugin",
|
|
16
|
+
"memory",
|
|
17
|
+
"compression",
|
|
18
|
+
"knowledge-graph",
|
|
19
|
+
"transcript",
|
|
20
|
+
"typescript",
|
|
21
|
+
"nodejs"
|
|
22
|
+
],
|
|
23
|
+
"homepage": "https://github.com/bjlee2024/claude-mem#readme"
|
|
24
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bjlee2024/claude-mem",
|
|
3
|
+
"version": "13.4.0",
|
|
4
|
+
"description": "Memory compression system for Claude Code - persist context across sessions",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Alex Newman",
|
|
7
|
+
"url": "https://github.com/bjlee2024"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/bjlee2024/claude-mem#readme",
|
|
10
|
+
"repository": "https://github.com/bjlee2024/claude-mem",
|
|
11
|
+
"license": "Apache-2.0",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"claude",
|
|
14
|
+
"claude-code",
|
|
15
|
+
"claude-agent-sdk",
|
|
16
|
+
"mcp",
|
|
17
|
+
"plugin",
|
|
18
|
+
"memory",
|
|
19
|
+
"compression",
|
|
20
|
+
"knowledge-graph",
|
|
21
|
+
"transcript",
|
|
22
|
+
"typescript",
|
|
23
|
+
"nodejs"
|
|
24
|
+
],
|
|
25
|
+
"skills": "./skills/",
|
|
26
|
+
"mcpServers": "./.mcp.json",
|
|
27
|
+
"hooks": "./hooks/codex-hooks.json",
|
|
28
|
+
"interface": {
|
|
29
|
+
"displayName": "claude-mem",
|
|
30
|
+
"shortDescription": "Persistent memory and context compression across coding sessions.",
|
|
31
|
+
"longDescription": "claude-mem captures coding-session activity, compresses it into reusable observations, and injects relevant context back into future Claude Code and Codex-compatible sessions.",
|
|
32
|
+
"developerName": "Alex Newman",
|
|
33
|
+
"category": "Productivity",
|
|
34
|
+
"capabilities": [
|
|
35
|
+
"Interactive",
|
|
36
|
+
"Write"
|
|
37
|
+
],
|
|
38
|
+
"websiteURL": "https://github.com/bjlee2024/claude-mem",
|
|
39
|
+
"defaultPrompt": [
|
|
40
|
+
"Find what I already learned about this codebase before I start a new task.",
|
|
41
|
+
"Show recent observations related to the files I am editing right now.",
|
|
42
|
+
"Summarize the last session and inject the most relevant context into this one."
|
|
43
|
+
],
|
|
44
|
+
"brandColor": "#1F6FEB"
|
|
45
|
+
}
|
|
46
|
+
}
|
package/plugin/.mcp.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"mcp-search": {
|
|
4
|
+
"type": "stdio",
|
|
5
|
+
"command": "sh",
|
|
6
|
+
"args": [
|
|
7
|
+
"-c",
|
|
8
|
+
"_C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; printf '%s\\n' \"$PWD/plugin\" \"$PWD\"; ls -dt \"$HOME/.codex/plugins/cache/claude-mem-local/claude-mem\"/[0-9]*/ \"$HOME/.codex/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ \"$_C/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/bjlee2024/plugin\"; } | while IFS= read -r _R; do [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/mcp-server.cjs\" ] && { printf '%s\\n' \"$_Q\"; break; }; done); [ -n \"$_P\" ] || { echo \"claude-mem: mcp server not found\" >&2; exit 1; }; exec node \"$_P/scripts/mcp-server.cjs\""
|
|
9
|
+
]
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Bugfix Sprint: 2026-01-10
|
|
2
|
+
|
|
3
|
+
## Critical Priority (Blocks Users)
|
|
4
|
+
|
|
5
|
+
### #646 - Plugin bricks Claude Code - stdin fstat EINVAL crash
|
|
6
|
+
- **Impact**: Plugin completely bricks Claude Code on Linux. Users cannot recover without manual config editing.
|
|
7
|
+
- **Root Cause**: Bun's stdin handling causes fstat EINVAL when reading piped input
|
|
8
|
+
- **Related Discussion**: Check if this is a Bun upstream issue
|
|
9
|
+
- [ ] Investigate stdin handling in hook scripts
|
|
10
|
+
- [ ] Test on Linux with stdin piping
|
|
11
|
+
- [ ] Implement fix
|
|
12
|
+
|
|
13
|
+
### #623 - Crash-recovery loop when memory_session_id not captured
|
|
14
|
+
- **Impact**: Infinite loop consuming API tokens, growing queue unbounded
|
|
15
|
+
- **Root Cause**: memory_session_id not captured, causes repeated crash-recovery
|
|
16
|
+
- [ ] Add null/undefined check for memory_session_id
|
|
17
|
+
- [ ] Add circuit breaker for crash-recovery attempts
|
|
18
|
+
|
|
19
|
+
## High Priority
|
|
20
|
+
|
|
21
|
+
### #638 - Worker startup missing JSON output causes hooks to appear stuck
|
|
22
|
+
- **Impact**: UI appears stuck during worker startup
|
|
23
|
+
- [ ] Ensure worker startup emits proper JSON status
|
|
24
|
+
- [ ] Add progress feedback to hook output
|
|
25
|
+
|
|
26
|
+
### #641/#609 - CLAUDE.md files in subdirectories
|
|
27
|
+
- **Impact**: CLAUDE.md files scattered throughout project directories
|
|
28
|
+
- **Note**: This is a documented feature request that was never implemented (setting exists but doesn't work)
|
|
29
|
+
- [ ] Implement the `disableSubdirectoryCLAUDEmd` setting properly
|
|
30
|
+
- [ ] Or change default behavior to not create subdirectory files
|
|
31
|
+
|
|
32
|
+
### #635 - JSON parsing error prevents folder context generation
|
|
33
|
+
- **Impact**: Folder context not generating, breaks context injection
|
|
34
|
+
- **Root Cause**: String spread instead of array spread
|
|
35
|
+
- [ ] Fix the JSON parsing logic
|
|
36
|
+
- [ ] Add proper error handling
|
|
37
|
+
|
|
38
|
+
## Medium Priority
|
|
39
|
+
|
|
40
|
+
### #582 - Tilde paths create literal ~ directories
|
|
41
|
+
- **Impact**: Directories named "~" created instead of expanding to home
|
|
42
|
+
- [ ] Use path expansion for tilde in all path operations
|
|
43
|
+
- [ ] Audit all path handling code
|
|
44
|
+
|
|
45
|
+
### #642/#643 - ChromaDB search fails due to initialization timing
|
|
46
|
+
- **Impact**: Search fails with JSON parse error
|
|
47
|
+
- **Note**: #643 is a duplicate of #642
|
|
48
|
+
- [ ] Fix initialization timing issue
|
|
49
|
+
- [ ] Add proper async/await handling
|
|
50
|
+
|
|
51
|
+
### #626 - HealthMonitor hardcodes ~/.claude path
|
|
52
|
+
- **Impact**: Fails for users with custom config directories
|
|
53
|
+
- [ ] Use configurable path instead of hardcoded ~/.claude
|
|
54
|
+
- [ ] Respect CLAUDE_CONFIG_DIR or similar env var
|
|
55
|
+
|
|
56
|
+
### #598 - Too many messages pollute conversation history
|
|
57
|
+
- **Impact**: Hook messages clutter conversation
|
|
58
|
+
- [ ] Reduce verbosity of hook messages
|
|
59
|
+
- [ ] Make message frequency configurable
|
|
60
|
+
|
|
61
|
+
## Low Priority (Code Quality)
|
|
62
|
+
|
|
63
|
+
### #648 - Empty catch blocks swallow JSON parse errors
|
|
64
|
+
- [ ] Add proper error logging to catch blocks in SessionSearch.ts
|
|
65
|
+
|
|
66
|
+
### #649 - Inconsistent logging in CursorHooksInstaller
|
|
67
|
+
- [ ] Replace console.log with structured logger
|
|
68
|
+
- **Note**: 177 console.log calls across 20 files identified
|
|
69
|
+
|
|
70
|
+
## Won't Fix / Not a Bug
|
|
71
|
+
|
|
72
|
+
### #632 - Feature request for disabling CLAUDE.md in subdirectories
|
|
73
|
+
- **Note**: Covered by #641 implementation
|
|
74
|
+
|
|
75
|
+
### #633 - Help request about Cursor integration
|
|
76
|
+
- **Note**: Documentation/support issue, not a bug
|
|
77
|
+
|
|
78
|
+
### #640 - Arabic README translation
|
|
79
|
+
- **Note**: Documentation PR, not a bugfix
|
|
80
|
+
|
|
81
|
+
### #624 - Beta testing strategy proposal
|
|
82
|
+
- **Note**: Enhancement proposal, not a bugfix
|
|
83
|
+
|
|
84
|
+
## Already Fixed in v9.0.2
|
|
85
|
+
|
|
86
|
+
- Windows Terminal tab accumulation (#625/#628)
|
|
87
|
+
- Windows 11 compatibility - WMIC to PowerShell migration
|
|
88
|
+
- Claude Code 2.1.1 compatibility + path validation (#614)
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
**Recommended Approach**: Fix #646 first (critical blocker), then #623 (crash loop), then work through high priority issues in order of impact.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "claude-mem Codex CLI hook integration",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "startup|resume",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "_HP=$(printenv PATH 2>/dev/null || true); if [ -z \"$_HP\" ] && [ -n \"${SHELL:-}\" ]; then _HP=$(\"$SHELL\" -lc 'printf %s \"$PATH\"' 2>/dev/null || true); fi; _HP=$(printf '%s' \"$_HP\" | tr ' ' ':'); export PATH=\"${_HP:+$_HP:}$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/bjlee2024/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/version-check.js\" ] && { printf '%s\\n' \"$_Q\"; break; }; done); [ -n \"$_P\" ] || { echo \"claude-mem: version-check.js not found\" >&2; exit 1; }; command -v cygpath >/dev/null 2>&1 && { _W=$(cygpath -w \"$_P\" 2>/dev/null); [ -n \"$_W\" ] && _P=\"$_W\"; }; CLAUDE_MEM_CODEX_HOOK=1 node \"$_P/scripts/version-check.js\"",
|
|
11
|
+
"timeout": 5
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"type": "command",
|
|
15
|
+
"command": "_HP=$(printenv PATH 2>/dev/null || true); if [ -z \"$_HP\" ] && [ -n \"${SHELL:-}\" ]; then _HP=$(\"$SHELL\" -lc 'printf %s \"$PATH\"' 2>/dev/null || true); fi; _HP=$(printf '%s' \"$_HP\" | tr ' ' ':'); export PATH=\"${_HP:+$_HP:}$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/bjlee2024/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/bun-runner.js\" ] && [ -f \"$_Q/scripts/worker-service.cjs\" ] && { printf '%s\\n' \"$_Q\"; break; }; done); [ -n \"$_P\" ] || { echo \"claude-mem: plugin scripts not found\" >&2; exit 1; }; command -v cygpath >/dev/null 2>&1 && { _W=$(cygpath -w \"$_P\" 2>/dev/null); [ -n \"$_W\" ] && _P=\"$_W\"; }; node \"$_P/scripts/bun-runner.js\" \"$_P/scripts/worker-service.cjs\" start",
|
|
16
|
+
"timeout": 60
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "command",
|
|
20
|
+
"command": "_HP=$(printenv PATH 2>/dev/null || true); if [ -z \"$_HP\" ] && [ -n \"${SHELL:-}\" ]; then _HP=$(\"$SHELL\" -lc 'printf %s \"$PATH\"' 2>/dev/null || true); fi; _HP=$(printf '%s' \"$_HP\" | tr ' ' ':'); export PATH=\"${_HP:+$_HP:}$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/bjlee2024/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/bun-runner.js\" ] && [ -f \"$_Q/scripts/worker-service.cjs\" ] && { printf '%s\\n' \"$_Q\"; break; }; done); [ -n \"$_P\" ] || { echo \"claude-mem: plugin scripts not found\" >&2; exit 1; }; command -v cygpath >/dev/null 2>&1 && { _W=$(cygpath -w \"$_P\" 2>/dev/null); [ -n \"$_W\" ] && _P=\"$_W\"; }; node \"$_P/scripts/bun-runner.js\" \"$_P/scripts/worker-service.cjs\" hook codex context",
|
|
21
|
+
"timeout": 60,
|
|
22
|
+
"statusMessage": "Loading claude-mem context"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"UserPromptSubmit": [
|
|
28
|
+
{
|
|
29
|
+
"hooks": [
|
|
30
|
+
{
|
|
31
|
+
"type": "command",
|
|
32
|
+
"command": "_HP=$(printenv PATH 2>/dev/null || true); if [ -z \"$_HP\" ] && [ -n \"${SHELL:-}\" ]; then _HP=$(\"$SHELL\" -lc 'printf %s \"$PATH\"' 2>/dev/null || true); fi; _HP=$(printf '%s' \"$_HP\" | tr ' ' ':'); export PATH=\"${_HP:+$_HP:}$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/bjlee2024/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/bun-runner.js\" ] && [ -f \"$_Q/scripts/worker-service.cjs\" ] && { printf '%s\\n' \"$_Q\"; break; }; done); [ -n \"$_P\" ] || { echo \"claude-mem: plugin scripts not found\" >&2; exit 1; }; command -v cygpath >/dev/null 2>&1 && { _W=$(cygpath -w \"$_P\" 2>/dev/null); [ -n \"$_W\" ] && _P=\"$_W\"; }; node \"$_P/scripts/bun-runner.js\" \"$_P/scripts/worker-service.cjs\" hook codex session-init",
|
|
33
|
+
"timeout": 60
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"PreToolUse": [
|
|
39
|
+
{
|
|
40
|
+
"matcher": "^Bash$|^mcp__.+__(read|view|cat)(_file|_files)?$",
|
|
41
|
+
"hooks": [
|
|
42
|
+
{
|
|
43
|
+
"type": "command",
|
|
44
|
+
"command": "_HP=$(printenv PATH 2>/dev/null || true); if [ -z \"$_HP\" ] && [ -n \"${SHELL:-}\" ]; then _HP=$(\"$SHELL\" -lc 'printf %s \"$PATH\"' 2>/dev/null || true); fi; _HP=$(printf '%s' \"$_HP\" | tr ' ' ':'); export PATH=\"${_HP:+$_HP:}$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/bjlee2024/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/bun-runner.js\" ] && [ -f \"$_Q/scripts/worker-service.cjs\" ] && { printf '%s\\n' \"$_Q\"; break; }; done); [ -n \"$_P\" ] || { echo \"claude-mem: plugin scripts not found\" >&2; exit 1; }; command -v cygpath >/dev/null 2>&1 && { _W=$(cygpath -w \"$_P\" 2>/dev/null); [ -n \"$_W\" ] && _P=\"$_W\"; }; node \"$_P/scripts/bun-runner.js\" \"$_P/scripts/worker-service.cjs\" hook codex file-context",
|
|
45
|
+
"timeout": 30
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"PostToolUse": [
|
|
51
|
+
{
|
|
52
|
+
"matcher": ".*",
|
|
53
|
+
"hooks": [
|
|
54
|
+
{
|
|
55
|
+
"type": "command",
|
|
56
|
+
"command": "_HP=$(printenv PATH 2>/dev/null || true); if [ -z \"$_HP\" ] && [ -n \"${SHELL:-}\" ]; then _HP=$(\"$SHELL\" -lc 'printf %s \"$PATH\"' 2>/dev/null || true); fi; _HP=$(printf '%s' \"$_HP\" | tr ' ' ':'); export PATH=\"${_HP:+$_HP:}$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/bjlee2024/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/bun-runner.js\" ] && [ -f \"$_Q/scripts/worker-service.cjs\" ] && { printf '%s\\n' \"$_Q\"; break; }; done); [ -n \"$_P\" ] || { echo \"claude-mem: plugin scripts not found\" >&2; exit 1; }; command -v cygpath >/dev/null 2>&1 && { _W=$(cygpath -w \"$_P\" 2>/dev/null); [ -n \"$_W\" ] && _P=\"$_W\"; }; node \"$_P/scripts/bun-runner.js\" \"$_P/scripts/worker-service.cjs\" hook codex observation",
|
|
57
|
+
"timeout": 120
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"Stop": [
|
|
63
|
+
{
|
|
64
|
+
"hooks": [
|
|
65
|
+
{
|
|
66
|
+
"type": "command",
|
|
67
|
+
"command": "_HP=$(printenv PATH 2>/dev/null || true); if [ -z \"$_HP\" ] && [ -n \"${SHELL:-}\" ]; then _HP=$(\"$SHELL\" -lc 'printf %s \"$PATH\"' 2>/dev/null || true); fi; _HP=$(printf '%s' \"$_HP\" | tr ' ' ':'); export PATH=\"${_HP:+$_HP:}$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/bjlee2024/claude-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/bjlee2024/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/bun-runner.js\" ] && [ -f \"$_Q/scripts/worker-service.cjs\" ] && { printf '%s\\n' \"$_Q\"; break; }; done); [ -n \"$_P\" ] || { echo \"claude-mem: plugin scripts not found\" >&2; exit 1; }; command -v cygpath >/dev/null 2>&1 && { _W=$(cygpath -w \"$_P\" 2>/dev/null); [ -n \"$_W\" ] && _P=\"$_W\"; }; node \"$_P/scripts/bun-runner.js\" \"$_P/scripts/worker-service.cjs\" hook codex summarize",
|
|
68
|
+
"timeout": 60
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
}
|