fix: harden destructive command matching

This commit is contained in:
Haoran
2026-08-26 15:07:59 +08:00
parent 44e33d0ec3
commit 1293797585
55 changed files with 3328 additions and 690 deletions

View File

@@ -102,18 +102,7 @@ agent_loop(history)
**PreToolUse / PostToolUse**,工具执行前后的 hook。s03 的权限检查逻辑现在包装成 PreToolUse hook再加一个日志 hook 和一个大输出提醒:
```python
import re
DESTRUCTIVE_COMMAND_WORD = re.compile(
r"(?i)(?:^|[;&|()\n])\s*(?:rm|del)(?=\s|$|[;&|()])"
)
def contains_destructive_command(command: str) -> bool:
return bool(DESTRUCTIVE_COMMAND_WORD.search(command))
# PreToolUse: 权限检查s03 的逻辑,从循环移到 hook
# PreToolUse: 权限检查(包含从 s03 沿用的 matcher
def permission_hook(block):
if block.name == "bash":
command = block.input.get("command", "")
@@ -144,8 +133,6 @@ register_hook("PreToolUse", log_hook)
register_hook("PostToolUse", large_output_hook)
```
沿用的 shell 规则不区分大小写,只在命令开头或 shell 分隔符之后识别完整的 `rm`/`del` 命令词。`model``delimiter``echo del test.txt` 不会被识别为危险命令。
**Stop** 在循环即将退出时触发。以下 hook 打印收尾统计:
```python