Skip to content

fix(lark): 修复输出切换后当前卡片不刷新 - #1800

Merged
deepcoldy merged 1 commit into
deepcoldy:masterfrom
Wait845:fix/lark-display-toggle-pr
Oct 11, 2026
Merged

deepcoldy merged 1 commit into
deepcoldy:masterfrom
Wait845:fix/lark-display-toggle-pr

Conversation

@Wait845

@Wait845 Wait845 commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

点击「显示输出」时,如果 worker 尚未就绪、已休眠或当前卡片引用暂时缺失,原逻辑可能只保存显示状态,眼前的卡片不变,直到下一轮才生效。本次让被点击的卡片立即展开/收起;有可用缓存时直接显示,没有截图且无法采集时给出明确提示。

  • 当前卡片保留串行 PATCH,历史卡片仅走回调更新,避免连续点击被迟到更新覆盖。
  • 截图绑定采集身份、显示代际和准确的卡片目标;拒绝旧轮次、旧 worker 和受抑制来源的截图,覆盖重发、失败回退及临时丢失卡片引用的场景。
  • 适配最新主分支的排队输入、实际轮次激活和 PID marker 恢复;入队或重复 ACK 不会切换截图身份。

影响飞书公共卡片逻辑和各 CLI 共用的 worker 截图/IPC 链路。回归覆盖 Claude Code、Codex、HTTP/raw 输入、排队输入、活动/空闲/恢复及历史卡片;不修改依赖、配置或版本号。

验证

  • 定向及输入生命周期回归:1323 项通过,15 个文件。
  • 补充卡片、来源权限和 worker 转移回归:195 项通过,11 个文件。
  • Bun 1.4.2 bun run build 通过;git diff --check 通过。
  • 相同修复已在运行环境部署,用户在真实飞书界面测试并确认显示/隐藏输出切换正常。当前 PR 另适配了最新主分支的排队激活路径,已补充并运行对应回归;本地验证环境为 macOS,跨平台验证交由 CI。
定向回归命令
node node_modules/vitest/vitest.mjs run --project unit \
  test/card-integration.test.ts test/recall-frozen-cards.test.ts \
  test/card-builder.test.ts test/worker-ready-display-mode.test.ts \
  test/event-dispatcher.test.ts test/api-only-card-patch-suppression.test.ts \
  test/trigger-streaming-card.test.ts test/worker-screenshot-upload-hardening.test.ts \
  test/raw-input-followup-atomicity.test.ts test/worker-durable-expiry-order.test.ts \
  test/worker-turn-idle.test.ts test/worker-app-runner-control-wiring.test.ts \
  test/bridge-turn-queue.test.ts test/write-input.test.ts test/submit-confirmation.test.ts

交互示意

下图说明修复前后的状态变化,并非飞书实机截图,不含真实会话内容。

输出显示切换状态示意

分离卡片显示切换与 worker 采图就绪状态,串行更新当前卡片并独立响应历史卡片。
以采集身份和显示目标校验截图来源,覆盖迟到截图、排队激活、重发回退和受抑制来源。
补充卡片交互与输入生命周期回归,以及状态示意图。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-10-10T19:42:14.080536Z 6f3d926 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@deepcoldy
deepcoldy merged commit d096d14 into deepcoldy:master Oct 11, 2026
11 checks passed
@github-actions

Copy link
Copy Markdown

🚀 Released in v3.42.0

deepcoldy added a commit to lymenglei/botmux that referenced this pull request Oct 18, 2026
合成树暴露的 P1(仅在与最新 master 真实 merge 后出现):master 之后合入的
capture-identity 硬化(deepcoldy#1800)新增 worker-screenshot-upload-hardening.test.ts,
它用 ts.transpileModule(module:None) 把生产 captureAndUpload 的函数体切出来塞进
`new Function('deps', …)`,并靠 `captureToPng` 作为**自由变量**注入 mock。而本 PR
把 `const { captureToPng } = await import('./utils/screenshot-renderer.js')` 写在了
captureAndUpload 函数体内:

1. 块级 const 遮蔽了 deps 注入的 captureToPng mock;
2. 多一跳 await import 微任务,测试只 flush 两个 tick 到不了渲染;
3. module:None 下 tsc 原样保留 import(...),在 new Function 里按测试文件相对路径
   解析,拿不到注入。

于是注入的 deferred render 永不被调用,用例 "during the fallback render await…"
稳定失败(renders 期望 1 实得 0)。

修法:把懒加载提到模块作用域,做成同名的可注入包装函数 captureToPng——
首次调用内部 `await import()`(模块缓存,重复调用廉价),fallback 路径照常
`await captureToPng(term, …)`。这样:
- worker 初始化仍完全不碰 @napi-rs/canvas 原生库(PR 核心收益不变,dist/worker.js
  里对 screenshot-renderer 只剩一处函数内动态 import,顶部无静态 import);
- 测试 harness 注入的仍是同一个自由标识符 captureToPng,DI 缝恢复,无需改任何
  测试文件(也避免与 master 上的测试版本产生语义漂移)。

关于“每个 await 边界都复查”:从 captureAndUpload 的角度,懒加载折进了这一次
render await,其后的 `if (frameIsStale()) cancelStale('render')` 仍覆盖该边界,
故不再单独加 import 后的 checkpoint——import 本身不渲染,最坏只是多渲染一次,
不会让旧帧上传。transient-snapshot.ts 的懒 import 在独立函数内、不被切片注入,
保持不变。
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