@kykiles/opencode-mem 13.10.2

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 (89) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +429 -0
  3. package/dist/npx-cli/index.js +9798 -0
  4. package/dist/opencode-plugin/index.js +70 -0
  5. package/package.json +187 -0
  6. package/plugin/.mcp.json +12 -0
  7. package/plugin/bun.lock +160 -0
  8. package/plugin/hooks/bugfixes-2026-01-10.md +92 -0
  9. package/plugin/hooks/hooks.json +87 -0
  10. package/plugin/modes/code--ar.json +24 -0
  11. package/plugin/modes/code--bn.json +24 -0
  12. package/plugin/modes/code--chill.json +8 -0
  13. package/plugin/modes/code--cs.json +24 -0
  14. package/plugin/modes/code--da.json +24 -0
  15. package/plugin/modes/code--de.json +24 -0
  16. package/plugin/modes/code--el.json +24 -0
  17. package/plugin/modes/code--es.json +24 -0
  18. package/plugin/modes/code--fi.json +24 -0
  19. package/plugin/modes/code--fr.json +24 -0
  20. package/plugin/modes/code--he.json +24 -0
  21. package/plugin/modes/code--hi.json +24 -0
  22. package/plugin/modes/code--hu.json +24 -0
  23. package/plugin/modes/code--id.json +24 -0
  24. package/plugin/modes/code--it.json +24 -0
  25. package/plugin/modes/code--ja.json +24 -0
  26. package/plugin/modes/code--ko.json +24 -0
  27. package/plugin/modes/code--nl.json +24 -0
  28. package/plugin/modes/code--no.json +24 -0
  29. package/plugin/modes/code--pl.json +24 -0
  30. package/plugin/modes/code--pt-br.json +24 -0
  31. package/plugin/modes/code--ro.json +24 -0
  32. package/plugin/modes/code--ru.json +24 -0
  33. package/plugin/modes/code--sv.json +24 -0
  34. package/plugin/modes/code--th.json +24 -0
  35. package/plugin/modes/code--tr.json +24 -0
  36. package/plugin/modes/code--uk.json +24 -0
  37. package/plugin/modes/code--ur.json +25 -0
  38. package/plugin/modes/code--vi.json +24 -0
  39. package/plugin/modes/code--zh.json +24 -0
  40. package/plugin/modes/code.json +139 -0
  41. package/plugin/modes/email-investigation.json +120 -0
  42. package/plugin/modes/law-study--chill.json +7 -0
  43. package/plugin/modes/law-study-CLAUDE.md +85 -0
  44. package/plugin/modes/law-study.json +120 -0
  45. package/plugin/modes/meme-tokens.json +125 -0
  46. package/plugin/package.json +45 -0
  47. package/plugin/scripts/bun-runner.js +238 -0
  48. package/plugin/scripts/context-generator.cjs +825 -0
  49. package/plugin/scripts/mcp-server.cjs +249 -0
  50. package/plugin/scripts/server-service.cjs +9939 -0
  51. package/plugin/scripts/statusline-counts.js +40 -0
  52. package/plugin/scripts/transcript-watcher.cjs +29 -0
  53. package/plugin/scripts/version-check.js +193 -0
  54. package/plugin/scripts/worker-service.cjs +2238 -0
  55. package/plugin/scripts/worker-wrapper.cjs +2 -0
  56. package/plugin/skills/babysit/SKILL.md +87 -0
  57. package/plugin/skills/design-is/SKILL.md +312 -0
  58. package/plugin/skills/do/SKILL.md +45 -0
  59. package/plugin/skills/how-it-works/SKILL.md +22 -0
  60. package/plugin/skills/how-it-works/onboarding-explainer.md +17 -0
  61. package/plugin/skills/knowledge-agent/SKILL.md +80 -0
  62. package/plugin/skills/learn-codebase/SKILL.md +21 -0
  63. package/plugin/skills/make-plan/SKILL.md +67 -0
  64. package/plugin/skills/mem-search/SKILL.md +131 -0
  65. package/plugin/skills/oh-my-issues/SKILL.md +226 -0
  66. package/plugin/skills/pathfinder/SKILL.md +111 -0
  67. package/plugin/skills/smart-explore/SKILL.md +193 -0
  68. package/plugin/skills/standup/SKILL.md +142 -0
  69. package/plugin/skills/standup/agent-brief.md +47 -0
  70. package/plugin/skills/standup/standup.mjs +662 -0
  71. package/plugin/skills/timeline-report/SKILL.md +211 -0
  72. package/plugin/skills/version-bump/SKILL.md +74 -0
  73. package/plugin/skills/version-bump/scripts/generate_changelog.js +34 -0
  74. package/plugin/skills/weekly-digests/SKILL.md +262 -0
  75. package/plugin/skills/what-the/SKILL.md +6 -0
  76. package/plugin/skills/wowerpoint/SKILL.md +205 -0
  77. package/plugin/sqlite/SessionStore.js +764 -0
  78. package/plugin/sqlite/observations/files.js +10 -0
  79. package/plugin/ui/assets/fonts/monaspace-radon-var.woff +0 -0
  80. package/plugin/ui/assets/fonts/monaspace-radon-var.woff2 +0 -0
  81. package/plugin/ui/claude-mem-logo-for-dark-mode.webp +0 -0
  82. package/plugin/ui/claude-mem-logo-stylized.png +0 -0
  83. package/plugin/ui/claude-mem-logomark.webp +0 -0
  84. package/plugin/ui/icon-thick-completed.svg +8 -0
  85. package/plugin/ui/icon-thick-investigated.svg +8 -0
  86. package/plugin/ui/icon-thick-learned.svg +12 -0
  87. package/plugin/ui/icon-thick-next-steps.svg +8 -0
  88. package/plugin/ui/viewer-bundle.js +65 -0
  89. package/plugin/ui/viewer.html +2402 -0
