🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

工作区隐身 adamcjm/dsh-workspace-visibility

DeepSeek Harness
adamcjm14 天前有提交已提供中文文档扫描:含敏感能力

隐藏指定工作区及其会话,随时一键恢复显示

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add adamcjm/dsh-workspace-visibility
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 11 处,展示前 11 条)
  • 读取本地文件
    lib/index.js:184
    const info = await stat(file)
  • 读取本地文件
    lib/index.js:192
    const raw = await readFile(file, 'utf8')
  • 读取本地文件
    lib/index.js:259
    const info = await stat(file)
  • 读取本地文件
    lib/index.js:261
    const raw = await readFile(file, 'utf8')
  • 读取本地文件
    lib/index.js:285
    const info = await stat(lockFile)
  • 删除本地文件
    lib/index.js:287
    await unlink(lockFile).catch(() => {})
  • 删除本地文件
    lib/index.js:300
    try { await unlink(lockFile) } catch (error) { }
  • 读取本地文件
    lib/index.js:311
    const info = await stat(file)
  • 写入本地文件
    lib/index.js:340
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    lib/index.js:342
    await writeFile(tmp, snapshot, { mode: 0o600 })
  • 写入本地文件
    lib/index.js:343
    await rename(tmp, file)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

在 DSH 侧边栏隐藏选中的工作区及其所属会话,视图选项里提供「显示隐藏工作区」开关。仅影响显示,不改动任何数据。

README

由 DeepSeek 最新模型翻译生成
@adamcjm/dsh-workspace-visibility 一个 DeepSeek Harness 插件:把选中的工作区从侧边栏隐藏,需要时再放出来。不归档、不删除、不重命名、不改写任何工作区或会话数据。 两个入口都在你原本就要找的位置: 1. 工作区行 →「…」菜单 → 隐藏工作区(在「显示隐藏工作区」打开时,这一项变为 取消隐藏工作区)。 2. 侧栏「WorkSpaces」区头 → 视图选项 → 显示隐藏工作区 (N) —— 一个持久化开关,打开后隐藏行重新出现,可逐行恢复;括号里是当前隐藏的工作区数量。 设计上只做显示过滤: - 不调用归档 / 取消归档 / 重命名 / 移动 / pin / 删除; - 不改工作区记录、会话日志与归档集合; - 唯一写入是 Host 上的一个小文件($DSH_HOME/storages/workspace-visibility.json)。 截图 | 工作区行「…」菜单 | 视图选项菜单 | | 工作区菜单里的「隐藏工作区」 | 视图选项里的「显示隐藏工作区」 | 隐藏后,该工作区行连同它名下的会话一起消失: 隐藏工作区后的侧栏与底部隐藏计数入口 截图使用演示用的工作区名称;本节使用中文界面(英文节为同一流程的英文界面截图)。
展开完整文档(README 剩余 1 节)
@adamcjm/dsh-workspace-visibility

一个 DeepSeek Harness 插件:把选中的工作区从侧边栏隐藏,需要时再放出来。不归档、不删除、不重命名、不改写任何工作区或会话数据。

两个入口都在你原本就要找的位置:

1. 工作区行 →「…」菜单 → 隐藏工作区(在「显示隐藏工作区」打开时,这一项变为 取消隐藏工作区)。
2. 侧栏「WorkSpaces」区头 → 视图选项 → 显示隐藏工作区 (N) —— 一个持久化开关,打开后隐藏行重新出现,可逐行恢复;括号里是当前隐藏的工作区数量。

设计上只做显示过滤:

- 不调用归档 / 取消归档 / 重命名 / 移动 / pin / 删除;
- 不改工作区记录、会话日志与归档集合;
- 唯一写入是 Host 上的一个小文件($DSH_HOME/storages/workspace-visibility.json)。

截图

| 工作区行「…」菜单 | 视图选项菜单 |
| 工作区菜单里的「隐藏工作区」 | 视图选项里的「显示隐藏工作区」 |

隐藏后,该工作区行连同它名下的会话一起消失:

隐藏工作区后的侧栏与底部隐藏计数入口

截图使用演示用的工作区名称;本节使用中文界面(英文节为同一流程的英文界面截图)。

持久化与多客户端同步

隐藏集合与「显示隐藏工作区」开关是 Host 状态,不是浏览器状态:

- 它们存在 $DSH_HOME/storages/workspace-visibility.json,由本插件的 Host 半侧原子写入(临时文件 + rename)。
- 浏览器不保留副本——本插件不读写 localStorage(0.1.x 用户的旧键会被删除一次,旧数据直接丢弃、不做迁移)。
- 浏览器启动时拉取一次状态,随后跟随 SSE 流(/workspace-visibility/stream):任一客户端里的变更会被推送给所有已连接客户端——Desktop、其它标签页、其它浏览器——无需刷新。这与官方工作区排序的 workspace/follow 推送模型一致。
- 本地变更以增量方式发送(POST /workspace-visibility/mutate),两个客户端隐藏不同工作区时不会互相覆盖。
- 结果:状态能跨 Desktop 重启与随机端口保留;连接同一个 Host 的所有客户端看到同一份隐藏集合;连接不同 Host(或不同 DSH_HOME)的客户端各有自己的状态。
- 跨 DSH 界面(Desktop ↔ web)。 DSH Desktop 与 dsh web 是两个独立的 Host 进程,但共享同一个 $DSH_HOME。两个进程都会监听共享状态文件:一方写入后,另一方会在 1 秒内读到并广播给自己已连接的客户端;同时写入走跨进程锁 + read-modify-write,所以 Desktop 里隐藏一个工作区,打开的 web 界面会跟着变,反之亦然,双方都不会覆盖对方的改动。

