Files
boss/docs/architecture/rbac_skill_regression_matrix_cn.md

17 KiB
Raw Permalink Blame History

RBAC / Skill / 主 Agent 权限与回归矩阵

更新时间:2026-04-27

这份文档只梳理当前已经落地或明确未生产化的多用户、RBAC、Skill、主 Agent 权限和多设备控制链路。当前运行真相仍以 current_runtime_and_deploy_status_cn.mdapi_and_service_inventory_cn.md 为准。

1. 当前开发状态

1.1 已落地

  • 多用户 / RBAC 第一阶段已经落地到文件状态:accountDeviceGrants / accountProjectGrants / accountSkillGrants / skillCatalog / permissionAuditLogs 已进入 BossState
  • 最高管理员授权台已经可用:GET/POST /api/v1/admin/accesshighest_admin 可访问,支持创建 / 更新子账号、授予设备 / 项目 / Skill 权限、套用模板和撤销授权。
  • Web /me/access 与 Android AccessManagementActivity 已接入授权管理;member 不显示入口,直接请求也应返回 403
  • 会话、设备、项目详情、消息读写、设备 Skill、/api/state 已按当前登录账号裁剪;最高管理员保持全局可见。
  • 主 Agent prompt 与任务队列已接入授权快照:生成提示词时只带当前账号可见设备、项目、线程状态文档、进展事件和 SkillMasterAgentTask 会记录 authorizedDeviceIds / authorizedProjectIds / authorizedSkillIds / requiredPermissions
  • 本地 local-agent 已能扫描 ~/.codex/skills 并同步到云端设备 Skill 接口Web / Android Skill 页按授权后的设备和 Skill 展示。
  • 普通线程单聊、群聊下发、设备导入审核、browser/desktop 控制都已经进入 master-agent task queue -> local-agent -> complete 主链。
  • browser/desktop 控制已从占位结果升级为外部 runtime 桥:未配置时 fail closed配置 smoke runtime 时可回写结构化 control_summary

1.2 部分落地但仍属 MVP

  • 登录会话已有 boss_session、原生 restore token 和单会话撤销但还没有独立刷新令牌、完整吊销审计、CSRF 防护和更细风控策略。
  • permissionAuditLogs 已有第一版最高管理员查询入口和 deterministic 风险摘要;仍不是后台持久告警、归档和独立审计存储系统。
  • Skill 当前已支持“扫描、展示、授权、复制调用语句、进入主 Agent 授权上下文”,并新增最高管理员发起的远程安装 / 更新 / 卸载 / 回滚 / 版本锁请求local-agent 会认领并执行本机 Skill 文件或 Git 操作,但还不是带签名校验、依赖沙箱和执行审计的完整 Skill 平台。
  • 主 Agent 可以携带授权快照并派任务,但审批流仍是局部场景:群聊 approval_required 已有确认 / 拒绝;高风险 Skill、远程安装、跨设备接管还没有统一审批引擎。
  • 多设备控制当前以设备在线状态、设备绑定、项目线程绑定和 runtime 配置为准,尚未形成租约、抢占、并发冲突仲裁的完整生产级控制面。

2. 权限模型

2.1 角色

角色 当前含义 当前边界
highest_admin 最高管理员,默认账号 krisolo 全局可见可管理账号、授权、AI 账号、Telegram、运维入口和所有活跃会话
admin 管理员 / 可信协作者 可见更多“我的”入口,但当前不是全局授权管理员;不能访问 /api/v1/admin/access
member 子账号 / 普通成员 只看被授权设备、项目和 Skill我的 入口限制为个人安全、设置、技能、关于

2.2 权限点

权限 作用对象 当前作用
device.view 设备 查看设备;可带来该设备关联项目的只读可见性
device.manage 设备 预留给设备管理动作,当前不是主要前台能力
project.view 项目 / 线程 / 群聊 查看项目详情、会话列表、线程状态和项目投影
thread.chat 项目 / 线程 / 群聊 向普通项目或线程发送消息并创建 conversation_reply
master_agent.ask 项目 / 主 Agent 向主 Agent 提问或让主 Agent 生成推荐 / 任务
master_agent.takeover 项目 / 线程 允许主 Agent 接管或代表用户推动线程执行
computer.control 设备 / 项目 允许 browser/desktop 控制类任务进入执行链
skill.view Skill 查看已授权 Skill
skill.use Skill 把 Skill 作为可用能力放入授权上下文或调用语句
skill.manage Skill 预留给细粒度 Skill 管理;当前远程安装 / 更新仍由 highest_admin 入口硬限制
account.manage 账号 预留;当前账号授权管理仍以 highest_admin 角色硬限制为准
audit.view 审计 预留;当前权限审计查询入口仍以 highest_admin 硬限制为准

