chore(config): 参考 novavis 完善 Agent 配置体系
- AGENTS.md: 新增 §20 工具脚本复用 / §21 分析结论复用 / §22 Flaky 门禁,更新文档配置表
- .pi/: 新增 settings.json、rules/guardrails.md、prompts/{debug,review,ship}-gym-manage.md
- .agents/: 新增 Hook 配置与 4 个 Hook 脚本(session-start/pre-agent-check/check-completeness/stop-check)
及 protocols/systematic-debugging.md(check-completeness 含接口链缺口检测)
- scripts/flaky-scan.sh: vitest shuffle 稳定性扫描(gym-manage-web)
- .gitignore: 追踪 AGENTS.md 与 .pi 配置,忽略运行时缓存(todos/taskflows-runs/tokenomy/sessions)
This commit was merged in pull request #57.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env bash
|
||||
# Stop hook: runs quick quality checks and outputs JSON result.
|
||||
# 轻量检查(<15s),不编译后端 — 重型检查留给 pre-push 和 CI。
|
||||
# 残留扫描由 check-completeness.sh(PostToolUse)按文件处理,此处不重复。
|
||||
# Outputs diagnostic info to stderr, final JSON status to stdout.
|
||||
set -euo pipefail
|
||||
cd "${AGENT_PROJECT_DIR:-$(pwd)}"
|
||||
|
||||
# Suppress during brainstorming / exploratory sessions
|
||||
if [ -f ".agents/.suppress-hooks" ]; then
|
||||
echo '{"status":"ok","mode":"suppressed"}'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
HAS_ERRORS=0
|
||||
|
||||
# All diagnostics go to stderr
|
||||
{
|
||||
echo '=== [STOP HOOK QUALITY GATE] ==='
|
||||
|
||||
# ---- 1/2: 变更文件残留扫描(未完成标记 + 调试遗留)----
|
||||
echo '[1/2] 变更文件残留扫描...'
|
||||
CHANGED=$( { git diff --name-only HEAD 2>/dev/null; git diff --cached --name-only 2>/dev/null; } | sort -u )
|
||||
LEFTOVERS=""
|
||||
while IFS= read -r f; do
|
||||
[ -z "$f" ] && continue
|
||||
[ -f "$f" ] || continue
|
||||
case "$f" in
|
||||
gym-manage-web/src/*|gym-manage-uniapp/**|gym-manage-coach-uniapp/**|*.java|*.ts|*.tsx|*.js|*.vue)
|
||||
if grep -nE '\.only\(|\.skip\(' "$f" 2>/dev/null | grep -qE '\.(only|skip)\('; then
|
||||
LEFTOVERS="${LEFTOVERS} [LEFTOVER] ${f}: .only()/.skip() 残留\n"
|
||||
fi
|
||||
if grep -nE 'console\.log' "$f" 2>/dev/null | grep -qv 'console\.log(`' 2>/dev/null; then
|
||||
LEFTOVERS="${LEFTOVERS} [LEFTOVER] ${f}: console.log 残留\n"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done <<< "$CHANGED"
|
||||
|
||||
if [ -n "$LEFTOVERS" ]; then
|
||||
printf '%b' "$LEFTOVERS"
|
||||
echo " ⚠️ 存在调试/测试残留(未阻断,提交前请清理)"
|
||||
else
|
||||
echo ' 残留扫描: PASS'
|
||||
fi
|
||||
|
||||
# ---- 2/2: 未提交任务状态检查 ----
|
||||
echo '[2/2] 任务状态检查...'
|
||||
if [ -d ".pi/todos" ]; then
|
||||
OPEN=$(ls .pi/todos/*.md 2>/dev/null | wc -l | tr -d ' ')
|
||||
echo " 打开的任务: ${OPEN}(如需关闭请使用 todo 工具或手动更新)"
|
||||
else
|
||||
echo ' 任务目录: 不存在'
|
||||
fi
|
||||
|
||||
# ---- Summary ----
|
||||
if [ "$HAS_ERRORS" -eq 0 ]; then
|
||||
echo '=== [STOP HOOK: ALL PASS] ==='
|
||||
else
|
||||
echo '=== [STOP HOOK: ERRORS FOUND] ==='
|
||||
fi
|
||||
} >&2
|
||||
|
||||
# Output final status as JSON
|
||||
if [ "$HAS_ERRORS" -eq 0 ]; then
|
||||
echo '{"status":"ok"}'
|
||||
else
|
||||
echo '{"status":"error"}'
|
||||
fi
|
||||
Reference in New Issue
Block a user