feat: 声明式权限(opencode 式 allow/ask/deny 配置化)
- safety.check 在 plan 模式之后、安全模式之前插入声明式权限判定: deny(阻断) > ask(强制确认) > allow(自动放行) > 默认(按安全模式) - 规则语法支持 "*"全匹配 / "tool"精确 / "tool:*"任意操作 / "tool:op"操作前缀 - 读取 config.permissions;提供 set_permissions 显式注入(测试/启动用) - config.json 顶层加 permissions 段(allow/ask/deny 示例,该文件被 gitignore 不入库) - 修复:test_normal_mode_does_not_plan_block 隔离真实 config 权限,避免污染 - 新增 tests/test_permissions.py(14 项:规则匹配+deny/ask/allow+优先级) Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
This commit is contained in:
1 parent
9dd418ec89
commit
160d4e924e
3 files changed
+196
No files matched your search
@@ -118,9 +118,11 @@ def test_normal_mode_does_not_plan_block():
|
||||
safety = get_safety()
|
||||
saved_cli = safety.cli
|
||||
saved_mode = safety.mode
|
||||
saved_perm = safety._permissions_override
|
||||
fake_cli = types.SimpleNamespace(plan_mode=False)
|
||||
safety.set_cli(fake_cli)
|
||||
safety.set_mode(0) # MODE_UNRESTRICTED:直接放行,不消耗 AI
|
||||
safety.set_permissions(allow=[], ask=[], deny=[]) # 隔离真实 config 的权限规则
|
||||
try:
|
||||
allowed, _ = safety.check("code_editor", "write a.py x")
|
||||
assert allowed is True
|
||||
@@ -129,6 +131,7 @@ def test_normal_mode_does_not_plan_block():
|
||||
finally:
|
||||
safety.set_cli(saved_cli)
|
||||
safety.set_mode(saved_mode)
|
||||
safety._permissions_override = saved_perm
|
||||
|
||||
|
||||
# ── system prompt 注入 ──
|
||||
|
||||
Reference in new issue
Block a user