dsh-tidy

DSH PLUGIN会话与消息

仓库 JHyugou/dsh-tidy

会话与消息 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

DSH 插件:把暂时不用的工作区或单个会话拖进侧边栏「收纳区」,需要时再拖回来,收纳区可折叠(Sidebar stash area for DeepSeek Harness)

一句话选型结论

按资料字段整理

dsh-tidy 是会话与消息类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类会话与消息 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-19 创建于 2026-10-19
README 8.5 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:JHyugou/dsh-tidy
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

文件读写

上游标签

deepseek-harnessdshdsh-pluginsidebarstashworkspace

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在会话与消息场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-tidy当前 L5 · 运行验证通过 低风险 0 未标注 有
dsh-desktop L3 · 安装规范通过 低风险 3.0 万 未标注 无
openpets L4 · 沙盒安装通过 低风险 1,274 未标注 有
deeptide L4 · 沙盒安装通过 低风险 1,104 0.1.1-rc.2 有
jingyun-dsh L3 · 安装规范通过 低风险 1,004 未标注 有
study-mate 未做沙盒验证 未标注 856 未标注 无

仓库档案

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方JHyugou仓库 dsh-tidy · 默认分支 main
分类会话与消息desktop
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-19 · 2026-10-19最后推送 2026-10-19
本站收录2026-10-30首次进入本站目录的时间

README 全文

8.5 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-tidy

给 DeepSeek Harness 侧边栏加一个收纳区:把暂时不用的工作区(连同它的所有会话)或单个会话拖进去,侧边栏立刻清爽;要用的时候再拖回来。

收纳区插在「插件」面板行与「工作区」分区标题之间——也就是你截图里圈出来的那个位置:

[品牌 / 新会话]
[🧩 插件]                 ← 全局面板行(ui-plugin-manager)
[⌄ 📥 收纳区 2 个  全部还原]  ← 本插件(⌄ 可折叠)
💬 DSH 任务完成…       ← 单个会话被收纳(只藏这一行,工作区还在)
📁 dsh-remind         ← 工作区被收纳(它名下所有会话一起消失)
[工作区  🔍 ⚙ ➕]         ← ui-workspace 分区标题
📁 Autumn
...

空态只占一行(28px),不给自己制造新的占位负担;收纳了东西才展开成「标题 + 行列表」,
点标题前的 ⌄ 折叠可以把整个收纳区收成一行(折叠态跨刷新保留):

空态 工作区 + 会话各收纳 1 项 折叠态

(截图来自 node tools/browser-check.mjs --shot,是无头浏览器里的真实渲染。)

用法

操作 做法
收纳工作区 把工作区标题行(带文件夹图标)拖进收纳区 → 该工作区连同它名下所有会话一起从侧边栏消失
收纳单个会话 把会话行拖进收纳区 → 只藏这一行,工作区与其它会话不受影响
折叠 / 展开收纳区 点收纳区标题前的 ⌄;折叠态会记住,刷新后仍然折叠
还原 点收纳行右侧的「还原」,或把收纳行拖回下方「工作区」列表
批量还原 收纳区标题栏右侧的「全部还原」
清理失效项 工作区已被删除时,收纳行显示「已不存在」,点「移除记录」只清掉收纳记录

补充说明:

  • 「新会话」只是占位行,不能被收纳(会提示)。
  • 某个会话被收纳、而它的工作区也被收纳时,该行会标注「随工作区」;还原工作区后,
    这个会话仍然保持收纳(两条记录互不影响),点它自己的「还原」即可。
  • 收纳清单存在浏览器 localStorage(键 dsh-tidy.stash.v1,v1 只有工作区,读取时会自动迁移到 v2),
    跨重启保留,不写宿主、不改工作区与会话本身——文件夹、会话记录、宿主端数据都不动,纯粹是侧边栏的显示收纳。

安装(本机已完成)

# 本机 desktop profile 已装好(link 方式,改代码即时生效)
dsh plugin --profile desktop add <本目录路径>     # 首次安装
dsh plugin --profile desktop remove dsh-tidy      # 卸载

装好后 DSH 宿主会热加载(dsh-client-modules 增量扫描 Loader 条目),
但已经打开的窗口需要刷新一次页面(Ctrl+R)才会拉取新的浏览器 bundle。

验证

node --test                    # 43 项单元测试:清单/迁移/隐藏选择器/条目解析/锚点算法/入口契约(无需浏览器)
node tools/verify.mjs          # 宿主端 5 项:启动图收录 + bundle 可取 + 与源码逐字一致 + /api 诊断路由
node tools/browser-check.mjs   # 真浏览器 31 项:位置 + 收纳/隐藏/还原 + 真实拖放 + 折叠持久化 + 会话收纳 + 收起轨道

browser-check.mjs 用临时 --user-data-dir,与你正在用的窗口完全隔离,不会动你的收纳清单;
没有 Chrome/Edge 时它会 SKIP。加 --shot[=前缀] 可以把侧边栏截图存下来(文档里的截图就是这么来的)。
三个脚本都用 ~/.dsh/.credentials.yaml 的 browser-session secret 现场铸签名 cookie(与浏览器同构),
不读取、不打印其它凭据。

排障时还可以在 DSH 窗口的 DevTools 控制台里用诊断面:

__dshTidy.state()        // 当前收纳清单与折叠态
__dshTidy.anchor()       // 解析到的插入点 { host, before, tree }
__dshTidy.mounted()      // 挂载容器是否在位、宽高、父元素
__dshTidy.probe(id)      // 这个 id 会被当成工作区还是会话(拖拽载荷是裸 id)
__dshTidy.stash(id, title, path)   // 手动收纳工作区
__dshTidy.stashSession(id, title)  // 手动收纳会话
__dshTidy.unstash(id); __dshTidy.unstashAll(); __dshTidy.setCollapsed(true)

架构

DSH 插件是「宿主端 + 浏览器端」双半结构,本插件零 npm 依赖、零构建:

文件 角色
src/client.js 浏览器端 bundle(window.__ModuleLoader__.load 手写格式):收纳区 UI、折叠、拖放、隐藏样式、锚点定位
src/index.js 宿主端 Cordis 插件:让包成为 Loader 条目(客户端 bundle 的发现前提)+ /api/dsh-tidy.status 只读诊断路由
cordis.patch.yml 安装时自激活宿主端入口
package.json dsh.bundle.patch 自激活 + dsh.client 浏览器 bundle 声明
test/ 单元测试(把 bundle 在 Node 里用 ModuleLoader 桩加载后直接断言)
tools/ 验证脚本:verify.mjs(宿主)、browser-check.mjs(真浏览器,可 --shot 截图)

为什么是「headless 插槽 + DOM 挂载」

侧边栏外壳(@deepseek-ai/dsh-client-ui-sidebar)只声明了固定席位:sidebar.panellist /
sidebar.workspaces / sidebar.settings / sidebar.footer.action……没有「面板行与工作区之间」
这个位置;而 sidebar.workspaces 是 single 且已被 ui-workspace 占用,renderSlot() 又按
「本条目声明的 children」授权(否则抛 SlotOwnershipError),所以替换包没法把 ui-workspace 的
浏览器渲染出来。

于是本插件:

  1. 往 shell.overlay(root 作用域的 list 席位)注册一个 headless 组件——拿到全局
    useWorkspaces 钩子、t 与 React 生命周期,本身不产生任何可见 DOM;
  2. 用 React portal 把收纳区挂到侧边栏 DOM 的精确位置:从 [role="tree"](ui-workspace 的行容器)
    逐级上溯到「工作区」分区标题所在容器,插到它之前;display:contents 的插槽出口会自动跳过
    (否则量不到宽度);
  3. 隐藏用属性选择器 CSS:[role="tree"] > *:has([data-row-key="workspace:"]) 整段收起
    (分组容器内含该工作区所有会话行),会话行再按 [data-row-key="session:"] 兜底;
    :has() 不可用的浏览器上自动退化为给分组容器打标记属性。

与 DSH 的耦合点(都有降级)

依赖 变化时的表现
[data-row-key="workspace:"] / session: 行标识改名 → 收纳区仍在,但收纳不生效;控制台给出 [dsh-tidy] 警告
工作区行 dragstart 的 text/plain 载荷 载荷变化 → 改用 DOM 行文本兜底取名;仍取不到则提示「没认出这个工作区」
[role="tree"] 与分区标题的层级 锚点解析失败 → 收纳区不出现,DSH 其余功能完全不受影响
shell.overlay 席位 席位被移除 → 只告警,不抛错
localStorage 不可用(隐私模式) 降级为「本次会话有效」

任何一处失败都只降级收纳区自己;插槽渲染器会把崩溃的条目隔离在 [data-slot-error],不会拖累外壳。

已知限制

  • 平铺视图(「按会话」分组)与搜索结果里没有工作区行:无法从那里把工作区拖入收纳,但收纳区里的项仍可还原;
    收纳中的工作区,其会话行在平铺视图里也会被隐藏(单条会话收纳同样按 session: 全局隐藏)。
  • 收纳的是「显示」而不是数据:工作区、文件夹、会话记录都原样保留,只是侧边栏不显示;
    被收纳的会话仍能通过搜索、URL、其它入口打开。
  • 正在使用的工作区或会话也能被收纳:会话本身不会关闭,想找回来点「还原」即可。
  • 收纳清单在浏览器 localStorage:换浏览器/清站点数据会丢清单(工作区与会话本身不受影响)。

本机开发备注

  • .ref/ 是本机 DSH 内置包源码摘录与截图(仅本地参考,已 gitignore,不随包发布);
    重新摘录用 dsh-remind 里的 tools/asar.mjs。
  • 改了 src/client.js 后:宿主会重新计算 bundle 版本(按文件 mtime/size),页面刷新即生效;
    宿主端 src/index.js 改动需要重启 DSH(或插件页重载)。

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-tidy 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:JHyugou/dsh-tidy` 即可。

dsh-tidy 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-tidy 安全吗?

低风险。

dsh-tidy 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-tidy 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

会话与消息
按星标排序,可作替代方案

dsh-desktop

dsh-desktop

为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。

L3 · 安装规范通过 3.0 万 星

openpets

openpets

L4 · 沙盒安装通过 1,274 星

deeptide

deeptide

L4 · 沙盒安装通过 1,104 星

jingyun-dsh

jingyun-dsh

井云 DSH 客户端插件,为 DeepSeek Harness 注入会员登录、订阅支付、算力管控与应用市场,让智能体和技能快速变成可交易商品

L3 · 安装规范通过 1,004 星

study-mate

study-mate

StudyMate 是 DSH 的「学习模式」预设与技能包,为数学、计算机科目定制学习路线、讲解课件与练习评估,跨科目共享记忆。

未标注验证等级 856 星

JHyugou 的其它插件

6 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。