2.3 继承与显式授权

  • highest_admin 绕过设备、项目和 Skill 授权检查。
  • 非最高管理员如果拥有某台设备或被授予 device.view,可以只读看到该设备关联的项目。
  • device.view 不会自动放大为 thread.chat / master_agent.ask / master_agent.takeover / computer.control / skill.use
  • 聊天、主 Agent 接管、电脑控制和 Skill 使用必须来自项目授权、设备授权或 Skill 授权中的显式权限。
  • Skill 授权可带 deviceId / projectId scope同名 Skill 会聚合进 skillCatalog,但实际可见 / 可用仍要按设备和项目 scope 判断。
  • 过期授权通过 expiresAt 失效;当前应在回归中覆盖过期授权不再生效。

2.4 内置模板

模板 设备权限 项目权限 Skill 权限 适用场景
只读观察员 device.view project.view skill.view 只看设备、项目和 Skill不允许聊天或执行
项目开发者 device.view project.view / thread.chat / master_agent.ask skill.view / skill.use 参与项目开发,可问主 Agent 和调用已分配 Skill
设备操作者 device.view / computer.control project.view / thread.chat / master_agent.ask / master_agent.takeover / computer.control skill.view / skill.use 可信协作者,可触发接管和电脑控制

3. 控制链路权限边界

3.1 主 Agent 单聊

  • 入口:POST /api/v1/projects/master-agent/messages
  • 权限:当前需要 master_agent.ask;最高管理员全局通过。
  • 执行链:写入消息后创建 MasterAgentTask,优先走 Master Codex Node,设备离线或立即失败时可退到已配置 API / 阿里备用链。
  • 授权快照:任务保存 authorizedDeviceIds / authorizedProjectIds / authorizedSkillIds / requiredPermissions,用于执行器和后续审计判断。

3.2 普通线程单聊

  • 入口:POST /api/v1/projects/[projectId]/messages
  • 权限:普通项目需要 thread.chat;只读 project.view 不能发送消息。
  • 执行链:创建 conversation_reply,由绑定设备 local-agentcodex exec resume <targetCodexThreadRef> 回到真实 Codex 线程。
  • 重要边界如果线程缺失、设备离线、cwd 不匹配或历史只读线程上下文未解除,应失败并给出明确原因,不应假成功。

3.3 群聊下发

  • 入口:群聊消息进入主 Agent 推荐;用户确认后调用 dispatch plan confirm。
  • 权限:需要项目聊天 / 主 Agent 推荐能力;最终下发目标必须是真实可执行线程成员。
  • 当前审批:approval_required 群聊支持确认 / 拒绝,一次只保留一个待确认推荐,避免叠加。
  • 回写:dispatch_execution 完成后线程原始结果回群,再追加主 Agent 汇总;重复完成应幂等。

3.4 Skill

  • 采集:local-agent 扫描本机 ~/.codex/skills,上报 /api/v1/devices/[deviceId]/skills
  • 展示:GET /api/v1/devices/[deviceId]/skills 和 Web / Android Skill 页按账号授权过滤。
  • 使用:skill.use 决定 Skill 是否能进入当前账号的主 Agent 授权上下文或被用户复制调用。
  • 已落地第一版远程安装、远程更新、远程卸载、Git checkout 回滚和版本锁请求会被 local-agent 认领执行并同步最新清单。
  • 未生产化:远程 Skill 执行、签名校验、沙箱隔离、撤销后本地禁用、来源信任和依赖安装策略尚未完成。

3.5 多设备与电脑控制

  • 设备能力来自 heartbeatCodex GUI / CLI、browserAutomation、computerUse 等。
  • browser/desktop 控制任务要求 computer.control,并通过 MasterAgentTask 进入 local-agent 外部 runtime 桥。
  • smoke runtime 当前能做最小真实动作和 artifact 回写,但还不是完整 Playwright / Computer Use 生产运行时。
  • 同项目 GUI / CLI 并行写入已有冲突控制:默认阻断,用户可对异常项目选择本次 / 永久放行。

