Skip to content

Releases: Motues/dsh-session-curator

v0.3.2

Choose a tag to compare

@Motues Motues released this 23 Oct 12:29

修复

  • 删除后的会话不再出现在侧边栏「未分组」里:物理删除成功时,宿主会向所有已连接的客户端
    补发一条 DSH 自带的 api-session/removed 事件(官方 session/disposed 用的是同一条 relay)。
    此前插件的 delete 会先取消归档、再摘掉工作区记账,而客户端那份会话清单是连接时拉取的
    快照 —— 目录虽然删了,旧行却因为不再归档而重新可见、又因为失去工作区归属被
    groupByWorkspace() 收进「未分组」,看起来就像"删掉的会话跑到未分类里了"(从「已归档」
    页签删会话时最容易撞上)。现在客户端收到事件即从清单中删掉该行;被拒绝的项(运行中 /
    当前会话 / 未知 id)不会发这条事件,仍在磁盘上的会话不会被误删。

v0.3.1

Choose a tag to compare

@Motues Motues released this 17 Oct 15:49

修复

  • 适配 DSH 0.2.1(0.2.1-rc.2):DSH 把 engines.dsh 当成硬闸 —— 插件声明的范围不认当前运行时,
    profile 启动就会整条拒绝(宿主半区与客户端半区一起消失,界面上看不出任何插件痕迹,
    只在插件管理日志里留一句 Plugin dsh-session-curator@0.3.0 is incompatible with dsh 0.2.1-rc.2)。
    0.3.0 声明的 >=0.2.0-rc.2 <0.2.1-0 恰好把 0.2.1-rc.2 挡在门外,所以升级 DSH 后插件就不见了。
    这次把范围放宽到 >=0.2.0-rc.2 <0.2.2-0。插件代码本身不需要改动:逐项比对过 0.2.0-rc.2 与
    0.2.1-rc.2 两边我们真正依赖的那点 API 面(workspaceRegistry 的全部方法与属性、
    connection.fetch 的注册与共享处理器、五个槽位的名字 / 注册项 / 传进来的 props、
    dsh-client-ui-primitives 用到的 24 个导出、客户端模块 loader 的 __ModuleLoader__.load 契约、
    设置外壳的导航图标表、app-boot 的 engines / 图标 / locale 读取规则、会话目录与投影缓存路径、
    workspace/session-activity 瀑布),全部一致。

内部

  • scripts/activation.mjs 新增兼容闸:从本机 app.asar 读出正在跑的 DSH 版本
    (dsh-app-boot 自己的 package.json,正是 app-boot 比对时用的那一边),用抽出来的真 semver
    演一遍 dsh-app-boot 的 satisfies(),断言 engines.dsh 认得它。用 0.3.0 的旧范围跑会红:
    FAIL engines.dsh admits the DSH runtime this activation just ran against。
    以后升级 DSH 只需 node scripts/activation.mjs,不必等"装上去才发现插件不见了"。

v0.3.0

Choose a tag to compare

@Motues Motues released this 15 Oct 05:12

移除

  • 回收站功能整体移除:删除改成物理删除 —— 会话目录与它的投影缓存直接从磁盘删掉,不可恢复。
    • 移除回收站页签、恢复、永久删除、按时间清理(7 / 30 / 90 天档位与自定义天数)以及回收站保留策略设置。
    • 移除删除成功后的「撤销」toast:物理删除没有可撤销的东西。
    • 移除五个端点(trash / restore / purge / trash-stats / purge-older-than),新增 delete;
      端点数从 14 条降到 10 条。
    • 删除 src/host/trash.ts 与 src/host/retention.ts(连同 __trash.json 的 schema 约定)。
    • <DSH_HOME>/storages/session-manager/trash 里历史遗留的软删除数据插件不再读写,也不会自动迁移
      或删除;需要时人工把 trash/<sessionId>/ 搬回 sessions/<slug>/<sessionId>/。

变更

  • 会话行 ⋯ 菜单的「删除会话」、行内删除按钮、批量删除与「整个工作区删除」统一走物理删除确认弹窗:
    正文写明「日志文件会从磁盘上彻底移除,无法恢复」,并提示想以后还能找回请改用「归档」;确认前必须
    勾选「我明白这无法撤销」。正在运行、以及当前正在使用的会话一律拒绝。
  • 会话面板从 5 个页签降到 4 个:已归档 / 已置顶 / 磁盘占用 / 配置;排序去掉「删除时间」档。
  • 磁盘占用视图不再区分「磁盘上 / 回收站里」,也不再给任何行打「在回收站」胶囊。
  • 「归档」保持不变,它就是"留退路"的机制:同样能让会话从侧边栏消失,而且随时可以取消归档找回来。

