dsh-sidebar-context-menu

DSH PLUGINUI 与外观

仓库 miao-ge/dsh-sidebar-context-menu

UI 与外观 未标注验证等级 安全审查:未标注 可信度:未标注 可安装插件

为 DeepSeek Harness 左侧工作区行加上右键菜单,可重命名、删除工作区,并用 VS Code 或资源管理器打开项目目录。

一句话选型结论

按资料字段整理

dsh-sidebar-context-menu 是UI 与外观类的 DSH 可安装插件,未做沙盒验证,暂无安全审查结论,列出 5 项功能,没有现成安装命令,需要按仓库 README 接入。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类UI 与外观 收录类型可安装插件 验证等级未标注验证等级 安全审查未标注
验证等级 UNKNOWN 未标注验证等级
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-05 创建于 2026-10-05
README 10.3 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
  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 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-sidebar-context-menu:给 DeepSeek Harness 侧边栏工作区行加上右键菜单

  • 工作区行右键菜单
  • 重命名与删除工作区
  • VS Code 新窗口打开
  • 资源管理器定位目录
  • 可选新标签页打开

上游标签

deepseek-harnessdsh-plugin

验证等级与安全审查

未标注验证等级
自动化流程结论,不是人工审核
验证等级未标注验证等级上游未给出验证结论,安装前请自行确认
安全审查未标注静态分析结论,未标注不代表已通过审查
仓库健康度未标注按仓库活跃度与最近更新时间给出
可信度未标注综合仓库活跃度与验证结果

选择建议

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

值得选的地方

  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 安全审查还没结论,装之前先看仓库改了什么、要什么权限。
  • 没有现成安装命令,要按仓库 README 手动接入。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在UI 与外观场景里给 DSH 补能力的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

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

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-sidebar-context-menu当前 未做沙盒验证 未标注 0 未标注 无
nuwa-skill 未做沙盒验证 未标注 3.8 万 未标注 有
awesome-dsh-plugin L4 · 沙盒安装通过 低风险 1.8 万 0.1.1-rc.2 有
deepseek-balance-whale-widget L4 · 沙盒安装通过 低风险 4,492 0.1.7-rc.2 等 2 个 有
dsh-better-sidebar L4 · 沙盒安装通过 低风险 4,112 0.1.7-rc.2 等 10 个 有
dsh-deep-whale L4 · 沙盒安装通过 低风险 2,470 未标注 有

仓库档案

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

README 全文

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

dsh-sidebar-context-menu

给 DSH 左侧菜单(工作区 / 会话列表里的「工作区行」)加一个右键菜单:

菜单项 行为
重命名 和原来「…」按钮一样,打开官方重命名对话框
删除工作区 和原来「…」按钮一样,打开官方删除确认框
使用 VS Code 打开 --new-window <路径>:新开一个窗口,不动你当前那个窗口
在资源管理器中打开 宿主执行 explorer.exe <路径>,直接进入该目录
在新标签中打开 装了 dsh-project-tabs 才出现:把该项目在新标签里打开

原来要靠 … 按钮的两项没有删掉,只是多了一个右键入口;其余是新增的。

菜单用的是 DSH 官方组件(@deepseek-ai/dsh-client-ui-primitives 的 Menu + 图标),
所以外观、键盘导航、点外部 / Esc 关闭都是原生的那一套。

安装

用 dsh 自带的插件安装器(推荐):

dsh plugin --profile desktop add dsh-sidebar-context-menu

桌面端也可以直接在界面里装:左侧栏「插件」→「添加插件」→ 填包名 → 安装 → 立即启用。

从源码装(开发用): 克隆本仓库,然后

powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\install.ps1

脚本会读本仓库 package.json 里的包名,所以两个插件仓库里是同一份脚本。
默认装进 desktop profile——桌面端(DeepSeek Harness 0.2.0 桌面版)读的就是它;
web profile 是给浏览器版 dsh web 用的。想装那边就加 -Profile web,
两边都装用 -Profile both。它是幂等的,可以反复运行。

脚本(不需要 pnpm):

  1. 在 C 盘建「发布点」\plugins\<包名>,它是指向源码目录的 junction
    —— 源码仍然是活的,改完不用重新发布;
  2. dependencies 写同盘符的相对链接 link:../../plugins/<包名>;
  3. 直接建 \node_modules\<包名> 的 junction 指向发布点;
  4. 校验链接真能解析到插件清单之后,才把包名写进 dsh.profile.bundles
    (bundle 行指向解析不到的包会让该 profile 起不来或整条 bundle 被跳过)。

然后:

  1. 重启桌面端(桌面端的 profile 是活的,开了 HMR 的话可能已经热挂上了);
  2. 页面硬刷新(Ctrl+Shift+R);
  3. 左侧工作区行上右键 → 应该看到官方样式的菜单。

卸载:.\scripts\install.ps1 -Uninstall,然后重启 + 硬刷新。

为什么不能直接 dsh plugin --profile desktop add link:H:/DSH

