Repository navigation
[Proposal] 侧边栏 Browser 的存储分区应可持久化:第三方站点登录态每次 App 重启后丢失 #11249
LyraWang6688
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
TL;DR
右侧栏 Browser tab(Desktop /
<webview>)的存储分区是进程内、每次启动随机的,因此任何需要登录的第三方页面(飞书文档、Notion、Linear…)在 DSH 重启后都必须重新登录。这让「在 DSH 里边看文档边干活」这个主要用法基本失效。希望改成分区名可由 workspace 稳定派生、并加
persist:前缀(或提供 opt-in 配置),保留按工作区隔离的语义不变。环境
@deepseek-ai/dsh-desktop0.2.1-rc.3,Electron 44.7.0,Node 24.21.0复现
https://<tenant>.feishu.cn/docx/...),完成登录;实际:落在登录页,需要重新扫码/登录。
期望:仍在登录态(同一工作区)。
补充两个同进程内的观察(用户反馈,我这里只做到代码级定位,未在打包版内实测):
根因
Desktop 主进程在
will-attach-webview之前为 guest 分配分区(编译产物lib/main.js,regionlib/types/browser-guests.js,DesktopBrowserGuests.acquire(),shipped main.js 第 10501 行附近):两个问题叠加:
persist:前缀 → Electron 给的是 in-memory session,cookie / Web storage / cache 都不落盘。randomUUID(),而partitions只是主进程内的Map→ 每次 App 启动都产生全新的分区身份,等于一台新浏览器。而 client 侧其实已经算出了一个稳定的存储身份(
ui-sidebar-browser/lib/client.js):这个 key 在同工作区内是稳定的,但被上面那个随机 UUID 抵消掉了。
包的 README 已把这点列为 known limitation:「Desktop 按规范化的工作区 CWD 共享进程内存储分区……Cookie 与 Web storage 不跨应用重启保留。」
为什么用户无法自行绕过
dsh-client-ui-sidebar-browser的 Config 为 absent),没有任何开关能改成分区持久化;ui-chat.linkOpening只决定「点链接用侧边栏还是系统浏览器」,与登录态无关;app.asar不行:Contents/Info.plist里有ElectronAsarIntegrity,改文件会被完整性校验拦下,同时破坏签名、并被自动更新覆盖。所以这只能作为产品层取舍在上游改。
提案(最小改动)
要点:
隔离语义不变:仍然是一个工作区一份分区,工作区之间互不可见;只是这份分区从内存搬到磁盘。
提交/释放 guest 的语义不变:
release()现在只销毁 guest、明确保留 workspace storage,正好与持久化一致。建议复用已有的
cleanStorage(browserSession)(平台登录 webview 里已经在用)作为「清除该工作区浏览数据」的入口,给介意 cookie 落盘的用户一个出口。如果担心默认行为变化,可以做成 opt-in:
用户显式开启后上面的
persist:才生效。个人更希望默认就是workspace——因为「在侧边栏持续使用某个站点」是这个 tab 的核心价值,而每次重启重新登录几乎让这个价值归零。需要一并考虑的边界
…/Application Support/@deepseek-ai/dsh-desktop/Cookies),UI 上最好有一句说明;验收标准
linkOpening=sidebar的链接点击路径不受影响。相关
DesktopHostFatalError: cannot create effect on inactive context(installDesktopUpdateTaskControl),崩溃会额外放大「登录态丢失」的体感。如需要我可以另开一贴附日志。All reactions