Skip to content

Feat/lark chat rename skill - #643

Open
ammend wants to merge 2 commits into
deepcoldy:masterfrom
ammend:feat/lark-chat-rename-skill
Open

Feat/lark chat rename skill#643
ammend wants to merge 2 commits into
deepcoldy:masterfrom
ammend:feat/lark-chat-rename-skill

Conversation

@ammend

@ammend ammend commented Jul 28, 2026

Copy link
Copy Markdown

背景

botmux 在飞书群内持续运行时,群名称无法随任务目标和阶段变化自动更新。用户需要手工改名,群名容易与当前工作状态脱节。

本 PR 新增受控的群改名能力,让用户明确要求时,或 AI 判断任务进入关键阶段时,可以由当前群内的 bot 修改当前飞书群名称。

改动内容

  • 新增内置 Skill:botmux-chat-rename
    • 用户明确要求改群名时触发
    • AI 判断群目标或关键阶段明显变化时可主动触发
    • 通过现有 botmux skill show 渐进披露机制提供完整说明
  • 新增 CLI:
botmux chat rename "新的群名称"
botmux chat rename "支付链路排障|待验证" --proactive
  • 新增 session-scoped daemon IPC 路由:/api/sessions/:sessionId/chat-rename
    • 复用现有 rotating capability / trusted-host 鉴权
    • 只能修改当前 session 所在群
    • 不支持指定其他 chatId 或切换其他 bot 身份
  • 新增飞书群改名服务:
    • 调用前确认当前 bot 在目标群内
    • 使用当前 bot 的应用身份调用 im.v1.chat.update
    • 不会在失败后遍历其他 bot 凭据重试
  • 增加名称安全校验:
    • 去除首尾空白
    • 拒绝空名称、超长名称、控制字符和不可见格式字符
    • 同名请求幂等,不重复调用飞书写接口
  • 增加 AI 主动改名防抖:
    • --proactive 请求按 bot + chat 应用 10 分钟冷却
    • 返回结构化 rate_limited 和剩余等待时间
  • 增加结构化错误:
    • not_group_chat
    • bot_not_in_chat
    • invalid_chat_name
    • permission_denied
    • rate_limited
    • lark_api_error
  • 改名成功后同步同群活跃 session 的 chatDisplayName 缓存,并记录结构化审计日志。
  • 新增需求与设计文档:
    • docs/design/2026-07-28-lark-chat-rename-skill-requirement.md

为什么这样设计

群改名是有外部副作用的写操作,因此能力被限制在当前会话和当前 bot 身份内。AI 无法传入任意群 ID,也不能借用其他 bot 的凭据,从而避免跨群或跨身份越权。

用户明确要求的改名可直接执行;AI 主动改名则需要显式传入 --proactive,并受防抖限制,避免群名随细小进度频繁变化。

影响范围

  • 平台:仅飞书/Lark;其他 IM 不受影响
  • CLI:所有底层 Agent CLI 共用同一个 botmux 命令与 daemon IPC,不依赖特定 CLI
  • 后端:PTY、tmux、zellij、riff 等会话后端共用 session-scoped 路径
  • 会话:仅 group session 可用;p2p 返回 not_group_chat
  • 多 bot:只使用当前 session 对应 bot 的身份,不做凭据回退
  • Sandbox:CLI 不读取飞书凭据,由 daemon 执行实际 API 写入
  • 现有发送、调度、workflow、群创建等路径未修改

测试验证

执行过:

NODE_OPTIONS=--max-old-space-size=4096 pnpm build
NODE_OPTIONS=--max-old-space-size=4096 pnpm exec tsc --noEmit
pnpm vitest run --project unit test/chat-rename.test.ts test/groups-store.test.ts test/ipc-slash-route.test.ts
NODE_OPTIONS=--max-old-space-size=4096 pnpm test

结果:

  • build 通过
  • TypeScript 类型检查通过
  • 群改名相关测试 36/36 通过
  • 全量 unit:11,061 通过,16 跳过
  • 全量测试有 2 个与本改动无关的环境 smoke 失败:
    • Node 24 下 /proc/<pid>/comm 返回 MainThread,既有用例预期 node
    • PID namespace helper 在全量并发运行时启动超时;单独复跑已通过

飞书实测

使用真实飞书群完成写入、读取确认和恢复:

  1. 原群名:4栋203
  2. 修改为:4栋203|botmux改名实测
  3. 重新读取群列表,确认新名称已生效
  4. 恢复为:4栋203
  5. 再次读取,确认恢复成功

两次 chat.update 均返回 ok=true, changed=true

已知边界

  • 当前 --proactive 冷却状态保存在 daemon 进程内,daemon 重启后不会保留。
  • 本 PR 暂未增加按 bot 开关;能力通过当前会话鉴权、群成员校验和 Skill 调用规则约束。

@ammend
ammend requested a review from deepcoldy as a code owner July 28, 2026 16:17
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