Skip to content

feat(gateway): WebUI 设置 → 权限,经网关查看、添加、删除权限规则 - #1104

Merged
AlphaCatMeow merged 2 commits into
Stack-Cairn:v2-kbrianfrom
AlphaCatMeow:feat-permission-rules-webui
Nov 1, 2026
Merged

AlphaCatMeow merged 2 commits into
Stack-Cairn:v2-kbrianfrom
AlphaCatMeow:feat-permission-rules-webui

Conversation

@AlphaCatMeow

Copy link
Copy Markdown
Contributor

LA-3a(#1102)给桌面端加了「设置 → 权限」。WebUI 拿不到 K-brain 的地址和令牌,网关也没有转发这类请求的通道,所以 WebUI 上还没有这一页。本 PR 是 LA-3b:新增一对网关请求和应答,WebUI 发出的请求经网关交给桌面端(网关直连 K-brain 时交给 K-brain),WebUI 由此也有了「权限」页。

Closes #1103
Depends-On: #1102
Stack-Root: #1102

本 PR 叠在 #1102 上,所以在 #1102 合入前,diff 里也会显示 LA-3a 的那个提交。本 PR 自己的改动只有最后一个提交 4a97fb4。

改动

层 内容
协议 gateway.proto 新增 PermissionRulesRequest{action, input_json} 和 PermissionRulesResponse{result_json};在 GatewayEnvelope.permission_rules = 111 和 AgentEnvelope.permission_rules_resp = 119 各加一个分支,都放在末尾。已用 buf generate 重新生成 Go 和 TS 代码
能力位 新增 PERMISSION_RULES_V1。桌面端在 hello 里声明(ws_transport.rs),网关 guard 只有看到这个能力位才放行;老桌面会立刻收到 "update LiveAgent on the desktop" 的报错,不会一直等到超时
网关 guard vetPermissionRules:action 只能是 list、add 或 delete;参数必须是 JSON 对象,长度不超过 32768
桌面端 Rust handle_permission_rules / kbrain_permission_rules:只转发 workspace/rule/effect/scope/id,scope 只接受 project 或 user,project 必须带 workspace;在 envelope_handler 里 spawn 执行,不阻塞调度循环;出错时回 400
网关直连 K-brain internal/kbrain/permission_rules.go:Relay.PermissionRules 做同样的白名单和校验,并在 browser_relay 里先 vet 再转发;K-brain 拒绝时只返回它在 {"error"} 里给的原因;应答超过 4 MiB 时报"太大"
WebUI gatewaySocketRpc.permissionRules:list 断线后会重发,add 和 delete 不重放。adapters.ts 负责请求映射、字段白名单和应答解码。设置适配器补上三个方法,WebUI 上出现「权限」页
共享页面 PermissionRulesSection.run():添加或删除失败后也重新读一次列表。这样即使删除已经执行、应答却在断线时丢失,页面也不会一直显示已删掉的规则
文档 在 docs/architecture/protocols.md 的管理协议表里加了一行

契约面

面 影响
桌面直连 不变(LA-3a)
Gateway 同步 新增透传分支,需要 PERMISSION_RULES_V1;直连 K-brain 时由 relay 处理
WebUI 设置适配器经 rpc 读写规则,页面始终注册;连的是老桌面时,页面上显示 guard 的报错
老桌面 + 新网关 guard 直接拒绝并提示更新
新桌面 + 老网关 老网关不认识这个分支,返回 "unsupported agent_request payload",页面上显示这条报错

截图(真实 WebUI,经网关连调试版桌面端)

1024:在 WebUI 添加的拒绝规则
webui 1024

390:
webui 390

验证

项 做法 结果
基线 叠在 LA-3a 8f56f1a 上(upstream/v2-kbrian 8a578a0) —
先失败的测试 Go:guard 门控与白名单、relay 的映射/本地拒绝/错误原因、直连 K-brain 端到端(v2_kbrain_permission_rules_test);Rust:kbrain_permission_rules_maps_actions_and_rejects_bad_input,并把新能力位加进 hello 能力列表测试;WebUI:请求和应答映射、设置适配器 写好时都失败(编译失败或断言失败),实现后都通过
对抗复审第 1 轮 独立子代理,Go、TS 和读代码三条路径 发现 1 个 P2:删除的应答在断线中丢失后,页面没有刷新,已删的规则还留着,再重试会得到 404。已修复
对抗复审第 2 轮 新增 5 个回归测试 未发现阻止合并的问题
全量 la-full-tests 8 个批次全部跑完 4379 条:通过 4375,失败 3,跳过 1;这 3 条都在已知环境失败清单里
WebUI 全部测试 pnpm --filter @liveagent/gateway-webui test 334/334
网关 Go go test ./... 22 个包全部通过;go vet 通过;gofmt 检查的是 LF 副本,也通过
Rust 只跑相关的 cargo test --lib:gateway_bridge 和 ws_transport 13/13
协议 buf lint、buf breaking --against v2-kbrian、buf generate 后与提交的代码比对 都通过,重新生成后没有新的差异
静态检查 typecheck ×3、biome(LF)、rustfmt(只针对新代码)、check-mirror.mjs、git diff --check 都通过
真机 1 Windows 调试版、beta.28 sidecar,网关从当前源码构建;在 WebUI 打开设置 → 权限 列表经网关→桌面→K-brain 读出
真机 2 在 WebUI 添加拒绝规则 Bash(echo webui-deny:*),作用于所有项目 桌面的设置页立刻能看到这条规则
真机 3 从 WebUI 发起会话,执行 echo webui-deny ok 没有弹审批,命令被这条规则直接拒绝
真机 4 在 WebUI 删除这条规则 桌面列表随之清空,测试规则已清理
宽度 WebUI 390 / 1024 都没有横向溢出
用户验收 — 通过

未覆盖:

  • WebUI 1280 宽度的截图:浏览器面板只有约 800×600,模拟 1280 时截图会被裁掉,所以改截面板原生的 1024 宽。1280 下用 DOM 测量确认过没有溢出。
  • 老桌面配新网关、网关直连 K-brain 这两种组合,只有自动化测试,没在真机上试。
  • Linux 和 macOS 只在 CI 上跑。

🤖 Generated with Claude Code

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

Closes Stack-Cairn#1101

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 协议:新增 PermissionRulesRequest/Response(GatewayEnvelope 111、AgentEnvelope 119),
  action 只有 list/add/delete;桌面端在 hello 声明 PERMISSION_RULES_V1,网关对老桌面
  直接拒绝并提示更新。
- 桌面端与直连 K-brain 的网关都只转发 workspace/rule/effect/scope(project|user)/id,
  会话规则不经这里;K-brain 拒绝时显示它给的原因。
- WebUI 设置适配器补上三个方法,「权限」页在 WebUI 出现;只有读取会在重连后重发。
- 共享页面:添加或删除失败后也重新读列表,应答在断线时丢失也不留下已删的规则。

Closes Stack-Cairn#1103

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@AlphaCatMeow
AlphaCatMeow merged commit bcaf5c5 into Stack-Cairn:v2-kbrian Nov 1, 2026
14 checks passed
@AlphaCatMeow
AlphaCatMeow deleted the feat-permission-rules-webui 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