Repository navigation
dsh-coding-sidebar 1.0.28
dsh-coding-sidebar 1.0.28
修复 dsh 0.1.6-alpha.2 升级后「任务管理」打开子代理页面静默失效(上游删除了
sessions.openSubagent/sessions.open)。
变更
会话导航接缝迁移(修复 0.1.6-alpha.2 失效)
- 根因:上游 0.1.6-alpha.2 的 session-controller 重构
(deepseek-harness6830e1460d,Client Session generations 显式持有)
把openSubagent(address)与open(id)从客户端 sessions 契约删除,
替代入口是ctx.get('uiWorkspace').openSession(target)(alpha.2 起同收
sessionId 与直父子代理地址)。本插件原先用可选链调用已删除的方法
——静默 no-op:点任务管理的子代理卡片无反应、跳回主代理无反应、
sidechat「保存为新会话」后不跳转,且不报任何错。 - 新接缝
src/client/workspace-nav.ts:唯一的导航探针
openViaUiWorkspace(ctx, target, legacy?)——三级解析:① 等待式注入捕获的
uiWorkspace 面(官方姿势)② 本地ctx.get探针 ③ 0.1.5 sessions 面
(peer 范围仍含 0.1.5-rc.2);返回'opened' | 'unavailable' | 'failed'
三态,探针/调用双层防御,绝不向 React 回调抛错。风格对齐
trajectory-source 的纯函数接缝(零依赖、node 直测)。 - 关键教训(cordis 服务作用域隔离):首版用
ctx.get('uiWorkspace')
在 dev 实测仍静默失效——cordis 的get只读调用方 fiber 的本地 store,
跨插件 fiber 的服务拿不到(不报错、返回 undefined);属性代理能沿父链
解析但要求 inject 声明(否则抛 "cannot get property without inject")。
正解是官方的等待式注入ctx.inject(['uiWorkspace'], (scope) => …)
(ui-agent-preset / ui-subagent 同款):apply 里启动子 fiber 捕获服务面,
子 fiber 随插件 fiber 自动销毁,HMR 重载重新捕获。导航接缝同时在
non-opened时打console.warn,不再静默。 - 最终根因(实测抓证):openViaUiWorkspace 把
openSession从服务对象上
摘下来裸调——宿主服务方法读this(this.replaceMain/this.lifetime),
裸调 TypeError 被防御性 catch 吞成'failed',表现为"无告警、不导航"。
修复:一律以方法调用形态触发(face.openSession(target),this绑定
服务对象),与 SideChatView 对fork的既有约束一致。已在受控 dev 实例
上自动化端到端验证:点任务管理子代理卡片 → 主会话切到子会话 + 页面保持
打开 + 节点高亮。 - 受影响调用点全部迁移:
- 任务管理
openChild(点子代理卡片打开子会话页)与openMain
(跳回拓扑主代理)——保留「页面保持打开 + 节点高亮」契约与失败告警; - sidechat「保存为新会话」后的跳转;
- 团队 tab 的成员打开(原内联探针统一收口到同一助手,消除重复)。
- 任务管理
- 类型镜像:
context-types.ts新增SidebarUiWorkspaceService
(mirrorUiWorkspace.openSession)与 shape 条目;给两个已删除方法
的注释标注上游事实,仅作 0.1.5 回退保留。 - 回归测试:
tests/workspace-nav.mjs夹具 + 24 条断言(捕获面在
get盲区仍接管——首版事故形态回归、uiWorkspace 优先不双触、0.1.5 按
target 形状分派回退、双面缺席 unavailable、get 抛错降级、畸形 face 跳过、
opener 抛错 failed)。
兼容性说明
- 0.1.6-alpha.1 / alpha.2:走
uiWorkspace.openSession(推荐宿主版本); - 0.1.5-rc.2:uiWorkspace 缺席时自动回退旧 sessions 面,行为不变;
- 页面其余能力(拓扑树/目录懒加载/实时预览/任务列表)不受此次上游变更
影响,未改语义。
验证
typecheck 0、tests ALL PASS(run-openpath-tests 全量,较 1.0.27 净增
17 例)、build(tsc -p tsconfig.build.json + tsdown)通过;安装脚本
(rm+cp 白名单镜像)落到 KCoder dev 环境(~/.kcoder-dev),待实机验收。