Profile 与 Host

状态路径由 $DSH_HOME 决定,与 profile 无关——所以当 desktop profile 与 web profile 使用同一个 DSH_HOME 时,它们共享同一份状态文件。具体来说:

- 同一个 DSH_HOME(同一台机器上的默认 ~/.dsh)——DSH Desktop、dsh web、 desktop profile、web profile 任意组合都共享一份隐藏集合;更新在 1 秒内到达:同一个 Host 内走 SSE 推送,Desktop Host 与 dsh web Host 之间走跨进程文件监听。
- 不同的 DSH_HOME(另一台机器、自定义 DSH_HOME、远程 Host)——各自拥有独立的状态文件与隐藏集合。没有跨机器同步:插件只把状态存在本地,不调用任何网络服务。
- 没装本插件的 profile(例如只有 TUI 的 profile)不受影响,照旧显示所有工作区。
状态文件与 profile 无关,之后在那边装上插件会直接读到同一份隐藏集合,无需迁移。
- 远程浏览器访问正在运行的 Host 时,共享的是那个 Host 的状态——浏览器半侧只跟它连接的 Host 通信,状态由 Host(及其 DSH_HOME)决定。

容错

状态按不可信输入处理,插件不会把 Host 弄崩:

- 状态文件缺失、不可读、损坏或异常过大(> 1 MiB)时按空状态处理并记录日志,不抛错;
- 非字符串条目直接丢弃;id 列表去重并有上限;
- 工作区被删除后,它对应的隐藏记录会被自动清理(加载时、每次读取时、以及每分钟一次),针对未知工作区的隐藏请求会被忽略——已删除的工作区不会留下失效记录;
- 工作区 registry 不可用时保留原状态、不做清理,也不报错;
- 写入失败(目录只读、磁盘满)时保留内存状态、记录警告,请求仍然正常返回;
- 浏览器侧同步失败会排队重试,SSE 流自动重连,解析失败的帧直接忽略。

从 0.1.x 升级

旧 localStorage 键(dsh-workspace-visibility.state.v1)由 Host 的 legacyCleanupDone 标记驱动、只删除一次。不做迁移:0.1.x 里隐藏的工作区在升级后会重新显示。

安装

要求 DeepSeek Harness 0.2.0-rc.2 或更新版本(已在 0.2.0-rc.2 与 0.2.1-rc.2 验证)。

从 npm(推荐)

dsh plugin --profile <profile> add @adamcjm/dsh-workspace-visibility

dsh plugin add 会把依赖与 bundle 条目一起写进 profile 并完成安装,然后:

1. 重启 DSH 应用 —— Host 插件树在进程启动时组装。
2. 强制刷新页面(Cmd/Ctrl+Shift+R),让渲染端加载新的 client bundle。

等价的纯手动配置 —— ~/.dsh/profiles/<profile>/package.json:

{
"dependencies": {
"@adamcjm/dsh-workspace-visibility": "^0.1.0"
},
"dsh": {
"profile": {
"bundles": ["…", "@adamcjm/dsh-workspace-visibility"]
}
}
}

然后 cd ~/.dsh/profiles/<profile> && pnpm install,重启 DSH,刷新页面。

如果该 profile 启用了 pnpm 的 minimumReleaseAge,刚发布的版本可能被拒绝;把包名加入该 profile 的 pnpm-workspace.yaml 的 minimumReleaseAgeExclude(较新的 pnpm 会自动处理)。

从 GitHub Release 安装(钉住 tag)

dsh plugin --profile <profile> add https://codeload.github.com/adamcjm/dsh-workspace-visibility/tar.gz/refs/tags/v0.1.0

日常使用请钉住验证过的 tag 或 commit,不要跟随 main。

本地开发(link:)

把 profile 指向本地 checkout,改完代码重启即可生效,不需要重新安装:

// ~/.dsh/profiles/<profile>/package.json
{
"dependencies": {
"@adamcjm/dsh-workspace-visibility": "link:/absolute/path/to/dsh-workspace-visibility"
},
"dsh": {
"profile": {
"bundles": ["…", "@adamcjm/dsh-workspace-visibility"]
}
}
}

cd ~/.dsh/profiles/<profile> && pnpm install

link: 安装出来的是符号链接,之后改 lib/client.js 只需重启 Host + 刷新页面,不用重装。

使用

