Skip to content

fix(cot): 等待起始卡片发布并丢弃停止轮次的迟到思考 - #1604

Draft
ChenziSC wants to merge 1 commit into
deepcoldy:masterfrom
ChenziSC:codex/upstream-publication-order-20260929
Draft

ChenziSC wants to merge 1 commit into
deepcoldy:masterfrom
ChenziSC:codex/upstream-publication-order-20260929

Conversation

@ChenziSC

@ChenziSC ChenziSC commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

启动工作卡发送较慢时,原生思考消息可能先出现在话题中;等待期间停止轮次,旧思考也可能在慢卡片返回后补发。本改动等待同一会话中所有起始卡片发送结束,再核对当前轮次和停止状态。

  • 分别跟踪回复卡和状态卡发送,单个 Promise 提前失败不会越过另一个仍在发送的卡片。
  • 只协调展示顺序;Worker 执行和轮次终态不等待此屏障。15 秒未完成时放弃尚未发布的思考消息。
  • 新轮次替代旧轮次或停止期间,不补发尚未显示的旧思考;已显示消息沿用现有终态处理。
  • 共用 worker-pool 仅登记发送 Promise,展示等待位于飞书原生 CoT 路径。无起始卡片时直接沿用原处理;不引入业务阶段、角色、平台枚举或数据迁移。

时序示意

sequenceDiagram
  participant W as Worker
  participant C as 起始卡片发送
  participant T as 原生思考消息
  W->>C: 启动回复卡和状态卡发送
  W->>T: 思考更新(缓冲)
  Note over W: 继续执行,不等待展示
  C-->>T: 所有卡片发送结束
  alt 当前轮次仍有效
    T->>T: 创建消息并发送缓冲内容
  else 已停止、被替代或等待超时
    T->>T: 放弃尚未显示的旧消息
  end
Loading

验证

  • bun run build 通过。
  • Node:cot-message、recall-frozen-cards、trigger-streaming-card、close-stream-card-untouched 共 157 项通过。
  • Bun:沿用官方 runner 的隔离环境与兼容性筛选,cot-message 通过;recall-frozen-cards 因已有 vi.hoisted 由 Node 覆盖。
  • 新增 8 个场景:延迟、失败、被新轮取代、后继卡片、部分失败、停止、输入轮次提前变化、超时。发送边界使用替身,无真实模型或飞书网络调用。
  • 未部署、未重启、未在真实飞书客户端测试;上图为时序示意,PR 保持 Draft。

CI 说明

官方 CI 首次运行的工作流结论为 success:8 个任务通过,bun-test 失败。基线 3830d824 的 .github/workflows/ci.yml:158 已为该任务配置 continue-on-error: true,因此它当前是非阻断检查;不能将整体通过表述为 9 项全部通过。

Bun 全量的 1269 个可运行文件中 1268 个通过;唯一失败为原有 test/dashboard-ipc-probe.test.ts:25。日志显示请求端口 39611 和下一端口 39612 都被占用,服务正确返回 39613,但测试固定断言 39612。该测试及 src/core/dashboard-ipc-server.ts 与基线 3830d824 的文件 SHA-256 一致,未在本 PR 中修改。

未跳过测试或放宽断言,首次失败记录保留。当前集成的 Actions 重跑请求返回 403;若需重跑该非阻断任务,需有仓库 Actions 写权限的维护者操作。此项重跑不作为本批交付阻塞项,PR 仍待评审和真实客户端验证。

This branch has not been deployed

No deployments
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