Skip to content

fix(desktop): 跳过登录时停止 Device Link 缓存令牌补读 - #3325

Merged
MagicLizi merged 1 commit into
mainfrom
cindy/earnest-hertz
Aug 25, 2026
Merged

fix(desktop): 跳过登录时停止 Device Link 缓存令牌补读#3325
MagicLizi merged 1 commit into
mainfrom
cindy/earnest-hertz

Conversation

@DavidShenXD

Copy link
Copy Markdown
Collaborator

这次改了什么

摘要

跳过 Cindy 登录进入本地模式时,Renderer 仍会因为本地数据 owner 存在而启动 Device Link 镜像缓存令牌补读;Main 会按权限边界拒绝这些请求,形成持续的 PERMISSION_DENIED 日志。

本 PR 将补读循环同时受 Cindy 登录态和数据 owner 约束。本地模式不再启动该循环,登录或切换 Cindy 账号后仍会按账号边界重新启动。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:用户反馈跳过登录后持续输出 Device Link 权限错误日志。
  • 本 PR 包含:镜像缓存 owner 令牌补读的登录态门禁;本地模式回归测试。
  • 明确不包含:Main 授权边界、Device Link wire protocol、Mobile 入口或 UI。
  • 用户可见变化:跳过登录后不再持续输出该缓存读取权限错误;界面无变化。
  • 是否存在 breaking change:无。

UI 变化

  • 引用的设计规范:不涉及。仅调整后台 effect 的启停条件并补测试,无视觉、交互或文案变化。

怎么验证的

自动验证

pnpm --filter desktop exec vitest run src/renderer/__tests__/deviceLinkRemoteProjectsAuth.test.tsx src/renderer/__tests__/deviceLinkRemoteProjects.test.ts
结果:通过,2 个测试文件、13 个测试。

pnpm test:unit:related
结果:通过,Desktop 相关单测门禁通过。

pnpm --filter desktop typecheck
结果:通过。

pnpm --filter desktop exec eslint src/renderer/__tests__/deviceLinkRemoteProjectsAuth.test.tsx
结果:通过。

pnpm check:dco
结果:通过,1 个提交已签署 DCO。

pnpm test:unit
结果:未全部通过;28,676 个通过、71 个跳过、2 个失败。失败均位于本 PR 未修改且与 origin/main 一致的 src/main/plugin-publisher/__tests__/orchestrator.test.ts,表现为确认失败状态的 waitFor 超时;本 PR 新增测试在全量运行中通过,其余 workspace 均通过。

pnpm --filter desktop exec vitest run src/main/plugin-publisher/__tests__/orchestrator.test.ts -t "releases pending-confirmation capacity after a confirmation is rejected"
结果:单独复跑通过。

pnpm --filter desktop exec vitest run src/main/plugin-publisher/__tests__/orchestrator.test.ts -t "releases pending-confirmation capacity after a confirmation is failed"
结果:单独复跑仍失败,确认是 origin/main 已有基线失败,非本 PR 引入。

补充:对两个改动文件执行 ESLint 时,源文件命中 origin/main 已存在的未使用导入 requestRemoteSessionStatus;未在本 PR 中扩大范围处理。新增测试文件单独 ESLint 已通过。

手工验证

未执行 Desktop 实机复现:当前会话位于独立 worktree,运行中的宿主不会加载该 worktree 改动。

未执行的验证

  • 未执行 Desktop 实机 Light / Dark 目检:本 PR 不涉及 UI。
  • 未执行 Mobile 本地验证:本 PR 不修改 Mobile 或共享运行时代码。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:Device Link Renderer 缓存补读的启停条件。

