企业后端概览
企业后端是给 sid-code 配套的服务端。管理员通过它的 Web 界面(下文叫管理台)管人、管设备、下发约束、分发插件,并查看全员的用量、成本和轨迹。
这个模块写给两类人:
员工(被管的人)不用读这个模块。员工侧的表现写在「团队部署」:企业登录、企业 policy 与安全边界、配额与成本控制,以及隐私与数据流向。
它分两半
| 控制面 | 数据面 | |
|---|---|---|
| 做什么 | 往员工机器下发:身份、策略、预算、Feature Flag、插件市场、飞书文档工具 | 从员工机器收集:轨迹、事件、用量账本 |
| 方向 | 主要是员工端拉取 | 员工端推送 |
| 鉴权 | 设备凭据(Flag 例外,见下表) | 设备凭据;轨迹上传用单独的上传口令 |
两半的鉴权是隔离的:管理台的接口走浏览器会话,员工端的接口走设备凭据,互相不能代用。
员工端和后端之间的通道
员工的 sid-code 只需要一行配置,各条通道的地址都由它推出来:
{ "backend": { "url": "https://agent.example.com/traj" } }只填 base,/api/v1/... 由客户端自己拼。/traj 这一段是部署时决定的路径前缀,按你们的实际部署填。怎么把这一行分发给全员,见团队默认配置分发。
员工机器上的 sid-code 企业后端
───────────────────── ────────
登录 sid-code login ── PKCE + 一次性码 ──────▶ 换出设备凭据
策略 启动 / 轮询 ◀── 设备凭据 ──────────── GET /ctl/policy
预算 启动 / 上报后 ◀── 设备凭据 ──────────── GET /ctl/budget
账本 每个会话 ── 设备凭据 ────────────▶ POST /usage/ledger
事件 每 15 秒一批 ── 设备凭据 ────────────▶ POST /events
Flag 启动 / 每 6 小时 ◀── 无鉴权 ────────────── GET /ctl/flags
轨迹 会话结束后 ── 上传口令 ────────────▶ POST /upload/session-file
─────────────────────────────────────────────────────────────────
插件市场 装 / 更新插件时 ◀── 设备凭据 ──────────── GET /ctl/marketplace/...
飞书文档 Agent 调工具时 ── 设备凭据 ────────────▶ POST /ctl/feishu/mcp横线上面七条,就是员工执行 sid-code auth status --verify 时逐条列出的七条通道。员工报「某个功能没生效」时,先让对方跑这条命令,看哪一条不通。
每条通道什么时候发生、失败时怎样:
| 通道 | 客户端什么时候拉或推 | 失败时 | 员工可见 |
|---|---|---|---|
| 登录 | sid-code login / /login,最多等 5 分钟 | 409 设备已绑给另一个人;400 / 401 / 403 提示重新登录 | 「已登录:张三」 |
| 策略 | 启动时一次,/login 后重新加载,交互会话约 30 分钟轮询一次 | fail-open:有 10 分钟内的缓存就用,否则按无远程策略处理 | 被拒提示、禁用理由 |
| 预算 | 启动时一次;账本上报成功后刷新,至少间隔 30 秒 | 按没有远程预算处理,本地 costLimit 仍然有效 | 超限提示 |
| 账本 | 每个会话一行,后台推送 | 5xx 落盘后重放;401 不落盘 | 无 |
| 事件 | 每 100 条或每 15 秒一批 | 落盘后重放,最多 8 次 | 无 |
| Flag | 启动时一次,之后每 6 小时 | 用磁盘缓存 | 无 |
| 轨迹 | 会话结束后,另有每 60 秒心跳 | 5 次退避重试,之后进队列 | 无 |
| 插件市场 | 浏览市场、安装、检查更新时 | 列表用上次的缓存;安装时哈希不一致或出错一律拒装(fail-closed) | 市场列表、安装报错 |
| 飞书文档 | Agent 调用飞书工具时 | 工具返回中文提示(例如需要重新授权) | 工具结果 |
拉取类通道大多是 fail-open:后端出故障时员工照常工作,只是暂时不受远程配置约束。插件安装反过来是 fail-closed:宁可装不上,也不装一个没核验过的包。
各管控页的「联动」一节会展开写对应那一条。
隐私级别对通道的影响
员工可以在本机调低外发(见隐私与数据流向)。对企业后端的影响:
| 员工的隐私级别 | 关掉的通道 | 管理台的表现 |
|---|---|---|
default | —— | 全部数据可见 |
no-telemetry | 事件、账本 | 审计页、成本页看不到这台设备的新数据;远程预算按服务端账本计用量,这台设备的花费不会计入 |
essential-traffic | 在上一级基础上再关 Flag 和轨迹 | 另外看不到这台设备的轨迹 |
策略、预算、登录不受隐私级别影响:它们是企业的下行管控,员工调隐私级别绕不过去。插件市场和飞书文档工具也不随隐私级别关闭。
想禁止员工自己调低隐私级别,用托管配置把它锁死,见企业 policy 与安全边界。
管理台页面地图
只有 admin 能进管理台。用飞书登录的普通成员(member)进来会看到整页 403「没有管理台权限」。角色在「用户」页设置。
| 菜单 | 做什么 | 说明页 |
|---|---|---|
| 仪表盘 | 轨迹数量、工具调用、成功率等总览 | 仪表盘与轨迹 |
| 轨迹 | 按会话查看员工的完整执行过程 | 仪表盘与轨迹 |
| 设备 | 设备列表、调整归属、吊销、签发注册码、查看某台设备的生效配置 | 设备与注册码 |
| 组织与团队 | 新建、改名组织和团队,查看变更记录 | 组织与团队 |
| Flag | 全局开关客户端功能,所有设备拿到同一份 | Feature Flag |
| 策略 | 给组织 / 团队 / 设备下发权限规则和功能限制 | 策略 |
| 审计 | 事件、策略是否在拦、被拒的事件、插件使用 | 审计 |
| 成本 | 用量账本、按层配置预算 | 成本、预算 |
| 遥控 | 远程接管员工的 CLI 会话 | 遥控 |
| 市场 | 上架、发布、下架企业插件 | 插件市场 |
| 用户 | 谁登录过、谁是管理员、停用账号 | 用户与登录 |
| 飞书授权 | 员工授权给 Agent 读飞书文档的状态和调用记录 | 飞书文档授权 |
能力边界(如实说)
1. 管住的是 sid-code,不是员工。 策略、预算、插件白名单都由 sid-code 客户端执行。员工换一个工具,或者直接调模型 API,这些约束都不在场。
2. 拉不到配置时大多数通道 fail-open。 后端挂了、员工没登录、网络不通,策略和预算都按「没有远程配置」处理。要求必须受控的环境,在员工机器的系统级路径另外部署一份本地 managed-settings.json 兜底(见企业 policy 与安全边界)。
3. 远程配置不是实时生效的。 策略最迟约 33 分钟、Flag 最迟约 6 小时;无头调用(sid-code -p)要等下次启动。紧急情况用吊销设备,而不是改策略。
4. 轨迹是弱归因。 轨迹上传用的是全公司共享的上传口令,身份由客户端自己报告,可以伪造。策略、预算、账本、事件走设备凭据,身份由后端校验,是强归因。按人追责时以后者为准。
5. 员工能看到的数据,管理员也能看到。 轨迹里有员工的提示词和工具输出。上线前在团队内说清楚收集了什么,员工侧的说明见隐私与数据流向。