feat: codebuddy-mem v13.0.0 - 基于 claude-mem 12.6.0 AGPL-3.0 分叉

- 全局重命名 claude-mem → codebuddy-mem
- AI 后端改为 DeepSeek V4 直连
- 适配 CodeBuddy Code 作为 MCP 客户端
- 修复 GS 函数 timeoutMs bug
- 新增 README / CHANGELOG / UPSTREAM / install.sh
- 协议:AGPL-3.0
This commit is contained in:
Mac
2026-05-05 01:52:14 +08:00
commit 6c8d178f5d
77 changed files with 9950 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
# Bugfix Sprint: 2026-01-10
## Critical Priority (Blocks Users)
### #646 - Plugin bricks Claude Code - stdin fstat EINVAL crash
- **Impact**: Plugin completely bricks Claude Code on Linux. Users cannot recover without manual config editing.
- **Root Cause**: Bun's stdin handling causes fstat EINVAL when reading piped input
- **Related Discussion**: Check if this is a Bun upstream issue
- [ ] Investigate stdin handling in hook scripts
- [ ] Test on Linux with stdin piping
- [ ] Implement fix
### #623 - Crash-recovery loop when memory_session_id not captured
- **Impact**: Infinite loop consuming API tokens, growing queue unbounded
- **Root Cause**: memory_session_id not captured, causes repeated crash-recovery
- [ ] Add null/undefined check for memory_session_id
- [ ] Add circuit breaker for crash-recovery attempts
## High Priority
### #638 - Worker startup missing JSON output causes hooks to appear stuck
- **Impact**: UI appears stuck during worker startup
- [ ] Ensure worker startup emits proper JSON status
- [ ] Add progress feedback to hook output
### #641/#609 - CLAUDE.md files in subdirectories
- **Impact**: CLAUDE.md files scattered throughout project directories
- **Note**: This is a documented feature request that was never implemented (setting exists but doesn't work)
- [ ] Implement the `disableSubdirectoryCLAUDEmd` setting properly
- [ ] Or change default behavior to not create subdirectory files
### #635 - JSON parsing error prevents folder context generation
- **Impact**: Folder context not generating, breaks context injection
- **Root Cause**: String spread instead of array spread
- [ ] Fix the JSON parsing logic
- [ ] Add proper error handling
## Medium Priority
### #582 - Tilde paths create literal ~ directories
- **Impact**: Directories named "~" created instead of expanding to home
- [ ] Use path expansion for tilde in all path operations
- [ ] Audit all path handling code
### #642/#643 - ChromaDB search fails due to initialization timing
- **Impact**: Search fails with JSON parse error
- **Note**: #643 is a duplicate of #642
- [ ] Fix initialization timing issue
- [ ] Add proper async/await handling
### #626 - HealthMonitor hardcodes ~/.claude path
- **Impact**: Fails for users with custom config directories
- [ ] Use configurable path instead of hardcoded ~/.claude
- [ ] Respect CLAUDE_CONFIG_DIR or similar env var
### #598 - Too many messages pollute conversation history
- **Impact**: Hook messages clutter conversation
- [ ] Reduce verbosity of hook messages
- [ ] Make message frequency configurable
## Low Priority (Code Quality)
### #648 - Empty catch blocks swallow JSON parse errors
- [ ] Add proper error logging to catch blocks in SessionSearch.ts
### #649 - Inconsistent logging in CursorHooksInstaller
- [ ] Replace console.log with structured logger
- **Note**: 177 console.log calls across 20 files identified
## Won't Fix / Not a Bug
### #632 - Feature request for disabling CLAUDE.md in subdirectories
- **Note**: Covered by #641 implementation
### #633 - Help request about Cursor integration
- **Note**: Documentation/support issue, not a bug
### #640 - Arabic README translation
- **Note**: Documentation PR, not a bugfix
### #624 - Beta testing strategy proposal
- **Note**: Enhancement proposal, not a bugfix
## Already Fixed in v9.0.2
- Windows Terminal tab accumulation (#625/#628)
- Windows 11 compatibility - WMIC to PowerShell migration
- Claude Code 2.1.1 compatibility + path validation (#614)
---
**Recommended Approach**: Fix #646 first (critical blocker), then #623 (crash loop), then work through high priority issues in order of impact.

87
hooks/hooks.json Normal file
View File

@@ -0,0 +1,87 @@
{
"description": "codebuddy-mem 记忆系统钩子 — 基于 claude-mem AGPL-3.0 分叉",
"hooks": {
"Setup": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"shell": "bash",
"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\"; _R=\"${CODEBUDDY_PLUGIN_ROOT:-$HOME/.codebuddy-mem}\"; _R=\"${_R%/}\"; node \"$_R/scripts/version-check.js\"",
"timeout": 300
}
]
}
],
"SessionStart": [
{
"matcher": "startup|clear|compact",
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _R=\"${CODEBUDDY_PLUGIN_ROOT:-$HOME/.codebuddy-mem}\"; _R=\"${_R%/}\"; node \"$_R/scripts/bun-runner.js\" \"$_R/scripts/worker-service.cjs\" start; echo '{\"continue\":true,\"suppressOutput\":true}'",
"timeout": 60
},
{
"type": "command",
"shell": "bash",
"command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _R=\"${CODEBUDDY_PLUGIN_ROOT:-$HOME/.codebuddy-mem}\"; _R=\"${_R%/}\"; node \"$_R/scripts/bun-runner.js\" \"$_R/scripts/worker-service.cjs\" hook codebuddy context",
"timeout": 60
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _R=\"${CODEBUDDY_PLUGIN_ROOT:-$HOME/.codebuddy-mem}\"; _R=\"${_R%/}\"; node \"$_R/scripts/bun-runner.js\" \"$_R/scripts/worker-service.cjs\" hook codebuddy session-init",
"timeout": 60
}
]
}
],
"PostToolUse": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _R=\"${CODEBUDDY_PLUGIN_ROOT:-$HOME/.codebuddy-mem}\"; _R=\"${_R%/}\"; node \"$_R/scripts/bun-runner.js\" \"$_R/scripts/worker-service.cjs\" hook codebuddy observation",
"timeout": 120
}
]
}
],
"PreToolUse": [
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _R=\"${CODEBUDDY_PLUGIN_ROOT:-$HOME/.codebuddy-mem}\"; _R=\"${_R%/}\"; node \"$_R/scripts/bun-runner.js\" \"$_R/scripts/worker-service.cjs\" hook codebuddy file-context",
"timeout": 60
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "export PATH=\"$($SHELL -lc 'echo $PATH' 2>/dev/null):$PATH\"; _R=\"${CODEBUDDY_PLUGIN_ROOT:-$HOME/.codebuddy-mem}\"; _R=\"${_R%/}\"; node \"$_R/scripts/bun-runner.js\" \"$_R/scripts/worker-service.cjs\" hook codebuddy summarize",
"timeout": 120
}
]
}
]
}
}