if [ "$J_AI_COMMIT" != "1" ]; then
exit 0
fi
COMMIT_MSG_FILE="$1"
COMMIT_SOURCE="$2"
if [ -n "$COMMIT_SOURCE" ]; then
exit 0
fi
DIFF_STAT=$(git diff --cached --stat 2>/dev/null)
if [ -z "$DIFF_STAT" ]; then
exit 0
fi
DIFF_DETAIL=$(git diff --cached --no-color --unified=3 \
-- ":(exclude)package-lock.json" \
-- ":(exclude)yarn.lock" \
-- ":(exclude)Cargo.lock" \
-- ":(exclude)pnpm-lock.yaml" \
2>/dev/null)
if [ ${#DIFF_DETAIL} -gt 8000 ]; then
DIFF_DETAIL=$(git diff --cached --no-color --unified=1 \
-- ":(exclude)package-lock.json" \
-- ":(exclude)yarn.lock" \
-- ":(exclude)Cargo.lock" \
-- ":(exclude)pnpm-lock.yaml" \
2>/dev/null)
fi
if [ ${#DIFF_DETAIL} -gt 12000 ]; then
DIFF_DETAIL="$DIFF_STAT"
fi
PROMPT="根据以下代码变更生成一个 commit message。格式:<类型>: <中文描述>,类型可选 feat/fix/refactor/docs/style/test/chore/perf,描述不超过 30 字。请用 <result>...</result> 包裹你的输出,不要输出其他内容。
变更文件:
${DIFF_STAT}
变更详情:
${DIFF_DETAIL}"
AI_MSG=$(timeout 30 j ai --bypass -- "$PROMPT" 2>/dev/null \
| awk '/<result>/{in_r=1;gsub(/.*<result>/,"")}/<\/result>/{gsub(/<\/result>.*/,"");in_r=0;print;next}in_r{print}')
if [ -n "$AI_MSG" ]; then
echo "$AI_MSG" > "$COMMIT_MSG_FILE"
echo "" >> "$COMMIT_MSG_FILE"
echo "# --- AI 生成的 commit message (可直接编辑) ---" >> "$COMMIT_MSG_FILE"
echo "# 变更文件:" >> "$COMMIT_MSG_FILE"
echo "$DIFF_STAT" | while IFS= read -r line; do
echo "# $line" >> "$COMMIT_MSG_FILE"
done
else
echo "更新: $(date +'%Y-%m-%d %H:%M:%S')" > "$COMMIT_MSG_FILE"
fi