25 lines
920 B
Python
25 lines
920 B
Python
#!/usr/bin/env python3
|
|
"""PreToolUse hook: 保护 demo-miniprogram 目录不被删除或移入 _DEL/"""
|
|
import json, re, sys
|
|
|
|
try:
|
|
data = json.load(sys.stdin)
|
|
except Exception:
|
|
sys.exit(0)
|
|
|
|
tool = data.get("tool_name", "")
|
|
tool_input = data.get("tool_input") or {}
|
|
|
|
DEMO_DIR = "demo-miniprogram"
|
|
|
|
if tool == "Bash":
|
|
cmd = tool_input.get("command", "")
|
|
# 检查命令是否在对 demo-miniprogram 执行删除/移动操作
|
|
if DEMO_DIR in cmd and re.search(r"\b(rm|rmdir|del|move|mv)\b", cmd, re.IGNORECASE):
|
|
# 允许 mv 到非 _DEL 目录(如正常重命名),但阻止移入 _DEL
|
|
if re.search(r"\brm\b|\brmdir\b|\bdel\b", cmd, re.IGNORECASE) or "_DEL" in cmd:
|
|
print(json.dumps({
|
|
"decision": "block",
|
|
"reason": f"[demo-protect] apps/{DEMO_DIR}/ 禁止删除或移入 _DEL/。该目录是 UI 样式标杆校对基准。"
|
|
}))
|