内部

  • 删除 CI(.github/workflows/ci.yml):发布前自己本地检查即可。原来那道"lib/ 必须和
    src/ 同步"的闸(CI 的第 4 步 git diff --exit-code -- lib/)挪到发布前:新增
    scripts/lib-sync.mjs 与 pnpm run check:lib,prepublishOnly 变成
    node scripts/lib-sync.mjs && pnpm test —— 改了 src/ 忘了 pnpm run build 就发不出去。
    随之失去的自动检查:lockfile 与 package.json 是否一致(原来靠 pnpm install --frozen-lockfile)。
  • 修掉一条只在 Linux 上挂的自检断言(scripts/smoke.mjs 的路径守卫,写死了 Windows 反斜杠,
    曾让 v0.2.0 那次 CI 跑成 73/74);只动 scripts/,已发布的 0.2.0 内容不受影响。
  • scripts/smoke.mjs 的临时 HOME 段落从"软删除语义"改成"物理删除语义":目录真的没了、归档 / 置顶 /
    工作区三处记账清干净、正在运行与当前会话逐项拒绝、投影缓存一并删除。

v0.2.0

Choose a tag to compare

@Motues Motues released this 14 Oct 10:40

新增

  • 侧边栏会话行 hover 卡片补一节属于本插件的磁盘事实:体积 / 文件数 / 原目录 / 是否在回收站(宿主新增
    describe 端点,30 秒 TTL 缓存 + 并发去重)。
  • 行内「移入回收站」按钮:会话行 hover 时直接删,不必点开 ⋯ 再点一次;形状与官方归档 / 置顶按钮一致
    (16×16 朴素按钮、透明底,只换前景色)。
  • 删除后的「撤销」提示:软删除成功给 5 秒撤销机会,撤销走 restore;失败只把原因写在同一条提示里。
  • ⋯ 菜单新增复制路径 / 在资源管理器中显示(新增 open 端点;路径只能由宿主算,客户端不传路径)。
  • 会话面板新增搜索框与时间过滤(全部 / 最近 7 天),只影响显示 —— 计数、勾选与批量动作仍按整个页签算。
  • 分组标题新增**「整个工作区」菜单**:一次归档 / 移入回收站的范围跨三个页签;工作区里有正在跑的会话时危险项禁用。
  • 「运行中」胶囊:宿主用官方 workspace/session-activity 判定,快照里给出 activeSessionIds,正在跑的会话
    在列表与工作区动作里都预先禁用危险项(不用等点下去才回一句"请先停止它")。
  • 新增磁盘占用页签(usage 端点,只读):整机聚合 + 按工作区横条 + 「最占地方的会话」/「最久没打开的会话」
    两个榜单,榜单每行可直接归档;页签自带只重拉这一份数据的刷新按钮。
  • 回收站保留策略:保留天数下拉(7 / 30 / 90 天,或 1–3650 的自定义值)+ 「将删除 N 个会话 · X MB」预览
    (trash-stats)+ 「清理 N 天前」(purge-older-than)。永不自动执行:每次都要先看预览、再过一道
    需要勾"我明白这无法撤销"的确认弹窗。

变更

  • 会话面板从 3 个页签扩成 5 个:已归档 / 已置顶 / 回收站 / 磁盘占用 / 配置。
  • 配置页的排序从分段控件改成下拉(5 档:原顺序 / 标题 / 体积 / 创建时间 / 删除时间);下拉的选中
    对勾由 Menu 画在行尾,与 DSH 自己的菜单一致。
  • 「已归档」页签每行 ⋯ 菜单的第三项:原来的"永久删除"走的是 purge,而归档会话不在回收站 ——
    点下去只会报"回收站里没有这个会话";现在改成真正可用的「移入回收站」(trash,随时能恢复)。
  • 端点从 9 条涨到 14 条(新增 describe / trash-stats / purge-older-than / usage / open)。
  • 包管理器从 npm 换成 pnpm 11:pnpm-lock.yaml 与 pnpm-workspace.yaml 进 git,package-lock.json 删除;
    贡献者命令相应改成 pnpm install / pnpm run build。

修复

  • 磁盘占用榜单上已归档的会话右侧按钮仍然是「归档」—— 归档集合是幂等的,再点一次既不报错也不改变任何东西,
    只能被当成"点了没反应";现在改成「取消归档」,并在动作完成后重拉一次占用视图(usage 不在快照里,
    不重拉那行的状态胶囊还是旧的)。
  • 每次进设置页都会先空白、闪一下"读取中…"才出现会话:设置外壳每次进来都是重新挂载,快照从 null 起步。
    现在有一份模块级缓存(src/client/snapshot.ts),首帧直接画上一份,后台照常刷新;变更端点的回包也顺手写进缓存。
  • 下拉的选中对勾画在文字前面(MenuItemButton 的 icon 位置固定),与 DSH 其它菜单不一致 —— 改到行尾。

内部

  • 新增 CI(.github/workflows/ci.yml):pnpm install --frozen-lockfile → pnpm run check → pnpm test
    → git diff --exit-code -- lib/。最后一道是"改了 src/ 忘了重新构建 lib/"这个静默事故唯一的自动闸
    (构建是确定性的:同输入同字节)。runner 上没有 DSH,activation.mjs 会打印 SKIP —— 那一项只在真机上有效。
  • scripts/smoke.mjs 在 <DSH_HOME>/storages/workspace.json 不存在时降级成空表(CI runner / 没装过 DSH
    的机器),别的错误照旧抛;本仓库的断言不依赖真实数据。
  • 引入 Prettier(pnpm run format / format:check,后者纳入 pnpm run check):Tab 缩进、双引号、
    无尾逗号、printWidth 140、忽略 lib/ 与 *.md。
  • 新增 CHANGELOG.md 与 scripts/release.mjs(校验干净树 + 跑自检 + 比对 registry 上的 shasum → 打 tag
    并推送 → 用 GITHUB_TOKEN 调 REST 建 Release)。发布包不再带上 scripts/(files 白名单收细)。
  • __trash.json 补上正式 schema 说明与 version 迁移约定(src/host/trash.ts 头部注释)。

v0.1.2

Choose a tag to compare

@Motues Motues released this 13 Oct 15:44

0.1.2

新增

  • 「分组默认状态」配置项(设置 → 会话管理 → 配置):未手动点过的文件夹默认折叠还是展开。
    改这个设置会立刻作用到所有没手动动过的文件夹;手动点过的文件夹保留手动状态,折叠状态按页签
    各记各的(在归档页折叠某个文件夹,不影响回收站页)。把某个文件夹手动翻回默认状态后,它会重新
    跟随配置 —— 否则"改配置立即生效"会因为一次无意义的点击而永久失效。

