feat: add lsp and auto-permissions stack

This commit is contained in:
云服务部-叶林立
2026-08-18 17:12:10 +08:00
parent 3984e37aa3
commit 78ce5bfb0c
9 changed files with 389 additions and 19 deletions
+60 -4
View File
@@ -8,7 +8,11 @@
- `pi-mcp-adapter@2.26.0`:只用于把机器现有的 CodeGraph MCP Server 接入为 `codegraph_explore`
- `pi-context-view@0.4.2`:查看上下文占用。
- `@firstpick/pi-extension-codex-fast-mode@0.1.1`:为 Codex provider 提供会话级 `/fast-mode`
- `@gotgenes/pi-permission-system@26.2.1`:加载组合包自带的权限基线
- `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 操作。
- `@gotgenes/pi-permission-system@26.2.1`:负责工具、路径、MCP、硬拒绝和兜底权限基线。
## 安装
@@ -21,6 +25,10 @@ pi install git:git@bitbucket.org:siakitem/my-pi.git
`package.json` 使用精确版本,`package-lock.json` 固定完整依赖树。不要再用项目级
`.pi/settings.json` 重复安装这些扩展,否则同一扩展可能被加载两次。
Hermes Memory 的 SQLite search 依赖 `better-sqlite3` 原生模块;根包只在 `allowScripts`
精确放行当前锁定版本的构建脚本。若升级 Hermes 或 `better-sqlite3`,必须同步核对并更新该精确
版本,不能把其他依赖的 install scripts 一并放行。
默认配置不需要系统 `rtk` CLI。只有以后在 `/rtk` 中主动开启
`RTK command rewriting` 时,才需要另外安装 `rtk` 可执行文件。
@@ -80,13 +88,61 @@ codegraph status
- 搜索边界:直接通过 Bash 调用 `rg``grep``find``fd``git grep` 拒绝,统一走 FFF。
- 路径与凭据:外部目录询问;环境文件、SSH/GPG、云凭据、Keychain 和 Pi 认证文件拒绝;
`.env.example` 作为无密钥模板允许。
- Git:状态、diff、日志、对象查看等只读命令允许;其他 Git 命令询问
- 系统与破坏性操作:删除、移动、权限修改、提权、进程控制、磁盘和系统服务操作询问。
- 网络与安装:SSH、文件传输、下载和包安装/卸载询问。
- Git:状态、diff、日志、对象查看等只读命令允许;其他 Git 命令交给 Auto Permissions
- Bash 变更操作:Git 非只读操作和包管理操作交给 Auto Permissions;文件变更、系统操作、
网络访问和环境导出继续由权限基线询问。
- MCP 与 Skill:列举 MCP 状态允许,调用其他 MCP 工具询问;本地 Skill 加载允许。
`permissionReviewLog` 已开启,后续可依据真实命中记录继续收敛规则。
### Auto Permissions 与权限基线的边界
`extensions/auto-permissions.ts` 会先部署
`config/pi-auto-permissions.json`,再注册 contextual guardian。它只复核配置命中的 Bash
命令,并根据当前对话返回自动允许、要求修正或请求用户确认。
两个权限扩展是并列的 `tool_call` gate,不存在“`pi-permission-system``ask` 自动转发给
Auto Permissions”的机制。若同一命令在两边都配置为询问,会产生两层独立审批。因此组合包
不再在旧权限配置中重复声明 Git 非只读操作与包管理的 Bash `ask` 规则;旧扩展仍独占以下边界:
- `deny`:Bash 直搜、敏感凭据路径等硬拒绝不会被 guardian 绕过。
- `ask`:外部目录、`.git/*` 路径、文件/系统/网络/环境操作和普通 MCP 调用仍走旧权限 UI。
- Auto Permissions:只处理其正则命中的 Bash 命令。高风险操作始终回落到用户确认;中风险操作
只有在当前用户消息明确授权且满足约束时才自动批准。guardian 使用 raw shell regex,故只接管
这两类能获得明确收益的命令;现有解析器继续保护高风险类别。
配置选择 `widget` 展示,不替换当前 Bash rendererguardian 默认复用当前 Pi model,并以 low
reasoning effort 运行。项目受信任时,根 `AGENTS.md` 可作为约束证据,但不能单独授权操作。
### Kotlin 与 Java LSP
`extensions/lsp.ts` 会把 `config/lsp.json` 部署到全局 `~/.pi/agent/lsp.json`,其中启用:
- `kotlin-lsp --stdio`:匹配 `.kt``.kts`
- `jdtls`:匹配 `.java`;官方 wrapper 会按当前项目工作目录选择 cache data 目录。
两者按 Gradle、Maven 或 Git marker 定位项目根,忽略常见构建输出,并为大型 Android/Gradle
项目预留 120 秒启动时间。`pi-lsp` 只负责接入,不安装 language server 可执行文件;使用前需
确保 `kotlin-lsp``jdtls` 位于启动 Pi 的 `PATH`。Kotlin 官方 Homebrew 安装方式为:
```bash
brew install JetBrains/utils/kotlin-lsp
```
JDT LS 需要 Java 21 或更高版本;可使用带 `jdtls` wrapper 的官方发行包或系统包。
### Hermes Memory
Hermes Memory 使用上游默认的 `policy-only` 模式:不把完整记忆直接注入每轮上下文,由工具按需
搜索;同时启用后台复核、自动 consolidation、session search 和 secret scanning。首次需要检索
旧会话时运行 `/memory-index-sessions`
### Codex 原生远程压缩
远程压缩只对 `openai-codex/openai-codex-responses` 生效,使用上游默认配置:在 turn boundary
达到 90% 上下文占用时触发,并写入 Pi 原生 compaction boundary。失败时保持原历史且不静默
回退到文本摘要;checkpoint 与创建它的 Codex model 绑定。
### Codex fast mode
该扩展只在 `openai-codex` provider 的 Responses 请求上加入