chore(release): 晋升 v2.10.1——沙箱断联自愈、worker 拆分、审批卡重设计、OAuth loading - #511
Merged
Conversation
平台分区卡不等 versionApi 就渲染(空 links 也画 Windows/macOS 标签), 而 curl 一键安装 / xattr Gatekeeper 块要资产到齐才挂载。原测试把等待 锚在静态平台名上、再同步 getByText 数据驱动内容,数据晚到时撞进空窗 (CI 偶发失败,本地难复现)。延迟 mock 80ms 可确定性复现(RED), 锚点换成资产文件名 / 命令本身后同条件下 7/7 通过(GREEN)。
- ApprovalPanel 用 replace(/\s+/g," ") 压平了后端多行 message,导致沙箱 确认门的编号操作清单挤成一行;新增 parseAskHumanMessage 纯函数把消息 解析为标题行/编号操作/补充散文三段 - 新增 ApprovalOpList 单据式只读清单:编号 + 动词胶囊 + 等宽命令, 发丝虚线分行、overflow-wrap:anywhere;ApprovalPanel 头部只放标题行, 清单进可滚动明细区;AskHumanItem pill 标签/内联预览/详情面板复用同渲染 - ScheduledTaskApprovalContent 从朴素 table+emoji 重设计为 spec-sheet 参数单 + 等宽芯片 + 代码块提示区 - 窄屏(≤640px)操作行两段式堆叠,命令独占整行;参数单标签列放宽 - 测试:9 个解析器用例 + 结构断言,全量 2602 前端用例通过
生产断联(2026-09-09 lambchat.com)根因链:滚动发布与代理层瞬时抖动掐断 daemon 通道连接本身不可避免,但一次断联就丢整窗调用、且恢复要分钟级—— 本次把断联从「事故」降级为「秒级自愈」: - dispatch:tool_call 帧被断联通道的 BLPOP 消费即丢失(生产实测窗口内 exec 全灭 SANDBOX_TIMEOUT)。ACK 死线内周期幂等重推同一 call_id(ts 刷新避开陈旧丢弃门),daemon 重连后调用照常执行;结束时 LREM 清掉队列 残留,不留幽灵执行。 - daemon:call_id 跨连接去重(FIFO 环 512),重复帧记 duplicate_skipped 审计后跳过——at-least-once 下发 × 幂等执行,绝不重复跑用户机器上的命令。 - transport:hello 阶段独立 12s 超时。健康服务端建连即发 hello,迟迟不到 说明帧被僵死连接吞掉——不再挂满 45s 读超时,掉线窗口从分钟级压到秒级。 - daemon:断联日志带异常类型。httpx 超时族 str() 为空串,此前只有 『通道断开: 』盲日志。 - channel_frames:心跳先发射、后写注册表。注册表三连写走共享池,重任务 占满池时心跳跟着停发(本次生产实锤);keepalive 现在只依赖事件循环。 属主校验后移一拍,被踢旧流至多多带一个心跳帧。 验证:后端全量 4380 passed;本地沙箱链路 E2E 35/35 PASS; ruff/mypy 全绿。
loginWithOAuth 只设置 window.location.href,导航真正发生前页面仍可交互, 按钮没有任何反馈且可连点。现在点击即记录 pending 提供商:被点按钮的 品牌图标位换成旋转 spinner,全部 OAuth 按钮同时禁用(disabled + opacity + cursor 反馈),失败才复位,成功路径由页面跳走自然结束。
接续断联复盘的结构性修复:ARQ_EMBEDDED_WORKER=true 时 agent 任务与 API 共享事件循环,重任务的同步段会饿死 API(SSE/沙箱通道心跳停发,2026-09-09 生产实锤),且 API 滚动发布会杀掉运行中的任务。拆分后 API 只服务 HTTP/SSE,任务全部由独立 worker 进程消费(Redis 队列协同,天然分布式)。 - worker_main:独立进程入口。启动面锁定任务执行的最小服务集——分布式 取消监听(取消信号必须到达执行方)、缓存一致性 pubsub(settings/模型/ 工具/MCP/定价/记忆热更新传播)、事件循环滞后监控、worker_startup(分布 式配置校验 + loop_bridge 登记);不启动 API 职责的周期任务(双跑重复执 行)。SIGTERM 优雅退出:先收尾在途任务,再停监听。 - arq_runtime:start(force=True) 绕过 ARQ_EMBEDDED_WORKER(该开关只约束 API 进程的内嵌行为)。 - k8s:新增 lambchat-worker Deployment(同镜像跑 worker_main、label 与 Service selector 严格区分防流量黑洞)、API 改 ARQ_EMBEDDED_WORKER=false; 清单契约测试同步翻转(含 selector 不相交断言)。 - compose:单机部署同构拆分——lambchat-worker 服务与 API 共享数据卷, API 关内嵌;deploy.sh 全量 up 自动生效。 验证:真实架构端到端——无内嵌后端 + 独立 worker 进程提交真实对话, 任务在 worker 进程执行(arq.worker → run_agent_task)、API 进程零任务执行、 SSE 正常收流到 done;worker SIGTERM 干净退出。后端全量 4381 passed, ruff/mypy 全绿,compose config 校验通过。 上线顺序(运维):先 kubectl apply worker Deployment 与内嵌并存验证消费, 再应用 API 的 ARQ_EMBEDDED_WORKER=false(yang 上两步可同日完成)。
chore(release): bump 版本 2.10.0 → 2.10.1
…509) worker 拆分部署(k8s/compose 设 env=false + 独立 worker Deployment)实测失效: settings 加载顺序是 DB > env,system_settings 里的历史种子值(system:init 写入 true)覆盖 env,API 内嵌 worker 照常启动、与独立 worker 双消费同一队列。 归入 RESTART_REQUIRED_SETTINGS(连接类白名单)——该开关是部署拓扑决策, 本就该由 env/compose 唯一决定;运行时面板修改语义不变。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
晋升 v2.10.1 到生产。develop 自 v2.10.0 以来的全部变更:
验证记录
lambchat-staging-worker独立 Deployment 消费全部任务(API pod 零执行记录,真实对话轮 completed)lambchat-workerDeployment 验证 Running,再翻 APIARQ_EMBEDDED_WORKER=false,update.sh滚动,run-all.sh回归备注