前言¶
在 DSH 里,侧栏按工作区文件夹组织会话。多人共用一台机器、或偶尔把界面留给别人看时,某个文件夹里的对话可能被随手点开。逐个会话加锁既没有统一入口,也和「整夹保密」的需求对不上。社区插件 dsh-workspace-lock(维护者 sgeerwang-hub)针对的是:按工作区文件夹上锁——锁上后侧栏收起该文件夹、其下会话整批隐藏,锁/解锁集中在「工作区锁」面板;支持总密码、自动重新上锁,以及 QQ 邮箱找回。下面介绍它做什么、如何安装使用,以及能力边界。
这是什么¶
dsh-workspace-lock 是 DSH 的 web profile 插件,分类为 admin-security。它给工作区文件夹加一道界面密码锁,不是磁盘加密:锁定后 DSH 里看不见也进不去该文件夹下的会话,但本机其他程序、命令行、备份仍能读到明文——防的是别人随手点开你的 DSH。
当前 npm/GitHub 包版本为 0.2.0,许可证 MIT,要求 Node ≥ 20。宿主端仅使用 Node 内置模块(crypto / fs / os / path / tls),无原生依赖,也不需要外部服务。
核心功能¶
按文件夹锁定,而非逐个会话¶
锁定对象是整个工作区文件夹。一锁上,侧栏里该文件夹立刻收起,里面的会话行整批隐藏——看不见、点不开。锁/解锁都在「工作区锁」面板完成;没有「一次一次弹密码页」的逐个会话锁。
面板里每个文件夹一行,对应三种操作:
- 锁定
- 解锁(只在本页):仅当前页面有效,刷新后重新锁
- 解除锁定(永久,需要密码):从状态文件删掉该路径,才是真正解除
总密码与自动上锁¶
工作区使用统一的总密码。默认 15 分钟无操作自动重新上锁,可在面板修改;设为 0 表示不自动锁。
QQ 邮箱找回¶
忘记密码时,可配置 QQ 邮箱收验证码重置。需在 QQ 邮箱设置里开启 POP3/SMTP 并生成授权码(不是登录密码)。改找回邮箱需要总密码,避免他人把自己的邮箱填进面板后走找回流程换掉锁。
验证码为 6 位、10 分钟有效、最多试 5 次。锁定页也有「忘记密码?用邮箱找回」,不必先退回面板。
侧栏行为与技术落点¶
DSH 侧栏浏览区只给插件留了会话行插槽,没有文件夹行插槽,也没有「隐藏某工作区会话」的官方钩子。因此收起文件夹、隐藏会话行部分需贴近 DOM:根据插槽 props 算出锁定路径下的会话与工作区,用样式表隐藏 [data-row-key="session:<id>"] 的行,并折叠、拦截文件夹行点击。DSH 升级若改了侧栏 DOM 结构,最坏情况是「不再收起」或「照旧显示」,而不是直接报错。
插件在 Cordis 中的主要落点包括:sidebar.panellist(锁图标与面板入口)、main(ws-lock,清单与密码配置)、conversation.input.dock(报告当前会话目录)、shell.overlay(全屏密码页兜底,例如从 Hero 新建会话进入锁定文件夹)。
宿主 API 与状态文件¶
状态默认写在 $DSH_HOME/workspace-lock/state.json(未设置 DSH_HOME 时为 ~/.dsh),文件权限 0600。密码只存 scrypt 派生值;SMTP 授权码同在状态文件中,不回传页面。
常用 HTTP 接口(节选):
GET /api/ws-lock/statePOST /api/ws-lock/password{current?, next}POST /api/ws-lock/verify{path, password}POST /api/ws-lock/toggle{path, locked, password?}(locked:false为永久解除,需密码)POST /api/ws-lock/config{autoLockMinutes?, email?, smtpAuthCode?}POST /api/ws-lock/recover/request、POST /api/ws-lock/recover/verify{code, next}
可在 cordis.patch.yml 中为插件配置 config.statePath 改状态文件路径,例如:
- id: dsh-workspace-lock
config:
statePath: /opt/dsh/workspace-lock/state.json
安装与启用¶
安装任选其一(命令来自仓库 README):
# 从 npm 安装
dsh plugin --profile web add dsh-workspace-lock
# 或者直接从 GitHub 源码安装
dsh plugin --profile web add github:sgeerwang-hub/dsh-workspace-lock
装完后重启 dsh web:宿主端代码必须重启才生效;浏览器端模块可热替换,但宿主模块在重启前会继续跑旧代码。重启后左侧侧栏出现锁图标,点开即为「工作区锁」面板。
DSH 生态里插件通过 profile 装配;社区目录在 skillhub.cn,与 DeepSeek / 幻方无官方从属关系,安装前建议自行查看源码与许可证。插件以当前 dsh 进程权限运行。
典型用法¶
- 安装并重启
dsh web,侧栏打开「工作区锁」。 - 设置总密码;按需调整自动锁分钟数(0 = 不自动锁)。
- 在文件夹列表中对目标工作区点 锁定。
- 需要暂时查看时在本页 解锁;要长期去掉锁选 解除锁定(永久) 并输入密码。
- 若使用邮箱找回:在面板填写 QQ 邮箱与 SMTP 授权码,先点「发一封测试邮件」确认链路。
未配置邮箱又忘记密码¶
锁屏和面板都进不去时,只能停掉 DSH,编辑 ~/.dsh/workspace-lock/state.json,删掉 password 与 lockedPaths(或直接删除整个文件),再启动。「只在本页解锁」本就只存在浏览器内存,刷新也会回到锁定。
适用场景与注意¶
适合:同一 DSH 实例里有多块工作区,其中一部分对话不想被旁人从 UI 直接看到;需要文件夹级隐藏 + 统一密码 + 可选自动重锁。
务必知晓:
- 这是门禁,不是全盘或目录级加密;有文件系统权限的其他工具仍能读取工作区文件。
- 忘记密码且未配邮箱时,只能按上文手动清理状态文件。
- 修改宿主侧代码后同样需要重启
dsh web才生效。
结尾¶
dsh-workspace-lock 把「整夹上锁、侧栏收起、会话隐藏」收到一个面板里,并补上自动重锁与 QQ 邮箱找回,适合在共享或临时离席场景下降低 DSH 界面上的误触风险。