Skip to content

fix(read-isolation): send-cred/riff-env 带上 brandLabel,修复隔离/沙盒 bot 的 botmux send 页脚丢角色#508

Open
xu4wang wants to merge 1 commit into
deepcoldy:masterfrom
xu4wang:fix/isolated-brand-footer
Open

fix(read-isolation): send-cred/riff-env 带上 brandLabel,修复隔离/沙盒 bot 的 botmux send 页脚丢角色#508
xu4wang wants to merge 1 commit into
deepcoldy:masterfrom
xu4wang:fix/isolated-brand-footer

Conversation

@xu4wang

@xu4wang xu4wang commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

问题

隔离(读隔离)bot 的沙盒会话跑 botmux send 时读不到 bots.json(读隔离 deny),只能从自己 BOT_HOME 的 send-cred.json 拿配置;riff 远程沙盒 更是没有本地文件、只能吃 daemon 注入的 env。而这两条路都只传了 brandfeishu/lark 域名),没传 brandLabel(页脚模板,如 [{cwdName}]({cwdUrl}))。

registerSelfFromCredFile() / riffModeSession() 用这些源在内存注册 bot 后,resolveBrandLabel() 直接返回内存 config 的 brandLabel、不再回落读 bots.json → 返回 undefinedrenderBrandTemplate(undefined,…) 退化成默认品牌 → 隔离/沙盒 bot 的 send 卡片页脚丢掉角色名/链接。(daemon 侧渲染的卡片不受影响:daemon 不沙盒、内存里有 brandLabel。)

修复

brandLabel 沿所有「沙盒 send」链路一路带下去:

  • types.ts:init 消息类型加 brandLabel?: string
  • worker-pool.ts:两处 forkWorker 建 init 时填 brandLabel: botCfg.brandLabel(普通 + adopt 路径,resume/refork 复用)
  • PTY/tmux 路径 worker.ts:写 send-cred.json 时带上 brandLabelcli.ts registerSelfFromCredFile 读回并注册
  • riff env 路径 worker.ts:注入 BOTMUX_LARK_BRAND_LABEL 环境变量(镜像已有的 BOTMUX_LARK_BRAND);cli.ts riffModeSession 读回填进合成 BotConfig

兼容性

  • brandLabel 的 bot / 非隔离 bot 行为不变(仍 undefined → 默认页脚)。
  • brandLabel 只是页脚模板字符串,放进已是 0600 的 send-cred 无额外泄漏面。

测试

  • pnpm build 通过(tsc 全链路类型打通);相关 305 测试无回归。
  • 新增 2 个单测锁定「注册带 brandLabel → resolveBrandLabel 返回它 / 不带 → undefined」。
  • codex 定向复验:主修 clean,抓出 riff env 路径遗漏(本 PR 已补),复验无 blocker。

@xu4wang
xu4wang requested a review from deepcoldy as a code owner July 17, 2026 05:13
…脚丢角色

隔离 bot 的沙盒会话跑 `botmux send` 时读不到 bots.json(读隔离 deny),只能从
自己 BOT_HOME 的 send-cred.json 拿配置。但 send-cred 此前只写了 `brand`(feishu/lark
域名),没写 `brandLabel`(页脚模板,如 `[{cwdName}]({cwdUrl})`)。而
`registerSelfFromCredFile` 用 send-cred 在内存注册后,`resolveBrandLabel()` 直接返回
内存里的 `config.brandLabel`(已注册就不再回落读 bots.json)→ 返回 undefined →
`renderBrandTemplate(undefined,…)` 退化成默认品牌 → **隔离 bot 的 send 页脚丢掉角色
名/链接**。(daemon 侧渲染的卡片不受影响:daemon 不沙盒、内存里有 brandLabel。)

修复:把 brandLabel 沿「init 消息 → send-cred.json → registerSelfFromCredFile」这条链
一路带下去:
- types.ts:init 消息类型加 `brandLabel?: string`
- worker-pool.ts:两处 forkWorker 建 init 时填 `brandLabel: botCfg.brandLabel`
- worker.ts:写 send-cred.json 时带上 `brandLabel: cfg.brandLabel`
- cli.ts:`registerSelfFromCredFile` 从 send-cred 读 `brandLabel` 并注册进去

测试:新增 2 个单测锁定「注册带 brandLabel → resolveBrandLabel 返回它 / 不带 → undefined」
(隔离 send 路径依赖的正是这条语义);相关 305 测试无回归;build 通过。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

- 补 riff env 模式:riff 远程沙盒无 send-cred 文件,改由 daemon 注入 BOTMUX_LARK_BRAND_LABEL 环境变量,riffModeSession 读回填进合成 BotConfig(codex 复验发现的第 3 条 send 路径)。

- riff env 空串处理:改用 `!== undefined` 注入、读时不再 `|| undefined`,让 brandLabel=''(=显式关闭页脚)在 riff 也如实 round-trip,与 send-cred 路径一致(codex 复验第 2 点)。
@xu4wang
xu4wang force-pushed the fix/isolated-brand-footer branch from f3bcf10 to 2735902 Compare July 17, 2026 05:15
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