Skip to content

macOS autostart: first Feishu message can fail because worker exits before ready; restart recovers #1246

Description

@MrYangDxj

我们在 macOS 用户登录后的 botmux 自动启动场景中遇到稳定性问题:服务表面已启动,但用户发送首条消息时会报“Codex App 会话启动失败:worker 在就绪前退出(exit code: 1)”;人工执行一次 botmux restart 后恢复。我们的目标是获得长期、受官方支持、无需人工重启且不二次修改 botmux 源码的解决方案。
运行环境与已确认事实
当前 botmux 版本:3.18.11。
当前官方 LaunchAgent:~/Library/LaunchAgents/com.botmux.daemon.plist。
官方形态的启动入口是原生二进制执行 botmux start,并使用 RunAtLoad=true。
botmux status 在运行态可显示 supervisor 与 worker online;但在问题发生后,首条真实 Feishu 消息仍可能在 worker ready 前失败,人工 botmux restart 后恢复。
session store 中曾出现 status=active 且 backendType=tmux 的会话记录,但对应 tmux server 已不存在;清理这类残留记录并重启后,服务可以恢复。
旧日志中还存在历史版本的 node: No such file or directory / PM2 127;我们不把它当作当前版本根因,除非官方认为两者相关。
当前 botmux status 曾提示存在 legacy PM2 daemon;我们会单独按官方迁移路径处理,不希望用外部脚本掩盖这一变量。
我们已排除的非长期方案
我们没有修改源码。我们评估过把 LaunchAgent 改为 wrapper、或用双 LaunchAgent + marker 先清理会话再启动,但发现官方 botmux start/restart 会刷新 com.botmux.daemon.plist 回官方形态。因此:
直接改 ProgramArguments 指向 wrapper 会在正常 start/restart 后失效;
依赖 WatchPaths / StartInterval 的双 agent 编排无法得到 launchd 对“严格先后、精确一次消费”的保证;
定时或登录后无条件 restart 只是在掩盖问题,会制造启动窗口和额外竞争。
我们不希望采用任何会与官方 autostart 机制对抗的长期绕行。
请求官方提供的长期解决方案
请确认并提供以下任一受支持能力(优先级从高到低):
官方启动前恢复钩子或配置项:在 daemon/worker 接收首条消息前,安全地执行 session backend 健康校验与 stale-session reconciliation;需要是官方持久配置,不能被 botmux start/restart 覆盖。
官方内置修复:启动时检测“session store 标为 active/tmux、但 tmux server 不存在”的不一致状态,并将对应会话以可审计方式关闭或恢复,避免首条消息创建 worker 后立即退出。
官方诊断与恢复接口:提供稳定 CLI/API,例如只读检查、受支持的 stale-session repair、preflight healthcheck,以及结构化错误码/日志字段,让运维可以准确区分 tmux 残留、worker 启动、Node/PM2 环境和凭证网络问题。
如以上能力已有,请给出对应版本、配置键、命令、启动顺序语义、幂等性说明、回滚方式及 macOS LaunchAgent 的官方兼容性说明。
安全与数据完整性要求
自动恢复只能处理明确失效的会话:backend 为 tmux、记录为 active、且 tmux server/目标 session 确认不存在。
不得关闭仍有存活 tmux server 的正常会话。
恢复前应保留 session-store 备份或等价可回溯记录;日志应包含处理数量、会话标识、判定原因、版本和时间。
不能要求用户手动修改私有运行目录、反复覆写官方 plist,或通过无条件 restart 维持可用性。
不能影响 MCP、插件、凭证、任务调度或其他 bot 配置。
建议官方验收标准
从真实重启/用户登录开始,官方 autostart 完成后不执行人工 botmux restart。
连续发送至少两条真实 Feishu 消息;第一条即可成功创建 Codex App 会话,日志中无“worker 在就绪前退出(exit code: 1)”。
botmux status、worker/session 状态、tmux 后端状态均一致;不存在 legacy PM2 的并发消费或 session-store 争用告警。
执行官方 botmux start/restart 后,修复配置或恢复能力仍然存在并继续生效。
故意构造或保留一条 stale active/tmux 记录时,官方机制只处理该失效记录,并有备份与审计;正常活跃会话不受影响。
请官方先确认:这是否已知问题、推荐的正式修复路径是什么、预计在哪个版本或以何种配置交付。我们可在脱敏前提下补充启动时间线、相关日志片段和 session-store 状态摘要。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions