mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-10-26 10:45:22 +00:00
feat(permission): integrate auto-review and hard guards
This commit is contained in:
@@ -18,8 +18,7 @@
|
||||
- 本仓库维护的 `pi-ask-user`:提供模型主动调用的 `ask_user_question`;TUI 中保留单题、多题、选择、文本、自定义回答与提交前复核,Paseo 等兼容 RPC 客户端通过标准 Pi extension UI 逐题交互。
|
||||
- 本仓库维护的 `pi-tool-search`:从完整工具定义生成并缓存经过校验的工作流分组,默认以最多 5 个动态组、28 个动态工具的 LRU 策略加载原始完整 schema,并支持原子批量激活。
|
||||
- 本仓库维护的 `pi-chrome`:从上游 `0.15.46` 源码导入,通过显式会话授权接入用户当前已登录的 Chrome Profile;大体积页面快照写入 Session 临时文件并交给 Context Mode 隔离分析,21 个 `chrome_*` 工具仍由 Tool Search 按工作流加载。
|
||||
- 本仓库维护的 `pi-permission-auto-review`:作为 `pi-permission-system` authorizer,使用 Codex Guardian 风格策略自动复核 `ask` 请求。
|
||||
- 本仓库维护的 `pi-permission-system`:从 `@gotgenes/pi-permission-system@26.2.1` 源码导入,负责工具、路径、MCP、硬拒绝和兜底权限基线。
|
||||
- 本仓库维护的 `pi-permission-system`:从 `@gotgenes/pi-permission-system@26.2.1` 源码导入并整合原 AutoReview,实现独立 JSONC 硬防御、普通策略、Codex Guardian 风格自动复核、人工 `defer` 兜底,以及每 500 次自动裁决后的同会话后台规则分析。
|
||||
- 本仓库保留维护的 `pi-subagents` 源码及权限集成实现,但当前已从根组合包依赖和默认扩展加载列表中移除,不会随核心包启用。
|
||||
- 本仓库维护的 `pi-ssh`:通过纯 Node `ssh2` 持久连接、显式 `ssh_cd` 远端工作区切换、SFTP 与自适应有界搜索提供独立的远端工具;Agent 只在用户明确指定已导入主机及具体任务后发起受 AutoReview 复核的连接。
|
||||
- `extensions/tool-routing.ts`:保留 Pi 默认系统提示词,并按当前激活工具追加简短的工具与搜索路由规则;提供 `/dump-system-prompt` 导出当前有效提示词。
|
||||
@@ -270,40 +269,22 @@ codegraph status
|
||||
|
||||
该命令拒绝文件系统根目录和用户主目录,先确认两个 CLI 均可用,再依次初始化缺失数据库状态。任一步失败都不会热重载,也不会回滚此前已成功完成的初始化;两者已初始化时仍可用该命令快速热重载扩展。
|
||||
|
||||
### 权限基线自动部署
|
||||
### 统一权限系统、硬防御与 AutoReview
|
||||
|
||||
`pi-permission-system/` 从上游 `pi-permission-system-v26.2.1` tag 导入,初始源码快照为 `ec4fdb11343dc94f7185b113e559a4cf9f8dc035`。根包通过本地 `file:` 依赖提供其运行时依赖,并由包装入口直接加载仓库源码,不再加载 npm 包中的实现。
|
||||
`pi-permission-system/` 从上游 `pi-permission-system-v26.2.1` tag 导入,初始源码快照为 `ec4fdb11343dc94f7185b113e559a4cf9f8dc035`。原 `pi-permission-auto-review` 的 reviewer、可信证据边界和 Codex Guardian 风格策略已整合进同一个扩展;其 MIT 许可和来源记录保留在 `pi-permission-system/LICENSES/` 与 `docs/auto-review/`。根组合包不再加载第二个 AutoReview 扩展。
|
||||
|
||||
`extensions/permission-system.ts` 在权限扩展注册前,把仓库中的
|
||||
`config/pi-permission-system.json` 同步到 Pi agent 目录。仓库文件是权威配置;直接在
|
||||
运行目录通过 UI 修改的策略会在下次加载组合包时被覆盖,长期调整应提交到本仓库。
|
||||
`extensions/permission-system.ts` 只在文件缺失时,以 `0600` 原子创建两份用户可编辑 JSONC:
|
||||
|
||||
当前策略按类别划分:
|
||||
- `~/.pi/agent/extensions/pi-permission-system/policy.jsonc`:普通 allow/ask/deny 策略、运行参数、AutoReview 与 500 次分析参数;项目可在 `.pi/extensions/pi-permission-system/policy.jsonc` 覆盖普通策略。
|
||||
- `~/.pi/agent/extensions/pi-permission-system/hard-guards.jsonc`:仅全局生效的硬防御。硬 `deny` 先于项目策略、Session grant 和 AutoReview,不能被后续层放宽;`allow` 只用于同一硬防御文件中的例外。
|
||||
|
||||
- 默认工具:默认允许,避免常规编码操作反复确认;FFF 的 `grep`、`find`、
|
||||
`multi_grep` 明确允许。
|
||||
- 搜索边界:直接通过 Bash 调用 `rg`、`grep`、`find`、`fd`、`git grep` 拒绝,统一走 FFF。
|
||||
- 路径与凭据:外部目录询问;环境文件、SSH/GPG、云凭据、Keychain 和 Pi 认证文件拒绝;
|
||||
`.env.example` 作为无密钥模板允许。
|
||||
- Git:状态、diff、日志、对象查看等只读命令允许;其他 Git 命令进入 `ask`,由自动复核 authorizer 裁决。
|
||||
- Bash 变更操作:Git 非只读操作、包管理、文件变更、系统操作、网络访问和环境导出均由权限基线先判定;命中 `ask` 后再进入自动复核。
|
||||
- MCP 与 Skill:列举 MCP 状态允许,调用其他 MCP 工具进入 `ask`;本地 Skill 加载允许。
|
||||
安装后的用户修改不会被下次加载覆盖。若新版首次加载时只有旧 `config.json`,包装入口会把它复制成 `policy.jsonc` 并保留原文件。组合包中的 `config/pi-permission-policy.jsonc` 和 `config/pi-permission-hard-guards.jsonc` 只是新安装种子。
|
||||
|
||||
`permissionReviewLog` 已开启,后续可依据真实命中记录继续收敛规则。
|
||||
默认普通策略对未匹配请求返回 `ask`,并通过 `authorizerChain: ["auto-review"]` 先交给内置 reviewer。确定性的高危硬拒绝由 hard guards 直接终止;AutoReview `allow` / `deny` 结束当前审批;模型、配置、认证、超时或输出异常统一 `defer` 到原有人工界面。reviewer 只读取 active branch 中直接用户消息和已识别、未取消的结构化回答。
|
||||
|
||||
### Permission Auto Review 与权限基线的边界
|
||||
每个 AutoReview `allow` / `deny` 计为一次完成裁决,`defer` 不计数。记录仅保存有界、脱敏的 surface/pattern 指纹、风险与授权等级,不保存 rationale、原始工具参数或 transcript。累计 500 次新裁决后先持久化 pending;下一次 `agent_settled` 拉起无工具、无扩展、无项目上下文的隔离后台 AgentSession。经 schema 和确定性安全过滤后的建议通过 `followUp + triggerTurn` 回到当前对话,由主 Agent 直接向用户呈现。它不会自动修改任何策略文件;必须等用户明确选择并确认。会话在分析前结束时,pending 会在下一个 Session 继续。
|
||||
|
||||
`pi-permission-auto-review/` 从上游源码仓库的 `@mzwing/pi-permission-auto-review@0.2.0` tag 导入,初始源码快照为 `8d196e4ef0884cac8326c366191dad3f585d470a`。该目录与 `pi-rtk-optimizer/` 一样由本仓库直接维护,不依赖 npm 中的预编译扩展包。
|
||||
|
||||
扩展以 `auto-review` 名称注册到 `pi-permission-system` 的 authorizer chain。只有权限基线先得到 `ask` 时才调用 reviewer:模型返回 `allow` 时自动批准,返回 `deny` 时直接拒绝,配置、模型、认证、超时或响应异常时返回 `defer` 并继续走正常人工提示。这样只有一条权限链,不再存在两个独立 `tool_call` gate 造成的重复审批。
|
||||
|
||||
边界保持如下:
|
||||
|
||||
- `allow`:权限基线已明确允许的常规操作不会调用 reviewer。
|
||||
- `deny`:Bash 直搜、敏感凭据路径等硬拒绝不会交给 reviewer,也不能被其绕过。
|
||||
- `ask`:Git 非只读操作、包管理、文件/系统/网络/环境操作和普通 MCP 调用交给 reviewer;`path` 仍全部受 delegation envelope 保护。`external_directory` 允许内置只读路径工具(`read`、`find`、`grep`、`ls`)接受 reviewer 的 `allow`,`write`、`edit`、Bash、未知工具及其他外部目录访问仍降级为人工确认。
|
||||
|
||||
reviewer 默认使用 `openai-codex/codex-auto-review`、low reasoning 和内置 Codex Guardian 风格策略,并读取当前 session active branch 中的可信用户证据。可通过 `/permission-auto-review` 查看或调整全局/项目配置;无配置时使用源码内置默认值。
|
||||
SSH 仍复用同一权限入口:`ssh_connect`、远端路径工具默认为 `ask`,`ssh_bash` 映射完整 Bash 策略并设置 `decisionFloor: "ask"`。硬拒绝不能被 reviewer 覆盖;普通 `defer` 才进入人工兜底。
|
||||
|
||||
### TypeScript、Kotlin 与 Java LSP
|
||||
|
||||
|
||||
Reference in New Issue
Block a user