4. 回归矩阵

4.1 Web / API

场景 要测什么 命令
基础构建 Next.js 构建和 lint 无退化 npm run build && npm run lint
健康检查 Web 服务可启动、健康探针正常 npm start 后执行 curl -sS http://127.0.0.1:3000/api/health
登录态 登录、session、restore、logout 链路 curl -sS -H 'Content-Type: application/json' -d '{"account":"krisolo","password":"<admin-password>","method":"password"}' http://127.0.0.1:3000/api/auth/login
会话治理 最高管理员可看全部会话,子账号只能看自己,会话 token 不泄露 curl -sS http://127.0.0.1:3000/api/v1/auth/sessions
授权台保护 未登录返回 401,非最高管理员返回 403,最高管理员可读脱敏数据 curl -i http://127.0.0.1:3000/api/v1/admin/access
授权动作 upsert_account / grant_device / grant_project / grant_skill / apply_template / revoke_grant 都写入 permissionAuditLogs 用最高管理员 Cookie 对 /api/v1/admin/access 发 JSON POST
权限审计查询 最高管理员可按 action / actor / target / device / project / skill / cursor / limit 查询,普通账号 403 npx tsx --test tests/audit-permission-logs-route.test.ts
权限审计风险 能识别短时间大量授权、Skill lifecycle 失败、过期授权仍存在、admin route 拒绝访问 npx tsx --test tests/audit-permission-logs-route.test.ts
账号裁剪 子账号只看到被授权设备 / 项目 / Skill 用子账号 Cookie 分别请求 /api/v1/devices/api/v1/conversations/api/v1/devices/mac-studio/skills
项目写权限 只有 thread.chat 可发普通线程消息,只读账号应 403 curl -i -H 'Content-Type: application/json' -d '{"kind":"text","body":"权限回归"}' http://127.0.0.1:3000/api/v1/projects/<projectId>/messages
主 Agent 权限 master_agent.ask 才能进入主 Agent 任务链,任务包含授权快照 curl -sS -H 'Content-Type: application/json' -d '{"kind":"text","body":"列出我可见的设备和 Skill"}' http://127.0.0.1:3000/api/v1/projects/master-agent/messages
Skill 过滤 Skill 列表按设备和账号授权过滤 curl -sS http://127.0.0.1:3000/api/v1/devices/mac-studio/skills
Skill 治理请求 最高管理员可创建请求,设备可认领和回写 npx tsx --test tests/skill-lifecycle-route.test.ts
browser/desktop fail closed 未配置 runtime 时返回明确 disabled不写假成功 关闭 browserControl* / computerUse* 后发控制类主 Agent 消息
群聊审批 approval_required 只能有一条待确认推荐,确认 / 拒绝状态正确 用群聊项目消息接口触发 dispatch plan再测 confirm / reject

4.2 local-agent / 本机设备

场景 要测什么 命令
健康探针 launchd 常驻不被首次 heartbeat 阻塞 curl -sS http://127.0.0.1:4317/health
Skill 扫描 本机 Skill 能递归扫描并返回 curl -sS http://127.0.0.1:4317/api/v1/skills
Skill lifecycle local-agent 能认领请求、执行版本锁/卸载等安全本机操作并同步清单 node --test tests/local-agent-skill-lifecycle-runner.test.mjs
心跳上报 设备、能力、Skill、thread-context 能上报 curl -sS -X POST http://127.0.0.1:4317/api/v1/heartbeat
任务认领 conversation_reply / dispatch_execution / browser_control / desktop_control 能被认领或明确失败 触发对应 Web/API 消息后观察项目消息账本和 local-agent 日志
Codex 线程恢复 targetCodexThreadRef 时走 codex exec resume,缺失时才退 --ephemeral 发送普通线程消息并检查回写内容
rollout 镜像 Boss 用户消息先镜像进 Codex Desktop 同线程,重试不重复写入 对已绑定真实线程的项目发送消息后检查 Desktop 线程历史

4.3 Android

