Skip to content

Releases: KannaKuron/dsh-better-workspace

v0.37.1 — 兼容下限回落到 0.1.6-alpha.2

Choose a tag to compare

@KannaKuron KannaKuron released this 01 Nov 06:38

类型:fix(兼容下限回落到 >=0.1.6-alpha.2,让旧宿主也能安装)

fix

  • 兼容下限回落:0.37.0 为了 alpha.2 的会话行尾座位把 engines.dsh、dsh.plugin.json 与 @deepseek-ai/dsh peer 抬到了 >=0.2.2-alpha.2,旧宿主因此连侧栏树本身都装不上。实际上该座位是能力探测的:老宿主没有 sidebar.session.row.trailing 时座位读取结果为空,行外观与旧版一致,代码不需要 alpha.2 的其它 API。三处声明同步回落到 >=0.1.6-alpha.2,与 0.36.x 相同。
  • 无行为变化:0.37.0 的会话行尾座位、空白会话复用语义、折叠侧栏 TDZ 修复全部保留。

验证

  • 冒烟 81/81 通过(两条版本门禁断言随声明同步)。
  • 隔离 DSH 0.2.2-alpha.2 实例安装 0.37.1:侧栏工作区树与会话行正常,无 data-slot-error,无插件自身异常。

v0.37.0 — 会话行尾座位 + 空白会话复用语义

Choose a tag to compare

@KannaKuron KannaKuron released this 30 Oct 06:17

类型:feat(适配 DSH 0.2.2-alpha.2:会话行尾座位 + 空白会话复用语义)

feat

  • 渲染 sidebar.session.row.trailing 行尾座位:自绘会话行现在把官方行尾占用者画在「时间」之后、「置顶角标」之前;座位 owner 只拿到 { sessionId }(与官方契约一致),空会话不渲染,每个占用者单独包 QuietBoundary,某个占用者缺失或抛错不会带崩整行。这样官方实验性工作树 / PR 图标(ui-forge 注册的 forge-panel.row)在插件接管侧栏后也能出现;老宿主没有该槽位时座位读取结果为空,行外观与旧版完全一致。
  • 兼容下限抬到 >=0.2.2-alpha.2:engines.dsh、dsh.plugin.json 与 @deepseek-ai/dsh peer 三处同步;alpha.2 之前没有 sidebar.session.row.trailing,继续声明更低下限会让用户在旧宿主上拿到一个永远不出现的座位。

适配说明

  • 接受官方的空白会话复用语义:rc.5 / alpha.2 的 startSession(workspaceId) 在不传 agentPreset 时会复用同一工作区里任意 preset 的空白会话(官方只在该参数是字符串时才过滤其他 preset)。本插件不接管、也不额外传 agentPreset,行为与官方一致;未发送的草稿仍由官方保留。这是宿主语义,不是本插件新增的开关。

fix

  • 折叠侧栏点「添加工作区」不再触发 TDZ:折叠窄栏分支在 startAddFlow 这个后声明的 const 之前就提前引用了它,整块侧栏会因 ReferenceError 降级空白;现在该分支移到 startAddFlowRef 赋值之后,折叠态与宽态行为一致。

验证

  • 冒烟 79 → 81:新增会话行尾座位的渲染位置(时间之后、置顶之前)、空会话跳过、单个座位错误隔离,以及折叠侧栏添加工作区的 TDZ 回归断言。
  • 隔离 DSH 0.2.2-alpha.2 实例(临时 DSH_HOME + 本地 mock 模型)安装 0.37.0:侧栏工作区树正常渲染、既有会话行可见、无 data-slot-error、无插件自身异常,启动日志没有 register skipped。

v0.36.14

Choose a tag to compare

@KannaKuron KannaKuron released this 29 Oct 17:10

