- Startseite
- Plugins
- UI-Erweiterungen
- dsh-workspace-vault
dsh-workspace-vault
coldrainlab/dsh-workspace-vault
Pin workspaces and tasks in the sidebar, with a password-protected hidden space and a workspace access lock. The lock only hides items in the interface and does not encrypt session files on disk; dsh-workspace-sync skips hidden and locked items.
Installation
dsh plugin --profile web add github:coldrainlab/dsh-workspace-vaultREADME
dsh-workspace-vault(工作区置顶 + 任务置顶 + 隐藏空间 + 工作区加密)
给 DSH 桌面端侧栏「工作区」加四个能力:任意工作区置顶、把当前任务置顶到它所在的工作区、 密码隐藏空间(侧栏「工作区」右侧独立图标,隐藏空间的工作区不参与云同步)、 工作区加密(访问锁)(与隐藏空间共用同一个主密码)。
功能
| # | 功能 | 行为 |
|---|---|---|
| 1 | 工作区置顶 | 工作区行悬停 「…」菜单 →「置顶工作区 / 取消置顶」(新工作区同样可用);置顶后该工作区移到「工作区」列表最前,整行高亮(Endfield 下 3px 黄左条 + 淡黄渐变 + 标题提亮,普通主题用 dsw token)并带常显推钉图标徽标。顺序由宿主 workspaceRegistry 持久化,重启/刷新后仍生效;客户端发现列表顺序与 pinned 前缀不一致时会调宿主 pin-workspace {reapply:true} 自愈。 |
| 2 | 任务置顶 | 会话页头(标题右侧)新增「置顶此任务」按钮:把当前任务置顶到它所属工作区顶部。复用 DSH 原生 pinSession,原生侧栏会显示「已置顶」指示器;原生 … 菜单里的置顶/取消置顶仍然可用。 |
| 3 | 隐藏空间 | 「工作区」区头 label 与搜索图标之间一个独立盾牌图标(不占用原生 headerActions 的 60px 宽度,因此原生「+」始终可见)。首次使用需设置主密码(可绑定手机号用于找回);解锁后侧栏只显示隐藏空间里的工作区,行为与普通工作区完全一致(原生展开、会话、新建任务、重命名、删除);此时点区头「+」会走「新建隐藏工作区」而不是普通工作区。隐藏空间的工作区不参与云同步,数据只保留在本机。 |
| 4 | 工作区加密 | 工作区行悬停 「…」菜单 →「加密工作区」:输入主密码后把工作区标记为加密;加密工作区在本次页面打开期间保持锁定,其会话行不显示、行点击会要求解锁;主内容区若正打开该工作区的会话,会被锁定遮罩盖住,解锁后才显示。刷新/重启后自动重新上锁。 |
| 5 | (配套)云同步排除 | dsh-workspace-sync 自动跳过隐藏空间与加密工作区的工作区条目、会话日志;它们不会上传到云端,也不会从云端拉回。 |
安装
本插件是本地 bundle(宿主 + 浏览器两半),用 DSH 的插件管理器安装:
# 在 DSH 里让 Agent 执行(安装到当前 desktop profile),或使用 CLI:
& "D:\Program Files\Deepseek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add "C:\Users\ROG-STRIX\Documents\deepseek-harness\DSH新增功能\dsh-workspace-vault"
安装后刷新页面一次(宿主侧路由/新 bundle 只在启动或 HMR 激活时加载)。刷新方式:标题栏「重新启动」 或 F12 → DevTools(本版是独立 Developer Tools 窗口)→ 在该窗口按 Ctrl+R 重载页面(不丢会话,不影响宿主)。
- 只改浏览器半边(
lib/client.js):刷新页面即可生效。 - 改了宿主半边(
lib/index.js/ 依赖模块):页面刷新不会重载宿主;用plugin_manager set_bundle先把dsh-workspace-vault禁用再启用(无需重启整个 DSH),或在合适时机 「重新启动」DSH。
数据与文件
| 项 | 位置 |
|---|---|
| 插件状态(密码哈希/手机号哈希/三个 id 集合) | <DSH_HOME>/workspace-vault/state.json(默认 ~/.dsh/workspace-vault/state.json) |
| 隐藏空间工作区根目录 | <DSH_HOME>/hidden-space/<工作区名> |
| 隐藏模式/解锁状态 | 只在当前页面内存里;刷新即上锁 |
- 密码用
scrypt(随机盐)哈希后保存,不保存明文;手机号只保存sha256(数字)与掩码。 - 解锁令牌只存在宿主内存(30 分钟)与页面内存,不写 localStorage。
- 删除
state.json会清空密码与所有标记(隐藏工作区会重新出现在普通列表里,数据本身不删除)。
找回密码
设置密码时可以选择绑定手机号(仅本地保存哈希与掩码,用于校验)。忘记密码时在解锁框点 「忘记密码」→ 输入绑定手机号 → 校验通过后设置新密码。
注意:这是本地校验,不会发送短信。 DSH 没有短信/邮件通道,无法做真正的验证码找回; 它只是防止「不知道绑定号码的人重置密码」。如果设置密码时没有绑定手机号,忘记密码只能删除
state.json(会同时丢失隐藏/加密标记,但不会删工作区与会话)。
安全边界(必读)
- 这里的「加密」是访问锁,不是磁盘静态加密:会话日志仍是 DSH 原生明文格式,任何能读你用户目录的 程序都能读到。它解决的是「界面上被看到」与「被同步到云端」。
- 隐藏空间不是安全边界:它隐藏侧栏入口与会话行,不等于把数据从磁盘藏起来。
- 隐藏空间/加密工作区不参与云同步,但工作区目录本身里的普通文件(例如你放在网盘同步目录里的代码) 不受本插件管理。
与现有插件的兼容
- 不改写 DSH 原生工作区组件,不占用
sidebar.workspaces单槽;用shell.overlay(对话框)、conversation.session.header.actions(任务置顶按钮)与侧栏 DOM 装饰实现。 - 与
dsh-workspace-plus(自定义工作区创建、移动会话)、dsh-session-delete、dsh-endfield-theme同时安装无冲突;Endfield 主题下对话框主按钮沿用黄底黑字。 - 侧栏选择器依赖 DSH 0.2.1-rc.5 的
data-row-key与 class 片段;升级 DSH 后请重跑check-dsh-features.ps1(本项会比对关键选择器是否还能在原生客户端源码中找到)。
卸载
& "D:\Program Files\Deepseek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop remove dsh-workspace-vault
卸载不会删除 state.json 与隐藏空间目录;要彻底恢复,手动删除 <DSH_HOME>/workspace-vault/ 即可
(隐藏空间里的工作区会回到普通列表。若想连工作区一起移除,需在 DSH 里逐个删除工作区)。
测试
$node = "C:\Users\ROG-STRIX\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\node\bin\node.exe"
& $node dsh-workspace-vault\tests\host.test.mjs
& $node dsh-workspace-vault\tests\client.test.mjs
验证记录(2026-10-30,DSH 0.2.1-rc.5)
在真实桌面端(http://127.0.0.1:42612)完成以下 E2E,截图在 _verify/shots/vault-*.png 与
_audit/shots/vault-*.png:
| 项 | 结果 |
|---|---|
| 区头盾牌图标(「工作区」右侧) | 出现,位置/样式与原生图标行一致 |
| 工作区行悬停按钮 | 仅「…」菜单 / 新建会话;图钉、锁、隐藏空间状态以徽标显示;点「…」→「置顶工作区」后移到列表最前并 整行高亮,再点「取消置顶」恢复 |
| 置顶图标 | 工作区徽标、菜单项、会话页头「置顶当前任务」统一为推钉(pushpin)SVG;置顶态实心、未置顶描边,跟随主题色 |
| 工作区「…」菜单 | 点原生「…」弹出我们整合后的菜单:置顶/取消置顶、加密工作区/取消加密、移入/移出隐藏空间、重命名、删除工作区;重命名/删除行为与原生一致(删除保留文件夹与会话记录,会话归「未分组」) |
| 任务置顶按钮 | 页头「★ 置顶当前任务」→ 原生侧栏出现已置顶指示、按钮变「★ 取消置顶」;再点恢复 |
| 设置主密码 | 对话框(新密码/确认/手机号)提交后进入隐藏模式,state.json 出现 scrypt 哈希(无明文) |
| 隐藏空间 | 解锁后普通工作区全部隐藏、只剩隐藏工作区;「新建隐藏工作区」在 ~/.dsh/hidden-space/<name> 建目录并在侧栏出现;退出后普通列表恢复 |
| 忘记密码(手机号找回) | 错手机号被拒;正确手机号 + 新密码重置成功,旧密码此后被拒,新密码解锁获得 token |
| 工作区加密 | 「…」菜单 →「加密工作区」→ 主密码确认 → 工作区打上加密徽标;该工作区会话行隐藏、行点击被解锁框拦截(主内容遮罩按当前会话生效) |
| 云同步排除 | dsh-workspace-sync 单测 13 项 + 全量 84 项通过;vault client 20/20、host 21/21(隐藏 id / 加密 id / hidden-space 路径 / 拉取不写回) |
| 自检脚本 | check-dsh-features.ps1 → PASS 27 / WARN 2 / MISSING 0(新增 A 插件行、B7 用量补丁一致性、E5 vault 路由) |
验证后已清理测试数据:删除 <DSH_HOME>/workspace-vault/state.json、<DSH_HOME>/hidden-space/、测试工作区
vault-test,并把工作区顺序恢复原样;页面已重载,当前处于「首次使用」状态(点盾牌即提示设置密码)。
刷新方式(本生产版):F12 打开独立 DevTools 窗口 → 在 DevTools 窗口 Ctrl+R 重载页面;宿主与本次会话不受影响。
版本记录
0.1.0
- 工作区置顶(持久化宿主顺序 + 行内按钮 + 徽标;取消置顶回到非置顶区最前)。
- 任务置顶按钮(页头,复用原生
pinSession/unpinSession)。 - 隐藏空间:主密码(scrypt)、手机号绑定/本地找回、隐藏模式侧栏过滤、隐藏工作区创建、
隐藏工作区/会话不参与云同步(
dsh-workspace-sync配合改造)。 - 工作区加密(访问锁):与隐藏空间共用主密码;锁定期间隐藏会话行、拦截工作区行点击、主内容区遮罩。
- 所有锁定状态只存在内存,刷新即重新上锁。
0.1.0 后续修订(2026-10-30,用户反馈)
- 修复「+」新增工作区被挤出区头:盾牌图标从原生
headerActions(max-width 60px)移到 label 与搜索之间, 原生「+」与视图选项恢复;隐藏空间模式下「+」改为打开「新建隐藏工作区」。 - 置顶真正生效并高亮:整行黄左条 + 淡黄底 + 标题提亮;新工作区行同样注入图钉/菜单按钮;
客户端在列表顺序与 pinned 前缀不一致时调用
pin-workspace {reapply:true}自愈(宿主同路由支持)。 - 工作区行内「加密」「移入隐藏空间」不再作为独立悬停按钮,统一收进原生「…」位置弹出的整合菜单: 置顶/取消置顶、加密/取消加密、移入/移出隐藏空间、重命名、删除工作区;重命名/删除用自有对话框补回, 删除仍保留文件夹与会话记录(会话归「未分组」)。
- 验证:真实页面确认区头 4 图标、+创建对话框、置顶高亮、整合菜单;client tests 20/20、host 21/21。
- 追加:置顶也并入「…」菜单(移除行内独立图钉按钮,保留徽标);置顶图标优化为推钉 SVG(工作区徽标 / 菜单项 / 页头「置顶当前任务」统一),置顶态实心、未置顶描边;client tests 仍 20/20。
0.1.0 修复(2026-10-30,取消置顶后偶发自动置顶)
- 原因:取消置顶的
pin-workspace请求与装饰器发出的pin-workspace {reapply:true}可能并发;旧reapply响应晚到,会把取消前的pinnedWorkspaceIds写回客户端,表现为过一会儿又置顶。 - 修复:客户端加 pin 动作版本号;只有最新一次显式 pin/unpin 的响应能改
state.pinnedIds;reapply在 pin 请求进行中或完成 5 秒内不发送,且其响应若期间发生过 pin 动作则丢弃;loadState的旧投影也不覆盖刚完成的 pin 变化。 - 回归:新增「stale reapply response cannot undo a completed unpin」测试;client tests 21/21,host 21/21。
Ähnliche Plugins
dsh-web (dsh-task-board)
zhu1090093659/dsh-web
dsh-web (dsh-web-all)
zhu1090093659/dsh-web
dsh-TUI
ccch1mneyyy/dsh-tui
dsh-web-ui (dsh-task-board)
zhu1090093659/dsh-web-ui