Repository navigation
Session 创建被静默吞掉:宿主已建会话但 UI 无任何反馈(ui-workspace 0.2.1-rc.2) #10683
sherlockslf
started this conversation in
General
Replies: 1 comment
|
补两份独立数据,支持「宿主已建、UI 无反馈」的结论,并补上「为什么会越来越慢」这一段。 1) 同一毫秒多个会话,我这边也抓到了:2026-10-30 00:29:27–00:29:34(Windows Modern Standby 唤醒后 61 秒),7 秒内建了 5 个会话,其中 3 个 2) activation ladder 的成因:慢的不是磁盘(219 个会话头 328 ms、projcache 4.6 MB / 52–58 ms、58,855 文件目录 1.16 s),而是进程内累积:
这正好解释你们那两段阶梯(+0.055 s → +64.4 s 与 +32 s → +233 s):已打开会话越多,每一步越慢。配合 完整分析与用户侧缓解写在 #11479,欢迎补充/反驳。 |
0 replies
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.
Summary
DSH 桌面版 0.2.1-rc.2:点「+」新建对话后界面毫无反应(没有新行、没有报错提示),但宿主其实已经把会话建出来了 —— 磁盘上多出一个只有 boot 事件的空白壳(约 515 B、零
turn/start),要重启 DSH 才看得到;反复点击会累积几十个孤儿会话。English: In DSH Desktop 0.2.1-rc.2 (ui-workspace 0.2.1-rc.2) a new conversation can be created successfully on the Host while the UI shows nothing at all (no row, no error), and the session only becomes visible after restarting DSH. Repeated clicks accumulate dozens of orphaned blank sessions.
Environment
@deepseek-ai/dsh-desktop/@deepseek-ai/dsh-desktop-runtime0.2.1-rc.2,Windows 11,内置 Node 24.x@deepseek-ai/dsh-client-ui-workspace0.2.1-rc.2、@deepseek-ai/dsh-api-session-controller0.2.1-rc.2<DSH_HOME>/data/sessions/<cwd-bucket>/<session-dir>/session.v4.jsonl.zstd;工作区登记:<DSH_HOME>/data/storages/workspace.jsonnode_modules/@deepseek-ai/dsh-client-ui-workspace/lib/client.js(源码目录packages/client/ui-workspace)与node_modules/@deepseek-ai/dsh-api-session-controller/lib/client.js(源码目录packages/client/api-session-controller)。Reproduction
WorkspacePickFlow),或点「+」后立刻切换工作区 / 让插件再发起一次导航。<DSH_HOME>/data/sessions/...:出现一个或多个约 515 B、只有 boot 事件的会话;它们在 UI 里一直不可见,直到重启 DSH。Current behavior
workspace.json的sessionIds中,宿主也推送了api-session/added),即session.create返回成功。cwd = D:\项目开发\dyson_sphere_program);另测得两批激活阶梯:+0.055s → +6.4 → +12.8 → +19.6 → +26.9 → +35.2 → +44.9 → +54.8 → +64.4s与+32s → +233s(约 7–10 s/个)。清理前累计 47 个孤儿壳。Expected behavior
console.warn。createInWorkspace一致),不应每次点击都新铸一个。分析:同一创建链路上的 4 处问题
① 创建成功后若导航已被 abort,会话被静默丢弃 ——
openWorkspaceSessionL1476-1490:const navigation = AbortSignal.any([this.ctx.layout.beginNavigation(), this.lifetime.signal]);let sessionId;→try { sessionId = await this.connectBlank(workspaceId, reuse); } catch { ... }if (navigation.aborted) return; // L1488:宿主此时已经建好会话this.replaceMain(sessionId, navigation, "reveal", beforeOpen);beginNavigation()会 abort 上一次导航,因此 create 在途时任何第二次导航(再点一次「+」、切工作区、插件调用openSession/startSession)都会让刚建好的会话彻底不可达:不选中、不提示、也进不了客户端列表。会话在宿主侧存在,所以只有重启才看得见 —— 与「点一下没反应、重启后却多出一堆空对话」完全吻合。② 创建失败对用户完全不可见 ——
startSessionL1519-1527 结尾:.catch((reason) => { console.warn("new session failed:", reason); });三个入口全是用户动作:L3233-3238
ProjectRowItem.onCreate(侧栏「+」)、L3936-3939WorkspacePickFlow.onPick、L5181-5184browserInjected().startSession(对所有客户端插件开放)。③ 侧栏「+」永不复用空白会话 ——
connectBlankL1403-1417:if (reuse === void 0) return this.sessions.create({ workspaceId }); // L1406「+」走
startSession(group.workspaceId)不带reuse,所以每次点击都新铸会话(对比 L1409createInWorkspace会复用已有空白)。与 ①②叠加,几次点击就能攒出几十个壳。④ 活动连接期间没有任何全量列表刷新 ——
api-session-controller/lib/client.js:refreshList()L3246,全 bundle 只有 2 个调用点 ——handleConnected()L3574(连接代际变化)与对外方法 L3906-3908refresh();没有任何 UI 调用者。列表因此完全依赖api-session/added推送 + 本地乐观 mutation,一旦这条链漏掉,就只能靠重连/重启。相关可见性规则:L958-996sessionVisible只显示「当前」的空白会话(L966if (session.blank && session.id !== current) return false;),所以孤儿空白壳天然不可见。建议修法
sessionId,被等价导航取代时应选中它,或至少给出可见提示 / 占位行,而不是return。startSession的失败要报到 UI(notify({kind:"createFailed"})已存在,但只有openWorkspaceSession会在 abort 之外走到它)。createInWorkspace/reuse语义),重复点击复用空白会话而不是每次新铸。session.create往返结束(或 attach 完成)后与列表做一次对账/刷新,而不是只依赖代际刷新的推送事件。Impact
会话在磁盘上静默泄漏、界面与宿主状态不一致,用户唯一能做的就是重启;而重启又把那一堆孤儿空白会话重新暴露出来。
All reactions