场景 要测什么 命令
构建 Debug APK 可构建并发布到 downloads npm run apk:debug
Release signed release APK 可构建 npm run apk:release
单元测试 Android 本地测试串行通过,避免 Gradle 中间产物互踩 cd android && ./gradlew testDebugUnitTest
真机安装 OPPO PHZ110 安装并可启动 adb -s U84XJRIB7D65ZH45 install -r android/app/build/outputs/apk/debug/app-debug.apk
角色入口 member / admin / highest_admin 的“我的”入口差异正确 真机登录不同账号,检查 用户与权限 / 技能 / 运维 / AI 账号 / Telegram 可见性
权限管理页 最高管理员可创建子账号、套模板、撤销授权 真机打开 我的 > 用户与权限
Skill 页 子账号只看到授权 Skill可复制调用语句 真机打开 我的 > 技能
聊天等待态 主 Agent、普通线程、群聊下发都显示等待直到真实回写或超时 真机分别发送三类消息
控制结果卡 browser/desktop 控制结果以目标 URL / 应用名卡片展示 真机向主 Agent 发送控制类请求

4.4 真机 / 多设备控制

场景 要测什么 命令
ADB 目标 默认只使用 OPPO PHZ110,不自动回退旧设备 adb devices
无线调试 同一局域网 + USB 初次启用后可切无线 adb -s U84XJRIB7D65ZH45 tcpip 5555 && adb connect <phone-ip>:5555
设备在线 Boss 设备页显示 mac-studio 在线及 browser/computer 能力 curl -sS http://127.0.0.1:4317/health && curl -sS -X POST http://127.0.0.1:4317/api/v1/heartbeat
GUI / CLI 冲突 同项目双执行模式默认阻断,允许本次 / 永久放行生效 在设备详情或项目冲突提示中切换策略后再次派发
设备离线 主 Agent / 项目确认接口返回明确离线原因,不假成功 停掉 local-agent 后发送线程或控制任务

4.5 服务器部署

场景 要测什么 命令
SSH 健康 固定服务器 106.53.170.158 可连 "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" health
Web 服务 boss-web.service 运行且本机 API 正常 "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "systemctl status boss-web --no-pager && curl -sS http://127.0.0.1:3000/api/health"
Caddy / HTTPS Caddy 运行,域名跳转正常 "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "systemctl status caddy --no-pager && curl -I --resolve boss.hyzq.net:443:127.0.0.1 https://boss.hyzq.net"
外网域名 当前网络能访问公网 HTTPS API curl -I https://boss.hyzq.net && curl -sS https://boss.hyzq.net/api/health
状态文件 部署不覆盖服务器 data/boss-state.json 部署前后在服务器检查 /opt/boss/data/boss-state.json mtime 和关键账号数据
邮件端口 Postfix / Dovecot 在线 "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "systemctl status postfix --no-pager && systemctl status dovecot --no-pager"

5. 剩余缺口

5.1 需要生产化的权限能力

  • Skill 远程安装 / 更新 / 卸载:第一版设备端安装器和版本锁已落地;仍需要签名校验、来源信任、安装审计增强和失败自动回滚。
  • Skill 远程执行:需要明确输入输出协议、沙箱边界、资源限制、敏感权限提示和 per-run 审计。
  • 统一审批流:高风险 Skill、电脑控制、跨设备接管、生产部署、账号和存储配置变更应进入同一审批模型而不是分散在群聊确认里。
  • 多级组织:当前只有角色 + 单账号授权;还没有组织、团队、项目组、继承授权、批量授权、离职回收和委派管理员。
  • 审计告警:授权日志已有账本,但缺少审计检索、异常检测、告警通道、不可篡改归档和审计报表。
  • 风险分级执行:requiresConfirmation / riskLevel 已开始进入任务元数据,但还没有统一策略中心约束哪些风险必须二次确认。

5.2 需要生产化的运行能力

  • 数据库:当前仍是 data/boss-state.json 文件存储RBAC、审计、会话和任务队列生产化前需要迁移到数据库并补索引和事务边界。
  • 会话安全需要独立刷新令牌、完整吊销审计、CSRF 防护、设备绑定策略、登录风险检测和异常会话告警。
  • 多设备控制租约:需要 device lease、抢占、超时释放、只读观察、独占输入和并发写入审计。
  • 真实 Browser / Computer Use runtime当前 smoke runtime 只能作为过渡层;生产需要接入真实浏览器自动化和桌面控制执行器。
  • 服务器出网:公网服务器当前对 api.openai.com 直接出网仍未完全打通OpenAI API 线上探针和调用依赖网络恢复。
  • 生产邮件验收Postfix / Dovecot 已部署,但 SPF、DKIM、DMARC、MX、退信策略和真实外部收件链路仍需最终验收。