- 添加 .claude 配置目录(CLAUDE.md、commands、hooks、memory) - 添加项目根目录 CLAUDE.md - 更新工程 README.md,新增 Claw Code 链接 - 更新知识/金鹏.md,添加 2026-04-10 文章分享内容 - 添加知识图片和参考资料 PDF
64 lines
1.9 KiB
Bash
Executable File
64 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================================================
|
|
# UserPromptSubmit Hook
|
|
# 记录用户在 Claude Code 中的输入到 .member/{username}.md 文件
|
|
# ============================================================================
|
|
|
|
# 获取当前用户名
|
|
USER_NAME=$(whoami)
|
|
|
|
# 项目根目录(脚本所在位置的上级目录)
|
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
MEMBER_DIR="${PROJECT_ROOT}/.member"
|
|
|
|
# 确保 .member 目录存在
|
|
mkdir -p "${MEMBER_DIR}"
|
|
|
|
# 用户日志文件
|
|
USER_LOG="${MEMBER_DIR}/${USER_NAME}.chat.md"
|
|
|
|
# 从 stdin 读取 JSON 输入(3 秒超时防止阻塞)
|
|
INPUT_JSON=$(timeout 3 cat 2>/dev/null) || exit 0
|
|
|
|
# 如果输入为空,退出
|
|
if [ -z "${INPUT_JSON}" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# 提取用户输入内容
|
|
# Claude Code UserPromptSubmit hook 传递的 JSON 格式: {"prompt": "用户输入"}
|
|
USER_PROMPT=$(echo "${INPUT_JSON}" | jq -r '.prompt // empty' 2>/dev/null)
|
|
|
|
# 如果无法提取内容,尝试直接使用输入
|
|
if [ -z "${USER_PROMPT}" ]; then
|
|
USER_PROMPT="${INPUT_JSON}"
|
|
fi
|
|
|
|
# 如果输入为空,退出
|
|
if [ -z "${USER_PROMPT}" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# 排除 .claude/commands/ 中的命令(/arno-pr 等)
|
|
COMMANDS_DIR="${PROJECT_ROOT}/.claude/commands"
|
|
if [ -d "${COMMANDS_DIR}" ]; then
|
|
# 提取命令名(去掉参数部分),如 "/arno-pr xxx" -> "arno-pr"
|
|
CMD_NAME=$(echo "${USER_PROMPT}" | sed 's|^/\([^ ]*\).*$|\1|')
|
|
if [ -n "${CMD_NAME}" ] && [ -f "${COMMANDS_DIR}/${CMD_NAME}.md" ]; then
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# 获取当前时间戳
|
|
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
|
|
|
# 如果文件不存在,创建并添加文件头
|
|
if [ ! -f "${USER_LOG}" ]; then
|
|
printf '# %s 的对话记录\n\n' "${USER_NAME}" > "${USER_LOG}"
|
|
fi
|
|
|
|
# 追加用户输入到文件(使用 printf 避免内容中的特殊字符导致 heredoc 展开问题)
|
|
printf '\n## %s\n\n%s\n\n' "${TIMESTAMP}" "${USER_PROMPT}" >> "${USER_LOG}"
|
|
|
|
exit 0
|