Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

[Bug]: Switching device surface can leave a completed turn stuck in "receiving parameters"

未关闭
#3,056 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
52/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
领域
desktop, frontend

调研方向

首先,跟踪 local/peer surface switch 附近的 Agentic event listener 注册过程,以及 settled-turn snapshot reconciliation path。将 in-memory tool-card projection 与报告中描述的 persisted turn state 进行比较。当 authoritative turn 和 tool calls 完成后,切回或接收到 settled snapshot 能清除任何 streaming/preparing tool card,即表示完成;使用 reproduction sequence 进行验证。

由索引模型根据 Issue 内容生成。

描述

Summary

Switching the active device surface while a turn is running can leave the original desktop UI with contradictory state after the host finishes:

  • the session/sidebar indicates that the turn completed;
  • the persisted turn and backend state are terminal (completed / Idle);
  • an earlier Edit tool card remains stuck at receiving parameters;
  • there is no effective Stop action because the backend has already removed the cancellation token.

This appears to be a device-surface event projection/reconciliation issue rather than a runtime deadlock. The settled persisted turn does not fully replace the stale in-memory tool-card projection after returning to the local surface.

Expected: After switching back, or after receiving a settled-turn snapshot, the UI should reconcile every tool item to the host's authoritative persisted state. A completed turn should not retain a streaming/preparing card.

Actual: The sidebar and session metadata show completion while one tool card continues to look active indefinitely. Restarting the desktop app restores a consistent view.

Area

Desktop app / Web UI (peer device surface switching and settled-turn reconciliation)

Reproduction or evidence

A likely reproduction sequence is:

  1. Start a long-running local turn containing several tool calls, including an Edit tool.
  2. While an Edit card is still receiving/streaming its arguments, manually switch control to a peer device surface.
  3. Allow the original host to finish the turn.
  4. Switch control back to the local device and reopen the session.
  5. Observe that the session is marked complete but the earlier Edit card still says receiving parameters, with no meaningful way to stop it.

Evidence from one occurrence (timestamps are local):

  • 09:32:40: the local window became visible and the same turn was attached/projected.
  • 09:32:45: the Agentic event listener was stopped and then registered again.
  • 09:32:46: Device surface switched from local (null) to a peer device (reason: manual).
  • 09:34:18: the host received the final response, completed the turn loop with reason=complete, emitted DialogTurnCompleted, cleaned the cancellation token, and transitioned the backend session to Idle.
  • 10:43:53: the surface switched back from the peer device to local.
  • Subsequent snapshot reconciliation reported backend state Idle and the correct latest turn ID, but the old Edit card remained visually stuck in receiving parameters.

Persisted data for the affected turn confirms:

  • turn status: completed;
  • finish reason: complete;
  • hasFinalResponse: true;
  • all 19 model rounds are completed;
  • all 21 tool calls are completed;
  • the exact Edit tool shown as streaming in the UI has a persisted successful result.

A process sample taken while the UI was stuck showed the normal AppKit/CoreFoundation event loop and no mutex/thread deadlock. There were no child tool processes still running.

There were also repeated get_operation_diff: Session not found / get_operation_summary: Operation not found warnings for file-operation cards that modified a file outside the active workspace. These may make the stale card more visible, but the host turn itself completed successfully and they may be a separate degradation issue.

Environment, if relevant
  • OpenBitFun: 1.0.0
  • Build commit: a0d6a6fe53e0d86fa81d61390cf6f661e8a55307
  • Build date: 2026-09-15T09:04:07.335Z
  • OS: macOS 27.0 (26A428)
  • App mode: native desktop app, local workspace with peer device surface switching
  • Model shown in the affected session: GLM 5.3 (the issue appears independent of provider/model)
主要语言
Rust
星标
2.3k
派生
236
平均合并
3 小时 47 分钟
30 天内合并 PR
308

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

GCWing/OpenBitFun 的其他 Issue

查看 GCWing/OpenBitFun 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。