feat: vendor permission auto-review source

This commit is contained in:
叶林立
2026-08-19 07:19:50 +08:00
parent 04ad87b54d
commit cf4fef10b8
42 changed files with 10311 additions and 103 deletions
+13 -19
View File
@@ -11,7 +11,7 @@
- `pi-lsp@0.1.7`:为 Kotlin 和 Java 提供 LSP 诊断、跳转与符号工具。
- `pi-hermes-memory@0.9.6`:提供持久记忆、会话搜索和 secret scanning。
- `@ogulcancelik/pi-codex-compaction@0.1.3`:为 `openai-codex` 提供原生远程压缩。
- `@ogulcancelik/pi-auto-permissions@0.1.3`:按当前对话自动复核受控 Bash 操作
- 本仓库维护的 `pi-permission-auto-review`:作为 `pi-permission-system` authorizer,使用 Codex Guardian 风格策略自动复核 `ask` 请求
- `@gotgenes/pi-permission-system@26.2.1`:负责工具、路径、MCP、硬拒绝和兜底权限基线。
- `extensions/tool-routing.ts`:保留 Pi 默认系统提示词,并按当前激活工具追加简短的工具与搜索路由规则;提供 `/dump-system-prompt` 导出当前有效提示词。
@@ -166,31 +166,25 @@ codegraph status
- 搜索边界:直接通过 Bash 调用 `rg``grep``find``fd``git grep` 拒绝,统一走 FFF。
- 路径与凭据:外部目录询问;环境文件、SSH/GPG、云凭据、Keychain 和 Pi 认证文件拒绝;
`.env.example` 作为无密钥模板允许。
- Git:状态、diff、日志、对象查看等只读命令允许;其他 Git 命令交给 Auto Permissions
- Bash 变更操作:Git 非只读操作包管理操作交给 Auto Permissions;文件变更、系统操作、
网络访问和环境导出继续由权限基线询问
- MCP 与 Skill:列举 MCP 状态允许,调用其他 MCP 工具询问;本地 Skill 加载允许。
- Git:状态、diff、日志、对象查看等只读命令允许;其他 Git 命令进入 `ask`,由自动复核 authorizer 裁决
- Bash 变更操作:Git 非只读操作包管理、文件变更、系统操作、网络访问和环境导出均由权限基线先判定;命中 `ask` 后再进入自动复核。
- MCP 与 Skill:列举 MCP 状态允许,调用其他 MCP 工具进入 `ask`;本地 Skill 加载允许
`permissionReviewLog` 已开启,后续可依据真实命中记录继续收敛规则。
### Auto Permissions 与权限基线的边界
### Permission Auto Review 与权限基线的边界
`extensions/auto-permissions.ts` 会先部署
`config/pi-auto-permissions.json`,再注册 contextual guardian。它只复核配置命中的 Bash
命令,并根据当前对话返回自动允许、要求修正或请求用户确认。
`pi-permission-auto-review/` 从上游源码仓库的 `@mzwing/pi-permission-auto-review@0.2.0` tag 导入,初始源码快照为 `8d196e4ef0884cac8326c366191dad3f585d470a`。该目录与 `pi-rtk-optimizer/` 一样由本仓库直接维护,不依赖 npm 中的预编译扩展包。
两个权限扩展是并列的 `tool_call` gate,不存在“`pi-permission-system``ask` 自动转发给
Auto Permissions”的机制。若同一命令在两边都配置为询问,会产生两层独立审批。因此组合包
不再在旧权限配置中重复声明 Git 非只读操作与包管理的 Bash `ask` 规则;旧扩展仍独占以下边界:
扩展以 `auto-review` 名称注册到 `pi-permission-system` 的 authorizer chain。只有权限基线先得到 `ask` 时才调用 reviewer:模型返回 `allow` 时自动批准,返回 `deny` 时直接拒绝,配置、模型、认证、超时或响应异常时返回 `defer` 并继续走正常人工提示。这样只有一条权限链,不再存在两个独立 `tool_call` gate 造成的重复审批。
- `deny`:Bash 直搜、敏感凭据路径等硬拒绝不会被 guardian 绕过。
- `ask`:外部目录、`.git/*` 路径、文件/系统/网络/环境操作和普通 MCP 调用仍走旧权限 UI。
- Auto Permissions:只处理其正则命中的 Bash 命令。高风险操作始终回落到用户确认;中风险操作
只有在当前用户消息明确授权且满足约束时才自动批准。guardian 使用 raw shell regex,故只接管
这两类能获得明确收益的命令;现有解析器继续保护高风险类别。
边界保持如下:
配置选择 `widget` 展示,不替换当前 Bash rendererguardian 默认复用当前 Pi model,并以 low
reasoning effort 运行。项目受信任时,根 `AGENTS.md` 可作为约束证据,但不能单独授权操作
- `allow`:权限基线已明确允许的常规操作不会调用 reviewer。
- `deny`:Bash 直搜、敏感凭据路径等硬拒绝不会交给 reviewer,也不能被其绕过
- `ask`:Git 非只读操作、包管理、文件/系统/网络/环境操作和普通 MCP 调用交给 reviewer`path``external_directory` 即使模型返回允许,也会被 `pi-permission-system` 的 delegation envelope 降级为人工确认。
reviewer 默认使用 `openai-codex/codex-auto-review`、low reasoning 和内置 Codex Guardian 风格策略,并读取当前 session active branch 中的可信用户证据。可通过 `/permission-auto-review` 查看或调整全局/项目配置;无配置时使用源码内置默认值。
### Kotlin 与 Java LSP