连发多条消息上下文不串线:lark-coding-agent-bridge 的会话隔离、消息队列与工作区切换
连发多条消息上下文不串线lark-coding-agent-bridge 的会话隔离、消息队列与工作区切换【免费下载链接】lark-coding-agent-bridgeBot that bridges Feishu/Lark messenger with a local Claude Code or Codex CLI. Streaming cards, per-chat sessions, multiple workspaces项目地址: https://gitcode.com/gh_mirrors/fe/lark-coding-agent-bridgelark-coding-agent-bridge是一个把飞书 / Lark 消息与本地 Claude Code 或 Codex CLI 打通的轻量 bot在飞书里私聊或在群里 bot本机编程助手就开始干活。很多新手最担心的是连发多条消息会不会把上下文搞乱——本文带你看懂它的三大机制会话隔离、消息队列合并、工作区切换以及为什么不同聊天、不同话题之间永远不会互相串线。1. 会话隔离每条消息先算出一个作用域 bridge 不会把所有消息塞进同一个会话。每条消息进来后先经过 scopeFor 计算出一个会话作用域scope聊天类型作用域效果私聊 / 普通群chatId整个聊天共享一个会话符合直觉话题群chatId:threadId每个话题是独立会话各自有会话、工作目录、消息队列也就是说同一个群里开 A、B 两个话题bridge 会把它们视为两场完全独立的对话互不干扰。一个容易踩坑的细节飞书的部分消息事件里不带thread_id尤其是开启新话题的第一条消息。src/bot/thread-id.ts 会主动调用原始im.v1.message.get接口把thread_id查回来——否则回复会跑到新话题里、作用域也会错误地塌缩到整个聊天级别。这正是不串线的关键保障之一。2. 消息队列连发的消息会被合并成一批 ✅短消息去抖600ms你一口气连发 3 条加个登录页 / 用 React / 记得加测试bridge 不会触发 3 次运行。PendingQueue 按作用域维护一个去抖队列默认600ms 静默窗口内见 src/bot/channel.ts 的DEBOUNCE_MS消息持续累积窗口结束后合并成一批再交给 agent就像你在和一个人完整说完一句话。任务运行中排队到下一轮如果 agent 正在跑任务你又发来一条新消息它不会打断当前任务而是进入阻塞态队列消息照常累积但block(scope)会暂停去抖计时器当前 run 结束后unblock(scope)重新开启一个静默窗口再把攒下的消息合并处理。命令不走队列/new、/cd、/ws use、/stop这类命令会绕过队列直接响应——它们很轻量必须即时生效而且可以中断当前任务由 src/bot/active-runs.ts 的reserve / interrupt保证每个作用域同一时刻只有一个 run重复启动会被拒绝/stop则直接停止当前 run。3. 工作区切换/cd与/ws让每个聊天有自己的目录 bridge 的工作目录是按作用域绑定的而不是全局唯一/cd path— 切换当前聊天的工作目录并重置会话切项目后上下文从 0 开始避免拿旧项目的记忆回答新问题/ws save name— 把当前目录保存为命名工作空间/ws use name— 一键切回已保存的项目目录/ws list//ws remove name— 查看 / 删除命名工作空间。这些绑定持久化在~/.lark-channel/profiles/profile/workspaces.json由 WorkspaceStore 读写重启 bridge 后每个聊天住在哪个项目目录的记忆依然保留。真正启动任务时startRunFlow 会按作用域专属 cwd → profile 默认目录的优先级解析工作目录并做合法性校验拒绝/、Home 根、系统目录这类范围过大的位置再进入 会话目录索引 查找可恢复的历史会话。4. 历史会话怎么找回来/resumeSessionCatalog 为每个作用域维护agent 工作目录 权限指纹维度的会话索引。当你用/cd切走又切回来或误发/new清空了会话时发一条/resume就能恢复同 agent、同工作目录、权限模式兼容的历史会话——这也是切换工作区而不丢上下文的体验闭环。5. 一张图看懂消息的生命周期 消息进入 → 权限校验 → 计算作用域 scope ├─ 是命令 → 直接执行可 /stop 中断当前任务 └─ 普通消息 → 进入 PendingQueue ├─ 无任务在跑 → 600ms 静默窗口后合并成一批 → 启动 run └─ 任务在跑 → 阻塞累积任务结束后合并处理 run 中会话历史 / 工作目录 / 流式卡片都绑定在本 scope 上配合/status查看当前 profile、agent、工作目录与会话状态基本可以覆盖新手 90% 的排障场景。6. 上手三步走 npm i -g lark-channel-bridge # 全局安装 lark-channel-bridge run # 首次启动按向导扫码绑定应用 # 确认收发消息正常后转后台常驻 lark-channel-bridge start首次运行没有项目目录也能启动bridge 会创建默认工作目录之后在飞书里发/cd 你的项目路径就能切到实际代码库。更多命令速查和配置说明见 README.zh.md。遇到问题或想参与讨论项目内置了飞书反馈群入口见 assets/feedback-group-qr.png 小结会话隔离保证不同聊天/话题互不干扰消息队列把连发的碎片合并成完整指令工作区切换让每个项目都有独立目录与记忆——三者叠加才是连发多条消息也不串线的真正原因。【免费下载链接】lark-coding-agent-bridgeBot that bridges Feishu/Lark messenger with a local Claude Code or Codex CLI. Streaming cards, per-chat sessions, multiple workspaces项目地址: https://gitcode.com/gh_mirrors/fe/lark-coding-agent-bridge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考