Skip to content

feat(buddy): 自动化支持按任务设置审批策略与免确认白名单 - #394

Closed
QAyong wants to merge 5 commits into
useLexora:masterfrom
QAyong:codex/upstream-pr-automation-approval-allowlist
Closed

QAyong wants to merge 5 commits into
useLexora:masterfrom
QAyong:codex/upstream-pr-automation-approval-allowlist

Conversation

@QAyong

@QAyong QAyong commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

背景与关联 / Context and related issue

  • 问题或目标 / Problem or goal: 自动化(定时/后台运行)的审批策略是写死的,无人值守时所有需要确认的操作都会被直接拒绝。需要读写工作区外目录或访问外部域名的任务因此做不完,用户也无法事先看到、控制自动化开放了哪些权限;后台权限选择器还隐藏了「人工审批」,自动化无法保存完整的权限模式。
  • 关联 Issue / Related issue: N/A

主要改动 / Changes

  • 变更 / Change:
    • 权限模式按自动化保存:新增 approval_policy(迁移 v31),编辑器的权限选择器与聊天一致,恢复「人工审批」,并把后台说明改为「无人值守时需要确认的操作会被拒绝」。
    • 智能审批下的免确认白名单:新增 approval_allowlist_json(同一迁移 v31),条目为目录(读/写)和域名(精确或 *. 前缀)。无人值守的运行遇到需要确认的操作时,只有白名单覆盖才放行,且只对这一次调用有效,不写入长期授权。deny、宿主机 shell、系统动作、人工审批和只读限制均不变。
    • AI 创建自动化:创建工具新增可选的 approvalPolicy 与 approvalAllowlist,工具说明要求 AI 先判断任务是否需要工作区外的目录或域名;白名单显示在创建确认卡片上,由用户确认后才生效。
    • 查看与审计:编辑器在智能审批下只读展示白名单;放行时记录诊断事件。

验证 / Verification

  • 自动检查 / Automated checks: 新增白名单匹配、授权服务、存储往返、共享 schema 的测试,以及「权限模式 × 操作」的无人值守矩阵回归测试(unattendedPermissionMatrix.spec.ts)。这些在移植到本分支之前已在我们的开发分支上通过类型检查与相关 spec;移植到上游 master 后未重复本地验证,请以本 PR 的 CI 为准。
  • 手动验证 / Manual verification: 未在应用内用真实模型运行自动化。
  • 未执行 / Not run: 本分支的本地类型检查与测试(基于上游 master 重新套用,解决了 DesktopAutomationEditor.vue 的一处冲突,并把两列合并到同一个迁移 v31);Windows/macOS 应用内手动验证。

兼容与风险 / Compatibility and risks

  • 新增迁移 v31(两列,均带默认值),旧自动化按 policy + 空白名单处理,行为不变。若上游同期也新增 v31,需要调整编号。
  • 白名单只覆盖目录读写与沙盒命令的联网域名;网页、连接器工具的联网拿不到目标主机,无法按域名放行。
  • 完全访问下沙盒联网在无人值守时仍被拒,这是原有行为,本 PR 未改。
  • 请重点审阅 PermissionEngine.finalizeDecision 与 ToolAuthorizationService 中后台放行的分支,以及 approvalAllowlist.ts 的路径/域名匹配。

界面变更 / UI changes

自动化编辑器新增只读的「免确认范围」区块,权限选择器在后台新增「人工审批」及后台说明。暂未附截图。

🤖 Generated with Claude Code

probe and others added 3 commits October 19, 2026 16:19
自动化的审批策略原来是写死的,无人值守时所有需要确认的操作都会被直接拒绝,
需要读写工作区外目录或访问外部域名的任务因此无法完成。现在每个自动化保存
自己的权限模式,并在智能审批下维护一份目录与域名白名单,无人值守的运行命中
白名单时免确认放行。

- 新增 approval_policy 与 approval_allowlist_json(迁移 v31),随执行快照与运行记录传递。
- 权限引擎仅在白名单覆盖时对无人值守运行保留批准;deny、宿主机 shell、系统动作、
  人工审批与只读限制保持不变。
- 创建工具与确认卡片支持 approvalPolicy / approvalAllowlist,编辑器只读展示白名单;
  权限选择器恢复人工审批,并补充后台说明。
- 新增无人值守权限矩阵回归测试。

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
沿用上游新增的 containsCanonicalPath 判断免确认白名单中的目录包含关系。

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
probe and others added 2 commits October 20, 2026 16:04
上游同期新增了 v31(MutationRecovery),免确认白名单对应的列迁移改为 v32。

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
该用例通过拨回 user_version 模拟 v30 旧库,重新打开时会再次执行 v31 与 v32,
而自动化审批列已存在导致 duplicate column name。模拟旧库时同步去掉这两列。

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@shanyuhai123

Copy link
Copy Markdown
Contributor

这部分我会在你基础上稍微调整下:

  • 空间显示的支持多目录,目前其实底层是支持的
  • 白名单域名也是需要显示支持的

@shanyuhai123

Copy link
Copy Markdown
Contributor

还有部分拦截可能是设计缺陷、不友好

@shanyuhai123

Copy link
Copy Markdown
Contributor

推倒的有点多,还是新起了一个 #409 这个将会关闭

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants