### 提交前确认 / Before submitting - [x] 我已经搜索过现有 Issue,确认这不是重复建议。 - [x] 我已经移除截图、配置和示例中的密钥及隐私信息。 ### 当前版本 / Current version 1.12.2 ### 使用环境 / Environment 设备型号:OPPO OPD2101 Android / 操作系统版本:Android 14 浏览器及版本(如适用):不适用 ### 功能领域 / Feature area Permission, system or device / 权限、系统或设备 ### 要解决的问题 / Problem or motivation 现在的权限是**工具级**的:每个工具可以设 `ALLOW / ASK / FORBID`,再加一个全局总开关。它回答的是「这个工具能不能用」,但没有回答另一个问题:**这次会话能碰哪些文件?** 实际使用里这不够: - 只想让 AI 改当前项目,但 `workspace` 只是一个默认目录,工具仍然可以写到别的地方; - 想让 AI 只读代码、不许动手,现在只能把一堆写工具逐个设成 `FORBID`; - 做批量文件整理时,又得反过来逐个放行,或者去设置里改全局开关,来回折腾; - 会话之间没法用不同粒度:一个会话想收紧,另一个想放开,只能全局改。 ### 使用场景 / Use case 1. **日常改项目**:会话绑定工作区,设为「仅工作区」+ 写操作确认。改项目内文件时按需确认,一旦 AI 试图写工作区外,直接被拦下并告知原因。 2. **只读审查**:读代码、查依赖、跑只读命令,设为「只读」。AI 能看能分析,但改不了任何文件。 3. **批量自动化**:临时切「完全访问」,几百个文件的操作不再逐条弹确认,跑完切回默认。 4. **把手机借给别人用**:默认「仅工作区」,起码 AI 不会顺手动相册和文档目录。 ### 期望方案 / Proposed behavior 参考 DeepSeek Harness 的权限预设,把「文件边界」和「审批策略」合成一个预设: | 预设 | 文件边界 | 审批 | | --- | --- | --- | | **仅工作区**(默认) | 只能在当前会话绑定的工作区内写入;工作区外写入拒绝 | 写操作需确认 | | **只读** | 只允许读,禁止写入、删除、改属性 | 操作仍需确认 | | **完全访问** | 不做路径限制 | 不再询问 | 具体行为: - 会话设置里能看到当前预设,也能切换;切换只影响当前会话。 - 新建会话时读取默认预设并**固定**进该会话;之后改默认值不影响已有会话。 - 与现有工具权限叠加:工具级 `FORBID` 优先,预设不能把被禁用的工具放开;两层都允许才执行,取更严格的那个。 - 越界不是静默失败:要在对话里返回可读的拒绝原因,让模型知道是权限拦的,而不是工具坏了。 - 建议支持一次性的「本次放行」:只对当前这一条操作有效,不写成永久规则(DSH 的 `allowed-once` 就是这个语义)。 - 切换预设时记录一条审计事件,便于事后排查「为什么这个文件没写进去」。 需要明确写进 UI 的一点:**这是应用层的路径策略,不是 Android 内核沙箱**。终端、shell、代码执行这类工具无法完全等价于文件工具的限制,建议在这些工具上按「能判定就判定、不能判定就拒绝或要求确认」处理,并在设置页说明边界。 ### 可接受结果 / Expected outcome - [ ] 会话设置里能看到当前权限预设,默认是「仅工作区」 - [ ] 切到「只读」后,写文件、删除、重命名等操作被拒绝,并给出明确提示 - [ ] 「仅工作区」下,工作区内的写入正常,工作区外的写入被拒绝 - [ ] 「完全访问」下行为与当前版本一致 - [ ] 切换只影响当前会话,重启应用后保持 - [ ] 新建会话使用默认预设;修改默认值不影响已有会话 - [ ] 工具级 `FORBID` 优先级高于预设,不会被预设放开 - [ ] 被拦截的操作在对话里有可读原因,不是静默失败或笼统报错 - [ ] 升级后已有会话按默认预设处理,不需要手动迁移 ### 截图、草图或参考图 / Screenshot, mockup or reference 暂无截图。参考文档: https://deepseekdocs.com/en/docs/user-guide/permissions ### 替代方案与补充信息 / Alternatives and context - 现有绕法只有两个:去设置里把相关工具逐个设成 `FORBID`(粒度太粗,恢复麻烦),或者人工盯着每一步。 - 实现线索:`ToolPermissionSystem` 已经有一套工具级 `PermissionLevel` 和 DataStore 存储,可以在工具执行前加一层会话级文件策略检查;会话预设可以挂在 `ChatEntity` 上(和 `workspace` 放一起),执行时取当前会话的预设 + 工作区路径。 - 路径判定建议统一做规范化后再比较(`..`、符号链接、相对路径),否则边界很容易被绕过去。 - 一个需要维护者定的点:「只读」是限制在整个文件系统,还是只限制在工作区内?我个人倾向前者,语义更清楚;但 Android 上读取范围较广,可能需要按工具类型分别处理。
Activity
what-my-names commentedon Oct 18, 2026
补充:这条建议对应的标签是
feature-request、area:tool-protocol、area:chat。Issue 作者账号没有仓库 tag 权限,麻烦维护者顺手加一下。