fix(hooks): memory-guard 输出合法 JSON,修复会话崩溃

SessionStart hook 要求 stdout 输出 JSON,但旧版 memory-guard.sh 只写
stderr,stdout 为空,导致 Claude Code hook runner JSON 解析异常后崩溃。
改为输出 {"continue": true} 并将警告注入 additionalContext。
lzk
lzkk 1 week ago
parent 2d3a5ff998
commit da5d618297

@ -0,0 +1,32 @@
#!/usr/bin/env bash
# 会话启动时的内存/进程守卫
# 1. 检查可用内存,低于 2GB 时警告
# 2. 检查是否有多个 claude 会话在运行
# 输出 JSON 到 stdout警告通过 additionalContext 注入
AVAILABLE_MB=$(awk '/^MemAvailable:/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo "0")
CLAUDE_COUNT=$(pgrep -c -f "claude.*permission-mode" 2>/dev/null || echo "0")
WARNINGS=""
if [[ "$AVAILABLE_MB" -gt 0 && "$AVAILABLE_MB" -lt 2048 ]]; then
WARNINGS="${WARNINGS}- ⚠ 可用内存仅 ${AVAILABLE_MB}MB建议关闭其他应用后再操作\n"
fi
if [[ "$CLAUDE_COUNT" -gt 2 ]]; then
WARNINGS="${WARNINGS}- ⚠ 检测到 ${CLAUDE_COUNT} 个 claude 会话在运行,多会话可能导致 OOM\n"
fi
if [[ -n "$WARNINGS" ]]; then
cat << EOF
{
"continue": true,
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": "## ⚠ 资源警告\n\n${WARNINGS}"
}
}
EOF
else
echo '{"continue": true}'
fi
Loading…
Cancel
Save