- Add CLAUDE.md (root + ETL subdirectory + db subdirectory) consolidating all Kiro steering docs - Add .mcp.json migrated from .kiro/settings/mcp.json (test DBs enabled, prod disabled) - Add .claude/commands/ (audit, doc-sync, db-docs) replacing Kiro skills - Add .claude/hooks/ (session_start, post_edit_audit, stop_audit_check) replacing Kiro hooks - Add .claude/settings.json registering all hooks - Add scripts/audit/prescan.py merging Kiro's audit_flagger + compliance_prescan - Remove .kiro/agents, hooks, scripts, settings, skills, state (migrated or obsolete) - Update .gitignore for Claude Code Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
30 lines
929 B
Python
30 lines
929 B
Python
#!/usr/bin/env python3
|
|
"""Stop hook: Claude 结束回复时检查是否有未审计的高风险变更"""
|
|
import json, subprocess, sys, os
|
|
|
|
project_dir = os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
|
|
script = os.path.join(project_dir, "scripts", "audit", "prescan.py")
|
|
|
|
if not os.path.isfile(script):
|
|
sys.exit(0)
|
|
|
|
try:
|
|
r = subprocess.run(
|
|
[sys.executable, script],
|
|
capture_output=True, text=True, timeout=10, cwd=project_dir,
|
|
)
|
|
if r.returncode != 0:
|
|
sys.exit(0)
|
|
result = json.loads(r.stdout)
|
|
except Exception:
|
|
sys.exit(0)
|
|
|
|
high_risk = result.get("high_risk_files", [])
|
|
if result.get("audit_required", False) and len(high_risk) > 0:
|
|
print(json.dumps({
|
|
"hookSpecificOutput": {
|
|
"hookEventName": "Stop",
|
|
"additionalContext": f"[audit-check] 当前有 {len(high_risk)} 个高风险文件变更未审计。建议执行 /audit。"
|
|
}
|
|
}))
|