变更

  • 源码转为 TypeScript 多文件:src/ 是唯一真源(宿主 src/host/*.ts、客户端 src/client/*、
    线协议类型 src/shared/protocol.d.ts),构建由 tsc(宿主输出多文件 ESM)+ esbuild
    (客户端多文件打回 DSH 的 window.__ModuleLoader__.load({id, factory}) 手写束)完成。
    发布物仍然是零依赖纯 JavaScript、安装方无需构建:lib/ 就是提交进仓库的构建产物,
    main / exports 未变。
  • 仓库新增 devDependencies(typescript / esbuild / @types/node)、package-lock.json 与
    4 份 tsconfig;npm test 现在会先 npm run build,另有 npm run typecheck / npm run check。

修复

  • 文件夹路径太长时,分组右侧的「全选 / 取消」按钮文字会折成两行。根因:DSH 的 Button 是
    display: inline-flex 且没有 white-space: nowrap,而它作为该行的 flex 子项默认会跟着一起收缩。
    现在右侧按钮完全不参与收缩并禁止折行,收缩全部由左侧折叠按钮承担 —— 标题与路径各自截断成
    省略号(完整路径仍在 tooltip 里);行内「⋯」按钮也加了同样的定宽保护。

自检

client.mjs 96/96、smoke.mjs 37/37、activation.mjs 17/17(真 cordis 拓扑 + 9 条精确路由)。
其中新增:折叠默认值 / 手动覆盖 / 覆盖回收 4 条纯逻辑断言,以及长路径下按钮不折行、路径可省略号的回归断言。

完整说明:README.zh-CN.md · README.md

v0.1.1

Choose a tag to compare

@Motues Motues released this 04 Oct 15:26

0.1.1

修复

  • 移入回收站后,侧边栏「未分组」里会留下一条幽灵行(同时"已归档"页签多出一条 0 B、没有目录的行)。
    根因:把已归档会话移入回收站时,插件过去会先 unarchiveSession 再搬目录 —— 而归档集合
    archivedSessionIds 是 DSH 里唯一能让会话从所有分组面消失的机制(官方注释原话
    "sessions hidden from every grouping surface"),取消归档等于把它重新暴露给客户端的会话清单;
    目录虽然已经搬走,但那份清单里的一条还在,于是被判进「未分组」。同时 workspace.json 里那条 id
    也还挂着,自检就会报 every archived row resolved its on-disk directory。

    现在的做法:趁目录还在先归档(藏起来)→ 摘掉置顶 → 移出工作区记账 → 搬目录;
    删除前是否已归档记进 __trash.json 的 wasArchived,恢复时照原样还原
    (老数据没有这个字段,一律按"没归档过"处理,会自动治好历史遗留)。
    永久删除会先取消归档,不留永久幽灵;"已归档 / 已置顶"两个列表也会滤掉回收站里的、
    以及目录已不存在的 id。

新增

  • 配置页(设置 → 会话管理 → 配置):默认页签 / 按工作区分组 / 侧边栏显示已归档会话 /
    行内显示体积与文件数 / 排序 / 自动检查更新,外加"恢复默认"。
  • 配置页"关于"里用浅色小字显示版本号,并自动检查 npm 上是否有新版本;有的话给出
    升级命令与"重启 DSH"提示。想立刻切换侧边栏的归档显示,官方入口是侧边栏会话列表的「视图选项」菜单。
  • 顶部条布局:三个数据页签留在左侧,「分组」与「刷新」移到右上角并加上边框。
  • 宿主新增 check-update 端点(只读 GET npm registry,5 秒超时 + 10 分钟缓存,离线只提示失败),
    snapshot 增加 version 字段。

自检

client.mjs 78/78、smoke.mjs 37/37、activation.mjs 17/17。其中新增的软删除回归测试,
判定规则("在客户端清单里 && 不属于任何工作区 && 不在归档集合里 → 未分组")是逐字照抄官方
@deepseek-ai/dsh-client-ui-workspace 的 groupByWorkspace()。

完整说明:README.zh-CN.md · README.md

v0.1.0

Choose a tag to compare

@Motues Motues released this 04 Oct 13:30

给 DSH(DeepSeek Harness)补上删除会话与归档会话管理的插件,首个发布。

官方 Host 服务只有 archiveSession / unarchiveSession / pinSession / unpinSession,没有删除会话的 API,所以这个插件自己做文件级操作,并把"删除"做成可完整恢复的软删除。

能力

  • 会话行「⋯」菜单:删除会话 → 确认后移入回收站
  • 设置 → 会话管理(三页签:已归档 / 已置顶 / 回收站),默认按原来的工作区文件夹分组,逐行与批量操作
  • 全框确认弹窗:永久删除需勾选"我明白这无法撤销"
  • 软删除写入 __trash.json(原 slug / cwd / 标题 / 删除时间)与投影缓存;恢复时搬回原目录并尽力挂回原工作区
  • 拒绝删除正在运行或当前正在使用的会话;永久删除只对回收站条目开放

安装

plugin_manager  install_bundle  target: dsh-session-curator   # 或 dsh plugin add dsh-session-curator
plugin_manager  install_bundle  target: github:Motues/dsh-session-curator

零 npm 依赖、免构建:lib/index.js 是宿主半区,lib/client.js 是手写客户端束,装进去就能用。

自检(不需要 DSH 在跑)

npm test

本机实测:client.mjs 59/59、smoke.mjs 14/14、activation.mjs 17/17。

兼容性

engines: node >=20、dsh >=0.2.0-rc.2 <0.2.1-0(只在实测过的宿主版本上声明兼容)。只在 Windows 上实测过。

说明

  • 本版由 dsh-session-manager 改名为 dsh-session-curator(原名已被 npm 上的 0.6.2 占用)
  • 回收站目录 <DSH_HOME>/storages/session-manager/trash 故意保留旧名:里面已有真实数据,改路径会把它们变成孤儿

完整文档:README.md · README.zh-CN.md