package/package.json ADDED
@@ -0,0 +1,187 @@
1
+ {
2
+ "name": "@kykiles/opencode-mem",
3
+ "version": "13.10.2",
4
+ "description": "Persistent memory compression system for OpenCode - capture, compress, and inject context across sessions",
5
+ "keywords": [
6
+ "opencode",
7
+ "mcp",
8
+ "plugin",
9
+ "memory",
10
+ "compression",
11
+ "knowledge-graph",
12
+ "rag",
13
+ "ai-memory",
14
+ "persistent-context",
15
+ "typescript",
16
+ "nodejs"
17
+ ],
18
+ "author": "Alex Newman",
19
+ "license": "Apache-2.0",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/kykiles/opencode-mem.git"
23
+ },
24
+ "homepage": "https://github.com/kykiles/opencode-mem#readme",
25
+ "bugs": {
26
+ "url": "https://github.com/kykiles/opencode-mem/issues"
27
+ },
28
+ "type": "module",
29
+ "bin": {
30
+ "opencode-mem": "./dist/npx-cli/index.js"
31
+ },
32
+ "exports": {
33
+ "./modes/*": "./plugin/modes/*"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "plugin/.mcp.json",
38
+ "plugin/package.json",
39
+ "plugin/bun.lock",
40
+ "plugin/hooks",
41
+ "plugin/modes",
42
+ "plugin/scripts/*.js",
43
+ "plugin/scripts/*.cjs",
44
+ "plugin/sqlite",
45
+ "plugin/skills",
46
+ "plugin/ui"
47
+ ],
48
+ "engines": {
49
+ "node": ">=20.12.0",
50
+ "bun": ">=1.0.0"
51
+ },
52
+ "scripts": {
53
+ "dev": "npm run build",
54
+ "build": "node scripts/sync-plugin-manifests.js && node scripts/build-hooks.js && node scripts/gen-plugin-lockfile.cjs",
55
+ "sync-marketplace": "node scripts/sync-marketplace.cjs",
56
+ "sync-marketplace:force": "node scripts/sync-marketplace.cjs --force",
57
+ "build:binaries": "node scripts/build-worker-binary.js",
58
+ "build:cli-binary": "bun build --compile --minify ./src/services/worker-service.ts --outfile plugin/scripts/opencode-mem",
59
+ "worker:logs": "tail -n 50 ~/.opencode-mem/logs/worker-$(date +%Y-%m-%d).log",
60
+ "worker:tail": "tail -f 50 ~/.opencode-mem/logs/worker-$(date +%Y-%m-%d).log",
61
+ "changelog:generate": "node scripts/generate-changelog.js",
62
+ "discord:notify": "node scripts/discord-release-notify.js",
63
+ "worker:start": "bun plugin/scripts/worker-service.cjs start",
64
+ "worker:stop": "bun plugin/scripts/worker-service.cjs stop",
65
+ "worker:restart": "bun plugin/scripts/worker-service.cjs restart",
66
+ "worker:status": "bun plugin/scripts/worker-service.cjs status",
67
+ "queue": "bun scripts/check-pending-queue.ts",
68
+ "queue:process": "bun scripts/check-pending-queue.ts --process",
69
+ "queue:clear:pending": "bun scripts/clear-pending-queue.ts --all --force",
70
+ "pr:status": "bun scripts/pr-babysit-status.ts",
71
+ "memory:regenerate": "bun scripts/regenerate-claude-md.ts",
72
+ "memory:dry-run": "bun scripts/regenerate-claude-md.ts --dry-run",
73
+ "strip-comments": "bun scripts/strip-comments.ts",
74
+ "strip-comments:check": "bun scripts/strip-comments.ts --check",
75
+ "strip-comments:dry-run": "bun scripts/strip-comments.ts --dry-run",
76
+ "translate-readme": "bun scripts/translate-readme/cli.ts -v -o docs/i18n README.md",
77
+ "translate:tier1": "npm run translate-readme -- zh zh-tw ja pt pt-br ko es de fr",
78
+ "translate:tier2": "npm run translate-readme -- he ar ru pl cs nl tr uk",
79
+ "translate:tier3": "npm run translate-readme -- vi tl id th hi bn ur ro sv",
80
+ "translate:tier4": "npm run translate-readme -- it el hu fi da no",
81
+ "translate:all": "npm run translate:tier1 & npm run translate:tier2 & npm run translate:tier3 & npm run translate:tier4 & wait",
82
+ "bug-report": "bun scripts/bug-report/cli.ts",
83
+ "lint:hook-io": "node scripts/check-hook-io-discipline.cjs",
84
+ "lint:spawn-env": "node scripts/check-spawn-env-discipline.cjs",
85
+ "typecheck": "tsc --noEmit && tsc --noEmit -p src/ui/viewer/tsconfig.json",
86
+ "typecheck:root": "tsc --noEmit",
87
+ "typecheck:viewer": "tsc --noEmit -p src/ui/viewer/tsconfig.json",
88
+ "test": "bun test",
89
+ "test:sqlite": "bun test tests/sqlite/",
90
+ "test:agents": "bun test tests/worker/agents/",
91
+ "test:search": "bun test tests/worker/search/",
92
+ "test:context": "bun test tests/context/",
93
+ "test:infra": "bun test tests/infrastructure/",
94
+ "test:server": "bun test tests/server/",
95
+ "e2e:server:docker": "bash scripts/e2e-server-docker.sh",
96
+ "check:postinstall-allowlist": "node scripts/check-postinstall-allowlist.js",
97
+ "smoke:clean-room": "node scripts/smoke-clean-room.cjs",
98
+ "prepublishOnly": "npm run build && node scripts/check-postinstall-allowlist.js",
99
+ "release": "np",
100
+ "release:patch": "np patch --no-cleanup",
101
+ "release:minor": "np minor --no-cleanup",
102
+ "release:major": "np major --no-cleanup"
103
+ },
104
+ "np": {
105
+ "yarn": false,
106
+ "contents": ".",
107
+ "testScript": "test",
108
+ "2fa": false
109
+ },
110
+ "dependencies": {
111
+ "@better-auth/api-key": "^1.6.16",
112
+ "better-auth": "^1.6.16"
113
+ },
114
+ "//dependencies-note": "Only deps that survive the bundler as a live `import`/`require` in a shipped artifact live here — better-auth (+ api-key) is the server-runtime auth surface, externalized from the worker bundle deliberately (see scripts/build-hooks.js). Everything else (express, bullmq, ioredis, react, react-dom, dompurify, @clack/prompts, ansi-to-html, posthog-node, shell-quote, pg, zod, @modelcontextprotocol/sdk, @anthropic-ai/claude-agent-sdk) is esbuild-inlined into the worker/server/npx bundles (or, for zod's plugin runtime copy, resolved from plugin/package.json's own dependency), so it is a build-time devDependency and is not downloaded by consumers of the `opencode-mem` package.",
115
+ "overrides": {
116
+ "tmp": "^0.2.7"
117
+ },
118
+ "devDependencies": {
119
+ "@anthropic-ai/claude-agent-sdk": "^0.3.172",
120
+ "@clack/prompts": "^1.3.0",
121
+ "@modelcontextprotocol/sdk": "^1.29.0",
122
+ "ansi-to-html": "^0.7.2",
123
+ "bullmq": "^5.76.6",
124
+ "dompurify": "^3.4.9",
125
+ "express": "^5.2.1",
126
+ "ioredis": "^5.10.1",
127
+ "pg": "^8.20.0",
128
+ "posthog-node": "^5.36.15",
129
+ "react": "^19.2.6",
130
+ "react-dom": "^19.2.6",
131
+ "shell-quote": "^1.8.3",
132
+ "zod": "^4.4.3",
133
+ "@derekstride/tree-sitter-sql": "^0.3.11",
134
+ "@tree-sitter-grammars/tree-sitter-lua": "^0.4.1",
135
+ "@tree-sitter-grammars/tree-sitter-markdown": "^0.3.2",
136
+ "@tree-sitter-grammars/tree-sitter-toml": "^0.7.0",
137
+ "@tree-sitter-grammars/tree-sitter-yaml": "^0.7.1",
138
+ "@tree-sitter-grammars/tree-sitter-zig": "^1.1.2",
139
+ "@types/bun": "^1.3.13",
140
+ "@types/express": "^5.0.6",
141
+ "@types/node": "^25.9.2",
142
+ "@types/pg": "^8.20.0",
143
+ "@types/react": "^19.2.17",
144
+ "@types/react-dom": "^19.2.3",
145
+ "esbuild": "^0.28.0",
146
+ "np": "^11.2.0",
147
+ "parse5": "^8.0.1",
148
+ "postcss": "^8.5.14",
149
+ "remark-mdx": "^3.1.1",
150
+ "remark-parse": "^11.0.0",
151
+ "tree-sitter-bash": "^0.25.1",
152
+ "tree-sitter-c": "^0.24.1",
153
+ "tree-sitter-cli": "^0.26.8",
154
+ "tree-sitter-cpp": "^0.23.4",
155
+ "tree-sitter-css": "^0.25.0",
156
+ "tree-sitter-go": "^0.25.0",
157
+ "tree-sitter-haskell": "^0.23.1",
158
+ "tree-sitter-java": "^0.23.5",
159
+ "tree-sitter-javascript": "^0.25.0",
160
+ "tree-sitter-kotlin": "^0.3.8",
161
+ "tree-sitter-php": "^0.24.2",
162
+ "tree-sitter-python": "^0.25.0",
163
+ "tree-sitter-ruby": "^0.23.1",
164
+ "tree-sitter-rust": "^0.24.0",
165
+ "tree-sitter-scala": "^0.24.0",
166
+ "tree-sitter-scss": "^1.0.0",
167
+ "tree-sitter-swift": "^0.7.1",
168
+ "tree-sitter-typescript": "^0.23.2",
169
+ "tsup": "^8.5.1",
170
+ "typescript": "^6.0.3",
171
+ "unified": "^11.0.5",
172
+ "unist-util-visit": "^5.1.0"
173
+ },
174
+ "trustedDependencies": [
175
+ "esbuild",
176
+ "tree-sitter-c",
177
+ "tree-sitter-cli",
178
+ "tree-sitter-cpp",
179
+ "tree-sitter-go",
180
+ "tree-sitter-java",
181
+ "tree-sitter-javascript",
182
+ "tree-sitter-python",
183
+ "tree-sitter-ruby",
184
+ "tree-sitter-rust",
185
+ "tree-sitter-typescript"
186
+ ]
187
+ }
@@ -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'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const d=process.cwd();const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,p.join(d,\"plugin\"),d,...L(p.join(h,\".codex/plugins/cache/opencode-mem-local/opencode-mem\")),...L(p.join(h,\".codex/plugins/cache/kykiles/opencode-mem\")),...L(p.join(C,\"plugins/cache/kykiles/opencode-mem\")),p.join(C,\"plugins/marketplaces/thedotmack/plugin\")].filter(Boolean);let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(f.existsSync(p.join(r,'scripts',\"mcp-server.cjs\"))){R=r;break}}if(!R){process.stderr.write(\"opencode-mem: mcp server not found\\n\");process.exit(1)}const ch=c.spawn(process.execPath,[p.join(R,'scripts',\"mcp-server.cjs\")],{stdio:'inherit'});for(const s of ['SIGTERM','SIGINT','SIGHUP'])process.on(s,()=>{try{ch.kill(s)}catch{}});ch.on('exit',(code,sig)=>{if(sig){process.removeAllListeners(sig);try{process.kill(process.pid,sig)}catch{process.exit(1)}}else process.exit(code==null?0:code)})"
9
+ ]
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,160 @@
1
+ {
2
+ "lockfileVersion": 1,
3
+ "configVersion": 1,
4
+ "workspaces": {
5
+ "": {
6
+ "name": "claude-mem-plugin",
7
+ "dependencies": {
8
+ "@derekstride/tree-sitter-sql": "^0.3.11",
9
+ "@tree-sitter-grammars/tree-sitter-lua": "^0.4.1",
10
+ "@tree-sitter-grammars/tree-sitter-markdown": "^0.3.2",
11
+ "@tree-sitter-grammars/tree-sitter-toml": "^0.7.0",
12
+ "@tree-sitter-grammars/tree-sitter-yaml": "^0.7.1",
13
+ "@tree-sitter-grammars/tree-sitter-zig": "^1.1.2",
14
+ "shell-quote": "^1.8.3",
15
+ "tree-sitter-bash": "^0.25.1",
16
+ "tree-sitter-c": "^0.24.1",
17
+ "tree-sitter-cli": "^0.26.5",
18
+ "tree-sitter-cpp": "^0.23.4",
19
+ "tree-sitter-css": "^0.25.0",
20
+ "tree-sitter-go": "^0.25.0",
21
+ "tree-sitter-haskell": "^0.23.1",
22
+ "tree-sitter-java": "^0.23.5",
23
+ "tree-sitter-javascript": "^0.25.0",
24
+ "tree-sitter-kotlin": "^0.3.8",
25
+ "tree-sitter-php": "^0.24.2",
26
+ "tree-sitter-python": "^0.25.0",
27
+ "tree-sitter-ruby": "^0.23.1",
28
+ "tree-sitter-rust": "^0.24.0",
29
+ "tree-sitter-scala": "^0.24.0",
30
+ "tree-sitter-scss": "^1.0.0",
31
+ "tree-sitter-swift": "^0.7.1",
32
+ "tree-sitter-typescript": "^0.23.2",
33
+ "zod": "^4.4.3",
34
+ },
35
+ },
36
+ },
37
+ "trustedDependencies": [
38
+ "tree-sitter-cli",
39
+ ],
40
+ "overrides": {
41
+ "tree-sitter": "^0.25.0",
42
+ },
43
+ "packages": {
44
+ "@derekstride/tree-sitter-sql": ["@derekstride/tree-sitter-sql@0.3.11", "", { "dependencies": { "node-addon-api": "^7.1.0", "node-gyp-build": "^4.8.0" }, "peerDependencies": { "tree-sitter": "^0.21.0" } }, "sha512-YRtTXVWK4n7/3BUGchhGcW/IF1u2ldR2fd0t3Uw7ymbGXcRfiG3v1T6N43jQKXz2LwN+Nx+Ab96T0HtusBVH9g=="],
45
+
46
+ "@tree-sitter-grammars/tree-sitter-lua": ["@tree-sitter-grammars/tree-sitter-lua@0.4.1", "", { "dependencies": { "node-addon-api": "^8.5.0", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.22.4" }, "optionalPeers": ["tree-sitter"] }, "sha512-EwagFaU6ZveVk18/Y8qUhZkkiBKnQ7dSCHbm//TUroLVKy3i1rOYGy/cNHtSkAb1eDvS1HhCLybH2S541Cya/g=="],
47
+
48
+ "@tree-sitter-grammars/tree-sitter-markdown": ["@tree-sitter-grammars/tree-sitter-markdown@0.3.2", "", { "dependencies": { "node-addon-api": "^8.1.0", "node-gyp-build": "^4.8.1" }, "peerDependencies": { "tree-sitter": "^0.21.1" } }, "sha512-hQXCcDVvg2t4E8cn7zz6jjIBerzk9E9ZlHxJp5IrUOpY4s1YVpXJbMeWZks2/V7lmkPRnnkM8IrTbQ5ltwEOnA=="],
49
+
50
+ "@tree-sitter-grammars/tree-sitter-toml": ["@tree-sitter-grammars/tree-sitter-toml@0.7.0", "", { "dependencies": { "node-addon-api": "^8.3.0", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.22.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-873Kl518Qm5ghbWadISY41rwFjee0v+2bU4twwvAw2VAJcWwj2vBo3F3hOCXfbqHaFiqc4qh6eLhkMl2YZJS0g=="],
51
+
52
+ "@tree-sitter-grammars/tree-sitter-yaml": ["@tree-sitter-grammars/tree-sitter-yaml@0.7.1", "", { "dependencies": { "node-addon-api": "^8.3.1", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.22.4" }, "optionalPeers": ["tree-sitter"] }, "sha512-AynBwkIoQCTgjDR33bDUp9Mqq+YTco0is3n5hRApMqG9of/6A4eQsfC1/uSEeHSUyMQSYawcAWamsexnVpIP4Q=="],
53
+
54
+ "@tree-sitter-grammars/tree-sitter-zig": ["@tree-sitter-grammars/tree-sitter-zig@1.1.2", "", { "dependencies": { "node-addon-api": "^8.3.0", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.22.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-J0L31HZ2isy3F5zb2g5QWQOv2r/pbruQNL9ADhuQv2pn5BQOzxt80WcEJaYXBeuJ8GHxVT42slpCna8k1c8LOw=="],
55
+
56
+ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
57
+
58
+ "nan": ["nan@2.27.0", "", {}, "sha512-hC+0LidcL3XE4rp1C4H54KujgXKzbfyTngZTwBByQxsOxCEKZT0MPQ4hOKUH2jU1OYstqdDH4onyHPDzcV0XdQ=="],
59
+
60
+ "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="],
61
+
62
+ "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="],
63
+
64
+ "shell-quote": ["shell-quote@1.8.4", "", {}, "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ=="],
65
+
66
+ "tree-sitter": ["tree-sitter@0.25.0", "", { "dependencies": { "node-addon-api": "^8.3.0", "node-gyp-build": "^4.8.4" } }, "sha512-PGZZzFW63eElZJDe/b/R/LbsjDDYJa5UEjLZJB59RQsMX+fo0j54fqBPn1MGKav/QNa0JR0zBiVaikYDWCj5KQ=="],
67
+
68
+ "tree-sitter-bash": ["tree-sitter-bash@0.25.1", "", { "dependencies": { "node-addon-api": "^8.2.1", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.25.0" }, "optionalPeers": ["tree-sitter"] }, "sha512-7hMytuYIMoXOq24yRulgIxthE9YmggZIOHCyPTTuJcu6EU54tYD+4G39cUb28kxC6jMf/AbPfWGLQtgPTdh3xw=="],
69
+
70
+ "tree-sitter-c": ["tree-sitter-c@0.24.1", "", { "dependencies": { "node-addon-api": "^8.3.1", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.22.4" }, "optionalPeers": ["tree-sitter"] }, "sha512-lkYwWN3SRecpvaeqmFKkuPNR3ZbtnvHU+4XAEEkJdrp3JfSp2pBrhXOtvfsENUneye76g889Y0ddF2DM0gEDpA=="],
71
+
72
+ "tree-sitter-cli": ["tree-sitter-cli@0.26.9", "", { "bin": { "tree-sitter": "cli.js" } }, "sha512-7l+U1RmazPVe+yA/JiX80GFOILnL/j24GbawamIzNQC8UlINrcyECbaWGaG1wuq4j/m0DQTx7Uu4r0iW9Ao1BQ=="],
73
+
74
+ "tree-sitter-cpp": ["tree-sitter-cpp@0.23.4", "", { "dependencies": { "node-addon-api": "^8.2.1", "node-gyp-build": "^4.8.2", "tree-sitter-c": "^0.23.1" }, "peerDependencies": { "tree-sitter": "^0.21.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-qR5qUDyhZ5jJ6V8/umiBxokRbe89bCGmcq/dk94wI4kN86qfdV8k0GHIUEKaqWgcu42wKal5E97LKpLeVW8sKw=="],
75
+
76
+ "tree-sitter-css": ["tree-sitter-css@0.25.0", "", { "dependencies": { "node-addon-api": "^8.5.0", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.25.0" }, "optionalPeers": ["tree-sitter"] }, "sha512-FRc9R8ePrwJiUhZsuZ/wcFQ3K8Z+9yCgDrrUjuYswGWlN89UvcB9vslTUGZElQWGwhS8sUw3/r2n4lpb2sxT4Q=="],
77
+
78
+ "tree-sitter-go": ["tree-sitter-go@0.25.0", "", { "dependencies": { "node-addon-api": "^8.3.1", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.25.0" }, "optionalPeers": ["tree-sitter"] }, "sha512-APBc/Dq3xz/e35Xpkhb1blu5UgW+2E3RyGWawZSCNcbGwa7jhSQPS8KsUupuzBla8PCo8+lz9W/JDJjmfRa2tw=="],
79
+
80
+ "tree-sitter-haskell": ["tree-sitter-haskell@0.23.1", "", { "dependencies": { "node-addon-api": "^8.2.2", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.21.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-qG4CYhejveu9DLMLEGBz/n9/TTeGSFLC6wniwOgG6m8/v7Dng8qR0ob0EVG7+XH+9WiOxohpGA23EhceWuxY4w=="],
81
+
82
+ "tree-sitter-java": ["tree-sitter-java@0.23.5", "", { "dependencies": { "node-addon-api": "^8.2.2", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.21.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-Yju7oQ0Xx7GcUT01mUglPP+bYfvqjNCGdxqigTnew9nLGoII42PNVP3bHrYeMxswiCRM0yubWmN5qk+zsg0zMA=="],
83
+
84
+ "tree-sitter-javascript": ["tree-sitter-javascript@0.25.0", "", { "dependencies": { "node-addon-api": "^8.3.1", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.25.0" }, "optionalPeers": ["tree-sitter"] }, "sha512-1fCbmzAskZkxcZzN41sFZ2br2iqTYP3tKls1b/HKGNPQUVOpsUxpmGxdN/wMqAk3jYZnYBR1dd/y/0avMeU7dw=="],
85
+
86
+ "tree-sitter-kotlin": ["tree-sitter-kotlin@0.3.8", "", { "dependencies": { "node-addon-api": "^7.1.0", "node-gyp-build": "^4.8.0" }, "peerDependencies": { "tree-sitter": "^0.21.0" } }, "sha512-A4obq6bjzmYrA+F0JLLoheFPcofFkctNaZSpnDd+GPn1SfVZLY4/GG4C0cYVBTOShuPBGGAOPLM1JWLZQV4m1g=="],
87
+
88
+ "tree-sitter-php": ["tree-sitter-php@0.24.2", "", { "dependencies": { "node-addon-api": "^8.2.2", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.22.4" }, "optionalPeers": ["tree-sitter"] }, "sha512-zwgAePc/HozNaWOOfwRAA+3p8yhuehRw8Fb7vn5qd2XjiIc93uJPryDTMYTSjBRjVIUg/KY6pM3rRzs8dSwKfw=="],
89
+
90
+ "tree-sitter-python": ["tree-sitter-python@0.25.0", "", { "dependencies": { "node-addon-api": "^8.5.0", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.25.0" }, "optionalPeers": ["tree-sitter"] }, "sha512-eCmJx6zQa35GxaCtQD+wXHOhYqBxEL+bp71W/s3fcDMu06MrtzkVXR437dRrCrbrDbyLuUDJpAgycs7ncngLXw=="],
91
+
92
+ "tree-sitter-ruby": ["tree-sitter-ruby@0.23.1", "", { "dependencies": { "node-addon-api": "^8.2.2", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.21.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-d9/RXgWjR6HanN7wTYhS5bpBQLz1VkH048Vm3CodPGyJVnamXMGb8oEhDypVCBq4QnHui9sTXuJBBP3WtCw5RA=="],
93
+
94
+ "tree-sitter-rust": ["tree-sitter-rust@0.24.0", "", { "dependencies": { "node-addon-api": "^8.2.2", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.22.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-NWemUDf629Tfc90Y0Z55zuwPCAHkLxWnMf2RznYu4iBkkrQl2o/CHGB7Cr52TyN5F1DAx8FmUnDtCy9iUkXZEQ=="],
95
+
96
+ "tree-sitter-scala": ["tree-sitter-scala@0.24.0", "", { "dependencies": { "node-addon-api": "^8.2.2", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.21.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-vkMuAUrBZ1zZz2XcGDQk18Kz73JkpgaeXzbNVobPke0G35sd9jH32aUxG6OLRKM7et0TbsfqkWf4DeJoGk4K1g=="],
97
+
98
+ "tree-sitter-scss": ["tree-sitter-scss@1.0.0", "", { "dependencies": { "node-addon-api": "^8.0.0", "node-gyp-build": "^4.8.0", "tree-sitter-css": "^0.20.0" }, "peerDependencies": { "tree-sitter": "^0.21.0" }, "optionalPeers": ["tree-sitter"] }, "sha512-CYHEkSG4RTGHfwwQSXwsnagRUNr2Gh2jzrvNUXz95OfSzOdUAtPx4aM1zOGSprAzOPnwlBQfbYs0vVsklf3WWA=="],
99
+
100
+ "tree-sitter-swift": ["tree-sitter-swift@0.7.1", "", { "dependencies": { "node-addon-api": "^8.0.0", "node-gyp-build": "^4.8.0", "tree-sitter-cli": "^0.23", "which": "2.0.2" }, "peerDependencies": { "tree-sitter": "^0.22.1" } }, "sha512-pneKVTuGamaBsqqqfB9BvNQjktzh/0IVPR54jLB5Fq/JTDQwYHd0Wo6pVyZ5jAYpbztzq+rJ/rpL9ruxTmSoKw=="],
101
+
102
+ "tree-sitter-typescript": ["tree-sitter-typescript@0.23.2", "", { "dependencies": { "node-addon-api": "^8.2.2", "node-gyp-build": "^4.8.2", "tree-sitter-javascript": "^0.23.1" }, "peerDependencies": { "tree-sitter": "^0.21.0" }, "optionalPeers": ["tree-sitter"] }, "sha512-e04JUUKxTT53/x3Uq1zIL45DoYKVfHH4CZqwgZhPg5qYROl5nQjV+85ruFzFGZxu+QeFVbRTPDRnqL9UbU4VeA=="],
103
+
104
+ "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
105
+
106
+ "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
107
+
108
+ "@tree-sitter-grammars/tree-sitter-lua/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
109
+
110
+ "@tree-sitter-grammars/tree-sitter-markdown/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
111
+
112
+ "@tree-sitter-grammars/tree-sitter-toml/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
113
+
114
+ "@tree-sitter-grammars/tree-sitter-yaml/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
115
+
116
+ "@tree-sitter-grammars/tree-sitter-zig/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
117
+
118
+ "tree-sitter/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
119
+
120
+ "tree-sitter-bash/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
121
+
122
+ "tree-sitter-c/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
123
+
124
+ "tree-sitter-cpp/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
125
+
126
+ "tree-sitter-cpp/tree-sitter-c": ["tree-sitter-c@0.23.6", "", { "dependencies": { "node-addon-api": "^8.3.0", "node-gyp-build": "^4.8.4" }, "peerDependencies": { "tree-sitter": "^0.22.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-0dxXKznVyUA0s6PjNolJNs2yF87O5aL538A/eR6njA5oqX3C3vH4vnx3QdOKwuUdpKEcFdHuiDpRKLLCA/tjvQ=="],
127
+
128
+ "tree-sitter-css/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
129
+
130
+ "tree-sitter-go/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
131
+
132
+ "tree-sitter-haskell/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
133
+
134
+ "tree-sitter-java/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
135
+
136
+ "tree-sitter-javascript/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
137
+
138
+ "tree-sitter-php/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
139
+
140
+ "tree-sitter-python/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
141
+
142
+ "tree-sitter-ruby/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
143
+
144
+ "tree-sitter-rust/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
145
+
146
+ "tree-sitter-scala/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
147
+
148
+ "tree-sitter-scss/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
149
+
150
+ "tree-sitter-scss/tree-sitter-css": ["tree-sitter-css@0.20.0", "", { "dependencies": { "nan": "^2.18.0" } }, "sha512-ammbs1bnIwHXPVtPGNc3T16rhPFRiK97pBgO4svlYWyt+fSEgGQzK3MSWB5vf3k3pSDWkpEFOTUxPPMR6k7N7Q=="],
151
+
152
+ "tree-sitter-swift/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
153
+
154
+ "tree-sitter-swift/tree-sitter-cli": ["tree-sitter-cli@0.23.2", "", { "bin": { "tree-sitter": "cli.js" } }, "sha512-kPPXprOqREX+C/FgUp2Qpt9jd0vSwn+hOgjzVv/7hapdoWpa+VeWId53rf4oNNd29ikheF12BYtGD/W90feMbA=="],
155
+
156
+ "tree-sitter-typescript/node-addon-api": ["node-addon-api@8.8.0", "", {}, "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA=="],
157
+
158
+ "tree-sitter-typescript/tree-sitter-javascript": ["tree-sitter-javascript@0.23.1", "", { "dependencies": { "node-addon-api": "^8.2.2", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.21.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-/bnhbrTD9frUYHQTiYnPcxyHORIw157ERBa6dqzaKxvR/x3PC4Yzd+D1pZIMS6zNg2v3a8BZ0oK7jHqsQo9fWA=="],
159
+ }
160
+ }
@@ -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,87 @@
1
+ {
2
+ "description": "Claude-mem memory system hooks",
3
+ "hooks": {
4
+ "Setup": [
5
+ {
6
+ "matcher": "*",
7
+ "hooks": [
8
+ {
9
+ "type": "command",
10
+ "shell": "bash",
11
+ "command": "export PATH=\"$HOME/.nvm/versions/node/v$(ls \\\"$HOME/.nvm/versions/node\\\" 2>/dev/null | sed 's/^v//' | sort -t. -k1,1n -k2,2n -k3,3n | tail -1)/bin:$HOME/.local/bin:/usr/local/bin:/opt/homebrew/bin:$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _F=; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/kykiles/opencode-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/thedotmack/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/version-check.js\" ] && [ -z \"$_F\" ] && { _F=1; printf '%s\\n' \"$_Q\"; }; done); [ -n \"$_P\" ] || { echo \"opencode-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\"; }; node \"$_P/scripts/version-check.js\"",
12
+ "timeout": 300
13
+ }
14
+ ]
15
+ }
16
+ ],
17
+ "SessionStart": [
18
+ {
19
+ "matcher": "startup|clear|compact",
20
+ "hooks": [
21
+ {
22
+ "type": "command",
23
+ "shell": "bash",
24
+ "command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _F=; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/kykiles/opencode-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/thedotmack/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\" ] && [ -z \"$_F\" ] && { _F=1; printf '%s\\n' \"$_Q\"; }; done); [ -n \"$_P\" ] || { echo \"opencode-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; echo '{\"continue\":true,\"suppressOutput\":true}'",
25
+ "timeout": 60
26
+ },
27
+ {
28
+ "type": "command",
29
+ "shell": "bash",
30
+ "command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _F=; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/kykiles/opencode-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/thedotmack/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\" ] && [ -z \"$_F\" ] && { _F=1; printf '%s\\n' \"$_Q\"; }; done); [ -n \"$_P\" ] || { echo \"opencode-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 claude-code context",
31
+ "timeout": 60
32
+ }
33
+ ]
34
+ }
35
+ ],
36
+ "UserPromptSubmit": [
37
+ {
38
+ "hooks": [
39
+ {
40
+ "type": "command",
41
+ "shell": "bash",
42
+ "command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _F=; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/kykiles/opencode-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/thedotmack/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\" ] && [ -z \"$_F\" ] && { _F=1; printf '%s\\n' \"$_Q\"; }; done); [ -n \"$_P\" ] || { echo \"opencode-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 claude-code session-init",
43
+ "timeout": 60
44
+ }
45
+ ]
46
+ }
47
+ ],
48
+ "PostToolUse": [
49
+ {
50
+ "matcher": "*",
51
+ "hooks": [
52
+ {
53
+ "type": "command",
54
+ "shell": "bash",
55
+ "command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _F=; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/kykiles/opencode-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/thedotmack/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\" ] && [ -z \"$_F\" ] && { _F=1; printf '%s\\n' \"$_Q\"; }; done); [ -n \"$_P\" ] || { echo \"opencode-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 claude-code observation",
56
+ "timeout": 120
57
+ }
58
+ ]
59
+ }
60
+ ],
61
+ "PreToolUse": [
62
+ {
63
+ "matcher": "Read",
64
+ "hooks": [
65
+ {
66
+ "type": "command",
67
+ "shell": "bash",
68
+ "command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _F=; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/kykiles/opencode-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/thedotmack/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\" ] && [ -z \"$_F\" ] && { _F=1; printf '%s\\n' \"$_Q\"; }; done); [ -n \"$_P\" ] || { echo \"opencode-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 claude-code file-context",
69
+ "timeout": 60
70
+ }
71
+ ]
72
+ }
73
+ ],
74
+ "Stop": [
75
+ {
76
+ "hooks": [
77
+ {
78
+ "type": "command",
79
+ "shell": "bash",
80
+ "command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _F=; _P=$({ [ -n \"$_E\" ] && printf '%s\\n' \"$_E\"; ls -dt \"$_C/plugins/cache/kykiles/opencode-mem\"/[0-9]*/ 2>/dev/null; printf '%s\\n' \"$_C/plugins/marketplaces/thedotmack/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\" ] && [ -z \"$_F\" ] && { _F=1; printf '%s\\n' \"$_Q\"; }; done); [ -n \"$_P\" ] || { echo \"opencode-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 claude-code summarize",
81
+ "timeout": 120
82
+ }
83
+ ]
84
+ }
85
+ ]
86
+ }
87
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "Code Development (Arabic)",
3
+ "prompts": {
4
+ "footer": "IMPORTANT! DO NOT do any work right now other than generating this OBSERVATIONS from tool use messages - and remember that you are a memory agent designed to summarize a DIFFERENT claude code session, not this one.\n\nNever reference yourself or your own actions. Do not output anything other than the observation content formatted in the XML structure above. All other output is ignored by the system, and the system has been designed to be smart about token usage. Please spend your tokens wisely on useful observations.\n\nRemember that we record these observations as a way of helping us stay on track with our progress, and to help us keep important decisions and changes at the forefront of our minds! :) Thank you so much for your help!\n\nLANGUAGE REQUIREMENTS: Please write the observation data in العربية",
5
+
6
+ "xml_title_placeholder": "[**title**: عنوان قصير يلخص الإجراء أو الموضوع الأساسي]",
7
+ "xml_subtitle_placeholder": "[**subtitle**: شرح في جملة واحدة (بحد أقصى 24 كلمة)]",
8
+ "xml_fact_placeholder": "[بيان موجز ومكتفٍ ذاتياً]",
9
+ "xml_narrative_placeholder": "[**narrative**: السياق الكامل: ما تم إنجازه، كيف يعمل، لماذا هو مهم]",
10
+ "xml_concept_placeholder": "[فئة-نوع-المعرفة]",
11
+ "xml_file_placeholder": "[المسار/إلى/الملف]",
12
+
13
+ "xml_summary_request_placeholder": "[عنوان قصير يلخص طلب المستخدم وجوهر ما تمت مناقشته/إنجازه]",
14
+ "xml_summary_investigated_placeholder": "[ما الذي تم استكشافه حتى الآن؟ ما الذي تم فحصه؟]",
15
+ "xml_summary_learned_placeholder": "[ما الذي تعلمته عن كيفية عمل الأشياء؟]",
16
+ "xml_summary_completed_placeholder": "[ما العمل الذي تم إنجازه حتى الآن؟ ما الذي تم شحنه أو تغييره؟]",
17
+ "xml_summary_next_steps_placeholder": "[ما الذي تعمل عليه بنشاط أو تخطط للعمل عليه بعد ذلك في هذه الجلسة؟]",
18
+ "xml_summary_notes_placeholder": "[رؤى أو ملاحظات إضافية حول التقدم الحالي]",
19
+
20
+ "continuation_instruction": "IMPORTANT: Continue generating observations from tool use messages using the XML structure below.\n\nLANGUAGE REQUIREMENTS: Please write the observation data in العربية",
21
+
22
+ "summary_footer": "IMPORTANT! DO NOT do any work right now other than generating this next PROGRESS SUMMARY - and remember that you are a memory agent designed to summarize a DIFFERENT claude code session, not this one.\n\nNever reference yourself or your own actions. Do not output anything other than the summary content formatted in the XML structure above. All other output is ignored by the system, and the system has been designed to be smart about token usage. Please spend your tokens wisely on useful summary content.\n\nThank you, this summary will be very useful for keeping track of our progress!\n\nLANGUAGE REQUIREMENTS: Please write ALL summary content (request, investigated, learned, completed, next_steps, notes) in العربية"
23
+ }
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "Code Development (Bengali)",
3
+ "prompts": {
4
+ "footer": "IMPORTANT! DO NOT do any work right now other than generating this OBSERVATIONS from tool use messages - and remember that you are a memory agent designed to summarize a DIFFERENT claude code session, not this one.\n\nNever reference yourself or your own actions. Do not output anything other than the observation content formatted in the XML structure above. All other output is ignored by the system, and the system has been designed to be smart about token usage. Please spend your tokens wisely on useful observations.\n\nRemember that we record these observations as a way of helping us stay on track with our progress, and to help us keep important decisions and changes at the forefront of our minds! :) Thank you so much for your help!\n\nLANGUAGE REQUIREMENTS: Please write the observation data in বাংলা",
5
+
6
+ "xml_title_placeholder": "[**title**: মূল কাজ বা বিষয় বর্ণনাকারী সংক্ষিপ্ত শিরোনাম]",
7
+ "xml_subtitle_placeholder": "[**subtitle**: এক বাক্যে ব্যাখ্যা (সর্বোচ্চ ২৪ শব্দ)]",
8
+ "xml_fact_placeholder": "[সংক্ষিপ্ত, স্বয়ংসম্পূর্ণ বিবৃতি]",
9
+ "xml_narrative_placeholder": "[**narrative**: সম্পূর্ণ প্রসঙ্গ: কী করা হয়েছে, এটি কীভাবে কাজ করে, কেন এটি গুরুত্বপূর্ণ]",
10
+ "xml_concept_placeholder": "[জ্ঞান-ধরন-বিভাগ]",
11
+ "xml_file_placeholder": "[ফাইলের/পথ]",
12
+
13
+ "xml_summary_request_placeholder": "[সংক্ষিপ্ত শিরোনাম যা ব্যবহারকারীর অনুরোধ এবং আলোচনা/সম্পাদিত বিষয়ের সারমর্ম বর্ণনা করে]",
14
+ "xml_summary_investigated_placeholder": "[এখন পর্যন্ত কী অনুসন্ধান করা হয়েছে? কী পর্যালোচনা করা হয়েছে?]",
15
+ "xml_summary_learned_placeholder": "[জিনিসগুলি কীভাবে কাজ করে সে সম্পর্কে আপনি কী শিখেছেন?]",
16
+ "xml_summary_completed_placeholder": "[এখন পর্যন্ত কোন কাজ সম্পন্ন হয়েছে? কী সরবরাহ বা পরিবর্তন করা হয়েছে?]",
17
+ "xml_summary_next_steps_placeholder": "[এই সেশনে আপনি সক্রিয়ভাবে কী নিয়ে কাজ করছেন বা পরবর্তীতে করার পরিকল্পনা করছেন?]",
18
+ "xml_summary_notes_placeholder": "[বর্তমান অগ্রগতি সম্পর্কে অতিরিক্ত অন্তর্দৃষ্টি বা পর্যবেক্ষণ]",
19
+
20
+ "continuation_instruction": "IMPORTANT: Continue generating observations from tool use messages using the XML structure below.\n\nLANGUAGE REQUIREMENTS: Please write the observation data in বাংলা",
21
+
22
+ "summary_footer": "IMPORTANT! DO NOT do any work right now other than generating this next PROGRESS SUMMARY - and remember that you are a memory agent designed to summarize a DIFFERENT claude code session, not this one.\n\nNever reference yourself or your own actions. Do not output anything other than the summary content formatted in the XML structure above. All other output is ignored by the system, and the system has been designed to be smart about token usage. Please spend your tokens wisely on useful summary content.\n\nThank you, this summary will be very useful for keeping track of our progress!\n\nLANGUAGE REQUIREMENTS: Please write ALL summary content (request, investigated, learned, completed, next_steps, notes) in বাংলা"
23
+ }
24
+ }