Skip to content

feat(settings): 设置 → 权限,查看、删除、手动添加 K-brain 权限规则 - #1102

Merged
AlphaCatMeow merged 1 commit into
Stack-Cairn:v2-kbrianfrom
AlphaCatMeow:feat-permission-rules-settings
Nov 1, 2026
Merged

AlphaCatMeow merged 1 commit into
Stack-Cairn:v2-kbrianfrom
AlphaCatMeow:feat-permission-rules-settings

Conversation

@AlphaCatMeow

@AlphaCatMeow AlphaCatMeow commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

审批时选「允许并记住」(#1098)会把规则存进 K-brain,但客户端里看不到也删不掉,只能去手改 JSON 文件。本 PR 是 LA-3a:在设置里加「权限」页,可以查看、删除、手动添加规则。先做桌面端;WebUI 需要经网关转发,在 LA-3b 里做。

Closes #1101
Depends-On: none
Stack-Root: #1102

改动

位置 内容
PermissionRulesSection.tsx(新) 分「所有项目」和「本项目」两块列出规则。「本项目」的下拉框沿用设置里的项目列表,隐藏和已归档的项目不列出。每条规则显示规则文本、允许或拒绝、添加时间、来源会话的前 8 位。删除前用 ConfirmDeletePopover 确认。可以手动添加允许或拒绝规则,选所有项目或本项目,默认是拒绝、所有项目。后端没有 permission_rules 能力时显示升级提示
并发与竞态 列表和加载它时选中的项目一起保存(loaded = {workspace, list})。删除项目规则时带上这条规则所在的项目。切换项目期间不显示旧项目的规则,也不显示它们的删除按钮。添加或删除之后,按当前选中的项目重新加载。每次请求带一个递增编号,只采用最新一次的结果;连接变了的回应也不采用
输入框 回车提交规则时用 isImeKeyboardEvent 判断,WebKit 下输入法确认候选词的那次回车(keyCode 229)不会提交
kbrainSettingsAdapter.ts 新增 PermissionRule* 类型,以及可选方法 listPermissionRules、addPermissionRule、deletePermissionRule
SettingsPage.tsx 宿主提供 listPermissionRules 时才注册「权限」页,放在「智能」分组的「系统工具」之后;WebUI 目前不提供,所以不会出现空的导航项
桌面端 kbrainSettings.ts 直接调用 GET/POST/DELETE /v1/permissions/rules,snake_case 转成 camelCase,出错时只显示 {"error"} 里的原因
文案、类型 zhCNSettings 和 enUSSettings 各加 22 个 key,两边一致;两个宿主的 SectionId 都加了 permissions

契约面

面 影响
桌面直连 新增三个适配器方法,接口是 K-brain beta.28 已有的 /v1/permissions/rules
Gateway 同步 无改动
WebUI 不注册这一页(适配器没有这三个方法),LA-3b 接入
老 K-brain(没有 permission_rules) 显示升级提示,不请求规则接口

截图(调试版真实客户端)

1280,「本项目 · LiveAgent」下是审批时记住的规则:
gui 1280

480,「所有项目」下是手动添加的拒绝规则:
gui 480

验证

项 做法 结果
基线 upstream/v2-kbrian 8a578a0 —
先失败的测试 settings/permission-rules:用 jsdom 渲染真实组件,覆盖列表、项目切换、删除、添加、报错、能力位、乱序回应和没有项目的情况,另有桌面端适配器的 URL 和报错测试,共 8 条;settings/permission-rules-registration:注册条件和两种语言的 key,2 条 写好时 8 条全部失败,实现后 10/10 通过
对抗复审第 1 轮 独立子代理写回归测试 review-la3a-permission-rules 3 个 P2:切换项目后,添加或删除的请求带的还是旧项目;切换期间旧列表仍可删除,删除请求带的是新项目;输入法确认候选词的回车会提交规则。都已修复
对抗复审第 2 轮 新增 7 条竞态和边界测试 review-la3a-permission-rules-r2 未发现阻止合并的问题,合计 21/21
全量 la-full-tests.mjs,8 个批次都跑完 共 4370 条:通过 4366,失败 3,跳过 1。3 条失败都在已知环境问题清单里:Rust 测试首次编译超过 180 秒上限;另外两条用例按 CWD 相对路径读源码,在 crates/agent-gui 下重跑能通过
静态检查 typecheck ×3、改动文件转 LF 后 biome check --line-ending=lf、check-mirror.mjs、git diff --check 全部通过
真机 1 Windows 调试版 + beta.28 sidecar,「始终询问」模式。审批 node -e "console.log(6*7)" 时按 2 选「本项目」 设置页「本项目 · LiveAgent」下出现这条规则,并显示添加时间和来源会话
真机 2 在设置页手动添加拒绝规则 Bash(echo deny-test:*)(所有项目) 让模型执行 echo deny-test hello:没有弹审批,命令被这条规则直接拒绝
真机 3 在设置页删除第 1 步的项目规则 新开会话执行同一条命令,重新弹出审批
真机 4 在设置页删除第 2 步的拒绝规则 列表清空,测试规则都已清理
宽度 1280 / 480 两种宽度下页面都没有横向溢出
用户验收 — 通过

未覆盖:

  • WebUI(LA-3b)。
  • 会话规则:设置页不知道当前是哪个会话,所以不列出。
  • K-brain sidecar 在页面打开期间重启时,页面只提示「重新打开这一页」,不会自动重试。
  • Linux 和 macOS 只在 CI 上跑过。

另外发现、与本 PR 无关:桌面窗口宽 480 时,设置页左侧导航不会收起,内容区只剩约 138px,原有的「系统工具」页也会横向溢出。

🤖 Generated with Claude Code

- 「智能」分组新增「权限」页:列出所有项目和所选项目的规则(规则、允许/拒绝、
  添加时间、来源会话),可删除(先确认),可手动添加允许或拒绝规则。
- 列表与加载它的项目绑定:删除项目规则用规则所在的项目,切换中不显示旧项目的规则。
- 后端无 permission_rules 能力时显示升级提示;只有能访问规则接口的宿主注册此页,
  WebUI 在 LA-3b 接入。
- 桌面端适配器直连 /v1/permissions/rules,错误只显示 K-brain 返回的原因。
- 规则输入框里输入法确认候选词的回车不提交。

Closes Stack-Cairn#1101

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@AlphaCatMeow
AlphaCatMeow merged commit 0651526 into Stack-Cairn:v2-kbrian Nov 1, 2026
12 of 13 checks passed
@AlphaCatMeow
AlphaCatMeow deleted the feat-permission-rules-settings branch November 1, 2026 21:20
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.

1 participant