bug: 远程连接下侧栏频繁弹「Sessions from {device} couldn't be loaded」,两台设备互报、对端实际在线
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
**提交人**: Jack Zhou
**客户端版本**: 0.1.27
---
## 现象
两台桌面端(一台 Windows PC `DESKTOP-XDPC`、一台 macOS,同一账号互相远程连接)侧栏**隔几分钟就冒一次**红色报错横幅:
> ⚠ Sessions from DESKTOP-XDPC couldn't be loaded. Showing only content that loaded successfully.【Reload sessions】
关键特征:
1. **两台设备都报,且各自指向对方**(Mac 上报 PC,PC 上报 Mac)——对称出现,不是某台设备或某个平台特有的问题。
2. **报错时对端实际是健康的**:对端显示在线,已有的远程会话也能正常打开使用。所以 device-link 本身没断,失败的只是**侧栏拉对端会话列表**这条路。
3. **点「Reload sessions」要点好几次才能拉回来**,不稳定;而且拉回来后过几分钟又报。
4. **横幅不给任何失败原因**(无错码、无超时/拒绝/解析失败的区分),用户侧完全无法自查,也无法判断该等还是该重连。
代码供维护者定位:这条文案是 `ccAgent.sidebar.machineSwitcher.tasksPartiallyFailed`,由侧栏机器切换器的 `RemoteSidebarLoadNotice`(`apps/desktop/src/renderer/features/cc-agent/CCAgentSidebarUpper.tsx`,`kind='tasks'` + `status='error'` + `partial=true`)渲染。即“多设备会话聚合拉取里部分 peer 失败”分支。可能方向:聚合拉取的超时偏短或缺重试/退避,遇到 relay 抖动、对端瞬时忙、会话数量大时就直接计作失败;但未做代码定因,以上仅供排查起点。
## 复现步骤
1. 两台桌面端(Windows + macOS)登录同一账号,互相开启远程连接,对端保持在线。
2. 侧栏切到包含对端的机器视图(全部机器 / 选中对端),正常使用。
3. 放置并间隔使用几分钟。
4. 观察:侧栏隔几分钟弹出上述红色横幅;此时对端仍显示在线、已有会话仍可正常打开。
5. 点「Reload sessions」:往往需要点多次才能成功;成功后过几分钟反复出现。
6. 到另一台设备上重复以上步骤:同样报错,且点名的是对面那台。
## 期望行为
1. 对端在线、链路可用时,侧栏应能稳定拉到对端会话列表;偶发失败应自动重试(带退避)而不是立即把错误抄给用户。
2. 真的需要提示时,横幅应带上可操作的失败原因(超时 / 对端拒绝 / 协议错误等),以及该等还是该重试的建议。
3. 「Reload sessions」应该一次就能可靠地重拉,而不是靠用户多点几次碍到。
## 实际行为
侧栏频繁(隔几分钟)弹出红色失败横幅,两台设备对称互报;横幅只说「某设备的会话加载不了,只显示成功加载的内容」,不给原因;重试需多次才能成功;而同一时刻对端实际在线、已有会话可正常使用,造成「报错刷不完但东西其实能用」的长期噪声,也让真断连时的提示失去可信度。
## 关联 issue
- #799「被控设备恢复在线后远程会话仍持续加载」——同一条远程会话拉取链路上的另一种卡住表现,可一并看。
- #824「任务生命周期缺持久化权威源:device-link 镜像缺对账协议」——镜像/拉取可靠性的架构层 issue。
- #741「网关额度耗尽时展示原始错误」——反面参照:那边是错误暂过多,这边是错误信息过少、完全无法归因。
---
**版本区域**: CN
**OS**: darwin arm64 (25.5.0)
**界面语言**: en
Contributor guide
Research direction
Start in apps/desktop/src/renderer/features/cc-agent/CCAgentSidebarUpper.tsx, where RemoteSidebarLoadNotice renders the tasks/partial/error branch and the ccAgent.sidebar.machineSwitcher.tasksPartiallyFailed message. Reproduce with two online desktop clients, then trace the multi-device session aggregation and Reload sessions path, checking how failures are classified and retried. Done means intermittent partial failures are handled reliably and any necessary notice explains the failure and next action.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- desktop, frontend, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100