#!/bin/bash
# 自我改进错误检测 Hook
# 在 Bash 的 PostToolUse / PostToolUseFailure 时触发
# 通过 stdin JSON 读取工具输出，通过 JSON additionalContext 输出提醒

# 从 stdin 读取 JSON 数据
HOOK_DATA=$(cat 2>/dev/null || true)

# 提取事件名称
EVENT_NAME=$(echo "$HOOK_DATA" | jq -r '.hook_event_name // ""' 2>/dev/null || echo "")

# PostToolUse 传 tool_response（可能是对象），PostToolUseFailure 传 error（字符串）
OUTPUT=$(echo "$HOOK_DATA" | jq -r 'if .error then .error elif .tool_response then (.tool_response | tostring) else "" end' 2>/dev/null || echo "")

# 常见错误模式
ERROR_PATTERNS=(
    "error:" "Error:" "ERROR:"
    "failed" "FAILED"
    "command not found" "No such file" "Permission denied"
    "fatal:" "Exception" "Traceback"
    "npm ERR!" "ModuleNotFoundError" "SyntaxError" "TypeError"
    "exit code" "non-zero"
)

# 检查输出中是否命中任一错误模式
contains_error=false
for pattern in "${ERROR_PATTERNS[@]}"; do
    if [[ "$OUTPUT" == *"$pattern"* ]]; then
        contains_error=true
        break
    fi
done

# 仅在检测到错误时输出 JSON 格式提醒（additionalContext 才能被 Claude 看到）
if [ "$contains_error" = true ]; then
    CONTEXT="检测到命令错误。如果满足以下任一情况，考虑新建独立文件 .learnings/ERRORS/ERR-YYYYMMDD-XXX.md：(1) 意外或不直观的错误 (2) 需要调查才能解决 (3) 可能再次出现 (4) 解决方案对后续 session 有帮助。新文件别追加到 ERRORS.md（已拆，详见 issue #189）。"
    cat << EOF
{
  "hookSpecificOutput": {
    "hookEventName": "${EVENT_NAME}",
    "additionalContext": "${CONTEXT}"
  }
}
EOF
fi