1. 悬停任意工作区行,打开「…」菜单 → 隐藏工作区。
该工作区行连同它名下的会话一起从侧边栏消失。
2. 打开「WorkSpaces」区头的 视图选项(滑块图标)→ 显示隐藏工作区。
隐藏行重新出现,带淡化 + 斜体标记。
3. 打开被显示行的「…」菜单 → 取消隐藏工作区,永久恢复。

「显示隐藏工作区」打开期间再隐藏另一个工作区,会立刻隐藏它并自动关掉这个开关,保证“隐藏”动作总是立即生效。

开关状态与隐藏集合存放在 localStorage 的 dsh-workspace-visibility.state.v1 (与官方视图选项同级别)。清掉这个键即全部恢复。

为什么这样做

官方侧边栏(@deepseek-ai/dsh-client-ui-workspace)只给会话行菜单和会话行按钮暴露了 slot;工作区行的「…」菜单和视图选项菜单都是硬编码数组,没有扩展点。因此两个入口以 DOM 方式追加进对应菜单,并克隆官方菜单项自己的 class,样式跟随官方。

隐藏本身不碰行 DOM:插件包装 workspaces.list 客户端模型(getSnapshot / subscribe,官方侧边栏本来就是懒读这个缝),投影一份过滤后的快照。侧边栏、搜索、Hero 工作区选择器在同一处失去该工作区,菜单 DOM 变化也不影响隐藏效果。

投影里解决的一个坑:官方分组会把“不属于任何可见工作区”的会话收进 「未分组」。
如果只把工作区从 items 里删掉,它名下的会话会全部漏进未分组。投影改为把这些会话作为 仅视图层的已归档 id 合并进归档集合,官方归档过滤器自然把它们藏起来 —— 不写 Host 归档、不丢数据。

范围与已知限制

- Host 状态,同一 Host 上的所有客户端共享。 隐藏集合与开关存在 $DSH_HOME/storages/workspace-visibility.json;连接同一个 Host 的浏览器、标签页、 Desktop 与 web 界面看到同一份集合,跨 Desktop 重启与随机端口保留,清站点数据也不会丢。
连接不同 Host(或不同 DSH_HOME)的客户端各有自己的状态。
- 两个菜单项是 DOM 追加的。 未来侧边栏改版可能移动菜单;隐藏本身不受影响(走数据投影)。
如升级后菜单项消失,隐藏集合仍在 Host 状态文件里,重装或升级插件后菜单即恢复。
- 隐藏工作区的展开状态会丢。 官方视图 store 会清理“看不见的工作区”的展开记录,恢复后该组默认折叠。
- 正在使用的工作区也可以隐藏。 侧栏行与该组会话消失,主视图里正在进行的对话不受影响;用开关把行找回来即可。
- 与归档视图的交互。 切到官方的「全部对话(显示已归档)」时,被隐藏工作区的会话会以已归档行出现在「未分组」(投影把它们标成了视图层已归档)。默认的「隐藏已归档」视图不受影响。
- 不属于工作区注册表。 状态文件归本插件所有;未安装本插件的 TUI 会话或另一套 DSH 安装照旧看到全部工作区。

验证

离线契约自检(不需要 DSH 进程):

npm test

npm test 跑两个零依赖测试套件。浏览器套件在 vm 沙箱里加载 lib/client.js:加载器契约、快照投影(含“不漏进未分组”)、内存 store、bootstrap/SSE/增量同步、包装与卸载、完整
apply()。Host 套件对着 fake web server 驱动 lib/index.js:原子写入、增量、SSE 广播、
重启后重新加载、损坏文件容错。

在真实页面中(重启 DSH 后):

// 插件已加载
document.getElementById('dsh-workspace-visibility/style') !== null
// 页面 console:状态由 Host 提供,不在 localStorage
await (await fetch('/workspace-visibility/state')).json()

Host 命令行:

cat "${DSH_HOME:-$HOME/.dsh}/storages/workspace-visibility.json"

卸载

1. 卸载前先打开「显示隐藏工作区」把隐藏项恢复(或直接卸载——隐藏 id 会变成惰性数据)。
2. 从 profile 的 dependencies 与 dsh.profile.bundles 中移除,pnpm install,重启 DSH。
3. 可选:删除 Host 状态文件 $DSH_HOME/storages/workspace-visibility.json(若想保留恢复能力,先打开「显示隐藏工作区」逐项取消隐藏)。

目录结构

lib/client.js 浏览器半侧:投影、菜单、兜底入口(零构建) lib/index.js host 半侧:仅占位挂载 cordis.patch.yml bundle 层,插入单个插件行 locale/*.json 插件管理器的标题/描述 icon.svg 插件图标 test/verify.mjs 零依赖自检(npm test)

许可

MIT © adamcjm
预览分享卡片长什么样 ↓adamcjm/dsh-workspace-visibility
分享 · DeepSeek Harness Hub
adamcjm/dsh-workspace-visibility

隐藏指定工作区及其会话,随时一键恢复显示

这是你的仓库?认领条目

回到顶部