Skip to content

feat(worker): 会话上限改按 bot 配 + 默认不限,删 worker-budget skill/CLI#231

Open
deepcoldy wants to merge 1 commit into
masterfrom
feat/per-bot-worker-cap
Open

feat(worker): 会话上限改按 bot 配 + 默认不限,删 worker-budget skill/CLI#231
deepcoldy wants to merge 1 commit into
masterfrom
feat/per-bot-worker-cap

Conversation

@deepcoldy

Copy link
Copy Markdown
Owner

背景

申晗指出 botmux-worker-budget 不该当 skill——既污染每个 agent 会话的上下文(描述常驻),非 skill 注入的 CLI(如 GPT)还会靠 --help 读到它撑大 token。需求收窄为:

  1. 删掉 skill 和 CLI 子命令;
  2. 配置改到 dashboard,每个 bot 一个「最大活跃会话数」
  3. 默认不设上限(资源够用时老会话永不休眠,体验最佳),去掉时间超时维度,只按会话数封顶;
  4. 自动帮老用户清掉这个 skill。

底层「超阈值→暂停最久未用 worker→下条消息 forkWorker 唤醒」机制本就存在(idle-worker-sweeper),本 PR 是把它从全局自动预算改成 per-bot 纯计数封顶,并把入口从 skill/CLI 挪到 dashboard。

改动

  • 删 skillbotmux-worker-budget 移出 BUILTIN_SKILLS,加进 RETIRED_SKILL_NAMES → installer 下次 spawn 时自动从各 CLI skills 目录清掉旧目录。
  • 删 CLIbotmux worker-budget 子命令(jsdoc/help/实现/dispatch 全删)→ 减 --help token。
  • 删自动推导:移除 core/worker-budget.ts(CPU×2/内存推导、idleSuspendMs、30min 门)+ 全局 worker config 块。默认 = 无上限。
  • per-bot 配置BotConfig.maxLiveWorkers(写 bots.json,parseBotConfigsFromText 只认正整数,≤0/小数/非数→undefined=不限)。
  • sweeper 重写(纯计数):无 cap → no-op;超 cap 时按 lastMessageAt 把最久未用的 非 adopt + 可恢复后端(tmux/herdr/zellij) + 非忙(屏幕 idle) 会话休眠到 cap 内。无 idle 时间门——只保留「不打断正在出答案的会话」这个正确性守卫;若超额会话恰好都在忙,本轮不动等下轮。daemon 每分钟读实时 bot.config.maxLiveWorkers,dashboard 改完免重启 60s 内生效。
  • dashboard:群组与机器人 → bot 卡片「会话数上限」section(数字框,空=不限);PUT /api/bots/:appId/max-live-workers → 经 applyConfigField(新增 'number' 字段 kind,coerce 校验正整数)落盘 + 内存热更;zh/en i18n。

物理事实(已在 UI 帮助文案中说明)

  • 休眠只对可恢复后端(tmux/herdr/zellij)生效,纯 PTY 会话不受影响(否则会杀 CLI)。
  • 改完默认无上限 = 去掉了原来按 CPU/内存自动推导的 OOM 安全网;内存紧的机器需按 bot 显式设上限。这是申晗明确要的取舍。

测试

  • 重写 idle-worker-sweeper.test.ts(8 例:无 cap/无 idle 时间门的纯计数/pty 不暂停/忙时不暂停/adopt 守卫)。
  • bot-config-store.test.ts'number' kind round-trip + coerce 校验;bot-registry.test.tsmaxLiveWorkers 解析;builtin-skills.test.ts 改成退役断言。
  • worker-budget* / global-config-worker 测试。
  • pnpm build 0 error;全量单测 4524 passed

未发版、未部署。

需求(申晗): worker-budget 不该当 skill(污染 agent 上下文+撑 --help token),
改成 dashboard 每个 bot 一个「最大活跃会话数」配置项;默认不设上限(资源够用
时老会话永不休眠,体验最佳),去掉时间超时维度,只按会话数封顶,超过后最久未用
的会话转休眠(下条消息/打开终端唤醒)。

- 删 botmux-worker-budget skill(进 RETIRED_SKILL_NAMES,升级时自动从各 CLI
  skills 目录清掉) + 删 botmux worker-budget CLI 子命令(含 --help/dispatch)
- 删 core/worker-budget.ts(自动推导/idleSuspendMs 全去) + 全局 worker config 块
- BotConfig 加 maxLiveWorkers(per-bot,bots.json);parseBotConfigsFromText 只认正整数
- idle-worker-sweeper 改纯按数封顶: 无 cap→no-op;超 cap 时按 lastMessageAt 把
  最久未用的非 adopt/可恢复后端/非忙(屏幕 idle)会话休眠到 cap 内,无 idle 时间门
  (只保留'不打断正在出答案的会话'的正确性守卫)。daemon 每分钟读实时 bot.config
  免重启生效
- bot-config-store 新增 'number' 字段 kind(coerce 校验正整数) + 注册 maxLiveWorkers
- dashboard: 群组与机器人卡片加「会话数上限」section + /api/bots(/:appId)/
  max-live-workers PUT 通道(经 applyConfigField 落盘+内存热更) + zh/en i18n
- 测试: 重写 idle-worker-sweeper(8 例,覆盖无 cap/纯计数无时间门/pty/忙/adopt) +
  bot-config-store number kind + bot-registry parse + builtin-skills 退役断言;
  删 worker-budget*/global-config-worker 测试
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