pnpm 10 在 Windows 上把 link: / file: 的路径当相对 profile 目录处理。profile 在 C:、
源码在 H: 时跨盘符无法表示相对路径,于是 pnpm 退化成 path.join,生成垃圾链接:

node_modules\dsh-sidebar-context-menu -> C:\Users\...\.dsh\profiles\desktop\H:\DSH   ← 不存在

所以本脚本先把源码「代理」到 C 盘的 \plugins\...(junction → 源码目录),
再用同盘符的相对链接。脚本自己建 junction,连 pnpm 都不用跑。

0.2.0 兼容性(和 0.1.7 的差异)

对着 0.2.0 的 dsh-client-ui-workspace/lib/client.js 核对过,原来那套识别逻辑没变:

依赖点 0.2.0
ProjectRowItem 的 props {group, actions} 签名一致(:1270),调用点 :2509-2539 形状不变
actions = {rename, delete} 只对真实工作区存在 仍在 :2529(未分组行 workspaceId 和 actions 双双为 undefined)
group.workspaceId / cwd / label 仍在(buildGroup :395,cwd = workspace.path)
宿主 ctx.webServer.register({kind:'prefix',path,handler}) 契约不变,handler 仍独占 response(dsh-host-webserver/lib/index.js:177)
桌面端的 loopback 围栏 桌面代理转发任意方法/body 并删掉 origin 头(lib/main.js:7461-7492),围栏照旧通过

0.2.0 顺手用上的两个新东西:

  • 工作区行多了 data-row-key="workspace:"(:1287),做一个廉价前置过滤:
    右键落在 data-row-key 不是 workspace: 前缀的行上(比如会话行)直接放行,不做 fiber 回溯;
  • 客户端 bundle 可以直接 require 平台静态模块表里的官方组件,菜单因此换成了 Menu。

打开方式踩过的坑(宿主半边,仍然有效)

  • 资源管理器点了没反应:spawn 里带 windowsHide: true 会给子进程
    STARTF_USESHOWWINDOW | SW_HIDE,explorer.exe 会把窗口真建成隐藏的。不要加这个选项。
  • VS Code 顶掉当前窗口:vscode://file/... 走 VS Code 自己的 URL 处理器,默认沿用当前窗口;
    改成 CLI Code.exe --new-window。
    另外 PATH 上的第一个 code.cmd 很可能是 Cursor 的,所以启动器按这个顺序找:
    DSH_SCM_VSCODE 环境变量 → 注册表 HKCR\vscode\shell\open\command 里的 Code.exe
    (本机是 D:\Program Files\Microsoft VS Code\Code.exe)→ 常见安装目录 → PATH。
  • 排查:点击后浏览器 F12 会打印宿主实际用的命令,例如
    [dsh-sidebar-context-menu] vscode -> vscode-cli D:\Program Files\Microsoft VS Code\Code.exe。
    想换成 Cursor / Windsurf:设 DSH_SCM_VSCODE=<它的 exe 或 code.cmd 路径>,重启桌面端 / dsh web。

> 0.2.0 自带 dsh-host-open-in-app(POST /open-in-app/open,目录里就有 vscode 和 explorer),
> 理论上可以复用。之所以没用:它不带 --new-window(会顶掉你当前的 VS Code 窗口),
> 而且 explorer 是 /select,(在父目录里选中文件夹)而不是直接进目录。

DSH 自己的工作区 / 归档语义(跟插件无关,但容易踩)

数据都在 ~/.dsh/storages/workspace.json:

{ "global": { "workspaceIds": ["..."], "archivedSessionIds": ["..."] },
"tables": { "workspaces": { "": { "path": "...", "title": "...", "sessionIds": ["..."] } } } }
  • 删除工作区 = 只删登记行(tables.workspaces. + global.workspaceIds 里的 id)。
    目录和会话日志都不动,会话掉进「未分组」。找回:重新添加同一目录建工作区,
    再把老会话拖进那个分组(UI 支持拖拽 → insertSessionBefore)。
  • 归档会话 = 把 id 加进 global.archivedSessionIds(全局列表)。数据都在:
    从数组里删掉 id(重启 + 硬刷新)就回到原分组,位置也不变。
  • 归档 不省空间。会话日志在 ~/.dsh/sessions/<路径转义>//session.jsonl.zstd;
    要省空间只能删这些目录,删了历史就真没了。

文件

package.json               DSH 插件清单(dsh.bundle.patch + dsh.client)
cordis.patch.yml           bundle patch:把本插件的一行插进 profile 插件树
lib/index.js               宿主半边:POST /dsh-sidebar-context-menu/open
lib/client.js              客户端半边:右键拦截 + 官方 Menu(无需打包)
scripts/install.ps1        安装 / 卸载(发布点 + junction + bundles + 校验)
scripts/smoke-test.mjs     客户端离线冒烟测试
scripts/host-test.mjs      宿主半边离线测试

配套的另一个插件(窗口顶部的项目标签栏)在
dsh-project-tabs 仓库里。

原理(为什么这么写)

  • 左侧菜单内容由内置包 @deepseek-ai/dsh-client-ui-workspace 渲染。0.2.0 里
    sidebar.workspaces 是 single 插槽且已被占用,它下面的
    sidebar.workspaces.session.menu.item / sidebar.session.row.action 全是按会话的
    (owner props 是 {sessionId, displayTitle}),没有任何「工作区行」的菜单插槽。
    而那个包是编译产物(只有 lib/client.js),改它又会被升级覆盖。所以这里改用事件层介入:
    1. 在 window 上挂 contextmenu 监听(捕获阶段)。
    2. 用 data-row-key 做一次廉价前置过滤(非 workspace: 前缀直接放行)。
    3. 命中目标时用 React fiber(DOM 节点上的 __reactFiber$ 键)向上找到
    ProjectRowItem 的 props —— actions = { rename, delete } 只对真实工作区存在,是最稳的特征。
    4. 从 group 拿 workspaceId / cwd / label,从 actions 复用官方的重命名 / 删除。
    5. 找不到工作区行就完全不拦截,不影响页面上其它任何右键。
  • 菜单本体是官方 Menu 组件,而右键是命令式的,所以按需 createRoot 一个小 React 根,
    关掉时 unmount() + 摘掉容器(Menu 自己处理定位、夹取、键盘导航、点外部 / Esc 关闭)。
  • 「打开资源管理器 / VS Code」浏览器做不到,所以走宿主:
    lib/index.js 注册 POST /dsh-sidebar-context-menu/open,用
    explorer.exe / rundll32.exe url.dll,FileProtocolHandler vscode://file/ detached 拉起,
    请求只接受本机 loopback(同源)调用。
  • 「在新标签中打开」走另一个插件提供的客户端服务 projectTabs,读的时候
    ctx.get('projectTabs') ?? window.__DSH_PROJECT_TABS__,没装就整项不显示。

测试

node scripts\smoke-test.mjs   # 客户端:加载 bundle、fiber 识别、菜单、动作分发
node scripts\host-test.mjs    # 宿主:URL 构造、loopback 围栏、请求校验

两个都是离线的(不需要浏览器 / 联网 / 安装 React),DOM 借本机 DSH 安装里的
@mixmark-io/domino(也可用环境变量 DSH_DOMINO 指定)。

已知限制

  • 只在浏览器端那个 Web 客户端里生效(桌面端也是它)。VSCode 扩展
    mrtsels.dsh-for-vs-code 自带一份打包好的客户端 UI,不读 profile 里的插件。
  • 依赖 React 18/19 在宿主节点上挂 __reactFiber$ 这一事实;DSH 大版本升级后如果识别不到,
    右键会安静地不生效(不会报错、不会影响其它功能),届时需要按新结构复查 resolveWorkspaceRow。
  • 升级 / 重装 DSH、profile 被重置、或桌面端走了「禁用所有插件」的恢复流程后,
    dsh.profile.bundles 会丢,重跑一次 install.ps1 即可。
  • 仓库目录移动后 junction 会失效,重跑 install.ps1 会重建。
  • 未分组(Ungrouped)那一段没有工作区实体,右键不会弹菜单(符合预期)。

常见问题

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

本站没有抓到该条目的安装命令,请到仓库主页确认安装方式;这类条目多数是生态应用或尚未发布安装包的项目。

dsh-sidebar-context-menu 的验证等级是什么意思?

未标注验证等级。上游未给出验证结论,安装前请自行确认

dsh-sidebar-context-menu 安全吗?

未标注。

dsh-sidebar-context-menu 装之前要先确认什么?

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

dsh-sidebar-context-menu 用的是什么许可证?

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

dsh-sidebar-context-menu 有哪些功能?

工作区行右键菜单、重命名与删除工作区、VS Code 新窗口打开、资源管理器定位目录、可选新标签页打开。

这条记录的数据可靠吗?

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

UI 与外观
按星标排序,可作替代方案

nuwa-skill

nuwa-skill

女娲 DSH plugin 只需输入一个名字,就自动调研、提炼并验证任何人的心智模型、决策启发式与表达 DNA,生成可直接调用的思维视角 S

未标注验证等级 3.8 万 星

awesome-dsh-plugin

awesome-dsh-plugin

A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harnes

L4 · 沙盒安装通过 1.8 万 星

deepseek-balance-whale-widget

DeepSeek-Balance-Whale-Widget

DSH 界面右下角的常驻小鲸鱼余额挂件,实时显示 DeepSeek 账户余额、今日已用与每轮对话消耗,支持拖拽吸附、Q 弹动画与音效,开箱即

L4 · 沙盒安装通过 4,492 星

dsh-better-sidebar

DSH-better-sidebar

面向 DeepSeek Harness 的服务化侧边栏工作台插件,把文件编辑、终端、Git 变更、子代理任务与侧边对话整合进右侧栏与底部面板

L4 · 沙盒安装通过 4,112 星

dsh-deep-whale

dsh-deep-whale

DSH Web 鲸鱼娘皮肤系列(深海女仆工坊 maid-atelier)。

L4 · 沙盒安装通过 2,470 星

deepseek-design

deepseek-design

可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。

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

miao-ge 的其它插件

1 个

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