影响与回滚

  • 影响范围:Desktop Renderer 的远程会话镜像缓存令牌补读;仅 Cindy 云账号启用,本地模式保持停用。
  • 回滚 / 降级方式:回滚本 PR 提交即可恢复原行为。
  • 移动端冷更判断:不会触发。仅修改 Desktop Renderer 与 Desktop 测试,未修改 Mobile 原生配置、原生依赖、config plugin、原生模块或 runtime fingerprint 输入。
  • 多端适配:SSH 远程工作区不涉及;没有新增或修改 IPC channel、push 或 wire protocol;Mobile 不需要入口或交互调整。
  • 故障半径:触发条件是本地模式 Renderer 发起单请求级、必然被拒绝的缓存补读;恢复动作仅是不启动当前 Renderer 的令牌补读循环,不拆 peer link、不重连 relay,也不重放共享流量;未触及多 peer 共享链路,因此多 peer 零影响用例不适用。
  • 跨平台:改动是平台无关的 React 登录态门禁,macOS 与 Windows 行为一致;Windows 已完成自动验证,macOS 未实机验证。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档(不涉及:无需新增文档,回归由自动测试约束)
  • 已确认测试结果或说明未执行原因

Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD
DavidShenXD requested a review from a team as a code owner August 24, 2026 05:50
@greptile-apps

greptile-apps Bot commented Aug 24, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 为 Desktop Renderer 的 Device Link 镜像缓存令牌补读增加 Cindy 登录态门禁,避免本地模式使用 local-v1 owner 时持续发起必然被拒绝的 IPC 请求。

  • 补读 effect 现在同时要求已登录且存在 data owner。
  • 将登录态加入 effect 依赖,使登录、登出及账号切换时重新评估补读生命周期。
  • 新增本地模式回归测试,验证一分钟定时推进期间不会读取 session list。

Confidence Score: 5/5

该 PR 看起来可以安全合并,未发现由本次改动引入的可操作缺陷。

新门禁仅收窄未登录本地模式下的补读执行范围;认证状态变化仍会触发 effect 重跑,而 cleanup 与 owner generation 校验会阻止旧账号的重试和在途结果越过账号边界。

Important Files Changed

Filename Overview
apps/desktop/src/renderer/features/device-link/useDeviceLinkRemoteProjects.ts 登录态门禁与依赖更新正确阻止本地模式补读,并保留账号边界变化后的启动、清理和重启行为。
apps/desktop/src/renderer/tests/deviceLinkRemoteProjectsAuth.test.tsx 新测试通过模拟本地 owner 和未登录状态,覆盖了跳过登录后不启动 session-list 补读的回归场景。

Reviews (1): Last reviewed commit: "fix(desktop): gate mirror cache refresh ..." | Re-trigger Greptile

@MagicLizi MagicLizi added the touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) label Aug 24, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

命中 UI 路径(useDeviceLinkRemoteProjects.ts)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面,便于确认界面符合 DESIGN.md 设计规范。本条不阻断合并。

@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 已核对 UI 证据提示。本 PR 虽命中 Renderer 路径,但只调整 useDeviceLinkRemoteProjects 中后台 effect 的账号门禁,不修改组件渲染、布局、样式、交互或文案。
  • 因改动前后界面完全一致,截图或录屏无法展示有效差异,因此不补充界面效果证据;PR 描述中的“UI 变化:不涉及”保持准确。

变更:

  • 无代码、文档或测试变更;保留现有最小修复范围。

验证:

  • 已检查 origin/main...HEAD 完整 diff,确认仅包含 Device Link 缓存补读启停条件和 local mode 回归测试,无用户可见 UI 变更。
  • 未重新运行自动测试:本轮未修改代码;原 PR 的相关测试、typecheck 与 DCO 结果已记录在描述中。

备注:

  • 该提示由 Renderer 路径规则触发,属于非阻断的路径级提醒;当前无未解决 review conversation。

@MagicLizi
MagicLizi merged commit cde34ff into main Aug 25, 2026
19 checks passed
@MagicLizi
MagicLizi deleted the cindy/earnest-hertz branch August 25, 2026 02:12
@MagicLizi

Copy link
Copy Markdown
Contributor

合了。跳过登录不再去补读 Device Link 会话缓存令牌,本地模式也不会再对着权限错误空转。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants