权限系统控制工具是否可以执行,包含规则解析器、权限检查管线和权限模式判断。测试重点是纯函数解析器和规则匹配逻辑。
| 文件 | 关键导出 |
|---|---|
src/utils/permissions/permissionRuleParser.ts |
permissionRuleValueFromString, permissionRuleValueToString, escapeRuleContent, unescapeRuleContent, normalizeLegacyToolName, getLegacyToolNames |
src/utils/permissions/PermissionMode.ts |
权限模式常量和辅助函数 |
src/utils/permissions/permissions.ts |
hasPermissionsToUseTool, getDenyRuleForTool, checkRuleBasedPermissions |
src/types/permissions.ts |
PermissionMode, PermissionBehavior, PermissionRule 类型定义 |
'test\\value' → 'test\\\\value''print(1)' → 'print\\(1\\)''func()' → 'func\\(\\)''echo "test\\nvalue"' 中的 \\ 先转义'' → '''npm install' 原样返回'print\\(1\\)' → 'print(1)''test\\\\nvalue' → 'test\\nvalue'unescapeRuleContent(escapeRuleContent(x)) === x'Bash' → { toolName: 'Bash' }'Bash(npm install)' → { toolName: 'Bash', ruleContent: 'npm install' }'Bash(python -c "print\\(1\\)")' → ruleContent 为 'python -c "print(1)"''Bash()' → { toolName: 'Bash' }(无 ruleContent)'Bash(*)' → { toolName: 'Bash' }'Task' → { toolName: 'Agent' }(或对应的 AGENT_TOOL_NAME)'Bash(npm' → 整个字符串作为 toolName'Bash(npm)extra' → 整个字符串作为 toolName'(foo)' → 整个字符串作为 toolName{ toolName: 'Bash' } → 'Bash'{ toolName: 'Bash', ruleContent: 'npm install' } → 'Bash(npm install)'() 时正确转义'Task' → AGENT_TOOL_NAME'KillShell' → TASK_STOP_TOOL_NAME'UnknownTool' → 'UnknownTool''Task'mcp__server 规则匹配该 server 下的 MCP 工具{ behavior: 'ask' }{ behavior: 'allow' }| 依赖 | Mock 方式 | 说明 |
|---|---|---|
bun:bundle (feature) |
已 polyfill | BRIEF_TOOL_NAME 条件加载 |
| Tool 常量导入 | 实际值 | AGENT_TOOL_NAME 等从常量文件导入 |
appState |
mock object | hasPermissionsToUseTool 中的状态依赖 |
| Tool 对象 | mock object | 模拟 tool 的 name, checkPermissions 等 |