Skip to content

dsh-coding-sidebar 1.0.28

Choose a tag to compare

@kkutysllb kkutysllb released this 23 Sep 14:03
· 69 commits to main since this release

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-harness 6830e1460d,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
    (mirror UiWorkspace.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),待实机验收。