Skip to content

dsh-coding-sidebar 1.0.33

Choose a tag to compare

@kkutysllb kkutysllb released this 24 Sep 16:33
· 54 commits to main since this release

dsh-coding-sidebar 1.0.33

定时任务轮尾卡「打开」不再展开原生右栏列——详情落到自家「任务计划」tab;同版修掉
预览期的 remote.schedule 取用报错,以及「带 meta 的 open 落进收起面板」。

新增:定时任务预览(「任务计划」tab 承接)

  • 背景:0.1.7-rc.2 的定时任务轮尾卡「打开」会展开原生右栏列——该列一展开就在主
    对话区旁留一大片空白(与 dsh-context 那次同源)。产品要求屏蔽该列,把详情落进自家侧边栏。
  • 设计——数据面与导航面分离:
    • 引擎只传身份:openTab({type:'plans', id:'plans', meta:{kcScheduleTask:{sessionId,taskId}}}),
      再补一次 updateTab(plans 是 single tab,去重只聚焦、不写 meta——不补这次,
      第二条任务的「打开」仍会显示上一条)。
    • 数据由本插件自取:ctx.remote.schedule.list({sessionId}) 后按 id 命中。该 remote 面
      按可选查找、绝不写进 inject:上游默认不挂 schedule 插件,缺席时必须保留计划文档
      列表、只报「读不到这条任务」,不能让整个插件挂不起来。插件缺席时引擎回落原生右栏 tab。
  • 改动:
    • 新增 src/client/ScheduleTaskPreview.tsx:预览卡(标题 / 频率 / 下次触发 / 提示词)
      • readScheduleTaskTarget(meta) 守卫(无标记即不占位,页面与原来完全一致);
        every 按秒/分/时归一,其余按 kind 命名。
    • PlansView 新增 ctx / scheduleTask / onDismissSchedule 三个 props,预览渲染在
      文档列表之上。
    • plans descriptor 读 tab.meta 接预览;onDismissSchedule 用 meta: {} 清标记
      ——updateTab 会丢弃 undefined 字段,写 undefined 等于没清。
    • locales:zh + en 各补 18 键(其余 19 个语言文件是 Record<string,string>,不参与键齐性);
      CSS 新增 .schedPreview* 块,全部走既有 --dsw-alias-* token,零硬编码颜色。

修复

remote.schedule 改用延迟装配

  • 现象:预览渲染时抛 读取任务失败: cannot get property "remote.schedule" without inject。
  • 根因:ctx.remote 是可追踪服务代理,深层路径(remote.schedule)会被整体
    校验 inject,直接读属性即抛;而把该面写进本插件 inject 清单,又会让它在上游默认
    (不挂 schedule 插件)的载具上整体不挂载——Cordis 的 inject 是 all-required。
  • 处置:改走 ctx.get 延迟装配,缺面时降级为「读不到这条任务」。

带 meta 的 openTab 归入「内容型」

  • 现象:预览已能取到任务,但面板收起时点轮尾卡「打开」看不到任何变化。
  • 根因:只有带 path/url 的 open 才走「内容型」分支并自动展开面板,纯 type + meta
    被判成 type-only ⇒ tab 开在收起的面板里,表现成「点了没反应」(activateTab 不展开,
    togglePanel 又不是公开 API,引擎侧无解)。
  • 处置:判据扩到 seed.meta——带 meta 的 open 就是「带着要显示的内容来的」,与
    path/url 同类,理应落在可见处。影响面已核:+ 菜单(本就在面板内,展开幂等)、
    agent 终端自动开 tab(不传 meta)、sidechat 的 meta:{threadId}(走 descriptor.createTab,
    不经过 seed.meta)。附带治好 sidechat 自动开 tab 却落在收起面板的同类潜在缺口。

分发:本版必须 bump 版本

  • 现象:引擎的重定向生效了(「任务计划」tab 被打开),但面板里没有预览——根因不在
    代码,在分发。
  • KCoder 的 bundle 物化是版本驱动的:
    staleTarget = !intact || 版本不可读 || gt(srcVersion, dstVersion)。「1.0.32 == 1.0.32」
    ⇒ 跳过拷贝 ⇒ profile 里那份实体仍是旧构建(kcScheduleTask 0 命中),运行的插件里根本
    没有预览代码。
  • 故 package.json → 1.0.33(lib 随 pnpm build 重建,构建期注入的
    SIDEBAR_SERVICE_VERSION 同步为 1.0.33)。
  • 教训(已写进 README 开发清单):只要物化是版本驱动的,插件改动要到达已装应用就必须
    bump 版本;否则代码在 bundle/ 里、不在 profile 里,表现成「改了但没生效」,而
    typecheck / 单测 / 产物检查全绿。

文档

  • README「本地开发」补三条跨层默认语义:可选面只能走 ctx.get / ctx.inject;插件改动必须
    bump 版本;程序化 openTab 要用户看见就必须带 meta。完整版见 KCoder 仓
    docs/plugin-dev-checklist.md。

兼容性说明(重要)

  • 本版数据缝仍是 0.1.7 单线,沿用 1.0.32 的 projectionsBySession / refreshProjections /
    jobs 客户端面;0.1.6 系宿主请继续使用 1.0.30。
  • package.json 的 peer 范围仍声明 ^0.1.6-alpha.2,与实现的 0.1.7 单线存在口径差
    ——1.0.32 已提出该口径差,本版未动(建议后续收口到 ^0.1.7-alpha.1,或补 0.1.6 回退分支)。

验证

  • 发布前在 HEAD(7d4a451)上重跑:typecheck exit 0;test ALL PASS;smoke 通过;
    sync:check 镜像对账通过;check:artifacts 175 文件字节不变 ✓。
  • 产物缝核对:lib/client.js / lib/client-registry.js 内 kcScheduleTask 与
    schedPreviewTitle 就位,版本常量 1.0.33 同步;本仓 / dsh-plugins 镜像 / KCoder bundle
    三份一致(后两仓已同批提交推送)。
  • 行为面:tests/ 是纯 helper 级(无 openTab 的行为测试),故「预览可见」「面板自动展开」
    只有类型 + 产物两道静态证据,由作者 dev 实机确认。
  • 环境口径提醒:check:artifacts 的重建会继承 shell 环境。若 shell 带
    NODE_ENV=development(DSH 侧车 shell 即如此),rolldown 会把 react-is 的
    development 副本内联进 lib/client-office.js(+77KB 且含 $1 改名漂移),闸门会误报
    「产物不可复现」。发版前请用 env -u NODE_ENV pnpm check:artifacts,或先收口脚本(见遗留)。

遗留

  • 作业缝的在线验证仍未做(1.0.32 遗留项):新起的侧车作业注册表为空(作业是进程内的),
    该半已做代码 / 产物 / 类型三重核对,待现场有活作业时确认。
  • scripts/check-artifacts.mjs 未固定 NODE_ENV,存在上述误报面——建议在重建三步里显式
    env: { ...process.env, NODE_ENV: 'production' }。