diff --git a/scripts/claude-hooks/check-dangerous-commands.py b/scripts/claude-hooks/check-dangerous-commands.py index 47f3e5f0..fb9f7127 100644 --- a/scripts/claude-hooks/check-dangerous-commands.py +++ b/scripts/claude-hooks/check-dangerous-commands.py @@ -48,12 +48,27 @@ PATTERNS: list[tuple[str, str]] = [ ] +def strip_commit_messages(cmd: str) -> str: + """Вырезает содержимое -m/--message аргументов git commit. + + Иначе false-positive: `git commit -m "запретили rm -rf"` блокируется из-за + текста сообщения. Пейлоады обёрток (powershell -c "git push --force") не + страдают — они не привязаны к -m. + """ + return re.sub( + r"(\s(?:-m|--message))\s+(\"(?:[^\"\\]|\\.)*\"|'[^']*')", + r"\1 MSG", + cmd, + ) + + def main() -> int: try: data = json.load(sys.stdin) if data.get("tool_name") != "Bash": return 0 cmd = (data.get("tool_input") or {}).get("command") or "" + cmd = strip_commit_messages(cmd) for pattern, reason in PATTERNS: if re.search(pattern, cmd): print(