Skip to content

[Feature] 会话级权限预设:仅工作区 / 只读 / 完全访问 #1381

Open

Description

@what-my-names

提交前确认 / Before submitting

  • 我已经搜索过现有 Issue,确认这不是重复建议。
  • 我已经移除截图、配置和示例中的密钥及隐私信息。

当前版本 / 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

  1. what-my-names commented on Oct 18, 2026

    @what-my-names
    Author

    补充:这条建议对应的标签是 feature-request、area:tool-protocol、area:chat。Issue 作者账号没有仓库 tag 权限,麻烦维护者顺手加一下。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions