新增 AGENTS.md 规则(§1-§22)、Hook 脚本和可复用工具脚本: - 重构 AGENTS.md:新增 16 条规则(任务分解、双轨验证、骨架占位禁止、 测试命令退出码保留、工具脚本可复用、完成前验证门禁、Flaky 测试门禁等) - 新增 .trae/hooks/:session-start / pre-agent-check / check-completeness / stop-check - 新增 .trae/settings.json:关联 4 个 Hook 到 SessionStart/PreToolUse/PostToolUse/Stop - 新增 scripts/:flaky-scan.sh / check-task-checklist.sh / check-issue-checklist.sh - 调整 .gitignore:保留 hooks/settings 纳入版本控制,忽略运行时状态文件
56 lines
1.8 KiB
Bash
56 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
|
# PostToolUse hook: 检查单个编辑文件中的未完成标记
|
|
# 在 Write/Edit 操作后对修改的文件运行
|
|
set -euo pipefail
|
|
|
|
PROJECT_DIR="${AGENT_PROJECT_DIR:-$(pwd)}"
|
|
|
|
# Suppress during brainstorming / exploratory sessions
|
|
if [ -f "${PROJECT_DIR}/.trae/.suppress-hooks" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
f="${AGENT_EDITED_FILE:-$AGENT_FILE}"
|
|
if [ ! -f "$f" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
issues=()
|
|
ext="${f##*.}"
|
|
basename=$(basename "$f")
|
|
|
|
# ============================================================
|
|
# PART 1: Unfinished markers scan
|
|
# ============================================================
|
|
|
|
if [[ "$ext" =~ ^(ts|tsx|js|jsx|vue)$ ]]; then
|
|
while IFS=: read -r line_no content; do
|
|
[ -z "$line_no" ] && continue
|
|
trimmed=$(echo "$content" | sed 's/^[[:space:]]*//')
|
|
if echo "$trimmed" | grep -qE '^\s*(TODO|FIXME|HACK|XXX):'; then
|
|
issues+=(" L${line_no}: TODO/FIXME ${trimmed:0:100}")
|
|
elif echo "$trimmed" | grep -qi 'not implemented' && echo "$trimmed" | grep -qi 'throw'; then
|
|
issues+=(" L${line_no}: [SKELETON] ${trimmed:0:100}")
|
|
elif echo "$trimmed" | grep -qE 'function [a-zA-Z_][a-zA-Z0-9_]*\s*\(\s*\)\s*\{\s*\}'; then
|
|
if ! echo "$trimmed" | grep -q 'return'; then
|
|
issues+=(" L${line_no}: [EMPTY FN] ${trimmed:0:100}")
|
|
fi
|
|
fi
|
|
done < <(grep -nE 'TODO:|FIXME:|HACK:|XXX:|not implemented|function [a-zA-Z_][a-zA-Z0-9_]*\s*\(\s*\)\s*\{\s*\}' "$f" 2>/dev/null || true)
|
|
fi
|
|
|
|
# ============================================================
|
|
# REPORT
|
|
# ============================================================
|
|
|
|
if [ ${#issues[@]} -gt 0 ]; then
|
|
echo ""
|
|
echo "[COMPLETENESS] $(basename "$f") 检查发现 ${#issues[@]} 个问题:"
|
|
for issue in "${issues[@]:0:20}"; do
|
|
echo "$issue"
|
|
done
|
|
if [ ${#issues[@]} -gt 20 ]; then
|
|
echo " ... 及其他 $((${#issues[@]} - 20)) 处"
|
|
fi
|
|
echo ""
|
|
fi |