Skip to content

fix: 飞书 /workspace 切换后 /new 偶发创建会话到错误的工作区 【已审核 PR】#354

Merged
ErlichLiu merged 2 commits intoErlichLiu:mainfrom
Andreaseszhang:Andreaseszhang/fix-feishu-workspace-concurrent-msg
Apr 30, 2026
Merged

fix: 飞书 /workspace 切换后 /new 偶发创建会话到错误的工作区 【已审核 PR】#354
ErlichLiu merged 2 commits intoErlichLiu:mainfrom
Andreaseszhang:Andreaseszhang/fix-feishu-workspace-concurrent-msg

Conversation

@Andreaseszhang
Copy link
Copy Markdown
Contributor

Overview

修复飞书 Bot 中使用 /workspace <arg> 切换工作区后,立即发 /new 创建会话时,会话偶发创建到「默认工作区」而非刚刚切换的工作区。

根因

飞书 SDK 要求事件回调立即返回(不能 await),否则网关会超时重投。因此 handleFeishuMessage 是 fire-and-forget 调用。当用户快速连续发两条消息(/workspace <arg>/new),两条消息的处理器并发执行

原有代码中的 processingChats 集合只做了 add 操作,没有在进入临界区前检查是否已有同聊天在处理中。导致 /new 的处理可能跑到 createNewSession 读取 this.botConfig.defaultWorkspaceId 时,/workspace 那条还没来得及更新内存中的 botConfig

Changes

  • apps/electron/src/main/lib/feishu-bridge.ts — 在 handleFeishuMessageprocessingChats.add() 之前增加 processingChats.has() 检查。同一聊天已有消息在处理中时,跳过后续消息,防止并发读写字端。

How to Test

  1. 启动 Proma,确保飞书 Bot 已连接
  2. 在飞书向 Bot 发送 /workspace <工作区名称> 切换工作区
  3. 立即发送 /new 创建新会话
  4. 验证新会话创建在步骤 2 选择的工作区下
  5. 如果 /new 被跳过(无响应),再发一次 /new,此时应正常创建

Notes

  • 被跳过的消息不会排队,用户需要重新发送。考虑到这是极短时间窗口(两条消息并发到达),用户只需再发一次即可

根因:飞书 SDK 事件回调不 await,快速连续发 /workspace + /new 时两条消息
并发执行,/new 可能在 /workspace 更新 botConfig 之前就读了旧值。

修复:在 handleFeishuMessage 加锁位置增加 has 检查,同一聊天已有消息
处理中时跳过后续消息,避免并发读写字端。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Andreaseszhang Andreaseszhang changed the title fix: /workspace 切换后 /new 偶发创建会话到错误的工作区 fix: /workspace 切换后 /new 偶发创建会话到错误的工作区 【已审核 PR】 Apr 28, 2026
@Andreaseszhang Andreaseszhang changed the title fix: /workspace 切换后 /new 偶发创建会话到错误的工作区 【已审核 PR】 fix: 飞书 /workspace 切换后 /new 偶发创建会话到错误的工作区 【已审核 PR】 Apr 28, 2026
两个层面的修复:
1. feishu-config.ts 持久化层:更新路径使用 ?? 保留现有值,防止 undefined 覆盖
2. FeishuSettings.tsx 调用层:handleSave 显式传递已有的 defaultWorkspaceId/defaultChannelId/defaultModelId

同时修复废弃的 saveFeishuConfig 漏传 defaultChannelId/defaultModelId 的问题。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@ErlichLiu ErlichLiu merged commit 0ae0cbc into ErlichLiu:main Apr 30, 2026
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.

2 participants