类型:fix / 无标题会话行回退成工作区名(issue #16:侧栏出现一堆「点不开」的同名空会话行)。

fix

  • 无标题行改显官方「未命名」:插件的 sessionTitleOf 在宿主 wire 缺 title 时,最后一档回退到宿主的 displayTitle(basename 兜底),于是每个没有投影标题的会话都显示成工作区 / cwd 目录名——issue #16 里同一工作区下 22 行全叫「OH-WorkSpace」。官方语义(Rows.tsx displayTitle)= node.blank ? t('session.new') : (node.title || t('session.untitled')),空标题渲染本地化的「未命名」,绝不回退 basename。现在插件对齐官方:wire title → 本机记住的最近真实标题(冷启动窗口)→ t('session.untitled'),displayTitle 回退彻底移除。
  • 21 门词典补齐 session.untitled:zh「未命名」、en「Untitled」、ja「無題」等,其余语言按官方 / 通行译法补齐;每个已发布语言都必须带该词条(smoke 守卫)。

已知边界(留给宿主,不在插件可修范围)

  • issue #16 的「点不开」:宿主 navigation.ts 的 openSession → replaceMain → retain 成功即静默,主视图内容缺失也不报错,插件层拿不到失败信号。
  • 零轮次 header-only 空会话无法在插件侧可靠过滤:列表摘要不含 createdAt / 消息计数,tokenUsage 不进 summary,而冷会话缺 metadata 时 sessionListMetadata.blank 被宿主判为 false(list.ts summarizeCold)——没有可靠信号区分「零轮次空会话」与「有内容的会话」。这两项需宿主提供信号或修复。

验证

  • 冒烟 78 → 79(新增 v0.36.14:21 门词条齐全 + displayTitle 回退永不再现)。

Full Changelog: v0.36.13...v0.36.14

v0.36.13

Choose a tag to compare

@KannaKuron KannaKuron released this 27 Oct 03:44

v0.36.13 — 2026-10-27

类型:fix / 会话选择器未跟上「按工作区」名称树(用户纪律:只要层级有渲染就必须处理,不允许切分组模式后任何消费面走样)。

fix

  • 会话空态页「工作区」选择器:v0.36.11 只让侧栏与「新建分组」选择器跟上了名称树,这个选择器的平铺判定还是旧条件(groupBy !== 'workspace-tree' 一刀切)——侧栏已是名称树挂顶层,它仍散开成一层完整标题。现在四个树形消费面(侧栏 tree memo、rawTree、新建分组选择器、会话选择器)共用同一条视图规则:「按工作区」+ 名称层开 → 树;仅纯磁盘平铺视图或「单列表」才收敛。
  • 祖先分组点亮(v0.36.12)补审:确认按树形递归实现,视图无关——磁盘目录/磁盘+名称/纯名称/「按工作区」所有组合下,子树含当前会话的组行都会点亮。

纪律固化

  • smoke 新增「视图不变式」守卫测试:四个树形消费面必须共用同一条视图规则,祖先 active 判定必须沿树递归而非读视图分支;新增消费面必须入测。
  • 仓库 AGENTS.md 新增「层级不变式」一节(行为函数禁止读视图分支;视图分支只许出现在构建树的入口)。

验证

  • 冒烟 77 → 78(新增视图不变式守卫)。

Full Changelog: v0.36.12...v0.36.13

v0.36.12

Choose a tag to compare

@KannaKuron KannaKuron released this 27 Oct 03:38

v0.36.12 — 2026-10-27

类型:fix / 选中会话时祖先名称分组不变色(第六轮真机反馈:选中「工作/Fis管理后台/Back」下的会话后,侧栏里「工作」「平行帮」「Fis管理后台」的文件夹图标不变色,看不出当前会话落在哪个分区里)。

fix

  • 祖先分组跟着点亮:官方 ProjectRow 语义是「子树里含当前会话的文件夹,图标点亮」(Rows.tsx folderActive)。插件的组行 active 判定此前只做磁盘路径前缀匹配(pathHoldsCurrent),对名称组(slash 分组的「工作」「平行帮」…)永远匹配不上——它们没有磁盘身份,只有名称身份。现在补上树形递归判定(nodeHoldsCurrent):沿混合序列逐层下探,子树里任何工作区(含磁盘子层)持有当前会话,祖先组行图标即点亮;磁盘目录行的原有路径前缀判定保留,两通道并联。

验证

  • 冒烟 77/77 全绿(levelSeqOf 遍历计数断言 4 → 5,新增祖先 active 通道)。

Full Changelog: v0.36.11...v0.36.12

v0.36.11

Choose a tag to compare

@KannaKuron KannaKuron released this 26 Oct 10:39

v0.36.11 — 2026-10-26

类型:feat / 「按工作区」分组接上名称树(用户真机反馈:侧栏会话分组切到「按工作区」后,名称分组的工作区全部散开成顶层平铺——「工作」「平行帮」这些名称组没了,而磁盘树模式里它们好好挂在「用户目录」之下)。

  • feat「按工作区」不再是强制平铺:官方 SessionGroupBy:'workspace' 的语义是磁盘嵌套整个关掉、所有工作区顶层散开(官方 WorkspaceBrowser.tsx:356 if (!nestWorkspaces) return new Map()——「按工作区」与「按工作区树」的唯一差别就是 nestWorkspaces 开关)。本插件此前照搬官方语义,无视「工作区分组」设置,名称分组开着也照样散开。现在「工作区分组」开着(磁盘+名称 / 仅名称)时,「按工作区」的树 = 名称树挂顶层:名称组与磁盘容器(「用户目录」)平级,组内结构照旧;「工作区分组」设为「磁盘目录」时保持官方散开平铺。「按工作区树」不受影响。
  • feat 新会话页选择器同步镜像:会话空态页「工作区」弹层与侧栏同源消费同一棵树,自动吃到新行为(侧栏切分组方式,选择器立即跟随)。
  • 跨磁盘同名名称分区按名称身份合并(纯名称视图的设计取舍,用户拍板):「拆分出去」需要磁盘骨架按容器分桶,而纯名称视图本就不渲染磁盘骨架——树模式(「按工作区树」)就是「按磁盘拆分、每个容器一棵新树」的视图,两模式互补。想在名称视图里区分同名组,用名称前缀区分。
  • 两个模式的分组顺序互不干扰:磁盘树层的组序与名称树层的组序各自持久化,来回切换只是落位变化,不动任何数据。
  • 冒烟测试 76 → 77(新增 v0.36.11 场景:workspace + 非磁盘分组时侧栏与选择器都走名称树;磁盘目录分组保持官方平铺)。

Full Changelog: v0.36.10...v0.36.11

v0.36.10

Choose a tag to compare

@KannaKuron KannaKuron released this 26 Oct 09:21

类型:fix / 平级组拖拽嵌套与提升(第五轮真机反馈)

Full Changelog: v0.36.9...v0.36.10

v0.36.9

Choose a tag to compare

@KannaKuron KannaKuron released this 26 Oct 07:55

— 2026-10-26

类型:fix / 拖拽防环(用户真机反馈:磁盘层的容器工作区「用户目录」可以被拖进它自己的名称组「工作」里,标题被改名成「工作/用户目录」或「2d412faa-…/用户目录」——容器成了自己的子孙)。

  • fix 容器工作区不能拖进自己的磁盘子树(v0.36.9):组行源早有 self/descendant 防环,但工作区行源没有任何防环门,两条成环路径全部放行——①拖到自己的组行中带(INTO 黑框照常亮起)→ commitWorkspaceMoveInto 把标题改写成「工作/用户目录」;②拖到自己子树内的工作区行边带 → commitWorkspaceLift 以目标层的 key 当名称前缀,磁盘层 key 是裸 workspaceId,标题被改写成「2d412faa-…/用户目录」。现在统一判据「目标的磁盘 scope 在源的磁盘子树内 → 拒绝」:新增 diskScopeOf(组行 idPath 沿 ownerPrefix 链解析到真实工作区 id)+ isOwnDescendantScope(沿 diskParentMap 上溯命中拖拽源即成环),四处入口同挡——组行悬停(任意落带,含 INTO 中带,拒绝并清残留反馈)、组行松手(几何兜底不得复活被拒的落点)、工作区行悬停、工作区行松手。拒绝 = 无黑框/无蓝线/无槽 + 浏览器原生 no-drop 光标;兄弟层、父容器放入(v0.36.7 黑框收纳)与普通排序全部不受影响。冒烟测试 74 → 75。

Full Changelog: v0.36.8...v0.36.9

v0.36.8

Choose a tag to compare

@KannaKuron KannaKuron released this 26 Oct 07:45

类型:fix / 外部贡献(PR #15,感谢 @Snest1)。

  • fix「In one list + Last updated」视图现在是全局排序:groupBy:'flat'(单列表)+ orderBy:'updated' 时,侧栏把每个工作区各自排好序的会话段与「未分组」段首尾拼接——段内按 updatedAt 降序、段间不重排,几分钟前更新的会话会排在几天前的会话下面。现在把原有的「updatedAt 降序 + id 决胜 + 当前 blank 置顶 + pinned 分区」契约抽成共享 helper orderSessionsByRecency,flat 模式在收集完全部工作区与未分组行后做一次全局排序;分组视图行为不变,手动排序不受影响。回归测试切片执行真实排序与渲染函数;冒烟测试 73→74。

Full Changelog: v0.36.7...v0.36.8

v0.36.7

Choose a tag to compare

@KannaKuron KannaKuron released this 23 Oct 08:59

类型:fix / 拖入反馈统一(用户真机复测:工作区行拖到所属工作区行上的黑框「拖入」反馈很好,但把「工作区分区」(组行)拖到它所属的「工作区」(磁盘层父行)上完全没有收纳反馈,要求风格统一——「完全更贴近到用户目录上去,就可以表示放入这个工作区下吗」)。

  • fix 组行拖到「自己所属的那一行」上现在有与拖入工作区一致的黑框(v0.36.7):组行拖拽的悬停门此前只区分同层/跨层——组行拖到它所属的磁盘层工作区行上时被判成跨层直接 clearOver,光标像什么都没发生。现在跨层多认一种「归属」落点:目标行正是该组的父容器(workspace.subPrefix === source.levelKey)时点亮 bw-drop-into 黑框(=拖入语义),松手把整组排到该层末尾;其它跨层目标仍不接管、不留反馈。
  • fix 组行拖到父级分组行中带同样是黑框放入:祖先门从「一律拒绝」收窄——只有直接父级的中带(into)放行,松手把该组排到父容器末尾;直接父级的边带仍走同层排序,更远的祖先(祖父级)继续拒绝(改名会重复段)。
  • 新增 moveFolderToLevelEnd:组行「放入」不改写任何标题前缀——只在容器层的顺序 token 序列里把该组 token 挪到末尾(树渲染与工作区选择器同源消费),放完立即重排、刷新后保留;容器层里找不到该 token 时 warn 拒绝(不留静默失败)。
  • 冒烟断言 72 → 73(v0.36.7:组行拖到自己所属的容器行 = 黑框放入且排到该层末尾——含直接父级中带放行 / 边带与更远祖先仍拒 / token 末尾写入)。

Full Changelog: v0.35.1...v0.36.7